diff --git a/build.gradle b/build.gradle
index 6446da4044..3580cbae0d 100644
--- a/build.gradle
+++ b/build.gradle
@@ -64,7 +64,7 @@ allprojects {
implementation 'org.swingexplorer:swexpl:2.0.1'
implementation 'org.swingexplorer:swag:1.0'
implementation 'net.java.dev.jna:jna:5.4.0'
- implementation 'org.apache.tomcat:tomcat-catalina:8.5.32'
+ implementation 'org.apache.tomcat:tomcat-catalina:8.5.57'
implementation 'io.socket:socket.io-client:0.7.0'
implementation 'com.fr.third:fine-third:' + frVersion
implementation 'com.fr.core:fine-core:' + frDevVersion
@@ -73,6 +73,7 @@ allprojects {
implementation 'com.fr.decision:fine-decision:' + frVersion
implementation 'com.fr.schedule:fine-schedule:' + frVersion
implementation 'com.fr.report:fine-report-engine:' + frDevVersion
+ implementation 'com.fr.design:design-i18n:' + frDevVersion
testImplementation 'org.easymock:easymock:3.5.1'
testImplementation 'org.powermock:powermock-module-junit4:1.7.1'
testImplementation 'org.powermock:powermock-api-easymock:1.7.1'
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 88d2625d02..c6488d3300 100644
--- a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java
+++ b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java
@@ -163,7 +163,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter {
* alphafine
*/
private AlphaFineConfigManager alphaFineConfigManager = AlphaFineConfigManager.getInstance();
-
+
/**
* 阅后即焚的配置项
*/
@@ -218,14 +218,9 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter {
if (needCheckEnv) {
checkNameEnvMap();
}
-
- GeneralContext.addEnvChangedListener(new EnvChangedListener() {
- @Override
- public void envChanged() {
-
- designerEnvManager.setCurrentDirectoryPrefix(FILEFactory.ENV_PREFIX);
- designerEnvManager.setDialogCurrentDirectory(ProjectConstants.REPORTLETS_NAME);
- }
+ GeneralContext.addEnvChangedListener(() -> {
+ designerEnvManager.setCurrentDirectoryPrefix(FILEFactory.ENV_PREFIX);
+ designerEnvManager.setDialogCurrentDirectory(ProjectConstants.REPORTLETS_NAME);
});
}
@@ -423,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;
}
@@ -1424,7 +1408,9 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter {
* @return
*/
private Locale checkLocale(Locale locale) {
- return SupportLocale.getInstance().isSupport(locale) ? locale : Locale.US;
+ // Yvan: REPORT-39341,有一些情况下,获取到的是zh-Hans-CN这种,需要找到项目中最匹配的Locale
+ return SupportLocale.getInstance().isSupport(locale) ?
+ locale : SupportLocale.getInstance().getSuitableLocale(locale);
}
private void readReportLengthUnit(XMLableReader reader) {
@@ -1475,7 +1461,10 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter {
}
public String getUUID() {
- return StringUtils.isEmpty(uuid) ? UUID.randomUUID().toString() : uuid;
+ if (StringUtils.isEmpty(uuid)) {
+ uuid = UUID.randomUUID().toString();
+ }
+ return uuid;
}
public int getActiveKeyStatus() {
@@ -1578,7 +1567,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter {
}
}
}
-
+
private void readSnapChatConfig(XMLableReader reader) {
reader.readXMLObject(this.snapChatConfig = SnapChatConfig.getInstance());
}
@@ -1801,14 +1790,14 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter {
writeSnapChatConfig(writer);
writer.end();
}
-
+
private void writeSnapChatConfig(XMLPrintWriter writer) {
-
+
if (this.snapChatConfig != null) {
this.snapChatConfig.writeXML(writer);
}
}
-
+
private void writeAlphaFineAttr(XMLPrintWriter writer) {
if (this.alphaFineConfigManager != null) {
this.alphaFineConfigManager.writeXML(writer);
@@ -2015,11 +2004,13 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter {
private void writeHttpsParas(XMLPrintWriter writer) {
writer.startTAG(CAS_PARAS);
+ // 这边的密钥path和password没有用处了 当前已经全部储存在对应的WorkspaceConnectionInfo中
+ // 把历史遗留保存的全部置为空 防止显示明文密钥 后面删除 todo
if (StringUtils.isNotBlank(certificatePath)) {
- writer.attr(CAS_CERTIFICATE_PATH, certificatePath);
+ writer.attr(CAS_CERTIFICATE_PATH, StringUtils.EMPTY);
}
if (StringUtils.isNotBlank(certificatePass)) {
- writer.attr(CAS_CERTIFICATE_PASSWORD, certificatePass);
+ writer.attr(CAS_CERTIFICATE_PASSWORD, StringUtils.EMPTY);
}
if (isHttps) {
writer.attr("enable", true);
diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java
index 0ccb5d3e7b..5afe58ad30 100644
--- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java
+++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java
@@ -20,6 +20,7 @@ import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.iprogressbar.UIProgressBarUI;
import com.fr.design.gui.ispinner.UISpinner;
import com.fr.design.gui.itextfield.UITextField;
+import com.fr.design.jdk.JdkVersion;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
@@ -39,6 +40,7 @@ import com.fr.general.log.Log4jConfig;
import com.fr.locale.InterProviderFactory;
import com.fr.log.FineLoggerFactory;
import com.fr.stable.Constants;
+import com.fr.stable.StableUtils;
import com.fr.stable.os.OperatingSystem;
import com.fr.third.apache.log4j.Level;
import com.fr.transaction.Configurations;
@@ -216,7 +218,7 @@ public class PreferencePane extends BasicPane {
oracleSpace = new UICheckBox(i18nText("Fine-Design_Basic_Show_All_Oracle_Tables"));
oraclePane.add(oracleSpace);
- if (!OperatingSystem.isLinux()) {
+ if (!OperatingSystem.isLinux() && JdkVersion.LE_8.support()) {
JPanel upmSelectorPane = FRGUIPaneFactory.createTitledBorderPane(i18nText("Fine-Design_Basic_Update_Plugin_Manager"));
useOptimizedUPMCheckbox = new UICheckBox(i18nText("Fine-Design_Basic_Use_New_Update_Plugin_Manager"));
upmSelectorPane.add(useOptimizedUPMCheckbox);
diff --git a/designer-base/src/main/java/com/fr/design/constants/UIConstants.java b/designer-base/src/main/java/com/fr/design/constants/UIConstants.java
index 15a7c87c08..93dc57a8f4 100644
--- a/designer-base/src/main/java/com/fr/design/constants/UIConstants.java
+++ b/designer-base/src/main/java/com/fr/design/constants/UIConstants.java
@@ -37,7 +37,7 @@ public interface UIConstants {
public static final Image APPFIT_H3 = IOUtils.readImage("/com/fr/design/images/dialog/appfit/H3.png");
public static final Image APPFIT_H4 = IOUtils.readImage("/com/fr/design/images/dialog/appfit/H4.png");
- public static final Border CELL_ATTR_ZEROBORDER = BorderFactory.createEmptyBorder(0, 0, 0, 0);
+ public static final Border CELL_ATTR_ZEROBORDER = BorderFactory.createEmptyBorder(0, 1, 0, 0);
public static final Border CELL_ATTR_EMPTYBORDER = BorderFactory.createEmptyBorder(0, 10, 0, 0);
public static final Border CELL_ATTR_PRESENTBORDER = BorderFactory.createEmptyBorder(0, 5, 0, 0);
public static final Border CELL_ATTR_NORMALBORDER = BorderFactory.createEmptyBorder(0, 10, 0, 15);
diff --git a/designer-base/src/main/java/com/fr/design/data/DesignTableDataManager.java b/designer-base/src/main/java/com/fr/design/data/DesignTableDataManager.java
index f2b1e8e5b3..f1758f0689 100644
--- a/designer-base/src/main/java/com/fr/design/data/DesignTableDataManager.java
+++ b/designer-base/src/main/java/com/fr/design/data/DesignTableDataManager.java
@@ -50,6 +50,7 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
@@ -74,7 +75,7 @@ public abstract class DesignTableDataManager {
private static java.util.Map dsNameChangedMap = new HashMap();
private static List globalDsListeners = new ArrayList<>();
- private static Map> dsListenersMap = new HashMap>();
+ private static Map> dsListenersMap = new ConcurrentHashMap<>();
public static String NO_PARAMETER = "no_paramater_pane";
@@ -96,8 +97,8 @@ public abstract class DesignTableDataManager {
*/
private static void fireDsChanged() {
fireDsChanged(globalDsListeners);
- for (Entry> listenerEntry : dsListenersMap.entrySet()) {
- List dsListeners = listenerEntry.getValue();
+ for (Iterator>> entryIterator = dsListenersMap.entrySet().iterator(); entryIterator.hasNext(); ) {
+ List dsListeners = entryIterator.next().getValue();
fireDsChanged(dsListeners);
}
}
@@ -189,6 +190,7 @@ public abstract class DesignTableDataManager {
}
dsListeners.add(l);
}
+
/**
* 获取数据源source中dsName的所有字段
*
@@ -279,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/TableDataCreatorProducer.java b/designer-base/src/main/java/com/fr/design/data/datapane/TableDataCreatorProducer.java
index bebcd14e25..51bd8b49bf 100644
--- a/designer-base/src/main/java/com/fr/design/data/datapane/TableDataCreatorProducer.java
+++ b/designer-base/src/main/java/com/fr/design/data/datapane/TableDataCreatorProducer.java
@@ -72,24 +72,18 @@ public class TableDataCreatorProducer {
public TableDataNameObjectCreator[] createServerTableDataCreator() {
TableDataNameObjectCreator dataBase = new TableDataNameObjectCreator(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_DS_Database_Query"),
- "ds",
"/com/fr/design/images/data/dock/serverdatabase.png", DBTableData.class,
DBTableDataPane.class);
TableDataNameObjectCreator ds_Class = new TableDataNameObjectCreator(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Tabledata_Type_Class"),
- "Class",
"/com/fr/design/images/data/dock/serverclasstabledata.png", ClassTableData.class,
ClassTableDataPane.class);
TableDataNameObjectCreator table = new TableDataNameObjectCreator(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Tabledata_Type_Embedded"),
- "Embedded",
"/com/fr/design/images/data/dock/serverdatatable.png", EmbeddedTableData.class,
EmbeddedTableDataPane.class);
TableDataNameObjectCreator fileTable = new TableDataNameObjectCreator(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Tabledata_Type_File"),
- "File",
"/com/fr/design/images/data/file.png", FileTableData.class,
FileTableDataSmallPane.class);
-
TableDataNameObjectCreator treeTable = new TableDataNameObjectCreator(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Tabledata_Type_Tree"),
- "Tree",
"/com/fr/design/images/data/tree.png",
RecursionTableData.class, GlobalTreeTableDataPane.class) {
public boolean isNeedParameterWhenPopulateJControlPane() {
@@ -97,7 +91,6 @@ public class TableDataCreatorProducer {
}
};
TableDataNameObjectCreator multiTable = new TableDataNameObjectCreator(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Tabledata_Type_Relation"),
- "Multi",
"/com/fr/design/images/data/multi.png",
ConditionTableData.class, GlobalMultiTDTableDataPane.class) {
public boolean isNeedParameterWhenPopulateJControlPane() {
@@ -105,7 +98,6 @@ public class TableDataCreatorProducer {
}
};
TableDataNameObjectCreator storeProcedure = new TableDataNameObjectCreator(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Tabledata_Type_Stored_Procedure"),
- "Proc",
"/com/fr/design/images/data/store_procedure.png",
StoreProcedure.class, ProcedureDataPane.class) {
@Override
@@ -113,9 +105,7 @@ public class TableDataCreatorProducer {
return true;
}
};
-
TableDataNameObjectCreator[] creators = new TableDataNameObjectCreator[]{dataBase, ds_Class, table, fileTable, storeProcedure, multiTable, treeTable};
-
return merge(creators, ExtraDesignClassManager.getInstance().getServerTableDataCreators());
}
@@ -141,6 +131,6 @@ public class TableDataCreatorProducer {
for (int i = 0; i < coverIndexList.size(); i ++) {
creators[coverIndexList.get(i)] = coverCreators.get(i);
}
- return (TableDataNameObjectCreator[])ArrayUtils.addAll(creators, list.toArray(new TableDataNameObjectCreator[list.size()]));
+ return ArrayUtils.addAll(creators, list.toArray(new TableDataNameObjectCreator[0]));
}
}
diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/TableDataPaneListPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/TableDataPaneListPane.java
index 8c09eb3035..8972821b43 100644
--- a/designer-base/src/main/java/com/fr/design/data/datapane/TableDataPaneListPane.java
+++ b/designer-base/src/main/java/com/fr/design/data/datapane/TableDataPaneListPane.java
@@ -7,6 +7,7 @@ import com.fr.data.impl.storeproc.StoreProcedure;
import com.fr.design.data.BasicTableDataUtils;
import com.fr.design.data.DesignTableDataManager;
import com.fr.design.dialog.FineJOptionPane;
+import com.fr.design.gui.NameInspector;
import com.fr.design.gui.controlpane.JListControlPane;
import com.fr.design.gui.controlpane.NameableCreator;
import com.fr.design.gui.ilist.ListModelElement;
@@ -23,18 +24,20 @@ import com.fr.stable.core.PropertyChangeAdapter;
import javax.swing.*;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.Set;
/**
* TableDataList Pane.
*/
public class TableDataPaneListPane extends JListControlPane implements TableDataPaneController {
private boolean isNamePermitted = true;
- private Map dsNameChangedMap = new HashMap();
+ private Map dsNameChangedMap = new HashMap<>();
public TableDataPaneListPane() {
super();
@@ -43,11 +46,15 @@ public class TableDataPaneListPane extends JListControlPane implements TableData
@Override
public void propertyChange() {
isNamePermitted = true;
- TableDataSource source = DesignTableDataManager.getEditingTableDataSource();
- String[] allDSNames = DesignTableDataManager.getAllDSNames(source);
- String[] allListNames = nameableList.getAllNames();
- allListNames[nameableList.getSelectedIndex()] = StringUtils.EMPTY;
String tempName = getEditingName();
+ if (ComparatorUtils.equals(tempName, selectedName)) {
+ //说明双击之后又取消了,啥也不用做
+ return;
+ }
+ Set allDSNames = DesignTableDataManager.getGlobalDataSet().keySet();
+ String[] allListNames = nameableList.getAllNames();
+ allListNames[editingIndex] = StringUtils.EMPTY;
+
Object editingType = getEditingType();
if (!BasicTableDataUtils.checkName(tempName)) {
@@ -61,15 +68,14 @@ public class TableDataPaneListPane extends JListControlPane implements TableData
isNamePermitted = false;
nameableList.stopEditing();
FineJOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(TableDataPaneListPane.this),
- Toolkit.i18nText("Fine-Design_Basic_Table_Data_Empty_Name_Tips"),
- Toolkit.i18nText("Fine-Design_Report_Alert"),
- JOptionPane.WARNING_MESSAGE);
+ Toolkit.i18nText("Fine-Design_Basic_Table_Data_Empty_Name_Tips"),
+ Toolkit.i18nText("Fine-Design_Report_Alert"),
+ JOptionPane.WARNING_MESSAGE);
setIllegalIndex(editingIndex);
return;
}
-
- if (!ComparatorUtils.equals(tempName, selectedName)
- && isNameRepeated(new List[]{Arrays.asList(allDSNames), Arrays.asList(allListNames)}, tempName)) {
+ boolean isRepeated = isNameRepeated(new Collection[]{allDSNames, Arrays.asList(allListNames)}, tempName);
+ if (isRepeated) {
isNamePermitted = false;
nameableList.stopEditing();
FineJOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(TableDataPaneListPane.this), Toolkit.i18nText("Fine-Design_Basic_Table_Data_Duplicate_Name_Tips", tempName));
@@ -81,11 +87,7 @@ public class TableDataPaneListPane extends JListControlPane implements TableData
setIllegalIndex(editingIndex);
}
if (nameableList.getSelectedValue() instanceof ListModelElement) {
- Nameable selected = ((ListModelElement) nameableList.getSelectedValue()).wrapper;
- if (!ComparatorUtils.equals(tempName, selected.getName()) && !isNameRepeated(new List[]{Arrays.asList(allDSNames), Arrays.asList(allListNames)}, tempName)) {
- rename(selected.getName(), tempName);
-
- }
+ rename(selectedName, isRepeated ? NameInspector.ILLEGAL_NAME_HOLDER : tempName);
}
}
});
@@ -93,7 +95,19 @@ public class TableDataPaneListPane extends JListControlPane implements TableData
@Override
public void rename(String oldName, String newName) {
- dsNameChangedMap.put(oldName, newName);
+ //如果a改成了b,b又被改成了c,就认为是a改成了c
+ for (Map.Entry entry : dsNameChangedMap.entrySet()) {
+ if (StringUtils.equals(oldName, entry.getValue())) {
+ oldName = entry.getKey();
+ break;
+ }
+ }
+ if (StringUtils.equals(oldName, newName)) {
+ //a -> b;b -> a,说明没改
+ dsNameChangedMap.remove(oldName);
+ } else {
+ dsNameChangedMap.put(oldName, newName);
+ }
}
/**
@@ -148,7 +162,7 @@ public class TableDataPaneListPane extends JListControlPane implements TableData
String[] allDsNames = DesignTableDataManager.getAllDSNames(source);
// richer:生成的名字从1开始. kunsnat: 添加属性从0开始.
- int count = 1;
+ int count = 1;
while (isDsNameRepeated(prefix + count, allDsNames)) {
count++;
}
@@ -192,7 +206,7 @@ public class TableDataPaneListPane extends JListControlPane implements TableData
}
}
- populate(nameObjectList.toArray(new NameObject[nameObjectList.size()]));
+ populate(nameObjectList.toArray(new NameObject[0]));
}
/**
@@ -209,10 +223,10 @@ public class TableDataPaneListPane extends JListControlPane implements TableData
}
while (procedurenameIt.hasNext()) {
String name = procedurenameIt.next();
- nameObjectList.add(new NameObject(name, ProcedureConfig.getInstance().getProcedure(name)));
+ nameObjectList.add(new NameObject(name, ProcedureConfig.getInstance().getProcedure(name)));
}
- populate(nameObjectList.toArray(new NameObject[nameObjectList.size()]));
+ populate(nameObjectList.toArray(new NameObject[0]));
}
@Override
@@ -220,7 +234,7 @@ public class TableDataPaneListPane extends JListControlPane implements TableData
tableDataConfig.removeAllTableData();
ProcedureConfig.getInstance().removeAllProcedure();
Nameable[] tableDataArray = this.update();
- Map tableDataMap = new LinkedHashMap();
+ Map tableDataMap = new LinkedHashMap();
for (int i = 0; i < tableDataArray.length; i++) {
NameObject nameObject = (NameObject) tableDataArray[i];
tableDataMap.put(nameObject.getName(), (TableData) nameObject.getObject());
diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/TableDataTree.java b/designer-base/src/main/java/com/fr/design/data/datapane/TableDataTree.java
index 8f49b6e504..94efc5faa8 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);
@@ -152,7 +147,7 @@ public class TableDataTree extends UserObjectRefreshJTree {
/*
* p:获得选中的NameObject = name + tabledata.
- */
+ */
public NameObject getSelectedNameObject() {
TreePath selectedTreePath = this.getSelectionPath();
if (selectedTreePath == null) {
diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/TreeTableDataComboBox.java b/designer-base/src/main/java/com/fr/design/data/datapane/TreeTableDataComboBox.java
index 8b5c626571..8964ff8de0 100644
--- a/designer-base/src/main/java/com/fr/design/data/datapane/TreeTableDataComboBox.java
+++ b/designer-base/src/main/java/com/fr/design/data/datapane/TreeTableDataComboBox.java
@@ -69,7 +69,16 @@ public class TreeTableDataComboBox extends UIComboBox {
}
}
}
-
+
+ /**
+ * 带参刷新方法
+ * @param source 数据源数据集
+ */
+ public void refresh(TableDataSource source) {
+ this.source = source;
+ refresh();
+ }
+
public void setSelectedTableDataByName(String name) {
TableDataWrapper tableDataWrapper;
if (res_map.get(name) != null) {
diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/connect/JDBCDefPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/connect/JDBCDefPane.java
index 5e8199d953..683b38e016 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
@@ -8,7 +8,7 @@ import com.fr.design.border.UITitledBorder;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.icombobox.UIComboBox;
import com.fr.design.gui.ilable.UILabel;
-import com.fr.design.gui.ipasswordfield.UIPassWordField;
+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.layout.FRGUIPaneFactory;
@@ -24,8 +24,18 @@ import com.fr.general.ComparatorUtils;
import com.fr.stable.StringUtils;
-import javax.swing.*;
-import java.awt.*;
+import javax.swing.BorderFactory;
+import javax.swing.JDialog;
+import javax.swing.JFileChooser;
+import javax.swing.JPanel;
+import javax.swing.JPasswordField;
+import javax.swing.SwingConstants;
+import javax.swing.SwingUtilities;
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
@@ -108,7 +118,7 @@ public class JDBCDefPane extends JPanel {
urlTextField = new UITextField(15);
userNameTextField = new UITextField(15);
userNameTextField.setName(USER_NAME);
- passwordTextField = new UIPassWordField(15);
+ passwordTextField = new UIPasswordFieldWithFixedLength(15);
dbtypeButton = new UIButton(".");
dbtypeButton.setToolTipText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Click_Get_Default_URL"));
dbtypeButton.addActionListener(dbtypeButtonActionListener);
diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java
index 8d8e3a48c6..d3881bcd12 100644
--- a/designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java
+++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java
@@ -15,20 +15,31 @@ import com.fr.design.data.DesignTableDataManager;
import com.fr.design.dialog.BasicDialog;
import com.fr.design.dialog.BasicPane;
import com.fr.design.dialog.FineJOptionPane;
-import com.fr.design.file.HistoryTemplateListPane;
+import com.fr.design.file.HistoryTemplateListCache;
import com.fr.design.gui.frpane.UITabbedPane;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.iprogressbar.AutoProgressBar;
import com.fr.design.gui.itable.SortableJTable;
import com.fr.design.gui.itable.TableSorter;
import com.fr.design.gui.itextfield.UINumberField;
+import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.mainframe.DesignerContext;
+import com.fr.design.ui.util.UIUtil;
import com.fr.function.TIME;
import com.fr.general.FRFont;
import com.fr.log.FineLoggerFactory;
-import javax.swing.*;
+import javax.swing.BorderFactory;
+import javax.swing.Icon;
+import javax.swing.JComponent;
+import javax.swing.JFrame;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.SwingWorker;
+import javax.swing.UIManager;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableModel;
@@ -81,7 +92,7 @@ public class PreviewTablePane extends BasicPane {
JPanel currentPreviewPanel = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane();
previewNumberPanel.add(currentPreviewPanel);
- currentPreviewPanel.add(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Current_Preview_Rows") + ":"));
+ currentPreviewPanel.add(new UILabel(Toolkit.i18nText("Fine-Design_Basic_Current_Preview_Rows") + ":"));
currentRowsField = new UINumberField();
currentPreviewPanel.add(currentRowsField);
@@ -91,7 +102,7 @@ public class PreviewTablePane extends BasicPane {
JPanel maxPanel = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane();
previewNumberPanel.add(maxPanel);
- maxPanel.add(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Datasource_Maximum_Number_of_Preview_Rows") + ":"));
+ maxPanel.add(new UILabel(Toolkit.i18nText("Fine-Design_Basic_Datasource_Maximum_Number_of_Preview_Rows") + ":"));
maxPreviewNumberField = new UINumberField();
maxPanel.add(maxPreviewNumberField);
@@ -158,7 +169,7 @@ public class PreviewTablePane extends BasicPane {
if (this.dialog == null) {
this.dialog = this.showWindow(new JFrame());
}
- progressBar = new AutoProgressBar(this, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Loading_Data"), "", 0, 100) {
+ progressBar = new AutoProgressBar(this, Toolkit.i18nText("Fine-Design_Basic_Loading_Data"), "", 0, 100) {
public void doMonitorCanceled() {
if (getWorker() != null) {
getWorker().cancel(true);
@@ -174,7 +185,7 @@ public class PreviewTablePane extends BasicPane {
@Override
protected String title4PopupWindow() {
- return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preview");
+ return Toolkit.i18nText("Fine-Design_Basic_Preview");
}
private void addLoadedListener(LoadedEventListener l) {
@@ -268,7 +279,7 @@ public class PreviewTablePane extends BasicPane {
*/
public static EmbeddedTableData previewTableData(TableData tableData, final int keyIndex, final int valueIndex) {
PreviewTablePane previewTablePane = new PreviewTablePane();
- previewTablePane.setBorder(BorderFactory.createTitledBorder(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Data")));
+ previewTablePane.setBorder(BorderFactory.createTitledBorder(Toolkit.i18nText("Fine-Design_Basic_Data")));
try {
previewTablePane.populate(tableData);
previewTablePane.resetPreviewTableColumnColor();
@@ -298,13 +309,13 @@ public class PreviewTablePane extends BasicPane {
try {
int choiceColumn = Integer.parseInt(columnErrMessage.trim());
int tatalColumn = Integer.parseInt(tatolColumnErrMessage.trim());
- columnErrMessage = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Tabledata_Preview_Warn_Text", choiceColumn + 1, tatalColumn);
+ columnErrMessage = Toolkit.i18nText("Fine-Design_Basic_Tabledata_Preview_Warn_Text", choiceColumn + 1, tatalColumn);
} catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
return;
}
FineLoggerFactory.getLogger().error(exp.getMessage(), exp);
- FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), columnErrMessage, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Error"), JOptionPane.ERROR_MESSAGE);
+ FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), columnErrMessage, Toolkit.i18nText("Fine-Design_Basic_Error"), JOptionPane.ERROR_MESSAGE);
}
private void populate(TableData tableData) throws Exception {
@@ -317,7 +328,7 @@ public class PreviewTablePane extends BasicPane {
}
private void previewTableDataSQL() throws Exception {
- connectionBar = new AutoProgressBar(this, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Utils_Now_Create_Connection"), "", 0, 100) {
+ connectionBar = new AutoProgressBar(this, Toolkit.i18nText("Fine-Design_Basic_Utils_Now_Create_Connection"), "", 0, 100) {
public void doMonitorCanceled() {
getWorker().cancel(true);
getDialog().setVisible(false);
@@ -365,13 +376,14 @@ public class PreviewTablePane extends BasicPane {
if (tableData instanceof DBTableData) {
boolean status = DataOperator.getInstance().testConnection(((DBTableData) tableData).getDatabase());
if (!status) {
- throw new Exception(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Database_Connection_Failed"));
+ throw new Exception(Toolkit.i18nText("Fine-Design_Basic_Database_Connection_Failed"));
}
}
} finally {
- connectionBar.close();
+ // 将close操作放到EDT线程中
+ UIUtil.invokeLaterIfNeeded(() -> connectionBar.close());
}
- TableDataSource dataSource = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().getTarget();
+ TableDataSource dataSource = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate().getTarget();
previewTableData = DesignTableDataManager.previewTableDataNeedInputParameters(dataSource, tableData, (int) maxPreviewNumberField.getValue(), true, progressBar);
// parameterInputDialog
// update之后的parameters,转成一个parameterMap,用于预览TableData
@@ -396,7 +408,7 @@ public class PreviewTablePane extends BasicPane {
if (!(e instanceof CancellationException)) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), e.getMessage(),
- com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Error"), JOptionPane.ERROR_MESSAGE, UIManager.getIcon("OptionPane.errorIcon"));
+ Toolkit.i18nText("Fine-Design_Basic_Error"), JOptionPane.ERROR_MESSAGE, UIManager.getIcon("OptionPane.errorIcon"));
}
dialog.setVisible(false);
} finally {
@@ -425,7 +437,7 @@ public class PreviewTablePane extends BasicPane {
public static void previewStoreData(final ProcedureDataModel storeProcedureDataModel, final int keyIndex, final int valueIndex) {
final PreviewTablePane previewTablePane = new PreviewTablePane();
previewTablePane.storeProcedureDataModel = storeProcedureDataModel;
- previewTablePane.setBorder(BorderFactory.createTitledBorder(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Data")));
+ previewTablePane.setBorder(BorderFactory.createTitledBorder(Toolkit.i18nText("Fine-Design_Basic_Data")));
try {
previewTablePane.populateStoreDataSQL();
@@ -442,7 +454,7 @@ public class PreviewTablePane extends BasicPane {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
}
previewTablePane.fireLoadedListener();
- previewTablePane.showWindow(DesignerContext.getDesignerFrame()).setVisible(true);
+ previewTablePane.showWindow(new JFrame()).setVisible(true);
}
/**
@@ -456,7 +468,7 @@ public class PreviewTablePane extends BasicPane {
for (int i = 0; i < tableSize; i++) {
PreviewTablePane previewTablePane = new PreviewTablePane();
previewTablePane.storeProcedureDataModel = storeProcedureDataModels[i];
- previewTablePane.setBorder(BorderFactory.createTitledBorder(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Data")));
+ previewTablePane.setBorder(BorderFactory.createTitledBorder(Toolkit.i18nText("Fine-Design_Basic_Data")));
try {
previewTablePane.populateStoreDataSQL();
} catch (Exception e) {
@@ -469,13 +481,13 @@ public class PreviewTablePane extends BasicPane {
@Override
protected String title4PopupWindow() {
- return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preview");
+ return Toolkit.i18nText("Fine-Design_Basic_Preview");
}
};
prieviewPane.setLayout(FRGUIPaneFactory.createBorderLayout());
prieviewPane.add(tabPreviewpane, BorderLayout.CENTER);
- prieviewPane.showWindow(DesignerContext.getDesignerFrame()).setVisible(true);
+ prieviewPane.showWindow(new JFrame()).setVisible(true);
}
private void populateStoreDataSQL() throws Exception {
diff --git a/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java b/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java
index 23e6f46136..6065d04859 100644
--- a/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java
+++ b/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java
@@ -185,7 +185,8 @@ public class DBTableDataPane extends AbstractTableDataPane {
box.setMinimumSize(new Dimension(300, 400));
// 防止数据连接名过长时影响 split pane 分割效果
- connectionTableProcedurePane.setMinimumSize(new Dimension(250, 400));
+ // 本界面中给MaxMemRowCountPanel留的空间太小,造成MaxMemRowCountPanel显示异常,这边减小一点最小宽度,拉长MaxMemRowCountPanel
+ connectionTableProcedurePane.setMinimumSize(new Dimension(230, 400));
connectionTableProcedurePane.setMaximumSize(new Dimension(500, 400));
// 使用SplitPane
JSplitPane mainSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, connectionTableProcedurePane, sqlSplitPane);
@@ -218,7 +219,7 @@ public class DBTableDataPane extends AbstractTableDataPane {
paramTexts[0] = SqlUtils.tryPureSqlText(sqlTextPane.getText());
paramTexts[1] = SqlUtils.tryPureSqlText(pageQuery);
List existParameterList = editorPane.update();
- Parameter[] ps = existParameterList == null ? new Parameter[0] : existParameterList.toArray(new Parameter[existParameterList.size()]);
+ Parameter[] ps = existParameterList == null ? new Parameter[0] : existParameterList.toArray(new Parameter[0]);
editorPane.populate(ParameterUtils.analyzeAndUnionParameters(paramTexts, ps));
}
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 d43e6bdee4..af2b71a7c6 100644
--- a/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/MaxMemRowCountPanel.java
+++ b/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/MaxMemRowCountPanel.java
@@ -21,7 +21,7 @@ public class MaxMemRowCountPanel extends UIToolbar {
private static final int MAX_IN_MEMORY = 1;
private static final String[] CACHE_LIST = {com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Save_All_Records_In_Memory"),
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Max_Mem_Row_Count") };
- private static final int MAX_WIDTH = getMaxComBoBoxWidth() > 200 ? 350 : 250;
+ private static final int MAX_WIDTH = getMaxComBoBoxWidth() > 200 ? 350 : 280;
private static final int MAX_COMPONENT_COUNT_OF_MAX_MEMORY = 4;
private static int getMaxComBoBoxWidth() {
int maxWidth = GraphHelper.getWidth(CACHE_LIST[0]);
@@ -73,6 +73,7 @@ public class MaxMemRowCountPanel extends UIToolbar {
switchCache = new UIComboBox(CACHE_LIST);
switchCache.addActionListener(switchStateL);
numberSpinner = new UISpinner(0, Integer.MAX_VALUE, 1);
+ numberSpinner.setNumberFieldColumns(3);
}
private void showAllPanel() {
diff --git a/designer-base/src/main/java/com/fr/design/data/tabledata/wrapper/StoreProcedureDataWrapper.java b/designer-base/src/main/java/com/fr/design/data/tabledata/wrapper/StoreProcedureDataWrapper.java
index cefc0e1128..17fbf57888 100644
--- a/designer-base/src/main/java/com/fr/design/data/tabledata/wrapper/StoreProcedureDataWrapper.java
+++ b/designer-base/src/main/java/com/fr/design/data/tabledata/wrapper/StoreProcedureDataWrapper.java
@@ -7,17 +7,16 @@ import com.fr.data.impl.storeproc.StoreProcedure;
import com.fr.data.operator.DataOperator;
import com.fr.design.data.DesignTableDataManager;
import com.fr.design.data.datapane.preview.PreviewTablePane;
-import com.fr.design.dialog.BasicDialog;
-import com.fr.design.dialog.DialogActionAdapter;
import com.fr.design.dialog.FineJOptionPane;
import com.fr.design.gui.iprogressbar.AutoProgressBar;
import com.fr.design.gui.itree.refreshabletree.ExpandMutableTreeNode;
+import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.DesignerContext;
import com.fr.general.ComparatorUtils;
import com.fr.log.FineLoggerFactory;
import javax.swing.Icon;
-import javax.swing.JOptionPane;
+import javax.swing.JFrame;
import javax.swing.SwingWorker;
import java.util.ArrayList;
import java.util.Arrays;
@@ -50,7 +49,6 @@ public final class StoreProcedureDataWrapper implements TableDataWrapper {
private AutoProgressBar connectionBar;
private ProcedureDataModel[] dataModels;
private SwingWorker worker;
- private BasicDialog dialog;
private int previewModel;
public StoreProcedureDataWrapper(StoreProcedure storeProcedure, String storeprocedureName, String dsName) {
@@ -71,19 +69,8 @@ public final class StoreProcedureDataWrapper implements TableDataWrapper {
if (needLoad) {
setWorker();
}
- dialog = PreviewTablePane.getInstance().getDialog();
- dialog.addDialogActionListener(new DialogActionAdapter() {
- public void doOk() {
- getWorker().cancel(true);
- }
-
- public void doCancel() {
- getWorker().cancel(true);
- }
- });
- loadingBar = new AutoProgressBar(dialog, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Loading_Data"), "", 0, 100) {
+ loadingBar = new AutoProgressBar(new JFrame(), Toolkit.i18nText("Fine-Design_Basic_Loading_Data"), "", 0, 100) {
public void doMonitorCanceled() {
- getDialog().setVisible(false);
getWorker().cancel(true);
}
};
@@ -93,17 +80,17 @@ public final class StoreProcedureDataWrapper implements TableDataWrapper {
* 数据集执行结果返回的所有字段
*
* @return 数据集执行结果返回的所有字段
- *
+ *
*
* @date 2014-12-3-下午7:43:17
- *
+ *
*/
public List calculateColumnNameList() {
if (columnNameList != null) {
return columnNameList;
}
if (!createStore(false)) {
- FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Engine_No_TableData"));
+ FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Toolkit.i18nText("Fine-Design_Basic_Engine_No_TableData"));
return new ArrayList();
}
columnNameList = Arrays.asList(procedureDataModel.getColumnName());
@@ -114,10 +101,10 @@ public final class StoreProcedureDataWrapper implements TableDataWrapper {
* 生成子节点
*
* @return 节点数组
- *
+ *
*
* @date 2014-12-3-下午7:06:47
- *
+ *
*/
public ExpandMutableTreeNode[] load() {
List namelist;
@@ -160,25 +147,16 @@ public final class StoreProcedureDataWrapper implements TableDataWrapper {
/**
* 预览数据
- *
+ *
* @param previewModel 预览模式, 全部还是一个
- *
+ *
*
* @date 2014-12-3-下午7:05:50
- *
+ *
*/
public void previewData(final int previewModel) {
this.previewModel = previewModel;
- new SwingWorker() {
-
- protected Object doInBackground() throws Exception {
- loadingBar.close();
- PreviewTablePane.resetPreviewTable();
- dialog.setVisible(true);
- return null;
- }
- }.execute();
- connectionBar = new AutoProgressBar(dialog, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Utils_Now_Create_Connection"), "", 0, 100) {
+ connectionBar = new AutoProgressBar(new JFrame(), Toolkit.i18nText("Fine-Design_Basic_Utils_Now_Create_Connection"), "", 0, 100) {
public void doMonitorCanceled() {
connectionBar.close();
worker.cancel(true);
@@ -190,13 +168,13 @@ public final class StoreProcedureDataWrapper implements TableDataWrapper {
private void setWorker() {
worker = new SwingWorker() {
protected Void doInBackground() throws Exception {
+ loadingBar.close();
+ PreviewTablePane.resetPreviewTable();
connectionBar.start();
boolean status = DataOperator.getInstance().testConnection(((StoreProcedure) getTableData()).getDatabaseConnection());
if (!status) {
connectionBar.close();
- // bug 61345 预览失败时,关闭窗口
- dialog.setVisible(false);
- throw new Exception(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Database_Connection_Failed"));
+ throw new Exception(Toolkit.i18nText("Fine-Design_Basic_Database_Connection_Failed"));
}
connectionBar.close();
storeProcedure.resetDataModelList();
@@ -208,7 +186,6 @@ public final class StoreProcedureDataWrapper implements TableDataWrapper {
try {
get();
loadingBar.close();
- dialog.setVisible(false);
switch (previewModel) {
case StoreProcedureDataWrapper.PREVIEW_ALL:
PreviewTablePane.previewStoreDataWithAllDs(dataModels);
@@ -228,10 +205,6 @@ public final class StoreProcedureDataWrapper implements TableDataWrapper {
};
}
- private BasicDialog getDialog() {
- return this.dialog;
- }
-
private SwingWorker getWorker() {
return this.worker;
}
@@ -240,10 +213,10 @@ public final class StoreProcedureDataWrapper implements TableDataWrapper {
/**
* 预览返回的一个数据集
- *
+ *
*
* @date 2014-12-3-下午7:42:53
- *
+ *
*/
public void previewData() {
previewData(-1, -1);
@@ -253,13 +226,13 @@ public final class StoreProcedureDataWrapper implements TableDataWrapper {
/**
* 预览返回的一个数据集,带有显示值和实际值的标记结果
- *
+ *
* @param keyIndex 实际值
* @param valueIndex 显示值
- *
+ *
*
* @date 2014-12-3-下午7:42:27
- *
+ *
*/
public void previewData(final int keyIndex, final int valueIndex) {
PreviewTablePane.previewStoreData(procedureDataModel, keyIndex, valueIndex);
diff --git a/designer-base/src/main/java/com/fr/design/dialog/ErrorDialog.java b/designer-base/src/main/java/com/fr/design/dialog/ErrorDialog.java
index 21042a57a9..11a49fafe1 100644
--- a/designer-base/src/main/java/com/fr/design/dialog/ErrorDialog.java
+++ b/designer-base/src/main/java/com/fr/design/dialog/ErrorDialog.java
@@ -35,7 +35,7 @@ public abstract class ErrorDialog extends JDialog implements ActionListener {
JPanel messagePane = FRGUIPaneFactory.createVerticalFlowLayout_S_Pane(true);
UILabel boldFontLabel = new UILabel(message);
UILabel label = new UILabel(Toolkit.i18nText("Fine-Design_Send_Report_To_Us"));
- Font font = FRFont.getInstance("Dialog", Font.BOLD, 20);
+ Font font = FRFont.getInstance(label.getFont().getFontName(), Font.BOLD, 20);
boldFontLabel.setFont(font);
messagePane.add(boldFontLabel);
messagePane.add(label);
diff --git a/designer-base/src/main/java/com/fr/design/dialog/UIDialog.java b/designer-base/src/main/java/com/fr/design/dialog/UIDialog.java
index 8f2021c696..dd3ddab3b9 100644
--- a/designer-base/src/main/java/com/fr/design/dialog/UIDialog.java
+++ b/designer-base/src/main/java/com/fr/design/dialog/UIDialog.java
@@ -116,6 +116,11 @@ public abstract class UIDialog extends JDialog {
doCancel();
}
});
+
+ applyEnterAction();
+ }
+
+ protected void applyEnterAction() {
JPanel defaultPane = (JPanel) this.getContentPane();
InputMap inputMapAncestor = defaultPane.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
ActionMap actionMap = defaultPane.getActionMap();
diff --git a/designer-base/src/main/java/com/fr/design/env/RemoteDesignerWorkspaceInfo.java b/designer-base/src/main/java/com/fr/design/env/RemoteDesignerWorkspaceInfo.java
index 2f30f70b97..37a671eeb8 100644
--- a/designer-base/src/main/java/com/fr/design/env/RemoteDesignerWorkspaceInfo.java
+++ b/designer-base/src/main/java/com/fr/design/env/RemoteDesignerWorkspaceInfo.java
@@ -40,6 +40,12 @@ public class RemoteDesignerWorkspaceInfo implements DesignerWorkspaceInfo {
private WorkspaceConnectionInfo connection;
+ /**
+ * 标记下新创建的远程工作目录 兼容存留的远程目录客户升级后再回退 读取为密文
+ * 仅保证当前新增是加密的
+ */
+ private boolean newCreated;
+
public static RemoteDesignerWorkspaceInfo create(WorkspaceConnectionInfo connection) {
RemoteDesignerWorkspaceInfo info = new RemoteDesignerWorkspaceInfo();
info.connection = connection;
@@ -79,12 +85,21 @@ public class RemoteDesignerWorkspaceInfo implements DesignerWorkspaceInfo {
return remindTime;
}
+ public boolean isNewCreated() {
+ return newCreated;
+ }
+
+ public void setNewCreated(boolean newCreated) {
+ this.newCreated = newCreated;
+ }
+
@Override
public void readXML(XMLableReader reader) {
if (reader.isAttr()) {
this.name = reader.getAttrAsString("name", StringUtils.EMPTY);
this.remindTime = reader.getAttrAsString("remindTime", StringUtils.EMPTY);
+ this.newCreated = reader.getAttrAsBoolean("newCreated", false);
}
if (reader.isChildNode()) {
String tagName = reader.getTagName();
@@ -92,32 +107,49 @@ public class RemoteDesignerWorkspaceInfo implements DesignerWorkspaceInfo {
String url = reader.getAttrAsString("url", StringUtils.EMPTY);
String username = reader.getAttrAsString("username", StringUtils.EMPTY);
//密码解密
- String password = SecurityToolbox.defaultDecrypt(reader.getAttrAsString("password", StringUtils.EMPTY).replaceAll(" ", "\r\n"));
+ String password = SecurityToolbox.defaultDecrypt(reader.getAttrAsString("password", StringUtils.EMPTY).replaceAll(StringUtils.BLANK, "\r\n"));
String certPath = reader.getAttrAsString("certPath", StringUtils.EMPTY);
- String certSecretKey = reader.getAttrAsString("certSecretKey", StringUtils.EMPTY);
+ String certSecretKey = readCertSecretKey(reader);
boolean rememberPwd = reader.getAttrAsBoolean("rememberPwd", true);
this.connection = new WorkspaceConnectionInfo(url, username, password, certPath, certSecretKey, rememberPwd);
}
}
}
+ private String readCertSecretKey(XMLableReader reader) {
+ if (isNewCreated()) {
+ return SecurityToolbox.defaultDecrypt(reader.getAttrAsString("certSecretKey", StringUtils.EMPTY).replaceAll(StringUtils.BLANK, "\r\n"));
+ } else {
+ return reader.getAttrAsString("certSecretKey", StringUtils.EMPTY);
+ }
+ }
+
@Override
public void writeXML(XMLPrintWriter writer) {
writer.attr("name", name);
writer.attr("remindTime", remindTime);
+ writer.attr("newCreated", isNewCreated());
if (this.connection != null) {
writer.startTAG("Connection");
writer.attr("url", connection.getUrl());
writer.attr("username", connection.getUserName());
writer.attr("password", SecurityToolbox.defaultEncrypt(connection.getPassword()));
writer.attr("certPath", connection.getCertPath());
- writer.attr("certSecretKey", connection.getCertSecretKey());
+ writeCertSecretKey(writer);
writer.attr("rememberPwd", connection.isRememberPwd());
writer.end();
}
}
+ private void writeCertSecretKey(XMLPrintWriter writer) {
+ if (isNewCreated()) {
+ writer.attr("certSecretKey", SecurityToolbox.defaultEncrypt(connection.getCertSecretKey()));
+ } else {
+ writer.attr("certSecretKey", connection.getCertSecretKey());
+ }
+ }
+
@Override
@SuppressWarnings("squid:S2975")
public Object clone() throws CloneNotSupportedException {
diff --git a/designer-base/src/main/java/com/fr/design/extra/LoginDialog.java b/designer-base/src/main/java/com/fr/design/extra/LoginDialog.java
index 42791ad522..8fbb2d2a5d 100644
--- a/designer-base/src/main/java/com/fr/design/extra/LoginDialog.java
+++ b/designer-base/src/main/java/com/fr/design/extra/LoginDialog.java
@@ -24,7 +24,7 @@ public class LoginDialog extends UIDialog {
}
private void init(Component pane) {
- if (StableUtils.getMajorJavaVersion() == 8) {
+ if (StableUtils.getMajorJavaVersion() >= 8) {
setUndecorated(true);
}
JPanel panel = (JPanel) getContentPane();
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 72fa6149b6..69ad0f08d1 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
@@ -16,7 +16,7 @@ public class ShopDialog extends UIDialog {
public ShopDialog(Frame frame, BasicPane pane) {
super(frame);
- if (StableUtils.getMajorJavaVersion() == 8) {
+ if (StableUtils.getMajorJavaVersion() >= 8) {
setUndecorated(true);
}
JPanel panel = (JPanel) getContentPane();
diff --git a/designer-base/src/main/java/com/fr/design/extra/WebViewDlgHelper.java b/designer-base/src/main/java/com/fr/design/extra/WebViewDlgHelper.java
index d7f858b65f..628adfec64 100644
--- a/designer-base/src/main/java/com/fr/design/extra/WebViewDlgHelper.java
+++ b/designer-base/src/main/java/com/fr/design/extra/WebViewDlgHelper.java
@@ -159,7 +159,7 @@ public class WebViewDlgHelper {
}
public static void createLoginDialog() {
- if (StableUtils.getMajorJavaVersion() == VERSION_8) {
+ if (StableUtils.getMajorJavaVersion() >= VERSION_8) {
File file = new File(StableUtils.pathJoin(installHome, "scripts"));
if (!file.exists()) {
confirmDownLoadShopJS();
@@ -172,7 +172,7 @@ public class WebViewDlgHelper {
public static void createLoginDialog(Window parent) {
- if (StableUtils.getMajorJavaVersion() == VERSION_8) {
+ if (StableUtils.getMajorJavaVersion() >= VERSION_8) {
File file = new File(StableUtils.pathJoin(installHome, "scripts"));
if (!file.exists()) {
confirmDownLoadShopJS();
diff --git a/designer-base/src/main/java/com/fr/design/file/MutilTempalteTabPane.java b/designer-base/src/main/java/com/fr/design/file/MutilTempalteTabPane.java
index e4ab990337..69aee1b50e 100644
--- a/designer-base/src/main/java/com/fr/design/file/MutilTempalteTabPane.java
+++ b/designer-base/src/main/java/com/fr/design/file/MutilTempalteTabPane.java
@@ -17,14 +17,31 @@ import com.fr.file.FILE;
import com.fr.general.ComparatorUtils;
import com.fr.log.FineLoggerFactory;
import com.fr.stable.Constants;
-import com.fr.stable.ProductConstants;
import com.fr.third.javax.annotation.Nonnull;
import com.fr.workspace.WorkContext;
import com.fr.workspace.server.lock.TplOperator;
-import javax.swing.*;
+import javax.swing.BorderFactory;
+import javax.swing.ButtonModel;
+import javax.swing.Icon;
+import javax.swing.JComponent;
+import javax.swing.JMenu;
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JSeparator;
+import javax.swing.SwingConstants;
import javax.swing.plaf.basic.BasicMenuItemUI;
-import java.awt.*;
+import java.awt.AWTEvent;
+import java.awt.AlphaComposite;
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.GradientPaint;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
import java.awt.event.AWTEventListener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
@@ -171,6 +188,8 @@ public class MutilTempalteTabPane extends JComponent {
private UIMenuItem initCloseOther() {
UIMenuItem closeOther = new UIMenuItem(Toolkit.i18nText("Fine-Design_Basic_FS_Close_Other_Templates"));
+ // Yvan: 英文下文本显示不全,后续发现如果将模板名设置的比较短,其它语言也会出现显示不全的问题,所以设置一下文本水平居中
+ closeOther.setHorizontalAlignment(SwingConstants.CENTER);
setListDownItemPreferredSize(closeOther);
closeOther.addActionListener(new ActionListener() {
@Override
diff --git a/designer-base/src/main/java/com/fr/design/gui/columnrow/ColumnRowPane.java b/designer-base/src/main/java/com/fr/design/gui/columnrow/ColumnRowPane.java
index e94b182695..10ea21a9ae 100644
--- a/designer-base/src/main/java/com/fr/design/gui/columnrow/ColumnRowPane.java
+++ b/designer-base/src/main/java/com/fr/design/gui/columnrow/ColumnRowPane.java
@@ -200,13 +200,17 @@ public class ColumnRowPane extends JPanel implements UIObserver {
column = 0;
}
removeDocumentListener(d);
- columnSpinner.setValue(StableUtils.convertIntToABC(column + 1));
+ String colValue = StableUtils.convertIntToABC(column + 1);
+ columnSpinner.setValue(colValue);
+ ((DefaultEditor) columnSpinner.getEditor()).getTextField().setText(colValue);
int row = columnRow.getRow();
// shoc 小于0就蹦了
if (row < 0) {
row = 0;
}
- rowSpinner.setValue("" + (row + 1));
+ String rowValue = Integer.toString(row + 1);
+ rowSpinner.setValue(rowValue);
+ ((DefaultEditor) rowSpinner.getEditor()).getTextField().setText(rowValue);
addDocumentListener(d);
fireChanged();
}
diff --git a/designer-base/src/main/java/com/fr/design/gui/controlpane/JListControlPane.java b/designer-base/src/main/java/com/fr/design/gui/controlpane/JListControlPane.java
index 3eb644c334..b82a584679 100644
--- a/designer-base/src/main/java/com/fr/design/gui/controlpane/JListControlPane.java
+++ b/designer-base/src/main/java/com/fr/design/gui/controlpane/JListControlPane.java
@@ -27,6 +27,7 @@ import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
+import java.util.Collection;
public abstract class JListControlPane extends JControlPane implements ListControlPaneProvider {
private static final String LIST_NAME = "JControl_List";
@@ -190,9 +191,9 @@ public abstract class JListControlPane extends JControlPane implements ListContr
return getHelper().getSelectedName();
}
- protected boolean isNameRepeated(java.util.List[] list, String name) {
- for (int i = 0; i < list.length; i++) {
- if (list[i].contains(name)) {
+ protected boolean isNameRepeated(Collection[] collections, String name) {
+ for (int i = 0; i < collections.length; i++) {
+ if (collections[i].contains(name)) {
isNameRepeated = true;
return true;
}
diff --git a/designer-base/src/main/java/com/fr/design/gui/controlpane/ListControlPaneHelper.java b/designer-base/src/main/java/com/fr/design/gui/controlpane/ListControlPaneHelper.java
index 0d12772d33..76255d96b7 100644
--- a/designer-base/src/main/java/com/fr/design/gui/controlpane/ListControlPaneHelper.java
+++ b/designer-base/src/main/java/com/fr/design/gui/controlpane/ListControlPaneHelper.java
@@ -65,7 +65,7 @@ class ListControlPaneHelper {
res.add(((ListModelElement) listModel.getElementAt(i)).wrapper);
}
- return res.toArray(new Nameable[res.size()]);
+ return res.toArray(new Nameable[0]);
}
/**
diff --git a/designer-base/src/main/java/com/fr/design/gui/frpane/JTreeAutoBuildPane.java b/designer-base/src/main/java/com/fr/design/gui/frpane/JTreeAutoBuildPane.java
index 46cdae35bd..6103e68002 100644
--- a/designer-base/src/main/java/com/fr/design/gui/frpane/JTreeAutoBuildPane.java
+++ b/designer-base/src/main/java/com/fr/design/gui/frpane/JTreeAutoBuildPane.java
@@ -26,14 +26,14 @@ import com.fr.design.gui.ilable.UILabel;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
-
import com.fr.stable.StringUtils;
-
-import javax.swing.*;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.List;
+import javax.swing.*;
+import javax.swing.event.PopupMenuEvent;
+import javax.swing.event.PopupMenuListener;
public class JTreeAutoBuildPane extends BasicPane implements PreviewLabel.Previewable, EditOrNewLabel.Editable {
private TreeTableDataComboBox treeTableDataComboBox;
@@ -61,6 +61,23 @@ public class JTreeAutoBuildPane extends BasicPane implements PreviewLabel.Previe
tdChange();
}
});
+ // REPORT-38762 加一个展开监听事件,下拉框展开时刷新一下数据集
+ treeTableDataComboBox.addPopupMenuListener(new PopupMenuListener() {
+ @Override
+ public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
+ treeTableDataComboBox.refresh(DesignTableDataManager.getEditingTableDataSource());
+ }
+
+ @Override
+ public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
+
+ }
+
+ @Override
+ public void popupMenuCanceled(PopupMenuEvent e) {
+
+ }
+ });
selectTreeDataPanel.add(treeTableDataComboBox);
treeTableDataComboBox.setPreferredSize(new Dimension(200, 25));
treeTableDataComboBox.setSelectedIndex(-1);
diff --git a/designer-base/src/main/java/com/fr/design/gui/icombobox/LazyComboBoxTest.java b/designer-base/src/main/java/com/fr/design/gui/icombobox/LazyComboBoxTest.java
index 37e9db1546..9906749b7b 100644
--- a/designer-base/src/main/java/com/fr/design/gui/icombobox/LazyComboBoxTest.java
+++ b/designer-base/src/main/java/com/fr/design/gui/icombobox/LazyComboBoxTest.java
@@ -3,10 +3,10 @@
*/
package com.fr.design.gui.icombobox;
+import com.fr.design.gui.UILookAndFeel;
import com.fr.design.gui.itextfield.UITextField;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.log.FineLoggerFactory;
-import com.sun.java.swing.plaf.windows.WindowsLookAndFeel;
import javax.swing.JFrame;
import javax.swing.JPanel;
@@ -23,7 +23,7 @@ import java.awt.event.ItemListener;
public class LazyComboBoxTest {
public static void main(String[] args) {
try {
- UIManager.setLookAndFeel(new WindowsLookAndFeel());
+ UIManager.setLookAndFeel(new UILookAndFeel());
} catch (UnsupportedLookAndFeelException e1) {
FineLoggerFactory.getLogger().error(e1.getMessage(), e1);
}
diff --git a/designer-base/src/main/java/com/fr/design/gui/icontainer/UIEastResizableContainer.java b/designer-base/src/main/java/com/fr/design/gui/icontainer/UIEastResizableContainer.java
index df07acf1ab..77407a3eda 100644
--- a/designer-base/src/main/java/com/fr/design/gui/icontainer/UIEastResizableContainer.java
+++ b/designer-base/src/main/java/com/fr/design/gui/icontainer/UIEastResizableContainer.java
@@ -19,7 +19,7 @@ import java.awt.event.MouseMotionListener;
public class UIEastResizableContainer extends JPanel {
private static final long serialVersionUID = 1854340560790476907L;
- public static final int MAX_CONTAINER_WIDTH = 500;
+ public static final int MAX_CONTAINER_WIDTH = 340;
public static final int MIN_CONTAINER_WIDTH = 286;
private int containerWidth = 240;
@@ -266,13 +266,7 @@ public class UIEastResizableContainer extends JPanel {
@Override
public void mouseDragged(MouseEvent e) {
- containerWidth = UIEastResizableContainer.this.getWidth() + (UIEastResizableContainer.this.getLocationOnScreen().x - e.getXOnScreen());
- containerWidth = Math.min(containerWidth, MAX_CONTAINER_WIDTH);
- containerWidth = Math.max(containerWidth, MIN_CONTAINER_WIDTH);
- refreshContainer();
- if ( DesignModeContext.isAuthorityEditing()) {
- DesignerContext.getDesignerFrame().doResize();
- }
+ // do noting
}
});
addMouseListener(new MouseAdapter() {
diff --git a/designer-base/src/main/java/com/fr/design/gui/ipasswordfield/UIPasswordFieldWithFixedLength.java b/designer-base/src/main/java/com/fr/design/gui/ipasswordfield/UIPasswordFieldWithFixedLength.java
new file mode 100644
index 0000000000..c1cb98ca3d
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/gui/ipasswordfield/UIPasswordFieldWithFixedLength.java
@@ -0,0 +1,106 @@
+package com.fr.design.gui.ipasswordfield;
+
+import com.fr.stable.StringUtils;
+import org.jetbrains.annotations.NotNull;
+
+import javax.swing.text.Document;
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+
+/**
+ * @author Yvan
+ * @version 10.0
+ * Created by Yvan on 2020-08-11
+ * 有固定长度的"*"回显的密码框,避免泄露密码长度
+ */
+public class UIPasswordFieldWithFixedLength extends UIPassWordField {
+ /**
+ * 展示密码,为固定8位长度的特殊字符"*"组成
+ */
+ private static final String DISPLAY_PASSWORD = "********";
+
+ /**
+ * 实际密码
+ */
+ private String realPassword;
+
+ /**
+ * 用于判断是否清空密码
+ */
+ private boolean clearPassword;
+
+ public UIPasswordFieldWithFixedLength() {
+ this(null, null, 0);
+ }
+
+ public UIPasswordFieldWithFixedLength(String text) {
+ this(null, text, 0);
+ }
+
+ public UIPasswordFieldWithFixedLength(int columns) {
+ this(null, null, columns);
+ }
+
+ public UIPasswordFieldWithFixedLength(String text, int columns) {
+ this(null, text, columns);
+ }
+
+ public UIPasswordFieldWithFixedLength(Document doc, String txt, int columns) {
+ super(doc, txt, columns);
+ initRealPassword(txt);
+ }
+
+ /**
+ * 为realPassword赋初值并添加一个鼠标单击事件
+ */
+ public void initRealPassword(String text) {
+ this.realPassword = text == null ? StringUtils.EMPTY : text;
+ this.clearPassword = true;
+ addShowFixedLengthPasswordListener();
+ }
+
+ /**
+ * 当鼠标点击密码框,第一次做出键入动作时,清空显示密码与实际密码,用户需要重新输入密码
+ */
+ private void addShowFixedLengthPasswordListener() {
+ this.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ UIPasswordFieldWithFixedLength.this.clearPassword = true;
+ }
+ });
+ this.addKeyListener(new KeyAdapter() {
+ @Override
+ public void keyPressed(KeyEvent e) {
+ if (clearPassword) {
+ UIPasswordFieldWithFixedLength.this.setText(StringUtils.EMPTY);
+ UIPasswordFieldWithFixedLength.this.clearPassword = false;
+ UIPasswordFieldWithFixedLength.this.updateUI();
+ }
+ }
+ });
+ }
+
+ @Override
+ public void setText(@NotNull String t) {
+ this.realPassword = t;
+ // 看到代码中有些场景是将密码置为空字符串的,所以在这里加个判断
+ if (StringUtils.isEmpty(t)) {
+ super.setText(t);
+ } else {
+ super.setText(DISPLAY_PASSWORD);
+ }
+ }
+
+ @Override
+ public char[] getPassword() {
+ //如果用户刚清空密码框,并输入了新密码,则返回输入内容,否则返回realPassword
+ String text = new String(super.getPassword());
+ if (!StringUtils.isEmpty(text) && StringUtils.isEmpty(realPassword)) {
+ return text.toCharArray();
+ }
+ return realPassword.toCharArray();
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/design/gui/iprogressbar/ProgressDialog.java b/designer-base/src/main/java/com/fr/design/gui/iprogressbar/ProgressDialog.java
index 29214984c3..d1847545ce 100644
--- a/designer-base/src/main/java/com/fr/design/gui/iprogressbar/ProgressDialog.java
+++ b/designer-base/src/main/java/com/fr/design/gui/iprogressbar/ProgressDialog.java
@@ -3,11 +3,12 @@ package com.fr.design.gui.iprogressbar;
import com.fr.design.constants.UIConstants;
import com.fr.design.dialog.UIDialog;
import com.fr.design.gui.ilable.UILabel;
-import com.fr.stable.os.support.OSBasedAction;
-import com.fr.stable.os.support.OSSupportCenter;
import com.fr.design.os.impl.SupportOSImpl;
+import com.fr.design.utils.DesignUtils;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.general.FRFont;
+import com.fr.stable.os.support.OSBasedAction;
+import com.fr.stable.os.support.OSSupportCenter;
import javax.swing.JDialog;
import javax.swing.JLabel;
@@ -57,7 +58,10 @@ public class ProgressDialog extends UIDialog {
progressBar.setMaximum(1000);
panel.add(progressBar, BorderLayout.CENTER);
text = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Loading_Project"), JLabel.CENTER);
- FRFont font = FRFont.getInstance().applySize(14).applyForeground(new ColorUIResource(333334));
+ FRFont font = DesignUtils
+ .getDefaultGUIFont()
+ .applySize(14)
+ .applyForeground(new ColorUIResource(333334));
text.setFont(font);
panel.add(text, BorderLayout.SOUTH);
panel.setVisible(true);
diff --git a/designer-base/src/main/java/com/fr/design/gui/ispinner/UISpinner.java b/designer-base/src/main/java/com/fr/design/gui/ispinner/UISpinner.java
index fb6752ac19..c60ae27605 100644
--- a/designer-base/src/main/java/com/fr/design/gui/ispinner/UISpinner.java
+++ b/designer-base/src/main/java/com/fr/design/gui/ispinner/UISpinner.java
@@ -30,6 +30,7 @@ public class UISpinner extends JPanel implements UIObserver, GlobalNameObserver
private static final int LEN = 13;
private static final int WIDTH = 13;
private static final int HEIGHT = 10;
+ private static final int DEFAULT_NUMBERFIELD_COLUMNS = 2;
private UINumberField textField;
private UIButton preButton;
private UIButton nextButton;
@@ -40,9 +41,22 @@ public class UISpinner extends JPanel implements UIObserver, GlobalNameObserver
private UIObserverListener uiObserverListener;
private GlobalNameListener globalNameListener = null;
private boolean lessMinValue = false;
+ /**
+ * Spinner内的数字文本框长度
+ */
+ private int numberFieldColumns;
public UISpinner(double minValue, double maxValue, double dierta) {
+ init(minValue, maxValue, dierta);
+ }
+
+ public UISpinner(double minValue, double maxValue, double dierta, double defaultValue) {
+ init(minValue, maxValue, dierta);
+ textField.setValue(defaultValue);
+ }
+
+ private void init(double minValue, double maxValue, double dierta) {
this.minValue = minValue;
this.maxValue = maxValue;
this.dierta = dierta;
@@ -50,11 +64,6 @@ public class UISpinner extends JPanel implements UIObserver, GlobalNameObserver
iniListener();
}
- public UISpinner(double minValue, double maxValue, double dierta, double defaultValue) {
- this(minValue, maxValue, dierta);
- textField.setValue(defaultValue);
- }
-
private void iniListener() {
if (shouldResponseChangeListener()) {
this.addChangeListener(new ChangeListener() {
@@ -156,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);
@@ -308,7 +324,8 @@ public class UISpinner extends JPanel implements UIObserver, GlobalNameObserver
}
protected UINumberField initNumberField() {
- return new UINumberField(2) {
+ int columns = this.numberFieldColumns == 0 ? DEFAULT_NUMBERFIELD_COLUMNS : this.numberFieldColumns;
+ return new UINumberField(columns) {
public boolean shouldResponseChangeListener() {
return false;
}
diff --git a/designer-base/src/main/java/com/fr/design/gui/itree/filetree/EnvFileTree.java b/designer-base/src/main/java/com/fr/design/gui/itree/filetree/EnvFileTree.java
index d5a9044d5e..435d5a465a 100644
--- a/designer-base/src/main/java/com/fr/design/gui/itree/filetree/EnvFileTree.java
+++ b/designer-base/src/main/java/com/fr/design/gui/itree/filetree/EnvFileTree.java
@@ -2,7 +2,6 @@ package com.fr.design.gui.itree.filetree;
import com.fr.base.FRContext;
import com.fr.design.constants.UIConstants;
-import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.itree.refreshabletree.ExpandMutableTreeNode;
import com.fr.design.gui.itree.refreshabletree.RefreshableJTree;
import com.fr.design.i18n.Toolkit;
@@ -14,13 +13,13 @@ import com.fr.stable.CoreConstants;
import com.fr.stable.StableUtils;
import com.fr.workspace.WorkContext;
+import javax.swing.BorderFactory;
import javax.swing.JTree;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import java.awt.Color;
import java.awt.Component;
-import java.awt.Dimension;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
@@ -79,14 +78,7 @@ public class EnvFileTree extends RefreshableJTree {
this.setIcon(null);
this.setText(PENDING.toString());
}
- // 这里新建一个Label作为render是因为JTree在动态刷新的时候,节点上render画布的的宽度不会变,会使得一部分比较长的数据显示为"..."
- UILabel label = new UILabel();
- label.setText(getText());
- label.setIcon(getIcon());
- this.setSize(label.getPreferredSize());
- Dimension dim = label.getPreferredSize();
- dim.height += 2;
- this.setPreferredSize(dim);
+ this.setBorder(BorderFactory.createEmptyBorder(1, 0, 1, 0));
this.setBackgroundNonSelectionColor(UIConstants.TREE_BACKGROUND);
this.setTextSelectionColor(Color.WHITE);
this.setBackgroundSelectionColor(UIConstants.FLESH_BLUE);
diff --git a/designer-base/src/main/java/com/fr/design/gui/style/FRFontPane.java b/designer-base/src/main/java/com/fr/design/gui/style/FRFontPane.java
index 9ce63abe37..f806ded065 100644
--- a/designer-base/src/main/java/com/fr/design/gui/style/FRFontPane.java
+++ b/designer-base/src/main/java/com/fr/design/gui/style/FRFontPane.java
@@ -25,10 +25,20 @@ import com.fr.general.FRFont;
import com.fr.stable.Constants;
-import javax.swing.*;
+import javax.swing.BorderFactory;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
-import java.awt.*;
+import java.awt.BorderLayout;
+import java.awt.CardLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.GridLayout;
+import java.awt.RenderingHints;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Vector;
@@ -67,11 +77,20 @@ public class FRFontPane extends AbstractBasicStylePane implements GlobalNameObse
private UIToggleButton subPane;
private JPanel linePane;
private int italic_bold;
+ /**
+ * LeftPane和RightPane之间的间隙,也是fontSizeStyleComboBox与fontSizeComboBox之间的间隙,之前的默认值为VGAP_LARGE
+ */
+ private int hGapBetweenLeftPaneAndRightPane = LayoutConstants.VGAP_LARGE;
public FRFontPane() {
this.initComponents();
}
+ public FRFontPane(int hGapBetweenLeftPaneAndRightPane) {
+ this.hGapBetweenLeftPaneAndRightPane = hGapBetweenLeftPaneAndRightPane;
+ this.initComponents();
+ }
+
public static void main(String[] args) {
JFrame jf = new JFrame("test");
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
@@ -345,7 +364,7 @@ public class FRFontPane extends AbstractBasicStylePane implements GlobalNameObse
private JPanel createPane() {
JPanel createPane = new JPanel(new BorderLayout());
createPane.add(fontNameComboBox, BorderLayout.NORTH);
- JPanel jPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{createLeftPane(), createRightPane()}}, TableLayoutHelper.FILL_LASTCOLUMN, LayoutConstants.VGAP_LARGE, LayoutConstants.VGAP_LARGE);
+ JPanel jPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{createLeftPane(), createRightPane()}}, TableLayoutHelper.FILL_LASTCOLUMN, hGapBetweenLeftPaneAndRightPane, LayoutConstants.VGAP_LARGE);
jPanel.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0));
createPane.add(jPanel, BorderLayout.CENTER);
return createPane;
diff --git a/designer-base/src/main/java/com/fr/design/gui/syntax/ui/rtextarea/ConfigurableCaret.java b/designer-base/src/main/java/com/fr/design/gui/syntax/ui/rtextarea/ConfigurableCaret.java
index 47c4d35015..233fcd598c 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
@@ -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.*;
@@ -454,9 +455,10 @@ 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));
+ // 向右再移动一个位置 避免光标太接近文字内容
+ g2.draw(new Line2D.Float(r.x + 1, r.y, r.x + 1, r.y + r.height));
break;
} // End of switch (style).
diff --git a/designer-base/src/main/java/com/fr/design/jdk/JdkVersion.java b/designer-base/src/main/java/com/fr/design/jdk/JdkVersion.java
new file mode 100644
index 0000000000..be0c3da013
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/jdk/JdkVersion.java
@@ -0,0 +1,38 @@
+package com.fr.design.jdk;
+
+import com.fr.stable.StableUtils;
+
+/**
+ * 设计器运行jdk版本
+ *
+ * @author hades
+ * @version 10.0
+ * Created by hades on 2020/9/27
+ */
+public enum JdkVersion {
+
+ /**
+ * 小于或等于jdk 8
+ */
+ LE_8 {
+
+ @Override
+ public boolean support() {
+ return StableUtils.getMajorJavaVersion() <= 8;
+ }
+ },
+
+ /**
+ * 大于或等于jdk 9
+ */
+ GE_9 {
+
+ @Override
+ public boolean support() {
+ return StableUtils.getMajorJavaVersion() >= 9;
+ }
+ };
+
+
+ abstract public boolean support();
+}
diff --git a/designer-base/src/main/java/com/fr/design/locale/impl/SupportLocaleImpl.java b/designer-base/src/main/java/com/fr/design/locale/impl/SupportLocaleImpl.java
index 904a6c18b1..0373dad033 100644
--- a/designer-base/src/main/java/com/fr/design/locale/impl/SupportLocaleImpl.java
+++ b/designer-base/src/main/java/com/fr/design/locale/impl/SupportLocaleImpl.java
@@ -156,7 +156,20 @@ public enum SupportLocaleImpl implements SupportLocale {
set.add(Locale.TAIWAN);
return set;
}
- }
-
+ },
+ /**
+ * 更新升级-帮助菜单下
+ */
+ UPDATE_HELP {
+ @Override
+ public Set support() {
+ Set set = new HashSet<>();
+ set.add(Locale.US);
+ set.add(Locale.KOREA);
+ set.add(Locale.CHINA);
+ set.add(Locale.TAIWAN);
+ return set;
+ }
+ }
}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java
index 42365dcc57..2f65fca0a8 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
@@ -257,8 +257,6 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
}
};
- private ProgressDialog progressDialog;
-
public DesignerFrame(ToolBarMenuDock ad) {
setName(DESIGNER_FRAME_NAME);
@@ -338,7 +336,6 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
this.setDropTarget(new DropTarget(this, DnDConstants.ACTION_MOVE, new FileDropTargetListener(), true));
closeMode = UIConstants.CLOSE_OF_AUTHORITY;
initMenuPane();
- this.progressDialog = new ProgressDialog(this);
}
public void resizeFrame() {
@@ -748,9 +745,15 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
* @param al 组件名称
*/
public void checkCombineUp(boolean flag, ArrayList al) {
-
- combineUp.checkComponentsByNames(flag, al);
-
+ //Yvan: 检查当前是否为WORK_SHEET状态,因为只有WORK_SHEET中含有格式刷组件,此时是不需要进行checkComponentsByNames的
+ JTemplate, ?> jTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate();
+ if (jTemplate != null) {
+ // 第一个条件满足后还需要添加一重判断,判断是编辑报表块还是参数面板,编辑报表块时则直接return
+ if (jTemplate.getMenuState() == DesignState.WORK_SHEET && !jTemplate.isUpMode()) {
+ return;
+ }
+ combineUp.checkComponentsByNames(flag, al);
+ }
}
/**
@@ -1262,23 +1265,15 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
}
}
+ @Deprecated
public ProgressDialog getProgressDialog() {
- return progressDialog;
+ return new ProgressDialog(this);
}
- public void showProgressDialog() {
-
- progressDialog.setVisible(true);
-
- }
-
- /**
- * 隐藏进度框
- */
- public void hideProgressDialog() {
+ @Deprecated
+ public void openProgressDialog() {
- progressDialog.setVisible(false);
}
/**
@@ -1286,17 +1281,17 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
*
* @param progress 进度值
*/
+ @Deprecated
public void updateProgress(int progress) {
- progressDialog.setProgressValue(progress);
}
/**
* 释放进度框
*/
+ @Deprecated
public void disposeProgressDialog() {
- progressDialog.dispose();
}
/**
@@ -1307,4 +1302,5 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
public boolean isDesignerOpened() {
return designerOpened;
}
+
}
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 bcac7f946c..4f59032dca 100644
--- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java
+++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java
@@ -556,7 +556,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt
);
newNameLabel.setHorizontalAlignment(SwingConstants.RIGHT);
newNameLabel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 10));
- newNameLabel.setPreferredSize(new Dimension(118, 15));
+ //newNameLabel.setPreferredSize(new Dimension(118, 15));
// 重命名输入框
nameField = new UITextField(oldName);
@@ -578,7 +578,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt
}
});
nameField.selectAll();
- nameField.setPreferredSize(new Dimension(180, 20));
+ nameField.setPreferredSize(new Dimension(170, 20));
JPanel topPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 5));
topPanel.setBorder(BorderFactory.createEmptyBorder(15, 15, 0, 15));
@@ -856,7 +856,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt
BorderLayout.CENTER);
- this.setSize(340, 180);
+ this.setSize(380, 180);
this.setTitle(Toolkit.i18nText("Fine-Design_Basic_Mkdir"));
this.setResizable(false);
this.setAlwaysOnTop(true);
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 a273828d84..0703216eba 100644
--- a/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java
+++ b/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java
@@ -12,6 +12,8 @@ import com.fr.design.gui.ibutton.UIButtonUI;
import com.fr.design.gui.icontainer.UIEastResizableContainer;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.layout.VerticalFlowLayout;
+import com.fr.design.menu.SnapChatUtil;
+import com.fr.design.notification.SnapChat;
import com.fr.design.ui.util.UIUtil;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.design.utils.gui.GUIPaintUtils;
@@ -171,7 +173,8 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
}
updateAllPropertyPane();
}
- }); }
+ });
+ }
}, filter);
PluginListenerRegistration.getInstance().listen(
PluginEventType.BeforeStop,
@@ -221,11 +224,13 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
String key = provider.key();
PropertyItemBean itemBean = provider.getItem();
PropertyItem propertyItem = new PropertyItem(itemBean.getName(),
- itemBean.getTitle(),
- itemBean.getBtnIconName(),
- itemBean.getBtnIconBaseDir(),
- itemBean.getVisibleModes(),
- itemBean.getEnableModes());
+ itemBean.getTitle(),
+ itemBean.getBtnIconName(),
+ itemBean.getBtnIconBaseDir(),
+ itemBean.getVisibleModes(),
+ itemBean.getEnableModes(),
+ itemBean.getSnapChat(),
+ itemBean.getPromptWindow());
UIButton button = propertyItem.getButton();
List buttonListeners = itemBean.getButtonListeners();
if (buttonListeners != null) {
@@ -324,6 +329,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
cellElement.popupDialog.showDefaultPane();
}
}
+
// 禁用单元格元素tab
private void enableCellElementPane(PropertyItem cellElement) {
cellElement.setEnabled(true);
@@ -381,7 +387,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
/**
* 可通过此方法,判断当前的编辑模式
- * */
+ */
public PropertyMode getCurrentMode() {
return currentMode;
}
@@ -511,7 +517,10 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
UIUtil.invokeLaterIfNeeded(new Runnable() {
@Override
public void run() {
- propertyItemMap.get(key).replaceContentPane(pane);
+ PropertyItem item = propertyItemMap.get(key);
+ if (item != null) {
+ item.replaceContentPane(pane);
+ }
}
});
}
@@ -524,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");
@@ -546,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);
@@ -654,6 +663,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
class PropertyItem {
+ private SnapChat snapChat;
private UIButton button;
private String name; // 用于 card 切换
private String title; // 用于显示
@@ -664,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; // 是否被替代
@@ -684,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);
@@ -832,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);
}
}
@@ -869,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();
@@ -899,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);
@@ -1012,8 +1035,8 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
}
/**
- * @Description:刷新currentPopupPane面板位置,当设计器缩放时会调用这个函数
* @param
+ * @Description:刷新currentPopupPane面板位置,当设计器缩放时会调用这个函数
* @return:
* @Author: Henry.Wang
* @date: 2020/7/30 11:39
@@ -1028,8 +1051,8 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
}
/**
- * @Description:清空currentPopupPane数据,当切换模板时会调用这个函数
* @param
+ * @Description:清空currentPopupPane数据,当切换模板时会调用这个函数
* @return:
* @Author: Henry.Wang
* @date: 2020/7/30 11:42
@@ -1068,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;
@@ -1081,6 +1106,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
contentPane.setBackground(originColor);
}
}
+
@Override
public void mousePressed(MouseEvent e) {
if (e.getX() < ARROW_RANGE_START) {
@@ -1102,6 +1128,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
}
repaint();
}
+
@Override
public void mouseDragged(MouseEvent e) {
if (isMovable && mouseDownCompCoords != null) {
@@ -1214,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();
@@ -1316,6 +1344,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
mouseDownCompCoords = e.getLocationOnScreen();
}
}
+
@Override
public void mouseReleased(MouseEvent e) {
mouseDownCompCoords = null;
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/PromptWindow.java b/designer-base/src/main/java/com/fr/design/mainframe/PromptWindow.java
new file mode 100644
index 0000000000..dc7fc1f63a
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/PromptWindow.java
@@ -0,0 +1,20 @@
+package com.fr.design.mainframe;
+
+import javax.swing.JWindow;
+
+/**
+ * @Author: Yuan.Wang
+ * @Date: 2020/10/9
+ * 只关心Window的显示和隐藏操作时可以实现该接口
+ */
+public interface PromptWindow {
+ /**
+ * 显示弹窗
+ */
+ void showWindow();
+
+ /**
+ * 隐藏弹窗
+ */
+ void hideWindow();
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/PropertyItemBean.java b/designer-base/src/main/java/com/fr/design/mainframe/PropertyItemBean.java
index ee54364ba5..cdd5dbb64d 100644
--- a/designer-base/src/main/java/com/fr/design/mainframe/PropertyItemBean.java
+++ b/designer-base/src/main/java/com/fr/design/mainframe/PropertyItemBean.java
@@ -1,5 +1,7 @@
package com.fr.design.mainframe;
+import com.fr.design.notification.SnapChat;
+
import java.awt.event.ActionListener;
import java.util.List;
@@ -7,71 +9,89 @@ import java.util.List;
* created by Harrison on 2020/03/23
**/
public class PropertyItemBean {
-
+
private String name;
private String title;
private String btnIconName;
private String btnIconBaseDir;
+ private SnapChat snapChat;
+ private PromptWindow promptWindow;
private EastRegionContainerPane.PropertyMode[] visibleModes;
private EastRegionContainerPane.PropertyMode[] enableModes;
private List buttonListeners;
-
+
public PropertyItemBean() {
}
-
+
public String getName() {
return name;
}
-
+
public void setName(String name) {
this.name = name;
}
-
+
public String getTitle() {
return title;
}
-
+
public void setTitle(String title) {
this.title = title;
}
-
+
public String getBtnIconName() {
return btnIconName;
}
-
+
public void setBtnIconName(String btnIconName) {
this.btnIconName = btnIconName;
}
-
+
public String getBtnIconBaseDir() {
-
+
return btnIconBaseDir;
}
-
+
public void setBtnIconBaseDir(String btnIconBaseDir) {
this.btnIconBaseDir = btnIconBaseDir;
}
-
+
+ public SnapChat getSnapChat() {
+ return snapChat;
+ }
+
+ public void setSnapChat(SnapChat snapChat) {
+ this.snapChat = snapChat;
+ }
+
+ public PromptWindow getPromptWindow() {
+ return promptWindow;
+ }
+
+ public void setPromptWindow(PromptWindow promptWindow) {
+ this.promptWindow = promptWindow;
+ }
+
public EastRegionContainerPane.PropertyMode[] getVisibleModes() {
return visibleModes;
}
-
+
public void setVisibleModes(EastRegionContainerPane.PropertyMode[] visibleModes) {
this.visibleModes = visibleModes;
}
-
+
public EastRegionContainerPane.PropertyMode[] getEnableModes() {
return enableModes;
}
-
+
public void setEnableModes(EastRegionContainerPane.PropertyMode[] enableModes) {
this.enableModes = enableModes;
}
-
+
public List getButtonListeners() {
return buttonListeners;
}
-
+
public void setButtonListeners(List buttonListeners) {
this.buttonListeners = buttonListeners;
}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java
index c81c6749f8..078d4d1289 100644
--- a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java
+++ b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java
@@ -54,9 +54,7 @@ import com.fr.design.mainframe.ToolBarNewTemplatePane;
import com.fr.design.menu.MenuDef;
import com.fr.design.menu.SeparatorDef;
import com.fr.design.menu.ShortCut;
-import com.fr.design.menu.SnapChatMenuDef;
import com.fr.design.menu.ToolBarDef;
-import com.fr.design.notification.SnapChatAllTypes;
import com.fr.design.os.impl.SupportOSImpl;
import com.fr.design.remote.action.RemoteDesignAuthManagerAction;
import com.fr.design.update.actions.SoftwareUpdateAction;
@@ -530,35 +528,18 @@ public abstract class ToolBarMenuDock {
* @return 帮组菜单的子菜单
*/
public ShortCut[] createHelpShortCuts() {
- final java.util.List shortCuts = new ArrayList();
-
- Locale locale = GeneralContext.getLocale();
+ final java.util.List shortCuts = new ArrayList<>();
- LocaleCenter.buildAction(new LocaleAction() {
- @Override
- public void execute() {
- shortCuts.add(new VideoAction());
- }
- }, SupportLocaleImpl.VIDEO);
+ LocaleCenter.buildAction(() -> shortCuts.add(new VideoAction()), SupportLocaleImpl.VIDEO);
- LocaleCenter.buildAction(new LocaleAction() {
- @Override
- public void execute() {
- shortCuts.add(new TutorialAction());
- }
- }, SupportLocaleImpl.TUTORIAL_HELP);
+ LocaleCenter.buildAction(() -> shortCuts.add(new TutorialAction()), SupportLocaleImpl.TUTORIAL_HELP);
- LocaleCenter.buildAction(new LocaleAction() {
- @Override
- public void execute() {
- shortCuts.add(new TechSupportAction());
- }
- }, SupportLocaleImpl.TECH_SUPPORT_HELP);
+ LocaleCenter.buildAction(() -> shortCuts.add(new TechSupportAction()), SupportLocaleImpl.TECH_SUPPORT_HELP);
//远程不使用更新升级,产品演示
if (WorkContext.getCurrent().isLocal()) {
shortCuts.add(new WebDemoAction());
- shortCuts.add(new SoftwareUpdateAction());
+ LocaleCenter.buildAction(() -> shortCuts.add(new SoftwareUpdateAction()), SupportLocaleImpl.UPDATE_HELP);
}
if (AlphaFineConfigManager.isALPHALicAvailable()) {
shortCuts.add(new AlphaFineAction());
@@ -566,12 +547,7 @@ public abstract class ToolBarMenuDock {
shortCuts.add(SeparatorDef.DEFAULT);
if (DesignerEnvManager.getEnvManager().isOpenDebug()) {
- OSSupportCenter.buildAction(new OSBasedAction() {
- @Override
- public void execute(Object... objects) {
- shortCuts.add(new FineUIAction());
- }
- }, SupportOSImpl.FINEUI);
+ OSSupportCenter.buildAction(objects -> shortCuts.add(new FineUIAction()), SupportOSImpl.FINEUI);
}
shortCuts.add(new AboutAction());
@@ -655,11 +631,8 @@ public abstract class ToolBarMenuDock {
}
public MenuDef createCommunityMenuDef() {
-
- MenuDef menuDef = new SnapChatMenuDef(
- com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Community"),
- 'C',
- SnapChatAllTypes.Menu.BBS);
+
+ MenuDef menuDef = new MenuDef(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Community"), 'C');
ShortCut[] otherCommunityShortCuts = createCommunityShortCuts();
for (ShortCut shortCut : otherCommunityShortCuts) {
menuDef.addShortCut(shortCut);
diff --git a/designer-base/src/main/java/com/fr/design/menu/SnapChatMenuDef.java b/designer-base/src/main/java/com/fr/design/menu/SnapChatMenuDef.java
index 2ec3f6c7ee..80ba40afeb 100644
--- a/designer-base/src/main/java/com/fr/design/menu/SnapChatMenuDef.java
+++ b/designer-base/src/main/java/com/fr/design/menu/SnapChatMenuDef.java
@@ -4,6 +4,7 @@ import com.fr.design.gui.imenu.UIMenu;
import com.fr.design.gui.imenu.UIScrollMenu;
import com.fr.design.notification.SnapChat;
import com.fr.design.notification.SnapChatConfig;
+import com.fr.design.notification.SnapChatFactory;
import com.fr.design.notification.SnapChatKey;
import javax.swing.JMenu;
@@ -19,47 +20,49 @@ import java.awt.image.BufferedImage;
* created by Harrison on 2020/03/16
**/
public class SnapChatMenuDef extends MenuDef implements SnapChat {
-
+
private SnapChatKey uniqueKey;
private SnapChatMenuUI menuUI = new SnapChatMenuUI(this);
-
+ private SnapChat snapChat ;
+
public SnapChatMenuDef(String name, SnapChatKey uniqueKey) {
super(name);
this.uniqueKey = uniqueKey;
+ snapChat = SnapChatFactory.createSnapChat(true, uniqueKey);
}
public SnapChatMenuDef(Boolean rePaint, SnapChatKey uniqueKey) {
super(rePaint);
this.uniqueKey = uniqueKey;
+ snapChat = SnapChatFactory.createSnapChat(true, uniqueKey);
}
public SnapChatMenuDef(String name, char mnemonic, SnapChatKey uniqueKey) {
super(name, mnemonic);
this.uniqueKey = uniqueKey;
+ snapChat = SnapChatFactory.createSnapChat(true, uniqueKey);
}
@Override
public boolean hasRead() {
-
- String calcKey = calcKey();
- Boolean val = SnapChatConfig.getInstance().hasRead(calcKey);
- // 默认读过了。
- return val == null ? defaultStatus() : val;
+ return snapChat.hasRead();
}
@Override
public void markRead() {
-
- String calcKey = calcKey();
- SnapChatConfig.getInstance().markRead(calcKey);
+ snapChat.markRead();
}
-
+
@Override
public boolean defaultStatus() {
-
- return true;
+ return snapChat.defaultStatus();
}
-
+
+ @Override
+ public SnapChatKey key() {
+ return snapChat.key();
+ }
+
@Override
public void addShortCut(ShortCut shortCut) {
@@ -74,13 +77,6 @@ public class SnapChatMenuDef extends MenuDef implements SnapChat {
super.insertShortCut(index, shortCut);
}
-
- @Override
- public SnapChatKey key() {
-
- return this.uniqueKey;
- }
-
@Override
protected MenuListener createMenuListener() {
@@ -97,17 +93,12 @@ public class SnapChatMenuDef extends MenuDef implements SnapChat {
if (shortCut instanceof SnapChatUpdateAction) {
SnapChatUpdateAction action = (SnapChatUpdateAction) shortCut;
if (!action.hasRead()) {
- String calcKey = calcKey();
+ String calcKey = snapChat.calcKey();
SnapChatConfig.getInstance().resetRead(calcKey);
}
}
}
-
- private String calcKey() {
-
- return key().calc();
- }
-
+
@Override
protected UIMenu createJMenu0() {
diff --git a/designer-base/src/main/java/com/fr/design/menu/SnapChatUpdateAction.java b/designer-base/src/main/java/com/fr/design/menu/SnapChatUpdateAction.java
index 9ade762500..8cc0734371 100644
--- a/designer-base/src/main/java/com/fr/design/menu/SnapChatUpdateAction.java
+++ b/designer-base/src/main/java/com/fr/design/menu/SnapChatUpdateAction.java
@@ -3,7 +3,7 @@ package com.fr.design.menu;
import com.fr.design.actions.UpdateAction;
import com.fr.design.gui.imenu.UIMenuItem;
import com.fr.design.notification.SnapChat;
-import com.fr.design.notification.SnapChatConfig;
+import com.fr.design.notification.SnapChatFactory;
import com.fr.design.notification.SnapChatKey;
import java.awt.event.ActionEvent;
@@ -12,57 +12,46 @@ import java.awt.event.ActionEvent;
* created by Harrison on 2020/03/22
**/
public abstract class SnapChatUpdateAction extends UpdateAction implements SnapChat {
-
+
private SnapChatKey uniqueKey;
-
+ private SnapChat snapChat ;
+
public SnapChatUpdateAction(SnapChatKey uniqueKey) {
this.uniqueKey = uniqueKey;
+ snapChat = SnapChatFactory.createSnapChat(false, uniqueKey);
}
-
+
@Override
public final void actionPerformed(ActionEvent e) {
-
markRead();
actionPerformed0(e);
}
-
+
protected abstract void actionPerformed0(ActionEvent e);
-
+
@Override
public boolean hasRead() {
-
- String calcKey = calcKey();
- Boolean val = SnapChatConfig.getInstance().hasRead(calcKey);
- return val == null ? defaultStatus() : val;
+ return snapChat.hasRead();
}
-
+
@Override
public void markRead() {
-
- String calcKey = calcKey();
- SnapChatConfig.getInstance().markRead(calcKey);
+ snapChat.markRead();
}
-
+
@Override
public boolean defaultStatus() {
-
- return false;
+ return snapChat.defaultStatus();
}
-
+
@Override
public SnapChatKey key() {
-
- return this.uniqueKey;
- }
-
- private String calcKey() {
-
- return key().calc();
+ return snapChat.key();
}
-
+
@Override
public UIMenuItem createMenuItem() {
-
+
Object object = this.getValue(UIMenuItem.class.getName());
if (object == null && !(object instanceof UIMenuItem)) {
UIMenuItem menuItem = new UIMenuItem(this);
@@ -70,10 +59,10 @@ public abstract class SnapChatUpdateAction extends UpdateAction implements SnapC
menuItem.setName(getName());
menuItem.setUI(new SnapChatMenuItemUI(this));
object = menuItem;
-
+
this.putValue(UIMenuItem.class.getName(), object);
}
return (UIMenuItem) object;
}
-
+
}
diff --git a/designer-base/src/main/java/com/fr/design/menu/SnapChatUtil.java b/designer-base/src/main/java/com/fr/design/menu/SnapChatUtil.java
index 6eb648055a..46bede232f 100644
--- a/designer-base/src/main/java/com/fr/design/menu/SnapChatUtil.java
+++ b/designer-base/src/main/java/com/fr/design/menu/SnapChatUtil.java
@@ -10,24 +10,31 @@ import java.awt.geom.Ellipse2D;
* created by Harrison on 2020/03/22
**/
public class SnapChatUtil {
-
+ private static final int WIDTH = 4;
+ private static final int HEIGHT = 4;
+ private static final int TOP_GAP = 4;
+ private static final int RIGHT_GAP = 6;
+
+ /**
+ * 绘制菜单项的小红点
+ */
public static void paintSnapChat(Graphics g, Rectangle textRect) {
-
- Color oldColor = g.getColor();
-
- double x = textRect.getWidth();
- x += textRect.getX();
- x += 2;
-
+ double x = textRect.getWidth() + textRect.getX() + 2;
double y = textRect.getY();
-
+ paintRedPoint(g, new Ellipse2D.Double(x, y, WIDTH, HEIGHT));
+ }
+
+ public static void paintPropertyItemPoint(Graphics g, Rectangle bounds) {
+ double x = bounds.getWidth() - RIGHT_GAP;
+ paintRedPoint(g, new Ellipse2D.Double(x, TOP_GAP, WIDTH, HEIGHT));
+ }
+
+ private static void paintRedPoint(Graphics g, Ellipse2D.Double shape) {
+ Color oldColor = g.getColor();
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.red);
- Ellipse2D.Double shape =
- new Ellipse2D.Double(x, y, 4, 4);
g2d.fill(shape);
g2d.draw(shape);
-
g2d.setColor(oldColor);
}
}
diff --git a/designer-base/src/main/java/com/fr/design/notification/AbstractSnapChat.java b/designer-base/src/main/java/com/fr/design/notification/AbstractSnapChat.java
new file mode 100644
index 0000000000..0b174da942
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/notification/AbstractSnapChat.java
@@ -0,0 +1,22 @@
+package com.fr.design.notification;
+
+/**
+ * @Author: Yuan.Wang
+ * @Date: 2020/9/27
+ */
+public abstract class AbstractSnapChat implements SnapChat {
+ @Override
+ public boolean hasRead() {
+
+ String calcKey = calcKey();
+ Boolean val = SnapChatConfig.getInstance().hasRead(calcKey);
+ return val == null ? defaultStatus() : val;
+ }
+
+ @Override
+ public void markRead() {
+
+ String calcKey = calcKey();
+ SnapChatConfig.getInstance().markRead(calcKey);
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/design/notification/SnapChat.java b/designer-base/src/main/java/com/fr/design/notification/SnapChat.java
index 4f610c060b..71aabb87d7 100644
--- a/designer-base/src/main/java/com/fr/design/notification/SnapChat.java
+++ b/designer-base/src/main/java/com/fr/design/notification/SnapChat.java
@@ -32,4 +32,8 @@ public interface SnapChat {
* @return 字符标志
*/
SnapChatKey key();
+
+ default String calcKey() {
+ return key().calc();
+ }
}
diff --git a/designer-base/src/main/java/com/fr/design/notification/SnapChatFactory.java b/designer-base/src/main/java/com/fr/design/notification/SnapChatFactory.java
new file mode 100644
index 0000000000..a3fd463a36
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/notification/SnapChatFactory.java
@@ -0,0 +1,32 @@
+package com.fr.design.notification;
+
+import com.fr.plugin.context.PluginContext;
+
+/**
+ * @Author: Yuan.Wang
+ * @Date: 2020/10/10
+ */
+public class SnapChatFactory {
+ public static SnapChat createSnapChat(boolean defaultStatus, SnapChatKey snapChatKey) {
+ return createSnapChat(defaultStatus, snapChatKey, null);
+ }
+
+ public static SnapChat createSnapChat(boolean defaultStatus, SnapChatKey snapChatKey, PluginContext context) {
+ return new AbstractSnapChat() {
+ @Override
+ public boolean defaultStatus() {
+ return defaultStatus;
+ }
+
+ @Override
+ public SnapChatKey key() {
+ return snapChatKey;
+ }
+
+ @Override
+ public String calcKey() {
+ return context == null ? key().calc() : key().calc(context);
+ }
+ };
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/design/notification/SnapChatKey.java b/designer-base/src/main/java/com/fr/design/notification/SnapChatKey.java
index fa316db350..ecb89e5097 100644
--- a/designer-base/src/main/java/com/fr/design/notification/SnapChatKey.java
+++ b/designer-base/src/main/java/com/fr/design/notification/SnapChatKey.java
@@ -1,9 +1,18 @@
package com.fr.design.notification;
+import com.fr.plugin.context.PluginContext;
+
/**
* created by Harrison on 2020/03/16
**/
public interface SnapChatKey {
-
+
String calc();
+
+ /**
+ * 插件刚被安装时不能通过PluginContexts.getContext()方法获取插件上下文,因此加一个接口
+ */
+ default String calc(PluginContext context) {
+ throw new UnsupportedOperationException();
+ }
}
diff --git a/designer-base/src/main/java/com/fr/design/object/NameObject.java b/designer-base/src/main/java/com/fr/design/object/NameObject.java
index 818de9d57a..c7dc3811c0 100644
--- a/designer-base/src/main/java/com/fr/design/object/NameObject.java
+++ b/designer-base/src/main/java/com/fr/design/object/NameObject.java
@@ -2,6 +2,7 @@ package com.fr.design.object;
import com.fr.base.BaseUtils;
import com.fr.general.ComparatorUtils;
+import com.fr.stable.StableUtils;
/**
*
@@ -60,10 +61,10 @@ public class NameObject {
return "Name:" + this.getName() + "\tObject:" + this.getObject();
}
- @SuppressWarnings({ "rawtypes", "unchecked" })
+ @SuppressWarnings({ "rawtypes"})
public Object clone() throws CloneNotSupportedException {
NameObject newNameObject = (NameObject)super.clone();
- newNameObject.object = BaseUtils.cloneObject(this.object);
+ newNameObject.object = StableUtils.cloneObject(this.object);
return newNameObject;
}
diff --git a/designer-base/src/main/java/com/fr/design/os/impl/PMDialogAction.java b/designer-base/src/main/java/com/fr/design/os/impl/PMDialogAction.java
index 3f2f097283..7e74e7651a 100644
--- a/designer-base/src/main/java/com/fr/design/os/impl/PMDialogAction.java
+++ b/designer-base/src/main/java/com/fr/design/os/impl/PMDialogAction.java
@@ -2,8 +2,10 @@ package com.fr.design.os.impl;
import com.fr.config.ServerPreferenceConfig;
import com.fr.design.extra.WebViewDlgHelper;
+import com.fr.design.jdk.JdkVersion;
import com.fr.design.upm.UpmFinder;
import com.fr.design.utils.DesignUtils;
+import com.fr.stable.StableUtils;
import com.fr.stable.os.Arch;
import com.fr.stable.os.OperatingSystem;
import com.fr.stable.os.support.OSBasedAction;
@@ -17,11 +19,11 @@ public class PMDialogAction implements OSBasedAction {
private static String PLUGIN_MANAGER_ROUTE = "#management/plugin";
@Override
public void execute(Object... objects) {
- if(Arch.getArch() == Arch.ARM){
+ if(Arch.getArch() == Arch.ARM || OperatingSystem.isLinux()){
DesignUtils.visitEnvServerByParameters( PLUGIN_MANAGER_ROUTE,null,null);
return;
}
- if (ServerPreferenceConfig.getInstance().isUseOptimizedUPM() && !OperatingSystem.isLinux()) {
+ if (ServerPreferenceConfig.getInstance().isUseOptimizedUPM() && JdkVersion.LE_8.support()) {
UpmFinder.showUPMDialog();
} else {
WebViewDlgHelper.createPluginDialog();
diff --git a/designer-base/src/main/java/com/fr/design/parameter/ParameterArrayPane.java b/designer-base/src/main/java/com/fr/design/parameter/ParameterArrayPane.java
index d3efcae4aa..adb0e48472 100644
--- a/designer-base/src/main/java/com/fr/design/parameter/ParameterArrayPane.java
+++ b/designer-base/src/main/java/com/fr/design/parameter/ParameterArrayPane.java
@@ -7,7 +7,7 @@ import com.fr.design.gui.controlpane.JListControlPane;
import com.fr.design.gui.controlpane.NameableCreator;
import com.fr.design.gui.controlpane.NameableSelfCreator;
import com.fr.design.gui.controlpane.UnrepeatedNameHelper;
-import com.fr.design.gui.ilist.ModNameActionListener;
+import com.fr.design.i18n.Toolkit;
import com.fr.general.ComparatorUtils;
import com.fr.stable.Nameable;
import com.fr.stable.StringUtils;
@@ -18,79 +18,74 @@ import java.util.Arrays;
import java.util.List;
public class ParameterArrayPane extends JListControlPane {
- /**
- * Constructor.
- */
- public ParameterArrayPane() {
- super();
- this.addModNameActionListener(new ModNameActionListener() {
- public void nameModed(int index, String oldName, String newName) {
- populateSelectedValue();
- }
+ /**
+ * Constructor.
+ */
+ public ParameterArrayPane() {
+ super();
+ this.addModNameActionListener((index, oldName, newName) -> populateSelectedValue());
+ this.addEditingListener(new PropertyChangeAdapter() {
+ public void propertyChange() {
+ Parameter[] parameters = ParameterConfig.getInstance().getGlobalParameters();
+ String[] allListNames = nameableList.getAllNames();
+ allListNames[editingIndex] = StringUtils.EMPTY;
+ String tempName = getEditingName();
+ if (StringUtils.isEmpty(tempName)) {
+ nameableList.stopEditing();
+ FineJOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(ParameterArrayPane.this), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Empty_Parameter_Name"));
+ setIllegalIndex(editingIndex);
+ return;
+ }
+ if (!ComparatorUtils.equals(tempName, selectedName)
+ && isNameRepeated(new List[]{Arrays.asList(parameters), Arrays.asList(allListNames)}, tempName)) {
+ nameableList.stopEditing();
+ FineJOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(ParameterArrayPane.this),
+ Toolkit.i18nText("Fine-Design_Basic_Duplicate_Parameter_Name"));
+ setIllegalIndex(editingIndex);
+ }
+ }
+ });
+ }
- });
- this.addEditingListener(new PropertyChangeAdapter() {
- public void propertyChange() {
- Parameter[] parameters = ParameterConfig.getInstance().getGlobalParameters();
- String[] allListNames = nameableList.getAllNames();
- allListNames[nameableList.getSelectedIndex()] = StringUtils.EMPTY;
- String tempName = getEditingName();
- if (StringUtils.isEmpty(tempName)) {
- nameableList.stopEditing();
- FineJOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(ParameterArrayPane.this), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Empty_Parameter_Name"));
- setIllegalIndex(editingIndex);
- return;
- }
- if (!ComparatorUtils.equals(tempName, selectedName)
- && isNameRepeated(new List[]{Arrays.asList(parameters), Arrays.asList(allListNames)}, tempName)) {
- nameableList.stopEditing();
- FineJOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(ParameterArrayPane.this),
- com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Duplicate_Parameter_Name"));
- setIllegalIndex(editingIndex);
- }
- }
- });
- }
+ @Override
+ protected String title4PopupWindow() {
+ return Toolkit.i18nText("Fine-Design_Basic_Engine_Schedule_Template_Parameter");
+ }
- @Override
- protected String title4PopupWindow() {
- return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Engine_Schedule_Template_Parameter");
- }
-
- /**
- * 创建模板参数设置组件
- *
- * @return 模板参数设置组件
- */
- public NameableCreator[] createNameableCreators() {
- return new NameableCreator[]{
- new NameableSelfCreator(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Engine_Parameter_Name"), Parameter.class, ParameterPane.class) {
- public Parameter createNameable(UnrepeatedNameHelper helper) {
- // 返回参数设置面板.
- return new Parameter(helper.createUnrepeatedName("p"));
- }
+ /**
+ * 创建模板参数设置组件
+ *
+ * @return 模板参数设置组件
+ */
+ public NameableCreator[] createNameableCreators() {
+ return new NameableCreator[]{
+ new NameableSelfCreator(Toolkit.i18nText("Fine-Design_Basic_Engine_Parameter_Name"), Parameter.class, ParameterPane.class) {
+ public Parameter createNameable(UnrepeatedNameHelper helper) {
+ // 返回参数设置面板.
+ return new Parameter(helper.createUnrepeatedName("p"));
+ }
- @Override
- public String createTooltip() {
- return null;
- }
- }
- };
- }
+ @Override
+ public String createTooltip() {
+ return null;
+ }
+ }
+ };
+ }
- /**
- * 更新参数
+ /**
+ * 更新参数
*
* @return 更新后的参数
- */
- public Parameter[] updateParameters() {
- // Nameable[]居然不能强转成Parameter[],一定要这么写...
- Nameable[] res = this.update();
- Parameter[] res_array = new Parameter[res.length];
- java.util.Arrays.asList(res).toArray(res_array);
+ */
+ public Parameter[] updateParameters() {
+ // Nameable[]居然不能强转成Parameter[],一定要这么写...
+ Nameable[] res = this.update();
+ Parameter[] res_array = new Parameter[res.length];
+ Arrays.asList(res).toArray(res_array);
- return res_array;
- }
+ return res_array;
+ }
}
diff --git a/designer-base/src/main/java/com/fr/design/parameter/ParameterInputPane.java b/designer-base/src/main/java/com/fr/design/parameter/ParameterInputPane.java
index b16e6b2792..7c8f675b1e 100644
--- a/designer-base/src/main/java/com/fr/design/parameter/ParameterInputPane.java
+++ b/designer-base/src/main/java/com/fr/design/parameter/ParameterInputPane.java
@@ -20,14 +20,18 @@ import com.fr.design.editor.editor.TextEditor;
import com.fr.design.file.HistoryTemplateListCache;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.layout.FRGUIPaneFactory;
-
import com.fr.stable.ParameterProvider;
import com.fr.stable.StringUtils;
-import javax.swing.*;
+import javax.swing.BorderFactory;
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.SwingConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
-import java.awt.*;
+import java.awt.BorderLayout;
+import java.awt.Dimension;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
@@ -37,31 +41,34 @@ import java.util.Map.Entry;
/**
* The dialog used to input parameter.
+ *
* @editor zhou
* @since 2012-3-26上午11:09:45
*/
public class ParameterInputPane extends BasicPane {
- /**
- *
- */
- private static final long serialVersionUID = 1L;
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ // alex:保存编辑器对应的参数的名字
+ private java.util.Map editorNameMap; // Map
+
+ private boolean allowBlank = true;
- // alex:保存编辑器对应的参数的名字
- private java.util.Map editorNameMap; // Map
+ private FlowTableLayoutHelper flowTableLayoutHelper;
- private boolean allowBlank = true;
-
- /**
+ /**
* Constructor.
*/
public ParameterInputPane(ParameterProvider[] parameters) {
this.initComponents(parameters);
}
- public ParameterInputPane(ParameterProvider[] parameters, boolean allowBlank) {
- this.allowBlank = allowBlank;
- this.initComponents(parameters);
- }
+ public ParameterInputPane(ParameterProvider[] parameters, boolean allowBlank) {
+ this.allowBlank = allowBlank;
+ this.initComponents(parameters);
+ }
private void initComponents(ParameterProvider[] parameters) {
this.setLayout(new BorderLayout(0, 4));
@@ -71,24 +78,24 @@ public class ParameterInputPane extends BasicPane {
this.add(new JScrollPane(contentPane), BorderLayout.CENTER);
contentPane.setBorder(BorderFactory.createTitledBorder(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Parameters") + ":"));
- FlowTableLayoutHelper flowTableLayoutHelper = new FlowTableLayoutHelper();
+ flowTableLayoutHelper = new FlowTableLayoutHelper();
+
+ editorNameMap = new java.util.HashMap();
- editorNameMap = new java.util.HashMap();
-
//Parameter list.
java.util.List nameAddedList = new java.util.ArrayList(); // alex:已经加到界面中去的参数名
if (parameters != null && parameters.length > 0) {
for (int i = 0; i < parameters.length; i++) {
ParameterProvider parameter = parameters[i];
-
+
// alex:已经在界面中的参数,不加了
if (nameAddedList.contains(parameter.getName())) {
- continue;
- }
- if(parameter instanceof StoreProcedureParameter
- && ((StoreProcedureParameter) parameter).getSchema() == StoreProcedureConstants.OUT) {
- continue;
- }
+ continue;
+ }
+ if (parameter instanceof StoreProcedureParameter
+ && ((StoreProcedureParameter) parameter).getSchema() == StoreProcedureConstants.OUT) {
+ continue;
+ }
final Object pv = parameter.getValue();
Editor[] editors = makeEditorByValue(pv);
@@ -100,135 +107,140 @@ public class ParameterInputPane extends BasicPane {
editPane.setPreferredSize(new Dimension(180, editPane.getPreferredSize().height));
String parameterDisplayName = parameter.getName();
- if(StringUtils.isNotBlank(parameter.getName())) {
- parameterDisplayName = parameter.getName();
+ if (StringUtils.isNotBlank(parameter.getName())) {
+ parameterDisplayName = parameter.getName();
}
contentPane.add(flowTableLayoutHelper.createLabelFlowPane(parameterDisplayName + ":", editPane));
//add editor to parameter hashtable.
- initTextListener(textF);
+ initTextListener(textF);
this.editorNameMap.put(textF, parameter.getName());
nameAddedList.add(parameter.getName());
}
}
+ }
+ @Override
+ public void addNotify() {
+ super.addNotify();
+ // windows 高DPI下,使用getPreferredSize必须在添加到容器之后,否则得到的数值不准确,因此先放到这调整大小
flowTableLayoutHelper.adjustLabelWidth();
}
protected void initTextListener(ValueEditorPane textF) {
- textF.getCurrentEditor().addChangeListener(new ChangeListener() {
- @Override
- public void stateChanged(ChangeEvent e) {
- HistoryTemplateListCache.getInstance().getCurrentEditingTemplate().fireTargetModified();
- }
- });
- }
-
- private Editor[] makeEditorByValue(Object pv) {
- Editor[] editors = {null};
- if (pv instanceof Integer) {
- editors[0] = new IntegerEditor();
- } else if (pv instanceof Double || pv instanceof Float) {
- editors[0] = new DoubleEditor();
- } else if (pv instanceof Float) {
- editors[0] = new FloatEditor();
- } else if (pv instanceof Date) {
- editors[0] = new DateEditor(true, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Date"));
- } else if (pv instanceof Boolean) {
- editors[0] = new BooleanEditor();
- } else if (pv instanceof BaseFormula) {
- editors = ValueEditorPaneFactory.basicEditors();
- } else {
- editors[0] = new TextEditor();
- }
- return editors;
- }
-
+ textF.getCurrentEditor().addChangeListener(new ChangeListener() {
+ @Override
+ public void stateChanged(ChangeEvent e) {
+ HistoryTemplateListCache.getInstance().getCurrentEditingTemplate().fireTargetModified();
+ }
+ });
+ }
+
+ private Editor[] makeEditorByValue(Object pv) {
+ Editor[] editors = {null};
+ if (pv instanceof Integer) {
+ editors[0] = new IntegerEditor();
+ } else if (pv instanceof Double || pv instanceof Float) {
+ editors[0] = new DoubleEditor();
+ } else if (pv instanceof Float) {
+ editors[0] = new FloatEditor();
+ } else if (pv instanceof Date) {
+ editors[0] = new DateEditor(true, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Date"));
+ } else if (pv instanceof Boolean) {
+ editors[0] = new BooleanEditor();
+ } else if (pv instanceof BaseFormula) {
+ editors = ValueEditorPaneFactory.basicEditors();
+ } else {
+ editors[0] = new TextEditor();
+ }
+ return editors;
+ }
+
@Override
protected String title4PopupWindow() {
- return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Parameters");
+ return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Parameters");
}
/**
* Update
*/
- public Map update() {
-
- java.util.Map nameValueMap = new java.util.HashMap();
-
- Iterator> entryIt = this.editorNameMap.entrySet().iterator();
- while(entryIt.hasNext()) {
- java.util.Map.Entry entry = entryIt.next();
- ValueEditorPane editor = entry.getKey();
- String parameterName = entry.getValue();
-
- Object editorStringValue = editor.update();
- nameValueMap.put(parameterName, editorStringValue);
- }
-
- return nameValueMap;
+ public Map update() {
+
+ java.util.Map nameValueMap = new java.util.HashMap();
+
+ Iterator> entryIt = this.editorNameMap.entrySet().iterator();
+ while (entryIt.hasNext()) {
+ java.util.Map.Entry entry = entryIt.next();
+ ValueEditorPane editor = entry.getKey();
+ String parameterName = entry.getValue();
+
+ Object editorStringValue = editor.update();
+ nameValueMap.put(parameterName, editorStringValue);
+ }
+
+ return nameValueMap;
+ }
+
+ public void checkValid() throws Exception {
+ if (!allowBlank) {
+ boolean valid = true;
+ String error = "";
+ Iterator> entryIt = this.editorNameMap.entrySet().iterator();
+ while (entryIt.hasNext()) {
+ java.util.Map.Entry entry = entryIt.next();
+ ValueEditorPane editor = entry.getKey();
+ String parameterName = entry.getValue();
+ Object editorStringValue = editor.update();
+ if (editorStringValue == null || StringUtils.isEmpty(Utils.objectToString(editorStringValue))) {
+ valid = false;
+ error += parameterName + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Not_Null_Des") + "\n";
+ }
+ }
+ if (!valid) {
+ throw new Exception(error);
+ }
+ }
}
- public void checkValid() throws Exception {
- if (!allowBlank) {
- boolean valid = true;
- String error = "";
- Iterator> entryIt = this.editorNameMap.entrySet().iterator();
- while (entryIt.hasNext()) {
- java.util.Map.Entry entry = entryIt.next();
- ValueEditorPane editor = entry.getKey();
- String parameterName = entry.getValue();
- Object editorStringValue = editor.update();
- if (editorStringValue == null || StringUtils.isEmpty(Utils.objectToString(editorStringValue))) {
- valid = false;
- error += parameterName + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Not_Null_Des") + "\n";
- }
- }
- if (!valid) {
- throw new Exception(error);
- }
- }
- }
-
/**
* The class help to flowlayout components
*/
private static class FlowTableLayoutHelper {
- private List labelList = new ArrayList();
+ private List labelList = new ArrayList();
- public FlowTableLayoutHelper() {
- }
+ public FlowTableLayoutHelper() {
+ }
- public JPanel createLabelFlowPane(String text, JComponent comp) {
- JPanel centerPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane();
+ public JPanel createLabelFlowPane(String text, JComponent comp) {
+ JPanel centerPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane();
- UILabel textLabel = new UILabel(text);
- centerPane.add(textLabel);
- textLabel.setHorizontalAlignment(SwingConstants.LEFT);
+ UILabel textLabel = new UILabel(text);
+ centerPane.add(textLabel);
+ textLabel.setHorizontalAlignment(SwingConstants.LEFT);
- this.labelList.add(textLabel);
- centerPane.add(comp);
+ this.labelList.add(textLabel);
+ centerPane.add(comp);
- return centerPane;
- }
+ return centerPane;
+ }
- public void adjustLabelWidth() {
- int maxWidth = 0;
+ public void adjustLabelWidth() {
+ int maxWidth = 0;
- for (int i = 0; i < labelList.size(); i++) {
- maxWidth = Math.max(maxWidth, labelList.get(i).getPreferredSize().width);
- }
+ for (int i = 0; i < labelList.size(); i++) {
+ maxWidth = Math.max(maxWidth, labelList.get(i).getPreferredSize().width);
+ }
- for (int i = 0; i < labelList.size(); i++) {
- UILabel label = labelList.get(i);
+ for (int i = 0; i < labelList.size(); i++) {
+ UILabel label = labelList.get(i);
- Dimension labelDim = new Dimension(maxWidth, label.getPreferredSize().height);
+ Dimension labelDim = new Dimension(maxWidth, label.getPreferredSize().height);
- label.setPreferredSize(labelDim);
- label.setSize(labelDim);
- label.setMinimumSize(labelDim);
- }
- }
+ label.setPreferredSize(labelDim);
+ label.setSize(labelDim);
+ label.setMinimumSize(labelDim);
+ }
+ }
}
-}
\ No newline at end of file
+}
diff --git a/designer-base/src/main/java/com/fr/design/style/FormatPane.java b/designer-base/src/main/java/com/fr/design/style/FormatPane.java
index 255efe78c5..d1679561d7 100644
--- a/designer-base/src/main/java/com/fr/design/style/FormatPane.java
+++ b/designer-base/src/main/java/com/fr/design/style/FormatPane.java
@@ -45,7 +45,7 @@ import java.util.Date;
*/
public class FormatPane extends BasicPane {
private static final long serialVersionUID = 724330854437726751L;
-
+
private Format format;
private UILabel sampleLabel; //preview label.
private UIRadioButton nullRadioButton;
@@ -59,14 +59,14 @@ public class FormatPane extends BasicPane {
//content pane.
private UITextField patternTextField = null;
private JList patternList = null;
-
+
/**
* Constructor.
*/
public FormatPane() {
this.initComponents();
}
-
+
public UILabel getSampleLabel() {
return sampleLabel;
}
@@ -74,7 +74,7 @@ public class FormatPane extends BasicPane {
public void setSampleLabel(UILabel sampleLabel) {
this.sampleLabel = sampleLabel;
}
-
+
protected void initComponents() {
this.setLayout(FRGUIPaneFactory.createM_BorderLayout());
@@ -172,7 +172,7 @@ public class FormatPane extends BasicPane {
protected String title4PopupWindow() {
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Style");
}
-
+
/**
* Populate
*/
@@ -185,17 +185,17 @@ public class FormatPane extends BasicPane {
} else {
if (format instanceof DecimalFormat) {
checkDecimalFormat();
- } else if (format instanceof SimpleDateFormat) {
+ } else if (format instanceof SimpleDateFormat) {
//date and time
- checkDateFormat();
- } else if (format instanceof TextFormat) {
+ checkDateFormat();
+ } else if (format instanceof TextFormat) {
//Text
this.textRadioButton.setSelected(true);
this.applyRadioActionListener(this.textRadioButton);
}
}
}
-
+
private void checkDateFormat() {
String pattern = ((SimpleDateFormat) format).toPattern();
if(pattern == null) {
@@ -276,7 +276,7 @@ public class FormatPane extends BasicPane {
}
}
}
-
+
/**
* 百分比面板
*/
@@ -296,7 +296,7 @@ public class FormatPane extends BasicPane {
/**
* 是否属于数组中的列表样式
- *
+ *
* @param stringArray 格式数组
* @param pattern 输入的格式
* @return 返回在数组中的位置
@@ -323,7 +323,7 @@ public class FormatPane extends BasicPane {
}
return FormatField.getInstance().getFormat(getFormatContents(), text);
}
-
+
private int getFormatContents(){
if (nullRadioButton.isSelected())
return FormatContents.NULL;
@@ -335,7 +335,7 @@ public class FormatPane extends BasicPane {
return FormatContents.PERCENT;
else if (scientificRadioButton.isSelected())
return FormatContents.SCIENTIFIC;
- else if (dateRadioButton.isSelected())
+ else if (dateRadioButton.isSelected())
return FormatContents.DATE;
else if (timeRadioButton.isSelected())
return FormatContents.TIME;
@@ -380,7 +380,7 @@ public class FormatPane extends BasicPane {
ActionEvent evt = new ActionEvent(radioButton, 100, "");
this.radioActionListener.actionPerformed(evt);
}
-
+
/**
* Radio selection listener.
*/
@@ -393,6 +393,7 @@ public class FormatPane extends BasicPane {
patternTextField.setEditable(true);
patternList.setEnabled(true);
+
int contents = getContents(source);
String[] patternArray = FormatField.getInstance().getFormatArray(contents);
@@ -407,6 +408,7 @@ public class FormatPane extends BasicPane {
//maybe need to select the first item.
String text = patternTextField.getText();
+
if (hasPattenText(text, patternModel)) {
String pattern = null;
if (format instanceof DecimalFormat) {
@@ -418,6 +420,10 @@ public class FormatPane extends BasicPane {
if (pattern != null) {
patternList.setSelectedValue(pattern, true);
+ if (patternList.getSelectedIndex() == -1) {
+ //patten不在下拉框里面
+ patternList.setSelectedIndex(0);
+ }
} else {
patternList.setSelectedIndex(0);
}
@@ -426,13 +432,13 @@ public class FormatPane extends BasicPane {
};
private boolean hasPattenText (String text, DefaultListModel patternModel) {
- return (text == null || text.length() <= 0) && patternModel.size() > 0;
+ return StringUtils.isEmpty(text) && patternModel.size() > 0;
}
-
+
private void setPatternTextEnable() {
patternTextField.setEnabled(false);
patternTextField.setEditable(false);
- patternTextField.setText("");
+ patternTextField.setText(StringUtils.EMPTY);
patternList.setEnabled(false);
}
@@ -459,7 +465,7 @@ public class FormatPane extends BasicPane {
}
return contents;
}
-
+
/**
* text pattern document listener.
*/
@@ -477,7 +483,7 @@ public class FormatPane extends BasicPane {
refreshPreviewLabel();
}
};
-
+
/**
* Pattern list selection listener.
*/
@@ -487,5 +493,5 @@ public class FormatPane extends BasicPane {
patternTextField.setText((String) patternList.getSelectedValue());
}
};
-
+
}
diff --git a/designer-base/src/main/java/com/fr/design/style/color/NewColorSelectBox.java b/designer-base/src/main/java/com/fr/design/style/color/NewColorSelectBox.java
index 6e3e688c8b..4f291c6398 100644
--- a/designer-base/src/main/java/com/fr/design/style/color/NewColorSelectBox.java
+++ b/designer-base/src/main/java/com/fr/design/style/color/NewColorSelectBox.java
@@ -30,23 +30,27 @@ public class NewColorSelectBox extends AbstractSelectBox implements UIObs
iniListener();
}
- private void iniListener(){
+ protected void iniListener(){
if(shouldResponseChangeListener()){
this.addSelectChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
- if(uiObserverListener == null){
- return;
- }
- if (globalNameListener != null && shouldResponseNameListener()){
- globalNameListener.setGlobalName(newColorSelectBoxName);
- }
- uiObserverListener.doChange();
+ attributeChange();
}
});
}
}
+ protected void attributeChange() {
+ if(uiObserverListener == null){
+ return;
+ }
+ if (globalNameListener != null && shouldResponseNameListener()){
+ globalNameListener.setGlobalName(newColorSelectBoxName);
+ }
+ uiObserverListener.doChange();
+ }
+
/**
* 初始化下拉面板
* @param preferredWidth 面板大小
diff --git a/designer-base/src/main/java/com/fr/design/update/factory/DirectoryOperationFactory.java b/designer-base/src/main/java/com/fr/design/update/factory/DirectoryOperationFactory.java
deleted file mode 100644
index 48c151488a..0000000000
--- a/designer-base/src/main/java/com/fr/design/update/factory/DirectoryOperationFactory.java
+++ /dev/null
@@ -1,129 +0,0 @@
-package com.fr.design.update.factory;
-
-import com.fr.log.FineLoggerFactory;
-import com.fr.stable.ArrayUtils;
-import com.fr.stable.StableUtils;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.File;
-import java.io.FileFilter;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.Arrays;
-
-/**
- * Created by XINZAI on 2018/8/21.
- */
-public class DirectoryOperationFactory {
- /**
- * 新建一个目录
- *
- * @param dirPath 目录路径
- */
- public static void createNewDirectory(String dirPath) {
- try {
- File newDirPath = new File(dirPath);
- if (!newDirPath.exists()) {
- StableUtils.mkdirs(newDirPath);
- }
- } catch (Exception e) {
- FineLoggerFactory.getLogger().error(e.getMessage());
- }
- }
-
- /**
- * 删除目录
- *
- * @param dirPath 目录路径
- */
- public static void deleteDirectory(String dirPath) {
- try {
- File dir = new File(dirPath);
- if (dir.isDirectory()) {
- File[] file = dir.listFiles();
- for (File fileTemp : file) {
- deleteDirectory(fileTemp.toString());
- fileTemp.delete();
- }
- } else {
- dir.delete();
- }
- dir.delete();
- } catch (Exception e) {
- FineLoggerFactory.getLogger().error(e.getMessage());
- }
- }
-
- /**
- * 复制目录
- *
- * @param oldDirPath 被复制目录
- * @param newDirPath 新目录
- */
- public static void copyDirectory(String oldDirPath, String newDirPath) {
- File oldDir = new File(oldDirPath);
- if (oldDir.isDirectory()) {
- StableUtils.mkdirs(new File(newDirPath));
- File[] files = oldDir.listFiles();
- for (File fileTemp : files) {
- copyDirectory(fileTemp.toString(), newDirPath + "/" + fileTemp.getName());
- }
- } else {
- try {
- copy(oldDirPath, newDirPath);
- } catch (IOException e) {
- FineLoggerFactory.getLogger().error(e.getMessage());
- }
- }
- }
-
- private static void copy(String path1, String path2) throws IOException {
- try (DataInputStream in = new DataInputStream(new BufferedInputStream(new FileInputStream(path1)));
- DataOutputStream out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(path2)))) {
- byte[] date = new byte[in.available()];
- in.read(date);
- out.write(date);
- }
- }
-
- /**
- * 移动目录
- *
- * @param oldDirPath 被移动目录
- * @param newDirPath 新目录
- */
- public static void moveDirectory(String oldDirPath, String newDirPath) {
- copyDirectory(oldDirPath, newDirPath);
- deleteDirectory(oldDirPath);
- }
-
- /**
- * 列出过滤后的文件
- *
- * @param installHome 安装目录
- * @param backupdir 备份目录
- * @return String数组
- */
- public static String[] listFilteredFiles(String installHome, String backupdir) {
- File backupDir = new File(StableUtils.pathJoin(installHome, backupdir));
- StableUtils.mkdirs(backupDir);
- File[] fileNames = backupDir.listFiles(new FileFilter() {
- @Override
- public boolean accept(File pathname) {
- return pathname.isDirectory();
- }
- });
- String[] jarFileName = new String[fileNames.length];
- int j = 0;
- for (File fileName : fileNames) {
- if ((fileName.isDirectory()) && (ArrayUtils.getLength(fileName.listFiles()) > 0)) {//判断备份文件夹中是否为空,为空不显示
- jarFileName[j++] = fileName.getName();
- }
- }
- return Arrays.copyOf(jarFileName, j);
- }
-}
diff --git a/designer-base/src/main/java/com/fr/design/update/factory/UpdateFileFactory.java b/designer-base/src/main/java/com/fr/design/update/factory/UpdateFileFactory.java
new file mode 100644
index 0000000000..cf992fe08b
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/update/factory/UpdateFileFactory.java
@@ -0,0 +1,50 @@
+package com.fr.design.update.factory;
+
+import com.fr.decision.update.data.UpdateConstants;
+import com.fr.log.FineLoggerFactory;
+import com.fr.stable.StableUtils;
+
+import java.io.File;;
+
+/**
+ * @author Bryant
+ * @version 10.0
+ * Created by Bryant on 2020-09-29
+ */
+public class UpdateFileFactory {
+
+ private UpdateFileFactory() {
+ }
+
+ public static File[] getBackupVersions() {
+ File[] versions = null;
+ try {
+ File backupDir = new File(StableUtils.pathJoin(StableUtils.getInstallHome(), UpdateConstants.DESIGNER_BACKUP_DIR));
+ StableUtils.mkdirs(backupDir);
+ versions = backupDir.listFiles();
+ } catch (Exception e) {
+ FineLoggerFactory.getLogger().error(e.getMessage(), e);
+ }
+ return versions;
+ }
+
+ public static boolean isBackupVersionsValid(String version) {
+ boolean designerValid = false;
+ boolean envValid = false;
+ try {
+ File designerLib = new File(StableUtils.pathJoin(version, UpdateConstants.DESIGNERBACKUPPATH));
+ File[] jars = designerLib.listFiles();
+ if (jars != null && jars.length > 0) {
+ designerValid = true;
+ }
+ File envLib = new File(StableUtils.pathJoin(version, UpdateConstants.BACKUPPATH));
+ jars = envLib.listFiles();
+ if (jars != null && jars.length > 0) {
+ envValid = true;
+ }
+ } catch (Exception e) {
+ FineLoggerFactory.getLogger().error(e.getMessage(), e);
+ }
+ return designerValid && envValid;
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/design/update/ui/dialog/RestoreDialog.java b/designer-base/src/main/java/com/fr/design/update/ui/dialog/RestoreDialog.java
index 8ffe8d4a41..69f3f61604 100644
--- a/designer-base/src/main/java/com/fr/design/update/ui/dialog/RestoreDialog.java
+++ b/designer-base/src/main/java/com/fr/design/update/ui/dialog/RestoreDialog.java
@@ -4,7 +4,7 @@ import com.fr.decision.update.data.UpdateConstants;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.mainframe.DesignerContext;
-import com.fr.design.update.factory.DirectoryOperationFactory;
+import com.fr.design.update.utils.UpdateFileUtils;
import com.fr.design.update.ui.widget.ColorfulCellRender;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.stable.ArrayUtils;
@@ -86,7 +86,7 @@ public class RestoreDialog extends JDialog {
JPanel jarListPane = new JPanel();
jarListPane.setLayout(new BoxLayout(jarListPane, BoxLayout.Y_AXIS));
- String[] jarBackupFiles = DirectoryOperationFactory.listFilteredFiles(StableUtils.getInstallHome(), UpdateConstants.DESIGNER_BACKUP_DIR);
+ String[] jarBackupFiles = UpdateFileUtils.listBackupVersions();
ArrayUtils.reverse(jarBackupFiles);
String[] jarFilesList = ((jarBackupFiles.length < NUMOFCELL_LEAST) ? Arrays.copyOf(jarBackupFiles, NUMOFCELL_LEAST) : jarBackupFiles);
diff --git a/designer-base/src/main/java/com/fr/design/update/ui/dialog/UpdateMainDialog.java b/designer-base/src/main/java/com/fr/design/update/ui/dialog/UpdateMainDialog.java
index 3992be6a91..3c91ebf145 100644
--- a/designer-base/src/main/java/com/fr/design/update/ui/dialog/UpdateMainDialog.java
+++ b/designer-base/src/main/java/com/fr/design/update/ui/dialog/UpdateMainDialog.java
@@ -17,7 +17,7 @@ import com.fr.design.layout.TableLayoutHelper;
import com.fr.design.mainframe.DesignerContext;
import com.fr.design.update.actions.FileProcess;
import com.fr.design.update.domain.UpdateInfoCachePropertyManager;
-import com.fr.design.update.factory.DirectoryOperationFactory;
+import com.fr.design.update.utils.UpdateFileUtils;
import com.fr.design.update.ui.widget.LoadingLabel;
import com.fr.design.update.ui.widget.UpdateActionLabel;
import com.fr.design.update.ui.widget.UpdateInfoTable;
@@ -320,7 +320,7 @@ public class UpdateMainDialog extends UIDialog {
}
});
//choose RestoreLabel to show
- boolean isNeedRestore = ArrayUtils.isNotEmpty(DirectoryOperationFactory.listFilteredFiles(StableUtils.getInstallHome(), getBackupDirectory()));
+ boolean isNeedRestore = ArrayUtils.isNotEmpty(UpdateFileUtils.listBackupVersions());
jarRestoreLabel = isNeedRestore ? jarRestorePreviousRevision : noJarPreviousRevision;
}
@@ -544,7 +544,7 @@ public class UpdateMainDialog extends UIDialog {
private void showDownLoadInfo() {
//形如 Build#release-2018.07.31.03.03.52.80
String buildNO = downloadFileConfig.optString("buildNO");
- Date jarDate = (new SimpleDateFormat("yyyy.MM.dd")).parse(buildNO, new ParsePosition(buildNO.indexOf("-") + 1));
+ Date jarDate = (new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss")).parse(buildNO, new ParsePosition(buildNO.indexOf("-") + 1));
String serverVersionNO = downloadFileConfig.optString("versionNO");
String currentVersionNO = ProductConstants.RELEASE_VERSION;
String[] serverVersionSplitStr = serverVersionNO.split("\\.");
@@ -556,8 +556,8 @@ public class UpdateMainDialog extends UIDialog {
//形如 Build#release-2018.07.31.03.03.52.80
String currentNO = GeneralUtils.readBuildNO();
if (!".".equals(StableUtils.getInstallHome())) {
- Date currentDate = (new SimpleDateFormat("yyyy.MM.dd")).parse(currentNO, new ParsePosition(currentNO.indexOf("-") + 1));
- if (DateUtils.subtractDate(jarDate, currentDate, DateUtils.DAY) > 0) {
+ Date currentDate = (new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss")).parse(currentNO, new ParsePosition(currentNO.indexOf("-") + 1));
+ if (DateUtils.subtractDate(jarDate, currentDate, DateUtils.SECOND) > 0) {
updateButton.setEnabled(true);
updateLabel.setVisible(true);
loadingLabel.stopLoading(buildNO.contains("-") ? buildNO.substring(buildNO.lastIndexOf("-") + 1) : buildNO);
diff --git a/designer-base/src/main/java/com/fr/design/update/utils/UpdateFileUtils.java b/designer-base/src/main/java/com/fr/design/update/utils/UpdateFileUtils.java
new file mode 100644
index 0000000000..7a3c0a2a8a
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/update/utils/UpdateFileUtils.java
@@ -0,0 +1,36 @@
+package com.fr.design.update.utils;
+
+import com.fr.design.update.factory.UpdateFileFactory;
+import com.fr.stable.StableUtils;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Bryant
+ * @version 10.0
+ * Created by Bryant on 2020-09-25
+ */
+public class UpdateFileUtils {
+ /**
+ * 列出过滤后的文件
+ *
+ * @return String数组
+ */
+ public static String[] listBackupVersions() {
+ File[] versionBackup = UpdateFileFactory.getBackupVersions();
+ List versions = new ArrayList<>();
+ if (versionBackup != null) {
+ for (File file : versionBackup) {
+ if (UpdateFileFactory.isBackupVersionsValid(file.getAbsolutePath())) {
+ versions.add(file.getName());
+ } else {
+ StableUtils.deleteFile(file);
+ }
+ }
+ }
+ String[] result = new String[versions.size()];
+ return versions.toArray(result);
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java b/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java
index 4febad3a99..2aaa9556bc 100644
--- a/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java
+++ b/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java
@@ -10,6 +10,7 @@ import com.fr.design.update.ui.dialog.UpdateMainDialog;
import com.fr.event.Event;
import com.fr.event.EventDispatcher;
import com.fr.event.Listener;
+import com.fr.general.GeneralContext;
import com.fr.log.FineLoggerFactory;
import com.fr.stable.StableUtils;
import com.fr.workspace.Workspace;
@@ -17,6 +18,7 @@ import com.fr.workspace.WorkspaceEvent;
import javax.swing.*;
import java.io.File;
+import java.util.Locale;
/**
* @author richie
@@ -27,6 +29,7 @@ public class UpmFinder {
private static final String UPM_DIR = "/upm";
private static final String MAIN_RESOURCE_PATH = UPM_DIR + "/plugin_design.html";
+ private static final String JXBROWSER = "com.teamdev.jxbrowser.chromium.Browser";
public static String installHome = FRContext.getCommonOperator().getWebRootPath();
@@ -56,39 +59,49 @@ public class UpmFinder {
}
public static void showUPMDialog() {
- boolean flag = true;
+ boolean hasJxBrowser = true;
try {
- Class.forName("com.teamdev.jxbrowser.chromium.Browser");
+ Class.forName(JXBROWSER);
} catch (ClassNotFoundException e) {
- flag = false;
+ hasJxBrowser = false;
}
- if (flag) {
- if (!checkUPMResourcesExist()){
- // upm下载
- int val = FineJOptionPane.showConfirmDialog(null, Toolkit.i18nText("Fine-Design_Basic_Plugin_Shop_Need_Install"),
- Toolkit.i18nText("Fine-Design_Basic_Confirm"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE);
- if (val == JOptionPane.OK_OPTION){
- try {
- UpmResourceLoader.INSTANCE.download();
- UpmResourceLoader.INSTANCE.install();
- FineJOptionPane.showMessageDialog(null, Toolkit.i18nText("Fine-Design_Basic_Plugin_Shop_Installed"),
- Toolkit.i18nText("Fine-Design_Basic_Message"), JOptionPane.INFORMATION_MESSAGE);
- } catch (Exception e){
- FineLoggerFactory.getLogger().error(e.getMessage(), e);
- FineJOptionPane.showMessageDialog(null, Toolkit.i18nText("Fine-Design_Updater_Download_Failed"),
- Toolkit.i18nText("Fine-Design_Basic_Message"), JOptionPane.INFORMATION_MESSAGE);
- }
+ if (hasJxBrowser) {
+ showUpmPane();
+ } else {
+ showUpdatePane();
+ }
+ }
+
+ private static void showUpmPane() {
+ if (!checkUPMResourcesExist()){
+ // upm下载
+ int val = FineJOptionPane.showConfirmDialog(null, Toolkit.i18nText("Fine-Design_Basic_Plugin_Shop_Need_Install"),
+ Toolkit.i18nText("Fine-Design_Basic_Confirm"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE);
+ if (val == JOptionPane.OK_OPTION){
+ try {
+ UpmResourceLoader.INSTANCE.download();
+ UpmResourceLoader.INSTANCE.install();
+ FineJOptionPane.showMessageDialog(null, Toolkit.i18nText("Fine-Design_Basic_Plugin_Shop_Installed"),
+ Toolkit.i18nText("Fine-Design_Basic_Message"), JOptionPane.INFORMATION_MESSAGE);
+ } catch (Exception e){
+ FineLoggerFactory.getLogger().error(e.getMessage(), e);
+ FineJOptionPane.showMessageDialog(null, Toolkit.i18nText("Fine-Design_Updater_Download_Failed"),
+ Toolkit.i18nText("Fine-Design_Basic_Message"), JOptionPane.INFORMATION_MESSAGE);
}
}
- else {
- UpmShowPane upmPane = new UpmShowPane();
- if (dialog == null) {
- dialog = new UpmShowDialog(DesignerContext.getDesignerFrame(), upmPane);
- }
- dialog.setVisible(true);
+ }
+ else {
+ UpmShowPane upmPane = new UpmShowPane();
+ if (dialog == null) {
+ dialog = new UpmShowDialog(DesignerContext.getDesignerFrame(), upmPane);
}
- } else {
- JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Toolkit.i18nText("Fine-Design_Update_Info_Plugin_Message"));
+ dialog.setVisible(true);
+ }
+ }
+
+ private static void showUpdatePane() {
+ JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Toolkit.i18nText("Fine-Design_Update_Info_Plugin_Message"));
+ if (!GeneralContext.getLocale().equals(Locale.JAPAN)) {
UpdateMainDialog dialog = new UpdateMainDialog(DesignerContext.getDesignerFrame());
dialog.setAutoUpdateAfterInit();
dialog.showDialog();
diff --git a/designer-base/src/main/java/com/fr/design/utils/DesignUtils.java b/designer-base/src/main/java/com/fr/design/utils/DesignUtils.java
index 2bf64642f2..775118d285 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
@@ -8,6 +8,7 @@ import com.fr.design.ExtraDesignClassManager;
import com.fr.design.dialog.FineJOptionPane;
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;
@@ -19,10 +20,12 @@ 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 javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import java.awt.Desktop;
@@ -31,7 +34,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 +85,7 @@ public class DesignUtils {
/**
* 判断设计器端口是否被其他程序占用
* 尝试去通信,无回应就是其他程序占用端口,否则需要继续判断是否为设计器进程未关闭
+ *
* @return
*/
public static boolean isPortOccupied() {
@@ -153,7 +156,7 @@ public class DesignUtils {
return;
}
try (Socket socket = new Socket("localhost", port)) {
- clientSend(lines, socket);
+ clientSend(lines, socket);
} catch (Exception ignore) {
}
@@ -189,10 +192,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 +222,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 +251,7 @@ public class DesignUtils {
// 刷新DesignerFrame里面的面板
SwingUtilities.invokeLater(new Runnable() {
+ @Override
public void run() {
if (DesignerContext.getDesignerFrame() == null) {
return;
@@ -269,7 +273,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 +289,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);
diff --git a/designer-base/src/main/java/com/fr/design/web/CustomIconPane.java b/designer-base/src/main/java/com/fr/design/web/CustomIconPane.java
index 12c72c5cd3..ef66fc039a 100644
--- a/designer-base/src/main/java/com/fr/design/web/CustomIconPane.java
+++ b/designer-base/src/main/java/com/fr/design/web/CustomIconPane.java
@@ -4,6 +4,7 @@ import com.fr.base.BaseUtils;
import com.fr.base.GraphHelper;
import com.fr.base.Icon;
import com.fr.base.IconManager;
+import com.fr.design.designer.IntervalConstants;
import com.fr.design.dialog.BasicPane;
import com.fr.design.dialog.DialogActionAdapter;
import com.fr.design.dialog.FineJOptionPane;
@@ -401,9 +402,8 @@ public class CustomIconPane extends BasicPane {
private void init() {
this.setLayout(FRGUIPaneFactory.createBorderLayout());
double p = TableLayout.PREFERRED;
- double rowSize[] = {p, p};
- double columnSize[] = {p, p, p};
-
+ double[] rowSize = {p, p};
+ double[] columnSize = {p, p};
UIButton browseButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Custom_Icon_SelectIcon"));
browseButton.setPreferredSize(new Dimension(80, 25));
browseButton.setToolTipText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Click_this_button"));
diff --git a/designer-base/src/main/java/com/fr/env/EnvListPane.java b/designer-base/src/main/java/com/fr/env/EnvListPane.java
index 911a7b22f8..2d875cb458 100644
--- a/designer-base/src/main/java/com/fr/env/EnvListPane.java
+++ b/designer-base/src/main/java/com/fr/env/EnvListPane.java
@@ -3,6 +3,7 @@ package com.fr.env;
import com.fr.design.DesignerEnvManager;
import com.fr.design.dialog.FineJOptionPane;
import com.fr.design.env.DesignerWorkspaceInfo;
+import com.fr.design.env.DesignerWorkspaceType;
import com.fr.design.env.LocalDesignerWorkspaceInfo;
import com.fr.design.env.RemoteDesignerWorkspaceInfo;
import com.fr.design.gui.controlpane.JListControlPane;
@@ -17,8 +18,10 @@ import com.fr.stable.core.PropertyChangeAdapter;
import javax.swing.*;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
+import java.util.Set;
/**
* @author yaohwu
@@ -98,11 +101,30 @@ public class EnvListPane extends JListControlPane {
DesignerEnvManager mgr = DesignerEnvManager.getEnvManager();
//这里代码时序换一下,因为update中需要借助mgr来获取提醒时间,已确认mgr对res无依赖
Nameable[] res = this.update();
+ Set set = findNewWorkSpaceInfo(res);
mgr.clearAllEnv();
for (Nameable re : res) {
NameObject nameObject = (NameObject) re;
- mgr.putEnv(nameObject.getName(), (DesignerWorkspaceInfo) nameObject.getObject());
+ DesignerWorkspaceInfo info = (DesignerWorkspaceInfo) nameObject.getObject();
+ if (set.contains(re) && info.getType() == DesignerWorkspaceType.Remote) {
+ RemoteDesignerWorkspaceInfo newInfo = (RemoteDesignerWorkspaceInfo) info;
+ newInfo.setNewCreated(true);
+ mgr.putEnv(nameObject.getName(), newInfo);
+ } else {
+ mgr.putEnv(nameObject.getName(), info);
+ }
}
return this.getSelectedName();
}
+
+ private Set findNewWorkSpaceInfo(Nameable[] res) {
+ Set set = new HashSet<>();
+ for (Nameable val : res) {
+ NameObject nameObject = (NameObject) val;
+ if (DesignerEnvManager.getEnvManager().getWorkspaceInfo(nameObject.getName()) == null) {
+ set.add(val);
+ }
+ }
+ return set;
+ }
}
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 bc32385b7c..5257e74f42 100644
--- a/designer-base/src/main/java/com/fr/env/RemoteEnvPane.java
+++ b/designer-base/src/main/java/com/fr/env/RemoteEnvPane.java
@@ -1,7 +1,5 @@
package com.fr.env;
-import com.fr.base.FRContext;
-import com.fr.base.ServerConfig;
import com.fr.design.DesignerEnvManager;
import com.fr.design.ExtraDesignClassManager;
import com.fr.design.beans.BasicBeanPane;
@@ -13,6 +11,7 @@ import com.fr.design.gui.icheckbox.UICheckBox;
import com.fr.design.gui.icontainer.UIScrollPane;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.ipasswordfield.UIPassWordField;
+import com.fr.design.gui.ipasswordfield.UIPasswordFieldWithFixedLength;
import com.fr.design.gui.itextfield.UITextField;
import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.FRGUIPaneFactory;
@@ -26,7 +25,17 @@ import com.fr.workspace.WorkContext;
import com.fr.workspace.connect.WorkspaceConnectionInfo;
import com.fr.workspace.engine.exception.WorkspaceAuthException;
-import javax.swing.*;
+import javax.swing.BorderFactory;
+import javax.swing.BoxLayout;
+import javax.swing.JDialog;
+import javax.swing.JFileChooser;
+import javax.swing.JPanel;
+import javax.swing.JTextPane;
+import javax.swing.SwingConstants;
+import javax.swing.SwingUtilities;
+import javax.swing.SwingWorker;
+import javax.swing.ToolTipManager;
+import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
@@ -96,7 +105,7 @@ public class RemoteEnvPane extends BasicBeanPane {
/**
* 密码
*/
- private UIPassWordField passwordInput = new UIPassWordField();
+ private UIPassWordField passwordInput = new UIPasswordFieldWithFixedLength();
/**
* 是否记住密码
*/
@@ -108,7 +117,7 @@ public class RemoteEnvPane extends BasicBeanPane {
/**
* https密钥
*/
- private UIPassWordField certSecretKeyInput = new UIPassWordField();
+ private UIPassWordField certSecretKeyInput = new UIPasswordFieldWithFixedLength();
/**
* 选择证书文件按钮
*/
@@ -134,6 +143,12 @@ public class RemoteEnvPane extends BasicBeanPane {
* https 证书路径输入框
*/
private JPanel httpsCertFileInputPanel;
+
+ /**
+ * 当前远程工作目录是否为新创建的
+ */
+ private boolean newCreated;
+
/**
* 主机名,web应用,Servlet,端口监听器
*/
@@ -318,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();
@@ -355,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
@@ -433,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();
}
@@ -588,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/main/java/com/fr/start/BaseDesigner.java b/designer-base/src/main/java/com/fr/start/BaseDesigner.java
index 1469dd32ec..7808bd7ecd 100644
--- a/designer-base/src/main/java/com/fr/start/BaseDesigner.java
+++ b/designer-base/src/main/java/com/fr/start/BaseDesigner.java
@@ -64,14 +64,11 @@ public abstract class BaseDesigner extends ToolBarMenuDock {
@Override
public void on(Event event, Null param) {
EventDispatcher.stopListen(this);
- UIUtil.invokeLaterIfNeeded(new Runnable() {
- @Override
- public void run() {
+ UIUtil.invokeLaterIfNeeded(() -> {
- // 打开上次的文件
- showDesignerFrame(false);
- DesignerLaunchStatus.setStatus(DesignerLaunchStatus.OPEN_LAST_FILE_COMPLETE);
- }
+ // 打开上次的文件
+ showDesignerFrame(false);
+ DesignerLaunchStatus.setStatus(DesignerLaunchStatus.OPEN_LAST_FILE_COMPLETE);
});
}
});
@@ -90,12 +87,7 @@ public abstract class BaseDesigner extends ToolBarMenuDock {
}
public void show() {
- UIUtil.invokeLaterIfNeeded(new Runnable() {
- @Override
- public void run() {
- refreshTemplateTree();
- }
- });
+ UIUtil.invokeLaterIfNeeded(this::refreshTemplateTree);
}
private void refreshTemplateTree() {
diff --git a/designer-base/src/main/java/com/fr/start/server/FineEmbedServerMonitor.java b/designer-base/src/main/java/com/fr/start/server/FineEmbedServerMonitor.java
index 7e95c48d27..f8f7a13ea2 100644
--- a/designer-base/src/main/java/com/fr/start/server/FineEmbedServerMonitor.java
+++ b/designer-base/src/main/java/com/fr/start/server/FineEmbedServerMonitor.java
@@ -32,7 +32,7 @@ public class FineEmbedServerMonitor {
*/
private static final int STEP_HEARTBEAT = 40;
private static volatile FineEmbedServerMonitor monitor;
- private static ProgressDialog progressBar = DesignerContext.getDesignerFrame().getProgressDialog();
+ private static ProgressDialog progressDialog = new ProgressDialog(DesignerContext.getDesignerFrame());
//由于默认值的字体不支持韩文,所以要对韩文单独生成字体
private FRFont font = null;
private static final int FONT_RGB = 333334;
@@ -47,7 +47,7 @@ public class FineEmbedServerMonitor {
@Override
public void on(Event event, Null aNull) {
getInstance().reset();
- DesignerContext.getDesignerFrame().hideProgressDialog();
+ progressDialog.dispose();
}
});
}
@@ -64,7 +64,7 @@ public class FineEmbedServerMonitor {
}
public int getProgress() {
- if (progress == progressBar.getProgressMaximum()) {
+ if (progress == progressDialog.getProgressMaximum()) {
return progress;
} else {
progress += STEP;
@@ -73,7 +73,7 @@ public class FineEmbedServerMonitor {
}
public void setComplete() {
- this.progress = progressBar.getProgressMaximum();
+ this.progress = progressDialog.getProgressMaximum();
}
public void reset() {
@@ -81,7 +81,7 @@ public class FineEmbedServerMonitor {
}
public boolean isComplete() {
- return this.progress >= progressBar.getProgressMaximum();
+ return this.progress >= progressDialog.getProgressMaximum();
}
public void monitor() {
@@ -92,11 +92,12 @@ public class FineEmbedServerMonitor {
public void run() {
if (isComplete()) {
scheduler.shutdown();
- DesignerContext.getDesignerFrame().hideProgressDialog();
+ progressDialog.dispose();
return;
}
- if (!DesignerContext.getDesignerFrame().getProgressDialog().isVisible()) {
- DesignerContext.getDesignerFrame().showProgressDialog();
+ if (!progressDialog.isVisible()) {
+ progressDialog = new ProgressDialog(DesignerContext.getDesignerFrame());
+ progressDialog.setVisible(true);
//如果为韩文则改变字体
LocaleCenter.buildAction(new LocaleAction() {
@Override
@@ -105,9 +106,9 @@ public class FineEmbedServerMonitor {
}
}, SupportLocaleImpl.SUPPORT_KOREA);
String text = Toolkit.i18nText("Fine-Design_Basic_Loading_Embed_Server");
- DesignerContext.getDesignerFrame().getProgressDialog().updateLoadingText(text, font);
+ progressDialog.updateLoadingText(text, font);
}
- DesignerContext.getDesignerFrame().updateProgress(getProgress());
+ progressDialog.setProgressValue(getProgress());
}
}, 0, STEP_HEARTBEAT, TimeUnit.MILLISECONDS);
diff --git a/designer-base/src/main/java/com/fr/start/server/ServerTray.java b/designer-base/src/main/java/com/fr/start/server/ServerTray.java
index 2b3713c0f7..4ad6e15b49 100644
--- a/designer-base/src/main/java/com/fr/start/server/ServerTray.java
+++ b/designer-base/src/main/java/com/fr/start/server/ServerTray.java
@@ -29,9 +29,9 @@ public class ServerTray {
private MenuItem stopMenu;
- private Image trayStartedImage = BaseUtils.readImage("/com/fr/base/images/oem/trayStarted.png");
+ private Image trayStartedImage = BaseUtils.readImage("/com/fr/base/images/oem/trayStarted@2x.png");
- private Image trayStoppedImage = BaseUtils.readImage("/com/fr/base/images/oem/trayStopped.png");
+ private Image trayStoppedImage = BaseUtils.readImage("/com/fr/base/images/oem/trayStopped@2x.png");
private ServerManageFrame serverManageFrame;
@@ -188,4 +188,4 @@ public class ServerTray {
}
});
}
-}
\ No newline at end of file
+}
diff --git a/designer-base/src/main/resources/com/fr/design/images/reportcolumns/col_ja_JP.png b/designer-base/src/main/resources/com/fr/design/images/reportcolumns/col_ja_JP.png
new file mode 100644
index 0000000000..3a22b64a60
Binary files /dev/null and b/designer-base/src/main/resources/com/fr/design/images/reportcolumns/col_ja_JP.png differ
diff --git a/designer-base/src/main/resources/com/fr/design/images/reportcolumns/col_ko_KR.png b/designer-base/src/main/resources/com/fr/design/images/reportcolumns/col_ko_KR.png
new file mode 100644
index 0000000000..3041f446bb
Binary files /dev/null and b/designer-base/src/main/resources/com/fr/design/images/reportcolumns/col_ko_KR.png differ
diff --git a/designer-base/src/main/resources/com/fr/design/images/reportcolumns/col.png b/designer-base/src/main/resources/com/fr/design/images/reportcolumns/col_zh.png
similarity index 100%
rename from designer-base/src/main/resources/com/fr/design/images/reportcolumns/col.png
rename to designer-base/src/main/resources/com/fr/design/images/reportcolumns/col_zh.png
diff --git a/designer-base/src/main/resources/com/fr/design/images/reportcolumns/col_zh_TW.png b/designer-base/src/main/resources/com/fr/design/images/reportcolumns/col_zh_TW.png
new file mode 100644
index 0000000000..1ce2bb297b
Binary files /dev/null and b/designer-base/src/main/resources/com/fr/design/images/reportcolumns/col_zh_TW.png differ
diff --git a/designer-base/src/main/resources/com/fr/design/images/reportcolumns/row_ja_JP.png b/designer-base/src/main/resources/com/fr/design/images/reportcolumns/row_ja_JP.png
new file mode 100644
index 0000000000..83480d4295
Binary files /dev/null and b/designer-base/src/main/resources/com/fr/design/images/reportcolumns/row_ja_JP.png differ
diff --git a/designer-base/src/main/resources/com/fr/design/images/reportcolumns/row_ko_KR.png b/designer-base/src/main/resources/com/fr/design/images/reportcolumns/row_ko_KR.png
new file mode 100644
index 0000000000..e10509a1f3
Binary files /dev/null and b/designer-base/src/main/resources/com/fr/design/images/reportcolumns/row_ko_KR.png differ
diff --git a/designer-base/src/main/resources/com/fr/design/images/reportcolumns/row.png b/designer-base/src/main/resources/com/fr/design/images/reportcolumns/row_zh.png
similarity index 100%
rename from designer-base/src/main/resources/com/fr/design/images/reportcolumns/row.png
rename to designer-base/src/main/resources/com/fr/design/images/reportcolumns/row_zh.png
diff --git a/designer-base/src/main/resources/com/fr/design/images/reportcolumns/row_zh_TW.png b/designer-base/src/main/resources/com/fr/design/images/reportcolumns/row_zh_TW.png
new file mode 100644
index 0000000000..935d1059d5
Binary files /dev/null and b/designer-base/src/main/resources/com/fr/design/images/reportcolumns/row_zh_TW.png differ
diff --git a/designer-base/src/test/java/com/fr/design/DesignerEnvManagerTest.java b/designer-base/src/test/java/com/fr/design/DesignerEnvManagerTest.java
index b7d123d66e..f60d6da291 100644
--- a/designer-base/src/test/java/com/fr/design/DesignerEnvManagerTest.java
+++ b/designer-base/src/test/java/com/fr/design/DesignerEnvManagerTest.java
@@ -3,6 +3,7 @@ package com.fr.design;
import junit.framework.TestCase;
import java.util.Locale;
+import org.junit.Assert;
public class DesignerEnvManagerTest extends TestCase{
@@ -17,4 +18,11 @@ public class DesignerEnvManagerTest extends TestCase{
assertEquals("下边界", envManager.getLanguage(), Locale.SIMPLIFIED_CHINESE);
}
+
+ public void testGetUUID() {
+ DesignerEnvManager envManager = new DesignerEnvManager();
+ String uuid0 = envManager.getUUID();
+ String uuid1 = envManager.getUUID();
+ Assert.assertEquals(uuid0, uuid1);
+ }
}
diff --git a/designer-base/src/test/java/com/fr/design/data/datapane/TableDataPaneListPaneTest.java b/designer-base/src/test/java/com/fr/design/data/datapane/TableDataPaneListPaneTest.java
new file mode 100644
index 0000000000..dd5e5bc5ce
--- /dev/null
+++ b/designer-base/src/test/java/com/fr/design/data/datapane/TableDataPaneListPaneTest.java
@@ -0,0 +1,26 @@
+package com.fr.design.data.datapane;
+
+import org.junit.Test;
+
+import java.util.Map;
+
+import static org.junit.Assert.*;
+
+/**
+ * @author Yyming
+ * @version 10.0
+ * Created by Yyming on 2020/9/29
+ */
+public class TableDataPaneListPaneTest {
+
+ @Test
+ public void rename() {
+ TableDataPaneListPane listPane = new TableDataPaneListPane();
+ listPane.rename("111", "222");
+ listPane.rename("222", "333");
+ Map dsNameChangedMap = listPane.getDsNameChangedMap();
+ assertEquals(1, dsNameChangedMap.size());
+ listPane.rename("333","111");
+ assertEquals(0, dsNameChangedMap.size());
+ }
+}
\ No newline at end of file
diff --git a/designer-base/src/test/java/com/fr/design/env/RemoteDesignerWorkspaceInfoTest.java b/designer-base/src/test/java/com/fr/design/env/RemoteDesignerWorkspaceInfoTest.java
index 54dbae3b02..d6e89cd93f 100644
--- a/designer-base/src/test/java/com/fr/design/env/RemoteDesignerWorkspaceInfoTest.java
+++ b/designer-base/src/test/java/com/fr/design/env/RemoteDesignerWorkspaceInfoTest.java
@@ -1,9 +1,16 @@
package com.fr.design.env;
+import com.fr.invoke.Reflect;
+import com.fr.stable.xml.XMLPrintWriter;
+import com.fr.stable.xml.XMLReaderHelper;
+import com.fr.stable.xml.XMLableReader;
import com.fr.workspace.connect.WorkspaceConnectionInfo;
import junit.framework.TestCase;
import org.junit.Assert;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+
/**
* @author hades
* @version 10.0
@@ -22,4 +29,64 @@ public class RemoteDesignerWorkspaceInfoTest extends TestCase {
Assert.assertFalse(workspaceInfo3.checkValid());
}
+ public void testReadXml() {
+ String xml0 = "";
+ String xml1 = "";
+ byte[] bytes0 = xml0.getBytes();
+ byte[] bytes1 = xml1.getBytes();
+ RemoteDesignerWorkspaceInfo info = new RemoteDesignerWorkspaceInfo();
+ ByteArrayInputStream in0 = new ByteArrayInputStream(bytes0);
+ ByteArrayInputStream in1 = new ByteArrayInputStream(bytes1);
+
+ try {
+ XMLableReader reader0 = XMLReaderHelper.createXMLableReader(in0, XMLPrintWriter.XML_ENCODER);
+ Reflect.on(reader0).set("state", 1);
+ info.setNewCreated(true);
+ info.readXML(reader0);
+ Assert.assertEquals("xxxxxxx", info.getConnection().getCertSecretKey());
+
+ XMLableReader reader1 = XMLReaderHelper.createXMLableReader(in1, XMLPrintWriter.XML_ENCODER);
+ Reflect.on(reader1).set("state", 1);
+ info.setNewCreated(false);
+ info.readXML(reader1);
+ Assert.assertEquals("xxxxxxx", info.getConnection().getCertSecretKey());
+ } catch (Exception ignore) {
+
+ }
+ }
+
+ public void testWriteXml() {
+ ByteArrayOutputStream out0 = new ByteArrayOutputStream();
+ XMLPrintWriter writer0 = XMLPrintWriter.create(out0);
+ RemoteDesignerWorkspaceInfo info0 = RemoteDesignerWorkspaceInfo.create(new WorkspaceConnectionInfo("127.0.0.1", "1", "1", "/xxx", "xxxxx", true));
+ info0.setNewCreated(true);
+ info0.writeXML(writer0);
+ writer0.close();
+ String result0 = new String(out0.toByteArray());
+ Assert.assertTrue(result0.contains("certSecretKey"));
+ Assert.assertFalse(result0.contains("certSecretKey=\"xxxxx\""));
+
+ ByteArrayOutputStream out1 = new ByteArrayOutputStream();
+ XMLPrintWriter writer1 = XMLPrintWriter.create(out1);
+ RemoteDesignerWorkspaceInfo info1 = RemoteDesignerWorkspaceInfo.create(new WorkspaceConnectionInfo("127.0.0.1", "1", "1", "/xxx", "xxxxx", true));
+ info1.writeXML(writer1);
+ writer1.close();
+ String result1 = new String(out1.toByteArray());
+ Assert.assertTrue(result1.contains("certSecretKey"));
+ Assert.assertTrue(result1.contains("certSecretKey=\"xxxxx\""));
+
+ }
+
}
diff --git a/designer-base/src/test/java/com/fr/design/update/factory/UpdateFileFactoryTest.java b/designer-base/src/test/java/com/fr/design/update/factory/UpdateFileFactoryTest.java
new file mode 100644
index 0000000000..6c2211e76c
--- /dev/null
+++ b/designer-base/src/test/java/com/fr/design/update/factory/UpdateFileFactoryTest.java
@@ -0,0 +1,28 @@
+package com.fr.design.update.factory;
+
+import com.fr.decision.update.data.UpdateConstants;
+import com.fr.stable.StableUtils;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.io.File;
+
+public class UpdateFileFactoryTest {
+
+ @Test
+ public void testGetBackupVersions() {
+ Assert.assertEquals(0, UpdateFileFactory.getBackupVersions().length);
+ File backupDir = new File(StableUtils.pathJoin(StableUtils.getInstallHome(), UpdateConstants.DESIGNER_BACKUP_DIR));
+ StableUtils.deleteFile(backupDir);
+ }
+
+ @Test
+ public void testIsBackupVersionsValid() {
+ File des = new File(StableUtils.pathJoin(StableUtils.getInstallHome(), UpdateConstants.DESIGNER_BACKUP_DIR, "test", UpdateConstants.BACKUPPATH, "test"));
+ File env = new File(StableUtils.pathJoin(StableUtils.getInstallHome(), UpdateConstants.DESIGNER_BACKUP_DIR, "test", UpdateConstants.DESIGNERBACKUPPATH, "test"));
+ StableUtils.mkdirs(des);
+ StableUtils.mkdirs(env);
+ Assert.assertTrue(UpdateFileFactory.isBackupVersionsValid(StableUtils.pathJoin(StableUtils.getInstallHome(), UpdateConstants.DESIGNER_BACKUP_DIR, "test")));
+ StableUtils.deleteFile(new File(StableUtils.pathJoin(StableUtils.getInstallHome(), UpdateConstants.DESIGNER_BACKUP_DIR)));
+ }
+}
diff --git a/designer-base/src/test/java/com/fr/design/update/utils/UpdateFileUtilsTest.java b/designer-base/src/test/java/com/fr/design/update/utils/UpdateFileUtilsTest.java
new file mode 100644
index 0000000000..8788675352
--- /dev/null
+++ b/designer-base/src/test/java/com/fr/design/update/utils/UpdateFileUtilsTest.java
@@ -0,0 +1,27 @@
+package com.fr.design.update.utils;
+
+import com.fr.decision.update.data.UpdateConstants;
+import com.fr.stable.StableUtils;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.io.File;
+
+/**
+ * @author Bryant
+ * @version 10.0
+ * Created by Bryant on 2020-09-25
+ */
+public class UpdateFileUtilsTest {
+
+ @Test
+ public void testListFilteredFiles() {
+ File des = new File(StableUtils.pathJoin(StableUtils.getInstallHome(), UpdateConstants.DESIGNER_BACKUP_DIR, "test", UpdateConstants.BACKUPPATH, "test"));
+ File env = new File(StableUtils.pathJoin(StableUtils.getInstallHome(), UpdateConstants.DESIGNER_BACKUP_DIR, "test", UpdateConstants.DESIGNERBACKUPPATH, "test"));
+ StableUtils.mkdirs(des);
+ StableUtils.mkdirs(env);
+ String[] result = UpdateFileUtils.listBackupVersions();
+ Assert.assertEquals(1, result.length);
+ StableUtils.deleteFile(new File(StableUtils.pathJoin(StableUtils.getInstallHome(), UpdateConstants.DESIGNER_BACKUP_DIR)));
+ }
+}
diff --git a/designer-chart/src/main/java/com/fr/design/chartx/component/AbstractCustomFieldComboBoxPane.java b/designer-chart/src/main/java/com/fr/design/chartx/component/AbstractCustomFieldComboBoxPane.java
index e4e27b7f49..16f983c758 100644
--- a/designer-chart/src/main/java/com/fr/design/chartx/component/AbstractCustomFieldComboBoxPane.java
+++ b/designer-chart/src/main/java/com/fr/design/chartx/component/AbstractCustomFieldComboBoxPane.java
@@ -82,6 +82,10 @@ public abstract class AbstractCustomFieldComboBoxPane extends BasicBeanPane extends BasicBeanPane{
* @return 界面是否接受对象
*/
public boolean accept(Object ob) {
- return ob instanceof ChartCollection && ((ChartCollection)ob).getSelectedChart().getFilterDefinition() instanceof ReportDataDefinition;
+ TopDefinitionProvider filterDefinition = ((ChartCollection) ob).getSelectedChartProvider(Chart.class).getFilterDefinition();
+ return ob instanceof ChartCollection && filterDefinition instanceof ReportDataDefinition && !(filterDefinition instanceof CustomDefinition);
}
/**
diff --git a/designer-chart/src/main/java/com/fr/extended/chart/ExtendedCustomFieldComboBoxPane.java b/designer-chart/src/main/java/com/fr/extended/chart/ExtendedCustomFieldComboBoxPane.java
index 119d73bda6..fe02f67c04 100644
--- a/designer-chart/src/main/java/com/fr/extended/chart/ExtendedCustomFieldComboBoxPane.java
+++ b/designer-chart/src/main/java/com/fr/extended/chart/ExtendedCustomFieldComboBoxPane.java
@@ -22,6 +22,10 @@ public class ExtendedCustomFieldComboBoxPane extends AbstractCustomFieldComboBox
return new ExtendedCustomFieldNamePane();
}
+ @Override
+ protected boolean seriesComboBoxHasNone() {
+ return true;
+ }
@Override
public void populateBean(AbstractDataConfig ob) {
diff --git a/designer-chart/src/main/java/com/fr/extended/chart/UIComboBoxWithNone.java b/designer-chart/src/main/java/com/fr/extended/chart/UIComboBoxWithNone.java
index 6df855cd70..f20675066f 100644
--- a/designer-chart/src/main/java/com/fr/extended/chart/UIComboBoxWithNone.java
+++ b/designer-chart/src/main/java/com/fr/extended/chart/UIComboBoxWithNone.java
@@ -41,7 +41,9 @@ public class UIComboBoxWithNone extends UIComboBox {
public void setSelectedItem(Object anObject) {
super.setSelectedItem(anObject);
- if (getSelectedIndex() == -1) {//找不到的都选中无。中文的无 英文下是none。
+ //找不到的都选中无。中文的无 英文下是none。
+ //改正:找不到的且anObject不是null的 全部选中无。
+ if (getSelectedIndex() == -1 && anObject != null) {
super.setSelectedItem(getDefaultLocaleString());
}
}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/area/VanChartAreaPlotPane.java b/designer-chart/src/main/java/com/fr/van/chart/area/VanChartAreaPlotPane.java
index 5cec0753a7..5d254ebb6a 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/area/VanChartAreaPlotPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/area/VanChartAreaPlotPane.java
@@ -5,12 +5,12 @@ import com.fr.chart.chartattr.Plot;
import com.fr.log.FineLoggerFactory;
import com.fr.plugin.chart.area.AreaIndependentVanChart;
import com.fr.plugin.chart.area.VanChartAreaPlot;
-import com.fr.van.chart.designer.type.AbstractVanChartTypePane;
+import com.fr.van.chart.designer.type.AbstractRectanglePlotPane;
/**
* Created by Mitisky on 15/11/18.
*/
-public class VanChartAreaPlotPane extends AbstractVanChartTypePane {
+public class VanChartAreaPlotPane extends AbstractRectanglePlotPane {
@Override
protected String[] getTypeIconPath() {
diff --git a/designer-chart/src/main/java/com/fr/van/chart/bar/VanChartBarPlotPane.java b/designer-chart/src/main/java/com/fr/van/chart/bar/VanChartBarPlotPane.java
index 83d1db2e96..811dde312c 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/bar/VanChartBarPlotPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/bar/VanChartBarPlotPane.java
@@ -5,12 +5,12 @@ import com.fr.chart.chartattr.Plot;
import com.fr.log.FineLoggerFactory;
import com.fr.plugin.chart.bar.BarIndependentVanChart;
import com.fr.plugin.chart.column.VanChartColumnPlot;
-import com.fr.van.chart.designer.type.AbstractVanChartTypePane;
+import com.fr.van.chart.designer.type.AbstractRectanglePlotPane;
/**
* Created by Mitisky on 15/10/20.
*/
-public class VanChartBarPlotPane extends AbstractVanChartTypePane {
+public class VanChartBarPlotPane extends AbstractRectanglePlotPane {
@Override
protected String[] getTypeIconPath() {
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 77b16b4993..25eb587d87 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/box/VanChartBoxTooltipContentPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/box/VanChartBoxTooltipContentPane.java
@@ -1,19 +1,36 @@
package com.fr.van.chart.box;
+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.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;
+import com.fr.van.chart.designer.TableLayout4VanChartHelper;
import com.fr.van.chart.designer.component.VanChartTooltipContentPane;
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.SeriesNameFormatPaneWithCheckBox;
+import com.fr.van.chart.designer.component.format.SeriesNameFormatPaneWithoutCheckBox;
import com.fr.van.chart.designer.component.format.VanChartFormatPaneWithCheckBox;
+import com.fr.van.chart.designer.component.format.VanChartFormatPaneWithoutCheckBox;
import com.fr.van.chart.designer.style.VanChartStylePane;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.Component;
+import java.util.Map;
public class VanChartBoxTooltipContentPane extends VanChartTooltipContentPane {
@@ -27,17 +44,28 @@ public class VanChartBoxTooltipContentPane extends VanChartTooltipContentPane {
private VanChartFormatPaneWithCheckBox min;
private VanChartFormatPaneWithCheckBox outlier;
+ private VanChartFormatPaneWithoutCheckBox richTextNumber;
+ private VanChartFormatPaneWithoutCheckBox richTextMax;
+ private VanChartFormatPaneWithoutCheckBox richTextQ3;
+ private VanChartFormatPaneWithoutCheckBox richTextMedian;
+ private VanChartFormatPaneWithoutCheckBox richTextQ1;
+ private VanChartFormatPaneWithoutCheckBox richTextMin;
+ private VanChartFormatPaneWithoutCheckBox richTextOutlier;
+
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);
}
protected void initFormatPane(VanChartStylePane parent, JPanel showOnPane) {
- categoryNameFormatPane = new CategoryNameFormatPaneWithCheckBox(parent, showOnPane);
- seriesNameFormatPane = new SeriesNameFormatPaneWithCheckBox(parent, showOnPane);
+ setCategoryNameFormatPane(new CategoryNameFormatPaneWithCheckBox(parent, showOnPane));
+ setSeriesNameFormatPane(new SeriesNameFormatPaneWithCheckBox(parent, showOnPane));
number = new VanChartFormatPaneWithCheckBox(parent, showOnPane) {
protected String getCheckBoxText() {
@@ -76,7 +104,48 @@ public class VanChartBoxTooltipContentPane extends VanChartTooltipContentPane {
};
}
- protected JPanel createCommonPanel() {
+ protected void initRichTextFormatPane(VanChartStylePane parent, JPanel showOnPane) {
+ setRichTextCategoryNameFormatPane(new CategoryNameFormatPaneWithoutCheckBox(parent, showOnPane));
+ setRichTextSeriesNameFormatPane(new SeriesNameFormatPaneWithoutCheckBox(parent, showOnPane));
+
+ richTextNumber = new VanChartFormatPaneWithoutCheckBox(parent, showOnPane) {
+ protected String getCheckBoxText() {
+ return Toolkit.i18nText("Fine-Design_Chart_Data_Number");
+ }
+ };
+ richTextMax = new VanChartFormatPaneWithoutCheckBox(parent, showOnPane) {
+ protected String getCheckBoxText() {
+ return Toolkit.i18nText("Fine-Design_Chart_Max_Value");
+ }
+ };
+ richTextQ3 = new VanChartFormatPaneWithoutCheckBox(parent, showOnPane) {
+ protected String getCheckBoxText() {
+ return Toolkit.i18nText("Fine-Design_Chart_Data_Q3");
+ }
+ };
+ richTextMedian = new VanChartFormatPaneWithoutCheckBox(parent, showOnPane) {
+ protected String getCheckBoxText() {
+ return Toolkit.i18nText("Fine-Design_Chart_Data_Median");
+ }
+ };
+ richTextQ1 = new VanChartFormatPaneWithoutCheckBox(parent, showOnPane) {
+ protected String getCheckBoxText() {
+ return Toolkit.i18nText("Fine-Design_Chart_Data_Q1");
+ }
+ };
+ richTextMin = new VanChartFormatPaneWithoutCheckBox(parent, showOnPane) {
+ protected String getCheckBoxText() {
+ return Toolkit.i18nText("Fine-Design_Chart_Min_Value");
+ }
+ };
+ richTextOutlier = new VanChartFormatPaneWithoutCheckBox(parent, showOnPane) {
+ protected String getCheckBoxText() {
+ return Toolkit.i18nText("Fine-Design_Chart_Outlier_Value");
+ }
+ };
+ }
+
+ protected JPanel createCommonFormatPanel() {
JPanel commonPanel = new JPanel(new BorderLayout());
commonPanel.add(createCateAndSeriesPane(), BorderLayout.NORTH);
@@ -86,6 +155,30 @@ 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},
+ new Component[]{getRichTextSeriesNameFormatPane(), null},
+ new Component[]{richTextNumber, null},
+ new Component[]{richTextMax, null},
+ new Component[]{richTextQ3, null},
+ new Component[]{richTextMedian, null},
+ new Component[]{richTextQ1, null},
+ new Component[]{richTextMin, null},
+ new Component[]{richTextOutlier, null}
+ };
+ }
+
protected double[] getRowSize(double p) {
return new double[]{p, p, p, p, p, p, p, p, p, p, p, p};
}
@@ -93,13 +186,15 @@ public class VanChartBoxTooltipContentPane extends VanChartTooltipContentPane {
private JPanel createCateAndSeriesPane() {
double p = TableLayout.PREFERRED;
double f = TableLayout.FILL;
+ double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH;
- double[] columnSize = {f, p};
- double[] rowSize = {p, p};
+ double[] columnSize = {f, e};
+ double[] rowSize = {p, p, p};
Component[][] cateAndSeries = new Component[][]{
- new Component[]{categoryNameFormatPane, null},
- new Component[]{seriesNameFormatPane, null}
+ new Component[]{null, null},
+ new Component[]{null, getCategoryNameFormatPane()},
+ new Component[]{null, getSeriesNameFormatPane()}
};
return TableLayoutHelper.createTableLayoutPane(cateAndSeries, rowSize, columnSize);
@@ -108,13 +203,14 @@ public class VanChartBoxTooltipContentPane extends VanChartTooltipContentPane {
private JPanel createDataNumberPane() {
double p = TableLayout.PREFERRED;
double f = TableLayout.FILL;
+ double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH;
- double[] columnSize = {f, p};
+ double[] columnSize = {f, e};
double[] rowSize = {p, p};
Component[][] dataNumber = new Component[][]{
new Component[]{null, null},
- new Component[]{number, null},
+ new Component[]{null, number},
};
dataNumberPane = TableLayoutHelper.createTableLayoutPane(dataNumber, rowSize, columnSize);
@@ -125,22 +221,24 @@ public class VanChartBoxTooltipContentPane extends VanChartTooltipContentPane {
private JPanel createDataDetailPane() {
double p = TableLayout.PREFERRED;
double f = TableLayout.FILL;
- double[] columnSize = {f, p};
+ double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH;
+
+ double[] columnSize = {f, e};
JPanel detailPane = new JPanel(new BorderLayout());
Component[][] dataDetail = new Component[][]{
new Component[]{null, null},
- new Component[]{max, null},
- new Component[]{q3, null},
- new Component[]{median, null},
- new Component[]{q1, null},
- new Component[]{min, null}
+ new Component[]{null, max},
+ new Component[]{new UILabel(getLabelContentTitle()), q3},
+ new Component[]{null, median},
+ new Component[]{null, q1},
+ new Component[]{null, min}
};
Component[][] dataOutlier = new Component[][]{
new Component[]{null, null},
- new Component[]{outlier, null},
+ new Component[]{null, outlier},
};
dataOutlierPane = TableLayoutHelper.createTableLayoutPane(dataOutlier, new double[]{p, p}, columnSize);
@@ -151,9 +249,75 @@ 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 categoryNameFormatPane.isDirty()
- || seriesNameFormatPane.isDirty()
+ return getCategoryNameFormatPane().isDirty()
+ || getSeriesNameFormatPane().isDirty()
|| number.isDirty()
|| max.isDirty()
|| q3.isDirty()
@@ -164,8 +328,8 @@ public class VanChartBoxTooltipContentPane extends VanChartTooltipContentPane {
}
public void setDirty(boolean isDirty) {
- categoryNameFormatPane.setDirty(isDirty);
- seriesNameFormatPane.setDirty(isDirty);
+ getCategoryNameFormatPane().setDirty(isDirty);
+ getSeriesNameFormatPane().setDirty(isDirty);
number.setDirty(isDirty);
max.setDirty(isDirty);
q3.setDirty(isDirty);
@@ -180,8 +344,8 @@ public class VanChartBoxTooltipContentPane extends VanChartTooltipContentPane {
}
protected void populateFormatPane(AttrTooltipContent attrTooltipContent) {
- categoryNameFormatPane.populate(attrTooltipContent.getCategoryFormat());
- seriesNameFormatPane.populate(attrTooltipContent.getSeriesFormat());
+ getCategoryNameFormatPane().populate(attrTooltipContent.getCategoryFormat());
+ getSeriesNameFormatPane().populate(attrTooltipContent.getSeriesFormat());
if (attrTooltipContent instanceof AttrBoxTooltipContent) {
AttrBoxTooltipContent boxTooltipContent = (AttrBoxTooltipContent) attrTooltipContent;
@@ -198,9 +362,68 @@ public class VanChartBoxTooltipContentPane extends VanChartTooltipContentPane {
}
}
+ protected void populateRichEditor(AttrTooltipContent attrTooltipContent) {
+ setRichTextAttr(new AttrTooltipRichText());
+ Map params = getRichTextAttr().getParams();
+
+ AttrTooltipCategoryFormat categoryFormat = attrTooltipContent.getRichTextCategoryFormat();
+ getRichTextCategoryNameFormatPane().populate(categoryFormat);
+ getRichTextCategoryNameFormatPane().updateFormatParams(params, categoryFormat.getJs());
+
+ AttrTooltipSeriesFormat seriesFormat = attrTooltipContent.getRichTextSeriesFormat();
+ getRichTextSeriesNameFormatPane().populate(seriesFormat);
+ getRichTextSeriesNameFormatPane().updateFormatParams(params, seriesFormat.getJs());
+
+ if (attrTooltipContent instanceof AttrBoxTooltipContent) {
+ AttrBoxTooltipContent boxTooltipContent = (AttrBoxTooltipContent) attrTooltipContent;
+
+ 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
+ };
+ }
+
+ return new VanChartFormatPaneWithoutCheckBox[]{
+ richTextMax, richTextQ3, richTextMedian, richTextQ1, richTextMin
+ };
+ }
+
+ 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) {
- categoryNameFormatPane.update(attrTooltipContent.getCategoryFormat());
- seriesNameFormatPane.update(attrTooltipContent.getSeriesFormat());
+ getCategoryNameFormatPane().update(attrTooltipContent.getCategoryFormat());
+ getSeriesNameFormatPane().update(attrTooltipContent.getSeriesFormat());
if (attrTooltipContent instanceof AttrBoxTooltipContent) {
AttrBoxTooltipContent boxTooltipContent = (AttrBoxTooltipContent) attrTooltipContent;
@@ -217,10 +440,30 @@ public class VanChartBoxTooltipContentPane extends VanChartTooltipContentPane {
}
}
+ protected void updateRichEditor(AttrTooltipContent attrTooltipContent) {
+ getRichTextCategoryNameFormatPane().update(attrTooltipContent.getRichTextCategoryFormat());
+ getRichTextSeriesNameFormatPane().update(attrTooltipContent.getRichTextSeriesFormat());
+
+ if (attrTooltipContent instanceof AttrBoxTooltipContent) {
+ AttrBoxTooltipContent boxTooltipContent = (AttrBoxTooltipContent) attrTooltipContent;
+
+ richTextNumber.update(boxTooltipContent.getRichTextNumber());
+ richTextMax.update(boxTooltipContent.getRichTextMax());
+ richTextQ3.update(boxTooltipContent.getRichTextQ3());
+ richTextMedian.update(boxTooltipContent.getRichTextMedian());
+ richTextQ1.update(boxTooltipContent.getRichTextQ1());
+ richTextMin.update(boxTooltipContent.getRichTextMin());
+ richTextOutlier.update(boxTooltipContent.getRichTextOutlier());
+ }
+ }
+
public void checkFormatVisible(boolean detailed) {
this.detailed = detailed;
dataNumberPane.setVisible(detailed);
dataOutlierPane.setVisible(detailed);
+
+ richTextNumberPane.setVisible(detailed);
+ richTextOutlierPane.setVisible(detailed);
}
}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/box/data/table/BoxPlotTableResultDataSeriesPane.java b/designer-chart/src/main/java/com/fr/van/chart/box/data/table/BoxPlotTableResultDataSeriesPane.java
index cfd3ea8d5b..5af1fa4168 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/box/data/table/BoxPlotTableResultDataSeriesPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/box/data/table/BoxPlotTableResultDataSeriesPane.java
@@ -15,10 +15,10 @@ import com.fr.stable.StringUtils;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
+import java.util.List;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
-import java.util.List;
public class BoxPlotTableResultDataSeriesPane extends AbstractTableDataContentPane {
@@ -66,6 +66,7 @@ public class BoxPlotTableResultDataSeriesPane extends AbstractTableDataContentPa
private JPanel createUIComboBoxPane(UIComboBox comboBox, String title) {
UILabel label = new UILabel(title);
label.setPreferredSize(new Dimension(80, 20));
+ comboBox.setPreferredSize(new Dimension(100, 20));
JPanel panel = new JPanel();
diff --git a/designer-chart/src/main/java/com/fr/van/chart/box/data/table/UIComboBoxWithEditLabel.java b/designer-chart/src/main/java/com/fr/van/chart/box/data/table/UIComboBoxWithEditLabel.java
index 3ba858364a..7b51fc5647 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/box/data/table/UIComboBoxWithEditLabel.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/box/data/table/UIComboBoxWithEditLabel.java
@@ -31,6 +31,7 @@ public abstract class UIComboBoxWithEditLabel extends JPanel implements UIObserv
editLabel.setPreferredSize(new Dimension(80, 20));
comboBox = new UIComboBox();
+ comboBox.setPreferredSize(new Dimension(100, 20));
this.setLayout(new BorderLayout(4, 0));
this.add(editLabel, BorderLayout.WEST);
diff --git a/designer-chart/src/main/java/com/fr/van/chart/bubble/VanChartBubblePlotPane.java b/designer-chart/src/main/java/com/fr/van/chart/bubble/VanChartBubblePlotPane.java
index 407c7758ba..ef90c8a017 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/bubble/VanChartBubblePlotPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/bubble/VanChartBubblePlotPane.java
@@ -12,15 +12,22 @@ import com.fr.chartx.data.field.AbstractColumnFieldCollection;
import com.fr.chartx.data.field.diff.BubbleColumnFieldCollection;
import com.fr.chartx.data.field.diff.MultiCategoryColumnFieldCollection;
import com.fr.log.FineLoggerFactory;
+import com.fr.plugin.chart.area.VanChartAreaPlot;
import com.fr.plugin.chart.attr.plot.VanChartPlot;
import com.fr.plugin.chart.base.VanChartTools;
import com.fr.plugin.chart.base.VanChartZoom;
import com.fr.plugin.chart.bubble.BubbleIndependentVanChart;
import com.fr.plugin.chart.bubble.VanChartBubblePlot;
+import com.fr.plugin.chart.column.VanChartColumnPlot;
+import com.fr.plugin.chart.line.VanChartLinePlot;
+import com.fr.plugin.chart.scatter.VanChartScatterPlot;
import com.fr.plugin.chart.scatter.attr.ScatterAttrLabel;
import com.fr.plugin.chart.vanchart.VanChart;
import com.fr.van.chart.designer.type.AbstractVanChartTypePane;
+import java.util.HashSet;
+import java.util.Set;
+
/**
* Created by Mitisky on 16/3/31.
*/
@@ -32,6 +39,20 @@ public class VanChartBubblePlotPane extends AbstractVanChartTypePane {
private static final float ALPHA = 0.7f;
+ private static Set forceExtendPlotIds = new HashSet<>();
+
+ private static Set extendPlotIds = new HashSet<>();
+
+ static {
+ extendPlotIds.add(VanChartColumnPlot.VAN_CHART_COLUMN_PLOT_ID);
+ extendPlotIds.add(VanChartColumnPlot.VAN_CHART_BAR_PLOT_ID);
+ extendPlotIds.add(VanChartLinePlot.VAN_CHART_LINE_PLOT);
+ extendPlotIds.add(VanChartAreaPlot.VAN_CHART_AREA_PLOT_ID);
+ extendPlotIds.add(VanChartScatterPlot.VAN_CHART_SCATTER_PLOT_ID);
+
+ forceExtendPlotIds.add(VanChartScatterPlot.VAN_CHART_SCATTER_PLOT_ID);
+ }
+
@Override
protected String[] getTypeIconPath() {
return new String[]{"/com/fr/van/chart/bubble/images/bubble.png",
@@ -122,16 +143,16 @@ public class VanChartBubblePlotPane extends AbstractVanChartTypePane {
* @param chart
*/
@Override
- protected void resetChartAttr4SamePlot(Chart chart) {
+ protected void resetChartAttr4SamePlot(VanChart chart) {
//图表缩放新设计 恢复用注释。下面2行删除。
VanChartZoom vanChartZoom = new VanChartZoom();
- ((VanChart) chart).setVanChartZoom(vanChartZoom);
+ chart.setVanChartZoom(vanChartZoom);
//图表缩放新设计 恢复用注释。下面一行取消注释。
//((VanChart) chart).setZoomAttribute(new ZoomAttribute());
//重置监控刷新选项
- resetRefreshMoreLabelAttr((VanChart) chart);
+ resetRefreshMoreLabelAttr(chart);
}
@Override
@@ -147,4 +168,12 @@ public class VanChartBubblePlotPane extends AbstractVanChartTypePane {
}
return false;
}
+
+ //是否支持属性的继承
+ @Override
+ protected boolean supportExtendAttr(VanChart chart) {
+ VanChartBubblePlot selectedClonedPlot = (VanChartBubblePlot) getSelectedClonedPlot();
+ return selectedClonedPlot.isForceBubble() ? forceExtendPlotIds.contains(chart.getID()) :
+ extendPlotIds.contains(chart.getID());
+ }
}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnConditionPane.java b/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnConditionPane.java
index c4184f3b17..3f9978f75c 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnConditionPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnConditionPane.java
@@ -49,7 +49,7 @@ public class VanChartColumnConditionPane extends DataSeriesConditionPane{
classPaneMap.put(AttrBackground.class, new VanChartColumnSeriesColorConditionPane(this));
classPaneMap.put(AttrAlpha.class, new LabelAlphaPane(this));
classPaneMap.put(AttrBorder.class, new VanChartColumnLabelBorderPane(this));
- classPaneMap.put(AttrLabel.class, new VanChartLabelConditionPane(this, plot));
+ classPaneMap.put(AttrLabel.class, new VanChartColumnLabelConditionPane(this, plot));
classPaneMap.put(AttrFloatColor.class, new VanChartFloatColorConditionPane(this));
classPaneMap.put(VanChartAttrTrendLine.class, new VanChartTrendLineConditionPane(this));
classPaneMap.put(AttrSeriesImageBackground.class, new VanChartSeriesImageBackgroundConditionPane(this));
diff --git a/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnLabelConditionPane.java b/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnLabelConditionPane.java
new file mode 100644
index 0000000000..ec870a98fe
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnLabelConditionPane.java
@@ -0,0 +1,17 @@
+package com.fr.van.chart.column;
+
+import com.fr.chart.chartattr.Plot;
+import com.fr.design.condition.ConditionAttributesPane;
+import com.fr.van.chart.designer.other.condition.item.VanChartLabelConditionPane;
+import com.fr.van.chart.designer.style.label.VanChartPlotLabelPane;
+
+public class VanChartColumnLabelConditionPane extends VanChartLabelConditionPane {
+
+ public VanChartColumnLabelConditionPane(ConditionAttributesPane conditionAttributesPane, Plot plot) {
+ super(conditionAttributesPane, plot);
+ }
+
+ protected VanChartPlotLabelPane createLabelPane() {
+ return new VanChartColumnPlotLabelNoCheckPane(getPlot(),null);
+ }
+}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnPlotLabelDetailPane.java b/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnPlotLabelDetailPane.java
new file mode 100644
index 0000000000..a2be5f2905
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnPlotLabelDetailPane.java
@@ -0,0 +1,77 @@
+package com.fr.van.chart.column;
+
+import com.fr.chart.chartattr.Plot;
+import com.fr.design.gui.ibutton.UIButtonGroup;
+import com.fr.plugin.chart.base.AttrLabelDetail;
+import com.fr.plugin.chart.base.AttrTooltipContent;
+import com.fr.plugin.chart.column.VanChartColumnPlot;
+import com.fr.van.chart.designer.component.VanChartLabelContentPane;
+import com.fr.van.chart.designer.component.VanChartTooltipContentPane;
+import com.fr.van.chart.designer.style.VanChartStylePane;
+import com.fr.van.chart.designer.style.label.VanChartPlotLabelDetailPane;
+
+public class VanChartColumnPlotLabelDetailPane extends VanChartPlotLabelDetailPane {
+
+ public VanChartColumnPlotLabelDetailPane(Plot plot, VanChartStylePane parent) {
+ super(plot, parent);
+ }
+
+ protected void initToolTipContentPane(Plot plot) {
+ VanChartLabelContentPane dataLabelContentPane = new VanChartLabelContentPane(getParentPane(), VanChartColumnPlotLabelDetailPane.this) {
+ protected void checkCardPane() {
+ super.checkCardPane();
+ checkOrientationPane();
+ }
+ };
+
+ setDataLabelContentPane(dataLabelContentPane);
+ }
+
+ private void checkOrientationPane() {
+ VanChartLabelContentPane dataLabelContentPane = (VanChartLabelContentPane) getDataLabelContentPane();
+ UIButtonGroup content = dataLabelContentPane.getContent();
+ UIButtonGroup orientation = getOrientation();
+
+ if (content == null || orientation == null) {
+ return;
+ }
+
+ if (content.getSelectedIndex() == VanChartTooltipContentPane.RICH_EDITOR_INDEX) {
+ orientation.setSelectedIndex(HORIZONTAL_INDEX);
+ orientation.setEnabled(false);
+ } else {
+ orientation.setEnabled(true);
+ }
+ }
+
+ protected boolean hasLabelOrientationPane() {
+ return !((VanChartColumnPlot) this.getPlot()).isBar();
+ }
+
+ private void checkOrientationEnable(AttrLabelDetail detail) {
+ AttrTooltipContent content = detail.getContent();
+ UIButtonGroup orientation = getOrientation();
+
+ if (orientation != null && content != null) {
+ if (content.isRichText()) {
+
+ orientation.setSelectedIndex(HORIZONTAL_INDEX);
+ detail.setHorizontal(true);
+
+ orientation.setEnabled(false);
+ } else {
+ orientation.setEnabled(true);
+ }
+ }
+ }
+
+ public void populate(AttrLabelDetail detail) {
+ super.populate(detail);
+ checkOrientationEnable(detail);
+ }
+
+ public void update(AttrLabelDetail detail) {
+ super.update(detail);
+ checkOrientationEnable(detail);
+ }
+}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnPlotLabelNoCheckPane.java b/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnPlotLabelNoCheckPane.java
new file mode 100644
index 0000000000..b08734782a
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnPlotLabelNoCheckPane.java
@@ -0,0 +1,25 @@
+package com.fr.van.chart.column;
+
+import com.fr.chart.chartattr.Plot;
+import com.fr.plugin.chart.base.AttrLabel;
+import com.fr.van.chart.designer.style.VanChartStylePane;
+
+import java.awt.BorderLayout;
+
+public class VanChartColumnPlotLabelNoCheckPane extends VanChartColumnPlotLabelPane {
+
+ public VanChartColumnPlotLabelNoCheckPane(Plot plot, VanChartStylePane parent) {
+ super(plot, parent);
+ }
+
+ protected void addComponents() {
+ this.setLayout(new BorderLayout());
+ this.add(getLabelPane(), BorderLayout.CENTER);
+ }
+
+ public void populate(AttrLabel attr) {
+ super.populate(attr);
+ getLabelShowCheckBox().setSelected(true);
+ getLabelPane().setVisible(true);
+ }
+}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnPlotLabelPane.java b/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnPlotLabelPane.java
new file mode 100644
index 0000000000..e80f6310d5
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnPlotLabelPane.java
@@ -0,0 +1,20 @@
+package com.fr.van.chart.column;
+
+import com.fr.chart.chartattr.Plot;
+import com.fr.van.chart.designer.style.VanChartStylePane;
+import com.fr.van.chart.designer.style.label.VanChartPlotLabelPane;
+
+import java.awt.BorderLayout;
+
+public class VanChartColumnPlotLabelPane extends VanChartPlotLabelPane {
+
+ public VanChartColumnPlotLabelPane(Plot plot, VanChartStylePane parent) {
+ super(plot, parent);
+ }
+
+ protected void createLabelPane() {
+ VanChartColumnPlotLabelDetailPane labelDetailPane = new VanChartColumnPlotLabelDetailPane(getPlot(), getParentPane());
+ setLabelDetailPane(labelDetailPane);
+ getLabelPane().add(labelDetailPane, BorderLayout.CENTER);
+ }
+}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnPlotPane.java b/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnPlotPane.java
index 40269cc15c..8b37e952c1 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnPlotPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnPlotPane.java
@@ -5,12 +5,12 @@ import com.fr.chart.chartattr.Plot;
import com.fr.log.FineLoggerFactory;
import com.fr.plugin.chart.column.ColumnIndependentVanChart;
import com.fr.plugin.chart.column.VanChartColumnPlot;
-import com.fr.van.chart.designer.type.AbstractVanChartTypePane;
+import com.fr.van.chart.designer.type.AbstractRectanglePlotPane;
/**
* Created by Mitisky on 15/9/24.
*/
-public class VanChartColumnPlotPane extends AbstractVanChartTypePane {
+public class VanChartColumnPlotPane extends AbstractRectanglePlotPane {
@Override
protected String[] getTypeIconPath() {
diff --git a/designer-chart/src/main/java/com/fr/van/chart/column/VanChartCustomStackAndAxisConditionPane.java b/designer-chart/src/main/java/com/fr/van/chart/column/VanChartCustomStackAndAxisConditionPane.java
index ceb9bf4807..86766676b4 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/column/VanChartCustomStackAndAxisConditionPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/column/VanChartCustomStackAndAxisConditionPane.java
@@ -6,18 +6,19 @@ import com.fr.data.condition.ListCondition;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.condition.LiteConditionPane;
import com.fr.design.gui.ibutton.UIButtonGroup;
+import com.fr.design.gui.icontainer.UIScrollPane;
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.design.utils.gui.GUICoreUtils;
-
import com.fr.plugin.chart.base.AttrSeriesStackAndAxis;
import com.fr.van.chart.designer.style.series.VanChartSeriesConditionPane;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JPanel;
+import javax.swing.ScrollPaneConstants;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
@@ -46,10 +47,13 @@ public class VanChartCustomStackAndAxisConditionPane extends BasicBeanPane 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 d3e1adbb90..9ea26a5c5b 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/PlotFactory.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/PlotFactory.java
@@ -7,6 +7,7 @@ import com.fr.design.gui.icombobox.UIComboBoxRenderer;
import com.fr.design.gui.style.FormatPane;
import com.fr.general.ComparatorUtils;
import com.fr.log.FineLoggerFactory;
+import com.fr.plugin.chart.PiePlot4VanChart;
import com.fr.plugin.chart.area.VanChartAreaPlot;
import com.fr.plugin.chart.bubble.VanChartBubblePlot;
import com.fr.plugin.chart.column.VanChartColumnPlot;
@@ -23,6 +24,7 @@ import com.fr.plugin.chart.structure.VanChartStructurePlot;
import com.fr.plugin.chart.treemap.VanChartTreeMapPlot;
import com.fr.plugin.chart.wordcloud.VanChartWordCloudPlot;
import com.fr.van.chart.bubble.force.VanChartBubbleRefreshTooltipPane;
+import com.fr.van.chart.column.VanChartColumnPlotLabelPane;
import com.fr.van.chart.designer.component.VanChartLabelContentPane;
import com.fr.van.chart.designer.component.VanChartRefreshTooltipContentPane;
import com.fr.van.chart.designer.component.VanChartTooltipContentPane;
@@ -38,7 +40,7 @@ import com.fr.van.chart.designer.style.tooltip.VanChartPlotTooltipPane;
import com.fr.van.chart.funnel.designer.style.VanChartFunnelLabelContentPane;
import com.fr.van.chart.funnel.designer.style.VanChartFunnelRefreshTooltipContentPane;
import com.fr.van.chart.funnel.designer.style.VanChartFunnelTooltipContentPane;
-import com.fr.van.chart.gantt.designer.style.VanChartGanttLabelContentPane;
+import com.fr.van.chart.gantt.designer.style.label.VanChartGanttPlotLabelPane;
import com.fr.van.chart.gantt.designer.style.tooltip.VanChartGanttPlotTooltipPane;
import com.fr.van.chart.gantt.designer.style.tooltip.VanChartGanttTooltipContentPane;
import com.fr.van.chart.gauge.VanChartGaugePlotRefreshTooltipPane;
@@ -53,10 +55,10 @@ import com.fr.van.chart.multilayer.style.VanChartMutiPieRefreshTooltipContentPan
import com.fr.van.chart.scatter.VanChartScatterPlotTooltipPane;
import com.fr.van.chart.scatter.VanChartScatterRefreshTooltipContentPane;
import com.fr.van.chart.scatter.component.label.VanChartScatterPlotLabelPane;
-import com.fr.van.chart.structure.desinger.style.VanChartStructureLabelContentPane;
+import com.fr.van.chart.structure.desinger.style.VanChartStructurePlotLabelPane;
import com.fr.van.chart.structure.desinger.style.VanChartStructureRefreshTooltipContentPane;
import com.fr.van.chart.structure.desinger.style.VanChartStructureTooltipContentPane;
-import com.fr.van.chart.wordcloud.designer.style.VanChartWordCloudRefreshTootipContentPane;
+import com.fr.van.chart.wordcloud.designer.style.VanChartWordCloudRefreshTooltipContentPane;
import com.fr.van.chart.wordcloud.designer.style.VanChartWordCloudTooltipContentPane;
import javax.swing.BorderFactory;
@@ -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,15 +91,31 @@ 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);
+ labelMap.put(VanChartGanttPlot.class, VanChartGanttPlotLabelPane.class);
+ labelMap.put(VanChartStructurePlot.class, VanChartStructurePlotLabelPane.class);
}
/**
@@ -139,8 +157,6 @@ public class PlotFactory {
labelContentMap.put(VanChartTreeMapPlot.class, VanChartMultiPieLabelContentPane.class);
labelContentMap.put(VanChartFunnelPlot.class, VanChartFunnelLabelContentPane.class);
labelContentMap.put(VanChartHeatMapPlot.class, VanChartMapLabelContentPane.class);
- labelContentMap.put(VanChartGanttPlot.class, VanChartGanttLabelContentPane.class);
- labelContentMap.put(VanChartStructurePlot.class, VanChartStructureLabelContentPane.class);
}
private static Map, Class extends VanChartTooltipContentPane>> tooltipContentMap = new HashMap, Class extends VanChartTooltipContentPane>>();
@@ -182,7 +198,7 @@ public class PlotFactory {
refreshTooltipContentMap.put(VanChartMultiPiePlot.class, VanChartMutiPieRefreshTooltipContentPane.class);
refreshTooltipContentMap.put(VanChartTreeMapPlot.class, VanChartMutiPieRefreshTooltipContentPane.class);
refreshTooltipContentMap.put(VanChartFunnelPlot.class, VanChartFunnelRefreshTooltipContentPane.class);
- refreshTooltipContentMap.put(VanChartWordCloudPlot.class, VanChartWordCloudRefreshTootipContentPane.class);
+ refreshTooltipContentMap.put(VanChartWordCloudPlot.class, VanChartWordCloudRefreshTooltipContentPane.class);
refreshTooltipContentMap.put(VanChartStructurePlot.class, VanChartStructureRefreshTooltipContentPane.class);
}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartHtmlLabelPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartHtmlLabelPane.java
index e6bee7c550..40f85dcb49 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartHtmlLabelPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartHtmlLabelPane.java
@@ -148,11 +148,12 @@ public class VanChartHtmlLabelPane extends JPanel{
double p = TableLayout.PREFERRED;
double f = TableLayout.FILL;
double[] columnSize = { p, f };
- double[] rowSize = { p, p};
+ double[] rowSize = {p, p, p};
Component[][] components = new Component[][]{
new Component[]{isCustomWidth, customWidth},
new Component[]{isCustomHeight, customHeight},
+ new Component[] {null, null}
};
return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize);
}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartHtmlLabelPaneWithBackGroundLabel.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartHtmlLabelPaneWithBackGroundLabel.java
new file mode 100644
index 0000000000..f9c9f7d490
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartHtmlLabelPaneWithBackGroundLabel.java
@@ -0,0 +1,27 @@
+package com.fr.van.chart.designer.component;
+
+import com.fr.design.gui.ilable.UILabel;
+import com.fr.design.i18n.Toolkit;
+import com.fr.design.layout.TableLayout;
+import com.fr.design.layout.TableLayoutHelper;
+import com.fr.van.chart.designer.TableLayout4VanChartHelper;
+
+import javax.swing.JPanel;
+import java.awt.Component;
+
+public class VanChartHtmlLabelPaneWithBackGroundLabel extends VanChartHtmlLabelPane {
+
+ protected JPanel createWidthAndHeightPane() {
+ double p = TableLayout.PREFERRED;
+ double f = TableLayout.FILL;
+ double d = TableLayout4VanChartHelper.DESCRIPTION_AREA_WIDTH;
+
+ JPanel panel = super.createWidthAndHeightPane();
+
+ Component[][] components = new Component[][]{
+ new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Background")), panel},
+ };
+
+ return TableLayoutHelper.createTableLayoutPane(components, new double[]{p}, new double[]{d, f});
+ }
+}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartLabelContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartLabelContentPane.java
index 8586f21067..957fcdaf72 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartLabelContentPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartLabelContentPane.java
@@ -1,5 +1,7 @@
package com.fr.van.chart.designer.component;
+import com.fr.plugin.chart.base.AttrTooltipContent;
+import com.fr.plugin.chart.type.TextAlign;
import com.fr.van.chart.designer.style.VanChartStylePane;
import javax.swing.JPanel;
@@ -13,6 +15,10 @@ public class VanChartLabelContentPane extends VanChartTooltipContentPane {
}
protected VanChartHtmlLabelPane createHtmlLabelPane() {
- return new VanChartHtmlLabelPane();
+ return new VanChartHtmlLabelPaneWithBackGroundLabel();
+ }
+
+ protected AttrTooltipContent createAttrTooltip() {
+ return new AttrTooltipContent(TextAlign.CENTER);
}
}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartRefreshTooltipContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartRefreshTooltipContentPane.java
index 0c3b5a4548..7ecb797d6a 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartRefreshTooltipContentPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartRefreshTooltipContentPane.java
@@ -1,7 +1,9 @@
package com.fr.van.chart.designer.component;
import com.fr.van.chart.designer.component.format.ChangedPercentFormatPaneWithCheckBox;
+import com.fr.van.chart.designer.component.format.ChangedPercentFormatPaneWithoutCheckBox;
import com.fr.van.chart.designer.component.format.ChangedValueFormatPaneWithCheckBox;
+import com.fr.van.chart.designer.component.format.ChangedValueFormatPaneWithoutCheckBox;
import com.fr.van.chart.designer.style.VanChartStylePane;
import javax.swing.JPanel;
@@ -20,22 +22,45 @@ 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);
- changedValueFormatPane = new ChangedValueFormatPaneWithCheckBox(parent, showOnPane);
- changedPercentFormatPane = new ChangedPercentFormatPaneWithCheckBox(parent, showOnPane);
+ setChangedValueFormatPane(new ChangedValueFormatPaneWithCheckBox(parent, showOnPane));
+ setChangedPercentFormatPane(new ChangedPercentFormatPaneWithCheckBox(parent, showOnPane));
+ }
+
+ @Override
+ protected void initRichTextFormatPane(VanChartStylePane parent, JPanel showOnPane) {
+ super.initRichTextFormatPane(parent, showOnPane);
+
+ setRichTextChangedValueFormatPane(new ChangedValueFormatPaneWithoutCheckBox(parent, showOnPane));
+ setRichTextChangedPercentFormatPane(new ChangedPercentFormatPaneWithoutCheckBox(parent, showOnPane));
}
protected Component[][] getPaneComponents(){
return new Component[][]{
- new Component[]{categoryNameFormatPane,null},
- new Component[]{seriesNameFormatPane,null},
- new Component[]{valueFormatPane,null},
- new Component[]{changedValueFormatPane,null},
- new Component[]{percentFormatPane,null},
- new Component[]{changedPercentFormatPane,null},
+ new Component[]{getCategoryNameFormatPane(), null},
+ new Component[]{getSeriesNameFormatPane(), null},
+ new Component[]{getValueFormatPane(), null},
+ new Component[]{getChangedValueFormatPane(), null},
+ new Component[]{getPercentFormatPane(), null},
+ new Component[]{getChangedPercentFormatPane(), null},
+ };
+ }
+
+ protected Component[][] getRichTextComponents() {
+ return new Component[][]{
+ new Component[]{getRichTextCategoryNameFormatPane(), null},
+ new Component[]{getRichTextSeriesNameFormatPane(), null},
+ new Component[]{getRichTextValueFormatPane(), null},
+ new Component[]{getRichTextChangedValueFormatPane(), null},
+ new Component[]{getRichTextPercentFormatPane(), null},
+ new Component[]{getRichTextChangedPercentFormatPane(), null}
};
}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartRichEditorDialog.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartRichEditorDialog.java
new file mode 100644
index 0000000000..a13208df56
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartRichEditorDialog.java
@@ -0,0 +1,32 @@
+package com.fr.van.chart.designer.component;
+
+import com.fr.design.dialog.BasicDialog;
+import com.fr.design.dialog.BasicPane;
+import com.fr.design.i18n.Toolkit;
+import com.fr.design.utils.gui.GUICoreUtils;
+
+import java.awt.Dimension;
+import java.awt.Frame;
+
+public class VanChartRichEditorDialog extends BasicDialog {
+
+ public static final Dimension DEFAULT = new Dimension(960, 600);
+
+ public VanChartRichEditorDialog(Frame parent, BasicPane pane) {
+ super(parent, pane);
+
+ this.setTitle(Toolkit.i18nText("Fine-Design_Report_RichTextEditor"));
+ this.setBasicDialogSize(DEFAULT);
+ GUICoreUtils.centerWindow(this);
+ this.setResizable(true);
+ this.setModal(true);
+ }
+
+ protected void applyEnterAction() {
+
+ }
+
+ public void checkValid() {
+
+ }
+}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartRichEditorPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartRichEditorPane.java
new file mode 100644
index 0000000000..408b730b28
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartRichEditorPane.java
@@ -0,0 +1,144 @@
+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;
+import com.teamdev.jxbrowser.chromium.events.ScriptContextAdapter;
+import com.teamdev.jxbrowser.chromium.events.ScriptContextEvent;
+
+import java.util.Map;
+
+public class VanChartRichEditorPane {
+
+ private static final String namespace = "Pool";
+ private static final String variable = "data";
+ private static final String richEditorPath = "/com/fr/design/editor/rich_editor.html";
+ private static final String expression = "dispatch()";
+
+ private static ModernUIPane richEditorPane;
+ private static Browser browser;
+
+ public static ModernUIPane createRichEditorPane(AttrTooltipRichText richEditor) {
+ RichEditorModel model = getRichEditorModel(richEditor);
+
+ if (richEditorPane == null) {
+ richEditorPane = initPane(model);
+ } else if (browser != null) {
+ updatePane(browser, model);
+ }
+
+ return richEditorPane;
+ }
+
+ public static ModernUIPane initPane(RichEditorModel model) {
+ return new ModernUIPane.Builder()
+ .prepare(new ScriptContextAdapter() {
+ public void onScriptContextCreated(ScriptContextEvent event) {
+ browser = event.getBrowser();
+
+ JSValue ns = browser.executeJavaScriptAndReturnValue("window." + namespace);
+ ns.asObject().setProperty(variable, model);
+ }
+ })
+ .withEMB(richEditorPath)
+ .namespace(namespace).build();
+ }
+
+ public static void updatePane(Browser browser, RichEditorModel model) {
+ JSValue ns = browser.executeJavaScriptAndReturnValue("window." + namespace);
+ ns.asObject().setProperty(variable, model);
+ browser.executeJavaScript("window." + namespace + "." + expression);
+ }
+
+ public static RichEditorModel getRichEditorModel(AttrTooltipRichText richText) {
+ Map paramsMap = richText.getParams();
+ StringBuilder paramsStr = new StringBuilder(StringUtils.EMPTY);
+
+ if (paramsMap != null) {
+ for (Map.Entry entry : paramsMap.entrySet()) {
+ paramsStr.append(entry.getKey()).append(":").append(entry.getValue());
+ paramsStr.append("-");
+ }
+ }
+
+ int len = paramsStr.length();
+
+ if (len > 0) {
+ paramsStr.deleteCharAt(len - 1);
+ }
+
+ 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, String initParams, String align) {
+ this.content = content;
+ this.auto = auto;
+ this.params = params;
+ this.initParams = initParams;
+ this.align = align;
+ }
+
+ public String getContent() {
+ return content;
+ }
+
+ public void setContent(String content) {
+ this.content = content;
+ }
+
+ public boolean isAuto() {
+ return auto;
+ }
+
+ public void setAuto(boolean auto) {
+ this.auto = auto;
+ }
+
+ public String getParams() {
+ return params;
+ }
+
+ 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 5920dd969f..d4ef4ac774 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartTooltipContentPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartTooltipContentPane.java
@@ -1,143 +1,509 @@
package com.fr.van.chart.designer.component;
import com.fr.design.beans.BasicBeanPane;
+import com.fr.design.dialog.BasicDialog;
+import com.fr.design.dialog.DialogActionAdapter;
+import com.fr.design.gui.ibutton.UIButton;
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.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;
import com.fr.van.chart.designer.component.format.ChangedPercentFormatPaneWithCheckBox;
+import com.fr.van.chart.designer.component.format.ChangedPercentFormatPaneWithoutCheckBox;
import com.fr.van.chart.designer.component.format.ChangedValueFormatPaneWithCheckBox;
+import com.fr.van.chart.designer.component.format.ChangedValueFormatPaneWithoutCheckBox;
import com.fr.van.chart.designer.component.format.PercentFormatPaneWithCheckBox;
+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.VanChartFormatPaneWithCheckBox;
+import com.fr.van.chart.designer.component.format.VanChartFormatPaneWithoutCheckBox;
import com.fr.van.chart.designer.style.VanChartStylePane;
+import javax.swing.JComponent;
import javax.swing.JPanel;
+import javax.swing.SwingUtilities;
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;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
/**
- * 内容界面 。数据点提示
+ * 数据点提示内容界面,含有通用设置、富文本编辑器、自定义JS界面
*/
public class VanChartTooltipContentPane extends BasicBeanPane {
private static final long serialVersionUID = 8825929000117843641L;
- protected UIButtonGroup content;
- protected ValueFormatPaneWithCheckBox valueFormatPane;
- protected PercentFormatPaneWithCheckBox percentFormatPane;
- protected CategoryNameFormatPaneWithCheckBox categoryNameFormatPane;
- protected SeriesNameFormatPaneWithCheckBox seriesNameFormatPane;
+ // 字符样式button
+ private static final int TEXT_ATTR_AUTO_INDEX = 0;
+ private static final int TEXT_ATTR_CUSTOM_INDEX = 1;
+ // 标签内容button
+ public static final int COMMON_INDEX = 0;
+ public static final int RICH_EDITOR_INDEX = 1;
+ public static final int CUSTOM_INDEX_WITH_RICH_EDITOR = 2;
+ public static final int CUSTOM_INDEX_WITHOUT_RICH_EDITOR = 1;
+
+ private UIButtonGroup content;
+
+ private CategoryNameFormatPaneWithCheckBox categoryNameFormatPane;
+ private SeriesNameFormatPaneWithCheckBox seriesNameFormatPane;
+ private ValueFormatPaneWithCheckBox valueFormatPane;
+ private PercentFormatPaneWithCheckBox percentFormatPane;
//监控刷新时,自动数据点提示使用
- protected ChangedValueFormatPaneWithCheckBox changedValueFormatPane;
- protected ChangedPercentFormatPaneWithCheckBox changedPercentFormatPane;
+ private ChangedValueFormatPaneWithCheckBox changedValueFormatPane;
+ private ChangedPercentFormatPaneWithCheckBox changedPercentFormatPane;
- private JPanel centerPane;
+ private CategoryNameFormatPaneWithoutCheckBox richTextCategoryNameFormatPane;
+ private SeriesNameFormatPaneWithoutCheckBox richTextSeriesNameFormatPane;
+ private ValueFormatPaneWithoutCheckBox richTextValueFormatPane;
+ private PercentFormatPaneWithoutCheckBox richTextPercentFormatPane;
+ private ChangedValueFormatPaneWithoutCheckBox richTextChangedValueFormatPane;
+ private ChangedPercentFormatPaneWithoutCheckBox richTextChangedPercentFormatPane;
+
+ private JPanel centerPanel;
private JPanel commonPanel;
+ private JPanel editorPanel;
+ private JPanel htmlPanel;
+ private JPanel stylePanel;
+ private UIButtonGroup styleButton;
+ private ChartTextAttrPane textAttrPane;
private VanChartHtmlLabelPane htmlLabelPane;
private VanChartStylePane parent;
private JPanel showOnPane;
- public VanChartTooltipContentPane(VanChartStylePane parent, JPanel showOnPane){
+ private AttrTooltipRichText richText;
+
+ public VanChartTooltipContentPane(VanChartStylePane parent, JPanel showOnPane) {
this.parent = parent;
this.showOnPane = showOnPane;
+ this.richText = new AttrTooltipRichText();
+
+ initFormatPane(parent, showOnPane);
+ initRichTextFormatPane(parent, showOnPane);
this.setLayout(new BorderLayout());
- this.add(createLabelContentPane(),BorderLayout.CENTER);
+ this.add(createLabelContentPane(), BorderLayout.CENTER);
+ }
+
+ 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;
+ }
+
+ 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 ChangedValueFormatPaneWithCheckBox getChangedValueFormatPane() {
+ return changedValueFormatPane;
+ }
+
+ public void setChangedValueFormatPane(ChangedValueFormatPaneWithCheckBox changedValueFormatPane) {
+ this.changedValueFormatPane = changedValueFormatPane;
+ }
+
+ public ChangedPercentFormatPaneWithCheckBox getChangedPercentFormatPane() {
+ return changedPercentFormatPane;
+ }
+
+ public void setChangedPercentFormatPane(ChangedPercentFormatPaneWithCheckBox changedPercentFormatPane) {
+ this.changedPercentFormatPane = changedPercentFormatPane;
+ }
+
+ public CategoryNameFormatPaneWithoutCheckBox getRichTextCategoryNameFormatPane() {
+ return richTextCategoryNameFormatPane;
+ }
+
+ public void setRichTextCategoryNameFormatPane(CategoryNameFormatPaneWithoutCheckBox richTextCategoryNameFormatPane) {
+ this.richTextCategoryNameFormatPane = richTextCategoryNameFormatPane;
+ }
+
+ public SeriesNameFormatPaneWithoutCheckBox getRichTextSeriesNameFormatPane() {
+ return richTextSeriesNameFormatPane;
+ }
+
+ public void setRichTextSeriesNameFormatPane(SeriesNameFormatPaneWithoutCheckBox richTextSeriesNameFormatPane) {
+ this.richTextSeriesNameFormatPane = richTextSeriesNameFormatPane;
+ }
+
+ public ValueFormatPaneWithoutCheckBox getRichTextValueFormatPane() {
+ return richTextValueFormatPane;
+ }
+
+ public void setRichTextValueFormatPane(ValueFormatPaneWithoutCheckBox richTextValueFormatPane) {
+ this.richTextValueFormatPane = richTextValueFormatPane;
+ }
+
+ public PercentFormatPaneWithoutCheckBox getRichTextPercentFormatPane() {
+ return richTextPercentFormatPane;
+ }
+
+ public void setRichTextPercentFormatPane(PercentFormatPaneWithoutCheckBox richTextPercentFormatPane) {
+ this.richTextPercentFormatPane = richTextPercentFormatPane;
+ }
+
+ public ChangedValueFormatPaneWithoutCheckBox getRichTextChangedValueFormatPane() {
+ return richTextChangedValueFormatPane;
+ }
+
+ public void setRichTextChangedValueFormatPane(ChangedValueFormatPaneWithoutCheckBox richTextChangedValueFormatPane) {
+ this.richTextChangedValueFormatPane = richTextChangedValueFormatPane;
+ }
+
+ public ChangedPercentFormatPaneWithoutCheckBox getRichTextChangedPercentFormatPane() {
+ return richTextChangedPercentFormatPane;
+ }
+
+ public void setRichTextChangedPercentFormatPane(ChangedPercentFormatPaneWithoutCheckBox richTextChangedPercentFormatPane) {
+ this.richTextChangedPercentFormatPane = richTextChangedPercentFormatPane;
+ }
+
+ public UIButtonGroup getContent() {
+ return content;
+ }
+
+ public AttrTooltipRichText getRichTextAttr() {
+ return richText;
+ }
+
+ public void setRichTextAttr(AttrTooltipRichText richText) {
+ this.richText = richText;
}
private JPanel createLabelContentPane() {
- content = new UIButtonGroup(new String[]{com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Common"),
- com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Custom")});
+ initDetailPane();
+ initCenterPane();
- initFormatPane(parent, showOnPane);
+ JPanel content = new JPanel(new BorderLayout());
- double p = TableLayout.PREFERRED;
- double f = TableLayout.FILL;
- double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH;
+ content.add(createButtonPane(), BorderLayout.NORTH);
+ content.add(centerPanel, BorderLayout.CENTER);
+ content.add(stylePanel, BorderLayout.SOUTH);
- commonPanel = createCommonPanel();
- htmlLabelPane = createHtmlLabelPane();
- htmlLabelPane.setParent(parent);
+ initContentListener();
- centerPane = new JPanel(new CardLayout()){
- @Override
+ return getLabelContentPane(content);
+ }
+
+ private void initDetailPane() {
+ commonPanel = createCommonFormatPanel();
+ editorPanel = createRichEditorPanel();
+ htmlPanel = createHtmlPane();
+ stylePanel = createCommonStylePane();
+ }
+
+ private void initCenterPane() {
+ if (supportRichEditor()) {
+ initCenterPaneWithRichEditor();
+ } else {
+ initCenterPaneWithoutRichEditor();
+ }
+ }
+
+ private void initCenterPaneWithRichEditor() {
+ centerPanel = new JPanel(new CardLayout()) {
public Dimension getPreferredSize() {
- if(content.getSelectedIndex() == 0){
+ if (content.getSelectedIndex() == COMMON_INDEX) {
return commonPanel.getPreferredSize();
+ } else if (content.getSelectedIndex() == RICH_EDITOR_INDEX) {
+ return editorPanel.getPreferredSize();
} else {
- return new Dimension(commonPanel.getPreferredSize().width,htmlLabelPane.getPreferredSize().height);
+ return new Dimension(commonPanel.getPreferredSize().width, htmlLabelPane.getPreferredSize().height);
}
}
};
- centerPane.add(htmlLabelPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Custom"));
- centerPane.add(commonPanel,com.fr.design.i18n.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},
+ centerPanel.add(commonPanel, Toolkit.i18nText("Fine-Design_Chart_Common"));
+ centerPanel.add(editorPanel, Toolkit.i18nText("Fine-Design_Chart_Rich_Text"));
+ centerPanel.add(htmlPanel, Toolkit.i18nText("Fine-Design_Chart_Custom"));
+ }
+
+ private void initCenterPaneWithoutRichEditor() {
+ centerPanel = new JPanel(new CardLayout()) {
+ public Dimension getPreferredSize() {
+ if (content.getSelectedIndex() == COMMON_INDEX) {
+ return commonPanel.getPreferredSize();
+ } else {
+ return new Dimension(commonPanel.getPreferredSize().width, htmlLabelPane.getPreferredSize().height);
+ }
+ }
};
- initContentListener();
- JPanel contentPane = TableLayout4VanChartHelper.createGapTableLayoutPane(components, row, column);
- return getLabelContentPane(contentPane);
+
+ centerPanel.add(commonPanel, Toolkit.i18nText("Fine-Design_Chart_Common"));
+ centerPanel.add(htmlPanel, Toolkit.i18nText("Fine-Design_Chart_Custom"));
}
- protected String getLabelContentTitle () {
- return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Text");
+ protected String getLabelContentTitle() {
+ return Toolkit.i18nText("Fine-Design_Report_Text");
}
protected JPanel getLabelContentPane(JPanel contentPane) {
- return createTableLayoutPaneWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Content"), contentPane);
+ return createTableLayoutPaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Content"), contentPane);
}
- protected VanChartHtmlLabelPane createHtmlLabelPane() {
- return new VanChartHtmlLabelPaneWithOutWidthAndHeight();
+ protected boolean supportRichEditor() {
+ return true;
+ }
+
+ protected boolean hasTextStylePane() {
+ return true;
+ }
+
+ private JPanel createButtonPane() {
+ double p = TableLayout.PREFERRED;
+ double f = TableLayout.FILL;
+
+ double[] column = {f, p};
+ double[] row = {p, p};
+
+ 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},
+ new Component[]{content, null}
+ };
+
+ return TableLayout4VanChartHelper.createGapTableLayoutPane(components, row, column);
+ }
+
+ protected JPanel createCommonFormatPanel() {
+ double p = TableLayout.PREFERRED;
+ double f = TableLayout.FILL;
+ double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH;
+
+ JPanel formatContent = TableLayoutHelper.createTableLayoutPane(getPaneComponents(), getRowSize(p), new double[]{f, p});
+
+ Component[][] components = new Component[][]{
+ new Component[]{null, null},
+ new Component[]{new UILabel(getLabelContentTitle()), formatContent}
+ };
+
+ return TableLayoutHelper.createTableLayoutPane(components, new double[]{p, p}, new double[]{f, e});
+ }
+
+ protected JPanel createCommonStylePane() {
+ styleButton = new UIButtonGroup<>(new String[]{
+ Toolkit.i18nText("Fine-Design_Chart_Automatic"),
+ Toolkit.i18nText("Fine-Design_Chart_Custom")
+ });
+
+ textAttrPane = new ChartTextAttrPane() {
+ protected Component[][] getComponents(JPanel buttonPane) {
+ return new Component[][]{
+ new Component[]{null, null},
+ new Component[]{null, getFontNameComboBox()},
+ new Component[]{null, buttonPane}
+ };
+ }
+ };
+
+ JPanel buttonPane = TableLayout4VanChartHelper.createGapTableLayoutPane(Toolkit.i18nText("Fine-Design_Chart_Widget_Style"), styleButton);
+
+ JPanel stylePanel = new JPanel(new BorderLayout());
+ stylePanel.add(buttonPane, BorderLayout.CENTER);
+ stylePanel.add(textAttrPane, BorderLayout.SOUTH);
+
+ initStyleButtonListener();
+
+ return stylePanel;
+ }
+
+ private void initStyleButtonListener() {
+ styleButton.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ checkStylePane();
+ }
+ });
+ }
+
+ private void checkStylePane() {
+ if (hasTextStylePane()) {
+ stylePanel.setVisible(true);
+ textAttrPane.setVisible(styleButton.getSelectedIndex() == TEXT_ATTR_CUSTOM_INDEX);
+ } else {
+ stylePanel.setVisible(false);
+ }
}
- protected JPanel createCommonPanel() {
+ private JPanel createRichEditorPanel() {
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_Content_Style")), createRichEditorButton()},
+ new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Use_Format")), createRichFormatPanel()}
+ };
+
+ return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize);
+ }
+
+ protected JPanel createRichFormatPanel() {
+ double p = TableLayout.PREFERRED;
+ double f = TableLayout.FILL;
+
+ return TableLayoutHelper.createTableLayoutPane(getRichTextComponents(), getRowSize(p), new double[]{f, p});
+ }
+
+ private JComponent createRichEditorButton() {
+ UIButton contentTextArea = new UIButton(Toolkit.i18nText("Fine-Design_Chart_Rich_Text_Edit"));
+
+ contentTextArea.addMouseListener(new MouseAdapter() {
+ public void mouseClicked(MouseEvent e) {
+ fireRichEditor();
+ }
+ });
+
+ return contentTextArea;
+ }
+
+ private void fireRichEditor() {
+ final ModernUIPane pane = VanChartRichEditorPane.createRichEditorPane(richText);
+ BasicDialog dialog = new VanChartRichEditorDialog(DesignerContext.getDesignerFrame(), pane);
+
+ pane.populate(VanChartRichEditorPane.getRichEditorModel(richText));
+
+ dialog.addDialogActionListener(new DialogActionAdapter() {
+
+ public void doOk() {
+ VanChartRichEditorPane.RichEditorModel model = pane.update();
+
+ String content = model.getContent();
+ updateLocalRichText(content, model.isAuto());
+
+ SwingUtilities.getWindowAncestor(pane).setVisible(false);
+ }
+
+ public void doCancel() {
+ SwingUtilities.getWindowAncestor(pane).setVisible(false);
+ }
+ });
+
+ dialog.setVisible(true);
+
+ if (parent != null) {
+ parent.attributeChanged();
+ }
+ }
+
+ private JPanel createHtmlPane() {
+ double p = TableLayout.PREFERRED;
+ double f = TableLayout.FILL;
+
+ double[] column = {f, p};
+ double[] row = {p, p};
- double[] columnSize = {f, p};
- double[] rowSize = getRowSize(p);
+ htmlLabelPane = createHtmlLabelPane();
+ htmlLabelPane.setParent(parent);
- return TableLayoutHelper.createTableLayoutPane(getPaneComponents(), rowSize, columnSize);
+ Component[][] htmlComponents = new Component[][]{
+ new Component[]{null, null},
+ new Component[]{htmlLabelPane, null}
+ };
+
+ return TableLayout4VanChartHelper.createGapTableLayoutPane(htmlComponents, row, column);
}
- protected void initFormatPane(VanChartStylePane parent, JPanel showOnPane){
+ protected VanChartHtmlLabelPane createHtmlLabelPane() {
+ return new VanChartHtmlLabelPaneWithOutWidthAndHeight();
+ }
+
+ 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 void initRichTextFormatPane(VanChartStylePane parent, JPanel showOnPane) {
+ richTextCategoryNameFormatPane = new CategoryNameFormatPaneWithoutCheckBox(parent, showOnPane);
+ richTextSeriesNameFormatPane = new SeriesNameFormatPaneWithoutCheckBox(parent, showOnPane);
+ richTextValueFormatPane = new ValueFormatPaneWithoutCheckBox(parent, showOnPane);
+ richTextPercentFormatPane = new PercentFormatPaneWithoutCheckBox(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 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},
+ };
}
- protected Component[][] getPaneComponents(){
+ protected Component[][] getRichTextComponents() {
return new Component[][]{
- new Component[]{categoryNameFormatPane,null},
- new Component[]{seriesNameFormatPane,null},
- new Component[]{valueFormatPane,null},
- new Component[]{percentFormatPane,null},
+ new Component[]{richTextCategoryNameFormatPane, null},
+ new Component[]{richTextSeriesNameFormatPane, null},
+ new Component[]{richTextValueFormatPane, null},
+ new Component[]{richTextPercentFormatPane, null},
};
}
@@ -145,22 +511,52 @@ 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/format/CategoryNameFormatPaneWithoutCheckBox.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/format/CategoryNameFormatPaneWithoutCheckBox.java
new file mode 100644
index 0000000000..363fdd87e7
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/format/CategoryNameFormatPaneWithoutCheckBox.java
@@ -0,0 +1,17 @@
+package com.fr.van.chart.designer.component.format;
+
+import com.fr.design.i18n.Toolkit;
+import com.fr.van.chart.designer.style.VanChartStylePane;
+
+import javax.swing.JPanel;
+
+public class CategoryNameFormatPaneWithoutCheckBox extends VanChartFormatPaneWithoutCheckBox {
+
+ public CategoryNameFormatPaneWithoutCheckBox(VanChartStylePane parent, JPanel showOnPane) {
+ super(parent, showOnPane);
+ }
+
+ protected String getCheckBoxText() {
+ return Toolkit.i18nText("Fine-Design_Chart_Category_Use_Name");
+ }
+}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/format/ChangedPercentFormatPaneWithoutCheckBox.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/format/ChangedPercentFormatPaneWithoutCheckBox.java
new file mode 100644
index 0000000000..4190669ce7
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/format/ChangedPercentFormatPaneWithoutCheckBox.java
@@ -0,0 +1,21 @@
+package com.fr.van.chart.designer.component.format;
+
+import com.fr.design.i18n.Toolkit;
+import com.fr.van.chart.designer.style.VanChartStylePane;
+
+import javax.swing.JPanel;
+
+public class ChangedPercentFormatPaneWithoutCheckBox extends VanChartFormatPaneWithoutCheckBox {
+
+ public ChangedPercentFormatPaneWithoutCheckBox(VanChartStylePane parent, JPanel showOnPane) {
+ super(parent, showOnPane);
+ }
+
+ protected String getCheckBoxText() {
+ return Toolkit.i18nText("Fine-Design_Chart_Change_Percent");
+ }
+
+ protected boolean isPercent() {
+ return true;
+ }
+}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/format/ChangedValueFormatPaneWithoutCheckBox.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/format/ChangedValueFormatPaneWithoutCheckBox.java
new file mode 100644
index 0000000000..5c436bc5d9
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/format/ChangedValueFormatPaneWithoutCheckBox.java
@@ -0,0 +1,17 @@
+package com.fr.van.chart.designer.component.format;
+
+import com.fr.design.i18n.Toolkit;
+import com.fr.van.chart.designer.style.VanChartStylePane;
+
+import javax.swing.JPanel;
+
+public class ChangedValueFormatPaneWithoutCheckBox extends VanChartFormatPaneWithoutCheckBox {
+
+ public ChangedValueFormatPaneWithoutCheckBox(VanChartStylePane parent, JPanel showOnPane) {
+ super(parent, showOnPane);
+ }
+
+ protected String getCheckBoxText() {
+ return Toolkit.i18nText("Fine-Design_Chart_Change_Value");
+ }
+}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/format/MapAreaNameFormatPaneWithoutCheckBox.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/format/MapAreaNameFormatPaneWithoutCheckBox.java
new file mode 100644
index 0000000000..a70f8c5562
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/format/MapAreaNameFormatPaneWithoutCheckBox.java
@@ -0,0 +1,17 @@
+package com.fr.van.chart.designer.component.format;
+
+import com.fr.design.i18n.Toolkit;
+import com.fr.van.chart.designer.style.VanChartStylePane;
+
+import javax.swing.JPanel;
+
+public class MapAreaNameFormatPaneWithoutCheckBox extends CategoryNameFormatPaneWithoutCheckBox {
+
+ public MapAreaNameFormatPaneWithoutCheckBox(VanChartStylePane parent, JPanel showOnPane) {
+ super(parent, showOnPane);
+ }
+
+ protected String getCheckBoxText() {
+ return Toolkit.i18nText("Fine-Design_Chart_Area_Name");
+ }
+}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/format/PercentFormatPaneWithoutCheckBox.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/format/PercentFormatPaneWithoutCheckBox.java
new file mode 100644
index 0000000000..82fa407cb7
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/format/PercentFormatPaneWithoutCheckBox.java
@@ -0,0 +1,21 @@
+package com.fr.van.chart.designer.component.format;
+
+import com.fr.design.i18n.Toolkit;
+import com.fr.van.chart.designer.style.VanChartStylePane;
+
+import javax.swing.JPanel;
+
+public class PercentFormatPaneWithoutCheckBox extends VanChartFormatPaneWithoutCheckBox {
+
+ public PercentFormatPaneWithoutCheckBox(VanChartStylePane parent, JPanel showOnPane) {
+ super(parent, showOnPane);
+ }
+
+ protected String getCheckBoxText() {
+ return Toolkit.i18nText("Fine-Design_Chart_Use_Percent");
+ }
+
+ protected boolean isPercent() {
+ return true;
+ }
+}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/format/SeriesNameFormatPaneWithoutCheckBox.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/format/SeriesNameFormatPaneWithoutCheckBox.java
new file mode 100644
index 0000000000..54542cca60
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/format/SeriesNameFormatPaneWithoutCheckBox.java
@@ -0,0 +1,17 @@
+package com.fr.van.chart.designer.component.format;
+
+import com.fr.design.i18n.Toolkit;
+import com.fr.van.chart.designer.style.VanChartStylePane;
+
+import javax.swing.JPanel;
+
+public class SeriesNameFormatPaneWithoutCheckBox extends VanChartFormatPaneWithoutCheckBox {
+
+ public SeriesNameFormatPaneWithoutCheckBox(VanChartStylePane parent, JPanel showOnPane) {
+ super(parent, showOnPane);
+ }
+
+ protected String getCheckBoxText() {
+ return Toolkit.i18nText("Fine-Design_Chart_Series_Name");
+ }
+}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/format/ValueFormatPaneWithoutCheckBox.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/format/ValueFormatPaneWithoutCheckBox.java
new file mode 100644
index 0000000000..e19b79c035
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/format/ValueFormatPaneWithoutCheckBox.java
@@ -0,0 +1,17 @@
+package com.fr.van.chart.designer.component.format;
+
+import com.fr.design.i18n.Toolkit;
+import com.fr.van.chart.designer.style.VanChartStylePane;
+
+import javax.swing.JPanel;
+
+public class ValueFormatPaneWithoutCheckBox extends VanChartFormatPaneWithoutCheckBox {
+
+ public ValueFormatPaneWithoutCheckBox(VanChartStylePane parent, JPanel showOnPane) {
+ super(parent, showOnPane);
+ }
+
+ protected String getCheckBoxText() {
+ return Toolkit.i18nText("Fine-Design_Chart_Use_Value");
+ }
+}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/format/VanChartFormatPaneWithCheckBox.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/format/VanChartFormatPaneWithCheckBox.java
index 3c8591bd63..6f5fc270ac 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/format/VanChartFormatPaneWithCheckBox.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/format/VanChartFormatPaneWithCheckBox.java
@@ -5,8 +5,9 @@ import com.fr.design.gui.frpane.AbstractAttrNoScrollPane;
import com.fr.design.gui.frpane.UIBubbleFloatPane;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.icheckbox.UICheckBox;
+import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.style.FormatPane;
-
+import com.fr.design.i18n.Toolkit;
import com.fr.plugin.chart.base.format.AttrTooltipFormat;
import com.fr.stable.Constants;
@@ -17,6 +18,7 @@ import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.text.Format;
+import java.util.Map;
/**
* Created by Mitisky on 16/2/23.
@@ -41,8 +43,14 @@ public abstract class VanChartFormatPaneWithCheckBox extends JPanel{
this.setLayout(new BorderLayout());
isSelectedBox = new UICheckBox(getCheckBoxText());
- formatButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Use_Format"));
- this.add(isSelectedBox, BorderLayout.CENTER);
+ formatButton = new UIButton(Toolkit.i18nText("Fine-Design_Chart_Use_Format"));
+
+ if (showSelectBox()) {
+ this.add(isSelectedBox, BorderLayout.CENTER);
+ } else {
+ this.add(new UILabel(getCheckBoxText()), BorderLayout.CENTER);
+ }
+
this.add(formatButton, BorderLayout.EAST);
initFormatListener();
@@ -76,6 +84,10 @@ public abstract class VanChartFormatPaneWithCheckBox extends JPanel{
protected abstract String getCheckBoxText();
+ protected boolean showSelectBox() {
+ return true;
+ }
+
protected boolean isPercent() {
return false;
}
@@ -135,4 +147,12 @@ public abstract class VanChartFormatPaneWithCheckBox extends JPanel{
tooltipFormat.setFormat(format);
tooltipFormat.setEnable(isSelectedBox.isSelected());
}
+
+ public void updateFormatParams(Map paramMap, String value) {
+ String key = this.getCheckBoxText();
+
+ if (paramMap != null && !paramMap.containsKey(key)) {
+ paramMap.put(key, value);
+ }
+ }
}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/format/VanChartFormatPaneWithoutCheckBox.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/format/VanChartFormatPaneWithoutCheckBox.java
new file mode 100644
index 0000000000..35d475a555
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/format/VanChartFormatPaneWithoutCheckBox.java
@@ -0,0 +1,16 @@
+package com.fr.van.chart.designer.component.format;
+
+import com.fr.van.chart.designer.style.VanChartStylePane;
+
+import javax.swing.JPanel;
+
+public abstract class VanChartFormatPaneWithoutCheckBox extends VanChartFormatPaneWithCheckBox {
+
+ public VanChartFormatPaneWithoutCheckBox(VanChartStylePane parent, JPanel showOnPane) {
+ super(parent, showOnPane);
+ }
+
+ protected boolean showSelectBox() {
+ return false;
+ }
+}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/format/XFormatPaneWithoutCheckBox.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/format/XFormatPaneWithoutCheckBox.java
new file mode 100644
index 0000000000..da09d29dc2
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/format/XFormatPaneWithoutCheckBox.java
@@ -0,0 +1,16 @@
+package com.fr.van.chart.designer.component.format;
+
+import com.fr.van.chart.designer.style.VanChartStylePane;
+
+import javax.swing.JPanel;
+
+public class XFormatPaneWithoutCheckBox extends VanChartFormatPaneWithoutCheckBox {
+
+ public XFormatPaneWithoutCheckBox(VanChartStylePane parent, JPanel showOnPane) {
+ super(parent, showOnPane);
+ }
+
+ protected String getCheckBoxText() {
+ return "x";
+ }
+}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/format/YFormatPaneWithoutCheckBox.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/format/YFormatPaneWithoutCheckBox.java
new file mode 100644
index 0000000000..b5422dd507
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/format/YFormatPaneWithoutCheckBox.java
@@ -0,0 +1,16 @@
+package com.fr.van.chart.designer.component.format;
+
+import com.fr.van.chart.designer.style.VanChartStylePane;
+
+import javax.swing.JPanel;
+
+public class YFormatPaneWithoutCheckBox extends VanChartFormatPaneWithoutCheckBox {
+
+ public YFormatPaneWithoutCheckBox(VanChartStylePane parent, JPanel showOnPane) {
+ super(parent, showOnPane);
+ }
+
+ protected String getCheckBoxText() {
+ return "y";
+ }
+}
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 94506858e1..690a6ab244 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/label/GaugeLabelContentPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/label/GaugeLabelContentPane.java
@@ -1,6 +1,7 @@
package com.fr.van.chart.designer.component.label;
+import com.fr.design.i18n.Toolkit;
import com.fr.van.chart.designer.component.VanChartLabelContentPane;
import com.fr.van.chart.designer.style.VanChartStylePane;
@@ -16,11 +17,18 @@ public class GaugeLabelContentPane extends VanChartLabelContentPane {
}
protected String getLabelContentTitle() {
- return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Content");
+ return Toolkit.i18nText("Fine-Design_Chart_Content");
}
protected JPanel getLabelContentPane(JPanel contentPane) {
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/label/LabelContentPaneWithCate.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/label/LabelContentPaneWithCate.java
index 982b0a3a7e..23133813c7 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/label/LabelContentPaneWithCate.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/label/LabelContentPaneWithCate.java
@@ -27,7 +27,7 @@ public class LabelContentPaneWithCate extends GaugeLabelContentPane {
protected Component[][] getPaneComponents(){
return new Component[][]{
- new Component[]{categoryNameFormatPane,null},
+ new Component[]{getCategoryNameFormatPane(),null},
};
}
}
\ No newline at end of file
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/label/LabelContentPaneWithCateValue.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/label/LabelContentPaneWithCateValue.java
index 1d2bbf5e49..4b8f8013df 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/label/LabelContentPaneWithCateValue.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/label/LabelContentPaneWithCateValue.java
@@ -27,8 +27,8 @@ public class LabelContentPaneWithCateValue extends GaugeLabelContentPane {
protected Component[][] getPaneComponents(){
return new Component[][]{
- new Component[]{categoryNameFormatPane,null},
- new Component[]{valueFormatPane,null},
+ new Component[]{getCategoryNameFormatPane(),null},
+ new Component[]{getValueFormatPane(),null},
};
}
}
\ No newline at end of file
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/label/LabelContentPaneWithOutCate.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/label/LabelContentPaneWithOutCate.java
index 45bcb3b83a..821fa1d722 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/label/LabelContentPaneWithOutCate.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/label/LabelContentPaneWithOutCate.java
@@ -27,9 +27,9 @@ public class LabelContentPaneWithOutCate extends GaugeLabelContentPane {
protected Component[][] getPaneComponents(){
return new Component[][]{
- new Component[]{seriesNameFormatPane, null},
- new Component[]{valueFormatPane, null},
- new Component[]{percentFormatPane, null},
+ new Component[]{getSeriesNameFormatPane(), null},
+ new Component[]{getValueFormatPane(), null},
+ new Component[]{getPercentFormatPane(), null},
};
}
}
\ No newline at end of file
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/label/LabelContentPaneWithPercent.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/label/LabelContentPaneWithPercent.java
index 0efbb9bb92..0c73f25e18 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/label/LabelContentPaneWithPercent.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/label/LabelContentPaneWithPercent.java
@@ -26,7 +26,7 @@ public class LabelContentPaneWithPercent extends GaugeLabelContentPane {
protected Component[][] getPaneComponents(){
return new Component[][]{
- new Component[]{percentFormatPane, null},
+ new Component[]{getPercentFormatPane(), null},
};
}
}
\ No newline at end of file
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 1774888ba5..ca7479cc05 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/tooltip/RefreshTooltipContentPaneWithOutSeries.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/tooltip/RefreshTooltipContentPaneWithOutSeries.java
@@ -1,7 +1,9 @@
package com.fr.van.chart.designer.component.tooltip;
import com.fr.van.chart.designer.component.format.ChangedPercentFormatPaneWithCheckBox;
+import com.fr.van.chart.designer.component.format.ChangedPercentFormatPaneWithoutCheckBox;
import com.fr.van.chart.designer.component.format.ChangedValueFormatPaneWithCheckBox;
+import com.fr.van.chart.designer.component.format.ChangedValueFormatPaneWithoutCheckBox;
import com.fr.van.chart.designer.style.VanChartStylePane;
import javax.swing.JPanel;
@@ -15,12 +17,24 @@ 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);
- changedValueFormatPane = new ChangedValueFormatPaneWithCheckBox(parent, showOnPane);
- changedPercentFormatPane = new ChangedPercentFormatPaneWithCheckBox(parent, showOnPane);
+ setChangedValueFormatPane(new ChangedValueFormatPaneWithCheckBox(parent, showOnPane));
+ setChangedPercentFormatPane(new ChangedPercentFormatPaneWithCheckBox(parent, showOnPane));
+ }
+
+ @Override
+ protected void initRichTextFormatPane(VanChartStylePane parent, JPanel showOnPane) {
+ super.initRichTextFormatPane(parent, showOnPane);
+
+ setRichTextChangedValueFormatPane(new ChangedValueFormatPaneWithoutCheckBox(parent, showOnPane));
+ setRichTextChangedPercentFormatPane(new ChangedPercentFormatPaneWithoutCheckBox(parent, showOnPane));
}
protected double[] getRowSize(double p){
@@ -29,11 +43,21 @@ public class RefreshTooltipContentPaneWithOutSeries extends TooltipContentPaneWi
protected Component[][] getPaneComponents(){
return new Component[][]{
- new Component[]{categoryNameFormatPane,null},
- new Component[]{valueFormatPane,null},
- new Component[]{changedValueFormatPane,null},
- new Component[]{percentFormatPane,null},
- new Component[]{changedPercentFormatPane,null},
+ new Component[]{getCategoryNameFormatPane(),null},
+ new Component[]{getValueFormatPane(),null},
+ new Component[]{getChangedValueFormatPane(),null},
+ new Component[]{getPercentFormatPane(),null},
+ new Component[]{getChangedPercentFormatPane(),null},
+ };
+ }
+
+ protected Component[][] getRichTextComponents() {
+ return new Component[][]{
+ new Component[]{getRichTextCategoryNameFormatPane(), null},
+ new Component[]{getRichTextValueFormatPane(), null},
+ new Component[]{getRichTextChangedValueFormatPane(), null},
+ new Component[]{getRichTextPercentFormatPane(), null},
+ new Component[]{getRichTextChangedPercentFormatPane(), null}
};
}
}
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 61216a57fd..8724429f3c 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/tooltip/TooltipContentPaneWithOutSeries.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/tooltip/TooltipContentPaneWithOutSeries.java
@@ -1,6 +1,10 @@
package com.fr.van.chart.designer.component.tooltip;
+import com.fr.plugin.chart.base.AttrTooltipContent;
+import com.fr.plugin.chart.base.AttrTooltipRichText;
+import com.fr.plugin.chart.base.format.AttrTooltipFormat;
import com.fr.van.chart.designer.component.VanChartTooltipContentPane;
+import com.fr.van.chart.designer.component.format.VanChartFormatPaneWithoutCheckBox;
import com.fr.van.chart.designer.style.VanChartStylePane;
import javax.swing.JPanel;
@@ -23,9 +27,37 @@ public class TooltipContentPaneWithOutSeries extends VanChartTooltipContentPane
protected Component[][] getPaneComponents(){
return new Component[][]{
- new Component[]{categoryNameFormatPane,null},
- new Component[]{valueFormatPane,null},
- new Component[]{percentFormatPane,null},
+ new Component[]{getCategoryNameFormatPane(),null},
+ new Component[]{getValueFormatPane(),null},
+ new Component[]{getPercentFormatPane(),null},
};
}
+
+ protected Component[][] getRichTextComponents() {
+ return new Component[][]{
+ new Component[]{getRichTextCategoryNameFormatPane(), null},
+ new Component[]{getRichTextValueFormatPane(), null},
+ 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/other/VanChartInteractivePane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/other/VanChartInteractivePane.java
index 49ed070239..885931cb93 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/other/VanChartInteractivePane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/other/VanChartInteractivePane.java
@@ -29,6 +29,7 @@ import com.fr.plugin.chart.base.VanChartAttrMarker;
import com.fr.plugin.chart.base.VanChartConstants;
import com.fr.plugin.chart.base.VanChartTools;
import com.fr.plugin.chart.base.VanChartZoom;
+import com.fr.plugin.chart.gantt.attr.AttrGanttLabel;
import com.fr.plugin.chart.map.line.condition.AttrLineEffect;
import com.fr.plugin.chart.scatter.attr.ScatterAttrLabel;
import com.fr.plugin.chart.vanchart.VanChart;
@@ -436,6 +437,7 @@ public class VanChartInteractivePane extends AbstractVanChartScrollPane {
conditionAttr.remove(AttrEffect.class);
conditionAttr.remove(AttrLineEffect.class);
conditionAttr.remove(AttrFloatColor.class);
+ conditionAttr.remove(AttrGanttLabel.class);
VanChartAttrMarker attrMarker = conditionAttr.getExisted(VanChartAttrMarker.class);
if (attrMarker != null && !attrMarker.isCommon()) {
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/style/axis/component/VanChartAxisButtonPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/axis/component/VanChartAxisButtonPane.java
index 69e2357a98..d5f866c818 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/axis/component/VanChartAxisButtonPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/axis/component/VanChartAxisButtonPane.java
@@ -8,7 +8,6 @@ import com.fr.design.gui.imenu.UIMenuItem;
import com.fr.design.gui.imenu.UIPopupMenu;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.general.ComparatorUtils;
-
import com.fr.plugin.chart.VanChartAttrHelper;
import com.fr.plugin.chart.attr.axis.VanChartAxis;
import com.fr.plugin.chart.attr.plot.VanChartAxisPlot;
@@ -18,6 +17,8 @@ import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.Icon;
import javax.swing.JPanel;
+import java.util.ArrayList;
+import java.util.List;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
@@ -29,8 +30,6 @@ import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
-import java.util.ArrayList;
-import java.util.List;
/**
* 坐标轴-上方按钮界面
@@ -41,9 +40,12 @@ public class VanChartAxisButtonPane extends BasicBeanPane {
private static final int B_W = 56;
private static final int B_H = 21;
private static final int COL_COUNT = 3;
+ private static final int MAX_COUNT = 20;
private UIButton addButton;
private UIPopupMenu popupMenu;
+ private UIMenuItem itemX;
+ private UIMenuItem itemY;
private List indexList_X = new ArrayList();
private List indexList_Y = new ArrayList();
@@ -51,7 +53,7 @@ public class VanChartAxisButtonPane extends BasicBeanPane {
private VanChartAxisPane parent;
- public VanChartAxisButtonPane(VanChartAxisPane vanChartAxisPane){
+ public VanChartAxisButtonPane(VanChartAxisPane vanChartAxisPane) {
this.parent = vanChartAxisPane;
this.setLayout(new BorderLayout());
@@ -66,6 +68,20 @@ public class VanChartAxisButtonPane extends BasicBeanPane {
buttonPane.setBorder(BorderFactory.createEmptyBorder(0, 5, 10, 0));
this.add(buttonPane, BorderLayout.CENTER);
+ itemX = new UIMenuItem(VanChartAttrHelper.X_AXIS_PREFIX);
+ itemX.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ addXAxis();
+ }
+ });
+ itemY = new UIMenuItem(VanChartAttrHelper.Y_AXIS_PREFIX);
+ itemY.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ addYAxis();
+ }
+ });
addButton.addActionListener(addListener);
}
@@ -92,12 +108,12 @@ public class VanChartAxisButtonPane extends BasicBeanPane {
pane = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0));
buttonPane.add(pane);
}
- if(pane != null) {
+ if (pane != null) {
pane.add(indexList_Y.get(i));
}
}
- if(popupMenu != null){
+ if (popupMenu != null) {
popupMenu.setVisible(false);
}
@@ -114,19 +130,19 @@ public class VanChartAxisButtonPane extends BasicBeanPane {
indexList_X.clear();
indexList_Y.clear();
List xList = plot.getXAxisList();
- for(VanChartAxis axis : xList){
+ for (VanChartAxis axis : xList) {
ChartAxisButton x = new ChartAxisButton(plot.getXAxisName(axis));
x.setToolTipText(plot.getXAxisName(axis));
indexList_X.add(x);
}
List yList = plot.getYAxisList();
- for(VanChartAxis axis : yList){
+ for (VanChartAxis axis : yList) {
ChartAxisButton y = new ChartAxisButton(plot.getYAxisName(axis));
y.setToolTipText(plot.getYAxisName(axis));
indexList_Y.add(y);
}
- if(indexList_X.isEmpty()){
+ if (indexList_X.isEmpty()) {
this.removeAll();
} else {
indexList_X.get(0).setSelected(true);
@@ -143,7 +159,7 @@ public class VanChartAxisButtonPane extends BasicBeanPane {
return null;
}
- public String getNewChartName(List existList, String prefix){
+ public String getNewChartName(List existList, String prefix) {
int count = existList.size() + 1;
while (true) {
String name_test = prefix + count;
@@ -165,31 +181,19 @@ public class VanChartAxisButtonPane extends BasicBeanPane {
ActionListener addListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
- if(popupMenu == null){
- popupMenu = new UIPopupMenu();
- UIMenuItem item_x = new UIMenuItem(VanChartAttrHelper.X_AXIS_PREFIX);
- item_x.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- addXAxis();
- }
- });
- UIMenuItem item_y = new UIMenuItem(VanChartAttrHelper.Y_AXIS_PREFIX);
- item_y.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- addYAxis();
- }
- });
- popupMenu.add(item_x);
- popupMenu.add(item_y);
+ popupMenu = new UIPopupMenu();
+ if (indexList_X.size() < MAX_COUNT) {
+ popupMenu.add(itemX);
+ }
+ if (indexList_Y.size() < MAX_COUNT) {
+ popupMenu.add(itemY);
}
popupMenu.setVisible(true);
GUICoreUtils.showPopupMenu(popupMenu, addButton, addButton.getWidth() - popupMenu.getPreferredSize().width, addButton.getY() - 1 + addButton.getHeight());
}
};
- private void addXAxis(){
+ private void addXAxis() {
String name = getNewChartName(indexList_X, VanChartAttrHelper.X_AXIS_PREFIX);
ChartAxisButton button = new ChartAxisButton(name);
@@ -199,7 +203,7 @@ public class VanChartAxisButtonPane extends BasicBeanPane {
layoutPane();
}
- private void addYAxis(){
+ private void addYAxis() {
String name = getNewChartName(indexList_Y, VanChartAttrHelper.Y_AXIS_PREFIX);
ChartAxisButton button = new ChartAxisButton(name);
@@ -216,9 +220,10 @@ public class VanChartAxisButtonPane extends BasicBeanPane {
private class AddButton extends UIButton {
- public AddButton(Icon icon){
+ public AddButton(Icon icon) {
super(icon);
}
+
/**
* 组件是否需要响应添加的观察者事件
*
@@ -277,19 +282,19 @@ public class VanChartAxisButtonPane extends BasicBeanPane {
}
private void noSelected() {
- for(ChartAxisButton button : indexList_X){
+ for (ChartAxisButton button : indexList_X) {
button.setSelected(false);
}
- for(ChartAxisButton button : indexList_Y){
+ for (ChartAxisButton button : indexList_Y) {
button.setSelected(false);
}
}
private void checkMoveOn(boolean moveOn) {
- for(ChartAxisButton button : indexList_X){
+ for (ChartAxisButton button : indexList_X) {
button.isMoveOn = false;
}
- for(ChartAxisButton button : indexList_Y){
+ for (ChartAxisButton button : indexList_Y) {
button.isMoveOn = false;
}
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 64187f89b9..9a5c453828 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartGaugeCateOrPercentLabelDetailPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartGaugeCateOrPercentLabelDetailPane.java
@@ -22,7 +22,7 @@ public class VanChartGaugeCateOrPercentLabelDetailPane extends VanChartGaugeLabe
}
protected double[] getLabelPaneRowSize(Plot plot, double p) {
- if (hasLabelAlign(plot)) {
+ if (hasLabelAlignPane()) {
return new double[]{p, p, p, p};
}
@@ -37,10 +37,10 @@ public class VanChartGaugeCateOrPercentLabelDetailPane extends VanChartGaugeLabe
switch (getGaugeStyle()) {
case POINTER:
case POINTER_SEMI:
- dataLabelContentPane = new LabelContentPaneWithCate(parent, VanChartGaugeCateOrPercentLabelDetailPane.this);
+ setDataLabelContentPane(new LabelContentPaneWithCate(getParentPane(), VanChartGaugeCateOrPercentLabelDetailPane.this));
break;
default:
- dataLabelContentPane = new LabelContentPaneWithPercent(parent, VanChartGaugeCateOrPercentLabelDetailPane.this);
+ setDataLabelContentPane(new LabelContentPaneWithPercent(getParentPane(), VanChartGaugeCateOrPercentLabelDetailPane.this));
break;
}
}
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 bbdb6acb3d..665fdc2565 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartGaugeLabelDetailPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartGaugeLabelDetailPane.java
@@ -24,6 +24,8 @@ import javax.swing.SwingConstants;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
/**
* Created by mengao on 2017/8/13.
@@ -35,6 +37,8 @@ public class VanChartGaugeLabelDetailPane extends VanChartPlotLabelDetailPane {
private UIButtonGroup align;
private JPanel alignPane;
private Integer[] oldAlignValues;
+ private UIButtonGroup style;
+ private ChartTextAttrPane textFontPane;
public VanChartGaugeLabelDetailPane(Plot plot, VanChartStylePane parent) {
super(plot, parent);
@@ -63,6 +67,15 @@ public class VanChartGaugeLabelDetailPane extends VanChartPlotLabelDetailPane {
return TableLayoutHelper.createTableLayoutPane(getLabelStyleComponents(plot), row, col);
}
+ protected void initStyleListener() {
+ style.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ checkStyleUse();
+ }
+ });
+ }
+
protected boolean isFontSizeAuto() {
return false;
}
@@ -101,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) {
@@ -110,17 +124,20 @@ public class VanChartGaugeLabelDetailPane extends VanChartPlotLabelDetailPane {
}
protected Component[][] getLabelPaneComponents(Plot plot, double p, double[] columnSize) {
- if (hasLabelAlign(plot)) {
+ if (hasLabelAlignPane()) {
return new Component[][]{
- new Component[]{dataLabelContentPane, null},
+ new Component[]{getDataLabelContentPane(), null},
new Component[]{createLabelPositionPane(Toolkit.i18nText("Fine-Design_Chart_Layout_Vertical"), plot), null},
new Component[]{createLabelAlignPane(Toolkit.i18nText("Fine-Design_Chart_Layout_Horizontal")), null},
new Component[]{createLabelStylePane(getLabelStyleRowSize(p), columnSize, plot), null},
};
} else {
- return super.getLabelPaneComponents(plot, p, columnSize);
+ return new Component[][]{
+ new Component[]{getDataLabelContentPane(), null},
+ new Component[]{createLabelStylePane(getLabelStyleRowSize(p), columnSize, plot), null},
+ };
}
}
@@ -170,8 +187,8 @@ public class VanChartGaugeLabelDetailPane extends VanChartPlotLabelDetailPane {
alignPane.setLayout(new BorderLayout());
alignPane.add(getLabelPositionPane(comps, row, col), BorderLayout.CENTER);
- if (parent != null) {
- parent.initListener(alignPane);
+ if (getParentPane() != null) {
+ getParentPane().initListener(alignPane);
}
}
@@ -206,19 +223,29 @@ 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);
style.setSelectedIndex(1);
+ textFontPane.populate(detail.getTextAttr());
if (hasLabelAlign(this.getPlot()) && align != null) {
align.setSelectedItem(detail.getAlign());
}
+
+ checkStyleUse();
}
public void update(AttrLabelDetail detail) {
super.update(detail);
detail.setCustom(true);
+ if (textFontPane != null) {
+ detail.setTextAttr(textFontPane.update());
+ }
if (align != null) {
if (align.getSelectedItem() != null) {
detail.setAlign(align.getSelectedItem());
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 0f81deefca..9bc21a0446 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartGaugePlotLabelPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartGaugePlotLabelPane.java
@@ -1,13 +1,15 @@
package com.fr.van.chart.designer.style.label;
import com.fr.chart.chartattr.Plot;
-
+import com.fr.design.gui.ibutton.UIButtonGroup;
+import com.fr.design.i18n.Toolkit;
+import com.fr.plugin.chart.attr.GaugeDetailStyle;
import com.fr.plugin.chart.base.AttrLabel;
+import com.fr.plugin.chart.base.AttrLabelDetail;
import com.fr.plugin.chart.gauge.VanChartGaugePlot;
import com.fr.plugin.chart.type.GaugeStyle;
import com.fr.van.chart.designer.TableLayout4VanChartHelper;
import com.fr.van.chart.designer.style.VanChartStylePane;
-import com.fr.design.i18n.Toolkit;
import javax.swing.JPanel;
import java.awt.BorderLayout;
@@ -18,6 +20,9 @@ import java.awt.BorderLayout;
public class VanChartGaugePlotLabelPane extends VanChartPlotLabelPane {
private static final long serialVersionUID = -322148616244458359L;
+ private UIButtonGroup orientation;
+ private JPanel layoutPane;
+
private VanChartPlotLabelDetailPane gaugeValueLabelPane;
public VanChartGaugePlotLabelPane(Plot plot, VanChartStylePane parent) {
@@ -25,10 +30,10 @@ public class VanChartGaugePlotLabelPane extends VanChartPlotLabelPane {
}
protected void createLabelPane() {
- labelPane = new JPanel(new BorderLayout(0, 4));
- labelDetailPane = new VanChartGaugeCateOrPercentLabelDetailPane(this.plot, this.parent);
- gaugeValueLabelPane = new VanChartGaugeValueLabelDetailPane(this.plot, this.parent);
- GaugeStyle gaugeStyle = ((VanChartGaugePlot)this.plot).getGaugeStyle();
+ setLabelPane(new JPanel(new BorderLayout(0, 4)));
+ setLabelDetailPane(new VanChartGaugeCateOrPercentLabelDetailPane(getPlot(), getParentPane()));
+ gaugeValueLabelPane = new VanChartGaugeValueLabelDetailPane(getPlot(), getParentPane());
+ GaugeStyle gaugeStyle = ((VanChartGaugePlot)getPlot()).getGaugeStyle();
String cateTitle, valueTitle = Toolkit.i18nText("Fine-Design_Chart_Value_Label");
switch (gaugeStyle){
case POINTER:
@@ -39,25 +44,67 @@ public class VanChartGaugePlotLabelPane extends VanChartPlotLabelPane {
cateTitle = Toolkit.i18nText("Fine-Design_Chart_Percent_Label");
break;
}
- JPanel cateOrPercentPane = TableLayout4VanChartHelper.createExpandablePaneWithTitle(cateTitle, labelDetailPane);
+ JPanel cateOrPercentPane = TableLayout4VanChartHelper.createExpandablePaneWithTitle(cateTitle, getLabelDetailPane());
JPanel valuePane = TableLayout4VanChartHelper.createExpandablePaneWithTitle(valueTitle, gaugeValueLabelPane);
- labelPane.add(cateOrPercentPane, BorderLayout.NORTH);
- labelPane.add(valuePane, BorderLayout.SOUTH);
+
+ layoutPane = createGaugeLabelLayoutPane();
+
+ getLabelPane().add(cateOrPercentPane, BorderLayout.NORTH);
+ 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/VanChartGaugeValueLabelDetailPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartGaugeValueLabelDetailPane.java
index 01a21d3823..be528c9733 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartGaugeValueLabelDetailPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartGaugeValueLabelDetailPane.java
@@ -24,10 +24,10 @@ public class VanChartGaugeValueLabelDetailPane extends VanChartGaugeLabelDetailP
switch (getGaugeStyle()) {
case POINTER:
case POINTER_SEMI:
- dataLabelContentPane = new LabelContentPaneWithOutCate(parent, VanChartGaugeValueLabelDetailPane.this);
+ setDataLabelContentPane(new LabelContentPaneWithOutCate(getParentPane(), VanChartGaugeValueLabelDetailPane.this));
break;
default:
- dataLabelContentPane = new LabelContentPaneWithCateValue(parent, VanChartGaugeValueLabelDetailPane.this);
+ setDataLabelContentPane(new LabelContentPaneWithCateValue(getParentPane(), VanChartGaugeValueLabelDetailPane.this));
break;
}
}
@@ -44,7 +44,7 @@ public class VanChartGaugeValueLabelDetailPane extends VanChartGaugeLabelDetailP
private Component[][] getLabelPaneComponentsWithBackground(Plot plot, double p, double[] columnSize) {
return new Component[][]{
- new Component[]{dataLabelContentPane, null},
+ new Component[]{getDataLabelContentPane(), null},
new Component[]{createLabelStylePane(new double[]{p}, columnSize, plot), null},
new Component[]{createBackgroundColorPane(), null},
};
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartLabelPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartLabelPane.java
index dfcd1a6443..96e2a7d24e 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartLabelPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartLabelPane.java
@@ -64,11 +64,14 @@ public class VanChartLabelPane extends AbstractVanChartScrollPane {
return;
}
ConditionAttr attrList = chart.getPlot().getConditionCollection().getDefaultAttr();
+
+ // labelPane中颜色选择器会触发listener.doChange(),导致style界面update两次,
+ // 为了避免递归updateBean时,remove与add不匹配,调整一下labelPane.update()的位置
+ AttrLabel attrLabel = labelPane.update();
DataSeriesCondition attr = ((VanChartPlot)chart.getPlot()).getAttrLabelFromConditionCollection();
if(attr != null) {
attrList.remove(attr);
}
- AttrLabel attrLabel = labelPane.update();
if (attrLabel != null) {
attrList.addDataSeriesCondition(attrLabel);
}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartPlotLabelDetailPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartPlotLabelDetailPane.java
index c506d89ea1..1470951976 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartPlotLabelDetailPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartPlotLabelDetailPane.java
@@ -7,12 +7,11 @@ import com.fr.design.dialog.BasicPane;
import com.fr.design.gui.ibutton.UIButtonGroup;
import com.fr.design.gui.ibutton.UIToggleButton;
import com.fr.design.gui.ilable.UILabel;
+import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
import com.fr.design.mainframe.chart.gui.style.ChartTextAttrPane;
import com.fr.design.style.color.ColorSelectBox;
-import com.fr.design.i18n.Toolkit;
-
import com.fr.general.ComparatorUtils;
import com.fr.plugin.chart.attr.plot.VanChartLabelPositionPlot;
import com.fr.plugin.chart.base.AttrLabelDetail;
@@ -20,6 +19,8 @@ import com.fr.plugin.chart.base.AttrTooltipContent;
import com.fr.stable.Constants;
import com.fr.van.chart.designer.PlotFactory;
import com.fr.van.chart.designer.TableLayout4VanChartHelper;
+import com.fr.van.chart.designer.component.background.VanChartBackgroundWithOutImagePane;
+import com.fr.van.chart.designer.component.border.VanChartBorderWithShapePane;
import com.fr.van.chart.designer.style.VanChartStylePane;
import javax.swing.JPanel;
@@ -28,9 +29,6 @@ import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.BorderLayout;
import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
/**
* Created by Mitisky on 15/12/7.
@@ -38,22 +36,27 @@ import java.awt.event.ActionListener;
public class VanChartPlotLabelDetailPane extends BasicPane {
private static final long serialVersionUID = -22438250307946275L;
- protected BasicBeanPane dataLabelContentPane;
+ public static final int HORIZONTAL_INDEX = 0;
- protected UIButtonGroup position;
- protected UIButtonGroup autoAdjust;
- protected UIToggleButton tractionLine;
+ private BasicBeanPane dataLabelContentPane;
- protected UIButtonGroup style;
- protected ChartTextAttrPane textFontPane;
+ private UIButtonGroup position;
+ private UIButtonGroup autoAdjust;
+ private UIButtonGroup orientation;
+ private UIToggleButton tractionLine;
- protected ColorSelectBox backgroundColor;
+ private ColorSelectBox backgroundColor;
+ private VanChartBorderWithShapePane borderPane;
+ private VanChartBackgroundWithOutImagePane backgroundPane;
private JPanel tractionLinePane;
private JPanel positionPane;
private Integer[] oldPositionValues;
- protected VanChartStylePane parent;
+ private JPanel borderPaneWithTitle;
+ private JPanel backgroundPaneWithTitle;
+
+ private VanChartStylePane parent;
private Plot plot;
public VanChartPlotLabelDetailPane(Plot plot, VanChartStylePane parent) {
@@ -62,6 +65,18 @@ public class VanChartPlotLabelDetailPane extends BasicPane {
initLabelDetailPane(plot);
}
+ public BasicBeanPane getDataLabelContentPane() {
+ return dataLabelContentPane;
+ }
+
+ public void setDataLabelContentPane(BasicBeanPane dataLabelContentPane) {
+ this.dataLabelContentPane = dataLabelContentPane;
+ }
+
+ public VanChartStylePane getParentPane() {
+ return parent;
+ }
+
protected void initLabelDetailPane (Plot plot) {
this.setLayout(new BorderLayout());
initToolTipContentPane(plot);
@@ -73,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);
@@ -91,17 +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},
- new Component[]{createLabelStylePane(getLabelStyleRowSize(p), columnSize, plot),null},
- };
- } else {
- return new Component[][]{
- new Component[]{dataLabelContentPane,null},
- new Component[]{createLabelStylePane(getLabelStyleRowSize(p), columnSize, plot),null},
+ new Component[]{createLabelPositionPane(Toolkit.i18nText("Fine-Design_Chart_Layout_Position"), plot), 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) {
@@ -116,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);
}
@@ -150,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"));
@@ -161,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) {
@@ -198,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
@@ -214,17 +295,6 @@ public class VanChartPlotLabelDetailPane extends BasicPane {
});
}
- protected JPanel createLabelStylePane(double[] row, double[] col, Plot plot) {
- style = new UIButtonGroup(new String[]{Toolkit.i18nText("Fine-Design_Chart_Automatic"),
- Toolkit.i18nText("Fine-Design_Chart_Custom")});
- textFontPane =initTextFontPane();
-
- initStyleListener();
-
- JPanel panel = TableLayout4VanChartHelper.createGapTableLayoutPane(getLabelStyleComponents(plot),row,col);
- return createTableLayoutPaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Widget_Style"), panel);
- }
-
protected ChartTextAttrPane initTextFontPane () {
return new ChartTextAttrPane(){
protected Component[][] getComponents(JPanel buttonPane) {
@@ -237,24 +307,6 @@ public class VanChartPlotLabelDetailPane extends BasicPane {
};
}
- protected Component[][] getLabelStyleComponents(Plot plot) {
- UILabel text = new UILabel(Toolkit.i18nText("Fine-Design_Chart_Character"), SwingConstants.LEFT);
- return new Component[][]{
- new Component[]{null,null},
- new Component[]{text,style},
- new Component[]{textFontPane,null},
- };
- }
-
- protected void initStyleListener() {
- style.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- checkStyleUse();
- }
- });
- }
-
protected JPanel createBackgroundColorPane() {
backgroundColor = new ColorSelectBox(100);
return createTableLayoutPaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Background"), backgroundColor);
@@ -265,22 +317,26 @@ public class VanChartPlotLabelDetailPane extends BasicPane {
}
private void checkAllUse() {
- checkStyleUse();
if(tractionLine == null){
return;
}
checkPositionEnabled();
}
- protected void checkStyleUse() {
- textFontPane.setVisible(style.getSelectedIndex() == 1);
- textFontPane.setPreferredSize(style.getSelectedIndex() == 1 ? new Dimension(0, 60) : new Dimension(0, 0));
- }
-
private void checkPosition() {
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);
}
@@ -295,20 +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);
}
- style.setSelectedIndex(detail.isCustom() ? 1 : 0);
- textFontPane.populate(detail.getTextAttr());
if(backgroundColor != null){
backgroundColor.setSelectObject(detail.getBackgroundColor());
}
+ if(borderPane != null){
+ borderPane.populate(detail.getBorder());
+ }
+ if(backgroundPane != null){
+ backgroundPane.populate(detail.getBackground());
+ }
checkAllUse();
+ checkOrientation();
}
@@ -324,16 +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);
}
- detail.setCustom(style.getSelectedIndex() == 1);
- if(textFontPane != null){
- detail.setTextAttr(textFontPane.update());
- }
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/designer/style/label/VanChartPlotLabelNoCheckPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartPlotLabelNoCheckPane.java
index 95eb30204f..beb89e5d78 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartPlotLabelNoCheckPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartPlotLabelNoCheckPane.java
@@ -19,12 +19,12 @@ public class VanChartPlotLabelNoCheckPane extends VanChartPlotLabelPane {
protected void addComponents() {
this.setLayout(new BorderLayout());
- this.add(labelPane,BorderLayout.CENTER);
+ this.add(getLabelPane(),BorderLayout.CENTER);
}
public void populate(AttrLabel attr) {
super.populate(attr);
- isLabelShow.setSelected(true);
- labelPane.setVisible(true);
+ getLabelShowCheckBox().setSelected(true);
+ getLabelPane().setVisible(true);
}
}
\ No newline at end of file
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartPlotLabelPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartPlotLabelPane.java
index e0a007dd25..f1fa6f0f1a 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartPlotLabelPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartPlotLabelPane.java
@@ -3,6 +3,7 @@ package com.fr.van.chart.designer.style.label;
import com.fr.chart.chartattr.Plot;
import com.fr.design.dialog.BasicPane;
import com.fr.design.gui.icheckbox.UICheckBox;
+import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
@@ -19,24 +20,52 @@ import java.awt.event.ActionListener;
public class VanChartPlotLabelPane extends BasicPane {
private static final long serialVersionUID = -1701936672446232396L;
- protected UICheckBox isLabelShow;
+ private UICheckBox isLabelShow;
- protected VanChartPlotLabelDetailPane labelDetailPane;
+ private VanChartPlotLabelDetailPane labelDetailPane;
- protected VanChartStylePane parent;
- protected Plot plot;
+ private VanChartStylePane parent;
+ private Plot plot;
- protected JPanel labelPane;
+ private JPanel labelPane;
public VanChartPlotLabelPane(Plot plot, VanChartStylePane parent) {
this.parent = parent;
this.plot = plot;
- isLabelShow = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Use_Label"));
+ isLabelShow = new UICheckBox(Toolkit.i18nText("Fine-Design_Chart_Use_Label"));
labelPane = new JPanel(new BorderLayout(0, 4));
createLabelPane();
addComponents();
}
+ public UICheckBox getLabelShowCheckBox() {
+ return isLabelShow;
+ }
+
+ public VanChartPlotLabelDetailPane getLabelDetailPane() {
+ return labelDetailPane;
+ }
+
+ public void setLabelDetailPane(VanChartPlotLabelDetailPane labelDetailPane) {
+ this.labelDetailPane = labelDetailPane;
+ }
+
+ public VanChartStylePane getParentPane() {
+ return parent;
+ }
+
+ public Plot getPlot() {
+ return plot;
+ }
+
+ public JPanel getLabelPane() {
+ return labelPane;
+ }
+
+ public void setLabelPane(JPanel labelPane) {
+ this.labelPane = labelPane;
+ }
+
protected void createLabelPane() {
labelDetailPane = new VanChartPlotLabelDetailPane(this.plot, this.parent);
labelPane.add(labelDetailPane, BorderLayout.CENTER);
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/style/tooltip/VanChartPlotRefreshTooltipPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/tooltip/VanChartPlotRefreshTooltipPane.java
index ade1d85bdb..0f71c9de69 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/tooltip/VanChartPlotRefreshTooltipPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/tooltip/VanChartPlotRefreshTooltipPane.java
@@ -72,7 +72,6 @@ public class VanChartPlotRefreshTooltipPane extends VanChartPlotTooltipNoCheckPa
Component[][] components = new Component[][]{
new Component[]{refreshTooltipContentPane,null},
new Component[]{initDurationPane(),null},
- new Component[]{createLabelStylePane(),null},
new Component[]{TableLayout4VanChartHelper.createExpandablePaneWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Border"),borderPane),null},
new Component[]{TableLayout4VanChartHelper.createExpandablePaneWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Background"), backgroundPane),null},
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/style/tooltip/VanChartPlotTooltipPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/tooltip/VanChartPlotTooltipPane.java
index 1c3ed4aa53..aa86fb9a73 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/tooltip/VanChartPlotTooltipPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/tooltip/VanChartPlotTooltipPane.java
@@ -7,8 +7,6 @@ import com.fr.design.gui.icheckbox.UICheckBox;
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.utils.gui.UIComponentUtils;
import com.fr.design.widget.FRWidgetFactory;
import com.fr.plugin.chart.base.AttrTooltip;
@@ -28,13 +26,11 @@ import java.awt.event.ActionListener;
public class VanChartPlotTooltipPane extends BasicPane {
private static final long serialVersionUID = 6087381131907589370L;
+ // todo 使用private
protected UICheckBox isTooltipShow;
protected VanChartTooltipContentPane tooltipContentPane;
- protected UIButtonGroup style;
- protected ChartTextAttrPane textFontPane;
-
protected VanChartBorderWithRadiusPane borderPane;
protected VanChartBackgroundWithOutImagePane backgroundPane;
@@ -95,7 +91,6 @@ public class VanChartPlotTooltipPane extends BasicPane {
protected Component[][] createComponents(Plot plot) {
Component[][] components = new Component[][]{
new Component[]{tooltipContentPane,null},
- new Component[]{createLabelStylePane(),null},
new Component[]{TableLayout4VanChartHelper.createExpandablePaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Border"),borderPane),null},
new Component[]{TableLayout4VanChartHelper.createExpandablePaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Background"), backgroundPane),null},
new Component[]{createDisplayStrategy(plot),null},
@@ -108,38 +103,6 @@ public class VanChartPlotTooltipPane extends BasicPane {
tooltipContentPane = PlotFactory.createPlotTooltipContentPane(plot, parent, VanChartPlotTooltipPane.this);
}
- protected JPanel createLabelStylePane() {
- style = new UIButtonGroup(new String[]{Toolkit.i18nText("Fine-Design_Chart_Automatic"),Toolkit.i18nText("Fine-Design_Chart_Custom")});
- textFontPane = new ChartTextAttrPane() {
- protected Component[][] getComponents(JPanel buttonPane) {
- return new Component[][]{
- new Component[]{null, null},
- new Component[]{null, getFontNameComboBox()},
- new Component[]{null, buttonPane}
- };
- }
- };
-
- JPanel panel = TableLayout4VanChartHelper.createGapTableLayoutPane(Toolkit.i18nText("Fine-Design_Chart_Character"), style);
- JPanel panel1 = new JPanel(new BorderLayout());
- panel1.add(panel, BorderLayout.CENTER);
- panel1.add(textFontPane, BorderLayout.SOUTH);
-
- initStyleListener();
-
- return TableLayout4VanChartHelper.createExpandablePaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Widget_Style"), panel1);
- }
-
-
- private void initStyleListener() {
- style.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- checkStyleUse();
- }
- });
- }
-
protected JPanel createDisplayStrategy(Plot plot) {
showAllSeries = new UICheckBox(getShowAllSeriesLabelText());
followMouse = new UIButtonGroup(new String[]{Toolkit.i18nText("Fine-Design_Chart_Follow_Mouse"),
@@ -175,7 +138,6 @@ public class VanChartPlotTooltipPane extends BasicPane {
private void checkAllUse() {
checkBoxUse();
- checkStyleUse();
}
/**
* 检查box使用.
@@ -184,10 +146,6 @@ public class VanChartPlotTooltipPane extends BasicPane {
tooltipPane.setVisible(isTooltipShow.isSelected());
}
- private void checkStyleUse() {
- textFontPane.setVisible(style.getSelectedIndex() == 1);
- }
-
protected AttrTooltip getAttrTooltip() {
return new AttrTooltip();
}
@@ -202,8 +160,6 @@ public class VanChartPlotTooltipPane extends BasicPane {
tooltipContentPane.populateBean(attr.getContent());
}
- style.setSelectedIndex(attr.isCustom() ? 1 : 0);
- textFontPane.populate(attr.getTextAttr());
borderPane.populate(attr.getGeneralInfo());
backgroundPane.populate(attr.getGeneralInfo());
if(showAllSeries != null) {
@@ -224,10 +180,6 @@ public class VanChartPlotTooltipPane extends BasicPane {
attrTooltip.setContent(tooltipContentPane.updateBean());
}
- attrTooltip.setCustom(style.getSelectedIndex() == 1);
- if(textFontPane != null){
- attrTooltip.setTextAttr(textFontPane.update());
- }
borderPane.update(attrTooltip.getGeneralInfo());
backgroundPane.update(attrTooltip.getGeneralInfo());
if(showAllSeries != null) {
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/type/AbstractRectanglePlotPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/type/AbstractRectanglePlotPane.java
new file mode 100644
index 0000000000..6babd6a2f2
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/type/AbstractRectanglePlotPane.java
@@ -0,0 +1,90 @@
+package com.fr.van.chart.designer.type;
+
+import com.fr.chart.chartglyph.ConditionCollection;
+import com.fr.log.FineLoggerFactory;
+import com.fr.plugin.chart.PiePlot4VanChart;
+import com.fr.plugin.chart.area.VanChartAreaPlot;
+import com.fr.plugin.chart.attr.axis.VanChartAxis;
+import com.fr.plugin.chart.attr.plot.VanChartPlot;
+import com.fr.plugin.chart.attr.plot.VanChartRectanglePlot;
+import com.fr.plugin.chart.bubble.VanChartBubblePlot;
+import com.fr.plugin.chart.column.VanChartColumnPlot;
+import com.fr.plugin.chart.line.VanChartLinePlot;
+import com.fr.plugin.chart.scatter.VanChartScatterPlot;
+import com.fr.plugin.chart.type.VanChartPlotType;
+import com.fr.plugin.chart.vanchart.VanChart;
+import com.fr.stable.StringUtils;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @author Bjorn
+ * @version 10.0
+ * Created by Bjorn on 2020-08-24
+ */
+public abstract class AbstractRectanglePlotPane extends AbstractVanChartTypePane {
+
+ private static Set extendPlotIds = new HashSet<>();
+
+ static {
+ extendPlotIds.add(VanChartColumnPlot.VAN_CHART_COLUMN_PLOT_ID);
+ extendPlotIds.add(VanChartColumnPlot.VAN_CHART_BAR_PLOT_ID);
+ extendPlotIds.add(VanChartLinePlot.VAN_CHART_LINE_PLOT);
+ extendPlotIds.add(VanChartAreaPlot.VAN_CHART_AREA_PLOT_ID);
+ extendPlotIds.add(VanChartScatterPlot.VAN_CHART_SCATTER_PLOT_ID);
+ extendPlotIds.add(PiePlot4VanChart.VAN_CHART_PIE_PLOT);
+ }
+
+ @Override
+ protected VanChartPlot cloneOldPlot2New(VanChartPlot oldPlot, VanChartPlot newPlot) {
+ try {
+ VanChartRectanglePlot vanChartRectanglePlot = (VanChartRectanglePlot) newPlot;
+ VanChartRectanglePlot clonePlot = (VanChartRectanglePlot) oldPlot.clone();
+ clonePlot.setVanChartPlotType(vanChartRectanglePlot.getVanChartPlotType());
+ //自定义类型的图形要增加一个y2轴,并且增加系列中的堆积条件,反之则要去掉y2轴和条件
+ if (clonePlot.isCustomChart()) {
+ List valueAxisList = clonePlot.getValueAxisList();
+ valueAxisList.add(vanChartRectanglePlot.getValueAxisList().get(1));
+ clonePlot.setStackAndAxisCondition(vanChartRectanglePlot.getStackAndAxisCondition());
+ } else {
+ List xAxisList = clonePlot.getXAxisList();
+ List yAxisList = clonePlot.getYAxisList();
+ List newXAxisList = new ArrayList<>();
+ List newYAxisList = new ArrayList<>();
+ newXAxisList.add(xAxisList.get(0));
+ newYAxisList.add(yAxisList.get(0));
+ clonePlot.setXAxisList(newXAxisList);
+ clonePlot.setYAxisList(newYAxisList);
+ clonePlot.setStackAndAxisCondition(new ConditionCollection());
+ }
+
+ //百分比堆积图值轴的格式不保留
+ if (clonePlot.getVanChartPlotType() == VanChartPlotType.STACK_BY_PERCENT ||
+ ((VanChartRectanglePlot) oldPlot).getVanChartPlotType() == VanChartPlotType.STACK_BY_PERCENT) {
+ VanChartAxis cloneAxis = clonePlot.getValueAxisList().get(0);
+ VanChartAxis vanChartAxis = vanChartRectanglePlot.getValueAxisList().get(0);
+ cloneAxis.setFormat(vanChartAxis.getFormat());
+ cloneAxis.setPercentage(vanChartAxis.isPercentage());
+ cloneAxis.setCommonValueFormat(vanChartAxis.isCommonValueFormat());
+ cloneAxis.setHtmlLabel(vanChartAxis.getHtmlLabel());
+ }
+ return clonePlot;
+ } catch (CloneNotSupportedException ex) {
+ FineLoggerFactory.getLogger().error("Error in change plot");
+ return newPlot;
+ }
+ }
+
+ //是否支持属性的继承
+ @Override
+ protected boolean supportExtendAttr(VanChart chart) {
+ if (StringUtils.equals(VanChartBubblePlot.VAN_CHART_BUBBLE_PLOT_ID, chart.getID())) {
+ VanChartBubblePlot vanChartBubblePlot = chart.getPlot();
+ return !vanChartBubblePlot.isForceBubble();
+ }
+ return extendPlotIds.contains(chart.getID());
+ }
+}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/type/AbstractVanChartTypePane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/type/AbstractVanChartTypePane.java
index 6189c347b4..9cf9165547 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/type/AbstractVanChartTypePane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/type/AbstractVanChartTypePane.java
@@ -1,10 +1,13 @@
package com.fr.van.chart.designer.type;
import com.fr.base.BaseUtils;
+import com.fr.base.chart.chartdata.TopDefinitionProvider;
import com.fr.chart.base.AttrFillStyle;
import com.fr.chart.chartattr.Chart;
import com.fr.chart.chartattr.Legend;
import com.fr.chart.chartattr.Plot;
+import com.fr.chart.chartdata.NormalReportDataDefinition;
+import com.fr.chart.chartdata.NormalTableDataDefinition;
import com.fr.chart.chartglyph.ConditionAttr;
import com.fr.chart.chartglyph.ConditionCollection;
import com.fr.chart.chartglyph.DataSheet;
@@ -37,7 +40,7 @@ import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionListener;
-public abstract class AbstractVanChartTypePane extends AbstractChartTypePane {
+public abstract class AbstractVanChartTypePane extends AbstractChartTypePane {
private static final long serialVersionUID = 7743244512351499265L;
private UICheckBox largeModelCheckBox;
@@ -119,7 +122,7 @@ public abstract class AbstractVanChartTypePane extends AbstractChartTypePane children = root.children();
+ Enumeration children = root.children();
if (children.hasMoreElements()) {
- DefaultMutableTreeNode child = children.nextElement();
+ 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){
- Enumeration children = parent.children();
- if (children.hasMoreElements()){
- DefaultMutableTreeNode node = children.nextElement();
+ private void setFirstChildTreeNode(DefaultMutableTreeNode parent, DefaultTreeModel m_model) {
+ Enumeration children = parent.children();
+ 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()){
- DefaultMutableTreeNode el = els.nextElement();
- if(el == null || el.getUserObject() == null){
+ Enumeration els = root.postorderEnumeration();
+ while (els.hasMoreElements()) {
+ DefaultMutableTreeNode el = (DefaultMutableTreeNode) els.nextElement();
+ 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()){
+ Enumeration els = root.postorderEnumeration();
+ while (els.hasMoreElements()) {
- DefaultMutableTreeNode el = els.nextElement();
- String path = el.getUserObject().toString();
+ DefaultMutableTreeNode el = (DefaultMutableTreeNode) els.nextElement();
+ 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/FunnelPercentFormatPaneWithoutCheckBox.java b/designer-chart/src/main/java/com/fr/van/chart/funnel/designer/style/FunnelPercentFormatPaneWithoutCheckBox.java
new file mode 100644
index 0000000000..5495131b3a
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/funnel/designer/style/FunnelPercentFormatPaneWithoutCheckBox.java
@@ -0,0 +1,18 @@
+package com.fr.van.chart.funnel.designer.style;
+
+import com.fr.design.i18n.Toolkit;
+import com.fr.van.chart.designer.component.format.PercentFormatPaneWithoutCheckBox;
+import com.fr.van.chart.designer.style.VanChartStylePane;
+
+import javax.swing.JPanel;
+
+public class FunnelPercentFormatPaneWithoutCheckBox extends PercentFormatPaneWithoutCheckBox {
+
+ public FunnelPercentFormatPaneWithoutCheckBox(VanChartStylePane parent, JPanel showOnPane) {
+ super(parent, showOnPane);
+ }
+
+ protected String getCheckBoxText() {
+ return Toolkit.i18nText("Fine-Design_Chart_Value_Conversion");
+ }
+}
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 e2382c6852..d7b9f9da47 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/funnel/designer/style/VanChartFunnelLabelContentPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/funnel/designer/style/VanChartFunnelLabelContentPane.java
@@ -1,11 +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.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;
@@ -25,24 +32,65 @@ public class VanChartFunnelLabelContentPane extends VanChartLabelContentPane {
protected Component[][] getPaneComponents(){
return new Component[][]{
- new Component[]{seriesNameFormatPane,null},
- new Component[]{valueFormatPane,null},
- new Component[]{percentFormatPane,null},
+ new Component[]{getSeriesNameFormatPane(), null},
+ new Component[]{getValueFormatPane(), null},
+ new Component[]{getPercentFormatPane(), null},
+ };
+ }
+
+ protected Component[][] getRichTextComponents() {
+ return new Component[][]{
+ new Component[]{getRichTextSeriesNameFormatPane(), null},
+ new Component[]{getRichTextValueFormatPane(), null},
+ new Component[]{getRichTextPercentFormatPane(), null}
};
}
@Override
protected void initFormatPane(VanChartStylePane parent, JPanel showOnPane) {
- categoryNameFormatPane = new CategoryNameFormatPaneWithCheckBox(parent, showOnPane);
- seriesNameFormatPane = new SeriesNameFormatPaneWithCheckBox(parent, showOnPane);
- valueFormatPane = new ValueFormatPaneWithCheckBox(parent, showOnPane);
- percentFormatPane = new FunnelPercentFormatPaneWithCheckBox(parent, showOnPane);
+ setCategoryNameFormatPane(new CategoryNameFormatPaneWithCheckBox(parent, showOnPane));
+ setSeriesNameFormatPane(new SeriesNameFormatPaneWithCheckBox(parent, showOnPane));
+ setValueFormatPane(new ValueFormatPaneWithCheckBox(parent, showOnPane));
+ setPercentFormatPane(new FunnelPercentFormatPaneWithCheckBox(parent, showOnPane));
+ }
+
+ @Override
+ protected void initRichTextFormatPane(VanChartStylePane parent, JPanel showOnPane) {
+ setRichTextCategoryNameFormatPane(new CategoryNameFormatPaneWithoutCheckBox(parent, showOnPane));
+ setRichTextSeriesNameFormatPane(new SeriesNameFormatPaneWithoutCheckBox(parent, showOnPane));
+ setRichTextValueFormatPane(new ValueFormatPaneWithoutCheckBox(parent, showOnPane));
+ 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 c98dfcce46..b7f817eb3c 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/funnel/designer/style/VanChartFunnelRefreshTooltipContentPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/funnel/designer/style/VanChartFunnelRefreshTooltipContentPane.java
@@ -1,7 +1,9 @@
package com.fr.van.chart.funnel.designer.style;
import com.fr.van.chart.designer.component.format.ChangedPercentFormatPaneWithCheckBox;
+import com.fr.van.chart.designer.component.format.ChangedPercentFormatPaneWithoutCheckBox;
import com.fr.van.chart.designer.component.format.ChangedValueFormatPaneWithCheckBox;
+import com.fr.van.chart.designer.component.format.ChangedValueFormatPaneWithoutCheckBox;
import com.fr.van.chart.designer.style.VanChartStylePane;
import javax.swing.JPanel;
@@ -14,12 +16,25 @@ 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);
- changedValueFormatPane = new ChangedValueFormatPaneWithCheckBox(parent, showOnPane);
- changedPercentFormatPane = new ChangedPercentFormatPaneWithCheckBox(parent, showOnPane);
+ setChangedValueFormatPane(new ChangedValueFormatPaneWithCheckBox(parent, showOnPane));
+ setChangedPercentFormatPane(new ChangedPercentFormatPaneWithCheckBox(parent, showOnPane));
+ }
+
+ @Override
+ protected void initRichTextFormatPane(VanChartStylePane parent, JPanel showOnPane) {
+ super.initRichTextFormatPane(parent, showOnPane);
+
+ setRichTextChangedValueFormatPane(new ChangedValueFormatPaneWithoutCheckBox(parent, showOnPane));
+ setRichTextChangedPercentFormatPane(new ChangedPercentFormatPaneWithoutCheckBox(parent, showOnPane));
}
protected double[] getRowSize(double p){
@@ -28,11 +43,21 @@ public class VanChartFunnelRefreshTooltipContentPane extends VanChartFunnelToolt
protected Component[][] getPaneComponents(){
return new Component[][]{
- new Component[]{seriesNameFormatPane,null},
- new Component[]{valueFormatPane,null},
- new Component[]{changedValueFormatPane,null},
- new Component[]{percentFormatPane,null},
- new Component[]{changedPercentFormatPane,null},
+ new Component[]{getSeriesNameFormatPane(), null},
+ new Component[]{getValueFormatPane(), null},
+ new Component[]{getChangedValueFormatPane(), null},
+ new Component[]{getPercentFormatPane(), null},
+ new Component[]{getChangedPercentFormatPane(), null},
+ };
+ }
+
+ protected Component[][] getRichTextComponents() {
+ return new Component[][]{
+ new Component[]{getRichTextSeriesNameFormatPane(), null},
+ new Component[]{getRichTextValueFormatPane(), null},
+ new Component[]{getRichTextChangedValueFormatPane(), null},
+ new Component[]{getRichTextPercentFormatPane(), null},
+ new Component[]{getRichTextChangedPercentFormatPane(), null}
};
}
}
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 1a5199c091..247194ec40 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/funnel/designer/style/VanChartFunnelTooltipContentPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/funnel/designer/style/VanChartFunnelTooltipContentPane.java
@@ -1,11 +1,17 @@
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;
+import com.fr.van.chart.designer.component.format.CategoryNameFormatPaneWithoutCheckBox;
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;
@@ -25,26 +31,69 @@ public class VanChartFunnelTooltipContentPane extends VanChartTooltipContentPane
protected Component[][] getPaneComponents(){
return new Component[][]{
- new Component[]{seriesNameFormatPane,null},
- new Component[]{valueFormatPane,null},
- new Component[]{percentFormatPane,null},
+ new Component[]{getSeriesNameFormatPane(), null},
+ new Component[]{getValueFormatPane(), null},
+ new Component[]{getPercentFormatPane(), null},
+ };
+ }
+
+ protected Component[][] getRichTextComponents() {
+ return new Component[][]{
+ new Component[]{getRichTextSeriesNameFormatPane(), null},
+ new Component[]{getRichTextValueFormatPane(), null},
+ new Component[]{getRichTextPercentFormatPane(), null}
};
}
@Override
protected void initFormatPane(VanChartStylePane parent, JPanel showOnPane) {
- categoryNameFormatPane = new CategoryNameFormatPaneWithCheckBox(parent, showOnPane);
- seriesNameFormatPane = new SeriesNameFormatPaneWithCheckBox(parent, showOnPane);
- valueFormatPane = new ValueFormatPaneWithCheckBox(parent, showOnPane);
- percentFormatPane = new FunnelPercentFormatPaneWithCheckBox(parent, showOnPane);
+ setCategoryNameFormatPane(new CategoryNameFormatPaneWithCheckBox(parent, showOnPane));
+ setSeriesNameFormatPane(new SeriesNameFormatPaneWithCheckBox(parent, showOnPane));
+ setValueFormatPane(new ValueFormatPaneWithCheckBox(parent, showOnPane));
+ setPercentFormatPane(new FunnelPercentFormatPaneWithCheckBox(parent, showOnPane));
+ }
+
+ @Override
+ protected void initRichTextFormatPane(VanChartStylePane parent, JPanel showOnPane) {
+ setRichTextCategoryNameFormatPane(new CategoryNameFormatPaneWithoutCheckBox(parent, showOnPane));
+ setRichTextSeriesNameFormatPane(new SeriesNameFormatPaneWithoutCheckBox(parent, showOnPane));
+ setRichTextValueFormatPane(new ValueFormatPaneWithoutCheckBox(parent, showOnPane));
+ 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 42428c6317..24a5d45fe9 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
@@ -12,6 +12,7 @@ import com.fr.plugin.chart.gantt.attr.AttrGanttLabel;
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;
@@ -40,16 +41,18 @@ public class VanChartGanttConditionPane extends DataSeriesConditionPane {
protected void addBasicAction() {
classPaneMap.put(AttrBackground.class, new VanChartSeriesColorConditionPane(this));
classPaneMap.put(AttrAlpha.class, new LabelAlphaPane(this));
- classPaneMap.put(AttrGanttLabel.class, new VanChartLabelConditionPane(this, plot));
- classPaneMap.put(AttrGanttTooltip.class, new VanChartTooltipConditionPane(this, plot){
+ if (!PlotFactory.largeDataModel(plot)) {
+ classPaneMap.put(AttrGanttLabel.class, new VanChartLabelConditionPane(this, plot));
+ }
+ classPaneMap.put(AttrGanttTooltip.class, new VanChartTooltipConditionPane(this, plot) {
@Override
protected VanChartPlotTooltipPane createTooltipContentsPane() {
- return new VanChartPlotTooltipNoCheckPane(getPlot(), null){
+ return new VanChartPlotTooltipNoCheckPane(getPlot(), null) {
@Override
protected AttrTooltip getAttrTooltip() {
AttrGanttTooltip attrGanttTooltip = new AttrGanttTooltip();
- ((AttrGanttTooltipContent)attrGanttTooltip.getContent()).getDurationFormat().setEnable(true);
+ ((AttrGanttTooltipContent) attrGanttTooltip.getContent()).getDurationFormat().setEnable(true);
return attrGanttTooltip;
}
};
@@ -65,7 +68,7 @@ public class VanChartGanttConditionPane extends DataSeriesConditionPane {
@Override
protected ChartConditionPane createListConditionPane() {
- return new ChartConditionPane(){
+ return new ChartConditionPane() {
@Override
protected ConditionKeyType[] conditionKeyTypes() {
return ConditionKeyType.Gantt_CONDITION_KEY_TYPES;
@@ -75,6 +78,7 @@ public class VanChartGanttConditionPane extends DataSeriesConditionPane {
/**
* 返回图表class对象
+ *
* @return class对象
*/
public Class extends Plot> class4Correspond() {
diff --git a/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/VanChartGanttLabelContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/VanChartGanttLabelContentPane.java
deleted file mode 100644
index fe4b2e80ae..0000000000
--- a/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/VanChartGanttLabelContentPane.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.fr.van.chart.gantt.designer.style;
-
-import com.fr.van.chart.designer.component.VanChartHtmlLabelPane;
-import com.fr.van.chart.designer.style.VanChartStylePane;
-import com.fr.van.chart.gantt.designer.style.tooltip.VanChartGanttTooltipContentPane;
-
-import javax.swing.JPanel;
-
-/**
- * Created by hufan on 2017/1/13.
- */
-public class VanChartGanttLabelContentPane extends VanChartGanttTooltipContentPane {
- public VanChartGanttLabelContentPane(VanChartStylePane parent, JPanel showOnPane) {
- super(parent, showOnPane);
- }
-
- protected VanChartHtmlLabelPane createHtmlLabelPane() {
- return new VanChartHtmlLabelPane();
- }
-}
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
new file mode 100644
index 0000000000..cfb1e63a8a
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/label/VanChartGanttLabelContentPane.java
@@ -0,0 +1,125 @@
+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.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;
+import com.fr.van.chart.gantt.designer.style.tooltip.VanChartDateFormatPaneWithCheckBox;
+import com.fr.van.chart.gantt.designer.style.tooltip.VanChartFormatComBoxWithCheckBox;
+
+import javax.swing.JPanel;
+import java.awt.Component;
+
+/**
+ * Created by hufan on 2017/1/13.
+ */
+public class VanChartGanttLabelContentPane extends VanChartLabelContentPane {
+
+ private VanChartFormatPaneWithCheckBox processesFormatPane;
+ private VanChartDateFormatPaneWithCheckBox startTimeFormatPane;
+ private VanChartDateFormatPaneWithCheckBox endTimeFormatPane;
+ private VanChartFormatComBoxWithCheckBox durationFormatPane;
+ private VanChartFormatPaneWithCheckBox progressFormatPane;
+
+ public VanChartGanttLabelContentPane(VanChartStylePane parent, JPanel showOnPane) {
+ super(parent, showOnPane);
+ }
+
+ protected void initFormatPane(VanChartStylePane parent, JPanel showOnPane) {
+ processesFormatPane = new VanChartFormatPaneWithCheckBox(parent, showOnPane) {
+ @Override
+ protected String getCheckBoxText() {
+ return Toolkit.i18nText("Fine-Design_Chart_Project_Name");
+ }
+ };
+ setSeriesNameFormatPane(new SeriesNameFormatPaneWithCheckBox(parent, showOnPane));
+ startTimeFormatPane = new VanChartDateFormatPaneWithCheckBox(parent, showOnPane) {
+ @Override
+ protected String getCheckBoxText() {
+ return Toolkit.i18nText("Fine-Design_Chart_Start_Time");
+ }
+ };
+ endTimeFormatPane = new VanChartDateFormatPaneWithCheckBox(parent, showOnPane) {
+ @Override
+ protected String getCheckBoxText() {
+ return Toolkit.i18nText("Fine-Design_Chart_End_Time");
+ }
+ };
+ durationFormatPane = new VanChartFormatComBoxWithCheckBox();
+ progressFormatPane = new VanChartFormatPaneWithCheckBox(parent, showOnPane) {
+ @Override
+ protected String getCheckBoxText() {
+ return Toolkit.i18nText("Fine-Design_Chart_Process");
+ }
+ };
+ }
+
+ protected boolean supportRichEditor() {
+ return false;
+ }
+
+ protected Component[][] getPaneComponents() {
+ return new Component[][]{
+ new Component[]{processesFormatPane, null},
+ new Component[]{getSeriesNameFormatPane(), null},
+ new Component[]{startTimeFormatPane, null},
+ new Component[]{endTimeFormatPane, null},
+ new Component[]{durationFormatPane, null},
+ new Component[]{progressFormatPane, null}
+ };
+ }
+
+ protected double[] getRowSize(double p) {
+ return new double[]{p, p, p, p, p, p};
+ }
+
+ @Override
+ protected void populateFormatPane(AttrTooltipContent attrTooltipContent) {
+ if (attrTooltipContent instanceof AttrGanttTooltipContent) {
+ AttrGanttTooltipContent ganttTooltipContent = (AttrGanttTooltipContent) attrTooltipContent;
+ processesFormatPane.populate(ganttTooltipContent.getProcessesFormat());
+ getSeriesNameFormatPane().populate(ganttTooltipContent.getSeriesFormat());
+ startTimeFormatPane.populate(ganttTooltipContent.getStartTimeFormat());
+ endTimeFormatPane.populate(ganttTooltipContent.getEndTimeFormat());
+ durationFormatPane.populate(ganttTooltipContent.getDurationFormat());
+ progressFormatPane.populate(ganttTooltipContent.getProgressFormat());
+ }
+ }
+
+ protected void updateFormatPane(AttrTooltipContent attrTooltipContent) {
+ if (attrTooltipContent instanceof AttrGanttTooltipContent) {
+ AttrGanttTooltipContent ganttTooltipContent = (AttrGanttTooltipContent) attrTooltipContent;
+ processesFormatPane.update(ganttTooltipContent.getProcessesFormat());
+ getSeriesNameFormatPane().update(ganttTooltipContent.getSeriesFormat());
+ startTimeFormatPane.update(ganttTooltipContent.getStartTimeFormat());
+ endTimeFormatPane.update(ganttTooltipContent.getEndTimeFormat());
+ durationFormatPane.update(ganttTooltipContent.getDurationFormat());
+ progressFormatPane.update(ganttTooltipContent.getProgressFormat());
+ }
+ }
+
+ public boolean isDirty() {
+ return processesFormatPane.isDirty()
+ || getSeriesNameFormatPane().isDirty()
+ || startTimeFormatPane.isDirty()
+ || endTimeFormatPane.isDirty()
+ || durationFormatPane.isDirty()
+ || progressFormatPane.isDirty();
+ }
+
+ public void setDirty(boolean isDirty) {
+ processesFormatPane.setDirty(isDirty);
+ getSeriesNameFormatPane().setDirty(isDirty);
+ startTimeFormatPane.setDirty(isDirty);
+ endTimeFormatPane.setDirty(isDirty);
+ durationFormatPane.setDirty(isDirty);
+ progressFormatPane.setDirty(isDirty);
+ }
+
+ protected AttrTooltipContent createAttrTooltip() {
+ return new AttrGanttTooltipContent();
+ }
+}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/label/VanChartGanttPlotLabelDetailPane.java b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/label/VanChartGanttPlotLabelDetailPane.java
new file mode 100644
index 0000000000..e00e0afd4e
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/label/VanChartGanttPlotLabelDetailPane.java
@@ -0,0 +1,16 @@
+package com.fr.van.chart.gantt.designer.style.label;
+
+import com.fr.chart.chartattr.Plot;
+import com.fr.van.chart.designer.style.VanChartStylePane;
+import com.fr.van.chart.designer.style.label.VanChartPlotLabelDetailPane;
+
+public class VanChartGanttPlotLabelDetailPane extends VanChartPlotLabelDetailPane {
+
+ public VanChartGanttPlotLabelDetailPane(Plot plot, VanChartStylePane parent) {
+ super(plot, parent);
+ }
+
+ protected void initToolTipContentPane(Plot plot) {
+ setDataLabelContentPane(new VanChartGanttLabelContentPane(getParentPane(), VanChartGanttPlotLabelDetailPane.this));
+ }
+}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/label/VanChartGanttPlotLabelPane.java b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/label/VanChartGanttPlotLabelPane.java
new file mode 100644
index 0000000000..546f772dd8
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/label/VanChartGanttPlotLabelPane.java
@@ -0,0 +1,20 @@
+package com.fr.van.chart.gantt.designer.style.label;
+
+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 VanChartGanttPlotLabelPane extends VanChartPlotLabelPane {
+
+ public VanChartGanttPlotLabelPane(Plot plot, VanChartStylePane parent) {
+ super(plot, parent);
+ }
+
+ protected void createLabelPane() {
+ VanChartGanttPlotLabelDetailPane labelDetailPane = new VanChartGanttPlotLabelDetailPane(getPlot(), getParentPane());
+ setLabelDetailPane(labelDetailPane);
+ getLabelPane().add(labelDetailPane, BorderLayout.CENTER);
+ }
+}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/series/VanChartGanttSeriesPane.java b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/series/VanChartGanttSeriesPane.java
index c17d97692c..9236773e71 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/series/VanChartGanttSeriesPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/series/VanChartGanttSeriesPane.java
@@ -44,7 +44,8 @@ public class VanChartGanttSeriesPane extends VanChartAbstractPlotSeriesPane {
Component[][] components = new Component[][]{
new Component[]{createGanntStylePane()},
new Component[]{createLinkLinePane()},
- new Component[]{createMarkerPane()}
+ new Component[]{createMarkerPane()},
+ new Component[]{createLargeDataModelPane()}
};
contentPane = TableLayoutHelper.createTableLayoutPane(components, row, col);
diff --git a/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/tooltip/VanChartDateFormatPaneWithCheckBox.java b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/tooltip/VanChartDateFormatPaneWithCheckBox.java
new file mode 100644
index 0000000000..7ed6e93bc0
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/tooltip/VanChartDateFormatPaneWithCheckBox.java
@@ -0,0 +1,18 @@
+package com.fr.van.chart.gantt.designer.style.tooltip;
+
+import com.fr.design.gui.style.FormatPane;
+import com.fr.van.chart.designer.PlotFactory;
+import com.fr.van.chart.designer.component.format.VanChartFormatPaneWithCheckBox;
+import com.fr.van.chart.designer.style.VanChartStylePane;
+
+import javax.swing.JPanel;
+
+public abstract class VanChartDateFormatPaneWithCheckBox extends VanChartFormatPaneWithCheckBox {
+ public VanChartDateFormatPaneWithCheckBox(VanChartStylePane parent, JPanel showOnPane) {
+ super(parent, showOnPane);
+ }
+
+ protected FormatPane createFormatPane(){
+ return PlotFactory.createAutoFormatPane();
+ }
+}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/tooltip/VanChartDateFormatPaneWithoutCheckBox.java b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/tooltip/VanChartDateFormatPaneWithoutCheckBox.java
new file mode 100644
index 0000000000..ee395284a7
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/tooltip/VanChartDateFormatPaneWithoutCheckBox.java
@@ -0,0 +1,18 @@
+package com.fr.van.chart.gantt.designer.style.tooltip;
+
+import com.fr.design.gui.style.FormatPane;
+import com.fr.van.chart.designer.PlotFactory;
+import com.fr.van.chart.designer.component.format.VanChartFormatPaneWithoutCheckBox;
+import com.fr.van.chart.designer.style.VanChartStylePane;
+
+import javax.swing.JPanel;
+
+public abstract class VanChartDateFormatPaneWithoutCheckBox extends VanChartFormatPaneWithoutCheckBox {
+ public VanChartDateFormatPaneWithoutCheckBox(VanChartStylePane parent, JPanel showOnPane) {
+ super(parent, showOnPane);
+ }
+
+ protected FormatPane createFormatPane() {
+ return PlotFactory.createAutoFormatPane();
+ }
+}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/tooltip/VanChartFormatComBoxWithCheckBox.java b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/tooltip/VanChartFormatComBoxWithCheckBox.java
new file mode 100644
index 0000000000..95da8ea986
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/tooltip/VanChartFormatComBoxWithCheckBox.java
@@ -0,0 +1,100 @@
+package com.fr.van.chart.gantt.designer.style.tooltip;
+
+import com.fr.design.gui.icheckbox.UICheckBox;
+import com.fr.design.gui.icombobox.UIComboBox;
+import com.fr.design.gui.ilable.UILabel;
+import com.fr.design.i18n.Toolkit;
+import com.fr.plugin.chart.base.format.AttrTooltipDurationFormat;
+import com.fr.plugin.chart.base.format.AttrTooltipFormat;
+import com.fr.plugin.chart.base.format.IntervalTimeFormat;
+
+import javax.swing.JPanel;
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.util.Map;
+
+public class VanChartFormatComBoxWithCheckBox extends JPanel {
+ private static final String LABEL_TEXT = Toolkit.i18nText("Fine-Design_Chart_Duration_Time");
+
+ private UICheckBox isSelectedBox;
+ private UIComboBox formatComBox;
+
+ private boolean isDirty;
+
+ public VanChartFormatComBoxWithCheckBox() {
+ this.setLayout(new BorderLayout());
+ isSelectedBox = new UICheckBox(LABEL_TEXT);
+ formatComBox = new UIComboBox(IntervalTimeFormat.getFormats());
+ isSelectedBox.addMouseListener(new MouseListener() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ isDirty = true;
+ }
+
+ @Override
+ public void mousePressed(MouseEvent e) {
+
+ }
+
+ @Override
+ public void mouseReleased(MouseEvent e) {
+
+ }
+
+ @Override
+ public void mouseEntered(MouseEvent e) {
+
+ }
+
+ @Override
+ public void mouseExited(MouseEvent e) {
+
+ }
+ });
+ formatComBox.setPreferredSize(new Dimension(40, 20));
+
+ if (showSelectBox()) {
+ this.add(isSelectedBox, BorderLayout.CENTER);
+ } else {
+ this.add(new UILabel(LABEL_TEXT), BorderLayout.CENTER);
+ }
+
+ this.add(formatComBox, BorderLayout.EAST);
+ }
+
+ protected boolean showSelectBox() {
+ return true;
+ }
+
+ public boolean isDirty() {
+ return isDirty;
+ }
+
+ public void setDirty(boolean isDirty) {
+ this.isDirty = isDirty;
+ }
+
+ public void populate(AttrTooltipFormat tooltipFormat) {
+ if (tooltipFormat instanceof AttrTooltipDurationFormat) {
+ this.isSelectedBox.setSelected(tooltipFormat.isEnable());
+ formatComBox.setSelectedItem(((AttrTooltipDurationFormat) tooltipFormat).getIntervalTimeFormat());
+ }
+ }
+
+ public void update(AttrTooltipFormat tooltipFormat) {
+ if (tooltipFormat instanceof AttrTooltipDurationFormat) {
+ tooltipFormat.setEnable(isSelectedBox.isSelected());
+ ((AttrTooltipDurationFormat) tooltipFormat).setIntervalTimeFormat((IntervalTimeFormat) formatComBox.getSelectedItem());
+ }
+ }
+
+ public void updateFormatParams(Map paramMap, String value) {
+ String key = LABEL_TEXT;
+
+ if (paramMap != null && !paramMap.containsKey(key)) {
+ paramMap.put(key, value);
+ }
+ }
+}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/tooltip/VanChartFormatComBoxWithoutCheckBox.java b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/tooltip/VanChartFormatComBoxWithoutCheckBox.java
new file mode 100644
index 0000000000..20a74e3762
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/tooltip/VanChartFormatComBoxWithoutCheckBox.java
@@ -0,0 +1,8 @@
+package com.fr.van.chart.gantt.designer.style.tooltip;
+
+public class VanChartFormatComBoxWithoutCheckBox extends VanChartFormatComBoxWithCheckBox {
+
+ protected boolean showSelectBox() {
+ return false;
+ }
+}
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 6bff1d5708..d724deff58 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/tooltip/VanChartGanttTooltipContentPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/tooltip/VanChartGanttTooltipContentPane.java
@@ -1,26 +1,25 @@
package com.fr.van.chart.gantt.designer.style.tooltip;
-import com.fr.design.gui.icheckbox.UICheckBox;
-import com.fr.design.gui.icombobox.UIComboBox;
-import com.fr.design.gui.style.FormatPane;
-
+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.AttrTooltipFormat;
-import com.fr.plugin.chart.base.format.IntervalTimeFormat;
+import com.fr.plugin.chart.base.format.AttrTooltipEndTimeFormat;
+import com.fr.plugin.chart.base.format.AttrTooltipProcessesFormat;
+import com.fr.plugin.chart.base.format.AttrTooltipProgressFormat;
+import com.fr.plugin.chart.base.format.AttrTooltipSeriesFormat;
+import com.fr.plugin.chart.base.format.AttrTooltipStartTimeFormat;
import com.fr.plugin.chart.gantt.attr.AttrGanttTooltipContent;
-import com.fr.van.chart.designer.PlotFactory;
import com.fr.van.chart.designer.component.VanChartTooltipContentPane;
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.VanChartFormatPaneWithCheckBox;
+import com.fr.van.chart.designer.component.format.VanChartFormatPaneWithoutCheckBox;
import com.fr.van.chart.designer.style.VanChartStylePane;
import javax.swing.JPanel;
-import java.awt.BorderLayout;
import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseListener;
+import java.util.Map;
/**
* Created by hufan on 2017/1/13.
@@ -32,6 +31,12 @@ public class VanChartGanttTooltipContentPane extends VanChartTooltipContentPane
private VanChartFormatComBoxWithCheckBox durationFormatPane;
private VanChartFormatPaneWithCheckBox progressFormatPane;
+ private VanChartFormatPaneWithoutCheckBox richTextProcessesFormatPane;
+ private VanChartDateFormatPaneWithoutCheckBox richTextStartTimeFormatPane;
+ private VanChartDateFormatPaneWithoutCheckBox richTextEndTimeFormatPane;
+ private VanChartFormatComBoxWithoutCheckBox richTextDurationFormatPane;
+ private VanChartFormatPaneWithoutCheckBox richTextProgressFormatPane;
+
public VanChartGanttTooltipContentPane(VanChartStylePane parent, JPanel showOnPane) {
super(parent, showOnPane);
}
@@ -40,27 +45,52 @@ public class VanChartGanttTooltipContentPane extends VanChartTooltipContentPane
processesFormatPane = new VanChartFormatPaneWithCheckBox(parent, showOnPane){
@Override
protected String getCheckBoxText() {
- return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Project_Name");
+ return Toolkit.i18nText("Fine-Design_Chart_Project_Name");
}
};
- seriesNameFormatPane = new SeriesNameFormatPaneWithCheckBox(parent, showOnPane);
+ setSeriesNameFormatPane(new SeriesNameFormatPaneWithCheckBox(parent, showOnPane));
startTimeFormatPane = new VanChartDateFormatPaneWithCheckBox(parent, showOnPane){
@Override
protected String getCheckBoxText() {
- return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Start_Time");
+ return Toolkit.i18nText("Fine-Design_Chart_Start_Time");
}
};
endTimeFormatPane = new VanChartDateFormatPaneWithCheckBox(parent, showOnPane){
@Override
protected String getCheckBoxText() {
- return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_End_Time");
+ return Toolkit.i18nText("Fine-Design_Chart_End_Time");
}
};
durationFormatPane = new VanChartFormatComBoxWithCheckBox();
progressFormatPane = new VanChartFormatPaneWithCheckBox(parent, showOnPane){
@Override
protected String getCheckBoxText() {
- return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Process");
+ return Toolkit.i18nText("Fine-Design_Chart_Process");
+ }
+ };
+ }
+
+ protected void initRichTextFormatPane(VanChartStylePane parent, JPanel showOnPane) {
+ richTextProcessesFormatPane = new VanChartFormatPaneWithoutCheckBox(parent, showOnPane){
+ protected String getCheckBoxText() {
+ return Toolkit.i18nText("Fine-Design_Chart_Project_Name");
+ }
+ };
+ setRichTextSeriesNameFormatPane(new SeriesNameFormatPaneWithoutCheckBox(parent, showOnPane));
+ richTextStartTimeFormatPane = new VanChartDateFormatPaneWithoutCheckBox(parent, showOnPane){
+ protected String getCheckBoxText() {
+ return Toolkit.i18nText("Fine-Design_Chart_Start_Time");
+ }
+ };
+ richTextEndTimeFormatPane = new VanChartDateFormatPaneWithoutCheckBox(parent, showOnPane){
+ protected String getCheckBoxText() {
+ return Toolkit.i18nText("Fine-Design_Chart_End_Time");
+ }
+ };
+ richTextDurationFormatPane = new VanChartFormatComBoxWithoutCheckBox();
+ richTextProgressFormatPane = new VanChartFormatPaneWithoutCheckBox(parent, showOnPane){
+ protected String getCheckBoxText() {
+ return Toolkit.i18nText("Fine-Design_Chart_Process");
}
};
}
@@ -68,7 +98,7 @@ public class VanChartGanttTooltipContentPane extends VanChartTooltipContentPane
protected Component[][] getPaneComponents(){
return new Component[][]{
new Component[]{processesFormatPane,null},
- new Component[]{seriesNameFormatPane,null},
+ new Component[]{getSeriesNameFormatPane(),null},
new Component[]{startTimeFormatPane,null},
new Component[]{endTimeFormatPane,null},
new Component[]{durationFormatPane, null},
@@ -76,16 +106,28 @@ public class VanChartGanttTooltipContentPane extends VanChartTooltipContentPane
};
}
+ protected Component[][] getRichTextComponents() {
+ return new Component[][]{
+ new Component[]{richTextProcessesFormatPane,null},
+ new Component[]{getRichTextSeriesNameFormatPane(),null},
+ new Component[]{richTextStartTimeFormatPane,null},
+ new Component[]{richTextEndTimeFormatPane,null},
+ new Component[]{richTextDurationFormatPane, null},
+ new Component[]{richTextProgressFormatPane, null}
+ };
+ }
+
protected double[] getRowSize(double p){
return new double[]{p,p,p,p,p,p};
}
@Override
protected void populateFormatPane(AttrTooltipContent attrTooltipContent) {
+ // fixme 当前的样式面板设计都是基于一个大而全的父类,在子类中组合需要的属性,导致父类的属性多是protected,且子类不能明确获取自己Model的type
if (attrTooltipContent instanceof AttrGanttTooltipContent){
AttrGanttTooltipContent ganttTooltipContent = (AttrGanttTooltipContent) attrTooltipContent;
processesFormatPane.populate(ganttTooltipContent.getProcessesFormat());
- seriesNameFormatPane.populate(ganttTooltipContent.getSeriesFormat());
+ getSeriesNameFormatPane().populate(ganttTooltipContent.getSeriesFormat());
startTimeFormatPane.populate(ganttTooltipContent.getStartTimeFormat());
endTimeFormatPane.populate(ganttTooltipContent.getEndTimeFormat());
durationFormatPane.populate(ganttTooltipContent.getDurationFormat());
@@ -93,11 +135,48 @@ 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();
+
+ AttrTooltipProcessesFormat processesFormat = ganttTooltipContent.getRichTextProcessesFormat();
+ richTextProcessesFormatPane.populate(processesFormat);
+ richTextProcessesFormatPane.updateFormatParams(params, processesFormat.getJs());
+
+ AttrTooltipSeriesFormat seriesFormat = ganttTooltipContent.getRichTextSeriesFormat();
+ getRichTextSeriesNameFormatPane().populate(seriesFormat);
+ getRichTextSeriesNameFormatPane().updateFormatParams(params, seriesFormat.getJs());
+
+ AttrTooltipStartTimeFormat startTimeFormat = ganttTooltipContent.getRichTextStartTimeFormat();
+ richTextStartTimeFormatPane.populate(startTimeFormat);
+ richTextStartTimeFormatPane.updateFormatParams(params, startTimeFormat.getJs());
+
+ AttrTooltipEndTimeFormat endTimeFormat = ganttTooltipContent.getRichTextEndTimeFormat();
+ richTextEndTimeFormatPane.populate(endTimeFormat);
+ richTextEndTimeFormatPane.updateFormatParams(params, endTimeFormat.getJs());
+
+ AttrTooltipDurationFormat durationFormat = ganttTooltipContent.getRichTextDurationFormat();
+ richTextDurationFormatPane.populate(durationFormat);
+ richTextDurationFormatPane.updateFormatParams(params, durationFormat.getJs());
+
+ AttrTooltipProgressFormat progressFormat = ganttTooltipContent.getRichTextProgressFormat();
+ richTextProgressFormatPane.populate(progressFormat);
+ richTextProgressFormatPane.updateFormatParams(params, progressFormat.getJs());
+
+ populateRichText(attrTooltipContent.getRichTextAttr());
+
+ checkRichEditorState(attrTooltipContent);
+ }
+ }
+
protected void updateFormatPane(AttrTooltipContent attrTooltipContent) {
if (attrTooltipContent instanceof AttrGanttTooltipContent){
AttrGanttTooltipContent ganttTooltipContent = (AttrGanttTooltipContent) attrTooltipContent;
processesFormatPane.update(ganttTooltipContent.getProcessesFormat());
- seriesNameFormatPane.update(ganttTooltipContent.getSeriesFormat());
+ getSeriesNameFormatPane().update(ganttTooltipContent.getSeriesFormat());
startTimeFormatPane.update(ganttTooltipContent.getStartTimeFormat());
endTimeFormatPane.update(ganttTooltipContent.getEndTimeFormat());
durationFormatPane.update(ganttTooltipContent.getDurationFormat());
@@ -105,9 +184,22 @@ public class VanChartGanttTooltipContentPane extends VanChartTooltipContentPane
}
}
+ protected void updateRichEditor(AttrTooltipContent attrTooltipContent) {
+ if(attrTooltipContent instanceof AttrGanttTooltipContent) {
+ AttrGanttTooltipContent ganttTooltipContent = (AttrGanttTooltipContent) attrTooltipContent;
+
+ richTextProcessesFormatPane.update(ganttTooltipContent.getRichTextProcessesFormat());
+ getRichTextSeriesNameFormatPane().update(ganttTooltipContent.getRichTextSeriesFormat());
+ richTextStartTimeFormatPane.update(ganttTooltipContent.getRichTextStartTimeFormat());
+ richTextEndTimeFormatPane.update(ganttTooltipContent.getRichTextEndTimeFormat());
+ richTextDurationFormatPane.update(ganttTooltipContent.getRichTextDurationFormat());
+ richTextProgressFormatPane.update(ganttTooltipContent.getRichTextProgressFormat());
+ }
+ }
+
public boolean isDirty() {
return processesFormatPane.isDirty()
- || seriesNameFormatPane.isDirty()
+ || getSeriesNameFormatPane().isDirty()
|| startTimeFormatPane.isDirty()
|| endTimeFormatPane.isDirty()
|| durationFormatPane.isDirty()
@@ -116,7 +208,7 @@ public class VanChartGanttTooltipContentPane extends VanChartTooltipContentPane
public void setDirty(boolean isDirty) {
processesFormatPane.setDirty(isDirty);
- seriesNameFormatPane.setDirty(isDirty);
+ getSeriesNameFormatPane().setDirty(isDirty);
startTimeFormatPane.setDirty(isDirty);
endTimeFormatPane.setDirty(isDirty);
durationFormatPane.setDirty(isDirty);
@@ -126,79 +218,4 @@ public class VanChartGanttTooltipContentPane extends VanChartTooltipContentPane
protected AttrTooltipContent createAttrTooltip() {
return new AttrGanttTooltipContent();
}
-
- private abstract class VanChartDateFormatPaneWithCheckBox extends VanChartFormatPaneWithCheckBox {
- public VanChartDateFormatPaneWithCheckBox(VanChartStylePane parent, JPanel showOnPane) {
- super(parent, showOnPane);
- }
-
- @Override
- protected FormatPane createFormatPane(){
- return PlotFactory.createAutoFormatPane();
- }
- }
-
- private class VanChartFormatComBoxWithCheckBox extends JPanel{
- private UICheckBox isSelectedBox;
- private UIComboBox formatComBox;
-
- private boolean isDirty;
-
- private VanChartFormatComBoxWithCheckBox() {
- this.setLayout(new BorderLayout());
- isSelectedBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Duration_Time"));
- formatComBox = new UIComboBox(IntervalTimeFormat.getFormats());
- isSelectedBox.addMouseListener(new MouseListener() {
- @Override
- public void mouseClicked(MouseEvent e) {
- isDirty = true;
- }
-
- @Override
- public void mousePressed(MouseEvent e) {
-
- }
-
- @Override
- public void mouseReleased(MouseEvent e) {
-
- }
-
- @Override
- public void mouseEntered(MouseEvent e) {
-
- }
-
- @Override
- public void mouseExited(MouseEvent e) {
-
- }
- });
- formatComBox.setPreferredSize(new Dimension(40,20));
- this.add(isSelectedBox, BorderLayout.CENTER);
- this.add(formatComBox, BorderLayout.EAST);
- }
-
- private boolean isDirty() {
- return isDirty;
- }
-
- private void setDirty(boolean isDirty) {
- this.isDirty = isDirty;
- }
-
- private void populate(AttrTooltipFormat tooltipFormat) {
- if(tooltipFormat instanceof AttrTooltipDurationFormat) {
- this.isSelectedBox.setSelected(tooltipFormat.isEnable());
- formatComBox.setSelectedItem(((AttrTooltipDurationFormat) tooltipFormat).getIntervalTimeFormat());
- }
- }
-
- private void update(AttrTooltipFormat tooltipFormat) {
- if(tooltipFormat instanceof AttrTooltipDurationFormat) {
- tooltipFormat.setEnable(isSelectedBox.isSelected());
- ((AttrTooltipDurationFormat) tooltipFormat).setIntervalTimeFormat((IntervalTimeFormat) formatComBox.getSelectedItem());
- }
- }
- }
}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/gauge/VanChartGaugePlotPane.java b/designer-chart/src/main/java/com/fr/van/chart/gauge/VanChartGaugePlotPane.java
index 1ede3efb39..3d979119c3 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/gauge/VanChartGaugePlotPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/gauge/VanChartGaugePlotPane.java
@@ -8,10 +8,13 @@ import com.fr.chartx.data.field.AbstractColumnFieldCollection;
import com.fr.chartx.data.field.diff.GaugeColumnFieldCollection;
import com.fr.chartx.data.field.diff.MultiCategoryColumnFieldCollection;
import com.fr.log.FineLoggerFactory;
+import com.fr.plugin.chart.attr.GaugeDetailStyle;
import com.fr.plugin.chart.attr.plot.VanChartPlot;
+import com.fr.plugin.chart.base.AttrLabel;
import com.fr.plugin.chart.gauge.GaugeIndependentVanChart;
import com.fr.plugin.chart.gauge.VanChartGaugePlot;
import com.fr.plugin.chart.type.GaugeStyle;
+import com.fr.plugin.chart.vanchart.VanChart;
import com.fr.van.chart.designer.type.AbstractVanChartTypePane;
/**
@@ -31,12 +34,12 @@ public class VanChartGaugePlotPane extends AbstractVanChartTypePane {
};
}
- protected Plot getSelectedClonedPlot(){
+ protected Plot getSelectedClonedPlot() {
VanChartGaugePlot newPlot = null;
Chart[] GaugeChart = GaugeIndependentVanChart.GaugeVanChartTypes;
- for(int i = 0, len = GaugeChart.length; i < len; i++){
- if(typeDemo.get(i).isPressing){
- newPlot = (VanChartGaugePlot)GaugeChart[i].getPlot();
+ for (int i = 0, len = GaugeChart.length; i < len; i++) {
+ if (typeDemo.get(i).isPressing) {
+ newPlot = (VanChartGaugePlot) GaugeChart[i].getPlot();
}
}
@@ -44,8 +47,8 @@ public class VanChartGaugePlotPane extends AbstractVanChartTypePane {
try {
if (newPlot == null) {
throw new IllegalArgumentException("newPlot con not be null");
- }else {
- cloned = (Plot)newPlot.clone();
+ } else {
+ cloned = (Plot) newPlot.clone();
}
} catch (CloneNotSupportedException e) {
FineLoggerFactory.getLogger().error("Error In GaugeChart");
@@ -56,16 +59,70 @@ public class VanChartGaugePlotPane extends AbstractVanChartTypePane {
/**
* 保存界面属性
*/
- public void updateBean(Chart chart) {
- boolean oldISMulti = chart.getPlot() instanceof VanChartGaugePlot && ((VanChartGaugePlot)chart.getPlot()).isMultiPointer();
+ public void updateBean(VanChart chart) {
+ boolean oldISMulti = chart.getPlot() instanceof VanChartGaugePlot && ((VanChartGaugePlot) chart.getPlot()).isMultiPointer();
super.updateBean(chart);
- boolean newISMulti = chart.getPlot() instanceof VanChartGaugePlot && ((VanChartGaugePlot)chart.getPlot()).isMultiPointer();
- if(oldISMulti != newISMulti){
+ boolean newISMulti = chart.getPlot() instanceof VanChartGaugePlot && ((VanChartGaugePlot) chart.getPlot()).isMultiPointer();
+ if (oldISMulti != newISMulti) {
chart.setFilterDefinition(null);
}
}
- protected void cloneOldConditionCollection(Plot oldPlot, Plot newPlot) throws CloneNotSupportedException{
+ @Override
+ protected VanChartPlot cloneOldPlot2New(VanChartPlot oldPlot, VanChartPlot newPlot) {
+ try {
+ VanChartGaugePlot vanChartNewPlot = (VanChartGaugePlot) newPlot;
+ VanChartGaugePlot vanChartOldPlot = (VanChartGaugePlot) oldPlot;
+ if (vanChartNewPlot.isMultiPointer() != vanChartOldPlot.isMultiPointer()) {
+ return super.cloneOldPlot2New(oldPlot, newPlot);
+ }
+
+ VanChartGaugePlot clonePlot = (VanChartGaugePlot) vanChartOldPlot.clone();
+ clonePlot.setGaugeStyle(vanChartNewPlot.getGaugeStyle());
+ //都是多指针仪表盘,所有属性都一样
+ if (clonePlot.isMultiPointer()) {
+ return clonePlot;
+ }
+ //超链和系列中的样式、布局不保留
+ clonePlot.setHotHyperLink(vanChartNewPlot.getHotHyperLink());
+ clonePlot.setRadius(vanChartNewPlot.getRadius());
+ reductionDetail(clonePlot.getGaugeDetailStyle(), vanChartNewPlot.getGaugeDetailStyle());
+
+ //如果切换试管型仪表盘,部分属性不保留
+ if (clonePlot.getGaugeStyle() == GaugeStyle.THERMOMETER ||
+ vanChartOldPlot.getGaugeStyle() == GaugeStyle.THERMOMETER) {
+ clonePlot.setGaugeAxis(vanChartNewPlot.getGaugeAxis());
+ clonePlot.getGaugeDetailStyle().setHorizontalLayout(vanChartNewPlot.getGaugeDetailStyle().isHorizontalLayout());
+ clonePlot.getGaugeDetailStyle().setHotAreaColor(vanChartNewPlot.getGaugeDetailStyle().getHotAreaColor());
+
+ AttrLabel cloneLabel = clonePlot.getAttrLabelFromConditionCollection();
+ AttrLabel newLabel = vanChartNewPlot.getAttrLabelFromConditionCollection();
+ cloneLabel.getAttrLabelDetail().setPosition(newLabel.getAttrLabelDetail().getPosition());
+ cloneLabel.getAttrLabelDetail().setAlign(newLabel.getAttrLabelDetail().getAlign());
+ cloneLabel.getAttrLabelDetail().setTextAttr(newLabel.getAttrLabelDetail().getTextAttr());
+ cloneLabel.getGaugeValueLabelDetail().setPosition(newLabel.getGaugeValueLabelDetail().getPosition());
+ cloneLabel.getGaugeValueLabelDetail().setAlign(newLabel.getGaugeValueLabelDetail().getAlign());
+ cloneLabel.getGaugeValueLabelDetail().setTextAttr(newLabel.getGaugeValueLabelDetail().getTextAttr());
+ }
+ return clonePlot;
+
+ } catch (CloneNotSupportedException e) {
+ FineLoggerFactory.getLogger().error("Error in change plot");
+ return newPlot;
+ }
+ }
+
+ private void reductionDetail(GaugeDetailStyle cloneDetail, GaugeDetailStyle newDetail) {
+ cloneDetail.setNeedleColor(newDetail.getNeedleColor());
+ cloneDetail.setPaneBackgroundColor(newDetail.getPaneBackgroundColor());
+ cloneDetail.setSlotBackgroundColor(newDetail.getSlotBackgroundColor());
+ cloneDetail.setAntiClockWise(newDetail.isAntiClockWise());
+ cloneDetail.setInnerPaneBackgroundColor(newDetail.getInnerPaneBackgroundColor());
+ cloneDetail.setThermometerWidth(newDetail.getThermometerWidth());
+ cloneDetail.setChutePercent(newDetail.getChutePercent());
+ }
+
+ protected void cloneOldConditionCollection(Plot oldPlot, Plot newPlot) throws CloneNotSupportedException {
}
public Chart getDefaultChart() {
@@ -74,8 +131,8 @@ public class VanChartGaugePlotPane extends AbstractVanChartTypePane {
@Override
protected void cloneHotHyperLink(Plot oldPlot, Plot newPlot) throws CloneNotSupportedException {
- if(oldPlot instanceof VanChartGaugePlot && newPlot instanceof VanChartGaugePlot){
- if(((VanChartGaugePlot) oldPlot).isMultiPointer() == ((VanChartGaugePlot) newPlot).isMultiPointer()){
+ if (oldPlot instanceof VanChartGaugePlot && newPlot instanceof VanChartGaugePlot) {
+ if (((VanChartGaugePlot) oldPlot).isMultiPointer() == ((VanChartGaugePlot) newPlot).isMultiPointer()) {
super.cloneHotHyperLink(oldPlot, newPlot);
}
}
@@ -83,7 +140,7 @@ public class VanChartGaugePlotPane extends AbstractVanChartTypePane {
@Override
protected boolean acceptDefinition(ChartDataDefinitionProvider definition, VanChartPlot vanChartPlot) {
- if(definition instanceof AbstractDataDefinition) {
+ if (definition instanceof AbstractDataDefinition) {
AbstractColumnFieldCollection columnFieldCollection = ((AbstractDataDefinition) definition).getColumnFieldCollection();
GaugeStyle gaugeStyle = ((VanChartGaugePlot) vanChartPlot).getGaugeStyle();
switch (gaugeStyle) {
diff --git a/designer-chart/src/main/java/com/fr/van/chart/heatmap/designer/type/VanChartHeatMapTypePane.java b/designer-chart/src/main/java/com/fr/van/chart/heatmap/designer/type/VanChartHeatMapTypePane.java
index 43f03a13d3..8f4a72de2a 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/heatmap/designer/type/VanChartHeatMapTypePane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/heatmap/designer/type/VanChartHeatMapTypePane.java
@@ -10,6 +10,7 @@ import com.fr.plugin.chart.base.VanChartTools;
import com.fr.plugin.chart.heatmap.HeatMapIndependentVanChart;
import com.fr.plugin.chart.heatmap.VanChartHeatMapPlot;
import com.fr.plugin.chart.map.server.CompatibleGEOJSONHelper;
+import com.fr.plugin.chart.vanchart.VanChart;
import com.fr.van.chart.map.designer.type.VanChartMapPlotPane;
import com.fr.van.chart.map.designer.type.VanChartMapSourceChoosePane;
@@ -30,7 +31,7 @@ public class VanChartHeatMapTypePane extends VanChartMapPlotPane {
}
//适用一种图表只有一种类型的
- public void populateBean(Chart chart) {
+ public void populateBean(VanChart chart) {
typeDemo.get(0).isPressing = true;
VanChartHeatMapPlot plot = (VanChartHeatMapPlot)chart.getPlot();
populateSourcePane(plot);
diff --git a/designer-chart/src/main/java/com/fr/van/chart/line/VanChartLinePlotPane.java b/designer-chart/src/main/java/com/fr/van/chart/line/VanChartLinePlotPane.java
index 49be523d62..7af9e6bb7f 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/line/VanChartLinePlotPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/line/VanChartLinePlotPane.java
@@ -5,12 +5,12 @@ import com.fr.chart.chartattr.Plot;
import com.fr.log.FineLoggerFactory;
import com.fr.plugin.chart.line.LineIndependentVanChart;
import com.fr.plugin.chart.line.VanChartLinePlot;
-import com.fr.van.chart.designer.type.AbstractVanChartTypePane;
+import com.fr.van.chart.designer.type.AbstractRectanglePlotPane;
/**
* Created by Mitisky on 15/11/5.
*/
-public class VanChartLinePlotPane extends AbstractVanChartTypePane {
+public class VanChartLinePlotPane extends AbstractRectanglePlotPane {
@Override
protected String[] getTypeIconPath() {
diff --git a/designer-chart/src/main/java/com/fr/van/chart/map/designer/VanMapAreaPointAndLineGroupPane.java b/designer-chart/src/main/java/com/fr/van/chart/map/designer/VanMapAreaPointAndLineGroupPane.java
index 569d0850cb..127ad29893 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/map/designer/VanMapAreaPointAndLineGroupPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/map/designer/VanMapAreaPointAndLineGroupPane.java
@@ -1,10 +1,7 @@
package com.fr.van.chart.map.designer;
-
-import javax.swing.BorderFactory;
import javax.swing.JPanel;
-import javax.swing.border.Border;
/**
* Created by Mitisky on 16/5/20.
@@ -19,9 +16,4 @@ public class VanMapAreaPointAndLineGroupPane extends VanChartGroupPane {
public VanMapAreaPointAndLineGroupPane(final JPanel areaPane, final JPanel pointPane, final JPanel linePane){
super(new String[]{AREA_MAP_STRING, POINT_MAP_STRING, LINE_MAP_STRING}, new JPanel[]{areaPane, pointPane, linePane});
}
-
- @Override
- protected Border getButtonGroupBorder () {
- return BorderFactory.createEmptyBorder(0,8,0,18);
- }
-}
+}
\ No newline at end of file
diff --git a/designer-chart/src/main/java/com/fr/van/chart/map/designer/style/label/VanChartMapLabelContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/map/designer/style/label/VanChartMapLabelContentPane.java
index c918088cac..95e2864584 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/map/designer/style/label/VanChartMapLabelContentPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/map/designer/style/label/VanChartMapLabelContentPane.java
@@ -3,11 +3,16 @@ 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;
import com.fr.van.chart.designer.component.format.PercentFormatPaneWithCheckBox;
+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.style.VanChartStylePane;
import javax.swing.JPanel;
@@ -22,17 +27,27 @@ public class VanChartMapLabelContentPane extends VanChartLabelContentPane {
@Override
protected void initFormatPane(VanChartStylePane parent, JPanel showOnPane) {
- categoryNameFormatPane = new MapAreaNameFormatPaneWithCheckBox(parent, showOnPane);
- seriesNameFormatPane = new SeriesNameFormatPaneWithCheckBox(parent, showOnPane);
- valueFormatPane = new ValueFormatPaneWithCheckBox(parent, showOnPane);
- percentFormatPane = new PercentFormatPaneWithCheckBox(parent, showOnPane);
+ setCategoryNameFormatPane(new MapAreaNameFormatPaneWithCheckBox(parent, showOnPane));
+ setSeriesNameFormatPane(new SeriesNameFormatPaneWithCheckBox(parent, showOnPane));
+ setValueFormatPane(new ValueFormatPaneWithCheckBox(parent, showOnPane));
+ setPercentFormatPane(new PercentFormatPaneWithCheckBox(parent, showOnPane));
+ }
+
+ @Override
+ protected void initRichTextFormatPane(VanChartStylePane parent, JPanel showOnPane) {
+ setRichTextCategoryNameFormatPane(new MapAreaNameFormatPaneWithoutCheckBox(parent, showOnPane));
+ setRichTextSeriesNameFormatPane(new SeriesNameFormatPaneWithoutCheckBox(parent, showOnPane));
+ setRichTextValueFormatPane(new ValueFormatPaneWithoutCheckBox(parent, showOnPane));
+ setRichTextPercentFormatPane(new PercentFormatPaneWithoutCheckBox(parent, showOnPane));
}
@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 76bd33f59d..7dca0fb3bc 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/map/designer/style/tooltip/VanChartMapRefreshTooltipContentPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/map/designer/style/tooltip/VanChartMapRefreshTooltipContentPane.java
@@ -3,7 +3,9 @@ package com.fr.van.chart.map.designer.style.tooltip;
import com.fr.plugin.chart.base.AttrTooltipContent;
import com.fr.plugin.chart.base.format.AttrTooltipAreaNameFormat;
import com.fr.van.chart.designer.component.format.ChangedPercentFormatPaneWithCheckBox;
+import com.fr.van.chart.designer.component.format.ChangedPercentFormatPaneWithoutCheckBox;
import com.fr.van.chart.designer.component.format.ChangedValueFormatPaneWithCheckBox;
+import com.fr.van.chart.designer.component.format.ChangedValueFormatPaneWithoutCheckBox;
import com.fr.van.chart.designer.style.VanChartStylePane;
import javax.swing.JPanel;
@@ -17,25 +19,49 @@ public class VanChartMapRefreshTooltipContentPane extends VanChartMapTooltipCont
super(null, showOnPane);
}
+ protected double[] getRowSize(double p){
+ 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);
- changedValueFormatPane = new ChangedValueFormatPaneWithCheckBox(parent, showOnPane);
- changedPercentFormatPane = new ChangedPercentFormatPaneWithCheckBox(parent, showOnPane);
+ setChangedValueFormatPane(new ChangedValueFormatPaneWithCheckBox(parent, showOnPane));
+ setChangedPercentFormatPane(new ChangedPercentFormatPaneWithCheckBox(parent, showOnPane));
}
- protected double[] getRowSize(double p){
- return new double[]{p,p,p,p,p,p};
+
+ @Override
+ protected void initRichTextFormatPane(VanChartStylePane parent, JPanel showOnPane) {
+ super.initRichTextFormatPane(parent, showOnPane);
+
+ setRichTextChangedValueFormatPane(new ChangedValueFormatPaneWithoutCheckBox(parent, showOnPane));
+ setRichTextChangedPercentFormatPane(new ChangedPercentFormatPaneWithoutCheckBox(parent, showOnPane));
}
protected Component[][] getPaneComponents(){
return new Component[][]{
- new Component[]{categoryNameFormatPane,null},
- new Component[]{seriesNameFormatPane,null},
- new Component[]{valueFormatPane,null},
- new Component[]{changedValueFormatPane,null},
- new Component[]{percentFormatPane,null},
- new Component[]{changedPercentFormatPane,null},
+ new Component[]{getCategoryNameFormatPane(), null},
+ new Component[]{getSeriesNameFormatPane(), null},
+ new Component[]{getValueFormatPane(), null},
+ new Component[]{getChangedValueFormatPane(), null},
+ new Component[]{getPercentFormatPane(), null},
+ new Component[]{getChangedPercentFormatPane(), null},
+ };
+ }
+
+ protected Component[][] getRichTextComponents() {
+ return new Component[][]{
+ new Component[]{getRichTextCategoryNameFormatPane(), null},
+ new Component[]{getRichTextSeriesNameFormatPane(), null},
+ new Component[]{getRichTextValueFormatPane(), null},
+ new Component[]{getRichTextChangedValueFormatPane(), null},
+ new Component[]{getRichTextPercentFormatPane(), null},
+ new Component[]{getRichTextChangedPercentFormatPane(), null}
};
}
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 1a2b593a3b..12948b14dd 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/map/designer/style/tooltip/VanChartMapTooltipContentPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/map/designer/style/tooltip/VanChartMapTooltipContentPane.java
@@ -5,9 +5,13 @@ import com.fr.plugin.chart.base.format.AttrTooltipAreaNameFormat;
import com.fr.plugin.chart.base.format.AttrTooltipMapValueFormat;
import com.fr.van.chart.designer.component.VanChartTooltipContentPane;
import com.fr.van.chart.designer.component.format.MapAreaNameFormatPaneWithCheckBox;
+import com.fr.van.chart.designer.component.format.MapAreaNameFormatPaneWithoutCheckBox;
import com.fr.van.chart.designer.component.format.PercentFormatPaneWithCheckBox;
+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.style.VanChartStylePane;
import javax.swing.JPanel;
@@ -22,10 +26,18 @@ public class VanChartMapTooltipContentPane extends VanChartTooltipContentPane {
@Override
protected void initFormatPane(VanChartStylePane parent, JPanel showOnPane) {
- categoryNameFormatPane = new MapAreaNameFormatPaneWithCheckBox(parent, showOnPane);
- seriesNameFormatPane = new SeriesNameFormatPaneWithCheckBox(parent, showOnPane);
- valueFormatPane = new ValueFormatPaneWithCheckBox(parent, showOnPane);
- percentFormatPane = new PercentFormatPaneWithCheckBox(parent, showOnPane);
+ setCategoryNameFormatPane(new MapAreaNameFormatPaneWithCheckBox(parent, showOnPane));
+ setSeriesNameFormatPane(new SeriesNameFormatPaneWithCheckBox(parent, showOnPane));
+ setValueFormatPane(new ValueFormatPaneWithCheckBox(parent, showOnPane));
+ setPercentFormatPane(new PercentFormatPaneWithCheckBox(parent, showOnPane));
+ }
+
+ @Override
+ protected void initRichTextFormatPane(VanChartStylePane parent, JPanel showOnPane) {
+ setRichTextCategoryNameFormatPane(new MapAreaNameFormatPaneWithoutCheckBox(parent, showOnPane));
+ setRichTextSeriesNameFormatPane(new SeriesNameFormatPaneWithoutCheckBox(parent, showOnPane));
+ setRichTextValueFormatPane(new ValueFormatPaneWithoutCheckBox(parent, showOnPane));
+ setRichTextPercentFormatPane(new PercentFormatPaneWithoutCheckBox(parent, showOnPane));
}
@Override
@@ -33,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/designer/type/VanChartMapPlotPane.java b/designer-chart/src/main/java/com/fr/van/chart/map/designer/type/VanChartMapPlotPane.java
index ba4158ed52..a4356be870 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/map/designer/type/VanChartMapPlotPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/map/designer/type/VanChartMapPlotPane.java
@@ -9,13 +9,18 @@ import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.log.FineLoggerFactory;
import com.fr.plugin.chart.attr.plot.VanChartPlot;
import com.fr.plugin.chart.base.VanChartTools;
+import com.fr.plugin.chart.drillmap.VanChartDrillMapPlot;
+import com.fr.plugin.chart.heatmap.VanChartHeatMapPlot;
import com.fr.plugin.chart.map.MapIndependentVanChart;
import com.fr.plugin.chart.map.VanChartMapPlot;
import com.fr.plugin.chart.map.data.VanMapDefinition;
import com.fr.plugin.chart.map.server.CompatibleGEOJSONHelper;
+import com.fr.plugin.chart.vanchart.VanChart;
import com.fr.van.chart.designer.type.AbstractVanChartTypePane;
import javax.swing.JPanel;
+import java.util.HashSet;
+import java.util.Set;
import java.awt.Component;
/**
@@ -25,6 +30,14 @@ public class VanChartMapPlotPane extends AbstractVanChartTypePane {
private VanChartMapSourceChoosePane sourceChoosePane;
+ private static Set extendPlotIds = new HashSet<>();
+
+ static {
+ extendPlotIds.add(VanChartMapPlot.VAN_CHART_MAP_ID);
+ extendPlotIds.add(VanChartDrillMapPlot.VAN_CHART_DRILL_MAP_ID);
+ extendPlotIds.add(VanChartHeatMapPlot.VAN_CHART_HEAT_MAP_ID);
+ }
+
@Override
protected String[] getTypeIconPath() {
return new String[]{"/com/fr/van/chart/map/images/area-map.png",
@@ -54,7 +67,7 @@ public class VanChartMapPlotPane extends AbstractVanChartTypePane {
/**
* 更新界面内容
*/
- public void populateBean(Chart chart) {
+ public void populateBean(VanChart chart) {
for (ChartImagePane imagePane : typeDemo) {
imagePane.isPressing = false;
}
@@ -80,7 +93,7 @@ public class VanChartMapPlotPane extends AbstractVanChartTypePane {
}
}
- public void updateBean(Chart chart) {
+ public void updateBean(VanChart chart) {
super.updateBean(chart);
Plot plot = chart.getPlot();
if (plot instanceof VanChartMapPlot) {
@@ -154,4 +167,10 @@ public class VanChartMapPlotPane extends AbstractVanChartTypePane {
protected boolean acceptDefinition(ChartDataDefinitionProvider definition, VanChartPlot vanChartPlot) {
return definition instanceof MapChartDataDefinition;
}
+
+ //是否支持属性的继承
+ @Override
+ protected boolean supportExtendAttr(VanChart chart) {
+ return extendPlotIds.contains(chart.getID());
+ }
}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/map/line/StartAndEndNameFormatPaneWithoutCheckBox.java b/designer-chart/src/main/java/com/fr/van/chart/map/line/StartAndEndNameFormatPaneWithoutCheckBox.java
new file mode 100644
index 0000000000..9630f9b12d
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/map/line/StartAndEndNameFormatPaneWithoutCheckBox.java
@@ -0,0 +1,17 @@
+package com.fr.van.chart.map.line;
+
+import com.fr.design.i18n.Toolkit;
+import com.fr.van.chart.designer.component.format.CategoryNameFormatPaneWithoutCheckBox;
+import com.fr.van.chart.designer.style.VanChartStylePane;
+
+import javax.swing.JPanel;
+
+public class StartAndEndNameFormatPaneWithoutCheckBox extends CategoryNameFormatPaneWithoutCheckBox {
+ public StartAndEndNameFormatPaneWithoutCheckBox(VanChartStylePane parent, JPanel showOnPane) {
+ super(parent, showOnPane);
+ }
+
+ protected String getCheckBoxText() {
+ return Toolkit.i18nText("Fine-Design_Chart_Start_And_End");
+ }
+}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/map/line/VanChartLineMapPlotTooltipNoCheckPane.java b/designer-chart/src/main/java/com/fr/van/chart/map/line/VanChartLineMapPlotTooltipNoCheckPane.java
index 49afb79ebc..88b72c5709 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/map/line/VanChartLineMapPlotTooltipNoCheckPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/map/line/VanChartLineMapPlotTooltipNoCheckPane.java
@@ -33,4 +33,4 @@ public class VanChartLineMapPlotTooltipNoCheckPane extends VanChartLineMapPlotTo
isTooltipShow.setSelected(true);
tooltipPane.setEnabled(isTooltipShow.isSelected());
}
-}
\ No newline at end of file
+}
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 66566c6bf3..9dbc696a68 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/map/line/VanChartLineMapTooltipContentPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/map/line/VanChartLineMapTooltipContentPane.java
@@ -5,8 +5,11 @@ import com.fr.plugin.chart.base.format.AttrTooltipStartAndEndNameFormat;
import com.fr.plugin.chart.base.format.AttrTooltipValueFormat;
import com.fr.van.chart.designer.component.VanChartTooltipContentPane;
import com.fr.van.chart.designer.component.format.PercentFormatPaneWithCheckBox;
+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.style.VanChartStylePane;
import javax.swing.JPanel;
@@ -21,10 +24,18 @@ public class VanChartLineMapTooltipContentPane extends VanChartTooltipContentPan
@Override
protected void initFormatPane(VanChartStylePane parent, JPanel showOnPane){
- categoryNameFormatPane = new StartAndEndNameFormatPaneWithCheckBox(parent, showOnPane);
- seriesNameFormatPane = new SeriesNameFormatPaneWithCheckBox(parent, showOnPane);
- valueFormatPane = new ValueFormatPaneWithCheckBox(parent, showOnPane);
- percentFormatPane = new PercentFormatPaneWithCheckBox(parent, showOnPane);
+ setCategoryNameFormatPane(new StartAndEndNameFormatPaneWithCheckBox(parent, showOnPane));
+ setSeriesNameFormatPane(new SeriesNameFormatPaneWithCheckBox(parent, showOnPane));
+ setValueFormatPane(new ValueFormatPaneWithCheckBox(parent, showOnPane));
+ setPercentFormatPane(new PercentFormatPaneWithCheckBox(parent, showOnPane));
+ }
+
+ @Override
+ protected void initRichTextFormatPane(VanChartStylePane parent, JPanel showOnPane) {
+ setRichTextCategoryNameFormatPane(new StartAndEndNameFormatPaneWithoutCheckBox(parent, showOnPane));
+ setRichTextSeriesNameFormatPane(new SeriesNameFormatPaneWithoutCheckBox(parent, showOnPane));
+ setRichTextValueFormatPane(new ValueFormatPaneWithoutCheckBox(parent, showOnPane));
+ setRichTextPercentFormatPane(new PercentFormatPaneWithoutCheckBox(parent, showOnPane));
}
@Override
@@ -32,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/VanChartMultiPiePlotPane.java b/designer-chart/src/main/java/com/fr/van/chart/multilayer/VanChartMultiPiePlotPane.java
index 555cca468d..7854ecd170 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/multilayer/VanChartMultiPiePlotPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/multilayer/VanChartMultiPiePlotPane.java
@@ -55,10 +55,10 @@ public class VanChartMultiPiePlotPane extends AbstractVanChartTypePane {
return MultiPieIndependentVanChart.MultilayerVanChartTypes[0];
}
- protected void resetChartAttr(Chart chart, Plot newPlot) {
+ protected void resetChartAttr(VanChart chart, VanChartPlot newPlot) {
super.resetChartAttr(chart, newPlot);
//重置工具栏选项
- VanChartTools tools = ((VanChart) chart).getVanChartTools();
+ VanChartTools tools = chart.getVanChartTools();
if (tools != null) {
tools.setSort(false);
tools.setFullScreen(false);
diff --git a/designer-chart/src/main/java/com/fr/van/chart/multilayer/style/MultiPieLevelNameFormatPaneWithoutCheckBox.java b/designer-chart/src/main/java/com/fr/van/chart/multilayer/style/MultiPieLevelNameFormatPaneWithoutCheckBox.java
new file mode 100644
index 0000000000..71789e63ab
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/multilayer/style/MultiPieLevelNameFormatPaneWithoutCheckBox.java
@@ -0,0 +1,18 @@
+package com.fr.van.chart.multilayer.style;
+
+import com.fr.design.i18n.Toolkit;
+import com.fr.van.chart.designer.component.format.CategoryNameFormatPaneWithoutCheckBox;
+import com.fr.van.chart.designer.style.VanChartStylePane;
+
+import javax.swing.JPanel;
+
+public class MultiPieLevelNameFormatPaneWithoutCheckBox extends CategoryNameFormatPaneWithoutCheckBox {
+
+ public MultiPieLevelNameFormatPaneWithoutCheckBox(VanChartStylePane parent, JPanel showOnPane) {
+ super(parent, showOnPane);
+ }
+
+ protected String getCheckBoxText() {
+ return Toolkit.i18nText("Fine-Design_Chart_Level_Name");
+ }
+}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/multilayer/style/MultiPieSeriesNameFormatPaneWithoutCheckBox.java b/designer-chart/src/main/java/com/fr/van/chart/multilayer/style/MultiPieSeriesNameFormatPaneWithoutCheckBox.java
new file mode 100644
index 0000000000..95cf23f2e7
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/multilayer/style/MultiPieSeriesNameFormatPaneWithoutCheckBox.java
@@ -0,0 +1,18 @@
+package com.fr.van.chart.multilayer.style;
+
+import com.fr.design.i18n.Toolkit;
+import com.fr.van.chart.designer.component.format.SeriesNameFormatPaneWithoutCheckBox;
+import com.fr.van.chart.designer.style.VanChartStylePane;
+
+import javax.swing.JPanel;
+
+public class MultiPieSeriesNameFormatPaneWithoutCheckBox extends SeriesNameFormatPaneWithoutCheckBox {
+
+ public MultiPieSeriesNameFormatPaneWithoutCheckBox(VanChartStylePane parent, JPanel showOnPane) {
+ super(parent, showOnPane);
+ }
+
+ protected String getCheckBoxText() {
+ return Toolkit.i18nText("Fine-Design_Chart_MultiPie_Series_Name");
+ }
+}
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 637279d134..09093b0993 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/multilayer/style/VanChartMultiPieLabelContentPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/multilayer/style/VanChartMultiPieLabelContentPane.java
@@ -2,9 +2,12 @@ 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;
import com.fr.van.chart.designer.component.format.ValueFormatPaneWithCheckBox;
+import com.fr.van.chart.designer.component.format.ValueFormatPaneWithoutCheckBox;
import com.fr.van.chart.designer.style.VanChartStylePane;
import javax.swing.JPanel;
@@ -19,15 +22,24 @@ public class VanChartMultiPieLabelContentPane extends VanChartLabelContentPane {
@Override
protected void initFormatPane(VanChartStylePane parent, JPanel showOnPane) {
- categoryNameFormatPane = new MultiPieLevelNameFormatPaneWithCheckBox(parent, showOnPane);
- seriesNameFormatPane = new MultiPieSeriesNameFormatPaneWithCheckBox(parent, showOnPane);
- valueFormatPane = new ValueFormatPaneWithCheckBox(parent, showOnPane);
- percentFormatPane = new PercentFormatPaneWithCheckBox(parent, showOnPane);
+ setCategoryNameFormatPane(new MultiPieLevelNameFormatPaneWithCheckBox(parent, showOnPane));
+ setSeriesNameFormatPane(new MultiPieSeriesNameFormatPaneWithCheckBox(parent, showOnPane));
+ setValueFormatPane(new ValueFormatPaneWithCheckBox(parent, showOnPane));
+ setPercentFormatPane(new PercentFormatPaneWithCheckBox(parent, showOnPane));
+ }
+
+ @Override
+ protected void initRichTextFormatPane(VanChartStylePane parent, JPanel showOnPane) {
+ setRichTextCategoryNameFormatPane(new MultiPieLevelNameFormatPaneWithoutCheckBox(parent, showOnPane));
+ setRichTextSeriesNameFormatPane(new MultiPieSeriesNameFormatPaneWithoutCheckBox(parent, showOnPane));
+ setRichTextValueFormatPane(new ValueFormatPaneWithoutCheckBox(parent, showOnPane));
+ setRichTextPercentFormatPane(new PercentFormatPaneWithoutCheckBox(parent, showOnPane));
}
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 3c500d3bf8..1fbe0870a5 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/multilayer/style/VanChartMultiPieTooltipContentPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/multilayer/style/VanChartMultiPieTooltipContentPane.java
@@ -4,7 +4,9 @@ import com.fr.plugin.chart.base.AttrTooltipContent;
import com.fr.plugin.chart.multilayer.style.AttrTooltipMultiLevelNameFormat;
import com.fr.van.chart.designer.component.VanChartTooltipContentPane;
import com.fr.van.chart.designer.component.format.PercentFormatPaneWithCheckBox;
+import com.fr.van.chart.designer.component.format.PercentFormatPaneWithoutCheckBox;
import com.fr.van.chart.designer.component.format.ValueFormatPaneWithCheckBox;
+import com.fr.van.chart.designer.component.format.ValueFormatPaneWithoutCheckBox;
import com.fr.van.chart.designer.style.VanChartStylePane;
import javax.swing.JPanel;
@@ -19,16 +21,25 @@ public class VanChartMultiPieTooltipContentPane extends VanChartTooltipContentPa
@Override
protected void initFormatPane(VanChartStylePane parent, JPanel showOnPane) {
- categoryNameFormatPane = new MultiPieLevelNameFormatPaneWithCheckBox(parent, showOnPane);
- seriesNameFormatPane = new MultiPieSeriesNameFormatPaneWithCheckBox(parent, showOnPane);
- valueFormatPane = new ValueFormatPaneWithCheckBox(parent, showOnPane);
- percentFormatPane = new PercentFormatPaneWithCheckBox(parent, showOnPane);
+ setCategoryNameFormatPane(new MultiPieLevelNameFormatPaneWithCheckBox(parent, showOnPane));
+ setSeriesNameFormatPane(new MultiPieSeriesNameFormatPaneWithCheckBox(parent, showOnPane));
+ setValueFormatPane(new ValueFormatPaneWithCheckBox(parent, showOnPane));
+ setPercentFormatPane(new PercentFormatPaneWithCheckBox(parent, showOnPane));
+ }
+
+ @Override
+ protected void initRichTextFormatPane(VanChartStylePane parent, JPanel showOnPane) {
+ setRichTextCategoryNameFormatPane(new MultiPieLevelNameFormatPaneWithoutCheckBox(parent, showOnPane));
+ setRichTextSeriesNameFormatPane(new MultiPieSeriesNameFormatPaneWithoutCheckBox(parent, showOnPane));
+ setRichTextValueFormatPane(new ValueFormatPaneWithoutCheckBox(parent, showOnPane));
+ setRichTextPercentFormatPane(new PercentFormatPaneWithoutCheckBox(parent, showOnPane));
}
@Override
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 56893ec66b..f375fa78fa 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/multilayer/style/VanChartMutiPieRefreshTooltipContentPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/multilayer/style/VanChartMutiPieRefreshTooltipContentPane.java
@@ -1,7 +1,9 @@
package com.fr.van.chart.multilayer.style;
import com.fr.van.chart.designer.component.format.ChangedPercentFormatPaneWithCheckBox;
+import com.fr.van.chart.designer.component.format.ChangedPercentFormatPaneWithoutCheckBox;
import com.fr.van.chart.designer.component.format.ChangedValueFormatPaneWithCheckBox;
+import com.fr.van.chart.designer.component.format.ChangedValueFormatPaneWithoutCheckBox;
import com.fr.van.chart.designer.style.VanChartStylePane;
import javax.swing.JPanel;
@@ -17,12 +19,24 @@ 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);
- changedValueFormatPane = new ChangedValueFormatPaneWithCheckBox(parent, showOnPane);
- changedPercentFormatPane = new ChangedPercentFormatPaneWithCheckBox(parent, showOnPane);
+ setChangedValueFormatPane(new ChangedValueFormatPaneWithCheckBox(parent, showOnPane));
+ setChangedPercentFormatPane(new ChangedPercentFormatPaneWithCheckBox(parent, showOnPane));
+ }
+
+ @Override
+ protected void initRichTextFormatPane(VanChartStylePane parent, JPanel showOnPane) {
+ super.initRichTextFormatPane(parent, showOnPane);
+
+ setRichTextChangedValueFormatPane(new ChangedValueFormatPaneWithoutCheckBox(parent, showOnPane));
+ setRichTextChangedPercentFormatPane(new ChangedPercentFormatPaneWithoutCheckBox(parent, showOnPane));
}
protected double[] getRowSize(double p){
@@ -31,12 +45,23 @@ public class VanChartMutiPieRefreshTooltipContentPane extends VanChartMultiPieTo
protected Component[][] getPaneComponents(){
return new Component[][]{
- new Component[]{categoryNameFormatPane,null},
- new Component[]{seriesNameFormatPane,null},
- new Component[]{valueFormatPane,null},
- new Component[]{changedValueFormatPane,null},
- new Component[]{percentFormatPane,null},
- new Component[]{changedPercentFormatPane,null},
+ new Component[]{getCategoryNameFormatPane(), null},
+ new Component[]{getSeriesNameFormatPane(), null},
+ new Component[]{getValueFormatPane(), null},
+ new Component[]{getChangedValueFormatPane(), null},
+ new Component[]{getPercentFormatPane(), null},
+ new Component[]{getChangedPercentFormatPane(), null},
+ };
+ }
+
+ protected Component[][] getRichTextComponents() {
+ return new Component[][]{
+ new Component[]{getRichTextCategoryNameFormatPane(), null},
+ new Component[]{getRichTextSeriesNameFormatPane(), null},
+ new Component[]{getRichTextValueFormatPane(), null},
+ new Component[]{getRichTextChangedValueFormatPane(), null},
+ new Component[]{getRichTextPercentFormatPane(), null},
+ new Component[]{getRichTextChangedPercentFormatPane(), null}
};
}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/pie/VanChartPiePlotPane.java b/designer-chart/src/main/java/com/fr/van/chart/pie/VanChartPiePlotPane.java
index 9bbddbb039..27f10bfc8b 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/pie/VanChartPiePlotPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/pie/VanChartPiePlotPane.java
@@ -5,9 +5,17 @@ import com.fr.chart.chartattr.Chart;
import com.fr.chart.chartattr.Plot;
import com.fr.log.FineLoggerFactory;
import com.fr.plugin.chart.PiePlot4VanChart;
+import com.fr.plugin.chart.area.VanChartAreaPlot;
+import com.fr.plugin.chart.attr.plot.VanChartPlot;
+import com.fr.plugin.chart.column.VanChartColumnPlot;
+import com.fr.plugin.chart.line.VanChartLinePlot;
import com.fr.plugin.chart.pie.PieIndependentVanChart;
+import com.fr.plugin.chart.vanchart.VanChart;
import com.fr.van.chart.designer.type.AbstractVanChartTypePane;
+import java.util.HashSet;
+import java.util.Set;
+
/**
* 饼图(新特性) 属性表 选择类型 布局界面.
*/
@@ -15,6 +23,15 @@ public class VanChartPiePlotPane extends AbstractVanChartTypePane {
private static final long serialVersionUID = 6163246902689597259L;
+ private static Set extendPlotIds = new HashSet<>();
+
+ static {
+ extendPlotIds.add(VanChartColumnPlot.VAN_CHART_COLUMN_PLOT_ID);
+ extendPlotIds.add(VanChartColumnPlot.VAN_CHART_BAR_PLOT_ID);
+ extendPlotIds.add(VanChartLinePlot.VAN_CHART_LINE_PLOT);
+ extendPlotIds.add(VanChartAreaPlot.VAN_CHART_AREA_PLOT_ID);
+ }
+
@Override
protected String[] getTypeIconPath() {
return new String[]{"/com/fr/van/chart/pie/images/pie.png",
@@ -44,7 +61,31 @@ public class VanChartPiePlotPane extends AbstractVanChartTypePane {
return cloned;
}
+ @Override
+ protected VanChartPlot cloneOldPlot2New(VanChartPlot oldPlot, VanChartPlot newPlot) {
+ try {
+ PiePlot4VanChart piePlot4VanChart = (PiePlot4VanChart) newPlot;
+ PiePlot4VanChart clonePlot = (PiePlot4VanChart) oldPlot.clone();
+ clonePlot.setRoseType(piePlot4VanChart.getRoseType());
+ return clonePlot;
+ } catch (CloneNotSupportedException e) {
+ FineLoggerFactory.getLogger().error("Error in change plot");
+ return newPlot;
+ }
+ }
+
+ //是否支持属性的继承
+ @Override
+ protected boolean supportExtendAttr(VanChart chart) {
+ return extendPlotIds.contains(chart.getID());
+ }
+
public Chart getDefaultChart() {
return PieIndependentVanChart.newPieChartTypes[0];
}
+
+ //重置数据配置
+ protected void resetFilterDefinition(Chart chart) {
+ resetMoreCateDefinition(chart);
+ }
}
\ No newline at end of file
diff --git a/designer-chart/src/main/java/com/fr/van/chart/radar/VanChartRadarConditionPane.java b/designer-chart/src/main/java/com/fr/van/chart/radar/VanChartRadarConditionPane.java
index 9c46cd8ef7..0d60f64de7 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/radar/VanChartRadarConditionPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/radar/VanChartRadarConditionPane.java
@@ -53,7 +53,7 @@ public class VanChartRadarConditionPane extends DataSeriesConditionPane{
} else {
classPaneMap.put(VanChartAttrMarker.class, new VanChartMarkerConditionPane(this));
classPaneMap.put(VanChartAttrLine.class, new VanChartLineWidthConditionPane(this));
- classPaneMap.put(AttrAreaSeriesFillColorBackground.class, new VanChartAreaFillColorConditionPane(this));
+ classPaneMap.put(AttrAreaSeriesFillColorBackground.class, new VanChartAreaFillColorConditionPane(this, plot));
classPaneMap.put(AttrEffect.class, new VanChartEffectConditionPane(this, EffectHelper.getRadarPlotDefaultEffect()));
}
}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/radar/VanChartRadarPlotPane.java b/designer-chart/src/main/java/com/fr/van/chart/radar/VanChartRadarPlotPane.java
index a77c71bc90..e05bbe2422 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/radar/VanChartRadarPlotPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/radar/VanChartRadarPlotPane.java
@@ -49,4 +49,8 @@ public class VanChartRadarPlotPane extends AbstractVanChartTypePane {
return RadarIndependentVanChart.RadarVanChartTypes[0];
}
+ //重置数据配置
+ protected void resetFilterDefinition(Chart chart) {
+ resetMoreCateDefinition(chart);
+ }
}
\ No newline at end of file
diff --git a/designer-chart/src/main/java/com/fr/van/chart/scatter/VanChartScatterLabelContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/scatter/VanChartScatterLabelContentPane.java
index 72ab39c9ae..160cfb25ee 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/scatter/VanChartScatterLabelContentPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/scatter/VanChartScatterLabelContentPane.java
@@ -1,6 +1,7 @@
package com.fr.van.chart.scatter;
import com.fr.van.chart.designer.component.VanChartHtmlLabelPane;
+import com.fr.van.chart.designer.component.VanChartHtmlLabelPaneWithBackGroundLabel;
import com.fr.van.chart.designer.style.VanChartStylePane;
import javax.swing.JPanel;
@@ -17,7 +18,7 @@ public class VanChartScatterLabelContentPane extends VanChartScatterTooltipCont
@Override
protected VanChartHtmlLabelPane createHtmlLabelPane() {
- return new VanChartHtmlLabelPane();
+ return new VanChartHtmlLabelPaneWithBackGroundLabel();
}
}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/scatter/VanChartScatterPlotPane.java b/designer-chart/src/main/java/com/fr/van/chart/scatter/VanChartScatterPlotPane.java
index f93051a747..9ef5155a77 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/scatter/VanChartScatterPlotPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/scatter/VanChartScatterPlotPane.java
@@ -10,13 +10,21 @@ import com.fr.chartx.data.ChartDataDefinitionProvider;
import com.fr.chartx.data.field.AbstractColumnFieldCollection;
import com.fr.chartx.data.field.diff.BubbleColumnFieldCollection;
import com.fr.log.FineLoggerFactory;
+import com.fr.plugin.chart.area.VanChartAreaPlot;
import com.fr.plugin.chart.attr.plot.VanChartPlot;
import com.fr.plugin.chart.base.VanChartAttrLine;
import com.fr.plugin.chart.base.VanChartTools;
+import com.fr.plugin.chart.bubble.VanChartBubblePlot;
+import com.fr.plugin.chart.column.VanChartColumnPlot;
+import com.fr.plugin.chart.line.VanChartLinePlot;
import com.fr.plugin.chart.scatter.ScatterIndependentVanChart;
import com.fr.plugin.chart.scatter.VanChartScatterPlot;
+import com.fr.plugin.chart.vanchart.VanChart;
import com.fr.van.chart.designer.type.AbstractVanChartTypePane;
+import java.util.HashSet;
+import java.util.Set;
+
/**
* Created by Mitisky on 16/2/16.
*/
@@ -29,6 +37,16 @@ public class VanChartScatterPlotPane extends AbstractVanChartTypePane {
};
}
+ private static Set extendPlotIds = new HashSet<>();
+
+ static {
+ extendPlotIds.add(VanChartColumnPlot.VAN_CHART_COLUMN_PLOT_ID);
+ extendPlotIds.add(VanChartColumnPlot.VAN_CHART_BAR_PLOT_ID);
+ extendPlotIds.add(VanChartLinePlot.VAN_CHART_LINE_PLOT);
+ extendPlotIds.add(VanChartAreaPlot.VAN_CHART_AREA_PLOT_ID);
+ extendPlotIds.add(VanChartBubblePlot.VAN_CHART_BUBBLE_PLOT_ID);
+ }
+
protected Plot getSelectedClonedPlot(){
VanChartScatterPlot newPlot = null;
Chart[] scatterChart = ScatterIndependentVanChart.ScatterVanChartTypes;
@@ -95,4 +113,10 @@ public class VanChartScatterPlotPane extends AbstractVanChartTypePane {
}
return false;
}
+
+ //是否支持属性的继承
+ @Override
+ protected boolean supportExtendAttr(VanChart chart) {
+ return extendPlotIds.contains(chart.getID());
+ }
}
\ No newline at end of file
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 902f655172..db7ce4152f 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/scatter/VanChartScatterRefreshTooltipContentPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/scatter/VanChartScatterRefreshTooltipContentPane.java
@@ -1,9 +1,13 @@
package com.fr.van.chart.scatter;
import com.fr.plugin.chart.base.AttrTooltipContent;
+import com.fr.plugin.chart.base.format.AttrTooltipFormat;
import com.fr.plugin.chart.scatter.attr.ScatterAttrTooltipContent;
import com.fr.van.chart.designer.component.format.ChangedPercentFormatPaneWithCheckBox;
+import com.fr.van.chart.designer.component.format.ChangedPercentFormatPaneWithoutCheckBox;
import com.fr.van.chart.designer.component.format.ChangedValueFormatPaneWithCheckBox;
+import com.fr.van.chart.designer.component.format.ChangedValueFormatPaneWithoutCheckBox;
+import com.fr.van.chart.designer.component.format.VanChartFormatPaneWithoutCheckBox;
import com.fr.van.chart.designer.style.VanChartStylePane;
import javax.swing.JPanel;
@@ -15,7 +19,7 @@ import java.awt.Component;
public class VanChartScatterRefreshTooltipContentPane extends VanChartScatterTooltipContentPane {
private ChangedValueFormatPaneWithCheckBox changedSizeFormatPane;
-
+ private ChangedValueFormatPaneWithoutCheckBox richTextChangedSizeFormatPane;
public VanChartScatterRefreshTooltipContentPane(VanChartStylePane parent, JPanel showOnPane) {
super(null, showOnPane);
@@ -25,9 +29,21 @@ public class VanChartScatterRefreshTooltipContentPane extends VanChartScatterToo
protected void initFormatPane(VanChartStylePane parent, JPanel showOnPane) {
super.initFormatPane(parent, showOnPane);
changedSizeFormatPane = new ChangedValueFormatPaneWithCheckBox(parent, showOnPane);
- changedPercentFormatPane = new ChangedPercentFormatPaneWithCheckBox(parent, showOnPane);
+ ChangedPercentFormatPaneWithCheckBox changedPercentFormatPane = new ChangedPercentFormatPaneWithCheckBox(parent, showOnPane);
+ setChangedPercentFormatPane(changedPercentFormatPane);
}
+ protected void initRichTextFormatPane(VanChartStylePane parent, JPanel showOnPane) {
+ super.initRichTextFormatPane(parent, showOnPane);
+
+ richTextChangedSizeFormatPane = new ChangedValueFormatPaneWithoutCheckBox(parent, showOnPane);
+ ChangedPercentFormatPaneWithoutCheckBox richTextChangedPercentFormatPane = new ChangedPercentFormatPaneWithoutCheckBox(parent, showOnPane);
+ setRichTextChangedPercentFormatPane(richTextChangedPercentFormatPane);
+ }
+
+ protected boolean supportRichEditor() {
+ return false;
+ }
protected double[] getRowSize(double p) {
return new double[]{p, p, p, p, p, p};
@@ -35,12 +51,24 @@ public class VanChartScatterRefreshTooltipContentPane extends VanChartScatterToo
protected Component[][] getPaneComponents() {
return new Component[][]{
- new Component[]{seriesNameFormatPane, null},
- new Component[]{getxFormatPane(), null},
- new Component[]{getyFormatPane(), null},
+ new Component[]{getSeriesNameFormatPane(), null},
+ new Component[]{getXFormatPane(), null},
+ new Component[]{getYFormatPane(), null},
new Component[]{getSizeFormatPane(), null},
new Component[]{changedSizeFormatPane, null},
- new Component[]{changedPercentFormatPane, null},
+ new Component[]{getChangedPercentFormatPane(), null},
+ };
+ }
+
+ @Override
+ protected Component[][] getRichTextComponents() {
+ return new Component[][]{
+ new Component[]{getRichTextSeriesNameFormatPane(), null},
+ new Component[]{getRichTextXFormatPane(), null},
+ new Component[]{getRichTextYFormatPane(), null},
+ new Component[]{getRichTextSizeFormatPane(), null},
+ new Component[]{richTextChangedSizeFormatPane, null},
+ new Component[]{getRichTextChangedPercentFormatPane(), null}
};
}
@@ -51,18 +79,49 @@ public class VanChartScatterRefreshTooltipContentPane extends VanChartScatterToo
if (attrTooltipContent instanceof ScatterAttrTooltipContent) {
ScatterAttrTooltipContent scatterAttrTooltipContent = (ScatterAttrTooltipContent) attrTooltipContent;
changedSizeFormatPane.populate(scatterAttrTooltipContent.getChangeSizeFormat());
- changedPercentFormatPane.populate(scatterAttrTooltipContent.getChangedSizePercentFormat());
+ getChangedPercentFormatPane().populate(scatterAttrTooltipContent.getChangedSizePercentFormat());
}
}
+ protected void populateRichEditor(AttrTooltipContent attrTooltipContent) {
+ super.populateRichEditor(attrTooltipContent);
+
+ if (attrTooltipContent instanceof ScatterAttrTooltipContent) {
+ ScatterAttrTooltipContent scatterAttrTooltipContent = (ScatterAttrTooltipContent) attrTooltipContent;
+
+ VanChartFormatPaneWithoutCheckBox[] formatPaneGroup = new VanChartFormatPaneWithoutCheckBox[]{
+ richTextChangedSizeFormatPane,
+ getRichTextChangedPercentFormatPane()
+ };
+
+ AttrTooltipFormat[] formatGroup = new AttrTooltipFormat[]{
+ scatterAttrTooltipContent.getRichTextChangeSizeFormat(),
+ scatterAttrTooltipContent.getRichTextChangedSizePercentFormat()
+ };
+
+ populateRichTextFormat(formatPaneGroup, formatGroup);
+ populateRichText(attrTooltipContent.getRichTextAttr());
+ }
+ }
+
@Override
protected void updateFormatPane(AttrTooltipContent attrTooltipContent) {
super.updateFormatPane(attrTooltipContent);
if (attrTooltipContent instanceof ScatterAttrTooltipContent) {
ScatterAttrTooltipContent scatterAttrTooltipContent = (ScatterAttrTooltipContent) attrTooltipContent;
changedSizeFormatPane.update(scatterAttrTooltipContent.getChangeSizeFormat());
- changedPercentFormatPane.update(scatterAttrTooltipContent.getChangedSizePercentFormat());
+ getChangedPercentFormatPane().update(scatterAttrTooltipContent.getChangedSizePercentFormat());
+ }
+ }
+
+ protected void updateRichEditor(AttrTooltipContent attrTooltipContent) {
+ super.updateRichEditor(attrTooltipContent);
+
+ if (attrTooltipContent instanceof ScatterAttrTooltipContent) {
+ ScatterAttrTooltipContent scatterAttrTooltipContent = (ScatterAttrTooltipContent) attrTooltipContent;
+ richTextChangedSizeFormatPane.update(scatterAttrTooltipContent.getRichTextChangeSizeFormat());
+ getRichTextChangedPercentFormatPane().update(scatterAttrTooltipContent.getRichTextChangedSizePercentFormat());
}
}
@@ -70,13 +129,13 @@ public class VanChartScatterRefreshTooltipContentPane extends VanChartScatterToo
public void setDirty(boolean isDirty) {
super.setDirty(isDirty);
changedSizeFormatPane.setDirty(isDirty);
- changedPercentFormatPane.setDirty(isDirty);
+ getChangedPercentFormatPane().setDirty(isDirty);
}
@Override
public boolean isDirty() {
- return super.isDirty() || changedSizeFormatPane.isDirty() || changedPercentFormatPane.isDirty();
+ return super.isDirty() || changedSizeFormatPane.isDirty() || getChangedPercentFormatPane().isDirty();
}
}
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 705ea1a0f6..0933ce8a5c 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/scatter/VanChartScatterTooltipContentPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/scatter/VanChartScatterTooltipContentPane.java
@@ -1,11 +1,17 @@
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;
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.component.format.XFormatPaneWithCheckBox;
+import com.fr.van.chart.designer.component.format.XFormatPaneWithoutCheckBox;
import com.fr.van.chart.designer.component.format.YFormatPaneWithCheckBox;
+import com.fr.van.chart.designer.component.format.YFormatPaneWithoutCheckBox;
import com.fr.van.chart.designer.style.VanChartStylePane;
import javax.swing.JPanel;
@@ -20,11 +26,15 @@ public class VanChartScatterTooltipContentPane extends VanChartTooltipContentPa
private YFormatPaneWithCheckBox yFormatPane;
private ValueFormatPaneWithCheckBox sizeFormatPane;
- public XFormatPaneWithCheckBox getxFormatPane() {
+ private XFormatPaneWithoutCheckBox richTextXFormatPane;
+ private YFormatPaneWithoutCheckBox richTextYFormatPane;
+ private ValueFormatPaneWithoutCheckBox richTextSizeFormatPane;
+
+ public XFormatPaneWithCheckBox getXFormatPane() {
return xFormatPane;
}
- public YFormatPaneWithCheckBox getyFormatPane() {
+ public YFormatPaneWithCheckBox getYFormatPane() {
return yFormatPane;
}
@@ -32,6 +42,18 @@ public class VanChartScatterTooltipContentPane extends VanChartTooltipContentPa
return sizeFormatPane;
}
+ public XFormatPaneWithoutCheckBox getRichTextXFormatPane() {
+ return richTextXFormatPane;
+ }
+
+ public YFormatPaneWithoutCheckBox getRichTextYFormatPane() {
+ return richTextYFormatPane;
+ }
+
+ public ValueFormatPaneWithoutCheckBox getRichTextSizeFormatPane() {
+ return richTextSizeFormatPane;
+ }
+
public VanChartScatterTooltipContentPane(VanChartStylePane parent, JPanel showOnPane){
super(parent, showOnPane);
}
@@ -45,16 +67,35 @@ public class VanChartScatterTooltipContentPane extends VanChartTooltipContentPa
sizeFormatPane = new ValueFormatPaneWithCheckBox(parent, showOnPane);
}
+ @Override
+ protected void initRichTextFormatPane(VanChartStylePane parent, JPanel showOnPane) {
+ super.initRichTextFormatPane(parent, showOnPane);
+
+ richTextXFormatPane = new XFormatPaneWithoutCheckBox(parent, showOnPane);
+ richTextYFormatPane = new YFormatPaneWithoutCheckBox(parent, showOnPane);
+ richTextSizeFormatPane = new ValueFormatPaneWithoutCheckBox(parent, showOnPane);
+ }
+
@Override
protected Component[][] getPaneComponents(){
return new Component[][]{
- new Component[]{seriesNameFormatPane,null},
+ new Component[]{getSeriesNameFormatPane(),null},
new Component[]{xFormatPane,null},
new Component[]{yFormatPane,null},
new Component[]{sizeFormatPane,null},
};
}
+ @Override
+ protected Component[][] getRichTextComponents() {
+ return new Component[][]{
+ new Component[]{getRichTextSeriesNameFormatPane(), null},
+ new Component[]{richTextXFormatPane, null},
+ new Component[]{richTextYFormatPane, null},
+ new Component[]{richTextSizeFormatPane, null}
+ };
+ }
+
@Override
protected void populateFormatPane(AttrTooltipContent attrTooltipContent) {
super.populateFormatPane(attrTooltipContent);
@@ -66,6 +107,32 @@ public class VanChartScatterTooltipContentPane extends VanChartTooltipContentPa
}
}
+ protected void populateRichEditor(AttrTooltipContent attrTooltipContent) {
+ if (attrTooltipContent instanceof ScatterAttrTooltipContent) {
+ ScatterAttrTooltipContent scatterAttrTooltipContent = (ScatterAttrTooltipContent) attrTooltipContent;
+
+ VanChartFormatPaneWithoutCheckBox[] formatPaneGroup = new VanChartFormatPaneWithoutCheckBox[]{
+ 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);
+ }
+ }
+
@Override
protected void updateFormatPane(AttrTooltipContent attrTooltipContent) {
super.updateFormatPane(attrTooltipContent);
@@ -77,17 +144,28 @@ public class VanChartScatterTooltipContentPane extends VanChartTooltipContentPa
}
}
+ protected void updateRichEditor(AttrTooltipContent attrTooltipContent) {
+ super.updateRichEditor(attrTooltipContent);
+
+ if (attrTooltipContent instanceof ScatterAttrTooltipContent) {
+ ScatterAttrTooltipContent scatterAttrTooltipContent = (ScatterAttrTooltipContent) attrTooltipContent;
+ richTextXFormatPane.update(scatterAttrTooltipContent.getRichTextXFormat());
+ richTextYFormatPane.update(scatterAttrTooltipContent.getRichTextYFormat());
+ richTextSizeFormatPane.update(scatterAttrTooltipContent.getRichTextSizeFormat());
+ }
+ }
+
@Override
public void setDirty(boolean isDirty) {
xFormatPane.setDirty(isDirty);
yFormatPane.setDirty(isDirty);
sizeFormatPane.setDirty(isDirty);
- seriesNameFormatPane.setDirty(isDirty);
+ getSeriesNameFormatPane().setDirty(isDirty);
}
@Override
public boolean isDirty() {
- return xFormatPane.isDirty() || yFormatPane.isDirty() || sizeFormatPane.isDirty() || seriesNameFormatPane.isDirty();
+ return xFormatPane.isDirty() || yFormatPane.isDirty() || sizeFormatPane.isDirty() || getSeriesNameFormatPane().isDirty();
}
@Override
diff --git a/designer-chart/src/main/java/com/fr/van/chart/scatter/component/label/VanChartScatterPlotLabelDetailPane.java b/designer-chart/src/main/java/com/fr/van/chart/scatter/component/label/VanChartScatterPlotLabelDetailPane.java
index d507934e6b..a78261f655 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/scatter/component/label/VanChartScatterPlotLabelDetailPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/scatter/component/label/VanChartScatterPlotLabelDetailPane.java
@@ -19,6 +19,6 @@ public class VanChartScatterPlotLabelDetailPane extends VanChartPlotLabelDetailP
@Override
protected void initToolTipContentPane(Plot plot) {
- dataLabelContentPane = new VanChartScatterLabelContentPane(parent,VanChartScatterPlotLabelDetailPane.this);
+ setDataLabelContentPane(new VanChartScatterLabelContentPane(getParentPane(),VanChartScatterPlotLabelDetailPane.this));
}
}
\ No newline at end of file
diff --git a/designer-chart/src/main/java/com/fr/van/chart/scatter/component/label/VanChartScatterPlotLabelNoCheckPane.java b/designer-chart/src/main/java/com/fr/van/chart/scatter/component/label/VanChartScatterPlotLabelNoCheckPane.java
index 71e783b061..a409180732 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/scatter/component/label/VanChartScatterPlotLabelNoCheckPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/scatter/component/label/VanChartScatterPlotLabelNoCheckPane.java
@@ -19,12 +19,12 @@ public class VanChartScatterPlotLabelNoCheckPane extends VanChartScatterPlotLabe
protected void addComponents() {
this.setLayout(new BorderLayout());
- this.add(labelPane,BorderLayout.CENTER);
+ this.add(getLabelPane(), BorderLayout.CENTER);
}
public void populate(AttrLabel attr) {
super.populate(attr);
- isLabelShow.setSelected(true);
- labelPane.setVisible(true);
+ getLabelShowCheckBox().setSelected(true);
+ getLabelPane().setVisible(true);
}
}
\ No newline at end of file
diff --git a/designer-chart/src/main/java/com/fr/van/chart/scatter/component/label/VanChartScatterPlotLabelPane.java b/designer-chart/src/main/java/com/fr/van/chart/scatter/component/label/VanChartScatterPlotLabelPane.java
index 632ce7f6f5..fb8be90163 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/scatter/component/label/VanChartScatterPlotLabelPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/scatter/component/label/VanChartScatterPlotLabelPane.java
@@ -18,7 +18,8 @@ public class VanChartScatterPlotLabelPane extends VanChartPlotLabelPane {
@Override
protected void createLabelPane() {
- labelDetailPane = new VanChartScatterPlotLabelDetailPane(this.plot, this.parent);
- labelPane.add(labelDetailPane, BorderLayout.CENTER);
+ VanChartScatterPlotLabelDetailPane labelDetailPane = new VanChartScatterPlotLabelDetailPane(getPlot(), getParentPane());
+ setLabelDetailPane(labelDetailPane);
+ getLabelPane().add(labelDetailPane, BorderLayout.CENTER);
}
}
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 af4d721756..4e20364653 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/style/VanChartStructureLabelContentPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/style/VanChartStructureLabelContentPane.java
@@ -1,8 +1,10 @@
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.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;
@@ -24,33 +26,42 @@ public class VanChartStructureLabelContentPane extends VanChartLabelContentPane
@Override
protected Component[][] getPaneComponents(){
return new Component[][]{
- new Component[]{categoryNameFormatPane,null},
- new Component[]{seriesNameFormatPane,null},
- new Component[]{valueFormatPane,null}
+ new Component[]{getCategoryNameFormatPane(),null},
+ new Component[]{getSeriesNameFormatPane(),null},
+ new Component[]{getValueFormatPane(),null}
};
}
@Override
protected void initFormatPane(VanChartStylePane parent, JPanel showOnPane){
- categoryNameFormatPane = new CategoryNameFormatPaneWithCheckBox(parent, showOnPane){
+ CategoryNameFormatPaneWithCheckBox categoryNameFormatPane = new CategoryNameFormatPaneWithCheckBox(parent, showOnPane){
@Override
protected String getCheckBoxText() {
- return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Node_Name");
+ return Toolkit.i18nText("Fine-Design_Chart_Node_Name");
}
};
- seriesNameFormatPane = new SeriesNameFormatPaneWithCheckBox(parent, showOnPane){
+ SeriesNameFormatPaneWithCheckBox seriesNameFormatPane = new SeriesNameFormatPaneWithCheckBox(parent, showOnPane){
@Override
protected String getCheckBoxText() {
- return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_MultiPie_Series_Name");
+ return Toolkit.i18nText("Fine-Design_Chart_MultiPie_Series_Name");
}
};
- valueFormatPane = new ValueFormatPaneWithCheckBox(parent, showOnPane);
- percentFormatPane = new PercentFormatPaneWithCheckBox(parent, showOnPane);
+ ValueFormatPaneWithCheckBox valueFormatPane = new ValueFormatPaneWithCheckBox(parent, showOnPane);
+ PercentFormatPaneWithCheckBox percentFormatPane = new PercentFormatPaneWithCheckBox(parent, showOnPane);
+
+ setCategoryNameFormatPane(categoryNameFormatPane);
+ setSeriesNameFormatPane(seriesNameFormatPane);
+ setValueFormatPane(valueFormatPane);
+ 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/VanChartStructurePlotLabelDetailPane.java b/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/style/VanChartStructurePlotLabelDetailPane.java
new file mode 100644
index 0000000000..20e784c525
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/style/VanChartStructurePlotLabelDetailPane.java
@@ -0,0 +1,16 @@
+package com.fr.van.chart.structure.desinger.style;
+
+import com.fr.chart.chartattr.Plot;
+import com.fr.van.chart.designer.style.VanChartStylePane;
+import com.fr.van.chart.designer.style.label.VanChartPlotLabelDetailPane;
+
+public class VanChartStructurePlotLabelDetailPane extends VanChartPlotLabelDetailPane {
+
+ public VanChartStructurePlotLabelDetailPane(Plot plot, VanChartStylePane parent) {
+ super(plot, parent);
+ }
+
+ protected void initToolTipContentPane(Plot plot) {
+ setDataLabelContentPane(new VanChartStructureLabelContentPane(getParentPane(), VanChartStructurePlotLabelDetailPane.this));
+ }
+}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/style/VanChartStructurePlotLabelPane.java b/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/style/VanChartStructurePlotLabelPane.java
new file mode 100644
index 0000000000..e4cdc99e19
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/style/VanChartStructurePlotLabelPane.java
@@ -0,0 +1,20 @@
+package com.fr.van.chart.structure.desinger.style;
+
+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 VanChartStructurePlotLabelPane extends VanChartPlotLabelPane {
+
+ public VanChartStructurePlotLabelPane(Plot plot, VanChartStylePane parent) {
+ super(plot, parent);
+ }
+
+ protected void createLabelPane() {
+ VanChartStructurePlotLabelDetailPane labelDetailPane = new VanChartStructurePlotLabelDetailPane(getPlot(), getParentPane());
+ setLabelDetailPane(labelDetailPane);
+ getLabelPane().add(labelDetailPane, BorderLayout.CENTER);
+ }
+}
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 5fa83be5b8..ea09ff3c83 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/style/VanChartStructureRefreshTooltipContentPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/style/VanChartStructureRefreshTooltipContentPane.java
@@ -1,7 +1,9 @@
package com.fr.van.chart.structure.desinger.style;
import com.fr.van.chart.designer.component.format.ChangedPercentFormatPaneWithCheckBox;
+import com.fr.van.chart.designer.component.format.ChangedPercentFormatPaneWithoutCheckBox;
import com.fr.van.chart.designer.component.format.ChangedValueFormatPaneWithCheckBox;
+import com.fr.van.chart.designer.component.format.ChangedValueFormatPaneWithoutCheckBox;
import com.fr.van.chart.designer.style.VanChartStylePane;
import javax.swing.JPanel;
@@ -10,7 +12,7 @@ import java.awt.Component;
/**
* Created by mengao on 2017/6/9.
*/
-public class VanChartStructureRefreshTooltipContentPane extends VanChartStructureTooltipContentPane{
+public class VanChartStructureRefreshTooltipContentPane extends VanChartStructureTooltipContentPane {
public VanChartStructureRefreshTooltipContentPane(VanChartStylePane parent, JPanel showOnPane) {
super(null, showOnPane);
}
@@ -19,22 +21,48 @@ public class VanChartStructureRefreshTooltipContentPane extends VanChartStructur
protected void initFormatPane(VanChartStylePane parent, JPanel showOnPane) {
super.initFormatPane(parent, showOnPane);
- changedValueFormatPane = new ChangedValueFormatPaneWithCheckBox(parent, showOnPane);
- changedPercentFormatPane = new ChangedPercentFormatPaneWithCheckBox(parent, showOnPane);
+ ChangedValueFormatPaneWithCheckBox changedValueFormatPane = new ChangedValueFormatPaneWithCheckBox(parent, showOnPane);
+ ChangedPercentFormatPaneWithCheckBox changedPercentFormatPane = new ChangedPercentFormatPaneWithCheckBox(parent, showOnPane);
+
+ setChangedValueFormatPane(changedValueFormatPane);
+ setChangedPercentFormatPane(changedPercentFormatPane);
+ }
+
+ protected void initRichTextFormatPane(VanChartStylePane parent, JPanel showOnPane) {
+ super.initRichTextFormatPane(parent, showOnPane);
+
+ ChangedValueFormatPaneWithoutCheckBox richTextChangedValueFormatPane = new ChangedValueFormatPaneWithoutCheckBox(parent, showOnPane);
+ ChangedPercentFormatPaneWithoutCheckBox richTextChangedPercentFormatPane = new ChangedPercentFormatPaneWithoutCheckBox(parent, showOnPane);
+
+ setRichTextChangedValueFormatPane(richTextChangedValueFormatPane);
+ setRichTextChangedPercentFormatPane(richTextChangedPercentFormatPane);
}
- protected double[] getRowSize(double p){
- return new double[]{p,p,p,p,p};
+ protected boolean supportRichEditor() {
+ return false;
}
- @Override
- protected Component[][] getPaneComponents(){
+ protected double[] getRowSize(double p) {
+ return new double[]{p, p, p, p, p};
+ }
+
+ protected Component[][] getPaneComponents() {
+ return new Component[][]{
+ new Component[]{getCategoryNameFormatPane(), null},
+ new Component[]{getSeriesNameFormatPane(), null},
+ new Component[]{getValueFormatPane(), null},
+ new Component[]{getChangedValueFormatPane(), null},
+ new Component[]{getChangedPercentFormatPane(), null},
+ };
+ }
+
+ protected Component[][] getRichTextComponents() {
return new Component[][]{
- new Component[]{categoryNameFormatPane,null},
- new Component[]{seriesNameFormatPane,null},
- new Component[]{valueFormatPane,null},
- new Component[]{changedValueFormatPane,null},
- new Component[]{changedPercentFormatPane,null},
+ new Component[]{getRichTextCategoryNameFormatPane(), null},
+ new Component[]{getRichTextSeriesNameFormatPane(), null},
+ new Component[]{getRichTextValueFormatPane(), null},
+ new Component[]{getRichTextChangedValueFormatPane(), null},
+ new Component[]{getRichTextChangedPercentFormatPane(), null}
};
}
}
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 63490eaffa..f5999391f0 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/style/VanChartStructureTooltipContentPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/style/VanChartStructureTooltipContentPane.java
@@ -1,13 +1,21 @@
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;
+import com.fr.van.chart.designer.component.format.CategoryNameFormatPaneWithoutCheckBox;
import com.fr.van.chart.designer.component.format.PercentFormatPaneWithCheckBox;
+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;
@@ -22,36 +30,91 @@ public class VanChartStructureTooltipContentPane extends VanChartTooltipContentP
}
@Override
- protected Component[][] getPaneComponents(){
+ protected Component[][] getPaneComponents() {
return new Component[][]{
- new Component[]{categoryNameFormatPane,null},
- new Component[]{seriesNameFormatPane,null},
- new Component[]{valueFormatPane,null}
+ new Component[]{getCategoryNameFormatPane(), null},
+ new Component[]{getSeriesNameFormatPane(), null},
+ new Component[]{getValueFormatPane(), null}
};
}
@Override
- protected void initFormatPane(VanChartStylePane parent, JPanel showOnPane){
- categoryNameFormatPane = new CategoryNameFormatPaneWithCheckBox(parent, showOnPane){
+ protected Component[][] getRichTextComponents() {
+ return new Component[][]{
+ new Component[]{getRichTextCategoryNameFormatPane(), null},
+ new Component[]{getRichTextSeriesNameFormatPane(), null},
+ new Component[]{getRichTextValueFormatPane(), null}
+ };
+ }
+
+ @Override
+ protected void initFormatPane(VanChartStylePane parent, JPanel showOnPane) {
+ CategoryNameFormatPaneWithCheckBox categoryNameFormatPane = new CategoryNameFormatPaneWithCheckBox(parent, showOnPane) {
@Override
protected String getCheckBoxText() {
- return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Node_Name");
+ return Toolkit.i18nText("Fine-Design_Chart_Node_Name");
}
};
- seriesNameFormatPane = new SeriesNameFormatPaneWithCheckBox(parent, showOnPane){
+ SeriesNameFormatPaneWithCheckBox seriesNameFormatPane = new SeriesNameFormatPaneWithCheckBox(parent, showOnPane) {
@Override
protected String getCheckBoxText() {
- return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_MultiPie_Series_Name");
+ return Toolkit.i18nText("Fine-Design_Chart_MultiPie_Series_Name");
+ }
+ };
+ ValueFormatPaneWithCheckBox valueFormatPane = new ValueFormatPaneWithCheckBox(parent, showOnPane);
+ PercentFormatPaneWithCheckBox percentFormatPane = new PercentFormatPaneWithCheckBox(parent, showOnPane);
+
+ setCategoryNameFormatPane(categoryNameFormatPane);
+ setSeriesNameFormatPane(seriesNameFormatPane);
+ setValueFormatPane(valueFormatPane);
+ setPercentFormatPane(percentFormatPane);
+ }
+
+ protected void initRichTextFormatPane(VanChartStylePane parent, JPanel showOnPane) {
+ CategoryNameFormatPaneWithoutCheckBox richTextCategoryNameFormatPane = new CategoryNameFormatPaneWithoutCheckBox(parent, showOnPane) {
+ protected String getCheckBoxText() {
+ return Toolkit.i18nText("Fine-Design_Chart_Node_Name");
}
};
- valueFormatPane = new ValueFormatPaneWithCheckBox(parent, showOnPane);
- percentFormatPane = new PercentFormatPaneWithCheckBox(parent, showOnPane);
+ SeriesNameFormatPaneWithoutCheckBox richTextSeriesNameFormatPane = new SeriesNameFormatPaneWithoutCheckBox(parent, showOnPane) {
+ protected String getCheckBoxText() {
+ return Toolkit.i18nText("Fine-Design_Chart_MultiPie_Series_Name");
+ }
+ };
+ ValueFormatPaneWithoutCheckBox richTextValueFormatPane = new ValueFormatPaneWithoutCheckBox(parent, showOnPane);
+ PercentFormatPaneWithoutCheckBox richTextPercentFormatPane = new PercentFormatPaneWithoutCheckBox(parent, showOnPane);
+
+ setRichTextCategoryNameFormatPane(richTextCategoryNameFormatPane);
+ setRichTextSeriesNameFormatPane(richTextSeriesNameFormatPane);
+ setRichTextValueFormatPane(richTextValueFormatPane);
+ 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
new file mode 100644
index 0000000000..cab4d85584
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/wordcloud/designer/style/VanChartWordCloudRefreshTooltipContentPane.java
@@ -0,0 +1,83 @@
+package com.fr.van.chart.wordcloud.designer.style;
+
+
+import com.fr.design.i18n.Toolkit;
+import com.fr.van.chart.designer.component.format.ChangedPercentFormatPaneWithCheckBox;
+import com.fr.van.chart.designer.component.format.ChangedPercentFormatPaneWithoutCheckBox;
+import com.fr.van.chart.designer.component.format.ChangedValueFormatPaneWithCheckBox;
+import com.fr.van.chart.designer.component.format.ChangedValueFormatPaneWithoutCheckBox;
+import com.fr.van.chart.designer.style.VanChartStylePane;
+
+import javax.swing.JPanel;
+import java.awt.Component;
+
+/**
+ * Created by mengao on 2017/6/9.
+ */
+public class VanChartWordCloudRefreshTooltipContentPane extends VanChartWordCloudTooltipContentPane {
+ public VanChartWordCloudRefreshTooltipContentPane(VanChartStylePane parent, JPanel showOnPane) {
+ super(null, showOnPane);
+ }
+
+ @Override
+ protected void initFormatPane(VanChartStylePane parent, JPanel showOnPane) {
+ super.initFormatPane(parent, showOnPane);
+
+ ChangedValueFormatPaneWithCheckBox changedValueFormatPane = new ChangedValueFormatPaneWithCheckBox(parent, showOnPane) {
+ @Override
+ protected String getCheckBoxText() {
+ return Toolkit.i18nText("Fine-Design_Chart_Change_Word_Value");
+ }
+ };
+
+ ChangedPercentFormatPaneWithCheckBox changedPercentFormatPane = new ChangedPercentFormatPaneWithCheckBox(parent, showOnPane);
+
+ setChangedValueFormatPane(changedValueFormatPane);
+ setChangedPercentFormatPane(changedPercentFormatPane);
+ }
+
+ protected void initRichTextFormatPane(VanChartStylePane parent, JPanel showOnPane) {
+ super.initRichTextFormatPane(parent, showOnPane);
+
+ ChangedValueFormatPaneWithoutCheckBox richTextChangedValueFormatPane = new ChangedValueFormatPaneWithoutCheckBox(parent, showOnPane) {
+ protected String getCheckBoxText() {
+ return Toolkit.i18nText("Fine-Design_Chart_Change_Word_Value");
+ }
+ };
+
+ ChangedPercentFormatPaneWithoutCheckBox richTextChangedPercentFormatPane = new ChangedPercentFormatPaneWithoutCheckBox(parent, showOnPane);
+
+ setRichTextChangedValueFormatPane(richTextChangedValueFormatPane);
+ setRichTextChangedPercentFormatPane(richTextChangedPercentFormatPane);
+ }
+
+ protected boolean supportRichEditor() {
+ return false;
+ }
+
+ protected double[] getRowSize(double p) {
+ return new double[]{p, p, p, p, p, p};
+ }
+
+ protected Component[][] getPaneComponents() {
+ return new Component[][]{
+ new Component[]{getCategoryNameFormatPane(), null},
+ new Component[]{getSeriesNameFormatPane(), null},
+ new Component[]{getValueFormatPane(), null},
+ new Component[]{getChangedValueFormatPane(), null},
+ new Component[]{getPercentFormatPane(), null},
+ new Component[]{getChangedPercentFormatPane(), null},
+ };
+ }
+
+ protected Component[][] getRichTextComponents() {
+ return new Component[][]{
+ new Component[]{getRichTextCategoryNameFormatPane(), null},
+ new Component[]{getRichTextSeriesNameFormatPane(), null},
+ new Component[]{getRichTextValueFormatPane(), null},
+ new Component[]{getRichTextChangedValueFormatPane(), null},
+ new Component[]{getRichTextPercentFormatPane(), null},
+ new Component[]{getRichTextChangedPercentFormatPane(), null}
+ };
+ }
+}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/wordcloud/designer/style/VanChartWordCloudRefreshTootipContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/wordcloud/designer/style/VanChartWordCloudRefreshTootipContentPane.java
deleted file mode 100644
index 4f748214f8..0000000000
--- a/designer-chart/src/main/java/com/fr/van/chart/wordcloud/designer/style/VanChartWordCloudRefreshTootipContentPane.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.fr.van.chart.wordcloud.designer.style;
-
-
-import com.fr.van.chart.designer.component.format.ChangedPercentFormatPaneWithCheckBox;
-import com.fr.van.chart.designer.component.format.ChangedValueFormatPaneWithCheckBox;
-import com.fr.van.chart.designer.style.VanChartStylePane;
-
-import javax.swing.JPanel;
-import java.awt.Component;
-
-/**
- * Created by mengao on 2017/6/9.
- */
-public class VanChartWordCloudRefreshTootipContentPane extends VanChartWordCloudTooltipContentPane {
- public VanChartWordCloudRefreshTootipContentPane(VanChartStylePane parent, JPanel showOnPane) {
- super(null, showOnPane);
- }
-
- @Override
- protected void initFormatPane(VanChartStylePane parent, JPanel showOnPane) {
- super.initFormatPane(parent, showOnPane);
-
- changedValueFormatPane = new ChangedValueFormatPaneWithCheckBox(parent, showOnPane){
- @Override
- protected String getCheckBoxText() {
- return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Change_Word_Value");
- }
- };
-
- changedPercentFormatPane = new ChangedPercentFormatPaneWithCheckBox(parent, showOnPane);
- }
-
- protected double[] getRowSize(double p){
- return new double[]{p,p,p,p,p,p};
- }
-
- protected Component[][] getPaneComponents(){
- return new Component[][]{
- new Component[]{categoryNameFormatPane,null},
- new Component[]{seriesNameFormatPane,null},
- new Component[]{valueFormatPane,null},
- new Component[]{changedValueFormatPane,null},
- new Component[]{percentFormatPane,null},
- new Component[]{changedPercentFormatPane,null},
- };
- }
-}
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 08845b2b7a..c0e9ac6c37 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/wordcloud/designer/style/VanChartWordCloudTooltipContentPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/wordcloud/designer/style/VanChartWordCloudTooltipContentPane.java
@@ -1,13 +1,18 @@
package com.fr.van.chart.wordcloud.designer.style;
+import com.fr.design.i18n.Toolkit;
import com.fr.plugin.chart.base.AttrTooltipContent;
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;
+import com.fr.van.chart.designer.component.format.CategoryNameFormatPaneWithoutCheckBox;
import com.fr.van.chart.designer.component.format.PercentFormatPaneWithCheckBox;
+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.style.VanChartStylePane;
import javax.swing.JPanel;
@@ -22,31 +27,61 @@ public class VanChartWordCloudTooltipContentPane extends VanChartTooltipContentP
@Override
protected void initFormatPane(VanChartStylePane parent, JPanel showOnPane) {
- categoryNameFormatPane = new CategoryNameFormatPaneWithCheckBox(parent, showOnPane){
+ CategoryNameFormatPaneWithCheckBox categoryNameFormatPane = new CategoryNameFormatPaneWithCheckBox(parent, showOnPane) {
@Override
protected String getCheckBoxText() {
- return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_MultiPie_Series_Name");
+ return Toolkit.i18nText("Fine-Design_Chart_MultiPie_Series_Name");
}
};
- seriesNameFormatPane = new SeriesNameFormatPaneWithCheckBox(parent, showOnPane){
+ SeriesNameFormatPaneWithCheckBox seriesNameFormatPane = new SeriesNameFormatPaneWithCheckBox(parent, showOnPane) {
@Override
protected String getCheckBoxText() {
- return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Word_Name");
+ return Toolkit.i18nText("Fine-Design_Chart_Word_Name");
}
};
- valueFormatPane = new ValueFormatPaneWithCheckBox(parent, showOnPane){
+ ValueFormatPaneWithCheckBox valueFormatPane = new ValueFormatPaneWithCheckBox(parent, showOnPane) {
@Override
protected String getCheckBoxText() {
- return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Word_Value");
+ return Toolkit.i18nText("Fine-Design_Chart_Word_Value");
}
};
- percentFormatPane = new PercentFormatPaneWithCheckBox(parent, showOnPane);
+ PercentFormatPaneWithCheckBox percentFormatPane = new PercentFormatPaneWithCheckBox(parent, showOnPane);
+
+ setCategoryNameFormatPane(categoryNameFormatPane);
+ setSeriesNameFormatPane(seriesNameFormatPane);
+ setValueFormatPane(valueFormatPane);
+ setPercentFormatPane(percentFormatPane);
+ }
+
+ protected void initRichTextFormatPane(VanChartStylePane parent, JPanel showOnPane) {
+ CategoryNameFormatPaneWithoutCheckBox richTextCategoryNameFormatPane = new CategoryNameFormatPaneWithoutCheckBox(parent, showOnPane) {
+ protected String getCheckBoxText() {
+ return Toolkit.i18nText("Fine-Design_Chart_MultiPie_Series_Name");
+ }
+ };
+ SeriesNameFormatPaneWithoutCheckBox richTextSeriesNameFormatPane = new SeriesNameFormatPaneWithoutCheckBox(parent, showOnPane) {
+ protected String getCheckBoxText() {
+ return Toolkit.i18nText("Fine-Design_Chart_Word_Name");
+ }
+ };
+ ValueFormatPaneWithoutCheckBox richTextValueFormatPane = new ValueFormatPaneWithoutCheckBox(parent, showOnPane) {
+ protected String getCheckBoxText() {
+ return Toolkit.i18nText("Fine-Design_Chart_Word_Value");
+ }
+ };
+ PercentFormatPaneWithoutCheckBox richTextPercentFormatPane = new PercentFormatPaneWithoutCheckBox(parent, showOnPane);
+
+ setRichTextCategoryNameFormatPane(richTextCategoryNameFormatPane);
+ setRichTextSeriesNameFormatPane(richTextSeriesNameFormatPane);
+ setRichTextValueFormatPane(richTextValueFormatPane);
+ setRichTextPercentFormatPane(richTextPercentFormatPane);
}
@Override
protected AttrTooltipContent createAttrTooltip() {
AttrTooltipContent attrTooltipContent = new AttrTooltipContent();
attrTooltipContent.setSeriesFormat(new AttrTooltipNameFormat());
+ attrTooltipContent.setRichTextSeriesFormat(new AttrTooltipNameFormat());
return attrTooltipContent;
}
}
diff --git a/designer-chart/src/main/resources/com/fr/design/editor/rich_editor.css b/designer-chart/src/main/resources/com/fr/design/editor/rich_editor.css
new file mode 100644
index 0000000000..27eb74d9b2
--- /dev/null
+++ b/designer-chart/src/main/resources/com/fr/design/editor/rich_editor.css
@@ -0,0 +1,22 @@
+.editor-insert-param-inactivated-font .b-font {
+ *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.editor-insert-param-inactivated-font .b-font:before {
+ content: "\e6ea";
+ color: inherit;
+}
+.editor-insert-param-inactivated-font.disabled .b-font:before {
+ content: "\e6ea";
+ color: inherit;
+}
+.editor-insert-param-active-font .b-font {
+ *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.editor-insert-param-active-font .b-font:before {
+ content: "\e6ea";
+ color: #23beef;
+}
+.editor-insert-param-active-font.disabled .b-font:before {
+ content: "\e6ea";
+ color: #23beef;
+}
\ No newline at end of file
diff --git a/designer-chart/src/main/resources/com/fr/design/editor/rich_editor.html b/designer-chart/src/main/resources/com/fr/design/editor/rich_editor.html
new file mode 100644
index 0000000000..07fbb3ec72
--- /dev/null
+++ b/designer-chart/src/main/resources/com/fr/design/editor/rich_editor.html
@@ -0,0 +1,150 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/designer-chart/src/main/resources/com/fr/design/editor/script/editor.constant.js b/designer-chart/src/main/resources/com/fr/design/editor/script/editor.constant.js
new file mode 100644
index 0000000000..3642aed285
--- /dev/null
+++ b/designer-chart/src/main/resources/com/fr/design/editor/script/editor.constant.js
@@ -0,0 +1,6 @@
+!(function () {
+
+ BI.constant("bi.constant.design.chart.common.editor.placeholder_style", {
+ fontColor: "#c4c9d1"
+ });
+}());
\ No newline at end of file
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
new file mode 100644
index 0000000000..e8d9e9a56e
--- /dev/null
+++ b/designer-chart/src/main/resources/com/fr/design/editor/script/editor.js
@@ -0,0 +1,257 @@
+!(function () {
+ var Widget = BI.inherit(BI.Widget, {
+ props: {
+ baseCls: "bi-design-chart-common-editor",
+ isAuto: true,
+ content: "",
+ placeholder: "",
+ fontStyle: {},
+ dimensionIds: [],
+ toolbar: {
+ buttons: []
+ },
+ textAlign: "center"
+ },
+
+ _store: function () {
+ var o = this.options;
+
+ return BI.Models.getModel("bi.model.design.chart.common.editor", {
+ dimensionIds: o.dimensionIds,
+ isAuto: o.isAuto
+ });
+ },
+
+ render: function () {
+ var self = this, o = this.options;
+ this.editor = BI.createWidget({
+ type: "bi.nic_editor",
+ $value: "chart-common-editor",
+ cls: "editor bi-border bi-focus-shadow " + (o.textAlign === "center" ? "editor-center-text" : ""),
+ listeners: [{
+ eventName: BI.NicEditor.EVENT_FOCUS,
+ action: function () {
+ self.clearPlaceholder();
+ self.store.setEditorBlurState(false);
+ }
+ }, {
+ eventName: BI.NicEditor.EVENT_BLUR,
+ action: function () {
+ self.setPlaceholder();
+ self.store.setEditorBlurState(true);
+ }
+ }]
+ });
+
+ return {
+ type: "bi.vtape",
+ ref: function (_ref) {
+ self.bar = _ref;
+ },
+ items: [{
+ type: "bi.htape",
+ items: [{
+ type: "bi.label",
+ text: "字体样式: ",
+ textAlign: "left",
+ width: 70
+ }, {
+ type: "bi.button_group",
+ items: this.model.fontStyleItems,
+ ref: function (_ref) {
+ self.fontStyleGroup = _ref;
+ },
+ listeners: [{
+ eventName: BI.ButtonGroup.EVENT_CHANGE,
+ action: function () {
+ var isAuto = this.getValue()[0];
+ self.store.changeIsAuto(isAuto);
+ self.changeFontStyleMode(isAuto);
+ }
+ }],
+ layouts: [{
+ type: "bi.left",
+ rgap: 5
+ }],
+ value: this.model.mode,
+ width: 125
+ }, this._getToolBar()],
+ height: 24
+ }, {
+ el: this.editor,
+ tgap: 10
+ }]
+ };
+ },
+
+ _getToolBar: function () {
+ var self = this;
+ return {
+ type: "bi.design.chart.common.editor.toolbar",
+ cls: "toolbar-region",
+ wId: this.options.wId,
+ editor: this.editor,
+ buttons: this.options.toolbar.buttons,
+ ref: function (_ref) {
+ self.toolbar = _ref;
+ }
+ };
+ },
+
+ mounted: function () {
+ this.editor.bindToolbar(this.bar);
+ this.editor.setValue(this._formatContent(this.options.content));
+ this.setFocus();
+ },
+
+ _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) {
+ var attrs = editorService.getImageAttr(imageStr);
+ var str = "";
+ });
+
+ return result;
+ },
+
+ getValue: function () {
+ var editorService = BI.Services.getService("bi.service.design.chart.common.editor");
+ var value = this._cleanHtml(this.editor.getValue(BI.NicEditor.FormatType.ESCAPE));
+ // BI.each(this.model.dimensionIds, function (idx, dId) {
+ // var fullName = BI.Utils.getNotGeoDimensionFullName(dId);
+ // value = editorService.appendImageAttr(value, fullName, BICst.RICH_TEXT_INFO.DATA_ID, dId);
+ // });
+
+ if (editorService.isEmptyRichText(value)) {
+ value = "";
+ }
+
+ if (BI.isNotEmptyString(this.options.placeholder) && editorService.isRichTextEqual(value, this.options.placeholder)) {
+ value = null;
+ }
+
+ return {
+ isAuto: this.model.isAuto,
+ content: BI.NicEditor.htmlDecode(value)
+ };
+ },
+
+ setValue: function (obj) {
+ var keys = BI.keys(obj);
+ if (BI.contains(keys, "content")) {
+ this.editor.setValue(this._formatContent(obj.content));
+ }
+ if (BI.contains(keys, "isAuto")) {
+ this.store.changeIsAuto(obj.isAuto);
+ this.fontStyleGroup.setValue(obj.isAuto);
+ }
+ if (BI.contains(keys, "dimensionIds")) {
+ this.store.changeDimensionIds(obj.dimensionIds);
+ }
+ },
+
+ _formatContent: function (content) {
+ var editorService = BI.Services.getService("bi.service.design.chart.common.editor");
+
+ content = editorService.setImageSrc(content);
+
+ if (editorService.isBlankRichText(content)
+ || editorService.isRichTextEqual(content, this.options.placeholder)) {
+ content = this.options.placeholder || "";
+ }
+
+ return content;
+ },
+
+ // 切换到“自动”时的处理方法
+ _switchToAutoStyle: function () {
+ var editorService = BI.Services.getService("bi.service.design.chart.common.editor"),
+ content = this.editor.getValue(BI.NicEditor.FormatType.ESCAPE),
+ isEqualToPlaceholder = editorService.isRichTextEqual(content, this.options.placeholder);
+
+ var HTML_ONLY_STYLE_TAG = "|||||||||||||||||
";
+
+ if (!isEqualToPlaceholder) {
+ content = content.replaceAll(HTML_ONLY_STYLE_TAG, "");
+ }
+
+ return content;
+ },
+
+ clearPlaceholder: function () {
+ var editorService = BI.Services.getService("bi.service.design.chart.common.editor");
+ var content = this.editor.getValue(BI.NicEditor.FormatType.ESCAPE);
+ var isSameContent = editorService.isRichTextEqual(content, this.options.placeholder);
+
+ if (isSameContent) {
+ content = editorService.convertText2RichText("", this.options.fontStyle);
+ this.editor.setValue(content);
+ this.setFocus();
+ }
+ },
+
+ setPlaceholder: function () {
+ var editorService = BI.Services.getService("bi.service.design.chart.common.editor");
+ var content = this.editor.getValue(BI.NicEditor.FormatType.ESCAPE);
+ var isSameContent = editorService.isBlankRichText(content);
+
+ if (isSameContent) {
+ this.editor.setValue(this.options.placeholder);
+ }
+ },
+
+ // 字体样式切换
+ changeFontStyleMode: function (isAuto) {
+ var editorService = BI.Services.getService("bi.service.design.chart.common.editor");
+ var switchFn = this.options.switchFn,
+ content = this.editor.getValue(BI.NicEditor.FormatType.ESCAPE),
+ origin = content;
+ if (isAuto) {
+ content = this._switchToAutoStyle();
+ this.setFocus();
+ } else if (editorService.isRichTextEqual(content, this.options.placeholder)) {
+ content = "";
+ }
+ if (BI.isFunction(switchFn)) {
+ content = switchFn(isAuto, content);
+ }
+ if (content !== origin) {
+ this.editor.setValue(content);
+ }
+ },
+
+ setFocus: function () {
+ var instance = this.editor.instance;
+ instance && instance.initSelection();
+ }
+ });
+
+ Widget.EVENT_CHANGE = "EVENT_CHANGE";
+
+ BI.shortcut("bi.design.chart.common.editor", Widget);
+
+}());
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
new file mode 100644
index 0000000000..f430fea6c5
--- /dev/null
+++ b/designer-chart/src/main/resources/com/fr/design/editor/script/editor.model.js
@@ -0,0 +1,57 @@
+!(function () {
+
+ var Model = BI.inherit(Fix.Model, {
+ childContext: ["isAuto", "dimensionIds"],
+
+ state: function () {
+ var o = this.options;
+
+ return {
+ isAuto: o.isAuto,
+ dimensionIds: o.dimensionIds,
+ isEditorBlur: true
+ };
+ },
+
+ computed: {
+ fontStyleItems: function () {
+ return [{
+ type: "bi.single_select_radio_item",
+ text: "自动",
+ hgap: 5,
+ logic: {
+ dynamic: true
+ },
+ value: true,
+ selected: this.options.isAuto
+ }, {
+ type: "bi.single_select_radio_item",
+ text: "自定义",
+ hgap: 5,
+ logic: {
+ dynamic: true
+ },
+ value: false,
+ selected: !this.options.isAuto
+ }];
+ }
+ },
+
+ actions: {
+ changeIsAuto: function (isAuto) {
+ this.model.isAuto = isAuto;
+ },
+
+ changeDimensionIds: function (dimensionIds) {
+ this.model.dimensionIds = dimensionIds;
+ },
+
+ setEditorBlurState: function (isBlur) {
+ this.model.isEditorBlur = isBlur;
+ }
+ }
+ });
+
+ BI.model("bi.model.design.chart.common.editor", Model);
+
+}());
diff --git a/designer-chart/src/main/resources/com/fr/design/editor/script/editor.service.js b/designer-chart/src/main/resources/com/fr/design/editor/script/editor.service.js
new file mode 100644
index 0000000000..87fa2bdf62
--- /dev/null
+++ b/designer-chart/src/main/resources/com/fr/design/editor/script/editor.service.js
@@ -0,0 +1,562 @@
+!(function () {
+
+ /**
+ * HTML解析类,使用方法:
+ * new HTMLParser().parse(htmlText, {
+ * startTag: function (tagName, attrs) {},
+ * endTag: function (tagName) {},
+ * text: function (text) {}
+ * })
+ */
+ function HTMLParser () {
+
+ }
+
+ HTMLParser.prototype = {
+ constructor: HTMLParser,
+
+ startTagPattern: /<([-\w\d_]+)\s*([^>]*)\s*(\/?)>/,
+ endTagPattern: /^<\/([-\w\d_]+)[^>]*>/,
+ attrPattern: /([-\w\d_]+)\s*=\s*["']([^"']*)["']/g,
+ // 特殊的字符
+ specialCharsPatterns: [{
+ pattern: / /g,
+ subStr: " "
+ }, {
+ pattern: /</g,
+ subStr: "<"
+ }, {
+ pattern: />/g,
+ subStr: ">"
+ }, {
+ pattern: /&/g,
+ subStr: "&"
+ }],
+
+ handle: {
+ // 以下为处理开始标签和文本的时候触发的函数,可以自定义
+ startTag: function () {
+ },
+ endTag: function () {
+ },
+ text: function () {
+ }
+ },
+
+ /**
+ *
+ * @param html
+ * @param handle
+ * @param isReplaceSpecialChars 是否需要替换HTML中的特殊字符
+ */
+ parse: function (html, handle, isReplaceSpecialChars) {
+ var index, isText = false,
+ match, last = html,
+ me = this;
+
+ isReplaceSpecialChars = isReplaceSpecialChars !== null ? isReplaceSpecialChars : true;
+
+ if (BI.isPlainObject(handle)) {
+ BI.isFunction(handle.startTag) && (this.handle.startTag = handle.startTag);
+ BI.isFunction(handle.endTag) && (this.handle.endTag = handle.endTag);
+ BI.isFunction(handle.text) && (this.handle.text = handle.text);
+ }
+
+ while (html) {
+ isText = true;
+
+ // 结束标签
+ if (html.indexOf("") === 0) {
+ match = html.match(this.endTagPattern);
+
+ if (match) {
+ html = html.substring(match[0].length);
+ match[0].replace(this.endTagPattern, function () {
+ me._parseEndTag.apply(me, arguments);
+ });
+ isText = false;
+ }
+ } else if (html.indexOf("<") === 0) {
+ // 遇到起始的标签,提取标签名称和属性之类的
+ match = html.match(this.startTagPattern);
+
+ if (match) {
+ html = html.substring(match[0].length);
+ match[0].replace(this.startTagPattern, function () {
+ me._parseStartTag.apply(me, arguments);
+ });
+ isText = false;
+ }
+ }
+
+ // 仅仅是一行文本的情况
+ if (isText) {
+ index = html.indexOf("<");
+
+ var text = index < 0 ? html : html.substring(0, index);
+ html = index < 0 ? "" : html.substring(index);
+
+ if (isReplaceSpecialChars) {
+ BI.each(this.specialCharsPatterns, function (idx, obj) {
+ text = text.replace(obj.pattern, obj.subStr);
+ });
+ }
+
+ this.handle.text(text);
+ }
+
+ if (html === last) {
+ throw "Parse Error: " + html;
+ }
+
+ last = html;
+ }
+
+ this._parseEndTag();
+ },
+
+ /**
+ * 解析开始标签的字符串
+ * @param all 整个需要解析的字符串
+ * @param tagName
+ * @param rest 除去tagNAme之后allString剩下的部分
+ */
+ _parseStartTag: function (all, tagName, rest) {
+ tagName = tagName.toLowerCase();
+
+ var attrs = [];
+
+ rest.replace(this.attrPattern, function (all, attrName, value) {
+ attrs.push({
+ name: attrName,
+ value: value,
+ escaped: value.replace(/(^|[^\\])"/g, "$1\\\"")
+ });
+ });
+
+ tagName && this.handle.startTag(tagName, attrs);
+ },
+
+ /**
+ * 解析关闭的标签
+ */
+ _parseEndTag: function (all, tagName) {
+ tagName && this.handle.endTag(tagName);
+ }
+ };
+
+ // 获取一个HTML字符串中image的属性
+ function getImageAttr (html) {
+ var htmlParse = new HTMLParser();
+ var imageAttr;
+
+ htmlParse.parse(html, {
+ startTag: function (tagName, attrs) {
+ if (tagName === "img") {
+ imageAttr = {};
+ BI.each(attrs, function (idx, attr) {
+ imageAttr[attr.name] = attr.value;
+ });
+ }
+ }
+ });
+
+ return imageAttr;
+ }
+
+ var Service = BI.inherit(BI.OB, {
+
+ encode: function (params) {
+ if (/[<>'$%{}"]/.test(params)) {
+ return window.encodeURIComponent(params).replace(/'/g, escape);
+ }
+ return params;
+ },
+
+ decode: function (params) {
+ try {
+ var result = window.decodeURIComponent(params);
+ if (/[<>'$%{}"]/.test(result)) {
+ return result;
+ }
+ return params;
+ } catch (e) {
+ return params;
+ }
+ },
+
+ HTMLParser: HTMLParser,
+
+ getImageAttr: getImageAttr,
+
+ /**
+ * 构造一个富文本中的参数图片
+ */
+ getEditorParamImage: function (param, fillStyle) {
+ var attr = BI.DOM.getImage(param, fillStyle);
+ return "";
+ },
+
+ /**
+ * 给image设置属性
+ */
+ appendImageAttr: function (html, altValue, attrName, attrValue, isCovered) {
+ altValue = this.encode(altValue);
+ attrName = this.encode(attrName);
+ attrValue = this.encode(attrValue);
+ isCovered = isCovered || false; // 属性是否可以覆盖
+
+ return html.replaceAll("", function (imageStr) {
+ var attrs = getImageAttr(imageStr);
+
+ if (attrs && attrs["alt"] === altValue && (BI.isNull(attrs[attrName]) || isCovered)) {
+ attrs[attrName] = attrValue;
+ imageStr = "";
+ }
+ return imageStr;
+ });
+ },
+
+ /**
+ * 将普通的文本转化成富文本字符串
+ */
+ convertText2RichText: function (text, fontStyle, fontProcessFn) {
+ fontStyle = fontStyle || {};
+
+ if (BI.isEmptyString(text)) {
+ return text;
+ }
+
+ var lines = text.split("\n"),
+ pattern = "\\$\\{(.*?)\\}",
+ richText = "",
+ self = this,
+ html = self._getHtmlTagStr(fontStyle, fontProcessFn);
+
+ BI.each(lines, function (idx, lineText) {
+ // 替换参数为image
+ var newText = lineText.replaceAll(pattern, function (all, $1) {
+ return self.getEditorParamImage($1);
+ });
+ // 空字符串
+ if (!lineText) {
+ newText += "
";
+ }
+ richText += html.startHtml + newText + html.endHtml;
+ });
+
+ return richText;
+ },
+
+ /**
+ * 根据fontStyle构造标签
+ */
+ _getHtmlTagStr: function (fontStyle, fontProcessFn) {
+ var tags = [{
+ tag: "p",
+ style: {}
+ }],
+ obj,
+ startHtml = "",
+ endHtml = "";
+
+ // fontSize 为number值
+ if (fontStyle.fontSize) {
+ obj = {
+ tag: "font",
+ style: {"font-size": fontStyle.fontSize + "px"}
+ };
+ tags.push(obj);
+ }
+
+ // 字体一般用默认值,不需要处理,但是KPI指标卡例外
+ if (BI.isFunction(fontProcessFn)) {
+ tags.push(fontProcessFn());
+ }
+
+ // fontBold 为boolean值
+ if (fontStyle.fontBold) {
+ obj = {
+ tag: "b",
+ style: {}
+ };
+ tags.push(obj);
+ }
+
+ // italic 为boolean值
+ if (fontStyle.italic) {
+ obj = {
+ tag: "i",
+ style: {}
+ };
+ tags.push(obj);
+ }
+
+ // underline 为boolean值
+ if (fontStyle.underline) {
+ obj = {
+ tag: "u",
+ style: {}
+ };
+ tags.push(obj);
+ }
+
+
+ BI.each(tags, function (idx, item) {
+ startHtml += "<" + item.tag;
+
+ // set style
+ if (BI.isNotEmptyObject(item.style)) {
+ startHtml += " style=\"";
+ BI.each(item.style, function (key, value) {
+ startHtml += key + ":" + value + ";";
+ });
+ startHtml += "\"";
+ }
+
+ // set attributes
+ BI.each(item.attr, function (key, value) {
+ startHtml += " " + key + "=\"" + value + "\"";
+ });
+ startHtml += ">";
+ });
+
+ BI.each(tags.reverse(), function (idx, item) {
+ endHtml += "" + item.tag + ">";
+ });
+
+ return {
+ startHtml: startHtml,
+ endHtml: endHtml
+ };
+ },
+
+ /**
+ * 将富文本HTML转化成普通的文本,不需要记录fontStyle
+ */
+ convertRichText2Text: function (html) {
+ var content = "",
+ line = "",
+ htmlFragments = [];
+
+ new HTMLParser().parse(html, {
+ startTag: function (tagName, attrs) {
+ // 只关心br、img
+ switch (tagName) {
+ case "br":
+ line += "\n";
+ htmlFragments.push(tagName);
+ break;
+ case "img":
+ BI.each(attrs, function (idx, obj) {
+ if (obj.name === "alt") {
+ line += "${" + obj.value + "}";
+ }
+ });
+ break;
+ default:
+ break;
+ }
+ },
+ endTag: function (tagName) {
+ if (tagName === "div") {
+ //
这样的情况下应该只代表一个回车符
+ htmlFragments[htmlFragments.length - 1] !== "br" && (line += "\n");
+ htmlFragments = [];
+ }
+
+ content += line;
+ line = "";
+ },
+ text: function (text) {
+ htmlFragments.push(text);
+ line += text;
+ }
+ });
+
+ // 去掉最后的换行符
+ content = content.replace(/\n$/, "");
+
+ return content;
+ },
+
+ convertImage2Text: function (html) {
+ if (BI.isNull(html)) {
+ return html;
+ }
+ return html.replaceAll("", function (imageStr) {
+ var matched = imageStr.match(/alt="(.*?)"/);
+ var startHtml = "";
+ var endHtml = "";
+ return startHtml + (matched ? matched[1] : imageStr) + endHtml;
+ });
+ },
+
+ isRichTextEqual: function (html1, html2) {
+ if (BI.isNotNull(html1)) {
+ html1 = this.convertImage2Text(html1);
+ }
+ if (BI.isNotNull(html2)) {
+ html2 = this.convertImage2Text(html2);
+ }
+
+ return html1 === html2;
+ },
+
+ isRichTextNotEqual: function (html1, html2) {
+ return !this.isRichTextEqual(html1, html2);
+ },
+
+ isBlankRichText: function (html) {
+ html = html || "";
+ html = this.convertRichText2Text(html);
+ return BI.trim(html).length === 0;
+ },
+
+ // 显示整个富文本中缺失的字段
+ showMissingFields: function (html, validDimensionIds) {
+ var self = this;
+
+ return html.replaceAll("", function (imageStr) {
+ var attrs = getImageAttr(imageStr);
+ return attrs && BI.contains(validDimensionIds, attrs[BICst.RICH_TEXT_INFO.DATA_ID])
+ ? imageStr
+ : self.getMissingFieldImage(
+ attrs[BICst.RICH_TEXT_INFO.DATA_ID],
+ attrs[BICst.RICH_TEXT_INFO.DATA_NAME],
+ attrs[BICst.RICH_TEXT_INFO.ALT]
+ );
+ });
+ },
+
+ // 获取缺失元素的图片
+ getMissingFieldImage: function (dId, name, fullName) {
+ var missingText = "";
+ var missingImage = BI.DOM.getImage(missingText, "#ff0000");
+ var html = this.getEditorParamImage(fullName, "#ff0000");
+
+ // 将原来的dId、name、fullName保存起来
+ html = this.appendImageAttr(html, fullName, BICst.RICH_TEXT_INFO.DATA_ORIGIN_ID, dId);
+ html = this.appendImageAttr(html, fullName, BICst.RICH_TEXT_INFO.DATA_ORIGIN_NAME, name);
+ html = this.appendImageAttr(html, fullName, BICst.RICH_TEXT_INFO.DATA_ORIGIN_FULL_NAME, fullName);
+ html = this.appendImageAttr(html, fullName, BICst.RICH_TEXT_INFO.SRC, missingImage.src, true);
+ // 标记出这个参数是一个“缺失元素”
+ html = this.appendImageAttr(html, fullName, BICst.RICH_TEXT_INFO.DATA_IS_MISSING_FIELD, "true", true);
+ html = this.appendImageAttr(html, fullName, "style", missingImage.style, true);
+ return html;
+ },
+
+ // 将“缺失元素”替换成原来的字段
+ restoreMissingField: function (html) {
+ var self = this;
+
+ return html.replaceAll("", function (imageStr) {
+ var attrs = getImageAttr(imageStr);
+
+ if (attrs && attrs[BICst.RICH_TEXT_INFO.DATA_ORIGIN_ID]) {
+ var fullName = attrs[BICst.RICH_TEXT_INFO.DATA_ORIGIN_FULL_NAME];
+ var image = self.getEditorParamImage(fullName);
+
+ image = self.appendImageAttr(image, fullName, BICst.RICH_TEXT_INFO.DATA_ID, attrs[BICst.RICH_TEXT_INFO.DATA_ORIGIN_ID]);
+ image = self.appendImageAttr(image, fullName, BICst.RICH_TEXT_INFO.DATA_NAME, attrs[BICst.RICH_TEXT_INFO.DATA_ORIGIN_NAME]);
+ return image;
+ }
+
+ if (attrs
+ && attrs[BICst.RICH_TEXT_INFO.DATA_IS_INSERT_PARAM]
+ && !attrs[BICst.RICH_TEXT_INFO.DATA_ID]
+ ) {
+ imageStr = self.appendImageAttr(
+ imageStr,
+ attrs[BICst.RICH_TEXT_INFO.ALT],
+ BICst.RICH_TEXT_INFO.DATA_UN_VALID,
+ "true",
+ true
+ );
+ }
+
+ return imageStr;
+ });
+ },
+
+ // 将富文本字符串中由用户主动插入的字段参数标记出来
+ markTheInsertParamImages: function (html) {
+ return html.replaceAll("", function (imageStr) {
+ var attrs = getImageAttr(imageStr);
+
+ // "缺失元素"和普通的字段参数直接过滤(从富文本编辑器中插入的参数只有data-id属性)
+ if (BI.has(attrs, BICst.RICH_TEXT_INFO.DATA_NAME)
+ || BI.has(attrs, BICst.RICH_TEXT_INFO.DATA_ORIGIN_ID)) {
+ return imageStr;
+ }
+
+ attrs[BICst.RICH_TEXT_INFO.DATA_IS_INSERT_PARAM] = "true";
+ imageStr = "";
+ return imageStr;
+ });
+ },
+
+ // editor在getValue时因为src太大去掉了,在展示之前需要set 一下src
+ setImageSrc: function (content) {
+ var self = this;
+
+ return content && content.replaceAll("", function (imageStr) {
+ var attrs = self.getImageAttr(imageStr);
+ // 已有src
+ if (BI.has(attrs, BICst.RICH_TEXT_INFO.SRC) && attrs[BICst.RICH_TEXT_INFO.SRC]) {
+ return imageStr;
+ }
+ var alt = self.decode(attrs[BICst.RICH_TEXT_INFO.ALT]);
+ var image = BI.DOM.getImage(alt);
+ imageStr = self.appendImageAttr(imageStr, alt, BICst.RICH_TEXT_INFO.SRC, image.src, true);
+ imageStr = self.appendImageAttr(imageStr, alt, "style", image.style, true);
+ return imageStr;
+ });
+ },
+
+ isEmptyRichText: function (html) {
+ return "" === html.replaceAll("|
|
", "");
+ },
+
+ // BI-23091 设置显示名之后更新参数名称
+ getNewParamNameRichText: function (content) {
+ if (!content) {
+ return content;
+ }
+ var self = this;
+ return content.replaceAll("", function (imageStr) {
+ var attrs = self.getImageAttr(imageStr);
+ // 缺失元素
+ if (attrs[BICst.RICH_TEXT_INFO.DATA_IS_MISSING_FIELD]) {
+ return imageStr;
+ }
+ var alt = attrs[BICst.RICH_TEXT_INFO.ALT],
+ dId = attrs[BICst.RICH_TEXT_INFO.DATA_ID],
+ name = BI.Utils.getNotGeoDimensionFullName(dId);
+
+ if (name !== alt) {
+ imageStr = self.appendImageAttr(imageStr, alt, BICst.RICH_TEXT_INFO.ALT, name, true);
+ }
+ return imageStr;
+ });
+ }
+ });
+
+ BI.service("bi.service.design.chart.common.editor", Service);
+
+}());
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
new file mode 100644
index 0000000000..36c02fedaf
--- /dev/null
+++ b/designer-chart/src/main/resources/com/fr/design/editor/script/insertcombo/combo.insert_param.js
@@ -0,0 +1,106 @@
+!(function () {
+ var Widget = BI.inherit(BI.RichEditorParamAction, {
+ props: {
+ baseCls: "bi-design-chart-common-editor-insert-param",
+ dimensionIds: [],
+ editor: null
+ },
+
+ _store: function () {
+ return BI.Models.getModel("bi.model.design.chart.common.editor.insert_param");
+ },
+
+ watch: {
+ isSelectedParam: function () {
+ var editorService = BI.Services.getService("bi.service.design.chart.common.editor");
+ 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;
+
+ this.adapter = BI.createWidget({
+ type: "bi.button_group",
+ items: this.model.items,
+ chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE,
+ behaviors: {},
+ width: 200,
+ layouts: [{
+ type: "bi.vertical"
+ }],
+ listeners: [{
+ eventName: BI.ButtonGroup.EVENT_CHANGE,
+ action: function () {
+ self._savePosition();
+ self.store.changeParam(this.getValue()[0]);
+ }
+ }]
+ });
+
+ var searchPopup = {
+ type: "bi.vertical",
+ cls: "bi-border",
+ tgap: 10,
+ bgap: 10,
+ items: [this.adapter]
+ };
+
+ return {
+ type: "bi.combo",
+ direction: "bottom,left",
+ isNeedAdjustWidth: true,
+ el: {
+ type: "bi.vertical_adapt",
+ items: [{
+ type: "bi.icon_change_button",
+ iconCls: "editor-insert-param-inactivated-font",
+ iconWidth: 24,
+ iconHeight: 24,
+ ref: function (_ref) {
+ self.iconButtonTrigger = _ref;
+ }
+ }]
+ },
+ popup: {
+ el: searchPopup
+ },
+ ref: function (_ref) {
+ self.combo = _ref;
+ },
+ listeners: [{
+ eventName: BI.Combo.EVENT_AFTER_POPUPVIEW,
+ action: function () {
+ self.iconButtonTrigger.setIcon("editor-insert-param-active-font");
+ }
+ }, {
+ eventName: BI.Combo.EVENT_BEFORE_HIDEVIEW,
+ action: function () {
+ self.iconButtonTrigger.setIcon("editor-insert-param-inactivated-font");
+ }
+ }]
+ };
+ },
+
+ _savePosition: function () {
+ var instance = this._getInstance();
+ instance.saveRng();
+ },
+
+ _restorePosition: function () {
+ var instance = this._getInstance();
+ instance.initSelection();
+ },
+
+ _getInstance: function () {
+ return this.options.editor.selectedInstance || this.options.editor.getInstance();
+ }
+ });
+
+ BI.shortcut("bi.design.chart.common.editor.insert_param", Widget);
+}());
\ No newline at end of file
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
new file mode 100644
index 0000000000..10db72cd0e
--- /dev/null
+++ b/designer-chart/src/main/resources/com/fr/design/editor/script/insertcombo/combo.insert_param.model.js
@@ -0,0 +1,40 @@
+/*
+ * @Maintainers: xiaofu.qin
+ */
+!(function () {
+
+ var Model = BI.inherit(Fix.Model, {
+ context: ["dimensionIds"],
+
+ state: function () {
+ return {
+ param: "",
+ isSelectedParam: false
+ };
+ },
+
+ computed: {
+ items: function () {
+ return BI.map(this.model.dimensionIds, function (idx, dId) {
+ var key = BI.keys(dId)[0];
+
+ return {
+ type: "bi.design.chart.common.editor.search",
+ text: key,
+ value: key
+ };
+ });
+ }
+ },
+
+ actions: {
+ changeParam: function (param) {
+ this.model.isSelectedParam = !this.model.isSelectedParam;
+ this.model.param = param;
+ }
+ }
+ });
+
+ BI.model("bi.model.design.chart.common.editor.insert_param", Model);
+
+} ());
diff --git a/designer-chart/src/main/resources/com/fr/design/editor/script/insertcombo/item/item.js b/designer-chart/src/main/resources/com/fr/design/editor/script/insertcombo/item/item.js
new file mode 100644
index 0000000000..bfd5644414
--- /dev/null
+++ b/designer-chart/src/main/resources/com/fr/design/editor/script/insertcombo/item/item.js
@@ -0,0 +1,38 @@
+!(function () {
+
+ var Widget = BI.inherit(BI.BasicButton, {
+ props: {
+ text: "",
+ iconCls: "",
+ extraCls: "bi-list-item-active"
+ },
+
+ render: function () {
+ var o = this.options;
+ return {
+ type: "bi.vertical_adapt",
+ height: 25,
+ items: [{
+ type: "bi.center_adapt",
+ cls: o.iconCls,
+ items: [{
+ type: "bi.icon",
+ width: 16,
+ height: 16
+ }],
+ width: 16,
+ height: 16
+ }, {
+ type: "bi.label",
+ textAlign: "left",
+ lgap: 5,
+ text: o.text,
+ value: o.text
+ }]
+ };
+ }
+ });
+
+ BI.shortcut("bi.design.chart.common.editor.search", Widget);
+
+}());
\ No newline at end of file
diff --git a/designer-chart/src/main/resources/com/fr/design/editor/script/toolbar/disabled_bar_wrapper.js b/designer-chart/src/main/resources/com/fr/design/editor/script/toolbar/disabled_bar_wrapper.js
new file mode 100644
index 0000000000..5b07ea39ff
--- /dev/null
+++ b/designer-chart/src/main/resources/com/fr/design/editor/script/toolbar/disabled_bar_wrapper.js
@@ -0,0 +1,22 @@
+/**
+ * 灰化toolbar的item
+ */
+!(function () {
+
+ var Widget = BI.inherit(BI.Single, {
+ props: {
+ button: null
+ },
+
+ render: function () {
+ return {
+ type: "bi.vertical_adapt",
+ disabled: true,
+ items: [this.options.button]
+ };
+ }
+ });
+
+ BI.shortcut("bi.design.chart.common.editor.toolbar.disabled_item_wrapper", Widget);
+
+}());
\ No newline at end of file
diff --git a/designer-chart/src/main/resources/com/fr/design/editor/script/toolbar/toolbar.js b/designer-chart/src/main/resources/com/fr/design/editor/script/toolbar/toolbar.js
new file mode 100644
index 0000000000..4246ec9bcb
--- /dev/null
+++ b/designer-chart/src/main/resources/com/fr/design/editor/script/toolbar/toolbar.js
@@ -0,0 +1,124 @@
+!(function () {
+ var RichEditorTextToolbar = BI.inherit(BI.Widget, {
+
+ props: {
+ baseCls: "bi-rich-editor-text-toolbar",
+ height: 25,
+ editor: null,
+ buttons: [
+ {type: "bi.rich_editor_font_chooser"},
+ {type: "bi.rich_editor_size_chooser"},
+ {type: "bi.rich_editor_bold_button"},
+ {type: "bi.rich_editor_italic_button"},
+ {type: "bi.rich_editor_underline_button"},
+ {type: "bi.rich_editor_color_chooser"},
+ {type: "bi.rich_editor_align_left_button"},
+ {type: "bi.rich_editor_align_center_button"},
+ {type: "bi.rich_editor_align_right_button"},
+ {type: "bi.design.chart.common.editor.insert_param"}
+ ]
+ },
+
+ _store: function () {
+ return BI.Models.getModel("bi.model.design.chart.common.editor.toolbar");
+ },
+
+ watch: {
+ isAuto: function (isAuto) {
+ this[isAuto ? "hideCustomFontTool" : "showCustomFontTool"]();
+ }
+ },
+
+ render: function () {
+ var self = this,
+ o = this.options;
+
+ this.hasInsertCombo = o.buttons[o.buttons.length - 1].type === "bi.design.chart.common.editor.insert_param";
+
+ this.buttons = BI.createWidgets(BI.map(o.buttons, function (i, btn) {
+ return BI.extend(btn, {
+ editor: o.editor
+ });
+ }));
+
+ if (this.hasInsertCombo) {
+ var leftItems = BI.filter(this.buttons, function (idx) {
+ return idx !== self.buttons.length - 1;
+ });
+ return {
+ type: "bi.left_right_vertical_adapt",
+ lrgap: 10,
+ items: {
+ left: this._getButtons(leftItems),
+ right: [this.buttons[this.buttons.length - 1]]
+ }
+ };
+ }
+
+ return {
+ type: "bi.vertical_adapt",
+ rgap: 10,
+ items: this._getButtons(this.buttons)
+ };
+ },
+
+ mounted: function () {
+ var self = this;
+ if (BI.isIE9Below()) {// IE8下必须要设置unselectable才能不blur输入框
+ this.element.mousedown(function () {
+ self._noSelect(self.element[0]);
+ });
+ this._noSelect(this.element[0]);
+ }
+
+ this.model.isAuto && this.hideCustomFontTool();
+ },
+
+ _noSelect: function (element) {
+ if (element.setAttribute && element.nodeName.toLowerCase() !== "input" && element.nodeName.toLowerCase() !== "textarea") {
+ element.setAttribute("unselectable", "on");
+ }
+ for (var i = 0; i < element.childNodes.length; i++) {
+ this._noSelect(element.childNodes[i]);
+ }
+ },
+
+ hideCustomFontTool: function () {
+ var self = this;
+ BI.each(this.buttons, function (idx, button) {
+ if (self.hasInsertCombo) {
+ idx !== self.buttons.length - 1 && button.setVisible(false);
+ } else {
+ button.setVisible(false);
+ }
+ });
+ },
+
+ showCustomFontTool: function () {
+ var self = this;
+ BI.each(this.buttons, function (idx, button) {
+ if (self.hasInsertCombo) {
+ idx !== self.buttons.length - 1 && button.setVisible(true);
+ } else {
+ button.setVisible(true);
+ }
+ });
+ },
+
+ _getButtons: function (buttons) {
+ return BI.map(buttons, function (idx, button) {
+ if (button.options.used === false) {
+ return {
+ type: "bi.design.chart.common.editor.toolbar.disabled_item_wrapper",
+ button: button,
+ title: button.options.title
+ };
+ }
+
+ return button;
+ });
+ }
+ });
+
+ BI.shortcut("bi.design.chart.common.editor.toolbar", RichEditorTextToolbar);
+})();
\ No newline at end of file
diff --git a/designer-chart/src/main/resources/com/fr/design/editor/script/toolbar/toolbar.model.js b/designer-chart/src/main/resources/com/fr/design/editor/script/toolbar/toolbar.model.js
new file mode 100644
index 0000000000..96e30eee4d
--- /dev/null
+++ b/designer-chart/src/main/resources/com/fr/design/editor/script/toolbar/toolbar.model.js
@@ -0,0 +1,12 @@
+/*
+ * @Maintainers: xiaofu.qin
+ */
+!(function () {
+
+ var Model = BI.inherit(Fix.Model, {
+ context: ["isAuto", "wId", "dimensionIds"]
+ });
+
+ BI.model("bi.model.design.chart.common.editor.toolbar", Model);
+
+} ());
\ No newline at end of file
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 ff89f059ba..0f673e30ae 100644
--- a/designer-form/src/main/java/com/fr/design/designer/beans/models/SelectionModel.java
+++ b/designer-form/src/main/java/com/fr/design/designer/beans/models/SelectionModel.java
@@ -15,6 +15,7 @@ import com.fr.design.designer.creator.XWAbsoluteBodyLayout;
import com.fr.design.designer.creator.XWAbsoluteLayout;
import com.fr.design.designer.creator.XWFitLayout;
import com.fr.design.designer.creator.XWParameterLayout;
+import com.fr.design.designer.creator.cardlayout.XCardSwitchButton;
import com.fr.design.designer.creator.cardlayout.XWCardLayout;
import com.fr.design.designer.creator.cardlayout.XWCardMainBorderLayout;
import com.fr.design.designer.creator.cardlayout.XWTabFitLayout;
@@ -77,12 +78,13 @@ public class SelectionModel {
* @param e 鼠标事件
*/
public void selectACreatorAtMouseEvent(MouseEvent e) {
+ //单选因为要先从已选择的组件中筛选一遍,所以先选择再reset
+ XCreator comp = designer.getComponentAt(e);
if (e.getButton() == MouseEvent.BUTTON3 || (!InputEventBaseOnOS.isControlDown(e) && !e.isShiftDown())) {
// 如果Ctrl或者Shift键盘没有按下,则清除已经选择的组件
selection.reset();
} else {
//按下Ctrl或者shift键时鼠标可以进行多选,两次点击同一控件就取消选中
- XCreator comp = designer.getComponentAt(e);
XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer(comp).getTopLayout();
if (topLayout != null && !topLayout.isEditable()) {
comp = topLayout;
@@ -93,9 +95,9 @@ public class SelectionModel {
selection.removeCreator(selected);
}
}
+ comp = designer.getComponentAt(e);
}
// 获取e所在的组件
- XCreator comp = designer.getComponentAt(e);
selectACreator(comp);
}
@@ -110,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/beans/models/StateModel.java b/designer-form/src/main/java/com/fr/design/designer/beans/models/StateModel.java
index 1e7badb8a3..c5150baa56 100644
--- a/designer-form/src/main/java/com/fr/design/designer/beans/models/StateModel.java
+++ b/designer-form/src/main/java/com/fr/design/designer/beans/models/StateModel.java
@@ -300,6 +300,13 @@ public class StateModel {
int y = getMouseXY(e).y;
Rectangle bounds = createCurrentBounds(x, y);
+ // 有参数面板时 要考虑下参数面板的高度影响
+ int yOffset = 0;
+ XLayoutContainer paramComponent = designer.getParaComponent();
+ if (paramComponent != null) {
+ yOffset = paramComponent.getHeight();
+ }
+ bounds.y = Math.max(bounds.y - yOffset, 0);
if ((x != currentX) || (y != currentY)) {
ArrayList creators = getHotspotCreators(bounds, designer.getRootComponent());
diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XButton.java b/designer-form/src/main/java/com/fr/design/designer/creator/XButton.java
index 44996df8cd..9a627ab2c0 100644
--- a/designer-form/src/main/java/com/fr/design/designer/creator/XButton.java
+++ b/designer-form/src/main/java/com/fr/design/designer/creator/XButton.java
@@ -308,5 +308,4 @@ public class XButton extends XWidgetCreator {
}
}
-
}
diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XChartEditor.java b/designer-form/src/main/java/com/fr/design/designer/creator/XChartEditor.java
index b0f6e11589..c002bceb38 100644
--- a/designer-form/src/main/java/com/fr/design/designer/creator/XChartEditor.java
+++ b/designer-form/src/main/java/com/fr/design/designer/creator/XChartEditor.java
@@ -229,6 +229,9 @@ public class XChartEditor extends XBorderStyleWidgetCreator {
*/
public void paint(Graphics g) {
designerEditor.paintEditor(g, this.getSize());
+ if (coverPanel != null) {
+ coverPanel.setSize(this.getSize());
+ }
super.paint(g);
if (isEditing) {
g.setColor(INNER_BORDER_COLOR);
@@ -258,6 +261,7 @@ public class XChartEditor extends XBorderStyleWidgetCreator {
(e.getClickCount() == 2 || designer.getCursor().getType() == Cursor.HAND_CURSOR);
displayCoverPane(!isEditing);
selectionModel.selectACreatorAtMouseEvent(e);
+ editingMouseListener.refreshTopXCreator(isEditing);
if (editingMouseListener.stopEditing()) {
if (this != (XCreator) designer.getRootComponent()) {
@@ -357,4 +361,5 @@ public class XChartEditor extends XBorderStyleWidgetCreator {
public boolean supportMobileStyle() {
return false;
}
+
}
diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java b/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java
index dcb6938836..ec83a1f9a5 100644
--- a/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java
+++ b/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java
@@ -539,6 +539,8 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo
selectionModel.selectACreatorAtMouseEvent(e);
}
+ editingMouseListener.refreshTopXCreator();
+
if (editingMouseListener.stopEditing() && this != designer.getRootComponent()) {
ComponentAdapter adapter = AdapterBus.getComponentAdapter(designer, this);
editingMouseListener.startEditing(this, adapter.getDesignerEditor(), adapter);
@@ -798,10 +800,16 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo
/**
* 是否支持共享-现只支持报表块、图表、tab块、绝对布局
- * @return
*/
public boolean isSupportShared() {
return false;
}
+ /**
+ * 是否支持置顶显示
+ */
+ public boolean isTopable() {
+ return true;
+ }
+
}
diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XCreatorUtils.java b/designer-form/src/main/java/com/fr/design/designer/creator/XCreatorUtils.java
index 42069e4d8a..260318023e 100644
--- a/designer-form/src/main/java/com/fr/design/designer/creator/XCreatorUtils.java
+++ b/designer-form/src/main/java/com/fr/design/designer/creator/XCreatorUtils.java
@@ -336,4 +336,25 @@ public class XCreatorUtils {
}
return IOUtils.readIcon(iconPath);
}
+
+ public static boolean containComponent(Container ancestor, Container xCreator) {
+ while (xCreator != null && xCreator.getParent() != ancestor) {
+ xCreator = xCreator.getParent();
+ }
+ return xCreator != null;
+ }
+
+ /**
+ * 获取组件的上一层的XMainBorderLayout,没有则返回null
+ * */
+ @Nullable
+ public static XWCardMainBorderLayout getTopXMainBorderLayout(Container creator) {
+ while (creator != null) {
+ if (creator instanceof XWCardMainBorderLayout) {
+ return (XWCardMainBorderLayout) creator;
+ }
+ creator = creator.getParent();
+ }
+ return null;
+ }
}
\ No newline at end of file
diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XElementCase.java b/designer-form/src/main/java/com/fr/design/designer/creator/XElementCase.java
index ec06a1597d..718c30aeb6 100644
--- a/designer-form/src/main/java/com/fr/design/designer/creator/XElementCase.java
+++ b/designer-form/src/main/java/com/fr/design/designer/creator/XElementCase.java
@@ -319,6 +319,7 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme
public void respondClick(EditingMouseListener editingMouseListener,MouseEvent e){
HelpDialogManager.getInstance().setPane(coverPanel);
super.respondClick(editingMouseListener, e);
+ editingMouseListener.refreshTopXCreator();
if (this.isHelpBtnOnFocus()) {
coverPanel.setMsgDisplay(e);
} else {
@@ -370,4 +371,5 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme
public boolean isSupportShared() {
return true;
}
+
}
diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XNameWidget.java b/designer-form/src/main/java/com/fr/design/designer/creator/XNameWidget.java
index 2671017878..0f78c5739d 100644
--- a/designer-form/src/main/java/com/fr/design/designer/creator/XNameWidget.java
+++ b/designer-form/src/main/java/com/fr/design/designer/creator/XNameWidget.java
@@ -68,9 +68,6 @@ public class XNameWidget extends XWidgetCreator {
Widget widget;
if (wc != null && (widget= wc.toWidget()) != null) {
editor = XCreatorUtils.createXCreator(widget);
- Widget currentWidget = toData();
- currentWidget.setVisible(widget.isVisible());
- currentWidget.setEnabled(widget.isEnabled());
this.setBorder(null);
} else {
this.setBorder(DEFALUTBORDER);
diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XWAbsoluteBodyLayout.java b/designer-form/src/main/java/com/fr/design/designer/creator/XWAbsoluteBodyLayout.java
index 6190ffaebb..2c88e62525 100644
--- a/designer-form/src/main/java/com/fr/design/designer/creator/XWAbsoluteBodyLayout.java
+++ b/designer-form/src/main/java/com/fr/design/designer/creator/XWAbsoluteBodyLayout.java
@@ -130,4 +130,9 @@ public class XWAbsoluteBodyLayout extends XWAbsoluteLayout {
public boolean isSupportShared() {
return false;
}
+
+ @Override
+ public boolean isTopable() {
+ return false;
+ }
}
diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XWAbsoluteLayout.java b/designer-form/src/main/java/com/fr/design/designer/creator/XWAbsoluteLayout.java
index 7c852f2820..da268b0e6c 100644
--- a/designer-form/src/main/java/com/fr/design/designer/creator/XWAbsoluteLayout.java
+++ b/designer-form/src/main/java/com/fr/design/designer/creator/XWAbsoluteLayout.java
@@ -433,7 +433,11 @@ public class XWAbsoluteLayout extends XLayoutContainer {
@Override
public XLayoutContainer getTopLayout() {
- XLayoutContainer xTopLayout = XCreatorUtils.getParentXLayoutContainer(this).getTopLayout();
+ XLayoutContainer parentXLayoutContainer = XCreatorUtils.getParentXLayoutContainer(this);
+ if (parentXLayoutContainer == null) {
+ return this;
+ }
+ XLayoutContainer xTopLayout = parentXLayoutContainer.getTopLayout();
if (xTopLayout != null && !xTopLayout.isEditable()) {
return xTopLayout;
} else {
@@ -538,6 +542,7 @@ public class XWAbsoluteLayout extends XLayoutContainer {
selectionModel.selectACreatorAtMouseEvent(e);
designer.repaint();
+ editingMouseListener.refreshTopXCreator(isEditing);
if (editingMouseListener.stopEditing()) {
if (this != designer.getRootComponent()) {
@@ -602,4 +607,5 @@ public class XWAbsoluteLayout extends XLayoutContainer {
return super.getWidgetPropertyUIProviders();
}
}
+
}
diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XWFitLayout.java b/designer-form/src/main/java/com/fr/design/designer/creator/XWFitLayout.java
index 06aca3c1b3..3e425b4cd9 100644
--- a/designer-form/src/main/java/com/fr/design/designer/creator/XWFitLayout.java
+++ b/designer-form/src/main/java/com/fr/design/designer/creator/XWFitLayout.java
@@ -1222,6 +1222,11 @@ public class XWFitLayout extends XLayoutContainer {
return false;
}
+ @Override
+ public boolean isTopable() {
+ return false;
+ }
+
public boolean switch2FitBodyLayout(XCreator creator) {
try {
XWFitLayout xfl = (XWFitLayout) creator.getBackupParent();
diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XWParameterLayout.java b/designer-form/src/main/java/com/fr/design/designer/creator/XWParameterLayout.java
index cb288c98cc..1d37024d98 100644
--- a/designer-form/src/main/java/com/fr/design/designer/creator/XWParameterLayout.java
+++ b/designer-form/src/main/java/com/fr/design/designer/creator/XWParameterLayout.java
@@ -251,4 +251,8 @@ public class XWParameterLayout extends XWAbsoluteLayout {
return false;
}
+ @Override
+ public boolean isTopable() {
+ return false;
+ }
}
diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XWTitleLayout.java b/designer-form/src/main/java/com/fr/design/designer/creator/XWTitleLayout.java
index 2cc56ee9ba..964f0aa03d 100644
--- a/designer-form/src/main/java/com/fr/design/designer/creator/XWTitleLayout.java
+++ b/designer-form/src/main/java/com/fr/design/designer/creator/XWTitleLayout.java
@@ -189,4 +189,5 @@ public class XWTitleLayout extends DedicateLayoutContainer {
XCreator creator = getPropertyDescriptorCreator();
return creator.getWidgetPropertyUIProviders();
}
+
}
\ No newline at end of file
diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/cardlayout/XCardAddButton.java b/designer-form/src/main/java/com/fr/design/designer/creator/cardlayout/XCardAddButton.java
index 6909207c35..7718e266f2 100644
--- a/designer-form/src/main/java/com/fr/design/designer/creator/cardlayout/XCardAddButton.java
+++ b/designer-form/src/main/java/com/fr/design/designer/creator/cardlayout/XCardAddButton.java
@@ -86,7 +86,6 @@ public class XCardAddButton extends XButton {
@Override
public void respondClick(EditingMouseListener editingMouseListener, MouseEvent e){
FormDesigner designer = editingMouseListener.getDesigner();
- designer.fireTargetModified();
// addbutton对应的XWCardLayout和XWCardTagLayout暂未存入到xml中,重新打开之后先根据父子层获取
if(cardLayout == null && tagLayout ==null ){
@@ -112,6 +111,8 @@ public class XCardAddButton extends XButton {
showNewTab(editingMouseListener,index);
tagLayout.setTabsAndAdjust();
LayoutUtils.layoutRootContainer(designer.getRootComponent());
+
+ designer.fireTargetModified();
}
@Override
diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java b/designer-form/src/main/java/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java
index bce26eb3f3..1c335efa62 100644
--- a/designer-form/src/main/java/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java
+++ b/designer-form/src/main/java/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java
@@ -259,10 +259,25 @@ public class XCardSwitchButton extends XButton {
int ey = e.getY();
//获取tab布局的位置,鼠标相对于tab按钮的位置
- XLayoutContainer mainLayout = cardLayout.getBackupParent();
+ Container mainLayout = cardLayout.getBackupParent();
Point point = mainLayout.getLocation();
- double mainX = point.getX();
- double mainY = point.getY();
+ int y = 0;
+ int x = 0;
+ //遍历一下,不然是相对位置,嵌套后位置不对
+ while (mainLayout.getParent() != null){
+ if(mainLayout instanceof XWCardLayout){
+ y += mainLayout.getY();
+ }
+
+ mainLayout = mainLayout.getParent();
+
+ if(mainLayout instanceof XWCardMainBorderLayout){
+ x += mainLayout.getX();
+ y += mainLayout.getY();
+ }
+ }
+ double mainX = point.getX() + x;
+ double mainY = point.getY() + y;
// 参数界面对坐标的影响
JForm jform = (JForm) HistoryTemplateListPane.getInstance().getCurrentEditingTemplate();
diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java b/designer-form/src/main/java/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java
index 25da3e7754..5b37ad313f 100644
--- a/designer-form/src/main/java/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java
+++ b/designer-form/src/main/java/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java
@@ -16,10 +16,7 @@ import com.fr.design.designer.creator.XCreatorUtils;
import com.fr.design.designer.creator.XLayoutContainer;
import com.fr.design.designer.creator.XWBorderLayout;
import com.fr.design.designer.creator.XWidgetCreator;
-import com.fr.design.designer.properties.mobile.MobileBooKMarkUsePropertyUI;
-import com.fr.design.form.util.FormDesignerUtils;
import com.fr.design.form.util.XCreatorConstants;
-import com.fr.design.fun.WidgetPropertyUIProvider;
import com.fr.design.icon.IconPathConstants;
import com.fr.design.mainframe.DesignerContext;
import com.fr.design.mainframe.EditingMouseListener;
@@ -438,6 +435,7 @@ public class XWCardMainBorderLayout extends XWBorderLayout {
setEditable(isEditing);
selectionModel.selectACreatorAtMouseEvent(e);
+ editingMouseListener.refreshTopXCreator(isEditing);
designer.repaint();
if (editingMouseListener.stopEditing()) {
@@ -514,4 +512,5 @@ public class XWCardMainBorderLayout extends XWBorderLayout {
public boolean isSupportShared() {
return true;
}
+
}
diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/cardlayout/XWCardTagLayout.java b/designer-form/src/main/java/com/fr/design/designer/creator/cardlayout/XWCardTagLayout.java
index dc8bb90801..010a382178 100644
--- a/designer-form/src/main/java/com/fr/design/designer/creator/cardlayout/XWCardTagLayout.java
+++ b/designer-form/src/main/java/com/fr/design/designer/creator/cardlayout/XWCardTagLayout.java
@@ -143,7 +143,7 @@ public class XWCardTagLayout extends XWHorizontalBoxLayout {
fitLayout.setInitialBackground(layout.getTemplateStyle().getTabDefaultBackground());
fitLayout.setCustomStyle(true);
}
- tabFitLayout.setxCardSwitchButton((XCardSwitchButton)this.getComponent(0));
+ tabFitLayout.setxCardSwitchButton((XCardSwitchButton)this.getComponent(index));
tabFitLayout.checkButonType();
tabFitLayout.setBackupParent(cardLayout);
cardLayout.add(tabFitLayout, widgetName);
@@ -248,6 +248,7 @@ public class XWCardTagLayout extends XWHorizontalBoxLayout {
if (e.getClickCount() <= 1) {
selectionModel.selectACreatorAtMouseEvent(e);
}
+ editingMouseListener.refreshTopXCreator();
if (editingMouseListener.stopEditing()) {
if (this != designer.getRootComponent()) {
ComponentAdapter adapter = AdapterBus.getComponentAdapter(designer, this);
diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/cardlayout/XWCardTitleLayout.java b/designer-form/src/main/java/com/fr/design/designer/creator/cardlayout/XWCardTitleLayout.java
index babc54b316..f6f6b2b411 100644
--- a/designer-form/src/main/java/com/fr/design/designer/creator/cardlayout/XWCardTitleLayout.java
+++ b/designer-form/src/main/java/com/fr/design/designer/creator/cardlayout/XWCardTitleLayout.java
@@ -204,6 +204,7 @@ public class XWCardTitleLayout extends XWBorderLayout {
if (e.getClickCount() <= 1) {
selectionModel.selectACreatorAtMouseEvent(e);
}
+ editingMouseListener.refreshTopXCreator();
if (editingMouseListener.stopEditing()) {
if (this != designer.getRootComponent()) {
diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java b/designer-form/src/main/java/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java
index 8d5d232fa6..a706674c7b 100644
--- a/designer-form/src/main/java/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java
+++ b/designer-form/src/main/java/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java
@@ -639,4 +639,8 @@ public class XWTabFitLayout extends XWFitLayout {
checkVisible();
}
+ @Override
+ public boolean isTopable() {
+ return true;
+ }
}
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 16ec4405df..48938dceee 100644
--- a/designer-form/src/main/java/com/fr/design/designer/treeview/ComponentTreeCellRenderer.java
+++ b/designer-form/src/main/java/com/fr/design/designer/treeview/ComponentTreeCellRenderer.java
@@ -3,54 +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 = XCreatorUtils.getCreatorIcon((XCreator) value);
- if (icon != null) {
- setIcon(icon);
- }
- }
- UILabel label = new UILabel();
- label.setText(getText());
- label.setIcon(getIcon());
- Dimension dim = label.getPreferredSize();
- dim.height += 2;
- this.setSize(dim);
- this.setPreferredSize(dim);
- this.setBackgroundNonSelectionColor(UIConstants.TREE_BACKGROUND);
- return this;
- }
-
- @Override
- public Icon getClosedIcon() {
- return getIcon();
- }
-
- @Override
- public Icon getLeafIcon() {
- return getIcon();
- }
-
- @Override
- public Icon getOpenIcon() {
- return getIcon();
- }
-}
\ No newline at end of file
+ public ComponentTreeCellRenderer() {
+ }
+
+ @Override
+ public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded,
+ boolean leaf, int row, boolean hasFocus) {
+ super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
+ if (value instanceof XCreator) {
+ String name = ((XCreator) value).toData().getWidgetName();
+ setText(name);
+ Icon icon = null;
+ try {
+ icon = XCreatorUtils.getCreatorIcon((XCreator) value);
+ } catch (Exception e) {
+ FineLoggerFactory.getLogger().info("{} has not icon or has been deleted", name);
+ }
+ if (icon != null) {
+ setIcon(icon);
+ }
+ }
+ this.setBorder(BorderFactory.createEmptyBorder(1, 0, 1, 0));
+ this.setBackgroundNonSelectionColor(UIConstants.TREE_BACKGROUND);
+ return this;
+ }
+
+ @Override
+ public Icon getClosedIcon() {
+ return getIcon();
+ }
+
+ @Override
+ public Icon getLeafIcon() {
+ return getIcon();
+ }
+
+ @Override
+ public Icon getOpenIcon() {
+ return getIcon();
+ }
+}
diff --git a/designer-form/src/main/java/com/fr/design/form/parameter/FormParaDesigner.java b/designer-form/src/main/java/com/fr/design/form/parameter/FormParaDesigner.java
index 8956125eb3..8d13f3ab42 100644
--- a/designer-form/src/main/java/com/fr/design/form/parameter/FormParaDesigner.java
+++ b/designer-form/src/main/java/com/fr/design/form/parameter/FormParaDesigner.java
@@ -30,6 +30,7 @@ import com.fr.design.mainframe.EastRegionContainerPane;
import com.fr.design.mainframe.FormArea;
import com.fr.design.mainframe.FormDesigner;
import com.fr.design.mainframe.FormDesignerModeForSpecial;
+import com.fr.design.mainframe.FormDesignerUI;
import com.fr.design.mainframe.FormParaPane;
import com.fr.design.mainframe.FormWidgetDetailPane;
import com.fr.design.mainframe.JTemplate;
@@ -58,6 +59,7 @@ import java.awt.Graphics;
import java.awt.Image;
import java.awt.Insets;
import java.awt.Rectangle;
+import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -467,6 +469,21 @@ public class FormParaDesigner extends FormDesigner implements ParameterDesignerP
return ((FormParameterUI) getTarget()).getDesignSize();
}
+ /**
+ * 设置其UI类为DesignerUI,负责渲染
+ */
+ @Override
+ public void updateUI() {
+ setUI(new FormDesignerUI(){
+ @Override
+ protected Rectangle getFitPaintBounds(Component component, Component parent) {
+ return new Rectangle(0, 0, parent.getSize().width, parent.getSize().height);
+ }
+
+ });
+ }
+
+
/**
* 设置高度
*
@@ -722,4 +739,11 @@ public class FormParaDesigner extends FormDesigner implements ParameterDesignerP
return new JComponent[]{new CutAction(this).createToolBarComponent(), new CopyAction(this).createToolBarComponent(), new PasteAction(this).createToolBarComponent(),
new FormDeleteAction(this).createToolBarComponent()};
}
+
+ @Override
+ public boolean checkIfBeyondValidArea(MouseEvent e){
+ return false;
+ }
+
+
}
diff --git a/designer-form/src/main/java/com/fr/design/form/util/FormDesignerUtils.java b/designer-form/src/main/java/com/fr/design/form/util/FormDesignerUtils.java
index 85ec9474db..3e248f3bae 100644
--- a/designer-form/src/main/java/com/fr/design/form/util/FormDesignerUtils.java
+++ b/designer-form/src/main/java/com/fr/design/form/util/FormDesignerUtils.java
@@ -1,5 +1,9 @@
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;
import com.fr.design.mainframe.JTemplate;
@@ -7,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 {
@@ -17,6 +22,9 @@ public class FormDesignerUtils {
* @return
*/
public static boolean isAppRelayout(FormDesigner designer) {
+ if (!designer.getRootComponent().acceptType(XWFitLayout.class)) {
+ return false;
+ }
return ((WFitLayout) designer.getRootComponent().toData()).isAppRelayout();
}
@@ -42,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/ComponentTree.java b/designer-form/src/main/java/com/fr/design/mainframe/ComponentTree.java
index a2f295f87d..ee667fd38c 100644
--- a/designer-form/src/main/java/com/fr/design/mainframe/ComponentTree.java
+++ b/designer-form/src/main/java/com/fr/design/mainframe/ComponentTree.java
@@ -2,7 +2,11 @@ package com.fr.design.mainframe;
import com.fr.design.constants.UIConstants;
import com.fr.design.designer.creator.XCreator;
+import com.fr.design.designer.creator.XCreatorUtils;
import com.fr.design.designer.creator.XLayoutContainer;
+import com.fr.design.designer.creator.XWAbsoluteBodyLayout;
+import com.fr.design.designer.creator.XWFitLayout;
+import com.fr.design.designer.creator.cardlayout.XCardSwitchButton;
import com.fr.design.designer.treeview.ComponentTreeCellRenderer;
import com.fr.design.designer.treeview.ComponentTreeModel;
import com.fr.design.gui.itree.UITreeUI;
@@ -15,7 +19,9 @@ import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
+import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeCellRenderer;
+import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
import java.awt.BorderLayout;
@@ -30,6 +36,9 @@ import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Vector;
public class ComponentTree extends JTree {
@@ -129,6 +138,7 @@ public class ComponentTree extends JTree {
setSelectionPaths(treepath);
if (treepath.length > 0) {
scrollPathToVisible(treepath[0]);
+ //expandPath(treepath[0]);
}
}
@@ -228,6 +238,52 @@ public class ComponentTree extends JTree {
repaint();
}
+ /**
+ * 获得树的展开路径
+ * */
+ public void getExpandNodes(List searchList) {
+ getExpandNodes((XLayoutContainer)designer.getTopContainer(),searchList);
+ }
+
+ public void getExpandNodes(XLayoutContainer container, List searchList) {
+ TreePath treePath = buildTreePath(container);
+ if (isExpanded(treePath)) {
+ searchList.add(treePath);
+ for (int i = 0, size = container.getXCreatorCount(); i < size; i++) {
+ XCreator creator = container.getXCreator(i);
+ if (creator.acceptType(XLayoutContainer.class) || creator.acceptType(XCardSwitchButton.class)) {
+ getExpandNodes((XLayoutContainer) creator.getXCreator(), searchList);
+ }
+ }
+ }
+ //对绝对布局做特殊处理
+ if (container.acceptType(XWFitLayout.class)) {
+ XWFitLayout bodyFitLayout = (XWFitLayout) container;
+ for (int j = 0; j < bodyFitLayout.getXCreatorCount(); j++) {
+ //类型是绝对布局并且还是body
+ if (bodyFitLayout.getXCreator(j).acceptType(XWAbsoluteBodyLayout.class)) {
+ container = (XLayoutContainer) bodyFitLayout.getXCreator(j);
+ getExpandNodes(container, searchList);
+ }
+ }
+ }
+ }
+
+ /**
+ * 将树按照展开路径进行展开
+ * */
+ public void expandNodes(List list){
+ for(TreePath treePath:list) {
+ if (treePath.getLastPathComponent() instanceof XLayoutContainer) {
+ XLayoutContainer creator= (XLayoutContainer) treePath.getLastPathComponent();
+ if (XCreatorUtils.getParentXLayoutContainer(creator) == null) {
+ continue;
+ }
+ expandPath(treePath);
+ }
+ }
+ }
+
private TreePath buildTreePath(Component comp) {
ArrayList path = new ArrayList();
Component parent = comp;
diff --git a/designer-form/src/main/java/com/fr/design/mainframe/CoverPane.java b/designer-form/src/main/java/com/fr/design/mainframe/CoverPane.java
index d692eaa5ea..a4c4014408 100644
--- a/designer-form/src/main/java/com/fr/design/mainframe/CoverPane.java
+++ b/designer-form/src/main/java/com/fr/design/mainframe/CoverPane.java
@@ -8,7 +8,7 @@ import com.fr.general.IOUtils;
import com.fr.stable.Constants;
-import javax.swing.JPanel;
+import javax.swing.JComponent;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Component;
@@ -28,7 +28,7 @@ import java.awt.Rectangle;
* Date: 14-7-24
* Time: 上午9:09
*/
-public class CoverPane extends JPanel {
+public class CoverPane extends JComponent {
private UIButton editButton;
private AlphaComposite composite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f);
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 7d2ba0cc92..524dd8bf14 100644
--- a/designer-form/src/main/java/com/fr/design/mainframe/EditingMouseListener.java
+++ b/designer-form/src/main/java/com/fr/design/mainframe/EditingMouseListener.java
@@ -166,7 +166,7 @@ public class EditingMouseListener extends MouseInputAdapter {
// 获取焦点,以便获取热键
designer.requestFocus();
}
- if (e.getButton() == MouseEvent.BUTTON1 && !beyondValidArea(e)) {
+ if (e.getButton() == MouseEvent.BUTTON1 && !designer.checkIfBeyondValidArea(e)) {
Direction dir = selectionModel.getDirectionAt(e);
if (!DesignerMode.isAuthorityEditing()) {
@@ -177,7 +177,6 @@ public class EditingMouseListener extends MouseInputAdapter {
if (designer.isDrawLineMode()) {
designer.updateDrawLineMode(e);
} else {
-
if (selectionModel.hasSelectionComponent()
&& selectionModel.getSelection().getRelativeBounds().contains(
designer.getHorizontalScaleValue() + e.getX(),
@@ -195,16 +194,6 @@ public class EditingMouseListener extends MouseInputAdapter {
e.translatePoint(oldX - e.getX(), oldY - e.getY());
}
- private boolean beyondValidArea(MouseEvent e) {
- if (e.getX() < 0 || e.getY() < 0 ||
- e.getX() > designer.getRootComponent().getWidth() ||
- e.getY() > (designer.getRootComponent().getHeight() + designer.getParaHeight())) {
- return true;
- }
- return false;
- }
-
-
private void offsetEventPoint(MouseEvent e){
int x = designer.getRelativeX(e.getX());
int y = designer.getRelativeY(e.getY());
@@ -371,7 +360,7 @@ public class EditingMouseListener extends MouseInputAdapter {
designer.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
} // component.getParent() 是报表块所在的XWTitleLayout
int minX = button.getX() + getParentPositionX(component, 0) - designer.getHorizontalScaleValue();
- int minY = button.getY() + getParentPositionY(component, 0) - designer.getVerticalScaleValue();
+ int minY = button.getY() + getParentPositionY(component, 0) - designer.getVerticalScaleValue() + xElementCase.getY();
if (e.getX() + GAP - xElementCase.getInsets().left > minX && e.getX() - GAP - xElementCase.getInsets().left < minX + button.getWidth()) {
if (e.getY() + GAP - xElementCase.getInsets().top > minY && e.getY() - GAP - xElementCase.getInsets().top < minY + button.getHeight()) {
designer.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
@@ -386,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));
@@ -413,16 +402,7 @@ public class EditingMouseListener extends MouseInputAdapter {
}
private void setCoverPaneNotDisplay(XCreator component, MouseEvent e, boolean isLinkedHelpDialog) {
- if (xElementCase != null) {
- int x = getParentPositionX(xElementCase, 0) - designer.getArea().getHorizontalValue();
- int y = getParentPositionY(xElementCase, 0) - designer.getArea().getVerticalValue();
- Rectangle rect = new Rectangle(x, y, xElementCase.getWidth(), xElementCase.getHeight());
- if (rect.contains(e.getPoint())) {
- return;
- }
- xElementCase.displayCoverPane(false);
- }
if (xChartEditor != null) {
xChartEditor.displayCoverPane(false);
}
@@ -433,6 +413,15 @@ public class EditingMouseListener extends MouseInputAdapter {
if (xTopLayoutContainer != null) {
xTopLayoutContainer.setMouseEnter(false);
}
+ //不知道为什么要对XElementCase进行判断,但是直接return会有bug,所以把他放在最后
+ if (xElementCase != null) {
+ int x = getParentPositionX(xElementCase, 0) - designer.getArea().getHorizontalValue();
+ int y = getParentPositionY(xElementCase, 0) - designer.getArea().getVerticalValue();
+ Rectangle rect = new Rectangle(x, y, xElementCase.getWidth(), xElementCase.getHeight());
+ if (!rect.contains(e.getPoint())) {
+ xElementCase.displayCoverPane(false);
+ }
+ }
designer.repaint();
}
@@ -470,7 +459,7 @@ public class EditingMouseListener extends MouseInputAdapter {
designer.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
int minX = button.getX() + getParentPositionX(component, 0) - designer.getHorizontalScaleValue();
- int minY = button.getY() + getParentPositionY(component, 0) - designer.getVerticalScaleValue();
+ int minY = button.getY() + getParentPositionY(component, 0) - designer.getVerticalScaleValue() + xChartEditor.getY();
if (e.getX() + GAP > minX && e.getX() - GAP < minX + button.getWidth()) {
if (e.getY() + GAP > minY && e.getY() - GAP < minY + button.getHeight()) {
designer.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
@@ -708,6 +697,7 @@ public class EditingMouseListener extends MouseInputAdapter {
currentXCreator.stopEditing();
currentXCreator = null;
currentEditor = null;
+ refreshTopXCreator();
return true;
}
return true;
@@ -735,4 +725,19 @@ public class EditingMouseListener extends MouseInputAdapter {
}
currentEditor.getEditorTarget().setBounds(bounds);
}
+
+ /**
+ * 刷新顶层组件
+ * */
+ public void refreshTopXCreator(boolean isEditing){
+ designer.refreshTopXCreator(isEditing);
+ }
+
+ /**
+ * 刷新顶层组件
+ * */
+ public void refreshTopXCreator(){
+ refreshTopXCreator(false);
+ }
+
}
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 e5ce0f726f..62c89b9cae 100644
--- a/designer-form/src/main/java/com/fr/design/mainframe/FormDesigner.java
+++ b/designer-form/src/main/java/com/fr/design/mainframe/FormDesigner.java
@@ -36,6 +36,8 @@ import com.fr.design.designer.creator.XWAbsoluteBodyLayout;
import com.fr.design.designer.creator.XWAbsoluteLayout;
import com.fr.design.designer.creator.XWBorderLayout;
import com.fr.design.designer.creator.XWParameterLayout;
+import com.fr.design.designer.creator.cardlayout.XWCardMainBorderLayout;
+import com.fr.design.designer.creator.cardlayout.XWTabFitLayout;
import com.fr.design.designer.properties.FormWidgetAuthorityEditPane;
import com.fr.design.dialog.FineJOptionPane;
import com.fr.design.event.DesignerOpenedListener;
@@ -121,6 +123,7 @@ public class FormDesigner extends TargetComponent