diff --git a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java
index 6f1c94eee..c6488d330 100644
--- a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java
+++ b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java
@@ -418,21 +418,10 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter {
this.isHttps = isHttps;
}
-
- public String getCertificatePath() {
- return certificatePath;
- }
-
-
public void setCertificatePath(String certificatePath) {
this.certificatePath = certificatePath;
}
-
- public String getCertificatePass() {
- return certificatePass;
- }
-
public void setCertificatePass(String certificatePass) {
this.certificatePass = certificatePass;
}
@@ -2015,11 +2004,13 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter {
private void writeHttpsParas(XMLPrintWriter writer) {
writer.startTAG(CAS_PARAS);
+ // 这边的密钥path和password没有用处了 当前已经全部储存在对应的WorkspaceConnectionInfo中
+ // 把历史遗留保存的全部置为空 防止显示明文密钥 后面删除 todo
if (StringUtils.isNotBlank(certificatePath)) {
- writer.attr(CAS_CERTIFICATE_PATH, certificatePath);
+ writer.attr(CAS_CERTIFICATE_PATH, StringUtils.EMPTY);
}
if (StringUtils.isNotBlank(certificatePass)) {
- writer.attr(CAS_CERTIFICATE_PASSWORD, certificatePass);
+ writer.attr(CAS_CERTIFICATE_PASSWORD, StringUtils.EMPTY);
}
if (isHttps) {
writer.attr("enable", true);
diff --git a/designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java b/designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java
index ce495cdb9..382709c92 100644
--- a/designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java
+++ b/designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java
@@ -5,6 +5,7 @@ import com.fr.design.data.DesignTableDataManager;
import com.fr.design.dialog.BasicDialog;
import com.fr.design.dialog.DialogActionAdapter;
import com.fr.design.dialog.FineJOptionPane;
+import com.fr.design.dialog.link.MessageWithLink;
import com.fr.design.env.DesignerWorkspaceGenerator;
import com.fr.design.env.DesignerWorkspaceInfo;
import com.fr.design.env.DesignerWorkspaceType;
@@ -18,7 +19,10 @@ import com.fr.design.mainframe.JTemplate;
import com.fr.design.utils.DesignUtils;
import com.fr.env.CheckServiceDialog;
import com.fr.env.EnvListPane;
+import com.fr.env.RemoteWorkspaceURL;
+import com.fr.env.TestConnectionResult;
import com.fr.exit.DesignerExiter;
+import com.fr.general.ComparatorUtils;
import com.fr.general.GeneralUtils;
import com.fr.invoke.Reflect;
import com.fr.json.JSONArray;
@@ -40,6 +44,7 @@ import com.fr.workspace.connect.WorkspaceConnectionInfo;
import com.fr.workspace.engine.base.FineObjectPool;
import com.fr.workspace.engine.channel.http.FunctionalHttpRequest;
import com.fr.workspace.engine.exception.WorkspaceAuthException;
+import com.fr.workspace.engine.exception.WorkspaceCheckException;
import com.fr.workspace.engine.exception.WorkspaceConnectionException;
import com.fr.workspace.engine.rpc.WorkspaceProxyPool;
@@ -145,21 +150,28 @@ public class EnvChangeEntrance {
strategy.showTip(new PopTip() {
@Override
public void show() {
- FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Toolkit.i18nText("Fine-Design_Basic_Switch_Workspace_Failed"),
- com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Error"), ERROR_MESSAGE, UIManager.getIcon("OptionPane.errorIcon"));
+ FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(),
+ Toolkit.i18nText("Fine-Design_Basic_Switch_Workspace_Failed"),
+ Toolkit.i18nText("Fine-Design_Basic_Error"),
+ ERROR_MESSAGE,
+ UIManager.getIcon("OptionPane.errorIcon"));
}
});
return false;
+ } catch (WorkspaceCheckException e) {
+ handleWorkspaceCheckException(e, strategy, connectionInfo);
+ return false;
} catch (Exception exception) {
- FineLoggerFactory.getLogger().error(exception.getMessage(), exception);
- strategy.showTip(new PopTip() {
- @Override
- public void show() {
- FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Toolkit.i18nText("Fine-Design_Basic_Switch_Workspace_Failed"),
- com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Error"), ERROR_MESSAGE, UIManager.getIcon("OptionPane.errorIcon"));
- }
- });
-
+ if (exception.getCause() instanceof WorkspaceCheckException) {
+ handleWorkspaceCheckException((WorkspaceCheckException) exception.getCause(), strategy, connectionInfo);
+ } else {
+ FineLoggerFactory.getLogger().error(exception.getMessage(), exception);
+ strategy.showTip(() -> FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(),
+ Toolkit.i18nText("Fine-Design_Basic_Switch_Workspace_Failed"),
+ Toolkit.i18nText("Fine-Design_Basic_Error"),
+ ERROR_MESSAGE,
+ UIManager.getIcon("OptionPane.errorIcon")));
+ }
return false;
}
TemplateTreePane.getInstance().refreshDockingView();
@@ -170,6 +182,24 @@ public class EnvChangeEntrance {
return true;
}
+ private void handleWorkspaceCheckException(WorkspaceCheckException e, PopTipStrategy strategy, WorkspaceConnectionInfo info) {
+ TestConnectionResult result = TestConnectionResult.parseByException(e);
+ FineLoggerFactory.getLogger().error(e.getMessage(), e);
+ if (ComparatorUtils.equals(result, TestConnectionResult.AUTH_FAILED)) {
+ strategy.showTip(() -> FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(),
+ Toolkit.i18nText("Fine-Design_Basic_Switch_Workspace_Failed"),
+ Toolkit.i18nText("Fine-Design_Basic_Error"),
+ ERROR_MESSAGE,
+ UIManager.getIcon("OptionPane.errorIcon")));
+ } else {
+ strategy.showTip(() -> FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(),
+ new MessageWithLink(result.getText(), Toolkit.i18nText("Fine-Design_Basic_Remote_Design_Modify_PassWord"), info.getUrl() + RemoteWorkspaceURL.SYSTEM_LOGIN_PATH),
+ Toolkit.i18nText("Fine-Design_Basic_Error"),
+ ERROR_MESSAGE,
+ UIManager.getIcon("OptionPane.errorIcon")));
+ }
+ }
+
/**
* 这个功能留着,可能会加回来,先做注释处理
* 切换远程环境之前,进行版本检测,当版本不一致的时候,提示。
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 94efc5faa..80471b9e6 100644
--- a/designer-base/src/main/java/com/fr/design/data/datapane/TableDataTree.java
+++ b/designer-base/src/main/java/com/fr/design/data/datapane/TableDataTree.java
@@ -113,6 +113,11 @@ public class TableDataTree extends UserObjectRefreshJTree {
break;
}
new_nodes[ci].setExpanded(cTreeNode.isExpanded());
+ // REPORT-41299 如果建立的是错误的数据集(没有Child的情况)且这个错误数据集处于isExpanded状态,会在后面的if语句中调用getFirstChild()产生异常,因此这里判断一下
+ if (cTreeNode.isExpanded() && cTreeNode.getChildCount() == 0) {
+ new_nodes[ci].setExpanded(false);
+ break;
+ }
if (cTreeNode.getFirstChild() instanceof ExpandMutableTreeNode && cTreeNode.isExpanded()) {
checkChildNodes(cTreeNode, new_nodes[ci]);
}
@@ -242,4 +247,4 @@ public class TableDataTree extends UserObjectRefreshJTree {
treeModel.reload(root);
}
-}
\ No newline at end of file
+}
diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/connect/JDBCDefPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/connect/JDBCDefPane.java
index 683b38e01..4bf6bf190 100644
--- a/designer-base/src/main/java/com/fr/design/data/datapane/connect/JDBCDefPane.java
+++ b/designer-base/src/main/java/com/fr/design/data/datapane/connect/JDBCDefPane.java
@@ -11,6 +11,7 @@ import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.ipasswordfield.UIPasswordFieldWithFixedLength;
import com.fr.design.gui.itextfield.UITextField;
import com.fr.design.gui.ilable.ActionLabel;
+import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
@@ -90,9 +91,9 @@ public class JDBCDefPane extends JPanel {
private IntegerEditor DBCP_MAX_WAIT = new IntegerEditor();
private UITextField DBCP_VALIDATION_QUERY = new UITextField();
- private UIComboBox DBCP_TESTONBORROW = new UIComboBox(new String[]{com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_No"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Yes")});
- private UIComboBox DBCP_TESTONRETURN = new UIComboBox(new String[]{com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_No"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Yes")});
- private UIComboBox DBCP_TESTWHILEIDLE = new UIComboBox(new String[]{com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_No"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Yes")});
+ private UIComboBox DBCP_TESTONBORROW = new UIComboBox(new String[]{Toolkit.i18nText("Fine-Design_Basic_No"), Toolkit.i18nText("Fine-Design_Basic_Yes")});
+ private UIComboBox DBCP_TESTONRETURN = new UIComboBox(new String[]{Toolkit.i18nText("Fine-Design_Basic_No"), Toolkit.i18nText("Fine-Design_Basic_Yes")});
+ private UIComboBox DBCP_TESTWHILEIDLE = new UIComboBox(new String[]{Toolkit.i18nText("Fine-Design_Basic_No"), Toolkit.i18nText("Fine-Design_Basic_Yes")});
private IntegerEditor DBCP_TIMEBETWEENEVICTIONRUNSMILLS = new IntegerEditor();
private IntegerEditor DBCP_NUMTESTSPEREVICTIONRUN = new IntegerEditor();
@@ -120,13 +121,13 @@ public class JDBCDefPane extends JPanel {
userNameTextField.setName(USER_NAME);
passwordTextField = new UIPasswordFieldWithFixedLength(15);
dbtypeButton = new UIButton(".");
- dbtypeButton.setToolTipText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Click_Get_Default_URL"));
+ dbtypeButton.setToolTipText(Toolkit.i18nText("Fine-Design_Basic_Click_Get_Default_URL"));
dbtypeButton.addActionListener(dbtypeButtonActionListener);
double p = TableLayout.PREFERRED;
double f = TableLayout.FILL;
JPanel dbtypePane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane();
- dbtypePane.add(new UILabel((com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Database") + ":")));
+ dbtypePane.add(new UILabel((Toolkit.i18nText("Fine-Design_Basic_Database") + ":")));
JPanel dbtypeComPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane();
Component[][] dbtypeComComponents = {{dbtypeComboBox}};
double[] dbtypeRowSize = {p};
@@ -134,10 +135,10 @@ public class JDBCDefPane extends JPanel {
dbtypeComPane = TableLayoutHelper.createTableLayoutPane(dbtypeComComponents, dbtypeRowSize, dbtypeColumnSize);
JPanel driverPane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane();
- driverPane.add(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Driver") + ":"));
+ driverPane.add(new UILabel(Toolkit.i18nText("Fine-Design_Basic_Driver") + ":"));
// 选择ODBC数据源的时候的提示链接
JPanel odbcTipsPane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane();
- odbcTipsLink = new ActionLabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Odbc_Tips")) {
+ odbcTipsLink = new ActionLabel(Toolkit.i18nText("Fine-Design_Basic_Odbc_Tips")) {
@Override
public void paintComponent(Graphics _gfx) {
super.paintComponent(_gfx);
@@ -146,7 +147,7 @@ public class JDBCDefPane extends JPanel {
}
};
odbcTipsPane.add(odbcTipsLink);
- odbcTipsLink.setPreferredSize(new Dimension(GraphHelper.getWidth(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Odbc_Tips")), odbcTipsLink.getPreferredSize().height));
+ odbcTipsLink.setPreferredSize(new Dimension(GraphHelper.getWidth(Toolkit.i18nText("Fine-Design_Basic_Odbc_Tips")), odbcTipsLink.getPreferredSize().height));
odbcTipsLink.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
String url = CloudCenter.getInstance().acquireUrlByKind("odbc.help");
@@ -167,26 +168,27 @@ public class JDBCDefPane extends JPanel {
urlComPane = TableLayoutHelper.createCommonTableLayoutPane(urlComComponents, urlRowSize, urlColumnSize, 4);
JPanel userPane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane();
- userPane.add(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_UserName") + ":"));
+ userPane.add(new UILabel(Toolkit.i18nText("Fine-Design_Report_UserName") + ":"));
JPanel userComPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane();
- Component[][] userComComponents = {{userNameTextField, new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Password") + ":"), passwordTextField}};
+ Component[][] userComComponents = {{userNameTextField, new UILabel(Toolkit.i18nText("Fine-Design_Basic_Password") + ":"), passwordTextField}};
double[] userRowSize = {p};
double[] userColumnSize = {f, p, f};
userComPane = TableLayoutHelper.createCommonTableLayoutPane(userComComponents, userRowSize, userColumnSize, 4);
JPanel passwordPane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane();
- passwordPane.add(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Password") + ":"));
+ passwordPane.add(new UILabel(Toolkit.i18nText("Fine-Design_Basic_Password") + ":"));
Component[][] components = {{dbtypePane, dbtypeComPane}, {driverPane, driverComboBoxAndTips}, {urlPane, urlComPane}, {userPane, userComPane},};
double[] rowSize = {p, p, p, p};
double[] columnSize = {p, f, 22};
- JPanel centerPanel = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, 0, 6);
+ // REPORT-41450 Windows环境的jdk11下dpi为125%时会因为缩放导致显示问题,因此加个水平gap值
+ JPanel centerPanel = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, 6, 6);
innerthis.add(centerPanel);
JPanel southPanel = FRGUIPaneFactory.createBorderLayout_S_Pane();
innerthis.add(southPanel);
southPanel.setBorder(BorderFactory.createEmptyBorder(10, 0, 4, 20));
- ActionLabel actionLabel = new ActionLabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_ConnectionPool_Attr"));
+ ActionLabel actionLabel = new ActionLabel(Toolkit.i18nText("Fine-Design_Basic_ConnectionPool_Attr"));
southPanel.add(actionLabel, BorderLayout.EAST);
actionLabel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
@@ -331,7 +333,7 @@ public class JDBCDefPane extends JPanel {
if (ComparatorUtils.equals(dbtypeComboBox.getSelectedItem(), ("Access"))) {
// ben:这个能不能换种处理方案- -
JFileChooser filechooser = new JFileChooser();
- filechooser.setDialogTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Open"));
+ filechooser.setDialogTitle(Toolkit.i18nText("Fine-Design_Basic_Open"));
filechooser.setMultiSelectionEnabled(false);
filechooser.addChoosableFileFilter(new ChooseFileFilter(new String[]{"accdb", "mdb"}, "Microsoft Office Access"));
int result = filechooser.showOpenDialog(DesignerContext.getDesignerFrame());
@@ -373,19 +375,19 @@ public class JDBCDefPane extends JPanel {
double[] rowSize = {f, f, f, f, f, f, f, f, f, f, f, f};
double[] columnSize = {f, f};
Component[][] comps = {
- {new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Dbcp_Initial_Size") + ":", SwingConstants.RIGHT), DBCP_INITIAL_SIZE},
- {new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Dbcp_Max_Active") + ":", SwingConstants.RIGHT), DBCP_MAX_ACTIVE},
- {new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Dbcp_Max_Idle") + ":", SwingConstants.RIGHT), DBCP_MAX_IDLE},
- {new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Dbcp_Min_Idle") + ":", SwingConstants.RIGHT), DBCP_MIN_IDLE},
- {new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Connection_Pool_Max_Wait_Time") + ":", SwingConstants.RIGHT), DBCP_MAX_WAIT},
- {new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Dbcp_Validation_Query") + ":", SwingConstants.RIGHT), DBCP_VALIDATION_QUERY},
- {new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Dbcp_Test_On_Borrow") + ":", SwingConstants.RIGHT), DBCP_TESTONBORROW},
- {new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Dbcp_Test_On_Return") + ":", SwingConstants.RIGHT), DBCP_TESTONRETURN},
- {new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Dbcp_Test_While_Idle") + ":", SwingConstants.RIGHT), DBCP_TESTWHILEIDLE},
- {new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Connection_Pool_Evictionruns_millis") + ":", SwingConstants.RIGHT),
+ {new UILabel(Toolkit.i18nText("Fine-Design_Basic_Dbcp_Initial_Size") + ":", SwingConstants.RIGHT), DBCP_INITIAL_SIZE},
+ {new UILabel(Toolkit.i18nText("Fine-Design_Basic_Dbcp_Max_Active") + ":", SwingConstants.RIGHT), DBCP_MAX_ACTIVE},
+ {new UILabel(Toolkit.i18nText("Fine-Design_Basic_Dbcp_Max_Idle") + ":", SwingConstants.RIGHT), DBCP_MAX_IDLE},
+ {new UILabel(Toolkit.i18nText("Fine-Design_Basic_Dbcp_Min_Idle") + ":", SwingConstants.RIGHT), DBCP_MIN_IDLE},
+ {new UILabel(Toolkit.i18nText("Fine-Design_Basic_Connection_Pool_Max_Wait_Time") + ":", SwingConstants.RIGHT), DBCP_MAX_WAIT},
+ {new UILabel(Toolkit.i18nText("Fine-Design_Basic_Dbcp_Validation_Query") + ":", SwingConstants.RIGHT), DBCP_VALIDATION_QUERY},
+ {new UILabel(Toolkit.i18nText("Fine-Design_Basic_Dbcp_Test_On_Borrow") + ":", SwingConstants.RIGHT), DBCP_TESTONBORROW},
+ {new UILabel(Toolkit.i18nText("Fine-Design_Basic_Dbcp_Test_On_Return") + ":", SwingConstants.RIGHT), DBCP_TESTONRETURN},
+ {new UILabel(Toolkit.i18nText("Fine-Design_Basic_Dbcp_Test_While_Idle") + ":", SwingConstants.RIGHT), DBCP_TESTWHILEIDLE},
+ {new UILabel(Toolkit.i18nText("Fine-Design_Basic_Connection_Pool_Evictionruns_millis") + ":", SwingConstants.RIGHT),
DBCP_TIMEBETWEENEVICTIONRUNSMILLS},
- {new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Dbcp_Num_Test_Per_Evction_Run") + ":", SwingConstants.RIGHT), DBCP_NUMTESTSPEREVICTIONRUN},
- {new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Connection_Pool_Mix_Evictable_Idle_Time_Millis") + ":", SwingConstants.RIGHT),
+ {new UILabel(Toolkit.i18nText("Fine-Design_Basic_Dbcp_Num_Test_Per_Evction_Run") + ":", SwingConstants.RIGHT), DBCP_NUMTESTSPEREVICTIONRUN},
+ {new UILabel(Toolkit.i18nText("Fine-Design_Basic_Connection_Pool_Mix_Evictable_Idle_Time_Millis") + ":", SwingConstants.RIGHT),
DBCP_MINEVICTABLEIDLETIMEMILLIS}};
JPanel contextPane = TableLayoutHelper.createGapTableLayoutPane(comps, rowSize, columnSize, 10, 4);
@@ -395,7 +397,7 @@ public class JDBCDefPane extends JPanel {
@Override
protected String title4PopupWindow() {
- return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_ConnectionPool_Attr");
+ return Toolkit.i18nText("Fine-Design_Basic_ConnectionPool_Attr");
}
}
diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java
index 8d8e3a48c..d3881bcd1 100644
--- a/designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java
+++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java
@@ -15,20 +15,31 @@ import com.fr.design.data.DesignTableDataManager;
import com.fr.design.dialog.BasicDialog;
import com.fr.design.dialog.BasicPane;
import com.fr.design.dialog.FineJOptionPane;
-import com.fr.design.file.HistoryTemplateListPane;
+import com.fr.design.file.HistoryTemplateListCache;
import com.fr.design.gui.frpane.UITabbedPane;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.iprogressbar.AutoProgressBar;
import com.fr.design.gui.itable.SortableJTable;
import com.fr.design.gui.itable.TableSorter;
import com.fr.design.gui.itextfield.UINumberField;
+import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.mainframe.DesignerContext;
+import com.fr.design.ui.util.UIUtil;
import com.fr.function.TIME;
import com.fr.general.FRFont;
import com.fr.log.FineLoggerFactory;
-import javax.swing.*;
+import javax.swing.BorderFactory;
+import javax.swing.Icon;
+import javax.swing.JComponent;
+import javax.swing.JFrame;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.SwingWorker;
+import javax.swing.UIManager;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableModel;
@@ -81,7 +92,7 @@ public class PreviewTablePane extends BasicPane {
JPanel currentPreviewPanel = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane();
previewNumberPanel.add(currentPreviewPanel);
- currentPreviewPanel.add(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Current_Preview_Rows") + ":"));
+ currentPreviewPanel.add(new UILabel(Toolkit.i18nText("Fine-Design_Basic_Current_Preview_Rows") + ":"));
currentRowsField = new UINumberField();
currentPreviewPanel.add(currentRowsField);
@@ -91,7 +102,7 @@ public class PreviewTablePane extends BasicPane {
JPanel maxPanel = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane();
previewNumberPanel.add(maxPanel);
- maxPanel.add(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Datasource_Maximum_Number_of_Preview_Rows") + ":"));
+ maxPanel.add(new UILabel(Toolkit.i18nText("Fine-Design_Basic_Datasource_Maximum_Number_of_Preview_Rows") + ":"));
maxPreviewNumberField = new UINumberField();
maxPanel.add(maxPreviewNumberField);
@@ -158,7 +169,7 @@ public class PreviewTablePane extends BasicPane {
if (this.dialog == null) {
this.dialog = this.showWindow(new JFrame());
}
- progressBar = new AutoProgressBar(this, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Loading_Data"), "", 0, 100) {
+ progressBar = new AutoProgressBar(this, Toolkit.i18nText("Fine-Design_Basic_Loading_Data"), "", 0, 100) {
public void doMonitorCanceled() {
if (getWorker() != null) {
getWorker().cancel(true);
@@ -174,7 +185,7 @@ public class PreviewTablePane extends BasicPane {
@Override
protected String title4PopupWindow() {
- return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preview");
+ return Toolkit.i18nText("Fine-Design_Basic_Preview");
}
private void addLoadedListener(LoadedEventListener l) {
@@ -268,7 +279,7 @@ public class PreviewTablePane extends BasicPane {
*/
public static EmbeddedTableData previewTableData(TableData tableData, final int keyIndex, final int valueIndex) {
PreviewTablePane previewTablePane = new PreviewTablePane();
- previewTablePane.setBorder(BorderFactory.createTitledBorder(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Data")));
+ previewTablePane.setBorder(BorderFactory.createTitledBorder(Toolkit.i18nText("Fine-Design_Basic_Data")));
try {
previewTablePane.populate(tableData);
previewTablePane.resetPreviewTableColumnColor();
@@ -298,13 +309,13 @@ public class PreviewTablePane extends BasicPane {
try {
int choiceColumn = Integer.parseInt(columnErrMessage.trim());
int tatalColumn = Integer.parseInt(tatolColumnErrMessage.trim());
- columnErrMessage = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Tabledata_Preview_Warn_Text", choiceColumn + 1, tatalColumn);
+ columnErrMessage = Toolkit.i18nText("Fine-Design_Basic_Tabledata_Preview_Warn_Text", choiceColumn + 1, tatalColumn);
} catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
return;
}
FineLoggerFactory.getLogger().error(exp.getMessage(), exp);
- FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), columnErrMessage, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Error"), JOptionPane.ERROR_MESSAGE);
+ FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), columnErrMessage, Toolkit.i18nText("Fine-Design_Basic_Error"), JOptionPane.ERROR_MESSAGE);
}
private void populate(TableData tableData) throws Exception {
@@ -317,7 +328,7 @@ public class PreviewTablePane extends BasicPane {
}
private void previewTableDataSQL() throws Exception {
- connectionBar = new AutoProgressBar(this, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Utils_Now_Create_Connection"), "", 0, 100) {
+ connectionBar = new AutoProgressBar(this, Toolkit.i18nText("Fine-Design_Basic_Utils_Now_Create_Connection"), "", 0, 100) {
public void doMonitorCanceled() {
getWorker().cancel(true);
getDialog().setVisible(false);
@@ -365,13 +376,14 @@ public class PreviewTablePane extends BasicPane {
if (tableData instanceof DBTableData) {
boolean status = DataOperator.getInstance().testConnection(((DBTableData) tableData).getDatabase());
if (!status) {
- throw new Exception(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Database_Connection_Failed"));
+ throw new Exception(Toolkit.i18nText("Fine-Design_Basic_Database_Connection_Failed"));
}
}
} finally {
- connectionBar.close();
+ // 将close操作放到EDT线程中
+ UIUtil.invokeLaterIfNeeded(() -> connectionBar.close());
}
- TableDataSource dataSource = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().getTarget();
+ TableDataSource dataSource = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate().getTarget();
previewTableData = DesignTableDataManager.previewTableDataNeedInputParameters(dataSource, tableData, (int) maxPreviewNumberField.getValue(), true, progressBar);
// parameterInputDialog
// update之后的parameters,转成一个parameterMap,用于预览TableData
@@ -396,7 +408,7 @@ public class PreviewTablePane extends BasicPane {
if (!(e instanceof CancellationException)) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), e.getMessage(),
- com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Error"), JOptionPane.ERROR_MESSAGE, UIManager.getIcon("OptionPane.errorIcon"));
+ Toolkit.i18nText("Fine-Design_Basic_Error"), JOptionPane.ERROR_MESSAGE, UIManager.getIcon("OptionPane.errorIcon"));
}
dialog.setVisible(false);
} finally {
@@ -425,7 +437,7 @@ public class PreviewTablePane extends BasicPane {
public static void previewStoreData(final ProcedureDataModel storeProcedureDataModel, final int keyIndex, final int valueIndex) {
final PreviewTablePane previewTablePane = new PreviewTablePane();
previewTablePane.storeProcedureDataModel = storeProcedureDataModel;
- previewTablePane.setBorder(BorderFactory.createTitledBorder(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Data")));
+ previewTablePane.setBorder(BorderFactory.createTitledBorder(Toolkit.i18nText("Fine-Design_Basic_Data")));
try {
previewTablePane.populateStoreDataSQL();
@@ -442,7 +454,7 @@ public class PreviewTablePane extends BasicPane {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
}
previewTablePane.fireLoadedListener();
- previewTablePane.showWindow(DesignerContext.getDesignerFrame()).setVisible(true);
+ previewTablePane.showWindow(new JFrame()).setVisible(true);
}
/**
@@ -456,7 +468,7 @@ public class PreviewTablePane extends BasicPane {
for (int i = 0; i < tableSize; i++) {
PreviewTablePane previewTablePane = new PreviewTablePane();
previewTablePane.storeProcedureDataModel = storeProcedureDataModels[i];
- previewTablePane.setBorder(BorderFactory.createTitledBorder(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Data")));
+ previewTablePane.setBorder(BorderFactory.createTitledBorder(Toolkit.i18nText("Fine-Design_Basic_Data")));
try {
previewTablePane.populateStoreDataSQL();
} catch (Exception e) {
@@ -469,13 +481,13 @@ public class PreviewTablePane extends BasicPane {
@Override
protected String title4PopupWindow() {
- return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preview");
+ return Toolkit.i18nText("Fine-Design_Basic_Preview");
}
};
prieviewPane.setLayout(FRGUIPaneFactory.createBorderLayout());
prieviewPane.add(tabPreviewpane, BorderLayout.CENTER);
- prieviewPane.showWindow(DesignerContext.getDesignerFrame()).setVisible(true);
+ prieviewPane.showWindow(new JFrame()).setVisible(true);
}
private void populateStoreDataSQL() throws Exception {
diff --git a/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java b/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java
index d1beacb1d..6065d0485 100644
--- a/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java
+++ b/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java
@@ -185,7 +185,8 @@ public class DBTableDataPane extends AbstractTableDataPane {
box.setMinimumSize(new Dimension(300, 400));
// 防止数据连接名过长时影响 split pane 分割效果
- connectionTableProcedurePane.setMinimumSize(new Dimension(250, 400));
+ // 本界面中给MaxMemRowCountPanel留的空间太小,造成MaxMemRowCountPanel显示异常,这边减小一点最小宽度,拉长MaxMemRowCountPanel
+ connectionTableProcedurePane.setMinimumSize(new Dimension(230, 400));
connectionTableProcedurePane.setMaximumSize(new Dimension(500, 400));
// 使用SplitPane
JSplitPane mainSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, connectionTableProcedurePane, sqlSplitPane);
diff --git a/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/MaxMemRowCountPanel.java b/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/MaxMemRowCountPanel.java
index 13fd60a60..af2b71a7c 100644
--- a/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/MaxMemRowCountPanel.java
+++ b/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/MaxMemRowCountPanel.java
@@ -21,7 +21,7 @@ public class MaxMemRowCountPanel extends UIToolbar {
private static final int MAX_IN_MEMORY = 1;
private static final String[] CACHE_LIST = {com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Save_All_Records_In_Memory"),
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Max_Mem_Row_Count") };
- private static final int MAX_WIDTH = getMaxComBoBoxWidth() > 200 ? 350 : 250;
+ private static final int MAX_WIDTH = getMaxComBoBoxWidth() > 200 ? 350 : 280;
private static final int MAX_COMPONENT_COUNT_OF_MAX_MEMORY = 4;
private static int getMaxComBoBoxWidth() {
int maxWidth = GraphHelper.getWidth(CACHE_LIST[0]);
@@ -73,7 +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(4);
+ numberSpinner.setNumberFieldColumns(3);
}
private void showAllPanel() {
diff --git a/designer-base/src/main/java/com/fr/design/data/tabledata/wrapper/StoreProcedureDataWrapper.java b/designer-base/src/main/java/com/fr/design/data/tabledata/wrapper/StoreProcedureDataWrapper.java
index cefc0e112..17fbf5788 100644
--- a/designer-base/src/main/java/com/fr/design/data/tabledata/wrapper/StoreProcedureDataWrapper.java
+++ b/designer-base/src/main/java/com/fr/design/data/tabledata/wrapper/StoreProcedureDataWrapper.java
@@ -7,17 +7,16 @@ import com.fr.data.impl.storeproc.StoreProcedure;
import com.fr.data.operator.DataOperator;
import com.fr.design.data.DesignTableDataManager;
import com.fr.design.data.datapane.preview.PreviewTablePane;
-import com.fr.design.dialog.BasicDialog;
-import com.fr.design.dialog.DialogActionAdapter;
import com.fr.design.dialog.FineJOptionPane;
import com.fr.design.gui.iprogressbar.AutoProgressBar;
import com.fr.design.gui.itree.refreshabletree.ExpandMutableTreeNode;
+import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.DesignerContext;
import com.fr.general.ComparatorUtils;
import com.fr.log.FineLoggerFactory;
import javax.swing.Icon;
-import javax.swing.JOptionPane;
+import javax.swing.JFrame;
import javax.swing.SwingWorker;
import java.util.ArrayList;
import java.util.Arrays;
@@ -50,7 +49,6 @@ public final class StoreProcedureDataWrapper implements TableDataWrapper {
private AutoProgressBar connectionBar;
private ProcedureDataModel[] dataModels;
private SwingWorker worker;
- private BasicDialog dialog;
private int previewModel;
public StoreProcedureDataWrapper(StoreProcedure storeProcedure, String storeprocedureName, String dsName) {
@@ -71,19 +69,8 @@ public final class StoreProcedureDataWrapper implements TableDataWrapper {
if (needLoad) {
setWorker();
}
- dialog = PreviewTablePane.getInstance().getDialog();
- dialog.addDialogActionListener(new DialogActionAdapter() {
- public void doOk() {
- getWorker().cancel(true);
- }
-
- public void doCancel() {
- getWorker().cancel(true);
- }
- });
- loadingBar = new AutoProgressBar(dialog, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Loading_Data"), "", 0, 100) {
+ loadingBar = new AutoProgressBar(new JFrame(), Toolkit.i18nText("Fine-Design_Basic_Loading_Data"), "", 0, 100) {
public void doMonitorCanceled() {
- getDialog().setVisible(false);
getWorker().cancel(true);
}
};
@@ -93,17 +80,17 @@ public final class StoreProcedureDataWrapper implements TableDataWrapper {
* 数据集执行结果返回的所有字段
*
* @return 数据集执行结果返回的所有字段
- *
+ *
*
* @date 2014-12-3-下午7:43:17
- *
+ *
*/
public List calculateColumnNameList() {
if (columnNameList != null) {
return columnNameList;
}
if (!createStore(false)) {
- FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Engine_No_TableData"));
+ FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Toolkit.i18nText("Fine-Design_Basic_Engine_No_TableData"));
return new ArrayList();
}
columnNameList = Arrays.asList(procedureDataModel.getColumnName());
@@ -114,10 +101,10 @@ public final class StoreProcedureDataWrapper implements TableDataWrapper {
* 生成子节点
*
* @return 节点数组
- *
+ *
*
* @date 2014-12-3-下午7:06:47
- *
+ *
*/
public ExpandMutableTreeNode[] load() {
List namelist;
@@ -160,25 +147,16 @@ public final class StoreProcedureDataWrapper implements TableDataWrapper {
/**
* 预览数据
- *
+ *
* @param previewModel 预览模式, 全部还是一个
- *
+ *
*
* @date 2014-12-3-下午7:05:50
- *
+ *
*/
public void previewData(final int previewModel) {
this.previewModel = previewModel;
- new SwingWorker() {
-
- protected Object doInBackground() throws Exception {
- loadingBar.close();
- PreviewTablePane.resetPreviewTable();
- dialog.setVisible(true);
- return null;
- }
- }.execute();
- connectionBar = new AutoProgressBar(dialog, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Utils_Now_Create_Connection"), "", 0, 100) {
+ connectionBar = new AutoProgressBar(new JFrame(), Toolkit.i18nText("Fine-Design_Basic_Utils_Now_Create_Connection"), "", 0, 100) {
public void doMonitorCanceled() {
connectionBar.close();
worker.cancel(true);
@@ -190,13 +168,13 @@ public final class StoreProcedureDataWrapper implements TableDataWrapper {
private void setWorker() {
worker = new SwingWorker() {
protected Void doInBackground() throws Exception {
+ loadingBar.close();
+ PreviewTablePane.resetPreviewTable();
connectionBar.start();
boolean status = DataOperator.getInstance().testConnection(((StoreProcedure) getTableData()).getDatabaseConnection());
if (!status) {
connectionBar.close();
- // bug 61345 预览失败时,关闭窗口
- dialog.setVisible(false);
- throw new Exception(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Database_Connection_Failed"));
+ throw new Exception(Toolkit.i18nText("Fine-Design_Basic_Database_Connection_Failed"));
}
connectionBar.close();
storeProcedure.resetDataModelList();
@@ -208,7 +186,6 @@ public final class StoreProcedureDataWrapper implements TableDataWrapper {
try {
get();
loadingBar.close();
- dialog.setVisible(false);
switch (previewModel) {
case StoreProcedureDataWrapper.PREVIEW_ALL:
PreviewTablePane.previewStoreDataWithAllDs(dataModels);
@@ -228,10 +205,6 @@ public final class StoreProcedureDataWrapper implements TableDataWrapper {
};
}
- private BasicDialog getDialog() {
- return this.dialog;
- }
-
private SwingWorker getWorker() {
return this.worker;
}
@@ -240,10 +213,10 @@ public final class StoreProcedureDataWrapper implements TableDataWrapper {
/**
* 预览返回的一个数据集
- *
+ *
*
* @date 2014-12-3-下午7:42:53
- *
+ *
*/
public void previewData() {
previewData(-1, -1);
@@ -253,13 +226,13 @@ public final class StoreProcedureDataWrapper implements TableDataWrapper {
/**
* 预览返回的一个数据集,带有显示值和实际值的标记结果
- *
+ *
* @param keyIndex 实际值
* @param valueIndex 显示值
- *
+ *
*
* @date 2014-12-3-下午7:42:27
- *
+ *
*/
public void previewData(final int keyIndex, final int valueIndex) {
PreviewTablePane.previewStoreData(procedureDataModel, keyIndex, valueIndex);
diff --git a/designer-base/src/main/java/com/fr/design/dialog/link/MessageWithLink.java b/designer-base/src/main/java/com/fr/design/dialog/link/MessageWithLink.java
new file mode 100644
index 000000000..8a1f55cbd
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/dialog/link/MessageWithLink.java
@@ -0,0 +1,55 @@
+package com.fr.design.dialog.link;
+
+import com.fr.design.gui.ilable.UILabel;
+import com.fr.log.FineLoggerFactory;
+import com.fr.stable.StringUtils;
+import java.awt.Color;
+import java.awt.Desktop;
+import java.awt.Font;
+import java.net.URI;
+import javax.swing.JEditorPane;
+import javax.swing.event.HyperlinkEvent;
+
+/**
+ * 用来构建JOptionPane带超链的消息提示
+ *
+ * @author hades
+ * @version 10.0
+ * Created by hades on 2020/10/23
+ */
+public class MessageWithLink extends JEditorPane {
+
+ public MessageWithLink(String message, String linkName, String link) {
+ super("text/html", "" + message + "" + linkName + "" + "");
+ addHyperlinkListener(e -> {
+ if (e.getEventType().equals(HyperlinkEvent.EventType.ACTIVATED)) {
+ try {
+ Desktop.getDesktop().browse(URI.create(link));
+ } catch (Exception exception) {
+ FineLoggerFactory.getLogger().error(exception.getMessage(), exception);
+ }
+ }
+ });
+ setEditable(false);
+ setBorder(null);
+ }
+
+ public MessageWithLink(String linkName, String link ) {
+ this(StringUtils.EMPTY, linkName, link);
+ }
+
+ private static StringBuilder getStyle() {
+ // 构建和相同风格样式
+ UILabel label = new UILabel();
+ Font font = label.getFont();
+ Color color = label.getBackground();
+
+ StringBuilder style = new StringBuilder("font-family:" + font.getFamily() + ";");
+ style.append("font-weight:").append(font.isBold() ? "bold" : "normal").append(";");
+ style.append("font-size:").append(font.getSize()).append("pt;");
+ style.append("background-color: rgb(").append(color.getRed()).append(",").append(color.getGreen()).append(",").append(color.getBlue()).append(");");
+
+ return style;
+ }
+
+}
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 37a671eeb..f9de1cfa4 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
@@ -169,7 +169,8 @@ public class RemoteDesignerWorkspaceInfo implements DesignerWorkspaceInfo {
return result;
}
try {
- result = WorkContext.getConnector().testConnection(connection);
+ WorkContext.getConnector().validateVT(connection);
+ result = true;
} catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
return result;
diff --git a/designer-base/src/main/java/com/fr/design/extra/ShopDialog.java b/designer-base/src/main/java/com/fr/design/extra/ShopDialog.java
index 69ad0f08d..e0170cef8 100644
--- a/designer-base/src/main/java/com/fr/design/extra/ShopDialog.java
+++ b/designer-base/src/main/java/com/fr/design/extra/ShopDialog.java
@@ -2,6 +2,7 @@ package com.fr.design.extra;
import com.fr.design.dialog.BasicPane;
import com.fr.design.dialog.UIDialog;
+import com.fr.design.jdk.JdkVersion;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.stable.StableUtils;
@@ -12,7 +13,6 @@ import java.awt.*;
* Created by vito on 16/4/18.
*/
public class ShopDialog extends UIDialog {
- private static final Dimension DEFAULT_SHOP = new Dimension(900, 700);
public ShopDialog(Frame frame, BasicPane pane) {
super(frame);
@@ -22,11 +22,21 @@ public class ShopDialog extends UIDialog {
JPanel panel = (JPanel) getContentPane();
panel.setLayout(new BorderLayout());
add(pane, BorderLayout.CENTER);
- setSize(DEFAULT_SHOP);
+ setSize(createDefaultDimension());
GUICoreUtils.centerWindow(this);
setResizable(false);
}
+ private Dimension createDefaultDimension() {
+ Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
+ // jdk11 分辨率较低 缩放较大时 屏幕高度小于或接近设定的高度 需要调整下
+ if (JdkVersion.GE_9.support() && screenSize.height - 700 < 50) {
+ return new Dimension(900, screenSize.height - 100);
+ } else {
+ return new Dimension(900, 700);
+ }
+ }
+
@Override
public void checkValid() throws Exception {
// do nothing
diff --git a/designer-base/src/main/java/com/fr/design/gui/frpane/UINumberDragPane.java b/designer-base/src/main/java/com/fr/design/gui/frpane/UINumberDragPane.java
index b1958a8c1..731402572 100644
--- a/designer-base/src/main/java/com/fr/design/gui/frpane/UINumberDragPane.java
+++ b/designer-base/src/main/java/com/fr/design/gui/frpane/UINumberDragPane.java
@@ -1,17 +1,16 @@
package com.fr.design.gui.frpane;
-import java.awt.BorderLayout;
-import java.awt.Dimension;
-
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.event.GlobalNameListener;
import com.fr.design.event.GlobalNameObserver;
import com.fr.design.gui.ispinner.UISpinner;
import com.fr.design.gui.style.NumberDragBar;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+
public class UINumberDragPane extends BasicBeanPane implements GlobalNameObserver {
private static final long serialVersionUID = -8681716725163358249L;
@@ -35,7 +34,7 @@ public class UINumberDragPane extends BasicBeanPane implements GlobalNam
public UINumberDragPane(double minValue, double maxValue, double dierta) {
dragBar = new NumberDragBar((int) minValue, (int) maxValue);
- spinner = new UISpinner(minValue, maxValue, dierta, minValue);
+ spinner = createUISpinner(minValue, maxValue, dierta);
spinner.setGlobalName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_StyleAlignment_Text_Rotation"));
this.setLayout(new BorderLayout(4, 0));
this.add(spinner, BorderLayout.EAST);
@@ -66,6 +65,10 @@ public class UINumberDragPane extends BasicBeanPane implements GlobalNam
});
}
+ protected UISpinner createUISpinner(double minValue, double maxValue, double dierta) {
+ return new UISpinner(minValue, maxValue, dierta, minValue);
+ }
+
/**
* 添加事件
* @param l 事件
diff --git a/designer-chart/src/main/java/com/fr/design/chartx/component/combobox/ColorSchemeComboBox.java b/designer-base/src/main/java/com/fr/design/gui/icombobox/ColorSchemeComboBox.java
similarity index 85%
rename from designer-chart/src/main/java/com/fr/design/chartx/component/combobox/ColorSchemeComboBox.java
rename to designer-base/src/main/java/com/fr/design/gui/icombobox/ColorSchemeComboBox.java
index e09362cb6..044bb6518 100644
--- a/designer-chart/src/main/java/com/fr/design/chartx/component/combobox/ColorSchemeComboBox.java
+++ b/designer-base/src/main/java/com/fr/design/gui/icombobox/ColorSchemeComboBox.java
@@ -1,11 +1,9 @@
-package com.fr.design.chartx.component.combobox;
+package com.fr.design.gui.icombobox;
import com.fr.base.ChartColorMatching;
import com.fr.base.ChartPreStyleConfig;
import com.fr.cert.token.lang.Collections;
import com.fr.chart.base.ChartConstants;
-import com.fr.design.gui.icombobox.UIComboBox;
-import com.fr.design.gui.icombobox.UIComboBoxRenderer;
import com.fr.design.i18n.Toolkit;
import com.fr.general.GeneralUtils;
@@ -36,11 +34,18 @@ public class ColorSchemeComboBox extends UIComboBox {
private Map colorSchemes;
+ private boolean preDefined;
+
public ColorSchemeComboBox() {
- this(null);
+ this(null, false);
}
public ColorSchemeComboBox(Map colorSchemes) {
+ this(colorSchemes, false);
+ }
+
+ public ColorSchemeComboBox(Map colorSchemes, boolean preDefined) {
+ this.preDefined = preDefined;
//通过配色方案的集合初始化下拉控件,如果参数为null,从配置中读取配色方案。
if (colorSchemes == null) {
colorSchemes = getColorSchemesFromConfig();
@@ -59,22 +64,26 @@ public class ColorSchemeComboBox extends UIComboBox {
//所有的样式名称
Iterator names = config.names();
- //添加默认的方案和第一个方案
- String defaultName = config.getCurrentStyle();
- ChartColorMatching defaultStyle = (ChartColorMatching) config.getPreStyle(defaultName);
- if (names.hasNext()) {
- Object firstName = names.next();
- ChartColorMatching firstStyle = (ChartColorMatching) config.getPreStyle(firstName);
- if (defaultStyle == null) {
- defaultStyle = firstStyle;
- }
- colorSchemes.put(Toolkit.i18nText("Fine-Design_Report_Default"), colorMatchingToColorInfo(defaultStyle));
- colorSchemes.put(firstStyle.getId(), colorMatchingToColorInfo(firstStyle));
+ if (preDefined) {
+ colorSchemes.put(Toolkit.i18nText("Fine-Design_Chart_Predefined"), null);
} else {
- ColorInfo colorInfo = new ColorInfo();
- colorInfo.setGradient(false);
- colorInfo.setColors(Collections.arrayToList(ChartConstants.CHART_COLOR_ARRAY));
- colorSchemes.put(Toolkit.i18nText("Fine-Design_Report_Default"), colorInfo);
+ //添加默认的方案和第一个方案
+ String defaultName = config.getCurrentStyle();
+ ChartColorMatching defaultStyle = (ChartColorMatching) config.getPreStyle(defaultName);
+ if (names.hasNext()) {
+ Object firstName = names.next();
+ ChartColorMatching firstStyle = (ChartColorMatching) config.getPreStyle(firstName);
+ if (defaultStyle == null) {
+ defaultStyle = firstStyle;
+ }
+ colorSchemes.put(Toolkit.i18nText("Fine-Design_Report_Default"), colorMatchingToColorInfo(defaultStyle));
+ colorSchemes.put(firstStyle.getId(), colorMatchingToColorInfo(firstStyle));
+ } else {
+ ColorInfo colorInfo = new ColorInfo();
+ colorInfo.setGradient(false);
+ colorInfo.setColors(Collections.arrayToList(ChartConstants.CHART_COLOR_ARRAY));
+ colorSchemes.put(Toolkit.i18nText("Fine-Design_Report_Default"), colorInfo);
+ }
}
//添加其他的配色方案
diff --git a/designer-base/src/main/java/com/fr/design/gui/iprogressbar/ProgressDialog.java b/designer-base/src/main/java/com/fr/design/gui/iprogressbar/ProgressDialog.java
index 29214984c..d1847545c 100644
--- a/designer-base/src/main/java/com/fr/design/gui/iprogressbar/ProgressDialog.java
+++ b/designer-base/src/main/java/com/fr/design/gui/iprogressbar/ProgressDialog.java
@@ -3,11 +3,12 @@ package com.fr.design.gui.iprogressbar;
import com.fr.design.constants.UIConstants;
import com.fr.design.dialog.UIDialog;
import com.fr.design.gui.ilable.UILabel;
-import com.fr.stable.os.support.OSBasedAction;
-import com.fr.stable.os.support.OSSupportCenter;
import com.fr.design.os.impl.SupportOSImpl;
+import com.fr.design.utils.DesignUtils;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.general.FRFont;
+import com.fr.stable.os.support.OSBasedAction;
+import com.fr.stable.os.support.OSSupportCenter;
import javax.swing.JDialog;
import javax.swing.JLabel;
@@ -57,7 +58,10 @@ public class ProgressDialog extends UIDialog {
progressBar.setMaximum(1000);
panel.add(progressBar, BorderLayout.CENTER);
text = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Loading_Project"), JLabel.CENTER);
- FRFont font = FRFont.getInstance().applySize(14).applyForeground(new ColorUIResource(333334));
+ FRFont font = DesignUtils
+ .getDefaultGUIFont()
+ .applySize(14)
+ .applyForeground(new ColorUIResource(333334));
text.setFont(font);
panel.add(text, BorderLayout.SOUTH);
panel.setVisible(true);
diff --git a/designer-base/src/main/java/com/fr/design/gui/style/AlignmentPane.java b/designer-base/src/main/java/com/fr/design/gui/style/AlignmentPane.java
index b188cb5aa..50d6448b8 100644
--- a/designer-base/src/main/java/com/fr/design/gui/style/AlignmentPane.java
+++ b/designer-base/src/main/java/com/fr/design/gui/style/AlignmentPane.java
@@ -55,7 +55,7 @@ public class AlignmentPane extends AbstractBasicStylePane implements GlobalNameO
private static final int ANGEL = 90;
private static final int GAP = 23;
private static final int VERGAP = 3;
- private static final Dimension SPINNER_DIMENSION = new Dimension(75, 20);
+ private static final Dimension SPINNER_DIMENSION = new Dimension(70, 20);
private static final String[] TEXT = {com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Style_Alignment_Wrap_Text"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Style_Alignment_Single_Line"),
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_StyleAlignment_Single_Line(Adjust_Font)"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_StyleAlignment_Multi_Line(Adjust_Font)")};
diff --git a/designer-base/src/main/java/com/fr/design/gui/style/BackgroundNoImagePane.java b/designer-base/src/main/java/com/fr/design/gui/style/BackgroundNoImagePane.java
index 54ad9623e..556b27c21 100644
--- a/designer-base/src/main/java/com/fr/design/gui/style/BackgroundNoImagePane.java
+++ b/designer-base/src/main/java/com/fr/design/gui/style/BackgroundNoImagePane.java
@@ -28,7 +28,7 @@ public class BackgroundNoImagePane extends BackgroundPane{
fireStateChanged();
}
});
- GradientBackgroundQuickPane gradientPane = new GradientBackgroundQuickPane();
+ GradientBackgroundQuickPane gradientPane = createGradientBackgroundQuickPane();
gradientPane.registerChangeListener(new UIObserverListener() {
@Override
@@ -42,4 +42,8 @@ public class BackgroundNoImagePane extends BackgroundPane{
gradientPane
};
}
-}
\ No newline at end of file
+
+ protected GradientBackgroundQuickPane createGradientBackgroundQuickPane(){
+ return new GradientBackgroundQuickPane();
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/design/gui/style/BackgroundPane.java b/designer-base/src/main/java/com/fr/design/gui/style/BackgroundPane.java
index 88ee482cb..407c522ce 100644
--- a/designer-base/src/main/java/com/fr/design/gui/style/BackgroundPane.java
+++ b/designer-base/src/main/java/com/fr/design/gui/style/BackgroundPane.java
@@ -71,7 +71,7 @@ public class BackgroundPane extends AbstractBasicStylePane {
double p = TableLayout.PREFERRED;
Component[][] components = new Component[][]{
new Component[]{null, null},
- new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Fill") + " ", SwingConstants.LEFT),typeComboBox},
+ new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Fill"), SwingConstants.LEFT),typeComboBox},
new Component[]{null, centerPane}
};
double[] rowSize = {p, p, p};
@@ -89,7 +89,7 @@ public class BackgroundPane extends AbstractBasicStylePane {
kinds.add(new TextureBackgroundQuickPane());
kinds.add(new PatternBackgroundQuickPane());
kinds.add(new ImageBackgroundQuickPane());
- kinds.add(new GradientBackgroundQuickPane());
+ kinds.add(createGradientBackgroundQuickPane());
Set providers = ExtraDesignClassManager.getInstance().getArray(BackgroundQuickUIProvider.MARK_STRING);
for (BackgroundQuickUIProvider provider : providers) {
kinds.add(provider.appearanceForBackground());
@@ -98,6 +98,10 @@ public class BackgroundPane extends AbstractBasicStylePane {
return kinds.toArray(new BackgroundQuickPane[kinds.size()]);
}
+ protected GradientBackgroundQuickPane createGradientBackgroundQuickPane(){
+ return new GradientBackgroundQuickPane();
+ }
+
/**
* 事件监听
@@ -172,4 +176,4 @@ public class BackgroundPane extends AbstractBasicStylePane {
return style.deriveBackground(this.update());
}
-}
\ No newline at end of file
+}
diff --git a/designer-base/src/main/java/com/fr/design/gui/style/BackgroundSpecialPane.java b/designer-base/src/main/java/com/fr/design/gui/style/BackgroundSpecialPane.java
index 72aa1b35e..3713fca7b 100644
--- a/designer-base/src/main/java/com/fr/design/gui/style/BackgroundSpecialPane.java
+++ b/designer-base/src/main/java/com/fr/design/gui/style/BackgroundSpecialPane.java
@@ -39,7 +39,7 @@ public class BackgroundSpecialPane extends BackgroundPane{
fireStateChanged();
}
});
- GradientBackgroundQuickPane gradientPane = new GradientBackgroundQuickPane();
+ GradientBackgroundQuickPane gradientPane = createGradientBackgroundQuickPane();
gradientPane.registerChangeListener(new UIObserverListener() {
@Override
public void doChange() {
@@ -48,12 +48,12 @@ public class BackgroundSpecialPane extends BackgroundPane{
});
//hugh:表单支持背景接口
List kinds = new ArrayList();
-
+
kinds.add(new NullBackgroundQuickPane());
kinds.add(colorBackgroundPane);
kinds.add(imageBackgroundPane);
kinds.add(gradientPane);
-
+
Set providers = ExtraDesignClassManager.getInstance().getArray(BackgroundQuickUIProvider.MARK_STRING);
for (BackgroundQuickUIProvider provider : providers) {
BackgroundQuickPane newTypePane = provider.appearanceForBackground();
@@ -65,7 +65,11 @@ public class BackgroundSpecialPane extends BackgroundPane{
});
kinds.add(newTypePane);
}
-
+
return kinds.toArray(new BackgroundQuickPane[kinds.size()]);
}
-}
\ No newline at end of file
+
+ protected GradientBackgroundQuickPane createGradientBackgroundQuickPane(){
+ return new GradientBackgroundQuickPane();
+ }
+}
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 233fcd598..3582c4ad9 100644
--- a/designer-base/src/main/java/com/fr/design/gui/syntax/ui/rtextarea/ConfigurableCaret.java
+++ b/designer-base/src/main/java/com/fr/design/gui/syntax/ui/rtextarea/ConfigurableCaret.java
@@ -2,7 +2,7 @@
* 12/21/2004
*
* ConfigurableCaret.java - The caret used by RTextArea.
- *
+ *
* This library is distributed under a modified BSD license. See the included
* RSyntaxTextArea.License.txt file for details.
*/
@@ -159,7 +159,7 @@ public class ConfigurableCaret extends DefaultCaret {
textArea.isRequestFocusEnabled()) {
if (inWindow)
textArea.requestFocusInWindow();
- else
+ else
textArea.requestFocus();
}
}
@@ -458,7 +458,8 @@ public class ConfigurableCaret extends DefaultCaret {
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));
+ // REPORT-41895 光标上方超出背景高亮的部分不会闪烁,会形成一个停留的小点,因此将光标的超出部分截去
+ g2.draw(new Line2D.Float(r.x + 1, r.y + 1, r.x + 1, r.y + r.height));
break;
} // End of switch (style).
@@ -676,7 +677,7 @@ public class ConfigurableCaret extends DefaultCaret {
if (line buttonListeners = itemBean.getButtonListeners();
if (buttonListeners != null) {
@@ -324,6 +329,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
cellElement.popupDialog.showDefaultPane();
}
}
+
// 禁用单元格元素tab
private void enableCellElementPane(PropertyItem cellElement) {
cellElement.setEnabled(true);
@@ -381,7 +387,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
/**
* 可通过此方法,判断当前的编辑模式
- * */
+ */
public PropertyMode getCurrentMode() {
return currentMode;
}
@@ -527,7 +533,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
propertyItemMap.get(KEY_WIDGET_SETTINGS).replaceHeaderPane(paraPane);
}
- public static void main(String[] args){
+ public static void main(String[] args) {
JFrame jf = new JFrame("test");
// jf = new JFrame("test");
@@ -549,7 +555,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
// leftPane.add(b2);
// leftPane.setLayout(new BoxLayout(leftPane, BoxLayout.Y_AXIS));
- JPanel content = (JPanel)jf.getContentPane();
+ JPanel content = (JPanel) jf.getContentPane();
// content.setLayout(null);
content.add(cc, BorderLayout.CENTER);
content.add(new EastRegionContainerPane(), BorderLayout.EAST);
@@ -657,6 +663,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
class PropertyItem {
+ private SnapChat snapChat;
private UIButton button;
private String name; // 用于 card 切换
private String title; // 用于显示
@@ -667,6 +674,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
private FixedPopupPane popupPane; // 左侧固定弹出框
private PopupToolPane popupToolPane; // 弹出工具条
private PopupDialog popupDialog; // 弹出框
+ private PromptWindow promptWindow; //提示窗
private boolean isPoppedOut = false; // 是否弹出
private boolean isVisible = true; // 是否可见
private boolean replace = false; // 是否被替代
@@ -687,14 +695,16 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
public PropertyItem(String name, String title, String btnIconName, PropertyMode[] visibleModes, PropertyMode[] enableModes) {
- this(name, title, btnIconName, ICON_BASE_DIR, visibleModes, enableModes);
+ this(name, title, btnIconName, ICON_BASE_DIR, visibleModes, enableModes, null, null);
}
- public PropertyItem(String name, String title, String btnIconName, String iconBaseDir, PropertyMode[] visibleModes, PropertyMode[] enableModes) {
+ public PropertyItem(String name, String title, String btnIconName, String iconBaseDir, PropertyMode[] visibleModes, PropertyMode[] enableModes, SnapChat snapChat, PromptWindow promptWindow) {
this.name = name;
this.title = title;
this.btnIconName = btnIconName;
this.iconBaseDir = iconBaseDir;
+ this.snapChat = snapChat;
+ this.promptWindow = promptWindow;
initButton();
initPropertyPanel();
initModes(visibleModes, enableModes);
@@ -835,7 +845,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
if (isRightPaneVisible()) {
hideCurrentPopupPane();
replaceContentPane(contentPane);
- } else if(popupPane != null && popupPane.isVisible()) {
+ } else if (popupPane != null && popupPane.isVisible()) {
popupPane.replaceContentPane(contentArea);
}
}
@@ -872,9 +882,13 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
public Dimension getPreferredSize() {
return new Dimension(TAB_BUTTON_WIDTH, TAB_BUTTON_HEIGHT);
}
+
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
+ if (snapChat != null && !snapChat.hasRead()) {
+ SnapChatUtil.paintPropertyItemPoint(g, getBounds());
+ }
}
};
button.set4LargeToolbarButton();
@@ -902,6 +916,12 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
popupFixedPane();
}
setTabButtonSelected();
+ if (snapChat != null && !snapChat.hasRead()) {
+ snapChat.markRead();
+ if (promptWindow != null) {
+ promptWindow.showWindow();
+ }
+ }
}
});
button.setToolTipText(title);
@@ -1015,8 +1035,8 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
}
/**
- * @Description:刷新currentPopupPane面板位置,当设计器缩放时会调用这个函数
* @param
+ * @Description:刷新currentPopupPane面板位置,当设计器缩放时会调用这个函数
* @return:
* @Author: Henry.Wang
* @date: 2020/7/30 11:39
@@ -1031,8 +1051,8 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
}
/**
- * @Description:清空currentPopupPane数据,当切换模板时会调用这个函数
* @param
+ * @Description:清空currentPopupPane数据,当切换模板时会调用这个函数
* @return:
* @Author: Henry.Wang
* @date: 2020/7/30 11:42
@@ -1071,12 +1091,14 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
}
repaint();
}
+
@Override
public void mouseClicked(MouseEvent e) {
if (e.getX() >= ARROW_RANGE_START) {
onPop();
}
}
+
@Override
public void mouseReleased(MouseEvent e) {
mouseDownCompCoords = null;
@@ -1084,6 +1106,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
contentPane.setBackground(originColor);
}
}
+
@Override
public void mousePressed(MouseEvent e) {
if (e.getX() < ARROW_RANGE_START) {
@@ -1105,6 +1128,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
}
repaint();
}
+
@Override
public void mouseDragged(MouseEvent e) {
if (isMovable && mouseDownCompCoords != null) {
@@ -1217,6 +1241,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
private Container contentPane;
private JPanel defaultPane; // 无可用配置项
private PropertyItem propertyItem;
+
public PopupDialog(PropertyItem propertyItem) {
super(DesignerContext.getDesignerFrame());
container = getContentPane();
@@ -1319,6 +1344,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
mouseDownCompCoords = e.getLocationOnScreen();
}
}
+
@Override
public void mouseReleased(MouseEvent e) {
mouseDownCompCoords = null;
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java
index f29e22698..9810842dc 100644
--- a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java
+++ b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java
@@ -6,6 +6,7 @@ import com.fr.base.Parameter;
import com.fr.base.ScreenResolution;
import com.fr.base.io.BaseBook;
import com.fr.base.iofile.attr.DesignBanCopyAttrMark;
+import com.fr.base.iofile.attr.PredefinedStyleAttrMark;
import com.fr.base.iofile.attr.TemplateIdAttrMark;
import com.fr.base.vcs.DesignerMode;
import com.fr.design.DesignModelAdapter;
@@ -38,6 +39,9 @@ import com.fr.design.gui.itree.filetree.TemplateFileTree;
import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.mainframe.chart.info.ChartInfoCollector;
+import com.fr.design.mainframe.predefined.info.PredefinedStyleInfoCollector;
+import com.fr.design.mainframe.predefined.ui.ReportPredefinedStylePane;
+import com.fr.design.mainframe.predefined.ui.dialog.ReportPredefinedStyleDialog;
import com.fr.design.mainframe.template.info.TemplateInfoCollector;
import com.fr.design.mainframe.template.info.TemplateProcessInfo;
import com.fr.design.mainframe.template.info.TimeConsumeTimer;
@@ -47,6 +51,7 @@ import com.fr.design.menu.MenuDef;
import com.fr.design.menu.NameSeparator;
import com.fr.design.menu.ShortCut;
import com.fr.design.preview.PagePreview;
+import com.fr.design.utils.DesignUtils;
import com.fr.design.write.submit.DBManipulationInWidgetEventPane;
import com.fr.design.write.submit.DBManipulationPane;
import com.fr.file.FILE;
@@ -55,6 +60,7 @@ import com.fr.file.MemFILE;
import com.fr.form.ui.NoneWidget;
import com.fr.form.ui.Widget;
import com.fr.general.ComparatorUtils;
+import com.fr.locale.InterProviderFactory;
import com.fr.log.FineLoggerFactory;
import com.fr.plugin.context.PluginContext;
import com.fr.plugin.context.PluginRuntime;
@@ -73,13 +79,17 @@ import com.fr.stable.StringUtils;
import com.fr.stable.core.UUID;
import com.fr.workspace.WorkContext;
import com.fr.workspace.server.lock.TplOperator;
-
import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.JComponent;
import javax.swing.JOptionPane;
+import javax.swing.SwingConstants;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.undo.UndoManager;
+import java.awt.Dimension;
+import java.awt.FontMetrics;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Set;
@@ -90,6 +100,8 @@ import java.awt.BorderLayout;
* 报表设计和表单设计的编辑区域(设计器编辑的IO文件)
*/
public abstract class JTemplate> extends TargetComponent implements ToolBarMenuDockPlus, DesignerProxy {
+
+ private static final int PREDEFINED_ICON_WIDTH = 27;
// TODO ALEX_SEP editingFILE这个属性一定要吗?如果非要不可,有没有可能保证不为null
private static final int PREFIX_NUM = 3000;
private FILE editingFILE = null;
@@ -142,8 +154,21 @@ public abstract class JTemplate>
consumeTimer.setEnabled(shouldInitForCollectInfo(isNewFile));
initAndStartPlugin();
+
+ setPredefinedInfo(isNewFile);
+ }
+
+ private void setPredefinedInfo(boolean isNewFile){
+ if (this.template.getAttrMark(PredefinedStyleAttrMark.XML_TAG) == null) {
+ PredefinedStyleAttrMark attrMark = PredefinedStyleAttrMark.createDefaultStyleMark();
+ if (!isNewFile || !DesignUtils.checkDesignerRemoteVersion()) {
+ attrMark.setPreferenceStyleName(InterProviderFactory.getProvider().getLocText("Fine-Engine_Predefined_Style_Compatibility"));
+ }
+ this.template.addAttrMark(attrMark);
+ }
}
+
private void initAndStartPlugin() {
initPluginPane();
startListenPlugin();
@@ -796,7 +821,9 @@ public abstract class JTemplate>
if (editingFILE == null || editingFILE instanceof MemFILE) {
return false;
}
+ PredefinedStyleInfoCollector.getInstance().collectUseNumber(this.getTemplatePredefinedStyle());
try {
+ this.getTarget().setPredefinedStyleName(this.getTemplatePredefinedStyle(), false);
this.getTarget().export(editingFILE.asOutputStream());
} catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
@@ -1296,10 +1323,60 @@ public abstract class JTemplate>
for (DesignerFrameUpButtonProvider provider : providers) {
uiButtons = ArrayUtils.addAll(uiButtons, provider.getUpButtons(getMenuState()));
}
-
+ UIButton predefinedBtn = createPreDefinedButton();
+ if (predefinedBtn != null) {
+ uiButtons = ArrayUtils.addAll(uiButtons, new UIButton[]{predefinedBtn});
+ }
return uiButtons;
}
+ private UIButton createPreDefinedButton() {
+ UIButton preferenceButton = new UIButton(BaseUtils.readIcon("/com/fr/design/icon/icon_predefined_style.png"));
+ preferenceButton.setToolTipText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Template_Style"));
+ preferenceButton.setText(getTemplatePredefinedStyle());
+ preferenceButton.setAlignmentX(SwingConstants.LEFT);
+ setPredefinedButtonSize(preferenceButton);
+ preferenceButton.set4ToolbarButton();
+ preferenceButton.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ DesignerFrame designerFrame = DesignerContext.getDesignerFrame();
+ ReportPredefinedStylePane stylePane = new ReportPredefinedStylePane(JTemplate.this, preferenceButton);
+ ReportPredefinedStyleDialog dialog = new ReportPredefinedStyleDialog(designerFrame, stylePane);
+ PredefinedStyleInfoCollector.getInstance().collectClickNumber();
+ dialog.setVisible(true);
+
+ }
+ });
+ preferenceButton.setEnabled(DesignUtils.checkDesignerRemoteVersion());
+ return preferenceButton;
+ }
+
+
+
+ private void setPredefinedButtonSize(UIButton predefinedBtn) {
+ String text = predefinedBtn.getText();
+ FontMetrics metrics = predefinedBtn.getFontMetrics(predefinedBtn.getFont());
+ predefinedBtn.setPreferredSize(new Dimension(Math.min(metrics.stringWidth(text) + PREDEFINED_ICON_WIDTH, 100), 20));
+ }
+
+ public void resetPredefinedStyle(String styleName, UIButton predefinedBtn) {
+ this.getTarget().setPredefinedStyleName(styleName, true);
+ predefinedBtn.setText(getTemplatePredefinedStyle());
+ setPredefinedButtonSize(predefinedBtn);
+ this.fireTargetModified();
+ this.repaint();
+ }
+
+ public String getTemplatePredefinedStyle(){
+ PredefinedStyleAttrMark attrMark = this.getTarget().getAttrMark(PredefinedStyleAttrMark.XML_TAG);
+ if (attrMark == null){
+ attrMark = PredefinedStyleAttrMark.createDefaultStyleMark();
+ }
+ return attrMark.getPreferenceStyleName();
+ }
+
+
/**
* 由于老版本的模板没有模板ID,当勾选使用参数模板时候,就加一个模板ID attr
*
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/JTemplateActionListenerAdapter.java b/designer-base/src/main/java/com/fr/design/mainframe/JTemplateActionListenerAdapter.java
new file mode 100644
index 000000000..7065f3e94
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/JTemplateActionListenerAdapter.java
@@ -0,0 +1,22 @@
+package com.fr.design.mainframe;
+
+/**
+ * @Author: Yuan.Wang
+ * @Date: 2020/10/27
+ */
+public class JTemplateActionListenerAdapter implements JTemplateActionListener {
+ @Override
+ public void templateOpened(JTemplate, ?> jt) {
+
+ }
+
+ @Override
+ public void templateSaved(JTemplate, ?> jt) {
+
+ }
+
+ @Override
+ public void templateClosed(JTemplate, ?> jt) {
+
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/PromptWindow.java b/designer-base/src/main/java/com/fr/design/mainframe/PromptWindow.java
new file mode 100644
index 000000000..dc7fc1f63
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/PromptWindow.java
@@ -0,0 +1,20 @@
+package com.fr.design.mainframe;
+
+import javax.swing.JWindow;
+
+/**
+ * @Author: Yuan.Wang
+ * @Date: 2020/10/9
+ * 只关心Window的显示和隐藏操作时可以实现该接口
+ */
+public interface PromptWindow {
+ /**
+ * 显示弹窗
+ */
+ void showWindow();
+
+ /**
+ * 隐藏弹窗
+ */
+ void hideWindow();
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/PropertyItemBean.java b/designer-base/src/main/java/com/fr/design/mainframe/PropertyItemBean.java
index ee54364ba..cdd5dbb64 100644
--- a/designer-base/src/main/java/com/fr/design/mainframe/PropertyItemBean.java
+++ b/designer-base/src/main/java/com/fr/design/mainframe/PropertyItemBean.java
@@ -1,5 +1,7 @@
package com.fr.design.mainframe;
+import com.fr.design.notification.SnapChat;
+
import java.awt.event.ActionListener;
import java.util.List;
@@ -7,71 +9,89 @@ import java.util.List;
* created by Harrison on 2020/03/23
**/
public class PropertyItemBean {
-
+
private String name;
private String title;
private String btnIconName;
private String btnIconBaseDir;
+ private SnapChat snapChat;
+ private PromptWindow promptWindow;
private EastRegionContainerPane.PropertyMode[] visibleModes;
private EastRegionContainerPane.PropertyMode[] enableModes;
private List buttonListeners;
-
+
public PropertyItemBean() {
}
-
+
public String getName() {
return name;
}
-
+
public void setName(String name) {
this.name = name;
}
-
+
public String getTitle() {
return title;
}
-
+
public void setTitle(String title) {
this.title = title;
}
-
+
public String getBtnIconName() {
return btnIconName;
}
-
+
public void setBtnIconName(String btnIconName) {
this.btnIconName = btnIconName;
}
-
+
public String getBtnIconBaseDir() {
-
+
return btnIconBaseDir;
}
-
+
public void setBtnIconBaseDir(String btnIconBaseDir) {
this.btnIconBaseDir = btnIconBaseDir;
}
-
+
+ public SnapChat getSnapChat() {
+ return snapChat;
+ }
+
+ public void setSnapChat(SnapChat snapChat) {
+ this.snapChat = snapChat;
+ }
+
+ public PromptWindow getPromptWindow() {
+ return promptWindow;
+ }
+
+ public void setPromptWindow(PromptWindow promptWindow) {
+ this.promptWindow = promptWindow;
+ }
+
public EastRegionContainerPane.PropertyMode[] getVisibleModes() {
return visibleModes;
}
-
+
public void setVisibleModes(EastRegionContainerPane.PropertyMode[] visibleModes) {
this.visibleModes = visibleModes;
}
-
+
public EastRegionContainerPane.PropertyMode[] getEnableModes() {
return enableModes;
}
-
+
public void setEnableModes(EastRegionContainerPane.PropertyMode[] enableModes) {
this.enableModes = enableModes;
}
-
+
public List getButtonListeners() {
return buttonListeners;
}
-
+
public void setButtonListeners(List buttonListeners) {
this.buttonListeners = buttonListeners;
}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/backgroundpane/VanChartGradientPane.java b/designer-base/src/main/java/com/fr/design/mainframe/backgroundpane/VanChartGradientPane.java
new file mode 100644
index 000000000..e891bd934
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/backgroundpane/VanChartGradientPane.java
@@ -0,0 +1,103 @@
+package com.fr.design.mainframe.backgroundpane;
+
+import com.fr.base.background.GradientBackground;
+import com.fr.design.event.UIObserverListener;
+import com.fr.design.gui.ibutton.UIButtonGroup;
+import com.fr.design.gui.ilable.UILabel;
+import com.fr.design.layout.TableLayout;
+import com.fr.design.layout.TableLayoutHelper;
+import com.fr.design.style.background.gradient.FixedGradientBar;
+import com.fr.general.Background;
+
+import javax.swing.JPanel;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import java.awt.BorderLayout;
+import java.awt.Component;
+
+/**
+ * 渐变色设置界面,bar无法拖拽
+ */
+public class VanChartGradientPane extends GradientBackgroundQuickPane {
+ protected static final int CHART_GRADIENT_WIDTH = 150;
+ private static final long serialVersionUID = 256594362341221087L;
+
+ private FixedGradientBar gradientBar;
+ private UIButtonGroup directionPane;
+
+ public VanChartGradientPane() {
+ constructPane();
+ }
+
+ protected void constructPane(){
+ String[] textArray = {com.fr.design.i18n.Toolkit.i18nText("FIne-Design_Report_Utils_Left_To_Right"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Utils_Top_To_Bottom")};
+ Integer[] valueArray = {GradientBackground.LEFT2RIGHT, GradientBackground.TOP2BOTTOM};
+ directionPane = new UIButtonGroup(textArray, valueArray);
+ directionPane.setSelectedIndex(0);
+ gradientBar = new FixedGradientBar(4, CHART_GRADIENT_WIDTH);
+
+ double p = TableLayout.PREFERRED;
+ double f = TableLayout.FILL;
+ double[] columnSize = {p, f};
+ double[] rowSize = {p, p, p};
+
+ Component[][] components = new Component[][]{
+ new Component[]{gradientBar, null},
+ new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Gradient_Direction")),directionPane},
+ };
+ JPanel Gradient = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize);
+ this.setLayout(new BorderLayout());
+ this.add(Gradient, BorderLayout.CENTER);
+ }
+
+ public void populateBean(Background background) {
+ GradientBackground bg = (GradientBackground) background;
+ this.gradientBar.getSelectColorPointBtnP1().setColorInner(bg.getStartColor());
+ this.gradientBar.getSelectColorPointBtnP2().setColorInner(bg.getEndColor());
+ directionPane.setSelectedItem(bg.getDirection());
+ this.gradientBar.repaint();
+ }
+
+ public GradientBackground updateBean() {
+ GradientBackground gb = new GradientBackground(gradientBar.getSelectColorPointBtnP1().getColorInner(), gradientBar.getSelectColorPointBtnP2().getColorInner());
+ gb.setDirection(directionPane.getSelectedItem());
+
+ return gb;
+ }
+
+ /**
+ * 给组件登记一个观察者监听事件
+ *
+ * @param listener 观察者监听事件
+ */
+ public void registerChangeListener(final UIObserverListener listener) {
+ gradientBar.addChangeListener(new ChangeListener() {
+ public void stateChanged(ChangeEvent e) {
+ listener.doChange();
+ }
+ });
+ directionPane.addChangeListener(new ChangeListener() {
+ public void stateChanged(ChangeEvent e) {
+ listener.doChange();
+ }
+ });
+ }
+
+ /**
+ * 是否接受
+ * @param background 背景
+ * @return 是则返回true
+ */
+ public boolean accept(Background background) {
+ return background instanceof GradientBackground;
+ }
+
+ /**
+ * 名称
+ * @return 名称
+ */
+ public String title4PopupWindow() {
+ return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Gradient_Color");
+ }
+
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/burying/point/AbstractPointCollector.java b/designer-base/src/main/java/com/fr/design/mainframe/burying/point/AbstractPointCollector.java
index 15291211c..6ac14505a 100644
--- a/designer-base/src/main/java/com/fr/design/mainframe/burying/point/AbstractPointCollector.java
+++ b/designer-base/src/main/java/com/fr/design/mainframe/burying/point/AbstractPointCollector.java
@@ -3,7 +3,6 @@ package com.fr.design.mainframe.burying.point;
import com.fr.base.FRContext;
import com.fr.base.io.XMLReadHelper;
import com.fr.design.DesignerEnvManager;
-import com.fr.design.mainframe.template.info.SendHelper;
import com.fr.log.FineLoggerFactory;
import com.fr.stable.ProductConstants;
import com.fr.stable.StableUtils;
@@ -20,25 +19,20 @@ import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
/**
* @author Bjorn
* @version 10.0
* Created by Bjorn on 2020-02-21
*/
-public abstract class AbstractPointCollector implements BasePointCollector {
+public abstract class AbstractPointCollector implements BasePointCollector {
+
- protected Map pointInfoMap;
private static final int MAX_SIZE = 512 * 1024 * 1024;
public AbstractPointCollector() {
- pointInfoMap = new ConcurrentHashMap<>();
- loadFromFile();
+
}
/**
@@ -48,34 +42,6 @@ public abstract class AbstractPointCollector implem
return FileUtils.sizeOf(getInfoFile()) <= MAX_SIZE && DesignerEnvManager.getEnvManager().isJoinProductImprove() && FRContext.isChineseEnv();
}
- @Override
- public void sendPointInfo() {
-
- addIdleDayCount();
-
- List removeList = new ArrayList<>();
- List sendList = new ArrayList<>();
-
- for (String key : pointInfoMap.keySet()) {
- AbstractPointInfo pointInfo = pointInfoMap.get(key);
- pointInfo.selectPoint(removeList, sendList);
- }
-
- // 发送记录
- for (String key : sendList) {
- if(SendHelper.sendPointInfo(pointInfoMap.get(key))){
- removeList.add(key);
- }
- }
-
- // 清空记录
- for (String key : removeList) {
- pointInfoMap.remove(key);
- }
-
- saveInfo();
- }
-
/**
* 从文件中读取埋点信息
*/
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/burying/point/AbstractTemplateInfoCollector.java b/designer-base/src/main/java/com/fr/design/mainframe/burying/point/AbstractTemplateInfoCollector.java
new file mode 100644
index 000000000..34dc5ea2a
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/burying/point/AbstractTemplateInfoCollector.java
@@ -0,0 +1,56 @@
+package com.fr.design.mainframe.burying.point;
+
+import com.fr.design.mainframe.template.info.SendHelper;
+import com.fr.design.mainframe.template.info.TemplateProcessInfo;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * Created by kerry on 2020-09-04
+ */
+public abstract class AbstractTemplateInfoCollector extends AbstractPointCollector {
+ protected Map pointInfoMap;
+
+ public AbstractTemplateInfoCollector() {
+ pointInfoMap = new ConcurrentHashMap<>();
+ loadFromFile();
+
+ }
+
+
+ /**
+ * 保存埋点的信息到本地
+ */
+ public abstract void collectInfo(String templateID, String originID, TemplateProcessInfo processInfo, int timeConsume);
+
+ @Override
+ public void sendPointInfo() {
+
+ addIdleDayCount();
+
+ List removeList = new ArrayList<>();
+ List sendList = new ArrayList<>();
+
+ for (String key : pointInfoMap.keySet()) {
+ BasePointInfo pointInfo = pointInfoMap.get(key);
+ pointInfo.selectPoint(removeList, sendList);
+ }
+
+ // 发送记录
+ for (String key : sendList) {
+ if(SendHelper.sendPointInfo(pointInfoMap.get(key))){
+ removeList.add(key);
+ }
+ }
+
+ // 清空记录
+ for (String key : removeList) {
+ pointInfoMap.remove(key);
+ }
+
+ saveInfo();
+ }
+
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/burying/point/BasePointCollector.java b/designer-base/src/main/java/com/fr/design/mainframe/burying/point/BasePointCollector.java
index f10f1682e..e2a3c778c 100644
--- a/designer-base/src/main/java/com/fr/design/mainframe/burying/point/BasePointCollector.java
+++ b/designer-base/src/main/java/com/fr/design/mainframe/burying/point/BasePointCollector.java
@@ -1,6 +1,5 @@
package com.fr.design.mainframe.burying.point;
-import com.fr.design.mainframe.template.info.TemplateProcessInfo;
import com.fr.stable.xml.XMLReadable;
import com.fr.stable.xml.XMLWriter;
@@ -16,8 +15,4 @@ public interface BasePointCollector extends XMLReadable, XMLWriter {
*/
public void sendPointInfo();
- /**
- * 保存埋点的信息到本地
- */
- public void collectInfo(String templateID, String originID, TemplateProcessInfo processInfo, int timeConsume);
}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/chart/info/ChartInfoCollector.java b/designer-base/src/main/java/com/fr/design/mainframe/chart/info/ChartInfoCollector.java
index cd651fc6b..428e5625c 100644
--- a/designer-base/src/main/java/com/fr/design/mainframe/chart/info/ChartInfoCollector.java
+++ b/designer-base/src/main/java/com/fr/design/mainframe/chart/info/ChartInfoCollector.java
@@ -4,7 +4,7 @@ import com.fr.base.io.BaseBook;
import com.fr.chartx.attr.ChartProvider;
import com.fr.chartx.config.info.AbstractConfig;
import com.fr.chartx.config.info.constant.ConfigType;
-import com.fr.design.mainframe.burying.point.AbstractPointCollector;
+import com.fr.design.mainframe.burying.point.AbstractTemplateInfoCollector;
import com.fr.design.mainframe.template.info.TemplateInfo;
import com.fr.design.mainframe.template.info.TemplateProcessInfo;
import com.fr.general.ComparatorUtils;
@@ -21,7 +21,7 @@ import java.util.Map;
* @version 10.0
* Created by Bjorn on 2020-02-18
*/
-public class ChartInfoCollector extends AbstractPointCollector {
+public class ChartInfoCollector extends AbstractTemplateInfoCollector {
private static final String XML_TAG = "ChartInfoCollector";
private static final String XML_LAST_EDIT_DAY = "lastEditDay";
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/PatternStyle.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/PatternStyle.java
new file mode 100644
index 000000000..94892f75e
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/PatternStyle.java
@@ -0,0 +1,38 @@
+package com.fr.design.mainframe.predefined;
+
+import com.fr.config.predefined.PredefinedStyle;
+import com.fr.predefined.PredefinedPatternStyleManager;
+
+
+/**
+ * Created by kerry on 2020-08-31
+ */
+public enum PatternStyle {
+ DARK_STYLE(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Dark_Pattern")) {
+ @Override
+ public PredefinedStyle getPredefinedStyle() {
+ return PredefinedPatternStyleManager.INSTANCE.getDarkMode();
+ }
+ },
+ LIGHT_STYLE(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Light_Pattern")) {
+ @Override
+ public PredefinedStyle getPredefinedStyle() {
+ return PredefinedPatternStyleManager.INSTANCE.getLightMode();
+ }
+ };
+
+
+ private String name;
+
+
+ PatternStyle(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return this.name;
+ }
+
+ public abstract PredefinedStyle getPredefinedStyle();
+
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/info/PredefinedStyleInfoCollector.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/info/PredefinedStyleInfoCollector.java
new file mode 100644
index 000000000..9dfe2e9db
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/info/PredefinedStyleInfoCollector.java
@@ -0,0 +1,140 @@
+package com.fr.design.mainframe.predefined.info;
+
+import com.fr.config.MarketConfig;
+import com.fr.design.DesignerEnvManager;
+import com.fr.design.i18n.Toolkit;
+import com.fr.design.mainframe.burying.point.AbstractPointCollector;
+import com.fr.design.mainframe.template.info.SendHelper;
+import com.fr.general.CloudCenter;
+import com.fr.general.ComparatorUtils;
+import com.fr.general.GeneralUtils;
+import com.fr.json.JSONObject;
+import com.fr.stable.xml.XMLPrintWriter;
+import com.fr.stable.xml.XMLableReader;
+import com.fr.third.joda.time.DateTime;
+
+/**
+ * Created by kerry on 2020-09-04
+ */
+public class PredefinedStyleInfoCollector extends AbstractPointCollector {
+ //每三天上传一次
+ private static final long DELTA = 3 * 24 * 3600 * 1000L;
+
+ private static final String SIMPLE_DATE_PATTERN = "yyyy-MM-dd";
+ private static final String XML_TAG = "PredefinedStyleInfo";
+ private static final String XML_FILE_NAME = "predefinedStyle.info";
+ private static final String CLOUD_URL = CloudCenter.getInstance().acquireUrlByKind("design.collector") + "/single";
+
+ private static final String FUNCTION_NAME = "predefinedStyle";
+ private static final String FUNCTION_ID = "FR-F7003";
+
+ private static final String ATTR_FUNCTION_NAME = "functionName";
+ private static final String ATTR_FUNCTION_ID = "functionId";
+ private static final String ATTR_UUID = "uuid";
+ private static final String ATTR_UID = "uid";
+ private static final String ATTR_JAR_TIME = "jatTime";
+ private static final String ATTR_CLICK_NUMBER = "clickNumber";
+ private static final String ATTR_USE_NUMBER = "useNumber";
+ private static final String ATTR_TIME = "time";
+ private static final String XML_LAST_TIME = "lastSendTime";
+
+ /**
+ * 上一次的发送时间
+ */
+ private long lastSendTime;
+
+ private int clickNumber = 0;
+
+ private int useNumber = 0;
+
+ public int getClickNumber() {
+ return clickNumber;
+ }
+
+ public int getUseNumber() {
+ return useNumber;
+ }
+
+ private static class Holder {
+ private static PredefinedStyleInfoCollector collector = new PredefinedStyleInfoCollector();
+ }
+
+ private PredefinedStyleInfoCollector() {
+ loadFromFile();
+ }
+
+ public static PredefinedStyleInfoCollector getInstance() {
+ return Holder.collector;
+ }
+
+ public void collectClickNumber() {
+ clickNumber++;
+ saveInfo();
+ }
+
+ public void collectUseNumber(String predefinedName) {
+ if (!ComparatorUtils.equals(Toolkit.i18nText("Fine-Engine_Predefined_Style_Compatibility"), predefinedName) &&
+ !ComparatorUtils.equals(Toolkit.i18nText("Fine-Engine_Report_DEFAULT"), predefinedName)) {
+ useNumber++;
+ }
+ saveInfo();
+ }
+
+ @Override
+ protected String getInfoFilePath() {
+ return XML_FILE_NAME;
+ }
+
+ @Override
+ protected void addIdleDayCount() {
+
+ }
+
+ @Override
+ public void sendPointInfo() {
+ if (System.currentTimeMillis() - lastSendTime < DELTA) {
+ return;
+ }
+ String content = generateTotalInfo();
+ SendHelper.sendSinglePointInfo(CLOUD_URL, content);
+ this.lastSendTime = System.currentTimeMillis();
+ this.clickNumber = 0;
+ this.useNumber = 0;
+ saveInfo();
+ }
+
+ public String generateTotalInfo() {
+
+ JSONObject jo = JSONObject.create();
+ jo.put(ATTR_FUNCTION_NAME, FUNCTION_NAME);
+ jo.put(ATTR_FUNCTION_ID, FUNCTION_ID);
+ jo.put(ATTR_UUID, DesignerEnvManager.getEnvManager().getUUID());
+ jo.put(ATTR_UID, MarketConfig.getInstance().getBBSAttr().getBbsUid());
+ jo.put(ATTR_JAR_TIME, GeneralUtils.readFullVersionNO());
+ jo.put(ATTR_CLICK_NUMBER, this.clickNumber);
+ jo.put(ATTR_USE_NUMBER, this.useNumber);
+ jo.put(ATTR_TIME, DateTime.now().toString(SIMPLE_DATE_PATTERN));
+ return jo.toString();
+ }
+
+
+ @Override
+ public void readXML(XMLableReader reader) {
+ if (reader.isAttr()) {
+ String name = reader.getTagName();
+ if (XML_TAG.equals(name)) {
+ this.clickNumber = reader.getAttrAsInt(ATTR_CLICK_NUMBER, 0);
+ this.useNumber = reader.getAttrAsInt(ATTR_USE_NUMBER, 0);
+ this.lastSendTime = reader.getAttrAsLong(XML_LAST_TIME, System.currentTimeMillis());
+ }
+ }
+ }
+
+ @Override
+ public void writeXML(XMLPrintWriter writer) {
+ writer.startTAG(XML_TAG);
+ writer.attr(ATTR_CLICK_NUMBER, this.clickNumber).attr(ATTR_USE_NUMBER, this.useNumber)
+ .attr(XML_LAST_TIME, this.lastSendTime);
+ writer.end();
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/PredefinedStyleBlock.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/PredefinedStyleBlock.java
new file mode 100644
index 000000000..89c35b9a9
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/PredefinedStyleBlock.java
@@ -0,0 +1,142 @@
+package com.fr.design.mainframe.predefined.ui;
+
+import com.fr.base.BaseUtils;
+import com.fr.base.GraphHelper;
+import com.fr.config.predefined.PredefinedStyle;
+import com.fr.design.mainframe.predefined.ui.dialog.PredefinedStyleEditDialog;
+import com.fr.design.gui.ibutton.UIButton;
+import com.fr.design.gui.ilable.UILabel;
+import com.fr.design.layout.FRGUIPaneFactory;
+import com.fr.design.mainframe.predefined.ui.preview.PredefinedStylePreviewPane;
+import com.fr.general.ComparatorUtils;
+import com.fr.general.IOUtils;
+import com.fr.stable.Constants;
+
+import javax.swing.BorderFactory;
+import javax.swing.Icon;
+import javax.swing.JPanel;
+import javax.swing.SwingUtilities;
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Rectangle;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+
+/**
+ * Created by kerry on 2020-08-25
+ */
+public class PredefinedStyleBlock extends JPanel {
+ private PredefinedStyle previewObject;
+ private PredefinedStyleSelectPane parentPane;
+ private Icon markedMode = IOUtils.readIcon("/com/fr/design/form/images/marked.png");
+ private static final Color BORDER_COLOR = new Color(141, 194, 249);
+
+ private boolean mouseOver = false;
+
+ private MouseListener mouseListener = new MouseListener() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ setSelect();
+ }
+
+ @Override
+ public void mousePressed(MouseEvent e) {
+
+ }
+
+ @Override
+ public void mouseReleased(MouseEvent e) {
+
+ }
+
+ @Override
+ public void mouseEntered(MouseEvent e) {
+ mouseOver = true;
+ PredefinedStyleBlock.this.repaint();
+ }
+
+ @Override
+ public void mouseExited(MouseEvent e) {
+ mouseOver = false;
+ PredefinedStyleBlock.this.repaint();
+ }
+ };
+
+
+ public PredefinedStyleBlock(PredefinedStyle previewObject, PredefinedStyleSelectPane selectPane, boolean supportEdit) {
+ this.previewObject = previewObject;
+ this.parentPane = selectPane;
+ initPane(supportEdit);
+ this.addMouseListener(mouseListener);
+ }
+
+ private void setSelect() {
+ this.parentPane.setSelectedPreviewPane(this);
+ }
+
+ @Override
+ public void paint(Graphics g) {
+ super.paint(g);
+ boolean isSelected = ComparatorUtils.equals(this, this.parentPane.getSelectedPreviewPane());
+ if (ComparatorUtils.equals(this.parentPane.getCurrentApplicateStyle(), this.previewObject.getStyleName())) {
+ markedMode.paintIcon(this, g, 176, 0);
+ }
+ if (isSelected || this.mouseOver) {
+ g.setColor(BORDER_COLOR);
+ Rectangle rectangle = new Rectangle(1, 1, this.getWidth() - 2, this.getHeight() - 2);
+ GraphHelper.draw(g, rectangle, Constants.LINE_MEDIUM);
+ }
+ }
+
+
+ private void initPane(boolean supportEdit) {
+ this.setLayout(FRGUIPaneFactory.createBorderLayout());
+ PredefinedStylePreviewPane content = new PredefinedStylePreviewPane(0.387, 0.384);
+ content.setPreferredSize(new Dimension(200, 180));
+ UILabel label = new UILabel(previewObject.getStyleName());
+ label.setToolTipText(previewObject.getStyleName());
+ label.setPreferredSize(new Dimension(167, 25));
+
+
+ JPanel panel = FRGUIPaneFactory.createBorderLayout_S_Pane();
+ panel.setBorder(BorderFactory.createEmptyBorder(0,9,2,5));
+ panel.add(label, BorderLayout.WEST);
+ if (supportEdit) {
+ addEditButton(panel);
+ }
+
+ this.add(content, BorderLayout.CENTER);
+ this.add(panel, BorderLayout.SOUTH);
+ this.setPreferredSize(new Dimension(200, 210));
+ panel.setBackground(Color.WHITE);
+ this.setBackground(Color.WHITE);
+ content.refresh(this.previewObject);
+
+ }
+
+ private void addEditButton(JPanel panel) {
+ UIButton editButton = new UIButton(BaseUtils.readIcon("/com/fr/design/icon/icon_edit.png"));
+ editButton.setPreferredSize(new Dimension(24, 24));
+ editButton.setBorderPainted(false);
+ editButton.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ PredefinedStyleEditPane editPane = PredefinedStyleEditPane.createEditPane(parentPane);
+ PredefinedStyleEditDialog editDialog = new PredefinedStyleEditDialog(
+ SwingUtilities.getWindowAncestor(PredefinedStyleBlock.this), editPane, previewObject.isBuiltIn());
+ editPane.populate(PredefinedStyleBlock.this.previewObject);
+ editDialog.setVisible(true);
+ }
+ });
+ panel.add(editButton, BorderLayout.EAST);
+
+ }
+
+ public PredefinedStyle update() {
+ return this.previewObject;
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/PredefinedStyleEditPane.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/PredefinedStyleEditPane.java
new file mode 100644
index 000000000..2a7b5592c
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/PredefinedStyleEditPane.java
@@ -0,0 +1,359 @@
+package com.fr.design.mainframe.predefined.ui;
+
+import com.fr.base.ChartColorMatching;
+import com.fr.base.ChartPreStyleConfig;
+import com.fr.base.Style;
+import com.fr.base.background.ColorBackground;
+import com.fr.config.predefined.ColorFillStyle;
+import com.fr.config.predefined.PredefinedCellStyle;
+import com.fr.config.predefined.PredefinedCellStyleConfig;
+import com.fr.config.predefined.PredefinedColorStyle;
+import com.fr.config.predefined.PredefinedStyle;
+import com.fr.config.predefined.PredefinedStyleConfig;
+import com.fr.config.ServerPreferenceConfig;
+import com.fr.design.dialog.FineJOptionPane;
+import com.fr.design.gui.frpane.AbstractAttrNoScrollPane;
+import com.fr.design.gui.frpane.AttributeChangeListener;
+import com.fr.design.gui.frpane.UITabbedPane;
+import com.fr.design.gui.icontainer.UIScrollPane;
+import com.fr.design.gui.ilable.UILabel;
+import com.fr.design.gui.itextfield.UITextField;
+import com.fr.design.layout.FRGUIPaneFactory;
+import com.fr.design.mainframe.predefined.ui.detail.ChartStyleSettingPane;
+import com.fr.design.mainframe.predefined.ui.detail.ColorFillStylePane;
+import com.fr.design.mainframe.predefined.ui.detail.PredefinedBackgroundSettingPane;
+import com.fr.design.mainframe.predefined.ui.detail.ComponentStyleSettingPane;
+import com.fr.design.mainframe.predefined.ui.detail.CellStyleListControlPane;
+import com.fr.design.mainframe.predefined.ui.preview.PredefinedStylePreviewPane;
+import com.fr.design.utils.DesignUtils;
+import com.fr.general.FRFont;
+import com.fr.log.FineLoggerFactory;
+import com.fr.stable.StringUtils;
+
+import javax.swing.BorderFactory;
+import javax.swing.JPanel;
+import javax.swing.SwingUtilities;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Created by kerry on 2020-08-26
+ */
+public class PredefinedStyleEditPane extends AbstractAttrNoScrollPane {
+ private static final Color TIP_COLOR = Color.decode("#8F8F92");
+
+ private PredefinedStylePreviewPane previewPane;
+ private UITextField styleNameField;
+ private PredefinedBackgroundSettingPane backgroundSettingPane;
+ private CellStyleListControlPane cellStyleSettingPane;
+ private ComponentStyleSettingPane componentStyleSettingPane;
+ private ChartStyleSettingPane chartStyleSettingPane;
+ private PredefinedStyleSelectPane selectPane;
+ private ColorFillStylePane colorFillStylePane;
+ private boolean isPopulating = false;
+ private UITabbedPane uiTabbedPane;
+
+ private boolean isLightMode = true;
+
+ @Override
+ protected JPanel createContentPane() {
+ JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane();
+ jPanel.add(createLeftPane(), BorderLayout.WEST);
+ jPanel.add(createRightPane(), BorderLayout.CENTER);
+
+ this.addAttributeChangeListener(new AttributeChangeListener() {
+ @Override
+ public void attributeChange() {
+ if (!isPopulating) {
+ valueChangeAction();
+ }
+ }
+ });
+ return jPanel;
+ }
+
+ public void valueChangeAction() {
+ boolean displayFormBackground = backgroundSettingPane.currentFormBackground() || uiTabbedPane.getSelectedIndex() == 3;
+ previewPane.refresh(this.update(), displayFormBackground);
+ }
+
+ @Override
+ public String title4PopupWindow() {
+ return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Style_Edit");
+ }
+
+ private PredefinedStyleEditPane(PredefinedStyleSelectPane selectPane, boolean newEditPane) {
+ this.selectPane = selectPane;
+ this.styleNameField.setEnabled(newEditPane);
+ }
+
+ public static PredefinedStyleEditPane createEditPane(PredefinedStyleSelectPane selectPane) {
+ return new PredefinedStyleEditPane(selectPane, false);
+ }
+
+ public static PredefinedStyleEditPane createNewEditPane(PredefinedStyleSelectPane selectPane) {
+ return new PredefinedStyleEditPane(selectPane, true);
+ }
+
+
+ private JPanel createLeftPane() {
+ JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane();
+ JPanel titlePane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Overall_Preview"));
+ previewPane = new PredefinedStylePreviewPane();
+ previewPane.setPreferredSize(new Dimension(517, 500));
+
+ titlePane.add(previewPane);
+ jPanel.add(titlePane, BorderLayout.CENTER);
+ return jPanel;
+ }
+
+ private JPanel createRightPane() {
+ JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane();
+ JPanel styleNamePane = createStyleNamePane();
+ jPanel.add(styleNamePane, BorderLayout.NORTH);
+
+ JPanel basicSettingPane = createBasicSettingPane();
+ jPanel.add(basicSettingPane, BorderLayout.CENTER);
+
+ JPanel customDetailPane = createCustomDetailPane();
+ jPanel.add(customDetailPane, BorderLayout.SOUTH);
+ return jPanel;
+ }
+
+ private JPanel createStyleNamePane() {
+ JPanel jPanel = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(5, 26, 8);
+ jPanel.add(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Style_Name")));
+ this.styleNameField = new UITextField();
+ this.styleNameField.setPreferredSize(new Dimension(160, 20));
+ jPanel.add(this.styleNameField);
+ return jPanel;
+ }
+
+ private JPanel createBasicSettingPane() {
+ JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane();
+ JPanel titlePane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Basic_Setting"));
+ JPanel contentPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
+ colorFillStylePane = new ColorFillStylePane();
+ contentPane.add(colorFillStylePane);
+ titlePane.add(contentPane);
+ jPanel.add(titlePane, BorderLayout.CENTER);
+ titlePane.setSize(new Dimension(348, 157));
+ return jPanel;
+ }
+
+ private JPanel createCustomDetailPane() {
+ JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane();
+ JPanel titlePane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Custom_Detail"));
+ titlePane.setLayout(FRGUIPaneFactory.createLeftZeroLayout());
+ jPanel.add(titlePane, BorderLayout.CENTER);
+ uiTabbedPane = new UITabbedPane();
+ uiTabbedPane.addTab(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Template_Background"), createTemplateBackgroundSettingPane());
+ uiTabbedPane.addTab(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Cell_Style"), createCellStyleSettingPane());
+ uiTabbedPane.addTab(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Chart_Style"), createChartStyleSettingPane());
+ uiTabbedPane.addTab(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Component_Style"), createComponentStyleSettingPane());
+ uiTabbedPane.addChangeListener(new ChangeListener() {
+ @Override
+ public void stateChanged(ChangeEvent e) {
+ valueChangeAction();
+ }
+ });
+ titlePane.add(uiTabbedPane);
+ uiTabbedPane.setPreferredSize(new Dimension(323, 298));
+ titlePane.setPreferredSize(new Dimension(333, 320));
+ return jPanel;
+ }
+
+
+ private JPanel createTemplateBackgroundSettingPane() {
+ JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane();
+ jPanel.setBorder(BorderFactory.createEmptyBorder(10, 5, 10, 5));
+ this.backgroundSettingPane = new PredefinedBackgroundSettingPane();
+ jPanel.setPreferredSize(new Dimension(309, 248));
+ UIScrollPane scrollPane = new UIScrollPane(this.backgroundSettingPane);
+ scrollPane.setBorder(BorderFactory.createEmptyBorder());
+ jPanel.add(new UIScrollPane(this.backgroundSettingPane));
+ return jPanel;
+ }
+
+ private JPanel createCellStyleSettingPane() {
+ JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane();
+ jPanel.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5));
+ this.cellStyleSettingPane = new CellStyleListControlPane();
+ jPanel.add(this.cellStyleSettingPane);
+ return jPanel;
+ }
+
+
+ private JPanel createChartStyleSettingPane() {
+ JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane();
+ jPanel.setBorder(BorderFactory.createEmptyBorder(10, 5, 10, 5));
+ this.chartStyleSettingPane = new ChartStyleSettingPane();
+ jPanel.add(this.chartStyleSettingPane);
+ return jPanel;
+ }
+
+
+ private JPanel createComponentStyleSettingPane() {
+ JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane();
+ jPanel.setLayout(new BorderLayout(0, 5));
+ jPanel.setBorder(BorderFactory.createEmptyBorder(10, 5, 10, 5));
+ this.componentStyleSettingPane = new ComponentStyleSettingPane();
+ UILabel label = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Predefined_ComponentStyle_Setting_Tip"));
+ label.setForeground(TIP_COLOR);
+ jPanel.add(label, BorderLayout.NORTH);
+ jPanel.add(this.componentStyleSettingPane, BorderLayout.CENTER);
+ return jPanel;
+ }
+
+
+ public void populate(PredefinedStyle previewObject) {
+ isPopulating = true;
+ isLightMode = previewObject.isLightMode();
+ styleNameField.setText(previewObject.getStyleName());
+ this.backgroundSettingPane.populateBean(previewObject.getPredefinedBackground());
+ this.cellStyleSettingPane.populateBean(previewObject.getCellStyleConfig());
+ this.componentStyleSettingPane.populateBean(previewObject.getComponentStyle());
+ this.colorFillStylePane.populateBean(previewObject.getPredefinedColorStyle());
+ this.chartStyleSettingPane.populateBean(previewObject.getPredefinedChartStyle());
+ previewPane.refresh(previewObject);
+ isPopulating = false;
+ }
+
+ public PredefinedStyle update() {
+ PredefinedStyle predefinedStyle = new PredefinedStyle();
+ predefinedStyle.setLightMode(isLightMode);
+ predefinedStyle.setStyleName(this.styleNameField.getText());
+ PredefinedCellStyleConfig cellStyleConfig = this.cellStyleSettingPane.updateBean();
+ predefinedStyle.setCellStyleConfig(cellStyleConfig);
+
+ predefinedStyle.setPredefinedBackground(this.backgroundSettingPane.updateBean());
+ predefinedStyle.setComponentStyle(this.componentStyleSettingPane.updateBean());
+
+ PredefinedColorStyle colorStyle = this.colorFillStylePane.update();
+ updateCellStyleByColorStyle(colorStyle, cellStyleConfig);
+ predefinedStyle.setPredefinedColorStyle(colorStyle);
+ predefinedStyle.setPredefinedChartStyle(this.chartStyleSettingPane.updateBean());
+ return predefinedStyle;
+ }
+
+ private void updateCellStyleByColorStyle(PredefinedColorStyle colorStyle, PredefinedCellStyleConfig cellStyleConfig) {
+ PredefinedCellStyle headerStyle = cellStyleConfig.getStyle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Predefined_Style_Header"));
+ PredefinedCellStyle highlightStyle = cellStyleConfig.getStyle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Predefined_Style_Highlight_Text"));
+ ColorFillStyle colorFillStyle = colorStyle.getColorFillStyle();
+ List colorList = new ArrayList<>();
+ if (colorFillStyle == null || colorFillStyle.getColorList().size() == 0){
+ ChartPreStyleConfig config = ChartPreStyleConfig.getInstance();
+ String defaultName = config.getCurrentStyle();
+ ChartColorMatching defaultStyle = (ChartColorMatching) config.getPreStyle(defaultName);
+ if (defaultStyle != null) {
+ colorList = defaultStyle.getColorList();
+ }
+ } else {
+ colorList = colorFillStyle.getColorList();
+ }
+ if (colorList.size() < 2) {
+ return;
+ }
+ if (headerStyle != null) {
+ Style style = headerStyle.getStyle();
+ Color color = colorList.get(0);
+ headerStyle.setStyle(style.deriveBackground(ColorBackground.getInstance(color)));
+ }
+ if (highlightStyle != null) {
+ Style style = highlightStyle.getStyle();
+ Color color = colorList.get(1);
+ FRFont font = style.getFRFont();
+ font.setForeground(color);
+ highlightStyle.setStyle(style.deriveFRFont(font));
+ }
+ }
+
+ public boolean saveStyle() {
+ PredefinedStyle previewObject;
+ try {
+ previewObject = update();
+ } catch (Exception e) {
+ FineLoggerFactory.getLogger().error(e.getMessage(), e);
+ return false;
+ }
+ if (this.styleNameField.isEnabled() && !validateRepeat(previewObject.getStyleName())) {
+ return false;
+ }
+ if (!saveStyle(previewObject)) {
+ return false;
+ }
+ DesignUtils.refreshDesignerFrame();
+ return true;
+ }
+
+ private boolean saveStyle(PredefinedStyle previewObject) {
+ PredefinedStyleConfig config = ServerPreferenceConfig.getInstance().getPreferenceStyleConfig();
+ if (StringUtils.isEmpty(previewObject.getStyleName())) {
+ FineJOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(PredefinedStyleEditPane.this),
+ com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Predefined_Style_Name_Cannot_Empty"));
+
+ return false;
+ }
+ config.add(previewObject);
+ PredefinedStyleConfig sortedConfig = resortConfigStyles(previewObject, config);
+ ServerPreferenceConfig.getInstance().setPreferenceStyleConfig(sortedConfig);
+ selectPane.refreshPane();
+ return true;
+ }
+
+ public void saveAsNewStyle(String styleName) {
+ PredefinedStyle previewObject;
+ try {
+ previewObject = update();
+ } catch (Exception e) {
+ FineLoggerFactory.getLogger().error(e.getMessage(), e);
+ return;
+ }
+ previewObject.setStyleName(styleName);
+ if (validateRepeat(styleName)) {
+ saveStyle(previewObject);
+ }
+ }
+
+ private boolean validateRepeat(String styleName) {
+ PredefinedStyleConfig config = ServerPreferenceConfig.getInstance().getPreferenceStyleConfig();
+ if (config.getStyle(styleName) != null) {
+ FineJOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(PredefinedStyleEditPane.this),
+ com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Predefined_Name_Repeat"));
+
+ return false;
+ }
+ return true;
+ }
+
+ private PredefinedStyleConfig resortConfigStyles(PredefinedStyle priorityStyle, PredefinedStyleConfig config){
+ PredefinedStyleConfig sortedConfig = new PredefinedStyleConfig();
+ PredefinedStyle defaultStyle = config.getDefaultPredefinedStyle();
+ if (defaultStyle != null) {
+ sortedConfig.add(defaultStyle);
+ config.removeStyle(defaultStyle.getStyleName());
+ sortedConfig.setDefaultPredefinedStyle(defaultStyle.getStyleName());
+ }
+ if (priorityStyle != null && !priorityStyle.isDefaultStyle()) {
+ sortedConfig.add(priorityStyle);
+ config.removeStyle(priorityStyle.getStyleName());
+ }
+ Iterator iterator = config.getPredefinedStyleIterator();
+ while (iterator.hasNext()) {
+ PredefinedStyle entry = iterator.next();
+ sortedConfig.add(entry);
+ }
+ sortedConfig.setCompatibleStyleName(config.getCompatibleStyleName());
+ return sortedConfig;
+ }
+
+
+
+
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/PredefinedStyleSelectPane.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/PredefinedStyleSelectPane.java
new file mode 100644
index 000000000..227c9e30d
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/PredefinedStyleSelectPane.java
@@ -0,0 +1,102 @@
+package com.fr.design.mainframe.predefined.ui;
+
+import com.fr.config.ServerPreferenceConfig;
+import com.fr.config.predefined.PredefinedStyle;
+import com.fr.design.dialog.BasicPane;
+import com.fr.design.event.ChangeListener;
+import com.fr.design.gui.icontainer.UIScrollPane;
+import com.fr.design.layout.FRGUIPaneFactory;
+
+import javax.swing.BorderFactory;
+import javax.swing.JPanel;
+import java.util.Iterator;
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+
+/**
+ * Created by kerry on 2020-08-26
+ */
+public class PredefinedStyleSelectPane extends BasicPane {
+ private PredefinedStyleBlock selectedBlock;
+ private boolean editable;
+ private JPanel contentPane;
+ private String currentApplicateStyle;
+ private ChangeListener changeListener;
+
+
+ public PredefinedStyleSelectPane(String currentApplicateStyle, boolean editable) {
+ this.editable = editable;
+ this.currentApplicateStyle = currentApplicateStyle;
+ initPane();
+ }
+
+ public void registerChangeListener(ChangeListener changeListener) {
+ this.changeListener = changeListener;
+
+ }
+
+
+ private void initPane() {
+ this.setLayout(FRGUIPaneFactory.createBorderLayout());
+ contentPane = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(5, 8);
+ createContentPane();
+ UIScrollPane scrollPane = new UIScrollPane(contentPane);
+ scrollPane.setPreferredSize(new Dimension(630, 480));
+ scrollPane.setBorder(BorderFactory.createEmptyBorder());
+ this.add(scrollPane, BorderLayout.CENTER);
+ }
+
+
+ public void createContentPane() {
+ contentPane.removeAll();
+ Iterator iterator = ServerPreferenceConfig.getInstance().getPreferenceStyleConfig().getPredefinedStyleIterator();
+ int rowCount = (ServerPreferenceConfig.getInstance().getPreferenceStyleConfig().getPredefinedSize() +2)/ 3;
+ contentPane.setPreferredSize(new Dimension(618, 220 * rowCount));
+ while (iterator.hasNext()) {
+ PredefinedStyle tmpStyle = iterator.next();
+
+ if (tmpStyle != null) {
+ PredefinedStyleBlock tmpPanel =
+ new PredefinedStyleBlock(tmpStyle, this, this.editable);
+ contentPane.add(tmpPanel);
+ }
+ }
+ }
+
+
+ public String getCurrentApplicateStyle() {
+ return currentApplicateStyle;
+ }
+
+ public void refreshPane() {
+ createContentPane();
+ this.validate();
+ this.repaint();
+ }
+
+ @Override
+ protected String title4PopupWindow() {
+ return null;
+ }
+
+ public void setSelectedPreviewPane(PredefinedStyleBlock selectedPreviewPane) {
+ this.selectedBlock = selectedPreviewPane;
+ if (changeListener != null) {
+ changeListener.fireChanged(null);
+ }
+ this.repaint();
+ }
+
+ public PredefinedStyleBlock getSelectedPreviewPane() {
+ return selectedBlock;
+ }
+
+ public PredefinedStyle update() {
+ if (this.selectedBlock == null){
+ return null;
+ }
+ return this.selectedBlock.update();
+ }
+
+
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/PredefinedStyleSettingPane.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/PredefinedStyleSettingPane.java
new file mode 100644
index 000000000..758f8e013
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/PredefinedStyleSettingPane.java
@@ -0,0 +1,152 @@
+package com.fr.design.mainframe.predefined.ui;
+
+import com.fr.config.predefined.PredefinedNameStyleProvider;
+import com.fr.design.file.HistoryTemplateListCache;
+import com.fr.design.gui.frpane.AbstractAttrNoScrollPane;
+import com.fr.design.gui.frpane.AttributeChangeListener;
+import com.fr.design.gui.ibutton.UIRadioButton;
+import com.fr.design.gui.ilable.UILabel;
+import com.fr.design.layout.FRGUIPaneFactory;
+import com.fr.design.mainframe.JTemplate;
+import com.fr.design.mainframe.predefined.ui.preview.StyleSettingPreviewPane;
+
+import javax.swing.ButtonGroup;
+import javax.swing.JPanel;
+import java.awt.BorderLayout;
+import java.awt.CardLayout;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+/**
+ * Created by kerry on 2020-09-02
+ */
+public abstract class PredefinedStyleSettingPane extends AbstractAttrNoScrollPane {
+ protected StyleSettingPreviewPane previewPane;
+ protected UIRadioButton predefinedRadioBtn;
+ private UIRadioButton customRadioBtn;
+ private JPanel customDetailPane;
+ private JPanel predefinedSettingPane;
+ private CardLayout tabbedPane;
+ private JPanel center;
+ private boolean isPopulating = false;
+
+
+ public void setPopulating(boolean populating) {
+ isPopulating = populating;
+ }
+
+ protected void initContentPane() {
+ leftContentPane = createContentPane();
+ this.add(leftContentPane, BorderLayout.CENTER);
+ }
+
+ @Override
+ protected JPanel createContentPane() {
+ JPanel contentPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
+ previewPane = createPreviewPane();
+ JPanel previewTitlePane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preview"));
+ if (previewPane != null) {
+ previewTitlePane.setPreferredSize(new Dimension(407, 527));
+ previewTitlePane.add(previewPane);
+ contentPane.add(previewTitlePane, BorderLayout.WEST);
+ }
+
+ customDetailPane = createCustomDetailPane();
+ predefinedSettingPane = createPredefinedSettingPane();
+
+ JPanel centerPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
+ JPanel jPanel = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(10, 20, 10);
+ jPanel.add(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Style")));
+ predefinedRadioBtn = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preference_Predefined"));
+ customRadioBtn = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Custom"));
+
+ tabbedPane = new CardLayout();
+ center = new JPanel(tabbedPane);
+ center.add(predefinedSettingPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preference_Predefined"));
+ center.add(customDetailPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Custom"));
+ predefinedRadioBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ tabbedPane.show(center, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preference_Predefined"));
+ }
+ });
+ customRadioBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ tabbedPane.show(center, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Custom"));
+ }
+ });
+ jPanel.add(predefinedRadioBtn);
+ jPanel.add(customRadioBtn);
+
+ ButtonGroup layoutBG = new ButtonGroup();
+ layoutBG.add(predefinedRadioBtn);
+ layoutBG.add(customRadioBtn);
+ centerPane.add(jPanel, BorderLayout.NORTH);
+ centerPane.add(center, BorderLayout.CENTER);
+ contentPane.add(centerPane, BorderLayout.CENTER);
+ this.addAttributeChangeListener(new AttributeChangeListener() {
+ @Override
+ public void attributeChange() {
+ if (isPopulating) {
+ return;
+ }
+ if (previewPane != null) {
+ previewPane.refresh();
+ }
+ }
+ });
+ return contentPane;
+ }
+
+
+ protected abstract StyleSettingPreviewPane createPreviewPane();
+
+ protected abstract JPanel createCustomDetailPane();
+
+ protected JPanel createPredefinedSettingPane() {
+ return new JPanel();
+ }
+
+ protected void populate(PredefinedNameStyleProvider nameStyle) {
+ this.predefinedRadioBtn.setSelected(nameStyle.usePredefinedStyle());
+ this.customRadioBtn.setSelected(!nameStyle.usePredefinedStyle());
+ if (nameStyle.usePredefinedStyle()) {
+ tabbedPane.show(center, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preference_Predefined"));
+ } else {
+ tabbedPane.show(center, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Custom"));
+ }
+
+ }
+
+ protected String getPredefinedStyleName() {
+ JTemplate template = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate();
+ return template.getTemplatePredefinedStyle();
+ }
+
+ /**
+ * 展示数据
+ *
+ * @param ob 待展示的对象
+ */
+ public abstract void populateBean(T ob);
+
+ /**
+ * 保存数据
+ *
+ * @return 待保存的对象
+ */
+ public abstract T updateBean();
+
+ /**
+ * 保存数据
+ *
+ * @param ob 待保存的对象
+ */
+ public void updateBean(T ob) {
+
+ }
+
+
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/ReportPredefinedStylePane.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/ReportPredefinedStylePane.java
new file mode 100644
index 000000000..4f2c8b603
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/ReportPredefinedStylePane.java
@@ -0,0 +1,53 @@
+package com.fr.design.mainframe.predefined.ui;
+
+import com.fr.config.predefined.PredefinedStyle;
+import com.fr.design.dialog.BasicPane;
+import com.fr.design.gui.ibutton.UIButton;
+import com.fr.design.layout.FRGUIPaneFactory;
+import com.fr.design.mainframe.JTemplate;
+
+import javax.swing.JPanel;
+import java.awt.BorderLayout;
+import java.awt.FlowLayout;
+
+/**
+ * Created by kerry on 2020-08-28
+ */
+public class ReportPredefinedStylePane extends BasicPane {
+ private PredefinedStyleSelectPane selectPane;
+ private JTemplate currentTemplate;
+ private UIButton preferenceBtn;
+
+ public ReportPredefinedStylePane(JTemplate jTemplate, UIButton preferenceButton) {
+ this.currentTemplate = jTemplate;
+ this.preferenceBtn = preferenceButton;
+ initPane();
+ }
+
+ private void initPane() {
+ this.setLayout(FRGUIPaneFactory.createBorderLayout());
+ JPanel jPanel = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Style_Select"));
+ jPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
+ JPanel subPanel = FRGUIPaneFactory.createBorderLayout_S_Pane();
+ this.selectPane = new PredefinedStyleSelectPane(currentTemplate.getTemplatePredefinedStyle(), false);
+ subPanel.add(this.selectPane, BorderLayout.CENTER);
+ jPanel.add(subPanel, BorderLayout.CENTER);
+ this.add(jPanel, BorderLayout.CENTER);
+ }
+
+ public void update() {
+ PredefinedStyle style = selectPane.update();
+ if (style != null) {
+ currentTemplate.resetPredefinedStyle(style.getStyleName(), preferenceBtn);
+ }
+ }
+
+ public void refresh() {
+ this.selectPane.refreshPane();
+ }
+
+ @Override
+ protected String title4PopupWindow() {
+ return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Template_Style");
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/ServerPredefinedStylePane.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/ServerPredefinedStylePane.java
new file mode 100644
index 000000000..76b2a3b60
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/ServerPredefinedStylePane.java
@@ -0,0 +1,208 @@
+package com.fr.design.mainframe.predefined.ui;
+
+
+import com.fr.base.BaseUtils;
+import com.fr.config.predefined.PredefinedStyle;
+import com.fr.config.predefined.PredefinedStyleConfig;
+import com.fr.config.ServerPreferenceConfig;
+import com.fr.design.actions.UpdateAction;
+import com.fr.design.event.ChangeEvent;
+import com.fr.design.event.ChangeListener;
+import com.fr.design.gui.ilable.UILabel;
+import com.fr.design.mainframe.predefined.PatternStyle;
+import com.fr.design.dialog.BasicPane;
+import com.fr.design.dialog.FineJOptionPane;
+import com.fr.design.gui.itoolbar.UIToolbar;
+import com.fr.design.i18n.Toolkit;
+import com.fr.design.icon.IconPathConstants;
+import com.fr.design.layout.FRGUIPaneFactory;
+import com.fr.design.mainframe.predefined.ui.dialog.PredefinedStyleEditDialog;
+import com.fr.design.menu.MenuDef;
+import com.fr.design.menu.ToolBarDef;
+import com.fr.design.utils.DesignUtils;
+import com.fr.stable.StringUtils;
+
+import javax.swing.BorderFactory;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JSeparator;
+import javax.swing.SwingUtilities;
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+
+/**
+ * Created by kerry on 2020-08-25
+ */
+public class ServerPredefinedStylePane extends BasicPane {
+
+ private static final Color TIP_COLOR = Color.decode("#8F8F92");
+ private RemoveAction removeAction;
+
+ private PredefinedStyleSelectPane selectPane;
+
+
+ public ServerPredefinedStylePane() {
+ initPane();
+ }
+
+ private void initPane() {
+ this.setLayout(FRGUIPaneFactory.createBorderLayout());
+ JPanel jPanel = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Style_Manager"));
+ jPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
+ jPanel.setLayout(FRGUIPaneFactory.createLeftZeroLayout());
+ JPanel subPanel = FRGUIPaneFactory.createBorderLayout_S_Pane();
+ subPanel.add(createControlPane(), BorderLayout.NORTH);
+ PredefinedStyle style = ServerPreferenceConfig.getInstance().getPreferenceStyleConfig().getDefaultPredefinedStyle();
+
+ this.selectPane = new PredefinedStyleSelectPane(style == null ? StringUtils.EMPTY : style.getStyleName(), true);
+ this.selectPane.registerChangeListener(new ChangeListener() {
+ @Override
+ public void fireChanged(ChangeEvent event) {
+ PredefinedStyle selectStyle = selectPane.getSelectedPreviewPane().update();
+ removeAction.setEnabled(!selectStyle.isBuiltIn());
+ }
+ });
+ this.selectPane.addMouseListener(new MouseListener() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ if (selectPane.getSelectedPreviewPane() != null) {
+ removeAction.setEnabled(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) {
+
+ }
+ });
+ JSeparator jSeparator = new JSeparator();
+ subPanel.add(jSeparator, BorderLayout.CENTER);
+ subPanel.add(this.selectPane, BorderLayout.SOUTH);
+ jPanel.add(subPanel);
+ this.add(jPanel, BorderLayout.CENTER);
+ this.repaint();
+ }
+
+
+ private JPanel createControlPane() {
+ MenuDef addMenuDef = new MenuDef(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Action_Add"));
+ addMenuDef.setIconPath(IconPathConstants.ADD_POPMENU_ICON_PATH);
+ createAddMenuDef(addMenuDef);
+ ToolBarDef toolbarDef = new ToolBarDef();
+ removeAction = new RemoveAction();
+ removeAction.setEnabled(false);
+ toolbarDef.addShortCut(addMenuDef, removeAction);
+ UIToolbar toolBar = ToolBarDef.createJToolBar();
+ toolBar.setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 0));
+ toolbarDef.updateToolBar(toolBar);
+ JPanel toolbarPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
+ toolbarPane.add(toolBar, BorderLayout.CENTER);
+ UILabel tipLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Style_Manager_Tip"));
+ tipLabel.setForeground(TIP_COLOR);
+ tipLabel.setHorizontalTextPosition(UILabel.RIGHT);
+ toolbarPane.add(tipLabel, BorderLayout.EAST);
+ toolbarPane.setPreferredSize(new Dimension(620, 30));
+ return toolbarPane;
+ }
+
+ private void createAddMenuDef(MenuDef addMenuDef) {
+ addMenuDef.setRePaint(true);
+ addMenuDef.addShortCut(new CreateStyleAction(PatternStyle.DARK_STYLE));
+ addMenuDef.addShortCut(new CreateStyleAction(PatternStyle.LIGHT_STYLE));
+
+ }
+
+
+ public void update() {
+ PredefinedStyle style = selectPane.update();
+ if (style != null) {
+ PredefinedStyleConfig config = ServerPreferenceConfig.getInstance().getPreferenceStyleConfig();
+ config.setDefaultPredefinedStyle(style.getStyleName());
+ ServerPreferenceConfig.getInstance().setPreferenceStyleConfig(config);
+ DesignUtils.refreshDesignerFrame();
+ }
+
+ }
+
+
+ @Override
+ protected String title4PopupWindow() {
+ return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Server_Style");
+ }
+
+ private class RemoveAction extends UpdateAction {
+
+ public RemoveAction() {
+ this.setName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Remove"));
+ this.setMnemonic('R');
+ this.setSmallIcon(BaseUtils.readIcon(IconPathConstants.TD_REMOVE_ICON_PATH));
+ }
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ PredefinedStyle previewObject = ServerPredefinedStylePane.this.selectPane.update();
+ int selVal = FineJOptionPane.showConfirmDialog(SwingUtilities.getWindowAncestor(ServerPredefinedStylePane.this),
+ Toolkit.i18nText("Fine-Design_Predefined_Remove_Style_Confirm", previewObject.getStyleName()),
+ Toolkit.i18nText("Fine-Design_Basic_Delete"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
+ if (selVal == JOptionPane.YES_OPTION) {
+ removeStyle(previewObject.getStyleName());
+ ServerPredefinedStylePane.this.selectPane.refreshPane();
+ }
+ }
+ }
+
+
+ private class CreateStyleAction extends UpdateAction {
+ private PatternStyle style;
+
+ public CreateStyleAction(PatternStyle style) {
+ this.style = style;
+ this.setName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Create_Parttern_Style") + style.getName());
+ this.setMnemonic('R');
+ }
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ createNewPatternStylePane();
+ }
+
+ private void createNewPatternStylePane() {
+ PredefinedStyleEditPane editPane = PredefinedStyleEditPane.createNewEditPane(selectPane);
+ PredefinedStyleEditDialog editDialog = new PredefinedStyleEditDialog(
+ SwingUtilities.getWindowAncestor(ServerPredefinedStylePane.this), editPane);
+ PredefinedStyle predefinedStyle = style.getPredefinedStyle();
+ predefinedStyle.setStyleName(StringUtils.EMPTY);
+ editPane.populate(predefinedStyle);
+ editDialog.setVisible(true);
+ }
+ }
+
+
+ private void removeStyle(String name) {
+ PredefinedStyleConfig config = ServerPreferenceConfig.getInstance().getPreferenceStyleConfig();
+ config.removeStyle(name);
+ ServerPreferenceConfig.getInstance().setPreferenceStyleConfig(config);
+ DesignUtils.refreshDesignerFrame();
+ }
+
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/CellStyleListControlPane.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/CellStyleListControlPane.java
new file mode 100644
index 000000000..b5b28ae6a
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/CellStyleListControlPane.java
@@ -0,0 +1,287 @@
+package com.fr.design.mainframe.predefined.ui.detail;
+
+import com.fr.base.BaseUtils;
+import com.fr.base.Style;
+import com.fr.config.predefined.PredefinedCellStyle;
+import com.fr.config.predefined.PredefinedCellStyleConfig;
+import com.fr.design.actions.UpdateAction;
+import com.fr.design.beans.BasicBeanPane;
+import com.fr.design.dialog.BasicPane;
+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.NameObjectCreator;
+import com.fr.design.gui.controlpane.NameableCreator;
+import com.fr.design.gui.controlpane.ShortCut4JControlPane;
+import com.fr.design.gui.controlpane.UnrepeatedNameHelper;
+import com.fr.design.gui.ilist.ListModelElement;
+import com.fr.design.gui.ilist.ModNameActionListener;
+import com.fr.design.gui.style.AlignmentPane;
+import com.fr.design.gui.style.FormatPane;
+import com.fr.design.i18n.Toolkit;
+import com.fr.design.layout.FRGUIPaneFactory;
+import com.fr.design.mainframe.predefined.ui.detail.cell.CustomPredefinedStylePane;
+import com.fr.design.menu.ShortCut;
+import com.fr.general.ComparatorUtils;
+import com.fr.general.NameObject;
+import com.fr.log.FineLoggerFactory;
+import com.fr.stable.Nameable;
+import com.fr.stable.StringUtils;
+
+import javax.swing.BorderFactory;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JSeparator;
+import javax.swing.SwingConstants;
+import javax.swing.SwingUtilities;
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Created by kerry on 2020-09-27
+ */
+public class CellStyleListControlPane extends JListControlPane {
+ private boolean namePermitted = true;
+
+ public CellStyleListControlPane() {
+ super();
+ this.addModNameActionListener(new ModNameActionListener() {
+ public void nameModed(int index, String oldName, String newName) {
+ if (ComparatorUtils.equals(oldName, newName) || ComparatorUtils.equals(newName, NameInspector.ILLEGAL_NAME_HOLDER)) {
+ return;
+ }
+ namePermitted = true;
+ String[] allNames = nameableList.getAllNames();
+ allNames[index] = StringUtils.EMPTY;
+ if (StringUtils.isEmpty(newName)) {
+ showTipDialogAndReset(Toolkit.i18nText("Fine-Design_Basic_Predefined_Style_Empty_Name"), index);
+ return;
+ }
+ if (isNameRepeated(new List[]{Arrays.asList(allNames)}, newName)) {
+ showTipDialogAndReset(Toolkit.i18nText("Fine-Design_Basic_Predefined_Style_Duplicate_Name", newName), index);
+ return;
+ }
+ populateSelectedValue();
+ }
+ });
+ }
+
+ private void showTipDialogAndReset(String content, int index) {
+ nameableList.stopEditing();
+
+ FineJOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(CellStyleListControlPane.this),
+ content,
+ Toolkit.i18nText("Fine-Design_Basic_Alert"),
+ JOptionPane.WARNING_MESSAGE);
+ setIllegalIndex(index);
+ namePermitted = false;
+ }
+
+ @Override
+ public NameableCreator[] createNameableCreators() {
+ return new NameableCreator[]{
+ new CellStyleNameObjectCreator(Toolkit.i18nText("Fine-Design_Predefined_Cell_New_Style"),
+ PredefinedCellStyle.class, CustomPredefinedStylePaneNoBorder.class) {
+ @Override
+ public boolean acceptDefaultNameObject(Object ob) {
+ return ((PredefinedCellStyle) ob).isDefaultStyle();
+ }
+ },
+ new CellStyleNameObjectCreator(Toolkit.i18nText("Fine-Design_Predefined_Cell_New_Style"),
+ PredefinedCellStyle.class, CustomPredefinedStylePane.class)};
+ }
+
+ @Override
+ protected String title4PopupWindow() {
+ return StringUtils.EMPTY;
+ }
+
+ protected void initComponentPane() {
+ this.setLayout(FRGUIPaneFactory.createBorderLayout());
+ this.setCreators(this.createNameableCreators());
+ initCardPane();
+ JPanel leftPane = getLeftPane();
+ JSeparator jSeparator = new JSeparator(SwingConstants.VERTICAL);
+ leftPane.setPreferredSize(new Dimension(70, 0));
+ jSeparator.setPreferredSize(new Dimension(2, 0));
+ cardPane.setPreferredSize(new Dimension(238, 0));
+ cardPane.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 0));
+ JPanel mainSplitPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
+ mainSplitPane.add(leftPane, BorderLayout.WEST);
+ mainSplitPane.add(jSeparator, BorderLayout.CENTER);
+ mainSplitPane.add(cardPane, BorderLayout.EAST);
+
+ this.add(mainSplitPane, BorderLayout.CENTER);
+ this.checkButtonEnabled();
+ }
+
+ protected ShortCut4JControlPane[] createShortcuts() {
+ return new ShortCut4JControlPane[]{
+ createAddItemShortCut4JControlPane(),
+ new RemoveItemShortCut4JControlPane(new RemoveItemAction())
+ };
+ }
+
+
+ private static class CustomPredefinedStylePaneNoBorder extends CustomPredefinedStylePane {
+ @Override
+ protected List initPaneList() {
+ paneList = new ArrayList();
+ paneList.add(new FormatPane());
+ paneList.add(new AlignmentPane());
+ return paneList;
+ }
+
+ }
+
+
+ private ShortCut4JControlPane createAddItemShortCut4JControlPane (){
+ ShortCut shortCut = shortCutFactory.createAddItemUpdateAction(new NameableCreator[]{
+ new CellStyleNameObjectCreator(Toolkit.i18nText("Fine-Design_Predefined_Cell_New_Style"),
+ PredefinedCellStyle.class, CustomPredefinedStylePane.class)});
+ return new AddItemShortCut4JControlPane(shortCut);
+ }
+
+ private class AddItemShortCut4JControlPane extends ShortCut4JControlPane{
+ AddItemShortCut4JControlPane(ShortCut shortCut) {
+ this.shortCut = shortCut;
+ }
+
+
+ @Override
+ public void checkEnable() {
+ this.shortCut.setEnabled(true);
+ }
+ }
+
+
+ private class RemoveItemShortCut4JControlPane extends ShortCut4JControlPane {
+ RemoveItemShortCut4JControlPane(ShortCut shortCut) {
+ this.shortCut = shortCut;
+ }
+
+ @Override
+ public void checkEnable() {
+ ListModelElement selectModel = CellStyleListControlPane.this.getSelectedValue();
+ if (selectModel != null) {
+ NameObject selectNameObject = (NameObject) selectModel.wrapper;
+ PredefinedCellStyle cellStyle = (PredefinedCellStyle) (selectNameObject.getObject());
+ this.shortCut.setEnabled(!cellStyle.isBuiltIn() && !cellStyle.isDefaultStyle());
+ } else {
+ this.shortCut.setEnabled(false);
+ }
+
+ }
+ }
+
+
+ private class RemoveItemAction extends UpdateAction {
+ RemoveItemAction() {
+ this.setName(com.fr.design.i18n.Toolkit.i18nText(("Fine-Design_Basic_Action_Remove")));
+ this.setMnemonic('R');
+ this.setSmallIcon(BaseUtils
+ .readIcon("/com/fr/base/images/cell/control/remove.png"));
+ }
+
+ @Override
+ public void actionPerformed(ActionEvent evt) {
+ CellStyleListControlPane.this.onRemoveItem();
+ }
+ }
+
+
+ class CellStyleNameObjectCreator extends NameObjectCreator {
+ public CellStyleNameObjectCreator(String menuName, Class clazz, Class extends BasicBeanPane> updatePane) {
+ super(menuName, clazz, updatePane);
+ }
+
+ public Nameable createNameable(UnrepeatedNameHelper helper) {
+ Constructor extends PredefinedCellStyle> constructor = null;
+ try {
+ constructor = clazzOfInitCase.getConstructor();
+ PredefinedCellStyle cellStyle = constructor.newInstance();
+
+ cellStyle.setName(menuName);
+ cellStyle.setStyle(Style.getInstance());
+ return new NameObject(helper.createUnrepeatedName(this.menuName()), cellStyle);
+
+ } catch (NoSuchMethodException e) {
+ FineLoggerFactory.getLogger().error(e.getMessage(), e);
+ } catch (IllegalAccessException e) {
+ FineLoggerFactory.getLogger().error(e.getMessage(), e);
+ } catch (InstantiationException e) {
+ FineLoggerFactory.getLogger().error(e.getMessage(), e);
+ } catch (InvocationTargetException e) {
+ FineLoggerFactory.getLogger().error(e.getMessage(), e);
+ }
+ return null;
+ }
+ /**
+ *
+ * @param ob
+ * @return
+ */
+ public Object acceptObject2Populate(Object ob) {
+ if (ob instanceof NameObject) {
+ ob = ((NameObject) ob).getObject();
+ }
+ if (clazzOfObject != null && clazzOfObject.isInstance(ob) && acceptDefaultNameObject(ob)) {
+ doSthChanged4Icon(ob);
+ return ob;
+ }
+ return null;
+ }
+
+ public boolean acceptDefaultNameObject(Object ob) {
+ return !((PredefinedCellStyle) ob).isDefaultStyle();
+ }
+ }
+
+
+ /**
+ * Populate
+ */
+ public void populateBean(PredefinedCellStyleConfig ob) {
+ if (ob == null) {
+ return;
+ }
+
+ List nameStyleList = new ArrayList();
+
+ Iterator styleNameIterator = ob.getStyleNameIterator();
+ while (styleNameIterator.hasNext()) {
+ String name = (String) styleNameIterator.next();
+ PredefinedCellStyle tmpStyle = ob.getStyle(name);
+
+ if (tmpStyle != null) {
+ nameStyleList.add(new NameObject(name, tmpStyle));
+ }
+ }
+
+ NameObject[] nameObjects = new NameObject[nameStyleList.size()];
+ nameStyleList.toArray(nameObjects);
+
+ populate(nameObjects);
+ }
+
+
+ public PredefinedCellStyleConfig updateBean() {
+ Nameable[] nameables = this.update();
+ PredefinedCellStyleConfig styleConfig = new PredefinedCellStyleConfig();
+ for (int i = 0; i < nameables.length; i++) {
+ PredefinedCellStyle tmpStyle = (PredefinedCellStyle) ((NameObject) nameables[i]).getObject();
+ tmpStyle.setName(nameables[i].getName());
+ styleConfig.addStyle(tmpStyle);
+ }
+ return styleConfig;
+ }
+
+
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/ChartStyleSettingPane.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/ChartStyleSettingPane.java
new file mode 100644
index 000000000..6eb155eb6
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/ChartStyleSettingPane.java
@@ -0,0 +1,94 @@
+package com.fr.design.mainframe.predefined.ui.detail;
+
+import com.fr.config.predefined.PredefinedChartStyle;
+import com.fr.design.dialog.BasicPane;
+import com.fr.design.dialog.MultiTabPane;
+import com.fr.design.mainframe.predefined.ui.detail.chart.ChartAxisStylePane;
+import com.fr.design.mainframe.predefined.ui.detail.chart.ChartBackgroundStylePane;
+import com.fr.design.mainframe.predefined.ui.detail.chart.ChartDataSheetStylePane;
+import com.fr.design.mainframe.predefined.ui.detail.chart.ChartLabelStylePane;
+import com.fr.design.mainframe.predefined.ui.detail.chart.ChartLegendStylePane;
+import com.fr.design.mainframe.predefined.ui.detail.chart.ChartTitleStylePane;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Bjorn
+ * @version 10.0
+ * Created by Bjorn on 2020-09-16
+ */
+public class ChartStyleSettingPane extends MultiTabPane {
+
+ private ChartTitleStylePane chartTitleStylePane;
+ private ChartLegendStylePane chartLegendStylePane;
+ private ChartLabelStylePane chartLabelPane;
+ private ChartAxisStylePane chartAxisStylePane;
+ private ChartDataSheetStylePane chartDataSheetStylePane;
+ private ChartBackgroundStylePane chartBackgroundStylePane;
+
+ public ChartStyleSettingPane() {
+ }
+
+ @Override
+ protected void initLayout() {
+ super.initLayout();
+ }
+
+ @Override
+ protected List initPaneList() {
+ this.chartTitleStylePane = new ChartTitleStylePane();
+ this.chartLegendStylePane = new ChartLegendStylePane();
+ this.chartLabelPane = new ChartLabelStylePane();
+ this.chartAxisStylePane = new ChartAxisStylePane();
+ this.chartDataSheetStylePane = new ChartDataSheetStylePane();
+ this.chartBackgroundStylePane = new ChartBackgroundStylePane();
+ paneList = new ArrayList<>();
+ paneList.add(this.chartTitleStylePane);
+ paneList.add(this.chartLegendStylePane);
+ paneList.add(this.chartLabelPane);
+ paneList.add(this.chartAxisStylePane);
+ paneList.add(this.chartDataSheetStylePane);
+ paneList.add(this.chartBackgroundStylePane);
+ return paneList;
+ }
+
+ @Override
+ public void populateBean(PredefinedChartStyle ob) {
+ chartTitleStylePane.populate(ob);
+ chartLegendStylePane.populate(ob);
+ chartLabelPane.populate(ob);
+ chartAxisStylePane.populate(ob);
+ chartDataSheetStylePane.populate(ob);
+ chartBackgroundStylePane.populate(ob);
+ }
+
+ @Override
+ public void updateBean(PredefinedChartStyle ob) {
+
+ }
+
+
+ @Override
+ public PredefinedChartStyle updateBean() {
+ PredefinedChartStyle chartStyle = new PredefinedChartStyle();
+ chartTitleStylePane.update(chartStyle);
+ chartLegendStylePane.update(chartStyle);
+ chartLabelPane.update(chartStyle);
+ chartAxisStylePane.update(chartStyle);
+ chartDataSheetStylePane.update(chartStyle);
+ chartBackgroundStylePane.update(chartStyle);
+ return chartStyle;
+ }
+
+
+ @Override
+ public boolean accept(Object ob) {
+ return false;
+ }
+
+ @Override
+ public void reset() {
+
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/ColorFillStylePane.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/ColorFillStylePane.java
new file mode 100644
index 000000000..9e2a0d5ef
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/ColorFillStylePane.java
@@ -0,0 +1,292 @@
+package com.fr.design.mainframe.predefined.ui.detail;
+
+import com.fr.base.ChartColorMatching;
+import com.fr.base.ChartPreStyleConfig;
+import com.fr.base.Utils;
+import com.fr.chart.base.ChartConstants;
+import com.fr.config.predefined.ColorFillStyle;
+import com.fr.config.predefined.PredefinedColorStyle;
+import com.fr.design.beans.BasicBeanPane;
+import com.fr.design.constants.LayoutConstants;
+import com.fr.design.event.UIObserverListener;
+import com.fr.design.gui.icombobox.ColorSchemeComboBox;
+import com.fr.design.gui.ilable.UILabel;
+import com.fr.design.i18n.Toolkit;
+import com.fr.design.layout.FRGUIPaneFactory;
+import com.fr.design.layout.TableLayout;
+import com.fr.design.layout.TableLayoutHelper;
+import com.fr.design.style.background.gradient.FixedGradientBar;
+import com.fr.design.style.color.ColorAdjustPane;
+import com.fr.stable.StringUtils;
+
+import javax.swing.JPanel;
+import java.util.Arrays;
+import java.util.List;
+import java.awt.BorderLayout;
+import java.awt.CardLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+/**
+ * @author Bjorn
+ * @version 10.0
+ * Created by Bjorn on 2020-09-15
+ */
+public class ColorFillStylePane extends BasicBeanPane {
+
+ private ColorSchemeComboBox styleSelectBox;
+ private JPanel customPane;
+ private JPanel changeColorSetPane;
+ private FixedGradientBar colorGradient;
+
+ private CardLayout cardLayout;
+
+ private ColorAdjustPane colorAdjustPane;
+
+ private Color[] gradientColors;
+ private Color[] accColors;
+
+ private boolean gradientSelect = false;
+
+ public ColorFillStylePane() {
+ this.setLayout(new BorderLayout());
+
+ styleSelectBox = createColorSchemeComboBox();
+ customPane = new JPanel(FRGUIPaneFactory.createBorderLayout()) {
+ @Override
+ public Dimension getPreferredSize() {
+ if (!customPane.isVisible()) {
+ return new Dimension(0, 0);
+ }
+ if (!gradientSelect) {
+ return colorAdjustPane.getPreferredSize();
+ }
+ return colorGradient.getPreferredSize();
+ }
+ };
+
+ changeColorSetPane = new JPanel(cardLayout = new CardLayout());
+ changeColorSetPane.add(colorGradient = new FixedGradientBar(4, 130), "gradient");
+ gradientColors = new Color[]{Color.WHITE, FixedGradientBar.NEW_CHARACTER};
+ changeColorSetPane.add(colorAdjustPane = new ColorAdjustPane(), "acc");
+ accColors = ColorAdjustPane.DEFAULT_COLORS;
+ cardLayout.show(changeColorSetPane, "acc");
+ customPane.add(changeColorSetPane, BorderLayout.CENTER);
+ initListener();
+ initLayout();
+
+ }
+
+ public ColorSchemeComboBox getStyleSelectBox() {
+ return styleSelectBox;
+ }
+
+ public JPanel getCustomPane() {
+ return customPane;
+ }
+
+ protected ColorSchemeComboBox createColorSchemeComboBox() {
+ return new ColorSchemeComboBox();
+ }
+
+ private void initListener() {
+ colorAdjustPane.registerChangeListener(new UIObserverListener() {
+ @Override
+ public void doChange() {
+ accColors = colorAdjustPane.getColors();
+ if (styleSelectBox.getSelectType() != ColorSchemeComboBox.SelectType.COMBINATION_COLOR) {
+ styleSelectBox.setSelectType(ColorSchemeComboBox.SelectType.COMBINATION_COLOR);
+ }
+ ColorFillStylePane.this.revalidate();
+ }
+ });
+ colorGradient.registerChangeListener(new UIObserverListener() {
+ @Override
+ public void doChange() {
+ gradientColors[0] = colorGradient.getSelectColorPointBtnP1().getColorInner();
+ gradientColors[1] = colorGradient.getSelectColorPointBtnP2().getColorInner();
+ if (styleSelectBox.getSelectType() != ColorSchemeComboBox.SelectType.GRADATION_COLOR) {
+ styleSelectBox.setSelectType(ColorSchemeComboBox.SelectType.GRADATION_COLOR);
+ }
+ }
+ });
+ styleSelectBox.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ styleSelectBoxChange();
+ }
+ });
+ }
+
+ protected void styleSelectBoxChange() {
+ switch (styleSelectBox.getSelectType()) {
+ case COMBINATION_COLOR:
+ colorAdjustPane.updateColor(accColors);
+ cardLayout.show(changeColorSetPane, "acc");
+ gradientSelect = false;
+ break;
+ case GRADATION_COLOR:
+ colorGradient.updateColor(gradientColors[0], gradientColors[1]);
+ cardLayout.show(changeColorSetPane, "gradient");
+ gradientSelect = true;
+ break;
+ default:
+ ColorSchemeComboBox.ColorInfo selectColorInfo = styleSelectBox.getSelectColorInfo();
+ if (selectColorInfo == null) {
+ return;
+ }
+ if (selectColorInfo.isGradient()) {
+ colorGradient.updateColor(selectColorInfo.getColors().get(0), selectColorInfo.getColors().get(1));
+ cardLayout.show(changeColorSetPane, "gradient");
+ gradientSelect = true;
+ } else {
+ colorAdjustPane.updateColor(selectColorInfo.getColors().toArray(new Color[]{}));
+ cardLayout.show(changeColorSetPane, "acc");
+ gradientSelect = false;
+ }
+ break;
+ }
+ ColorFillStylePane.this.revalidate();
+ }
+
+ protected void initLayout() {
+ this.setLayout(new BorderLayout());
+ this.add(getContentPane(), BorderLayout.CENTER);
+ }
+
+ protected JPanel getContentPane() {
+ double p = TableLayout.PREFERRED;
+ double f = TableLayout.FILL;
+ double e = 155;
+ double[] columnSize = {f, e};
+ double[] rowSize = {p, p, p};
+
+ JPanel panel = TableLayoutHelper.createGapTableLayoutPane(contentPaneComponents(), rowSize, columnSize, 12, LayoutConstants.VGAP_LARGE);
+ return panel;
+ }
+
+ protected Component[][] contentPaneComponents() {
+ return new Component[][]{
+ new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Template_Color")), styleSelectBox},
+ new Component[]{null, customPane},
+
+ };
+ }
+
+ @Override
+ protected String title4PopupWindow() {
+ return Toolkit.i18nText("Fine-Design_Chart_Color");
+ }
+
+ public void populateBean(PredefinedColorStyle predefinedColorStyle) {
+ populateBean(predefinedColorStyle.getColorFillStyle());
+ }
+
+ @Override
+ public void populateBean(ColorFillStyle colorFillStyle) {
+ String fillStyleName = colorFillStyle == null ? "" : colorFillStyle.getFillStyleName();
+ if (StringUtils.isBlank(fillStyleName) || !styleSelectBox.getItems().contains(fillStyleName)) {
+ if (colorFillStyle == null || colorFillStyle.getColorStyle() == ChartConstants.COLOR_DEFAULT) {
+ styleSelectBox.setSelectType(ColorSchemeComboBox.SelectType.DEFAULT);//默认
+ } else {
+ int colorStyle = colorFillStyle.getColorStyle();
+ if (colorStyle == ChartConstants.COLOR_GRADIENT) {
+ gradientColors[0] = colorFillStyle.getColorList().get(0);
+ gradientColors[1] = colorFillStyle.getColorList().get(1);
+ styleSelectBox.setSelectType(ColorSchemeComboBox.SelectType.GRADATION_COLOR);
+ } else {
+ int colorSize = colorFillStyle.getColorList().size();
+ accColors = new Color[colorSize];
+ for (int i = 0; i < colorSize; i++) {
+ accColors[i] = colorFillStyle.getColorList().get(i);
+ }
+ styleSelectBox.setSelectType(ColorSchemeComboBox.SelectType.COMBINATION_COLOR);
+ }
+ }
+ } else {
+ styleSelectBox.setSelectedItem(fillStyleName);
+ }
+ }
+
+ public PredefinedColorStyle update() {
+ PredefinedColorStyle predefinedColorStyle = new PredefinedColorStyle();
+ predefinedColorStyle.setColorFillStyle(updateBean());
+ return predefinedColorStyle;
+ }
+
+ @Override
+ public ColorFillStyle updateBean() {
+ switch (styleSelectBox.getSelectType()) {
+ case COMBINATION_COLOR:
+ return updateCombinationColor();
+ case GRADATION_COLOR:
+ return updateGradationColor();
+ case DEFAULT:
+ return updateDefaultColor();
+ default:
+ return updateNormalColor();
+ }
+ }
+
+ private ColorFillStyle updateCombinationColor() {
+ ColorFillStyle colorFillStyle = new ColorFillStyle();
+ List colorList = colorFillStyle.getColorList();
+ colorFillStyle.setColorStyle(ChartConstants.COLOR_ACC);
+ for (int i = 0, length = accColors.length; i < length; i++) {
+ colorList.add(accColors[i]);
+ }
+ colorFillStyle.setCustomFillStyle(true);
+ return colorFillStyle;
+ }
+
+ private ColorFillStyle updateGradationColor() {
+ ColorFillStyle colorFillStyle = new ColorFillStyle();
+ List colorList = colorFillStyle.getColorList();
+ colorFillStyle.setColorStyle(ChartConstants.COLOR_GRADIENT);
+ Color start = gradientColors[0];
+ Color end = gradientColors[1];
+ colorList.add(start);
+ colorList.add(end);
+ colorFillStyle.setCustomFillStyle(true);
+ return colorFillStyle;
+ }
+
+ private ColorFillStyle updateDefaultColor() {
+ ColorFillStyle colorFillStyle = new ColorFillStyle();
+ colorFillStyle.setColorStyle(ChartConstants.COLOR_DEFAULT);
+ return colorFillStyle;
+ }
+
+ private ColorFillStyle updateNormalColor() {
+ ChartPreStyleConfig manager = ChartPreStyleConfig.getInstance();
+ Object preStyle = manager.getPreStyle(styleSelectBox.getSelectedItem());
+ if (preStyle instanceof ChartColorMatching) {
+ ColorFillStyle colorFillStyle = new ColorFillStyle();
+ ChartColorMatching chartColorMatching = (ChartColorMatching) preStyle;
+ colorFillStyle.setColorStyle(chartColorMatching.getGradient() ? ChartConstants.COLOR_GRADIENT : ChartConstants.COLOR_ACC);
+ List colorList = chartColorMatching.getColorList();
+ if (colorList == null || colorList.size() == 0) {
+ colorList = Arrays.asList(ChartConstants.CHART_COLOR_ARRAY);
+ }
+ colorFillStyle.setColorList(colorList);
+ colorFillStyle.setFillStyleName(Utils.objectToString(styleSelectBox.getSelectedItem()));
+ return colorFillStyle;
+ } else {
+ return updateModifyColor();
+ }
+ }
+
+ private ColorFillStyle updateModifyColor() {
+ ColorFillStyle colorFillStyle = new ColorFillStyle();
+ ColorSchemeComboBox.ColorInfo selectColorInfo = styleSelectBox.getSelectColorInfo();
+ boolean isGradient = selectColorInfo.isGradient();
+ List colors = selectColorInfo.getColors();
+ colorFillStyle.setColorList(colors);
+ colorFillStyle.setCustomFillStyle(true);
+ colorFillStyle.setColorStyle(isGradient ? ChartConstants.COLOR_GRADIENT : ChartConstants.COLOR_ACC);
+ return colorFillStyle;
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/ComponentStyleSettingPane.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/ComponentStyleSettingPane.java
new file mode 100644
index 000000000..e2d306933
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/ComponentStyleSettingPane.java
@@ -0,0 +1,63 @@
+package com.fr.design.mainframe.predefined.ui.detail;
+
+import com.fr.config.predefined.PredefinedComponentStyle;
+import com.fr.design.dialog.BasicPane;
+import com.fr.design.dialog.MultiTabPane;
+import com.fr.design.mainframe.predefined.ui.detail.component.ComponentFrameStylePane;
+import com.fr.design.mainframe.predefined.ui.detail.component.ComponentTitleStylePane;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by kerry on 2020-09-01
+ */
+public class ComponentStyleSettingPane extends MultiTabPane {
+ private ComponentFrameStylePane frameStylePane;
+ private ComponentTitleStylePane titleStylePane;
+
+ public ComponentStyleSettingPane() {
+ }
+
+
+ @Override
+ protected List initPaneList() {
+ this.frameStylePane = new ComponentFrameStylePane();
+ this.titleStylePane = ComponentTitleStylePane.createPredefinedSettingPane();
+ paneList = new ArrayList();
+ paneList.add(this.frameStylePane);
+ paneList.add(this.titleStylePane);
+ return paneList;
+ }
+
+ @Override
+ public void populateBean(PredefinedComponentStyle ob) {
+ this.frameStylePane.populate(ob);
+ this.titleStylePane.populate(ob);
+ }
+
+ @Override
+ public void updateBean(PredefinedComponentStyle ob) {
+
+ }
+
+
+ @Override
+ public PredefinedComponentStyle updateBean() {
+ PredefinedComponentStyle componentStyle = new PredefinedComponentStyle();
+ this.frameStylePane.update(componentStyle);
+ this.titleStylePane.update(componentStyle);
+ return componentStyle;
+ }
+
+
+ @Override
+ public boolean accept(Object ob) {
+ return false;
+ }
+
+ @Override
+ public void reset() {
+
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/PredefinedBackgroundSettingPane.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/PredefinedBackgroundSettingPane.java
new file mode 100644
index 000000000..05b02a564
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/PredefinedBackgroundSettingPane.java
@@ -0,0 +1,81 @@
+package com.fr.design.mainframe.predefined.ui.detail;
+
+import com.fr.config.predefined.PredefinedBackground;
+import com.fr.design.beans.BasicBeanPane;
+import com.fr.design.gui.ibutton.UIButtonGroup;
+import com.fr.design.layout.FRGUIPaneFactory;
+import com.fr.design.mainframe.predefined.ui.detail.background.BackgroundSettingPane;
+import com.fr.design.mainframe.predefined.ui.detail.background.BackgroundWithAlphaSettingPane;
+
+import javax.swing.JPanel;
+import java.awt.BorderLayout;
+import java.awt.CardLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+/**
+ * Created by kerry on 2020-08-31
+ */
+public class PredefinedBackgroundSettingPane extends BasicBeanPane {
+ private UIButtonGroup buttonGroup;
+ private BackgroundSettingPane reportBackgroundSettingPane;
+ private BackgroundWithAlphaSettingPane formBackgroundSettingPane;
+
+
+ public PredefinedBackgroundSettingPane() {
+ initPane();
+ }
+
+ private void initPane() {
+ this.setLayout(FRGUIPaneFactory.createBorderLayout());
+ reportBackgroundSettingPane = new BackgroundSettingPane();
+ formBackgroundSettingPane = new BackgroundWithAlphaSettingPane();
+ CardLayout tabbedPane = new CardLayout();
+ JPanel center = new JPanel(tabbedPane);
+ center.add(reportBackgroundSettingPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plain_Report"));
+ center.add(formBackgroundSettingPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Decision_Report"));
+ this.buttonGroup = new UIButtonGroup(new String[]{com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plain_Report"),
+ com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Decision_Report")});
+ buttonGroup.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ if (buttonGroup.getSelectedIndex() == 0) {
+ tabbedPane.show(center, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plain_Report"));
+ } else {
+ tabbedPane.show(center, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Decision_Report"));
+ }
+ }
+ });
+
+
+ this.add(buttonGroup, BorderLayout.NORTH);
+
+ this.add(center, BorderLayout.CENTER);
+ this.buttonGroup.setSelectedIndex(0);
+ }
+
+ public boolean currentFormBackground() {
+ return buttonGroup.getSelectedIndex() == 1;
+ }
+
+ @Override
+ public void populateBean(PredefinedBackground predefinedBackground) {
+ reportBackgroundSettingPane.populateBean(predefinedBackground.getReportBackground());
+ formBackgroundSettingPane.populateBean(predefinedBackground.getFormBackground());
+ }
+
+ @Override
+ public PredefinedBackground updateBean() {
+ PredefinedBackground predefinedBackground = new PredefinedBackground();
+ predefinedBackground.setReportBackground(reportBackgroundSettingPane.updateBean());
+ predefinedBackground.setFormBackground(formBackgroundSettingPane.updateBean());
+ return predefinedBackground;
+ }
+
+ @Override
+ protected String title4PopupWindow() {
+ return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Predefined_Background_Setting");
+ }
+
+
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/background/AbstractBackgroundDetailPane.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/background/AbstractBackgroundDetailPane.java
new file mode 100644
index 000000000..7cc1629bf
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/background/AbstractBackgroundDetailPane.java
@@ -0,0 +1,51 @@
+package com.fr.design.mainframe.predefined.ui.detail.background;
+
+import com.fr.design.event.UIObserverListener;
+import com.fr.design.mainframe.backgroundpane.BackgroundQuickPane;
+import com.fr.general.Background;
+
+import javax.swing.event.ChangeListener;
+
+/**
+ * Created by kerry on 2020-09-14
+ */
+public abstract class AbstractBackgroundDetailPane extends BackgroundQuickPane {
+ @Override
+ public boolean accept(Background background) {
+ return false;
+ }
+
+ @Override
+ public void populateBean(Background background) {
+ this.populate((T) background);
+ }
+
+ @Override
+ public Background updateBean() {
+ return this.update();
+ }
+
+ @Override
+ public String title4PopupWindow() {
+ return null;
+ }
+
+ @Override
+ public void reset() {
+
+ }
+
+ @Override
+ public void registerChangeListener(UIObserverListener listener) {
+
+ }
+
+ public abstract void populate(T background);
+
+ public abstract T update();
+
+ public void addChangeListener(ChangeListener changeListener) {
+
+ }
+
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/background/BackgroundSettingPane.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/background/BackgroundSettingPane.java
new file mode 100644
index 000000000..3efd0b447
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/background/BackgroundSettingPane.java
@@ -0,0 +1,135 @@
+package com.fr.design.mainframe.predefined.ui.detail.background;
+
+import com.fr.design.beans.BasicBeanPane;
+import com.fr.design.event.UIObserverListener;
+import com.fr.design.gui.icombobox.UIComboBox;
+import com.fr.design.gui.ilable.UILabel;
+import com.fr.design.layout.FRGUIPaneFactory;
+import com.fr.design.layout.TableLayoutHelper;
+import com.fr.design.mainframe.backgroundpane.BackgroundQuickPane;
+import com.fr.general.Background;
+import com.fr.log.FineLoggerFactory;
+
+import javax.swing.BorderFactory;
+import javax.swing.JPanel;
+import javax.swing.event.ChangeListener;
+import java.awt.BorderLayout;
+import java.awt.CardLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.util.ArrayList;
+
+/**
+ * Created by kerry on 2020-09-02
+ */
+public class BackgroundSettingPane extends BasicBeanPane {
+ private ChangeListener changeListener = null;
+ private UIComboBox headCombobox;
+ private BackgroundQuickPane[] paneList;
+
+ public BackgroundSettingPane() {
+ init();
+ }
+
+ private void init() {
+ this.setLayout(FRGUIPaneFactory.createBorderLayout());
+ this.add(createComboHeadPane(), BorderLayout.NORTH);
+ CardLayout cardlayout = new CardLayout();
+ paneList = supportKindsOfBackgroundUI();
+ final JPanel centerPane = new JPanel(cardlayout) {
+ @Override
+ public Dimension getPreferredSize() {// AUGUST:使用当前面板的的高度
+ int index = headCombobox.getSelectedIndex();
+ return new Dimension(super.getPreferredSize().width, paneList[index].getPreferredSize().height);
+ }
+ };
+ centerPane.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 0));
+ for (BackgroundQuickPane pane : paneList) {
+ headCombobox.addItem(pane.title4PopupWindow());
+ centerPane.add(pane, pane.title4PopupWindow());
+ }
+ headCombobox.addItemListener(new ItemListener() {
+ @Override
+ public void itemStateChanged(ItemEvent e) {
+ cardlayout.show(centerPane, (String) headCombobox.getSelectedItem());
+ }
+ });
+ this.add(centerPane, BorderLayout.CENTER);
+ }
+
+ public void addChangeListener(ChangeListener changeListener) {
+ this.changeListener = changeListener;
+ }
+
+
+ private JPanel createComboHeadPane() {
+ headCombobox = new UIComboBox();
+
+ JPanel jPanel = TableLayoutHelper.createGapTableLayoutPane(
+ new Component[][]{new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Fill")), headCombobox}},
+ TableLayoutHelper.FILL_NONE, 33, 5);
+ headCombobox.setPreferredSize(new Dimension(160, 20));
+ jPanel.setBorder(BorderFactory.createEmptyBorder(5, 10, 5, 10));
+ return jPanel;
+ }
+
+ protected BackgroundQuickPane[] supportKindsOfBackgroundUI() {
+ java.util.List kinds = new ArrayList<>();
+ kinds.add(new EmptyBackgroundPane());
+ kinds.add(new ColorDetailPane());
+ kinds.add(new TextureDetailObservePane());
+ kinds.add(new PatternDetailPane());
+ kinds.add(createImageSelectPane());
+ kinds.add(new GradientDetailPane());
+ return kinds.toArray(new BackgroundQuickPane[kinds.size()]);
+ }
+
+ protected ImageDetailPane createImageSelectPane() {
+ ImageDetailPane imageDetailPane = new ImageDetailPane();
+ imageDetailPane.registerChangeListener(new UIObserverListener() {
+ @Override
+ public void doChange() {
+ fireChangeListener();
+ }
+ });
+ return imageDetailPane;
+ }
+
+ protected void fireChangeListener() {
+ if (changeListener != null) {
+ changeListener.stateChanged(null);
+ }
+ }
+
+
+ @Override
+ public void populateBean(Background background) {
+ for (int i = 0; i < paneList.length; i++) {
+ BackgroundQuickPane pane = paneList[i];
+ if (pane.accept(background)) {
+ pane.populateBean(background);
+ headCombobox.setSelectedIndex(i);
+ return;
+ }
+ }
+ }
+
+ @Override
+ public Background updateBean() {
+ int selectIndex = this.headCombobox.getSelectedIndex();
+ try {
+ return paneList[selectIndex].updateBean();
+ } catch (Exception e) {
+ FineLoggerFactory.getLogger().error(e.getMessage(), e);
+ }
+ return null;
+ }
+
+ @Override
+ protected String title4PopupWindow() {
+ return null;
+ }
+
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/background/BackgroundWithAlphaSettingPane.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/background/BackgroundWithAlphaSettingPane.java
new file mode 100644
index 000000000..dba0dce23
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/background/BackgroundWithAlphaSettingPane.java
@@ -0,0 +1,76 @@
+package com.fr.design.mainframe.predefined.ui.detail.background;
+
+import com.fr.config.predefined.BackgroundWithAlpha;
+import com.fr.design.beans.BasicBeanPane;
+import com.fr.design.designer.IntervalConstants;
+import com.fr.design.gui.frpane.UINumberDragPane;
+import com.fr.design.gui.ilable.UILabel;
+import com.fr.design.layout.FRGUIPaneFactory;
+import com.fr.design.layout.TableLayoutHelper;
+import javax.swing.BorderFactory;
+import javax.swing.JPanel;
+import javax.swing.event.ChangeListener;
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+
+/**
+ * Created by kerry on 2020-09-04
+ */
+public class BackgroundWithAlphaSettingPane extends BasicBeanPane {
+ private BackgroundSettingPane backgroundSettingPane;
+ //透明度
+ private UINumberDragPane numberDragPane;
+
+ private double maxNumber = 100;
+
+
+ public BackgroundWithAlphaSettingPane() {
+ this.setLayout(FRGUIPaneFactory.createBorderLayout());
+ backgroundSettingPane = new FormBackgroundSettingPane();
+
+ JPanel eastpane = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(2, 0);
+ this.numberDragPane = new UINumberDragPane(0, 100);
+ this.numberDragPane.setPreferredSize(new Dimension(148, 20));
+ eastpane.add(numberDragPane);
+ eastpane.add(new UILabel("%"));
+ JPanel transparencyPane = TableLayoutHelper.createGapTableLayoutPane(
+ new Component[][]{new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Widget-Style_Alpha")),
+ eastpane}}, TableLayoutHelper.FILL_LASTCOLUMN, 18, 5);
+ transparencyPane.setBorder(BorderFactory.createEmptyBorder(5, 10, 5, 10));
+
+
+ Component[][] components = new Component[][]{
+ new Component[]{backgroundSettingPane},
+ new Component[]{transparencyPane}};
+
+ JPanel panel = TableLayoutHelper.createGapTableLayoutPane(components, TableLayoutHelper.FILL_NONE, IntervalConstants.INTERVAL_W2, IntervalConstants.INTERVAL_L1);
+ this.add(panel, BorderLayout.CENTER);
+ }
+
+
+ public void addChangeListener(ChangeListener changeListener) {
+ this.backgroundSettingPane.addChangeListener(changeListener);
+ }
+
+
+ @Override
+ public void populateBean(BackgroundWithAlpha ob) {
+ backgroundSettingPane.populateBean(ob.getBackground());
+ numberDragPane.populateBean(ob.getAlpha() * maxNumber);
+ }
+
+ @Override
+ public BackgroundWithAlpha updateBean() {
+ BackgroundWithAlpha backgroundWithAlpha = new BackgroundWithAlpha();
+ backgroundWithAlpha.setBackground(backgroundSettingPane.updateBean());
+ backgroundWithAlpha.setAlpha((float) (numberDragPane.updateBean() / maxNumber));
+ return backgroundWithAlpha;
+ }
+
+ @Override
+ protected String title4PopupWindow() {
+ return null;
+ }
+
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/background/ColorDetailPane.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/background/ColorDetailPane.java
new file mode 100644
index 000000000..ce4f923cb
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/background/ColorDetailPane.java
@@ -0,0 +1,103 @@
+package com.fr.design.mainframe.predefined.ui.detail.background;
+
+import com.fr.base.background.ColorBackground;
+import com.fr.design.event.UIObserver;
+import com.fr.design.event.UIObserverListener;
+import com.fr.design.gui.ibutton.UIButton;
+import com.fr.design.gui.ilable.UILabel;
+import com.fr.design.layout.FRGUIPaneFactory;
+import com.fr.design.layout.TableLayoutHelper;
+import com.fr.design.style.color.ColorSelectPane;
+import com.fr.general.Background;
+
+import javax.swing.BorderFactory;
+import javax.swing.JPanel;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+
+/**
+ * Created by kerry on 2020-08-31
+ */
+public class ColorDetailPane extends AbstractBackgroundDetailPane {
+ private ColorBackgroundSelectPane selectPane;
+
+
+ public ColorDetailPane() {
+ this.selectPane = new ColorBackgroundSelectPane();
+ this.setLayout(FRGUIPaneFactory.createBorderLayout());
+ this.add(this.selectPane, BorderLayout.CENTER);
+ }
+
+ @Override
+ public void populate(ColorBackground background) {
+ this.selectPane.setColor(background.getColor());
+ }
+
+ @Override
+ public ColorBackground update() {
+ return ColorBackground.getInstance(selectPane.getColor());
+ }
+
+ public String title4PopupWindow() {
+ return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Color");
+ }
+
+ @Override
+ public boolean accept(Background background) {
+ return background instanceof ColorBackground;
+ }
+
+ class ColorBackgroundSelectPane extends ColorSelectPane implements UIObserver {
+ protected UIObserverListener uiObserverListener;
+
+ protected void initialCompents(boolean isSupportTransparent) {
+ this.setLayout(FRGUIPaneFactory.createBorderLayout());
+ this.setBorder(BorderFactory.createEmptyBorder());
+ if (isSupportTransparent) {
+ this.add(createNorthPane(), BorderLayout.NORTH);
+ }
+ JPanel centerPane = createCenterPane();
+ this.add(centerPane, BorderLayout.CENTER);
+ this.addChangeListener(new ChangeListener() {
+ @Override
+ public void stateChanged(ChangeEvent e) {
+ if (uiObserverListener != null) {
+ uiObserverListener.doChange();
+ }
+ }
+ });
+ }
+
+ private JPanel createNorthPane() {
+ UIButton transpanrentBtn = createTranspanrentButton();
+ transpanrentBtn.setPreferredSize(new Dimension(160, 20));
+ JPanel jPanel = TableLayoutHelper.createGapTableLayoutPane(
+ new Component[][]{new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Color")),
+ transpanrentBtn}}, TableLayoutHelper.FILL_NONE, 33, 5);
+ jPanel.setBorder(BorderFactory.createEmptyBorder(5, 0, 5, 10));
+ return jPanel;
+ }
+
+ protected JPanel createCenterPane() {
+ JPanel centerPane = super.createCenterPane();
+
+ JPanel jPanel = TableLayoutHelper.createGapTableLayoutPane(
+ new Component[][]{new Component[]{new UILabel(" "), centerPane}}, TableLayoutHelper.FILL_NONE, 33, 5);
+ jPanel.setBorder(BorderFactory.createEmptyBorder(5, 0, 5, 10));
+ return jPanel;
+ }
+
+ @Override
+ public void registerChangeListener(UIObserverListener listener) {
+ this.uiObserverListener = listener;
+ }
+
+ @Override
+ public boolean shouldResponseChangeListener() {
+ return true;
+ }
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/background/EmptyBackgroundPane.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/background/EmptyBackgroundPane.java
new file mode 100644
index 000000000..569db1023
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/background/EmptyBackgroundPane.java
@@ -0,0 +1,34 @@
+package com.fr.design.mainframe.predefined.ui.detail.background;
+
+import com.fr.general.Background;
+
+/**
+ * Created by kerry on 2020-09-01
+ */
+public class EmptyBackgroundPane extends AbstractBackgroundDetailPane {
+
+ @Override
+ public void populate(Background background) {
+
+ }
+
+ @Override
+ public Background update() {
+ return null;
+ }
+
+ /**
+ * 名称
+ *
+ * @return 名称
+ */
+ public String title4PopupWindow() {
+ return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Null");
+ }
+
+ public boolean accept(Background background) {
+ return background == null;
+ }
+
+
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/background/FormBackgroundSettingPane.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/background/FormBackgroundSettingPane.java
new file mode 100644
index 000000000..1a683df5c
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/background/FormBackgroundSettingPane.java
@@ -0,0 +1,48 @@
+package com.fr.design.mainframe.predefined.ui.detail.background;
+
+import com.fr.design.ExtraDesignClassManager;
+import com.fr.design.event.UIObserverListener;
+import com.fr.design.fun.BackgroundQuickUIProvider;
+import com.fr.design.mainframe.backgroundpane.BackgroundQuickPane;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Created by kerry on 2020-09-14
+ */
+public class FormBackgroundSettingPane extends BackgroundSettingPane {
+
+ public FormBackgroundSettingPane() {
+ super();
+ }
+
+ @Override
+ protected BackgroundQuickPane[] supportKindsOfBackgroundUI() {
+ ColorDetailPane colorDetailPane = new ColorDetailPane();
+ ImageDetailPane imageDetailPane = createImageSelectPane();
+ GradientDetailPane gradientPane = new GradientDetailPane();
+ //hugh:表单支持背景接口
+ List kinds = new ArrayList();
+
+ kinds.add(new EmptyBackgroundPane());
+ kinds.add(colorDetailPane);
+ kinds.add(imageDetailPane);
+ kinds.add(gradientPane);
+
+ Set providers = ExtraDesignClassManager.getInstance().getArray(BackgroundQuickUIProvider.MARK_STRING);
+ for (BackgroundQuickUIProvider provider : providers) {
+ BackgroundQuickPane newTypePane = provider.appearanceForBackground();
+ newTypePane.registerChangeListener(new UIObserverListener() {
+ @Override
+ public void doChange() {
+ fireChangeListener();
+ }
+ });
+ kinds.add(newTypePane);
+ }
+
+ return kinds.toArray(new BackgroundQuickPane[kinds.size()]);
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/background/GradientDetailPane.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/background/GradientDetailPane.java
new file mode 100644
index 000000000..74851c38f
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/background/GradientDetailPane.java
@@ -0,0 +1,159 @@
+package com.fr.design.mainframe.predefined.ui.detail.background;
+
+import com.fr.base.background.GradientBackground;
+import com.fr.design.designer.IntervalConstants;
+import com.fr.design.event.UIObserver;
+import com.fr.design.event.UIObserverListener;
+import com.fr.design.gui.ibutton.UIRadioButton;
+import com.fr.design.gui.ilable.UILabel;
+import com.fr.design.layout.FRGUIPaneFactory;
+import com.fr.design.layout.TableLayoutHelper;
+import com.fr.design.style.background.gradient.GradientBar;
+import com.fr.general.Background;
+
+import javax.swing.ButtonGroup;
+import javax.swing.JPanel;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+/**
+ * 渐变色的面板,不是很pp,面板应用显得繁琐,有写可以写成控件类型,比如色彩选择的。。,可以做得花哨点
+ *
+ * @author ben
+ */
+public class GradientDetailPane extends AbstractBackgroundDetailPane implements UIObserver {
+ private static final long serialVersionUID = -6854603990673031897L;
+ private UIObserverListener listener;
+ private UIRadioButton left2right, top2bottom;
+ private GradientBar gradientBar;
+ private ChangeListener changeListener = null;
+
+ public GradientDetailPane() {
+ this.setLayout(FRGUIPaneFactory.createBorderLayout());
+
+ JPanel gradientPanel = FRGUIPaneFactory.createBorderLayout_S_Pane();
+ JPanel blankJp = new JPanel();
+ gradientBar = new GradientBar(4, 140);
+ blankJp.add(gradientBar);
+
+ gradientPanel.add(gradientBar, BorderLayout.SOUTH);
+
+ JPanel jp = new JPanel(new GridLayout(2, 1, 15, 10));
+
+
+ left2right = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Page_Setup_Horizontal"));
+ jp.add(left2right);
+ left2right.setSelected(true);
+ left2right.addActionListener(reviewListener);
+
+ top2bottom = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Page_Setup_Vertical"));
+ jp.add(top2bottom);
+ top2bottom.addActionListener(reviewListener);
+
+ ButtonGroup toggle = new ButtonGroup();
+ toggle.add(left2right);
+ toggle.add(top2bottom);
+
+ Component[][] components = new Component[][]{
+ new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Gradient_Setting")), gradientPanel},
+ new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Gradient_Color")), jp}
+ };
+ JPanel contentPane = TableLayoutHelper.createGapTableLayoutPane(components, TableLayoutHelper.FILL_LASTCOLUMN,
+ IntervalConstants.INTERVAL_W4, IntervalConstants.INTERVAL_L1);
+ this.addChangeListener(new ChangeListener() {
+ @Override
+ public void stateChanged(ChangeEvent e) {
+ if (listener != null) {
+ listener.doChange();
+ }
+ }
+ });
+
+
+ this.add(contentPane);
+ }
+
+ @Override
+ public boolean accept(Background background) {
+ return background instanceof GradientBackground;
+ }
+
+
+
+ public void populate(GradientBackground bg) {
+ this.gradientBar.getSelectColorPointBtnP1().setColorInner(bg.getStartColor());
+ this.gradientBar.getSelectColorPointBtnP2().setColorInner(bg.getEndColor());
+ if (bg.getDirection() == GradientBackground.LEFT2RIGHT) {
+ left2right.setSelected(true);
+ } else {
+ top2bottom.setSelected(true);
+ }
+ if (bg.isUseCell()) {
+ return;
+ }
+ double startValue = (double) bg.getBeginPlace();
+ double endValue = (double) bg.getFinishPlace();
+ gradientBar.setStartValue(startValue);
+ gradientBar.setEndValue(endValue);
+ this.gradientBar.repaint();
+ }
+
+ public GradientBackground update() {
+ GradientBackground gb = new GradientBackground(
+ gradientBar.getSelectColorPointBtnP1().getColorInner(),
+ gradientBar.getSelectColorPointBtnP2().getColorInner());
+ if (left2right.isSelected()) {
+ gb.setDirection(GradientBackground.LEFT2RIGHT);
+ } else {
+ gb.setDirection(GradientBackground.TOP2BOTTOM);
+ }
+ if (gradientBar.isOriginalPlace()) {
+ gb.setUseCell(true);
+ } else {
+ gb.setUseCell(false);
+ gb.setBeginPlace((float) gradientBar.getStartValue());
+ gb.setFinishPlace((float) gradientBar.getEndValue());
+ }
+ return gb;
+ }
+
+
+ ActionListener reviewListener = new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ fireChagneListener();
+ }
+ };
+
+ public void addChangeListener(ChangeListener changeListener) {
+ this.changeListener = changeListener;
+ gradientBar.addChangeListener(changeListener);
+ }
+
+ public void fireChagneListener() {
+ if (this.changeListener != null) {
+ ChangeEvent evt = new ChangeEvent(this);
+ this.changeListener.stateChanged(evt);
+ }
+ }
+
+ @Override
+ public void registerChangeListener(UIObserverListener listener) {
+ this.listener = listener;
+ }
+
+ @Override
+ public boolean shouldResponseChangeListener() {
+ return true;
+ }
+
+ @Override
+ public String title4PopupWindow() {
+ return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Gradient_Color");
+ }
+
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/background/ImageDetailPane.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/background/ImageDetailPane.java
new file mode 100644
index 000000000..0a605d4e5
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/background/ImageDetailPane.java
@@ -0,0 +1,215 @@
+package com.fr.design.mainframe.predefined.ui.detail.background;
+
+import com.fr.base.Style;
+import com.fr.base.background.ImageBackground;
+import com.fr.base.background.ImageFileBackground;
+import com.fr.design.designer.IntervalConstants;
+import com.fr.design.event.UIObserver;
+import com.fr.design.event.UIObserverListener;
+import com.fr.design.gui.frpane.ImgChooseWrapper;
+import com.fr.design.gui.ibutton.UIButton;
+import com.fr.design.gui.ibutton.UIRadioButton;
+import com.fr.design.gui.ilable.UILabel;
+import com.fr.design.layout.FRGUIPaneFactory;
+import com.fr.design.layout.TableLayoutHelper;
+import com.fr.design.style.background.image.ImageFileChooser;
+import com.fr.design.style.background.image.ImagePreviewPane;
+import com.fr.general.Background;
+import com.fr.stable.Constants;
+
+import javax.swing.BorderFactory;
+import javax.swing.ButtonGroup;
+import javax.swing.JPanel;
+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.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+/**
+ * Image background pane.
+ */
+public class ImageDetailPane extends AbstractBackgroundDetailPane implements UIObserver {
+ private UIObserverListener listener;
+ protected ImagePreviewPane previewPane = null;
+ private Style imageStyle = null;
+ private ChangeListener changeListener = null;
+ private ImageFileChooser imageFileChooser = null;
+
+ private UIRadioButton defaultRadioButton = null;
+ private UIRadioButton tiledRadioButton = null;
+ private UIRadioButton extendRadioButton = null;
+ private UIRadioButton adjustRadioButton = null;
+
+
+ public ImageDetailPane() {
+ this.setLayout(FRGUIPaneFactory.createBorderLayout());
+ this.add(initSelectFilePane(), BorderLayout.CENTER);
+ imageFileChooser = new ImageFileChooser();
+ imageFileChooser.setMultiSelectionEnabled(false);
+ previewPane = new ImagePreviewPane();
+ this.addChangeListener(new ChangeListener() {
+ @Override
+ public void stateChanged(ChangeEvent e) {
+ if (listener != null) {
+ listener.doChange();
+ }
+ }
+ });
+ }
+
+ public JPanel initSelectFilePane() {
+ JPanel selectFilePane = FRGUIPaneFactory.createBorderLayout_L_Pane();
+ selectFilePane.setBorder(BorderFactory.createEmptyBorder());
+ UIButton selectPictureButton = new UIButton(
+ com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Image_Select"));
+ selectPictureButton.setMnemonic('S');
+ selectPictureButton.addActionListener(selectPictureActionListener);
+ selectPictureButton.setPreferredSize(new Dimension(160, 20));
+ //布局
+ defaultRadioButton = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Style_Alignment_Layout_Default"));
+ tiledRadioButton = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Style_Alignment_Layout_Image_Titled"));
+ extendRadioButton = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Style_Alignment_Layout_Image_Extend"));
+ adjustRadioButton = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Style_Alignment_Layout_Image_Adjust"));
+
+ defaultRadioButton.addActionListener(layoutActionListener);
+ tiledRadioButton.addActionListener(layoutActionListener);
+ extendRadioButton.addActionListener(layoutActionListener);
+ adjustRadioButton.addActionListener(layoutActionListener);
+
+ JPanel jp = new JPanel(new GridLayout(4, 1, 15, 10));
+ for (UIRadioButton button : imageLayoutButtons()) {
+ jp.add(button);
+ }
+
+ ButtonGroup layoutBG = new ButtonGroup();
+ layoutBG.add(defaultRadioButton);
+ layoutBG.add(tiledRadioButton);
+ layoutBG.add(extendRadioButton);
+ layoutBG.add(adjustRadioButton);
+
+ defaultRadioButton.setSelected(true);
+
+ Component[][] components = new Component[][]{
+ new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Image")), selectPictureButton},
+ new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Fill_Mode")), jp}
+ };
+ JPanel centerPane = TableLayoutHelper.createGapTableLayoutPane(components, TableLayoutHelper.FILL_NONE,
+ IntervalConstants.INTERVAL_W4, IntervalConstants.INTERVAL_L1);
+ selectFilePane.add(centerPane, BorderLayout.CENTER);
+ return selectFilePane;
+ }
+
+ protected UIRadioButton[] imageLayoutButtons() {
+ return new UIRadioButton[]{
+ defaultRadioButton,
+ tiledRadioButton,
+ extendRadioButton,
+ adjustRadioButton
+ };
+ }
+
+ @Override
+ public boolean accept(Background background) {
+ return background instanceof ImageBackground;
+ }
+
+
+ /**
+ * Select picture.
+ */
+ ActionListener selectPictureActionListener = new ActionListener() {
+
+ public void actionPerformed(ActionEvent evt) {
+ int returnVal = imageFileChooser.showOpenDialog(ImageDetailPane.this);
+ setImageStyle();
+ ImgChooseWrapper.getInstance(previewPane, imageFileChooser, imageStyle, changeListener).dealWithImageFile(returnVal);
+ }
+ };
+
+ protected void setImageStyle() {
+ if (tiledRadioButton.isSelected()) {
+ imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_TILED);
+ } else if (adjustRadioButton.isSelected()) {
+ imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_ADJUST);
+ } else if (extendRadioButton.isSelected()) {
+ imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_EXTEND);
+ } else {
+ imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_CENTER);
+ }
+ }
+
+ ActionListener layoutActionListener = new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent evt) {
+ setImageStyle();
+ changeImageStyle();
+ }
+
+ private void changeImageStyle() {
+ previewPane.setImageStyle(ImageDetailPane.this.imageStyle);
+ previewPane.repaint();
+ }
+ };
+
+ @Override
+ public void populate(ImageBackground imageBackground) {
+ if (imageBackground.getLayout() == Constants.IMAGE_CENTER) {
+ defaultRadioButton.setSelected(true);
+ imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_CENTER);
+ } else if (imageBackground.getLayout() == Constants.IMAGE_EXTEND) {
+ extendRadioButton.setSelected(true);
+ imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_EXTEND);
+ } else if (imageBackground.getLayout() == Constants.IMAGE_ADJUST) {
+ adjustRadioButton.setSelected(true);
+ imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_ADJUST);
+ } else {
+ tiledRadioButton.setSelected(true);
+ imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_TILED);
+ }
+ previewPane.setImageStyle(ImageDetailPane.this.imageStyle);
+ if (imageBackground.getImage() != null) {
+ previewPane.setImageWithSuffix(imageBackground.getImageWithSuffix());
+ previewPane.setImage(imageBackground.getImage());
+ }
+
+ fireChagneListener();
+ }
+
+ @Override
+ public ImageBackground update() {
+ ImageBackground imageBackground = new ImageFileBackground(previewPane.getImageWithSuffix());
+ setImageStyle();
+ imageBackground.setLayout(imageStyle.getImageLayout());
+ return imageBackground;
+ }
+
+ @Override
+ public void addChangeListener(ChangeListener changeListener) {
+ this.changeListener = changeListener;
+ }
+
+ private void fireChagneListener() {
+ if (this.changeListener != null) {
+ ChangeEvent evt = new ChangeEvent(this);
+ this.changeListener.stateChanged(evt);
+ }
+ }
+
+ @Override
+ public void registerChangeListener(UIObserverListener listener) {
+ this.listener = listener;
+ }
+
+
+ @Override
+ public String title4PopupWindow() {
+ return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Image");
+ }
+
+
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/background/PatternDetailPane.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/background/PatternDetailPane.java
new file mode 100644
index 000000000..05667021c
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/background/PatternDetailPane.java
@@ -0,0 +1,119 @@
+package com.fr.design.mainframe.predefined.ui.detail.background;
+
+import com.fr.base.background.PatternBackground;
+import com.fr.design.designer.IntervalConstants;
+import com.fr.design.event.UIObserver;
+import com.fr.design.event.UIObserverListener;
+import com.fr.design.gui.ilable.UILabel;
+import com.fr.design.layout.FRGUIPaneFactory;
+import com.fr.design.layout.TableLayoutHelper;
+import com.fr.design.style.background.impl.PatternBackgroundPane;
+import com.fr.design.style.color.ColorSelectBox;
+import com.fr.general.Background;
+import com.fr.log.FineLoggerFactory;
+
+import javax.swing.BorderFactory;
+import javax.swing.JPanel;
+import javax.swing.SwingConstants;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.GridLayout;
+import java.awt.LayoutManager;
+
+/**
+ * Created by kerry on 2020-08-31
+ */
+public class PatternDetailPane extends AbstractBackgroundDetailPane implements UIObserver {
+
+ private UIObserverListener listener;
+ private PatternNewBackgroundPane patternNewBackgroundPane;
+
+ public PatternDetailPane() {
+ this.setLayout(FRGUIPaneFactory.createBorderLayout());
+ patternNewBackgroundPane = new PatternNewBackgroundPane(6);
+ this.add(patternNewBackgroundPane, BorderLayout.CENTER);
+ }
+
+ @Override
+ public void registerChangeListener(UIObserverListener listener) {
+ this.listener = listener;
+ }
+
+ @Override
+ public void populate(PatternBackground background) {
+ this.patternNewBackgroundPane.populate(background);
+ }
+
+ @Override
+ public PatternBackground update() {
+ try {
+ return (PatternBackground) this.patternNewBackgroundPane.update();
+ } catch (Exception e) {
+ FineLoggerFactory.getLogger().error(e.getMessage(), e);
+ }
+ return null;
+ }
+ @Override
+ public String title4PopupWindow() {
+ return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Pattern");
+ }
+
+
+ @Override
+ public boolean accept(Background background) {
+ return background instanceof PatternBackground;
+ }
+
+
+ @Override
+ public boolean shouldResponseChangeListener() {
+ return true;
+ }
+
+ class PatternNewBackgroundPane extends PatternBackgroundPane {
+ private PatternNewBackgroundPane(int nColumn) {
+ super(nColumn);
+ }
+
+ protected LayoutManager layoutOfTypePane(int nColumn) {
+ return new GridLayout(0, nColumn, 2, 2);
+ }
+
+ protected void initComponents(int nColumn) {
+ this.setLayout(FRGUIPaneFactory.createBorderLayout());
+ this.setBorder(BorderFactory.createEmptyBorder());
+ JPanel jPanel = new JPanel();
+ jPanel.setLayout(layoutOfTypePane(nColumn));
+ setChildrenOfTypePane(jPanel);
+
+ foregroundColorPane = new ColorSelectBox(80);
+ backgroundColorPane = new ColorSelectBox(80);
+ foregroundColorPane.setSelectObject(Color.lightGray);
+ backgroundColorPane.setSelectObject(Color.black);
+ UILabel label = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Pattern"));
+ label.setVerticalAlignment(SwingConstants.TOP);
+ Component[][] components = new Component[][]{
+ new Component[]{label, jPanel},
+ new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_ForeBackground_Color")), foregroundColorPane},
+ new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Pattern_Color")), backgroundColorPane}
+ };
+ JPanel centerPane = TableLayoutHelper.createGapTableLayoutPane(components, TableLayoutHelper.FILL_LASTCOLUMN,
+ IntervalConstants.INTERVAL_W4, IntervalConstants.INTERVAL_L1);
+ JPanel jPanel1 = FRGUIPaneFactory.createLeftFlowZeroGapBorderPane();
+ jPanel1.add(centerPane);
+ jPanel1.setBorder(BorderFactory.createEmptyBorder());
+ this.add(jPanel1, BorderLayout.NORTH);
+ this.addChangeListener(new ChangeListener() {
+ @Override
+ public void stateChanged(ChangeEvent e) {
+ if (listener != null) {
+ listener.doChange();
+ }
+ }
+ });
+ }
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/background/TextureDetailObservePane.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/background/TextureDetailObservePane.java
new file mode 100644
index 000000000..189b811d9
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/background/TextureDetailObservePane.java
@@ -0,0 +1,97 @@
+package com.fr.design.mainframe.predefined.ui.detail.background;
+
+import com.fr.base.background.TextureBackground;
+import com.fr.design.event.UIObserver;
+import com.fr.design.event.UIObserverListener;
+import com.fr.design.gui.ilable.UILabel;
+import com.fr.design.layout.FRGUIPaneFactory;
+import com.fr.design.layout.TableLayoutHelper;
+import com.fr.design.style.background.texture.TextureDetailPane;
+import com.fr.general.Background;
+import com.fr.log.FineLoggerFactory;
+
+import javax.swing.BorderFactory;
+import javax.swing.JPanel;
+import javax.swing.SwingConstants;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+
+/**
+ * Created by kerry on 2020-09-02
+ */
+public class TextureDetailObservePane extends AbstractBackgroundDetailPane implements UIObserver {
+ private TextureDetailPane detailPane;
+
+ private UIObserverListener listener;
+
+ public TextureDetailObservePane() {
+
+ this.setLayout(FRGUIPaneFactory.createBorderLayout());
+ detailPane = TextureDetailPane.createMiniTextureDetailPane(6);
+
+ detailPane.setPreferredSize(new Dimension(160, 108));
+ UILabel label = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture"));
+ label.setPreferredSize(new Dimension(24, 108));
+ label.setVerticalAlignment(SwingConstants.TOP);
+ JPanel jPanel = TableLayoutHelper.createGapTableLayoutPane(
+ new Component[][]{new Component[]{label, detailPane}}, TableLayoutHelper.FILL_LASTCOLUMN, 33, 5);
+ jPanel.setBorder(BorderFactory.createEmptyBorder(5, 0, 5, 10));
+
+
+ detailPane.addChangeListener(new ChangeListener() {
+ @Override
+ public void stateChanged(ChangeEvent e) {
+ if (listener != null) {
+ listener.doChange();
+ }
+ }
+ });
+ this.add(jPanel, BorderLayout.CENTER);
+ }
+
+ @Override
+ public void registerChangeListener(UIObserverListener listener) {
+ this.listener = listener;
+
+ }
+
+ @Override
+ public boolean shouldResponseChangeListener() {
+ return true;
+ }
+
+ @Override
+ public void populate(TextureBackground background) {
+ this.detailPane.populate(background);
+ }
+
+ @Override
+ public TextureBackground update() {
+ try {
+ return (TextureBackground) this.detailPane.update();
+ } catch (Exception e) {
+ FineLoggerFactory.getLogger().error(e.getMessage(), e);
+ }
+ return null;
+ }
+
+
+ @Override
+ public String title4PopupWindow() {
+ return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture");
+ }
+
+ @Override
+ public boolean accept(Background background) {
+ return background instanceof TextureBackground;
+ }
+
+
+ @Override
+ public void addChangeListener(ChangeListener changeListener) {
+
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/cell/CustomPredefinedStylePane.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/cell/CustomPredefinedStylePane.java
new file mode 100644
index 000000000..8da5c61ce
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/cell/CustomPredefinedStylePane.java
@@ -0,0 +1,211 @@
+package com.fr.design.mainframe.predefined.ui.detail.cell;
+
+import com.fr.base.ScreenResolution;
+import com.fr.base.Style;
+import com.fr.config.predefined.PredefinedCellStyle;
+import com.fr.design.constants.UIConstants;
+import com.fr.design.dialog.AttrScrollPane;
+import com.fr.design.dialog.BasicPane;
+import com.fr.design.dialog.BasicScrollPane;
+import com.fr.design.dialog.MultiTabPane;
+import com.fr.design.gui.frpane.AbstractAttrNoScrollPane;
+import com.fr.design.gui.frpane.AttributeChangeListener;
+import com.fr.design.gui.style.AbstractBasicStylePane;
+import com.fr.design.gui.style.AlignmentPane;
+import com.fr.design.gui.style.BorderPane;
+import com.fr.design.gui.style.FormatPane;
+import com.fr.design.layout.FRGUIPaneFactory;
+import com.fr.design.utils.gui.GUICoreUtils;
+
+import javax.swing.BorderFactory;
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.GridLayout;
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * 哎,复杂的原型图导致复杂的画法。非我所愿也
+ *
+ * @author zhou
+ * @since 2012-5-24上午10:36:10
+ */
+public class CustomPredefinedStylePane extends MultiTabPane {
+ private PredefinedCellStyle cellStyle;
+ private PreviewArea previewArea;
+ private boolean populating;
+
+
+ public CustomPredefinedStylePane() {
+ super();
+ tabPane.setOneLineTab(true);
+ tabPane.setDrawLine(false);
+ tabPane.setBorder(BorderFactory.createLineBorder(UIConstants.SHADOW_GREY));
+ tabPane.setLayout(new GridLayout(1, 3, 0, 0));
+ }
+
+ /**
+ * @return
+ */
+ public String title4PopupWindow() {
+ return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Custom_Style");
+ }
+
+
+ /**
+ *
+ */
+ public void reset() {
+ populateBean(null);
+ }
+
+ @Override
+ /**
+ *
+ */
+ public void populateBean(PredefinedCellStyle ob) {
+ this.populating = true;
+ this.cellStyle = ob;
+ for (int i = 0; i < paneList.size(); i++) {
+ ((AbstractBasicStylePane) paneList.get(i)).populateBean(ob.getStyle());
+ previewArea.preview(ob.getStyle());
+ }
+ this.populating = false;
+ }
+
+ @Override
+ /**
+ *
+ */
+ public PredefinedCellStyle updateBean() {
+ AbstractBasicStylePane basicStylePane = (AbstractBasicStylePane) paneList.get(tabPane.getSelectedIndex());
+ this.cellStyle.setStyle(basicStylePane.update(this.cellStyle.getStyle()));
+ return this.cellStyle;
+ }
+
+
+ /**
+ * @param ob
+ * @return
+ */
+ public boolean accept(Object ob) {
+ return ob instanceof PredefinedCellStyle;
+ }
+
+ @Override
+ protected List initPaneList() {
+ paneList = new ArrayList();
+ paneList.add(new FormatPane());
+ paneList.add(new BorderPane());
+ paneList.add(new AlignmentPane());
+ return paneList;
+ }
+
+ protected void initLayout() {
+ this.setLayout(FRGUIPaneFactory.createBorderLayout());
+
+ JPanel jPanel = new JPanel();
+ jPanel.setLayout(new BorderLayout(0, 4));
+
+ JPanel previewPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
+ previewArea = new PreviewArea();
+ previewPane.setBorder(GUICoreUtils.createTitledBorder(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preview"), null));
+ previewPane.add(previewArea, BorderLayout.CENTER);
+
+ this.add(previewPane, BorderLayout.NORTH);
+
+ this.add(jPanel, BorderLayout.CENTER);
+ jPanel.add(tabPane, BorderLayout.NORTH);
+ JPanel attrListenerPane = new AbstractAttrNoScrollPane() {
+
+ @Override
+ protected void initContentPane() {
+ leftContentPane = createContentPane();
+ this.add(leftContentPane, BorderLayout.CENTER);
+ }
+
+ @Override
+ protected JPanel createContentPane() {
+ this.addAttributeChangeListener(new AttributeChangeListener() {
+ @Override
+ public void attributeChange() {
+ if (populating) {
+ return;
+ }
+ PredefinedCellStyle cellStyle = updateBean();
+ if (cellStyle != null) {
+ previewArea.preview(cellStyle.getStyle());
+ }
+ }
+ });
+ BasicScrollPane basicScrollPane = new AttrScrollPane() {
+ @Override
+ protected JPanel createContentPane() {
+ return centerPane;
+ }
+ };
+ return basicScrollPane;
+ }
+ };
+ jPanel.add(attrListenerPane, BorderLayout.CENTER);
+ }
+
+ @Override
+ /**
+ *
+ */
+ public void updateBean(PredefinedCellStyle ob) {
+ return;
+ }
+
+
+
+
+ /**
+ * 预览Style的面板
+ *
+ * @author richer
+ */
+ private static class PreviewArea extends JComponent {
+
+ private String paintText = "Report";
+ private Style style = Style.DEFAULT_STYLE;
+
+ public PreviewArea() {
+ setPreferredSize(new Dimension(40, 30));
+ }
+
+ public void preview(Style style) {
+ this.style = style;
+ repaint();
+ }
+
+ @Override
+ public void paintComponent(Graphics g) {
+ Graphics2D g2d = (Graphics2D) g;
+ int resolution = ScreenResolution.getScreenResolution();
+
+ if (style == Style.DEFAULT_STYLE) {
+ // 如果是默认的style,就只写"Report"上去
+ Style.paintContent(g2d, paintText, style, getWidth() - 3, getHeight() - 3, resolution);
+ return;
+ }
+
+ Style.paintBackground(g2d, style, getWidth() - 3, getHeight() - 3);
+
+ Style.paintContent(g2d, paintText, style, getWidth() - 3, getHeight() - 3, resolution);
+
+ Style.paintBorder(g2d, style, getWidth() - 3, getHeight() - 3);
+ }
+
+ @Override
+ public Dimension getMinimumSize() {
+ return getPreferredSize();
+ }
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/chart/AbstractChartStylePane.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/chart/AbstractChartStylePane.java
new file mode 100644
index 000000000..2fd47d6b2
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/chart/AbstractChartStylePane.java
@@ -0,0 +1,49 @@
+package com.fr.design.mainframe.predefined.ui.detail.chart;
+
+import com.fr.config.predefined.PredefinedChartStyle;
+import com.fr.design.constants.LayoutConstants;
+import com.fr.design.dialog.BasicPane;
+import com.fr.design.gui.icontainer.UIScrollPane;
+import com.fr.design.layout.FRGUIPaneFactory;
+import com.fr.design.layout.TableLayout;
+import com.fr.design.layout.TableLayoutHelper;
+
+import javax.swing.BorderFactory;
+import javax.swing.JPanel;
+import java.awt.BorderLayout;
+import java.awt.Component;
+
+/**
+ * @author Bjorn
+ * @version 10.0
+ * Created by Bjorn on 2020-09-17
+ */
+public abstract class AbstractChartStylePane extends BasicPane {
+
+ public AbstractChartStylePane() {
+ initComponents();
+ initPane();
+ }
+
+ protected abstract void initComponents();
+
+ protected void initPane() {
+ this.setLayout(FRGUIPaneFactory.createBorderLayout());
+ double e = 155;
+ double p = TableLayout.PREFERRED;
+ double[] columnSize = {p, e};
+ JPanel gapTableLayoutPane = TableLayoutHelper.createGapTableLayoutPane(getComponent(), getRows(p), columnSize, 20, LayoutConstants.VGAP_LARGE);
+ gapTableLayoutPane.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 0));
+ UIScrollPane rightTopPane = new UIScrollPane(gapTableLayoutPane);
+ rightTopPane.setBorder(BorderFactory.createEmptyBorder());
+ this.add(rightTopPane, BorderLayout.CENTER);
+ }
+
+ protected abstract Component[][] getComponent();
+
+ protected abstract double[] getRows(double p);
+
+ public abstract void populate(PredefinedChartStyle chartStyle);
+
+ public abstract void update(PredefinedChartStyle chartStyle);
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/chart/ChartAxisStylePane.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/chart/ChartAxisStylePane.java
new file mode 100644
index 000000000..4c6fc16dd
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/chart/ChartAxisStylePane.java
@@ -0,0 +1,69 @@
+package com.fr.design.mainframe.predefined.ui.detail.chart;
+
+import com.fr.config.predefined.PredefinedChartStyle;
+import com.fr.design.gui.ilable.UILabel;
+import com.fr.design.i18n.Toolkit;
+import com.fr.design.style.color.ColorSelectBox;
+
+import java.awt.Component;
+
+/**
+ * @author Bjorn
+ * @version 10.0
+ * Created by Bjorn on 2020-09-16
+ */
+public class ChartAxisStylePane extends AbstractChartStylePane {
+
+ //轴标题字体样式
+ private ChartFontPane titleFontPane;
+
+ //轴标签字体样式
+ private ChartFontPane labelFontPane;
+
+ //轴线颜色
+ private ColorSelectBox axisLineColor;
+
+ protected void initComponents() {
+ titleFontPane = new ChartFontPane() {
+ public String getUILabelText() {
+ return Toolkit.i18nText("Fine-Design_Chart_Axis_Title_Character");
+ }
+ };
+ labelFontPane = new ChartFontPane() {
+ public String getUILabelText() {
+ return Toolkit.i18nText("Fine-Design_Chart_Axis_Label_Character");
+ }
+ };
+ axisLineColor = new ColorSelectBox(100);
+ }
+
+ protected Component[][] getComponent() {
+ return new Component[][]{
+ new Component[]{titleFontPane, null},
+ new Component[]{labelFontPane, null},
+ new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Axis_Line_Color")), axisLineColor}
+ };
+ }
+
+ protected double[] getRows(double p) {
+ return new double[]{p, p, p};
+ }
+
+ @Override
+ protected String title4PopupWindow() {
+ return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Axis");
+ }
+
+ public void populate(PredefinedChartStyle chartStyle) {
+ titleFontPane.populate(chartStyle.getAxisTitleFont());
+ labelFontPane.populate(chartStyle.getAxisLabelFont());
+ axisLineColor.setSelectObject(chartStyle.getAxisLineColor());
+ }
+
+
+ public void update(PredefinedChartStyle chartStyle) {
+ chartStyle.setAxisTitleFont(titleFontPane.update());
+ chartStyle.setAxisLabelFont(labelFontPane.update());
+ chartStyle.setAxisLineColor(axisLineColor.getSelectObject());
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/chart/ChartBackgroundStylePane.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/chart/ChartBackgroundStylePane.java
new file mode 100644
index 000000000..0cb602eea
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/chart/ChartBackgroundStylePane.java
@@ -0,0 +1,113 @@
+package com.fr.design.mainframe.predefined.ui.detail.chart;
+
+import com.fr.base.background.ImageBackground;
+import com.fr.config.predefined.PredefinedChartStyle;
+import com.fr.design.gui.icombobox.UIComboBox;
+import com.fr.design.gui.ilable.UILabel;
+import com.fr.design.i18n.Toolkit;
+import com.fr.design.mainframe.backgroundpane.BackgroundQuickPane;
+import com.fr.design.mainframe.backgroundpane.ColorBackgroundQuickPane;
+import com.fr.design.mainframe.backgroundpane.ImageBackgroundQuickPane;
+import com.fr.design.mainframe.backgroundpane.NullBackgroundQuickPane;
+import com.fr.design.mainframe.backgroundpane.VanChartGradientPane;
+import com.fr.design.style.color.ColorSelectBox;
+import com.fr.general.Background;
+import com.fr.stable.Constants;
+
+import javax.swing.JPanel;
+import java.util.ArrayList;
+import java.util.List;
+import java.awt.CardLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+
+/**
+ * @author Bjorn
+ * @version 10.0
+ * Created by Bjorn on 2020-09-17
+ */
+public class ChartBackgroundStylePane extends AbstractChartStylePane {
+
+ private UIComboBox typeComboBox;
+ private List paneList;
+ private JPanel centerPane;
+ //网格线颜色
+ private ColorSelectBox mainGridColor;
+
+ protected void initComponents() {
+ mainGridColor = new ColorSelectBox(100);
+
+ typeComboBox = new UIComboBox();
+ final CardLayout cardlayout = new CardLayout();
+ initList();
+
+ centerPane = new JPanel(cardlayout) {
+ @Override
+ public Dimension getPreferredSize() {// AUGUST:使用当前面板的的高度
+ int index = typeComboBox.getSelectedIndex();
+ return new Dimension(super.getPreferredSize().width, paneList.get(index).getPreferredSize().height);
+ }
+ };
+ for (int i = 0; i < paneList.size(); i++) {
+ BackgroundQuickPane pane = paneList.get(i);
+ typeComboBox.addItem(pane.title4PopupWindow());
+ centerPane.add(pane, pane.title4PopupWindow());
+ }
+
+ typeComboBox.addItemListener(new ItemListener() {
+ @Override
+ public void itemStateChanged(ItemEvent e) {
+ cardlayout.show(centerPane, (String) typeComboBox.getSelectedItem());
+ }
+ });
+ }
+
+ protected Component[][] getComponent() {
+ return new Component[][]{
+ new Component[]{null, null},
+ new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Area_Background_Color")), typeComboBox},
+ new Component[]{null, centerPane},
+ new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Grid_Line_Color")), mainGridColor}
+ };
+ }
+
+ protected double[] getRows(double p) {
+ return new double[]{p, p, p, p};
+ }
+
+ private void initList() {
+ paneList = new ArrayList<>();
+ paneList.add(new NullBackgroundQuickPane());
+ paneList.add(new ColorBackgroundQuickPane());
+ paneList.add(new ImageBackgroundQuickPane(false));
+ paneList.add(new VanChartGradientPane());
+ }
+
+ @Override
+ protected String title4PopupWindow() {
+ return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Background");
+ }
+
+ public void populate(PredefinedChartStyle chartStyle) {
+ Background background = chartStyle.getChartBackground();
+ for (int i = 0; i < paneList.size(); i++) {
+ BackgroundQuickPane pane = paneList.get(i);
+ if (pane.accept(background)) {
+ pane.populateBean(background);
+ typeComboBox.setSelectedIndex(i);
+ break;
+ }
+ }
+ mainGridColor.setSelectObject(chartStyle.getGridMainLineColor());
+ }
+
+ public void update(PredefinedChartStyle chartStyle) {
+ chartStyle.setChartBackground(paneList.get(typeComboBox.getSelectedIndex()).updateBean());
+ if (chartStyle.getChartBackground() instanceof ImageBackground) {
+ ((ImageBackground) chartStyle.getChartBackground()).setLayout(Constants.IMAGE_EXTEND);
+ }
+ chartStyle.setGridMainLineColor(mainGridColor.getSelectObject());
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/chart/ChartDataSheetStylePane.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/chart/ChartDataSheetStylePane.java
new file mode 100644
index 000000000..2da8ee35f
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/chart/ChartDataSheetStylePane.java
@@ -0,0 +1,58 @@
+package com.fr.design.mainframe.predefined.ui.detail.chart;
+
+import com.fr.config.predefined.PredefinedChartStyle;
+import com.fr.design.gui.ilable.UILabel;
+import com.fr.design.i18n.Toolkit;
+import com.fr.design.style.color.ColorSelectBox;
+
+import java.awt.Component;
+
+/**
+ * @author Bjorn
+ * @version 10.0
+ * Created by Bjorn on 2020-09-17
+ */
+public class ChartDataSheetStylePane extends AbstractChartStylePane {
+
+ //字体样式
+ private ChartFontPane fontPane;
+
+ //边框颜色
+ private ColorSelectBox borderColor;
+
+ protected void initComponents() {
+ fontPane = new ChartFontPane() {
+ public String getUILabelText() {
+ return Toolkit.i18nText("Fine-Design_Chart_DataSheet_Character");
+ }
+ };
+ borderColor = new ColorSelectBox(100);
+ }
+
+ protected Component[][] getComponent() {
+ return new Component[][]{
+ new Component[]{fontPane, null},
+ new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Border_Color")), borderColor}
+ };
+ }
+
+ protected double[] getRows(double p) {
+ return new double[]{p, p, p};
+ }
+
+ @Override
+ protected String title4PopupWindow() {
+ return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Data_Sheet");
+ }
+
+ public void populate(PredefinedChartStyle chartStyle) {
+ fontPane.populate(chartStyle.getDataSheetFont());
+ borderColor.setSelectObject(chartStyle.getDataSheetBorderColor());
+ }
+
+
+ public void update(PredefinedChartStyle chartStyle) {
+ chartStyle.setDataSheetFont(fontPane.update());
+ chartStyle.setDataSheetBorderColor(borderColor.getSelectObject());
+ }
+}
\ No newline at end of file
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/chart/ChartFontPane.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/chart/ChartFontPane.java
new file mode 100644
index 000000000..93c0f8a6b
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/chart/ChartFontPane.java
@@ -0,0 +1,160 @@
+package com.fr.design.mainframe.predefined.ui.detail.chart;
+
+import com.fr.base.BaseUtils;
+import com.fr.base.FRContext;
+import com.fr.base.Utils;
+import com.fr.design.constants.LayoutConstants;
+import com.fr.design.dialog.BasicPane;
+import com.fr.design.event.UIObserverListener;
+import com.fr.design.gui.ibutton.UIColorButton;
+import com.fr.design.gui.ibutton.UIToggleButton;
+import com.fr.design.gui.icombobox.UIComboBox;
+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.utils.gui.GUICoreUtils;
+import com.fr.general.FRFont;
+import com.fr.general.GeneralUtils;
+
+import javax.swing.JPanel;
+import javax.swing.SwingConstants;
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.FlowLayout;
+import java.awt.Font;
+
+/**
+ * @author Bjorn
+ * @version 10.0
+ * Created by Bjorn on 2020-09-16
+ */
+public class ChartFontPane extends BasicPane {
+
+ public static final int FONT_START = 6;
+ public static final int FONT_END = 72;
+ private UIComboBox fontNameComboBox;
+ private UIComboBox fontSizeComboBox;
+ private UIToggleButton bold;
+ private UIToggleButton italic;
+ private UIColorButton fontColor;
+ private static Integer[] FONT_SIZES = new Integer[FONT_END - FONT_START + 1];
+
+ static {
+ for (int i = FONT_START; i <= FONT_END; i++) {
+ FONT_SIZES[i - FONT_START] = i;
+ }
+ }
+
+ public ChartFontPane() {
+ initState();
+ initComponents();
+ }
+
+ private void initState() {
+ fontNameComboBox = new UIComboBox(Utils.getAvailableFontFamilyNames4Report());
+ fontSizeComboBox = new UIComboBox(FONT_SIZES);
+ bold = new UIToggleButton(BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/bold.png"));
+ italic = new UIToggleButton(BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/italic.png"));
+ fontColor = new UIColorButton();
+ }
+
+ protected void initComponents() {
+ Component[] components = new Component[]{
+ fontColor, italic, bold
+ };
+ JPanel buttonPane = new JPanel(new BorderLayout());
+ buttonPane.add(fontSizeComboBox, BorderLayout.CENTER);
+ buttonPane.add(GUICoreUtils.createFlowPane(components, FlowLayout.LEFT, LayoutConstants.HGAP_LARGE), BorderLayout.EAST);
+
+ this.setLayout(new BorderLayout());
+ this.add(getContentPane(buttonPane), BorderLayout.CENTER);
+
+ populate(FRContext.getDefaultValues().getFRFont());
+ }
+
+ protected JPanel getContentPane(JPanel buttonPane) {
+ double e = 155;
+ double p = TableLayout.PREFERRED;
+ double[] rows = {p, p, p};
+ double[] columnSize = {p, e};
+ UILabel text = new UILabel(getUILabelText(), SwingConstants.LEFT);
+ Component[][] components = {
+ new Component[]{null, null},
+ new Component[]{text, fontNameComboBox},
+ new Component[]{null, buttonPane}
+ };
+
+ return TableLayoutHelper.createGapTableLayoutPane(components, rows, columnSize, 20, LayoutConstants.VGAP_LARGE);
+ }
+
+ public String getUILabelText() {
+ return Toolkit.i18nText("Fine-Design_Chart_Character");
+ }
+
+ public String title4PopupWindow() {
+ return null;
+ }
+
+ public void populate(FRFont frFont) {
+ UIObserverListener listener = fontNameComboBox == null ? null : fontNameComboBox.getUiObserverListener();
+ removeAllComboBoxListener();
+
+ if (frFont != null) {
+ fontNameComboBox.setSelectedItem(frFont.getFamily());
+ bold.setSelected(frFont.isBold());
+ italic.setSelected(frFont.isItalic());
+ populateFontSize(frFont);
+ if (fontColor != null) {
+ fontColor.setColor(frFont.getForeground());
+ }
+ }
+
+ //更新结束后,注册监听器
+ registerAllComboBoxListener(listener);
+ }
+
+ private void populateFontSize(FRFont frFont) {
+ if (fontSizeComboBox != null) {
+ fontSizeComboBox.setSelectedItem(frFont.getSize());
+ }
+ }
+
+ private void removeAllComboBoxListener() {
+ fontNameComboBox.removeChangeListener();
+ fontSizeComboBox.removeChangeListener();
+ }
+
+ private void registerAllComboBoxListener(UIObserverListener listener) {
+ fontNameComboBox.registerChangeListener(listener);
+ fontSizeComboBox.registerChangeListener(listener);
+ }
+
+ /**
+ * 更新字
+ *
+ * @return 更新字
+ */
+ public FRFont update() {
+ String name = GeneralUtils.objectToString(fontNameComboBox.getSelectedItem());
+
+ return FRFont.getInstance(name, updateFontStyle(), updateFontSize(), fontColor.getColor());
+ }
+
+ private int updateFontStyle() {
+ int style = Font.PLAIN;
+ if (bold.isSelected() && !italic.isSelected()) {
+ style = Font.BOLD;
+ } else if (!bold.isSelected() && italic.isSelected()) {
+ style = Font.ITALIC;
+ } else if (bold.isSelected() && italic.isSelected()) {
+ style = 3;
+ }
+
+ return style;
+ }
+
+ private float updateFontSize() {
+ return Float.parseFloat(GeneralUtils.objectToString(fontSizeComboBox.getSelectedItem()));
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/chart/ChartLabelStylePane.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/chart/ChartLabelStylePane.java
new file mode 100644
index 000000000..b51535b82
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/chart/ChartLabelStylePane.java
@@ -0,0 +1,78 @@
+package com.fr.design.mainframe.predefined.ui.detail.chart;
+
+import com.fr.config.predefined.PredefinedChartStyle;
+import com.fr.design.gui.ibutton.UIButtonGroup;
+import com.fr.design.gui.ilable.UILabel;
+import com.fr.design.i18n.Toolkit;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+/**
+ * @author Bjorn
+ * @version 10.0
+ * Created by Bjorn on 2020-09-16
+ */
+public class ChartLabelStylePane extends AbstractChartStylePane {
+
+ private UIButtonGroup autoButton;
+ //字体样式
+ private ChartFontPane chartFontPane;
+
+ protected void initComponents() {
+ autoButton = new UIButtonGroup<>(new String[]{Toolkit.i18nText("Fine-Design_Chart_Auto"),
+ Toolkit.i18nText("Fine-Design_Chart_Custom")});
+ chartFontPane = new ChartFontPane() {
+ public String getUILabelText() {
+ return Toolkit.i18nText("Fine-Design_Chart_Label_Character");
+ }
+ };
+ initListener();
+ }
+
+ protected Component[][] getComponent() {
+ return new Component[][]{
+ new Component[]{null, null},
+ new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Style_Setting")), autoButton},
+ new Component[]{chartFontPane, null}
+ };
+ }
+
+ protected double[] getRows(double p) {
+ return new double[]{p, p, p};
+ }
+
+ private void initListener() {
+ autoButton.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ checkPreButton();
+ }
+ });
+ }
+
+ private void checkPreButton() {
+ chartFontPane.setVisible(autoButton.getSelectedIndex() == 1);
+ chartFontPane.setPreferredSize(autoButton.getSelectedIndex() == 1 ? new Dimension(0, 60) : new Dimension(0, 0));
+ }
+
+
+ @Override
+ protected String title4PopupWindow() {
+ return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Label");
+ }
+
+ public void populate(PredefinedChartStyle chartStyle) {
+ autoButton.setSelectedIndex(chartStyle.isAutoLabelFont() ? 0 : 1);
+ chartFontPane.populate(chartStyle.getLabelFont());
+ checkPreButton();
+ }
+
+
+ public void update(PredefinedChartStyle chartStyle) {
+ chartStyle.setAutoLabelFont(autoButton.getSelectedIndex() == 0);
+ chartStyle.setLabelFont(chartFontPane.update());
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/chart/ChartLegendStylePane.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/chart/ChartLegendStylePane.java
new file mode 100644
index 000000000..c956dfcfd
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/chart/ChartLegendStylePane.java
@@ -0,0 +1,49 @@
+package com.fr.design.mainframe.predefined.ui.detail.chart;
+
+import com.fr.config.predefined.PredefinedChartStyle;
+import com.fr.design.i18n.Toolkit;
+
+import java.awt.Component;
+
+/**
+ * @author Bjorn
+ * @version 10.0
+ * Created by Bjorn on 2020-09-16
+ */
+public class ChartLegendStylePane extends AbstractChartStylePane {
+
+ //字体样式
+ private ChartFontPane chartFontPane;
+
+ protected void initComponents() {
+ chartFontPane = new ChartFontPane() {
+ public String getUILabelText() {
+ return Toolkit.i18nText("Fine-Design_Chart_Legend_Character");
+ }
+ };
+ }
+
+ protected Component[][] getComponent() {
+ return new Component[][]{
+ new Component[]{chartFontPane, null}
+ };
+ }
+
+ protected double[] getRows(double p) {
+ return new double[]{p};
+ }
+
+ @Override
+ protected String title4PopupWindow() {
+ return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Legend");
+ }
+
+ public void populate(PredefinedChartStyle chartStyle) {
+ chartFontPane.populate(chartStyle.getLegendFont());
+ }
+
+
+ public void update(PredefinedChartStyle chartStyle) {
+ chartStyle.setLegendFont(chartFontPane.update());
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/chart/ChartTitleStylePane.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/chart/ChartTitleStylePane.java
new file mode 100644
index 000000000..d5bc56cd9
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/chart/ChartTitleStylePane.java
@@ -0,0 +1,49 @@
+package com.fr.design.mainframe.predefined.ui.detail.chart;
+
+import com.fr.config.predefined.PredefinedChartStyle;
+import com.fr.design.i18n.Toolkit;
+
+import java.awt.Component;
+
+/**
+ * @author Bjorn
+ * @version 10.0
+ * Created by Bjorn on 2020-09-16
+ */
+public class ChartTitleStylePane extends AbstractChartStylePane {
+
+ //字体样式
+ private ChartFontPane chartFontPane;
+
+ protected void initComponents() {
+ chartFontPane = new ChartFontPane() {
+ public String getUILabelText() {
+ return Toolkit.i18nText("Fine-Design_Chart_Title_Character");
+ }
+ };
+ }
+
+ protected Component[][] getComponent() {
+ return new Component[][]{
+ new Component[]{chartFontPane, null}
+ };
+ }
+
+ protected double[] getRows(double p) {
+ return new double[]{p};
+ }
+
+ @Override
+ protected String title4PopupWindow() {
+ return Toolkit.i18nText("Fine-Design_Report_Title");
+ }
+
+ public void populate(PredefinedChartStyle chartStyle) {
+ chartFontPane.populate(chartStyle.getTitleFont());
+ }
+
+
+ public void update(PredefinedChartStyle chartStyle) {
+ chartStyle.setTitleFont(chartFontPane.update());
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/component/ComponentFrameStylePane.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/component/ComponentFrameStylePane.java
new file mode 100644
index 000000000..e5d411b30
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/component/ComponentFrameStylePane.java
@@ -0,0 +1,153 @@
+package com.fr.design.mainframe.predefined.ui.detail.component;
+
+import com.fr.base.GraphHelper;
+import com.fr.base.Utils;
+import com.fr.config.predefined.PredefinedComponentStyle;
+import com.fr.design.gui.frpane.UINumberDragPane;
+import com.fr.design.gui.ibutton.UIButton;
+import com.fr.design.gui.ibutton.UIButtonUI;
+import com.fr.design.gui.ibutton.UIColorButton;
+import com.fr.design.gui.icombobox.LineComboBox;
+import com.fr.design.gui.icombobox.UIComboBox;
+import com.fr.design.gui.icontainer.UIScrollPane;
+import com.fr.design.gui.ilable.UILabel;
+import com.fr.design.gui.ispinner.UISpinner;
+import com.fr.design.gui.style.BackgroundSpecialPane;
+import com.fr.design.layout.FRGUIPaneFactory;
+import com.fr.design.layout.TableLayout;
+import com.fr.design.layout.TableLayoutHelper;
+import com.fr.design.mainframe.backgroundpane.GradientBackgroundQuickPane;
+import com.fr.general.act.BorderPacker;
+import com.fr.stable.Constants;
+
+import javax.swing.BorderFactory;
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.geom.RoundRectangle2D;
+
+/**
+ * Created by kerry on 2020-09-01
+ */
+public class ComponentFrameStylePane extends ComponentStylePane {
+ private final static String[] BORDER_STYLE = new String[]{com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Widget_Style_Common"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Widget_Style_Shadow")};
+ private static final double ALPHA_MAX_NUMBER = 100;
+ private final static int[] BORDER_LINE_STYLE_ARRAY = new int[]{
+ Constants.LINE_NONE,
+ Constants.LINE_THIN, //1px
+ Constants.LINE_MEDIUM, //2px
+ Constants.LINE_THICK, //3px
+ };
+
+ //渲染风格
+ private UIComboBox borderStyleCombo;
+ //边框粗细
+ private LineComboBox currentLineCombo;
+ //边框圆角
+ private UISpinner borderCornerSpinner;
+ //边框颜色
+ private UIColorButton currentLineColorPane;
+ //主体背景
+ private BackgroundSpecialPane backgroundPane;
+ //透明度
+ private UINumberDragPane numberDragPane;
+
+ public ComponentFrameStylePane() {
+ initPane();
+ }
+
+ protected void initPane() {
+ this.setLayout(FRGUIPaneFactory.createBorderLayout());
+ this.setBorder(BorderFactory.createEmptyBorder(6, 0, 0, 0));
+ this.borderStyleCombo = new UIComboBox(BORDER_STYLE);
+ this.currentLineCombo = new LineComboBox(BORDER_LINE_STYLE_ARRAY);
+ this.currentLineColorPane = new UIColorButton(null);
+ this.borderCornerSpinner = new UISpinner(0, 1000, 1, 0);
+ currentLineColorPane.setUI(getButtonUI(currentLineColorPane));
+ currentLineColorPane.set4ToolbarButton();
+ currentLineColorPane.setPreferredSize(new Dimension(20, 20));
+ JPanel buttonPane = new JPanel(new BorderLayout());
+ buttonPane.add(currentLineColorPane, BorderLayout.WEST);
+ backgroundPane = new BackgroundSpecialPane(){
+ @Override
+ protected GradientBackgroundQuickPane createGradientBackgroundQuickPane(){
+ return new GradientBackgroundQuickPane(119);
+ }
+ };
+ JPanel transparencyPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
+ this.numberDragPane = new UINumberDragPane(0, 100);
+ transparencyPane.add(numberDragPane, BorderLayout.CENTER);
+ transparencyPane.add(new UILabel(" %"), BorderLayout.EAST);
+
+ double p = TableLayout.PREFERRED;
+ double[] rowSize = {p, p, p, p, p, p, p, p};
+ double[] columnSize = {p, 157};
+ JPanel rightTopContentPane = TableLayoutHelper.createCommonTableLayoutPane(new JComponent[][]{
+ {new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Widget_Style_Render_Style")), borderStyleCombo},
+ {new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Widget_Style_Border_Line")), currentLineCombo},
+ {new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Widget_Style_Border_Color")), buttonPane},
+ getBorderCornerSpinnerComp(),
+ {new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Widget-Style_Body_Background")), backgroundPane},
+ {new UILabel(""), new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Widget-Style_Alpha"))},
+ {new UILabel(""), transparencyPane},
+ }, rowSize, columnSize, 10);
+ UIScrollPane rightTopPane = new UIScrollPane(rightTopContentPane);
+ rightTopPane.setBorder(BorderFactory.createEmptyBorder());
+ this.add(rightTopPane, BorderLayout.CENTER);
+ }
+
+
+ private JComponent[] getBorderCornerSpinnerComp() {
+ return new JComponent[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Radius") + ":"), borderCornerSpinner};
+ }
+
+
+ protected UIButtonUI getButtonUI(final UIColorButton uiColorButton) {
+ return new UIButtonUI() {
+
+ public void paint(Graphics g, JComponent c) {
+ UIButton b = (UIButton) c;
+ g.setColor(Color.black);
+ GraphHelper.draw(g, new RoundRectangle2D.Double(1, 1, b.getWidth() - 2, b.getHeight() - 2, 0, 0), 1);
+
+ if (b.getModel().isEnabled()) {
+ g.setColor(uiColorButton.getColor());
+ } else {
+ g.setColor(new Color(Utils.filterRGB(uiColorButton.getColor().getRGB(), 50)));
+ }
+ g.fillRect(2, 2, b.getWidth() - 3, b.getHeight() - 3);
+ }
+ };
+ }
+
+ @Override
+ protected String title4PopupWindow() {
+ return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Widget_Style_Frame");
+ }
+
+
+ @Override
+ public void populate(PredefinedComponentStyle componentStyle) {
+ BorderPacker borderStyle = componentStyle.getBorderStyle();
+ this.borderStyleCombo.setSelectedIndex(borderStyle.getBorderStyle());
+ this.borderCornerSpinner.setValue(borderStyle.getBorderRadius());
+ this.currentLineCombo.setSelectedLineStyle(borderStyle.getBorder());
+ this.currentLineColorPane.setColor(borderStyle.getColor());
+ this.backgroundPane.populateBean(borderStyle.getBackground());
+ numberDragPane.populateBean(borderStyle.getAlpha() * ALPHA_MAX_NUMBER);
+ }
+
+ @Override
+ public void update(PredefinedComponentStyle componentStyle) {
+ BorderPacker style = componentStyle.getBorderStyle();
+ style.setBorderStyle(borderStyleCombo.getSelectedIndex());
+ style.setBorderRadius((int) borderCornerSpinner.getValue());
+ style.setBorder(currentLineCombo.getSelectedLineStyle());
+ style.setColor(currentLineColorPane.getColor());
+ style.setBackground(backgroundPane.update());
+ style.setAlpha((float) (numberDragPane.updateBean() / ALPHA_MAX_NUMBER));
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/component/ComponentMarginStylePane.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/component/ComponentMarginStylePane.java
new file mode 100644
index 000000000..b36702fb7
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/component/ComponentMarginStylePane.java
@@ -0,0 +1,93 @@
+package com.fr.design.mainframe.predefined.ui.detail.component;
+
+import com.fr.config.predefined.PredefinedComponentStyle;
+import com.fr.design.designer.IntervalConstants;
+import com.fr.design.gui.ilable.UILabel;
+import com.fr.design.gui.ispinner.UISpinner;
+import com.fr.design.layout.FRGUIPaneFactory;
+import com.fr.design.layout.TableLayout;
+import com.fr.design.layout.TableLayoutHelper;
+
+import javax.swing.BorderFactory;
+import javax.swing.JPanel;
+import javax.swing.SwingConstants;
+import java.awt.BorderLayout;
+import java.awt.Component;
+
+/**
+ * Created by kerry on 2020-09-01
+ */
+public class ComponentMarginStylePane extends ComponentStylePane {
+ protected UISpinner top;
+ protected UISpinner bottom;
+ protected UISpinner left;
+ protected UISpinner right;
+
+ public ComponentMarginStylePane() {
+ initBoundPane(0, 0, 0, 0);
+ }
+
+ public void initBoundPane(int t, int b, int l, int r) {
+ this.setLayout(FRGUIPaneFactory.createBorderLayout());
+ top = new UISpinner(0, Integer.MAX_VALUE, 1, t);
+ bottom = new UISpinner(0, Integer.MAX_VALUE, 1, b);
+ left = new UISpinner(0, Integer.MAX_VALUE, 1, l);
+ right = new UISpinner(0, Integer.MAX_VALUE, 1, r);
+ top.setGlobalName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Layout_Padding_Duplicate"));
+ bottom.setGlobalName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Layout_Padding_Duplicate"));
+ left.setGlobalName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Layout_Padding_Duplicate"));
+ right.setGlobalName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Layout_Padding_Duplicate"));
+ UILabel label = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Layout_Padding_Duplicate"));
+ label.setBorder(BorderFactory.createEmptyBorder(IntervalConstants.INTERVAL_L1, 0, 0, 0));
+ label.setVerticalAlignment(SwingConstants.TOP);
+ JPanel panel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{
+ new Component[]{label, createRightPane()}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_W2, IntervalConstants.INTERVAL_L1);
+ this.add(panel);
+ }
+
+
+ public JPanel createRightPane() {
+ double f = TableLayout.FILL;
+ double p = TableLayout.PREFERRED;
+ double[] rowSize = {p, p};
+ double[] columnSize = {f, f};
+ int[][] rowCount = {{1, 1}, {1, 1}};
+ Component[][] components1 = new Component[][]{
+ new Component[]{top, bottom},
+ new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Top"), SwingConstants.CENTER), new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Bottom"), SwingConstants.CENTER)}
+ };
+ Component[][] components2 = new Component[][]{
+ new Component[]{left, right},
+ new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Left"), SwingConstants.CENTER), new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Right"), SwingConstants.CENTER)}
+ };
+ JPanel northPanel = TableLayoutHelper.createGapTableLayoutPane(components1, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_L6, IntervalConstants.INTERVAL_L6);
+ northPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, IntervalConstants.INTERVAL_L1, 0));
+ JPanel centerPanel = TableLayoutHelper.createGapTableLayoutPane(components2, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_L6, IntervalConstants.INTERVAL_L6);
+ JPanel panel = FRGUIPaneFactory.createBorderLayout_S_Pane();
+ panel.setBorder(BorderFactory.createEmptyBorder(IntervalConstants.INTERVAL_L1, 0, IntervalConstants.INTERVAL_L1, 0));
+ panel.add(northPanel, BorderLayout.NORTH);
+ panel.add(centerPanel, BorderLayout.CENTER);
+ return panel;
+ }
+
+ @Override
+ protected String title4PopupWindow() {
+ return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Base_Margin");
+ }
+
+ @Override
+ public void populate(PredefinedComponentStyle componentStyle) {
+ this.top.setValue(componentStyle.getTop());
+ this.bottom.setValue(componentStyle.getBottom());
+ this.left.setValue(componentStyle.getLeft());
+ this.right.setValue(componentStyle.getRight());
+ }
+
+ @Override
+ public void update(PredefinedComponentStyle componentStyle) {
+ componentStyle.setTop((int) this.top.getValue());
+ componentStyle.setBottom((int) this.bottom.getValue());
+ componentStyle.setLeft((int) this.left.getValue());
+ componentStyle.setRight((int) this.right.getValue());
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/component/ComponentStylePane.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/component/ComponentStylePane.java
new file mode 100644
index 000000000..9d858cfea
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/component/ComponentStylePane.java
@@ -0,0 +1,15 @@
+package com.fr.design.mainframe.predefined.ui.detail.component;
+
+import com.fr.config.predefined.PredefinedComponentStyle;
+import com.fr.design.dialog.BasicPane;
+
+
+/**
+ * Created by kerry on 2020-09-01
+ */
+public abstract class ComponentStylePane extends BasicPane {
+
+ public abstract void populate(PredefinedComponentStyle componentStyle);
+
+ public abstract void update(PredefinedComponentStyle componentStyle);
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/component/ComponentTitleStylePane.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/component/ComponentTitleStylePane.java
new file mode 100644
index 000000000..2d0e7746e
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/detail/component/ComponentTitleStylePane.java
@@ -0,0 +1,258 @@
+package com.fr.design.mainframe.predefined.ui.detail.component;
+
+import com.fr.base.BaseUtils;
+import com.fr.base.Utils;
+import com.fr.config.predefined.PredefinedComponentStyle;
+import com.fr.design.constants.LayoutConstants;
+import com.fr.design.constants.UIConstants;
+import com.fr.design.formula.TinyFormulaPane;
+import com.fr.design.gui.ibutton.UIButtonGroup;
+import com.fr.design.gui.ibutton.UIColorButton;
+import com.fr.design.gui.ibutton.UIToggleButton;
+import com.fr.design.gui.icombobox.LineComboBox;
+import com.fr.design.gui.icombobox.UIComboBox;
+import com.fr.design.gui.icontainer.UIScrollPane;
+import com.fr.design.gui.ilable.UILabel;
+import com.fr.design.gui.style.BackgroundNoImagePane;
+import com.fr.design.gui.style.FRFontPane;
+import com.fr.design.layout.FRGUIPaneFactory;
+import com.fr.design.layout.TableLayout;
+import com.fr.design.layout.TableLayoutHelper;
+import com.fr.design.mainframe.backgroundpane.GradientBackgroundQuickPane;
+import com.fr.design.utils.gui.GUICoreUtils;
+import com.fr.form.ui.LayoutBorderStyle;
+import com.fr.form.ui.WidgetTitle;
+import com.fr.general.FRFont;
+import com.fr.general.act.BorderPacker;
+import com.fr.general.act.TitlePacker;
+import com.fr.stable.ArrayUtils;
+import com.fr.stable.Constants;
+import com.fr.stable.StringUtils;
+
+import javax.swing.BorderFactory;
+import javax.swing.Icon;
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+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.FlowLayout;
+import java.awt.Font;
+
+/**
+ * Created by kerry on 2020-09-01
+ */
+public class ComponentTitleStylePane extends ComponentStylePane {
+ private final static Dimension BUTTON_SIZE = new Dimension(24, 20);
+ //标题内容
+ private TinyFormulaPane formulaPane;
+ //标题格式
+ private UIComboBox fontNameComboBox;
+ private UIComboBox fontSizeComboBox;
+ private UIColorButton colorSelectPane;
+ private UIToggleButton bold;
+ private UIToggleButton italic;
+ private UIToggleButton underline;
+ private LineComboBox underlineCombo;
+ //对齐方式
+ private UIButtonGroup hAlignmentPane;
+ //标题背景
+ private BackgroundNoImagePane titleBackgroundPane;
+
+ public static ComponentTitleStylePane createPredefinedSettingPane(){
+ return new ComponentTitleStylePane(true);
+ }
+
+ public static ComponentTitleStylePane createStyleSettingPane(){
+ return new ComponentTitleStylePane(false);
+ }
+
+ private ComponentTitleStylePane(boolean isPredefined) {
+ initPane(isPredefined);
+ }
+
+ protected void initPane(boolean isPredefined) {
+ this.setLayout(FRGUIPaneFactory.createBorderLayout());
+ this.setBorder(BorderFactory.createEmptyBorder(6, 0,0,0));
+ formulaPane = new TinyFormulaPane();
+ fontSizeComboBox = new UIComboBox(FRFontPane.FONT_SIZES);
+ fontNameComboBox = new UIComboBox(Utils.getAvailableFontFamilyNames4Report());
+ fontNameComboBox.setPreferredSize(new Dimension(105 , 20));
+ JPanel fontSizeTypePane = new JPanel(new BorderLayout(3, 0));
+ fontSizeTypePane.add(fontSizeComboBox, BorderLayout.CENTER);
+ fontSizeTypePane.add(fontNameComboBox, BorderLayout.EAST);
+
+ Icon[] hAlignmentIconArray = {BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_left_normal.png"),
+ BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_center_normal.png"),
+ BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_right_normal.png"),};
+ Integer[] hAlignment = new Integer[]{Constants.LEFT, Constants.CENTER, Constants.RIGHT};
+ hAlignmentPane = new UIButtonGroup(hAlignmentIconArray, hAlignment);
+ hAlignmentPane.setAllToolTips(new String[]{com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_StyleAlignment_Left")
+ , com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_StyleAlignment_Center"),
+ com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_StyleAlignment_Right")});
+ JPanel hPaneContainer = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0));
+ hPaneContainer.add(hAlignmentPane);
+
+ titleBackgroundPane = new BackgroundNoImagePane(){
+ @Override
+ protected GradientBackgroundQuickPane createGradientBackgroundQuickPane(){
+ return new GradientBackgroundQuickPane(119);
+ }
+ };
+
+ double p = TableLayout.PREFERRED;
+ double[] rowSize = {p, p, p, p, p, p, p, p};
+ double[] columnSize = {p, 157};
+ JComponent[][] jComponents = new JComponent[][]{
+ {new UILabel(com.fr.design.i18n.Toolkit.i18nText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Char"))), fontSizeTypePane},
+ {new UILabel(""), initFontButtonPane()},
+ {new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Alignment-Style")), hAlignmentPane},
+ {new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Widget_Style_Title_Background")), titleBackgroundPane}};
+
+ JComponent[][] displayComponents = createDisplayComponentArray(isPredefined, jComponents);
+ JPanel rightBottomContentPane = TableLayoutHelper.createCommonTableLayoutPane(displayComponents, rowSize, columnSize, 10);
+
+ UIScrollPane jPanel = new UIScrollPane(rightBottomContentPane);
+ jPanel.setBorder(BorderFactory.createEmptyBorder());
+ this.add(jPanel, BorderLayout.CENTER);
+ }
+
+ private JComponent[][] createDisplayComponentArray(boolean isPredefined, JComponent[][] baseComponents) {
+ if (isPredefined) {
+ return baseComponents;
+ }
+ JComponent[][] titleComponent = new JComponent[][]{{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Widget_Style_Title_Content")), formulaPane}};
+ return ArrayUtils.addAll(titleComponent, baseComponents);
+
+ }
+
+ protected JPanel initFontButtonPane() {
+ colorSelectPane = new UIColorButton();
+ bold = new UIToggleButton(BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/bold.png"));
+ italic = new UIToggleButton(BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/italic.png"));
+ underline = new UIToggleButton(BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/underline.png"));
+ bold.setPreferredSize(BUTTON_SIZE);
+ italic.setPreferredSize(BUTTON_SIZE);
+ underline.setPreferredSize(BUTTON_SIZE);
+ underline.addChangeListener(new ChangeListener() {
+ @Override
+ public void stateChanged(ChangeEvent e) {
+ underlineCombo.setVisible(underline.isSelected());
+ }
+ });
+ underlineCombo = new LineComboBox(UIConstants.BORDER_LINE_STYLE_ARRAY);
+ Component[] components_font = new Component[]{
+ colorSelectPane, italic, bold, underline
+ };
+ JPanel buttonPane = new JPanel(new BorderLayout());
+ buttonPane.add(GUICoreUtils.createFlowPane(components_font, FlowLayout.LEFT, LayoutConstants.HGAP_SMALL));
+ JPanel combinePane = FRGUIPaneFactory.createBorderLayout_S_Pane();
+ combinePane.add(buttonPane, BorderLayout.WEST);
+ combinePane.add(underlineCombo, BorderLayout.CENTER);
+ initAllNames();
+ setToolTips();
+ return combinePane;
+
+ }
+
+ protected void initAllNames() {
+ fontNameComboBox.setGlobalName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_FRFont_Family"));
+ fontSizeComboBox.setGlobalName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_FRFont_Size"));
+ colorSelectPane.setGlobalName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_FRFont_Foreground"));
+ italic.setGlobalName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_FRFont_Italic"));
+ bold.setGlobalName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_FRFont_Bold"));
+ underline.setGlobalName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_FRFont_Underline"));
+ underlineCombo.setGlobalName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_FRFont_Line_Style"));
+ }
+
+ protected void setToolTips() {
+ colorSelectPane.setToolTipText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_FRFont_Foreground"));
+ italic.setToolTipText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_FRFont_Italic"));
+ bold.setToolTipText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_FRFont_Bold"));
+ underline.setToolTipText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_FRFont_Underline"));
+ }
+
+
+ @Override
+ protected String title4PopupWindow() {
+ return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Title");
+ }
+
+ @Override
+ public void populate(PredefinedComponentStyle componentStyle) {
+ BorderPacker borderStyle = componentStyle.getBorderStyle();
+ TitlePacker widgetTitle = borderStyle == null ? new WidgetTitle() : borderStyle.getTitle();
+ widgetTitle = widgetTitle == null ? new WidgetTitle() : widgetTitle;
+
+ populateFormula(widgetTitle);
+ populateFont(widgetTitle);
+
+ hAlignmentPane.setSelectedItem(widgetTitle.getPosition());
+
+ titleBackgroundPane.populateBean(widgetTitle.getBackground());
+ }
+
+ private void populateFormula(TitlePacker widgetTitle) {
+ this.formulaPane.populateBean(widgetTitle.getTextObject().toString());
+ }
+
+ protected void populateFont(TitlePacker widgetTitle) {
+ FRFont frFont = widgetTitle.getFrFont();
+ this.fontSizeComboBox.setSelectedItem(frFont.getSize());
+ this.fontNameComboBox.setSelectedItem(frFont.getFamily());
+ this.colorSelectPane.setColor(frFont.getForeground());
+ this.colorSelectPane.repaint();
+ bold.setSelected(frFont.isBold());
+ italic.setSelected(frFont.isItalic());
+ int line = frFont.getUnderline();
+ if (line == Constants.LINE_NONE) {
+ underline.setSelected(false);
+ underlineCombo.setVisible(false);
+ } else {
+ underline.setSelected(true);
+ underlineCombo.setVisible(true);
+ this.underlineCombo.setSelectedLineStyle(line);
+ }
+ }
+
+ @Override
+ public void update(PredefinedComponentStyle componentStyle) {
+ BorderPacker style = componentStyle.getBorderStyle();
+ TitlePacker title = style.getTitle() == null ? new WidgetTitle() : style.getTitle();
+ String titleText = formulaPane.updateBean();
+ title.setTextObject(titleText);
+ style.setType(StringUtils.isEmpty(titleText) ? LayoutBorderStyle.STANDARD : LayoutBorderStyle.TITLE);
+ FRFont frFont = title.getFrFont();
+ frFont = frFont.applySize((Integer) fontSizeComboBox.getSelectedItem());
+ frFont = frFont.applyName(fontNameComboBox.getSelectedItem().toString());
+ frFont = frFont.applyForeground(colorSelectPane.getColor());
+ frFont = updateItalicBold(frFont);
+ int line = underline.isSelected() ? this.underlineCombo.getSelectedLineStyle() : Constants.LINE_NONE;
+ frFont = frFont.applyUnderline(line);
+ title.setFrFont(frFont);
+ title.setPosition((Integer) hAlignmentPane.getSelectedItem());
+ title.setBackground(titleBackgroundPane.update());
+ style.setTitle(title);
+ }
+
+ private FRFont updateItalicBold(FRFont frFont) {
+ int italic_bold = frFont.getStyle();
+ boolean isItalic = italic_bold == Font.ITALIC || italic_bold == (Font.BOLD + Font.ITALIC);
+ boolean isBold = italic_bold == Font.BOLD || italic_bold == (Font.BOLD + Font.ITALIC);
+ if (italic.isSelected() && !isItalic) {
+ italic_bold += Font.ITALIC;
+ } else if (!italic.isSelected() && isItalic) {
+ italic_bold -= Font.ITALIC;
+ }
+ frFont = frFont.applyStyle(italic_bold);
+ if (bold.isSelected() && !isBold) {
+ italic_bold += Font.BOLD;
+ } else if (!bold.isSelected() && isBold) {
+ italic_bold -= Font.BOLD;
+ }
+ frFont = frFont.applyStyle(italic_bold);
+ return frFont;
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/dialog/PredefinedStyleEditDialog.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/dialog/PredefinedStyleEditDialog.java
new file mode 100644
index 000000000..0bfe1f117
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/dialog/PredefinedStyleEditDialog.java
@@ -0,0 +1,193 @@
+package com.fr.design.mainframe.predefined.ui.dialog;
+
+import com.fr.config.ServerPreferenceConfig;
+import com.fr.config.predefined.PredefinedStyleConfig;
+import com.fr.design.gui.ilable.UILabel;
+import com.fr.design.gui.itextfield.UITextField;
+import com.fr.design.mainframe.predefined.ui.PredefinedStyleEditPane;
+import com.fr.design.gui.ibutton.UIButton;
+import com.fr.design.layout.FRGUIPaneFactory;
+import com.fr.design.utils.gui.GUICoreUtils;
+import com.fr.stable.StringUtils;
+
+import javax.swing.BorderFactory;
+import javax.swing.JDialog;
+
+import javax.swing.JPanel;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Window;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+/**
+ * Created by kerry on 2020-08-26
+ */
+public class PredefinedStyleEditDialog extends JDialog {
+
+ public PredefinedStyleEditDialog(Window parent, PredefinedStyleEditPane contentPane) {
+ this(parent, contentPane, false);
+ }
+
+
+ public PredefinedStyleEditDialog(Window parent, PredefinedStyleEditPane contentPane, boolean isBuiltIn) {
+ super(parent, ModalityType.APPLICATION_MODAL);
+
+ this.setTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Style_Edit"));
+ this.setResizable(false);
+ JPanel defaultPane = FRGUIPaneFactory.createBorderLayout_L_Pane();
+ this.setContentPane(defaultPane);
+
+ UIButton saveBtn = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Save"));
+ saveBtn.setEnabled(!isBuiltIn);
+ saveBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ if(contentPane.saveStyle()){
+ dialogExit();
+ }
+ }
+ });
+ UIButton saveAsBtn = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Predefined_Save_As_New"));
+ saveAsBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ SaveAsNewStyleDialog saveAsNewStyleDialog = new SaveAsNewStyleDialog(PredefinedStyleEditDialog.this, contentPane);
+ saveAsNewStyleDialog.setVisible(true);
+
+ }
+ });
+ UIButton cancelBtn = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Cancel"));
+ cancelBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ dialogExit();
+ }
+ });
+ JPanel buttonPanel = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane();
+ buttonPanel.add(saveBtn);
+ buttonPanel.add(saveAsBtn);
+ buttonPanel.add(cancelBtn);
+
+ defaultPane.add(contentPane, BorderLayout.CENTER);
+ defaultPane.add(buttonPanel, BorderLayout.SOUTH);
+
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ dialogExit();
+ }
+ });
+
+
+ this.setSize(new Dimension(900, 600));
+ GUICoreUtils.centerWindow(this);
+ }
+
+ public void dialogExit() {
+ this.dispose();
+ }
+
+ class SaveAsNewStyleDialog extends JDialog {
+ private UITextField textField;
+ private UILabel tipLabel;
+
+ public SaveAsNewStyleDialog(Window parent, PredefinedStyleEditPane editPane) {
+ super(parent, ModalityType.APPLICATION_MODAL);
+
+ this.setTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Predefined_Save_As_New"));
+ this.setResizable(false);
+ UIButton confirm = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Confirm"));
+ confirm.setEnabled(false);
+ confirm.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ String name = textField.getText();
+ if (valid(name)) {
+ editPane.saveAsNewStyle(name);
+ dialogExit();
+ PredefinedStyleEditDialog.this.dialogExit();
+ } else {
+ tipLabel.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Predefined_Name_Repeat"));
+ }
+ }
+ });
+ UIButton cancle = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Cancel"));
+ cancle.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ dialogExit();
+ }
+ });
+ JPanel defaultPane = FRGUIPaneFactory.createBorderLayout_L_Pane();
+ JPanel buttonPanel = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane();
+ buttonPanel.add(confirm);
+ buttonPanel.add(cancle);
+
+ JPanel panel = createSaveAsPane(confirm);
+
+
+ defaultPane.add(panel, BorderLayout.CENTER);
+ defaultPane.add(buttonPanel, BorderLayout.SOUTH);
+
+ this.setContentPane(defaultPane);
+
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ dialogExit();
+ }
+ });
+
+
+ this.setSize(new Dimension(300, 140));
+ GUICoreUtils.centerWindow(this);
+ }
+
+ private JPanel createSaveAsPane(UIButton confirm) {
+ JPanel panel = FRGUIPaneFactory.createBorderLayout_S_Pane();
+ JPanel centerPane = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(20, 5);
+ centerPane.add(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Style_Name")));
+ textField = new UITextField();
+ textField.getDocument().addDocumentListener(new DocumentListener() {
+ @Override
+ public void insertUpdate(DocumentEvent e) {
+ confirm.setEnabled(StringUtils.isNotEmpty(textField.getText()));
+ }
+
+ @Override
+ public void removeUpdate(DocumentEvent e) {
+
+ }
+
+ @Override
+ public void changedUpdate(DocumentEvent e) {
+
+ }
+ });
+ textField.setPreferredSize(new Dimension(180, 20));
+ centerPane.add(textField);
+ panel.add(centerPane, BorderLayout.CENTER);
+ tipLabel = new UILabel();
+ tipLabel.setBorder(BorderFactory.createEmptyBorder(10, 20, 0, 0));
+ tipLabel.setForeground(Color.RED);
+ panel.add(tipLabel, BorderLayout.SOUTH);
+ return panel;
+
+
+ }
+
+
+ public void dialogExit() {
+ this.dispose();
+ }
+
+ private boolean valid(String name) {
+ PredefinedStyleConfig config = ServerPreferenceConfig.getInstance().getPreferenceStyleConfig();
+ return !config.containStyle(name);
+ }
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/dialog/ReportPredefinedStyleDialog.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/dialog/ReportPredefinedStyleDialog.java
new file mode 100644
index 000000000..658032a68
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/dialog/ReportPredefinedStyleDialog.java
@@ -0,0 +1,97 @@
+package com.fr.design.mainframe.predefined.ui.dialog;
+
+import com.fr.design.gui.ibutton.UIButton;
+import com.fr.design.layout.FRGUIPaneFactory;
+import com.fr.design.mainframe.predefined.ui.ReportPredefinedStylePane;
+import com.fr.design.mainframe.predefined.ui.ServerPredefinedStylePane;
+import com.fr.design.utils.gui.GUICoreUtils;
+import com.fr.workspace.WorkContext;
+
+import javax.swing.JDialog;
+import javax.swing.JPanel;
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.Window;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+/**
+ * Created by kerry on 2020-08-26
+ */
+public class ReportPredefinedStyleDialog extends JDialog {
+
+
+ public ReportPredefinedStyleDialog(Window parent, ReportPredefinedStylePane contentPane) {
+ super(parent, ModalityType.APPLICATION_MODAL);
+
+ this.setTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Template_Style"));
+ this.setResizable(false);
+ JPanel defaultPane = FRGUIPaneFactory.createBorderLayout_L_Pane();
+ this.setContentPane(defaultPane);
+ UIButton managerBtn = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Style_Manager"));
+ managerBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ ServerPredefinedStylePane predefinedStylePane = new ServerPredefinedStylePane();
+ ServerPredefinedStyleDialog dialog = new ServerPredefinedStyleDialog(ReportPredefinedStyleDialog.this, predefinedStylePane);
+ dialog.setVisible(true);
+ dialog.addWindowListener(new WindowAdapter() {
+ @Override
+ public void windowClosed(WindowEvent e) {
+ contentPane.refresh();
+ }
+ });
+ }
+ });
+
+
+ UIButton settingBtn = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Predefined_Applicate_Style"));
+ settingBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ contentPane.update();
+ dialogExit();
+ }
+ });
+
+ UIButton cancelBtn = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Cancel"));
+ cancelBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ dialogExit();
+ }
+ });
+ JPanel southPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
+
+ if (WorkContext.getCurrent().isRoot()){
+ JPanel buttonPanel1 = FRGUIPaneFactory.createLeftFlowZeroGapBorderPane();
+ buttonPanel1.add(managerBtn);
+ southPane.add(buttonPanel1, BorderLayout.CENTER);
+ }
+
+ JPanel buttonPanel2 = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane();
+ buttonPanel2.add(settingBtn);
+ buttonPanel2.add(cancelBtn);
+
+ southPane.add(buttonPanel2, BorderLayout.EAST);
+
+ defaultPane.add(contentPane, BorderLayout.CENTER);
+ defaultPane.add(southPane, BorderLayout.SOUTH);
+
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ dialogExit();
+ }
+ });
+
+
+ this.setSize(new Dimension(660, 600));
+ GUICoreUtils.centerWindow(this);
+ }
+
+ public void dialogExit() {
+ this.dispose();
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/dialog/ServerPredefinedStyleDialog.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/dialog/ServerPredefinedStyleDialog.java
new file mode 100644
index 000000000..439bb3ec2
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/dialog/ServerPredefinedStyleDialog.java
@@ -0,0 +1,68 @@
+package com.fr.design.mainframe.predefined.ui.dialog;
+
+import com.fr.design.mainframe.predefined.ui.ServerPredefinedStylePane;
+import com.fr.design.gui.ibutton.UIButton;
+import com.fr.design.layout.FRGUIPaneFactory;
+import com.fr.design.utils.gui.GUICoreUtils;
+
+import javax.swing.JDialog;
+import javax.swing.JPanel;
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.Window;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+/**
+ * Created by kerry on 2020-08-26
+ */
+public class ServerPredefinedStyleDialog extends JDialog {
+
+
+ public ServerPredefinedStyleDialog(Window parent, ServerPredefinedStylePane contentPane) {
+ super(parent, ModalityType.APPLICATION_MODAL);
+ this.setTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Server_Style"));
+ this.setResizable(false);
+ JPanel defaultPane = FRGUIPaneFactory.createBorderLayout_L_Pane();
+ this.setContentPane(defaultPane);
+
+ UIButton settingBtn = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Predefined_Set_Default"));
+ settingBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ contentPane.update();
+ dialogExit();
+ }
+ });
+
+ UIButton cancelBtn = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Cancel"));
+ cancelBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ dialogExit();
+ }
+ });
+ JPanel buttonPanel = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane();
+ buttonPanel.add(settingBtn);
+ buttonPanel.add(cancelBtn);
+
+ defaultPane.add(contentPane, BorderLayout.CENTER);
+ defaultPane.add(buttonPanel, BorderLayout.SOUTH);
+
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ dialogExit();
+ }
+ });
+
+
+ this.setSize(new Dimension(660, 600));
+ GUICoreUtils.centerWindow(this);
+ }
+
+ public void dialogExit(){
+ this.dispose();
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/preview/ChartPreStylePreView.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/preview/ChartPreStylePreView.java
new file mode 100644
index 000000000..31a497d01
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/preview/ChartPreStylePreView.java
@@ -0,0 +1,100 @@
+package com.fr.design.mainframe.predefined.ui.preview;
+
+import com.fr.base.chart.BaseChartCollection;
+import com.fr.base.chart.BaseChartPainter;
+import com.fr.base.chart.chartdata.CallbackEvent;
+import com.fr.base.chart.result.WebChartIDInfo;
+import com.fr.chart.base.ChartConstants;
+import com.fr.chart.base.ChartPreStyleProvider;
+import com.fr.chart.chartattr.ChartCollection;
+import com.fr.config.predefined.PredefinedStyle;
+import com.fr.design.gui.chart.MiddleChartComponent;
+import com.fr.plugin.chart.vanchart.VanChart;
+import com.fr.script.Calculator;
+import com.fr.stable.core.PropertyChangeListener;
+
+import java.util.List;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+
+/**
+ * @author Bjorn
+ * @version 10.0
+ * Created by Bjorn on 2020-09-28
+ */
+public class ChartPreStylePreView extends MiddleChartComponent {
+
+ private ChartCollection chartCollection;
+
+ private double scaleX = 1.0;
+ private double scaleY = 1.0;
+
+ private CallbackEvent callbackEvent;
+
+ public ChartPreStylePreView() {
+ }
+
+ public ChartPreStylePreView(ChartCollection cc) {
+ this(cc, 1.0, 1.0);
+ }
+
+ public ChartPreStylePreView(ChartCollection cc, double scaleX, double scaleY) {
+ this.scaleX = scaleX;
+ this.scaleY = scaleY;
+ populate(cc);
+ }
+
+ public void setCallbackEvent(CallbackEvent callbackEvent) {
+ this.callbackEvent = callbackEvent;
+ }
+
+ public void paintComponent(Graphics g) {
+ Graphics2D g2d = (Graphics2D) g;
+ g2d.translate(ChartConstants.PREGAP4BOUNDS / 2, ChartConstants.PREGAP4BOUNDS / 2);
+ g2d.scale(scaleX, scaleY);
+ super.paintComponent(g);
+ drawChart(g2d);
+ g2d.scale(1 / scaleX, 1 / scaleY);
+ g2d.translate(-ChartConstants.PREGAP4BOUNDS / 2, -ChartConstants.PREGAP4BOUNDS / 2);
+ }
+
+ private void drawChart(Graphics2D g2d) {
+ Dimension d = getBounds().getSize();
+ int chartWidth = (int) (d.width / scaleX) - ChartConstants.PREGAP4BOUNDS;
+ int chartHeight = (int) (d.height / scaleX) - ChartConstants.PREGAP4BOUNDS;
+ BaseChartPainter painter = chartCollection.createResultChartPainterWithOutDealFormula(Calculator.createCalculator(),
+ WebChartIDInfo.createEmptyDesignerInfo(), chartWidth, chartHeight);
+ painter.paint(g2d, chartWidth, chartHeight, 0, null, callbackEvent);
+ }
+
+ public void refresh(PredefinedStyle style) {
+ VanChart vanChart = chartCollection.getSelectedChartProvider(VanChart.class);
+ List chartPreStyleProviders = vanChart.getChartPreStyleProvider();
+ for (ChartPreStyleProvider chartPreStyleProvider : chartPreStyleProviders) {
+ chartPreStyleProvider.updatePreDefinedStyle(style);
+ }
+ vanChart.attrChange();
+ }
+
+ @Override
+ public void populate(BaseChartCollection cc) {
+ this.chartCollection = (ChartCollection) cc;
+ }
+
+ @Override
+ public BaseChartCollection update() {
+ return this.chartCollection;
+ }
+
+ @Override
+ public void addStopEditingListener(PropertyChangeListener l) {
+
+ }
+
+
+ @Override
+ public void reset() {
+
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/preview/ComponentPreviewPane.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/preview/ComponentPreviewPane.java
new file mode 100644
index 000000000..0fffe2ff4
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/preview/ComponentPreviewPane.java
@@ -0,0 +1,146 @@
+package com.fr.design.mainframe.predefined.ui.preview;
+
+import com.fr.base.FRContext;
+import com.fr.base.GraphHelper;
+import com.fr.config.predefined.PredefinedStyle;
+import com.fr.design.layout.FRGUIPaneFactory;
+import com.fr.general.Background;
+import com.fr.general.FRFont;
+import com.fr.general.act.BorderPacker;
+import com.fr.general.act.TitlePacker;
+
+import javax.swing.BorderFactory;
+import javax.swing.JPanel;
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.FontMetrics;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.geom.Rectangle2D;
+
+/**
+ * Created by kerry on 2020-09-04
+ */
+public abstract class ComponentPreviewPane extends StyleSettingPreviewPane {
+ private PredefinedStyle style = new PredefinedStyle();
+ private static final int SMALL_GAP = 5;
+ private static final int GAP = 10;
+ private JPanel contentPane;
+ private TitlePreviewPane titlePane;
+
+
+ public ComponentPreviewPane() {
+ this.setBackground(null);
+ this.setOpaque(false);
+ this.contentPane = createContentPane();
+ this.titlePane = new TitlePreviewPane();
+ this.titlePane.setPreferredSize(new Dimension(484, 35));
+ this.setLayout(FRGUIPaneFactory.createBorderLayout());
+ this.setBorder(BorderFactory.createEmptyBorder(5, 10, 10, 10));
+
+ this.add(titlePane, BorderLayout.NORTH);
+ this.add(contentPane, BorderLayout.CENTER);
+ }
+
+ protected abstract JPanel createContentPane();
+
+ public void refresh() {
+ this.repaint();
+ }
+
+ public void refresh(PredefinedStyle style) {
+ this.style = style;
+ }
+
+
+ @Override
+ public void paint(Graphics g) {
+ paintContent(g);
+
+
+ }
+
+ public void paintContent(Graphics g) {
+ BorderPacker borderStyle = style.getComponentStyle().getBorderStyle();
+
+ updateBorders(g, borderStyle);
+
+ paintTitle(g, borderStyle.getTitle());
+
+ paintContentPane(g,borderStyle);
+
+ }
+
+ private void paintContentPane(Graphics g, BorderPacker borderStyle) {
+
+ Graphics clipg;
+ clipg = g.create(10, 40, this.contentPane.getWidth(), this.contentPane.getHeight());
+ if (borderStyle.getBackground() != null) {
+ borderStyle.getBackground().paint(clipg, clipg.getClipBounds());
+ }
+ this.contentPane.paint(clipg);
+ clipg.dispose();
+
+ }
+
+ private void paintTitle(Graphics g, TitlePacker titlePacker) {
+ FRFont font = titlePacker.getFrFont();
+ Background background = titlePacker.getBackground();
+ if (background != null) {
+ background.paint(g, new Rectangle2D.Double(10, 5, this.titlePane.getWidth(), this.titlePane.getHeight()));
+ }
+ titlePane.setFontObject(font);
+ titlePane.paintComponent(g);
+ }
+
+ private void updateBorders(Graphics g, BorderPacker borderStyle) {
+ if (borderStyle != null) {
+ borderStyle.paint(g, new Rectangle2D.Double(SMALL_GAP, SMALL_GAP, getWidth() - GAP, getHeight() - SMALL_GAP - GAP));
+ }
+ }
+
+
+ private class TitlePreviewPane extends JPanel {
+ private FRFont frFont = null;
+
+ public TitlePreviewPane() {
+ this.setBackground(null);
+ this.setOpaque(false);
+ frFont = FRContext.getDefaultValues().getFRFont();
+ }
+
+ @Override
+ public void paint(Graphics g) {
+
+ }
+
+ public void paintComponent(Graphics g) {
+ Graphics2D g2d = (Graphics2D) g;
+ Dimension d = getSize();
+ if (frFont == null) {
+ return;
+ }
+ FontMetrics fm = getFontMetrics(frFont);
+ if (this.isEnabled()) {
+ g2d.setColor(frFont.getForeground());
+ } else {
+ g2d.setColor(new Color(237, 237, 237));
+ }
+ g2d.setFont(frFont.applySize(14).applyResolutionNP(96));
+ int startY = 0;
+ startY = (d.height + fm.getHeight()) / 2;
+ drawTabBack(g2d, startY);
+ }
+
+ private void drawTabBack(Graphics2D g2d, int startY) {
+ String paintText = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Predefined_Preview_Title_Text");
+ GraphHelper.drawString(g2d, paintText, GAP, 32);
+ }
+
+ public void setFontObject(FRFont font) {
+ this.frFont = font;
+ }
+ }
+
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/preview/ElementCasePreview.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/preview/ElementCasePreview.java
new file mode 100644
index 000000000..18408ec53
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/preview/ElementCasePreview.java
@@ -0,0 +1,98 @@
+package com.fr.design.mainframe.predefined.ui.preview;
+
+import com.fr.design.gui.ilable.UILabel;
+import com.fr.design.layout.FRGUIPaneFactory;
+import com.fr.general.FRFont;
+import com.fr.log.FineLoggerFactory;
+
+import javax.swing.JPanel;
+import javax.swing.JSeparator;
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by kerry on 2020-09-04
+ */
+public class ElementCasePreview extends ComponentPreviewPane {
+ private static final List PREVIEW_DATA_LIST = new ArrayList<>();
+ private static final String BLANK_CHAR = " ";
+
+ static {
+ readPreviewData();
+ }
+
+ private static void readPreviewData() {
+ try {
+ InputStream inputStream = ElementCasePreview.class.getResourceAsStream("/com/fr/design/mainframe/predefined/previewData");
+ BufferedReader br = new BufferedReader(new InputStreamReader(inputStream,
+ StandardCharsets.UTF_8));
+ String lineTxt = null;
+ while ((lineTxt = br.readLine()) != null) {
+ String[] data = lineTxt.split(BLANK_CHAR);
+ PREVIEW_DATA_LIST.add(data);
+ }
+ br.close();
+ } catch (Exception e) {
+ FineLoggerFactory.getLogger().error(e.getMessage(), e);
+ }
+ }
+
+ @Override
+ protected JPanel createContentPane() {
+
+ JPanel jPanel = FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane();
+ jPanel.setOpaque(false);
+ jPanel.setBackground(null);
+ FRFont font = FRFont.getInstance();
+ FRFont titleFont = font.applySize(11).applyForeground(Color.decode("#63B2EE"));
+ FRFont endFont = font.applyForeground(Color.decode("#1B97FF"));
+ for (int i = 0; i < PREVIEW_DATA_LIST.size(); i++) {
+ FRFont frFont = font;
+ if (i == 0) {
+ frFont = titleFont;
+ }
+ if (i == PREVIEW_DATA_LIST.size() - 1) {
+ frFont = endFont;
+ }
+ jPanel.add(new GridRowPane(frFont, PREVIEW_DATA_LIST.get(i)));
+
+ }
+
+ return jPanel;
+ }
+
+ class GridRowPane extends JPanel {
+ public GridRowPane(FRFont frFont, String[] data) {
+ this.setOpaque(false);
+ this.setBackground(null);
+ this.setLayout(FRGUIPaneFactory.createBorderLayout());
+ JPanel panel = FRGUIPaneFactory.createNColumnGridInnerContainer_Pane(4, 20, 10);
+ panel.setOpaque(false);
+ panel.setBackground(null);
+ for (String text : data) {
+ panel.add(createLabel(text, frFont));
+ }
+ this.add(panel, BorderLayout.CENTER);
+ JSeparator jSeparator = new JSeparator();
+ jSeparator.setPreferredSize(new Dimension(246, 2));
+ this.add(jSeparator, BorderLayout.SOUTH);
+ }
+
+ private UILabel createLabel(String text, FRFont frFont) {
+ UILabel label = new UILabel(text);
+ label.setFont(frFont);
+ label.setForeground(frFont.getForeground());
+ label.setBackground(null);
+ return label;
+ }
+
+ }
+
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/preview/PredefinedStylePreviewPane.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/preview/PredefinedStylePreviewPane.java
new file mode 100644
index 000000000..836cd3220
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/preview/PredefinedStylePreviewPane.java
@@ -0,0 +1,179 @@
+package com.fr.design.mainframe.predefined.ui.preview;
+
+import com.fr.base.background.ColorBackground;
+import com.fr.base.chart.chartdata.CallbackEvent;
+import com.fr.chart.chartattr.ChartCollection;
+import com.fr.chart.chartattr.Title;
+import com.fr.chart.charttypes.ChartTypeManager;
+import com.fr.config.predefined.PredefinedStyle;
+import com.fr.design.i18n.Toolkit;
+import com.fr.design.layout.FRGUIPaneFactory;
+import com.fr.design.utils.ComponentUtils;
+import com.fr.general.Background;
+import com.fr.log.FineLoggerFactory;
+import com.fr.plugin.chart.attr.axis.VanChartAxis;
+import com.fr.plugin.chart.attr.plot.VanChartPlot;
+import com.fr.plugin.chart.base.AttrLabel;
+import com.fr.plugin.chart.base.VanChartTools;
+import com.fr.plugin.chart.column.VanChartColumnPlot;
+import com.fr.plugin.chart.line.VanChartLinePlot;
+import com.fr.plugin.chart.vanchart.VanChart;
+import com.fr.stable.Constants;
+
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+import java.util.ArrayList;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.geom.Rectangle2D;
+
+/**
+ * Created by kerry on 2020-09-06
+ */
+public class PredefinedStylePreviewPane extends StyleSettingPreviewPane implements CallbackEvent {
+ private ElementCasePreview elementCasePreview;
+ private Background background;
+ private double scaleX = 1.0;
+ private double scaleY = 1.0;
+ private ChartPreStylePreView columnChartPane;
+ private ChartPreStylePreView lineChartPane;
+
+ private int COLUMN_CHART_WIDTH = 297;
+
+ private int COLUMN_CHART_HEIGHT = 220;
+
+
+ public static final double CHART_SCALE = 0.6;
+
+ public PredefinedStylePreviewPane() {
+ this(1.0, 1.0);
+ }
+
+ public PredefinedStylePreviewPane(double scaleX, double scaleY) {
+ this.scaleX = scaleX;
+ this.scaleY = scaleY;
+ this.setBackground(Color.WHITE);
+ this.elementCasePreview = new ElementCasePreview();
+ this.add(initChartPreViewPane());
+ this.elementCasePreview.setPreferredSize(new Dimension(517, 250));
+ this.add(this.elementCasePreview);
+ }
+
+ private JPanel initChartPreViewPane() {
+ columnChartPane = new ChartPreStylePreView(initVanColumnChart(), CHART_SCALE, CHART_SCALE);
+ columnChartPane.setPreferredSize(new Dimension(COLUMN_CHART_WIDTH, COLUMN_CHART_HEIGHT));
+ columnChartPane.setCallbackEvent(this);
+ lineChartPane = new ChartPreStylePreView(initVanLineChart(), CHART_SCALE, CHART_SCALE);
+ lineChartPane.setPreferredSize(new Dimension(220, 220));
+ lineChartPane.setCallbackEvent(this);
+
+ JPanel panel = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane();
+ panel.add(columnChartPane);
+ panel.add(lineChartPane);
+ return panel;
+ }
+
+ //柱形图
+ private ChartCollection initVanColumnChart() {
+ try {
+ VanChart chart = (VanChart) ChartTypeManager.getInstance().getCharts(VanChartColumnPlot.VAN_CHART_COLUMN_PLOT_ID)[0].clone();
+ chart.getTitle().setPosition(Constants.LEFT);
+ VanChartTools vanChartTools = chart.getVanChartTools();
+ vanChartTools.setSort(false);
+ vanChartTools.setExport(false);
+ vanChartTools.setFullScreen(false);
+ VanChartPlot plot = chart.getPlot();
+ AttrLabel defaultAttrLabel = plot.getDefaultAttrLabel();
+ defaultAttrLabel.setEnable(true);
+ defaultAttrLabel.getAttrLabelDetail().getBorder().setBorderStyle(0);
+ defaultAttrLabel.getAttrLabelDetail().getBackground().setBackground(null);
+ plot.getConditionCollection().getDefaultAttr().addDataSeriesCondition(defaultAttrLabel);
+ plot.getLegend().setLegendVisible(false);
+ plot.getDataSheet().setVisible(true);
+ ChartCollection chartCollection = new ChartCollection(chart);
+ return chartCollection;
+ } catch (Exception ex) {
+ FineLoggerFactory.getLogger().error(ex.getMessage(), ex);
+ }
+ return null;
+ }
+
+ //折线图
+ private ChartCollection initVanLineChart() {
+ try {
+ VanChart chart = (VanChart) ChartTypeManager.getInstance().getCharts(VanChartLinePlot.VAN_CHART_LINE_PLOT)[0].clone();
+ chart.getTitle().setPosition(Constants.LEFT);
+ VanChartTools vanChartTools = chart.getVanChartTools();
+ vanChartTools.setSort(false);
+ vanChartTools.setExport(false);
+ vanChartTools.setFullScreen(false);
+ VanChartLinePlot plot = chart.getPlot();
+ plot.getLegend().setPosition(Constants.TOP);
+ VanChartAxis defaultXAxis = plot.getDefaultXAxis();
+ Title title = new Title();
+ title.setTextObject(Toolkit.i18nText("Fine-Design_Chart_Category"));
+ defaultXAxis.setTitle(title);
+ defaultXAxis.setShowAxisTitle(true);
+ ChartCollection chartCollection = new ChartCollection(chart);
+ return chartCollection;
+ } catch (Exception ex) {
+ FineLoggerFactory.getLogger().error(ex.getMessage(), ex);
+ }
+ return null;
+ }
+
+ @Override
+ public void refresh() {
+
+ }
+
+ @Override
+ public void paint(Graphics g) {
+ ((Graphics2D) g).scale(scaleX, scaleY);
+ // 禁止双缓冲
+ ArrayList dbcomponents = new ArrayList();
+ ComponentUtils.disableBuffer(this.elementCasePreview, dbcomponents);
+
+ if (background == null) {
+ background = ColorBackground.getInstance(Color.WHITE);
+ }
+ background.paint(g, new Rectangle2D.Double(0, 0, 517, 500));
+ this.columnChartPane.paintComponent(g);
+
+ g.translate(COLUMN_CHART_WIDTH, 0);
+ this.lineChartPane.paintComponent(g);
+ g.translate(-COLUMN_CHART_WIDTH, COLUMN_CHART_HEIGHT + 10);
+ this.elementCasePreview.paintContent(g);
+ g.translate(0, -COLUMN_CHART_HEIGHT - 10);
+ // 恢复双缓冲
+ ComponentUtils.resetBuffer(dbcomponents);
+
+ }
+
+ @Override
+ public void paintComponents(Graphics g) {
+ super.paintComponents(g);
+ if (background != null) {
+ background.paint(g, new Rectangle2D.Double(0, 0, this.getWidth(), this.getHeight()));
+ }
+ }
+
+ public void refresh(PredefinedStyle style) {
+ refresh(style, false);
+ }
+
+ public void refresh(PredefinedStyle style, boolean displayFormBackground) {
+ elementCasePreview.refresh(style);
+ columnChartPane.refresh(style);
+ lineChartPane.refresh(style);
+ background = displayFormBackground ? style.getFormBackground().getBackground() : style.getReportBackground();
+ this.repaint();
+ }
+
+ @Override
+ public void callback() {
+ this.repaint();
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/preview/StyleSettingPreviewPane.java b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/preview/StyleSettingPreviewPane.java
new file mode 100644
index 000000000..4fff5841e
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/predefined/ui/preview/StyleSettingPreviewPane.java
@@ -0,0 +1,17 @@
+package com.fr.design.mainframe.predefined.ui.preview;
+
+import javax.swing.JPanel;
+
+/**
+ * Created by kerry on 2020-08-31
+ */
+public abstract class StyleSettingPreviewPane extends JPanel {
+ public StyleSettingPreviewPane() {
+
+ }
+
+
+ public abstract void refresh();
+
+
+}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/SendHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/SendHelper.java
index 694389f30..931e75666 100644
--- a/designer-base/src/main/java/com/fr/design/mainframe/template/info/SendHelper.java
+++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/SendHelper.java
@@ -27,7 +27,7 @@ public class SendHelper {
return success;
}
- private static boolean sendSinglePointInfo(String url, String content) {
+ public static boolean sendSinglePointInfo(String url, String content) {
Map para = new HashMap<>();
para.put("token", SiteCenterToken.generateToken());
para.put("content", content);
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java
index 23c07ea3a..e41759d24 100644
--- a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java
+++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java
@@ -1,7 +1,7 @@
package com.fr.design.mainframe.template.info;
-import com.fr.design.mainframe.burying.point.AbstractPointCollector;
import com.fr.design.mainframe.burying.point.AbstractPointInfo;
+import com.fr.design.mainframe.burying.point.AbstractTemplateInfoCollector;
import com.fr.json.JSON;
import com.fr.json.JSONFactory;
import com.fr.json.JSONObject;
@@ -18,7 +18,7 @@ import java.util.concurrent.ConcurrentHashMap;
* 做模板的过程和耗时收集,辅助类
* Created by plough on 2017/2/21.
*/
-public class TemplateInfoCollector extends AbstractPointCollector {
+public class TemplateInfoCollector extends AbstractTemplateInfoCollector {
private static final String XML_TAG = "TplInfo";
private static final String XML_TEMPLATE_INFO_LIST = "TemplateInfoList";
private static final String XML_FILE_NAME = "tpl.info";
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 25f874993..42d1d3862 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;
@@ -635,11 +633,8 @@ public abstract class ToolBarMenuDock {
}
public MenuDef createCommunityMenuDef() {
-
- MenuDef menuDef = new SnapChatMenuDef(
- com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Community"),
- 'C',
- SnapChatAllTypes.Menu.BBS);
+
+ MenuDef menuDef = new MenuDef(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Community"), 'C');
ShortCut[] otherCommunityShortCuts = createCommunityShortCuts();
for (ShortCut shortCut : otherCommunityShortCuts) {
menuDef.addShortCut(shortCut);
diff --git a/designer-base/src/main/java/com/fr/design/menu/SnapChatMenuDef.java b/designer-base/src/main/java/com/fr/design/menu/SnapChatMenuDef.java
index 2ec3f6c7e..80ba40afe 100644
--- a/designer-base/src/main/java/com/fr/design/menu/SnapChatMenuDef.java
+++ b/designer-base/src/main/java/com/fr/design/menu/SnapChatMenuDef.java
@@ -4,6 +4,7 @@ import com.fr.design.gui.imenu.UIMenu;
import com.fr.design.gui.imenu.UIScrollMenu;
import com.fr.design.notification.SnapChat;
import com.fr.design.notification.SnapChatConfig;
+import com.fr.design.notification.SnapChatFactory;
import com.fr.design.notification.SnapChatKey;
import javax.swing.JMenu;
@@ -19,47 +20,49 @@ import java.awt.image.BufferedImage;
* created by Harrison on 2020/03/16
**/
public class SnapChatMenuDef extends MenuDef implements SnapChat {
-
+
private SnapChatKey uniqueKey;
private SnapChatMenuUI menuUI = new SnapChatMenuUI(this);
-
+ private SnapChat snapChat ;
+
public SnapChatMenuDef(String name, SnapChatKey uniqueKey) {
super(name);
this.uniqueKey = uniqueKey;
+ snapChat = SnapChatFactory.createSnapChat(true, uniqueKey);
}
public SnapChatMenuDef(Boolean rePaint, SnapChatKey uniqueKey) {
super(rePaint);
this.uniqueKey = uniqueKey;
+ snapChat = SnapChatFactory.createSnapChat(true, uniqueKey);
}
public SnapChatMenuDef(String name, char mnemonic, SnapChatKey uniqueKey) {
super(name, mnemonic);
this.uniqueKey = uniqueKey;
+ snapChat = SnapChatFactory.createSnapChat(true, uniqueKey);
}
@Override
public boolean hasRead() {
-
- String calcKey = calcKey();
- Boolean val = SnapChatConfig.getInstance().hasRead(calcKey);
- // 默认读过了。
- return val == null ? defaultStatus() : val;
+ return snapChat.hasRead();
}
@Override
public void markRead() {
-
- String calcKey = calcKey();
- SnapChatConfig.getInstance().markRead(calcKey);
+ snapChat.markRead();
}
-
+
@Override
public boolean defaultStatus() {
-
- return true;
+ return snapChat.defaultStatus();
}
-
+
+ @Override
+ public SnapChatKey key() {
+ return snapChat.key();
+ }
+
@Override
public void addShortCut(ShortCut shortCut) {
@@ -74,13 +77,6 @@ public class SnapChatMenuDef extends MenuDef implements SnapChat {
super.insertShortCut(index, shortCut);
}
-
- @Override
- public SnapChatKey key() {
-
- return this.uniqueKey;
- }
-
@Override
protected MenuListener createMenuListener() {
@@ -97,17 +93,12 @@ public class SnapChatMenuDef extends MenuDef implements SnapChat {
if (shortCut instanceof SnapChatUpdateAction) {
SnapChatUpdateAction action = (SnapChatUpdateAction) shortCut;
if (!action.hasRead()) {
- String calcKey = calcKey();
+ String calcKey = snapChat.calcKey();
SnapChatConfig.getInstance().resetRead(calcKey);
}
}
}
-
- private String calcKey() {
-
- return key().calc();
- }
-
+
@Override
protected UIMenu createJMenu0() {
diff --git a/designer-base/src/main/java/com/fr/design/menu/SnapChatUpdateAction.java b/designer-base/src/main/java/com/fr/design/menu/SnapChatUpdateAction.java
index 9ade76250..8cc073437 100644
--- a/designer-base/src/main/java/com/fr/design/menu/SnapChatUpdateAction.java
+++ b/designer-base/src/main/java/com/fr/design/menu/SnapChatUpdateAction.java
@@ -3,7 +3,7 @@ package com.fr.design.menu;
import com.fr.design.actions.UpdateAction;
import com.fr.design.gui.imenu.UIMenuItem;
import com.fr.design.notification.SnapChat;
-import com.fr.design.notification.SnapChatConfig;
+import com.fr.design.notification.SnapChatFactory;
import com.fr.design.notification.SnapChatKey;
import java.awt.event.ActionEvent;
@@ -12,57 +12,46 @@ import java.awt.event.ActionEvent;
* created by Harrison on 2020/03/22
**/
public abstract class SnapChatUpdateAction extends UpdateAction implements SnapChat {
-
+
private SnapChatKey uniqueKey;
-
+ private SnapChat snapChat ;
+
public SnapChatUpdateAction(SnapChatKey uniqueKey) {
this.uniqueKey = uniqueKey;
+ snapChat = SnapChatFactory.createSnapChat(false, uniqueKey);
}
-
+
@Override
public final void actionPerformed(ActionEvent e) {
-
markRead();
actionPerformed0(e);
}
-
+
protected abstract void actionPerformed0(ActionEvent e);
-
+
@Override
public boolean hasRead() {
-
- String calcKey = calcKey();
- Boolean val = SnapChatConfig.getInstance().hasRead(calcKey);
- return val == null ? defaultStatus() : val;
+ return snapChat.hasRead();
}
-
+
@Override
public void markRead() {
-
- String calcKey = calcKey();
- SnapChatConfig.getInstance().markRead(calcKey);
+ snapChat.markRead();
}
-
+
@Override
public boolean defaultStatus() {
-
- return false;
+ return snapChat.defaultStatus();
}
-
+
@Override
public SnapChatKey key() {
-
- return this.uniqueKey;
- }
-
- private String calcKey() {
-
- return key().calc();
+ return snapChat.key();
}
-
+
@Override
public UIMenuItem createMenuItem() {
-
+
Object object = this.getValue(UIMenuItem.class.getName());
if (object == null && !(object instanceof UIMenuItem)) {
UIMenuItem menuItem = new UIMenuItem(this);
@@ -70,10 +59,10 @@ public abstract class SnapChatUpdateAction extends UpdateAction implements SnapC
menuItem.setName(getName());
menuItem.setUI(new SnapChatMenuItemUI(this));
object = menuItem;
-
+
this.putValue(UIMenuItem.class.getName(), object);
}
return (UIMenuItem) object;
}
-
+
}
diff --git a/designer-base/src/main/java/com/fr/design/menu/SnapChatUtil.java b/designer-base/src/main/java/com/fr/design/menu/SnapChatUtil.java
index 6eb648055..46bede232 100644
--- a/designer-base/src/main/java/com/fr/design/menu/SnapChatUtil.java
+++ b/designer-base/src/main/java/com/fr/design/menu/SnapChatUtil.java
@@ -10,24 +10,31 @@ import java.awt.geom.Ellipse2D;
* created by Harrison on 2020/03/22
**/
public class SnapChatUtil {
-
+ private static final int WIDTH = 4;
+ private static final int HEIGHT = 4;
+ private static final int TOP_GAP = 4;
+ private static final int RIGHT_GAP = 6;
+
+ /**
+ * 绘制菜单项的小红点
+ */
public static void paintSnapChat(Graphics g, Rectangle textRect) {
-
- Color oldColor = g.getColor();
-
- double x = textRect.getWidth();
- x += textRect.getX();
- x += 2;
-
+ double x = textRect.getWidth() + textRect.getX() + 2;
double y = textRect.getY();
-
+ paintRedPoint(g, new Ellipse2D.Double(x, y, WIDTH, HEIGHT));
+ }
+
+ public static void paintPropertyItemPoint(Graphics g, Rectangle bounds) {
+ double x = bounds.getWidth() - RIGHT_GAP;
+ paintRedPoint(g, new Ellipse2D.Double(x, TOP_GAP, WIDTH, HEIGHT));
+ }
+
+ private static void paintRedPoint(Graphics g, Ellipse2D.Double shape) {
+ Color oldColor = g.getColor();
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.red);
- Ellipse2D.Double shape =
- new Ellipse2D.Double(x, y, 4, 4);
g2d.fill(shape);
g2d.draw(shape);
-
g2d.setColor(oldColor);
}
}
diff --git a/designer-base/src/main/java/com/fr/design/notification/AbstractSnapChat.java b/designer-base/src/main/java/com/fr/design/notification/AbstractSnapChat.java
new file mode 100644
index 000000000..0b174da94
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/notification/AbstractSnapChat.java
@@ -0,0 +1,22 @@
+package com.fr.design.notification;
+
+/**
+ * @Author: Yuan.Wang
+ * @Date: 2020/9/27
+ */
+public abstract class AbstractSnapChat implements SnapChat {
+ @Override
+ public boolean hasRead() {
+
+ String calcKey = calcKey();
+ Boolean val = SnapChatConfig.getInstance().hasRead(calcKey);
+ return val == null ? defaultStatus() : val;
+ }
+
+ @Override
+ public void markRead() {
+
+ String calcKey = calcKey();
+ SnapChatConfig.getInstance().markRead(calcKey);
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/design/notification/SnapChat.java b/designer-base/src/main/java/com/fr/design/notification/SnapChat.java
index 4f610c060..71aabb87d 100644
--- a/designer-base/src/main/java/com/fr/design/notification/SnapChat.java
+++ b/designer-base/src/main/java/com/fr/design/notification/SnapChat.java
@@ -32,4 +32,8 @@ public interface SnapChat {
* @return 字符标志
*/
SnapChatKey key();
+
+ default String calcKey() {
+ return key().calc();
+ }
}
diff --git a/designer-base/src/main/java/com/fr/design/notification/SnapChatAllTypes.java b/designer-base/src/main/java/com/fr/design/notification/SnapChatAllTypes.java
index 6aeb384df..34e73d983 100644
--- a/designer-base/src/main/java/com/fr/design/notification/SnapChatAllTypes.java
+++ b/designer-base/src/main/java/com/fr/design/notification/SnapChatAllTypes.java
@@ -6,33 +6,61 @@ import com.fr.stable.CommonUtils;
* created by Harrison on 2020/03/16
**/
public abstract class SnapChatAllTypes {
-
+
public enum Menu implements SnapChatKey {
-
+
/**
* 社区按钮
*/
BBS("BBS");
-
+
private static final String SIGN = "0001";
-
+
private String key;
-
+
Menu(String key) {
this.key = key;
}
-
+
+ public String getKey() {
+ return key;
+ }
+
+ @Override
+ public String calc() {
+
+ return CommonUtils.join(
+ new String[]{SIGN, getKey()}, "-"
+ );
+ }
+ }
+
+ public enum UpdateAction implements SnapChatKey {
+
+ /**
+ * 服务器预定义样式
+ */
+ PREDEFINED_STYLE("PREDEFINED_STYLE");
+
+ private static final String SIGN = "0002";
+
+ private String key;
+
+ UpdateAction(String key) {
+ this.key = key;
+ }
+
public String getKey() {
return key;
}
-
+
@Override
public String calc() {
-
+
return CommonUtils.join(
new String[]{SIGN, getKey()}, "-"
);
}
}
-
+
}
diff --git a/designer-base/src/main/java/com/fr/design/notification/SnapChatFactory.java b/designer-base/src/main/java/com/fr/design/notification/SnapChatFactory.java
new file mode 100644
index 000000000..a3fd463a3
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/notification/SnapChatFactory.java
@@ -0,0 +1,32 @@
+package com.fr.design.notification;
+
+import com.fr.plugin.context.PluginContext;
+
+/**
+ * @Author: Yuan.Wang
+ * @Date: 2020/10/10
+ */
+public class SnapChatFactory {
+ public static SnapChat createSnapChat(boolean defaultStatus, SnapChatKey snapChatKey) {
+ return createSnapChat(defaultStatus, snapChatKey, null);
+ }
+
+ public static SnapChat createSnapChat(boolean defaultStatus, SnapChatKey snapChatKey, PluginContext context) {
+ return new AbstractSnapChat() {
+ @Override
+ public boolean defaultStatus() {
+ return defaultStatus;
+ }
+
+ @Override
+ public SnapChatKey key() {
+ return snapChatKey;
+ }
+
+ @Override
+ public String calcKey() {
+ return context == null ? key().calc() : key().calc(context);
+ }
+ };
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/design/notification/SnapChatKey.java b/designer-base/src/main/java/com/fr/design/notification/SnapChatKey.java
index fa316db35..ecb89e509 100644
--- a/designer-base/src/main/java/com/fr/design/notification/SnapChatKey.java
+++ b/designer-base/src/main/java/com/fr/design/notification/SnapChatKey.java
@@ -1,9 +1,18 @@
package com.fr.design.notification;
+import com.fr.plugin.context.PluginContext;
+
/**
* created by Harrison on 2020/03/16
**/
public interface SnapChatKey {
-
+
String calc();
+
+ /**
+ * 插件刚被安装时不能通过PluginContexts.getContext()方法获取插件上下文,因此加一个接口
+ */
+ default String calc(PluginContext context) {
+ throw new UnsupportedOperationException();
+ }
}
diff --git a/designer-base/src/main/java/com/fr/design/parameter/ParameterArrayPane.java b/designer-base/src/main/java/com/fr/design/parameter/ParameterArrayPane.java
index d3efcae4a..adb0e4847 100644
--- a/designer-base/src/main/java/com/fr/design/parameter/ParameterArrayPane.java
+++ b/designer-base/src/main/java/com/fr/design/parameter/ParameterArrayPane.java
@@ -7,7 +7,7 @@ import com.fr.design.gui.controlpane.JListControlPane;
import com.fr.design.gui.controlpane.NameableCreator;
import com.fr.design.gui.controlpane.NameableSelfCreator;
import com.fr.design.gui.controlpane.UnrepeatedNameHelper;
-import com.fr.design.gui.ilist.ModNameActionListener;
+import com.fr.design.i18n.Toolkit;
import com.fr.general.ComparatorUtils;
import com.fr.stable.Nameable;
import com.fr.stable.StringUtils;
@@ -18,79 +18,74 @@ import java.util.Arrays;
import java.util.List;
public class ParameterArrayPane extends JListControlPane {
- /**
- * Constructor.
- */
- public ParameterArrayPane() {
- super();
- this.addModNameActionListener(new ModNameActionListener() {
- public void nameModed(int index, String oldName, String newName) {
- populateSelectedValue();
- }
+ /**
+ * Constructor.
+ */
+ public ParameterArrayPane() {
+ super();
+ this.addModNameActionListener((index, oldName, newName) -> populateSelectedValue());
+ this.addEditingListener(new PropertyChangeAdapter() {
+ public void propertyChange() {
+ Parameter[] parameters = ParameterConfig.getInstance().getGlobalParameters();
+ String[] allListNames = nameableList.getAllNames();
+ allListNames[editingIndex] = StringUtils.EMPTY;
+ String tempName = getEditingName();
+ if (StringUtils.isEmpty(tempName)) {
+ nameableList.stopEditing();
+ FineJOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(ParameterArrayPane.this), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Empty_Parameter_Name"));
+ setIllegalIndex(editingIndex);
+ return;
+ }
+ if (!ComparatorUtils.equals(tempName, selectedName)
+ && isNameRepeated(new List[]{Arrays.asList(parameters), Arrays.asList(allListNames)}, tempName)) {
+ nameableList.stopEditing();
+ FineJOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(ParameterArrayPane.this),
+ Toolkit.i18nText("Fine-Design_Basic_Duplicate_Parameter_Name"));
+ setIllegalIndex(editingIndex);
+ }
+ }
+ });
+ }
- });
- this.addEditingListener(new PropertyChangeAdapter() {
- public void propertyChange() {
- Parameter[] parameters = ParameterConfig.getInstance().getGlobalParameters();
- String[] allListNames = nameableList.getAllNames();
- allListNames[nameableList.getSelectedIndex()] = StringUtils.EMPTY;
- String tempName = getEditingName();
- if (StringUtils.isEmpty(tempName)) {
- nameableList.stopEditing();
- FineJOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(ParameterArrayPane.this), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Empty_Parameter_Name"));
- setIllegalIndex(editingIndex);
- return;
- }
- if (!ComparatorUtils.equals(tempName, selectedName)
- && isNameRepeated(new List[]{Arrays.asList(parameters), Arrays.asList(allListNames)}, tempName)) {
- nameableList.stopEditing();
- FineJOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(ParameterArrayPane.this),
- com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Duplicate_Parameter_Name"));
- setIllegalIndex(editingIndex);
- }
- }
- });
- }
+ @Override
+ protected String title4PopupWindow() {
+ return Toolkit.i18nText("Fine-Design_Basic_Engine_Schedule_Template_Parameter");
+ }
- @Override
- protected String title4PopupWindow() {
- return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Engine_Schedule_Template_Parameter");
- }
-
- /**
- * 创建模板参数设置组件
- *
- * @return 模板参数设置组件
- */
- public NameableCreator[] createNameableCreators() {
- return new NameableCreator[]{
- new NameableSelfCreator(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Engine_Parameter_Name"), Parameter.class, ParameterPane.class) {
- public Parameter createNameable(UnrepeatedNameHelper helper) {
- // 返回参数设置面板.
- return new Parameter(helper.createUnrepeatedName("p"));
- }
+ /**
+ * 创建模板参数设置组件
+ *
+ * @return 模板参数设置组件
+ */
+ public NameableCreator[] createNameableCreators() {
+ return new NameableCreator[]{
+ new NameableSelfCreator(Toolkit.i18nText("Fine-Design_Basic_Engine_Parameter_Name"), Parameter.class, ParameterPane.class) {
+ public Parameter createNameable(UnrepeatedNameHelper helper) {
+ // 返回参数设置面板.
+ return new Parameter(helper.createUnrepeatedName("p"));
+ }
- @Override
- public String createTooltip() {
- return null;
- }
- }
- };
- }
+ @Override
+ public String createTooltip() {
+ return null;
+ }
+ }
+ };
+ }
- /**
- * 更新参数
+ /**
+ * 更新参数
*
* @return 更新后的参数
- */
- public Parameter[] updateParameters() {
- // Nameable[]居然不能强转成Parameter[],一定要这么写...
- Nameable[] res = this.update();
- Parameter[] res_array = new Parameter[res.length];
- java.util.Arrays.asList(res).toArray(res_array);
+ */
+ public Parameter[] updateParameters() {
+ // Nameable[]居然不能强转成Parameter[],一定要这么写...
+ Nameable[] res = this.update();
+ Parameter[] res_array = new Parameter[res.length];
+ Arrays.asList(res).toArray(res_array);
- return res_array;
- }
+ return res_array;
+ }
}
diff --git a/designer-base/src/main/java/com/fr/design/style/background/gradient/GradientBackgroundPane.java b/designer-base/src/main/java/com/fr/design/style/background/gradient/GradientBackgroundPane.java
index 59aed2a6f..1cbf543a4 100644
--- a/designer-base/src/main/java/com/fr/design/style/background/gradient/GradientBackgroundPane.java
+++ b/designer-base/src/main/java/com/fr/design/style/background/gradient/GradientBackgroundPane.java
@@ -26,6 +26,7 @@ import java.awt.event.ActionListener;
*/
public class GradientBackgroundPane extends BackgroundDetailPane {
private static final long serialVersionUID = -6854603990673031897L;
+ public static final int DEFAULT_GRADIENT_WIDTH = 254;
private UIRadioButton left2right, top2bottom;
private GradientBar gradientBar;
@@ -41,7 +42,7 @@ public class GradientBackgroundPane extends BackgroundDetailPane {
// neil:增加渐变色拖动条
JPanel gradientPanel = FRGUIPaneFactory.createBorderLayout_S_Pane();
JPanel blankJp = new JPanel();
- gradientBar = new GradientBar(4, 254);
+ gradientBar = new GradientBar(4, DEFAULT_GRADIENT_WIDTH);
blankJp.add(gradientBar);
UILabel jl = FRWidgetFactory.createLineWrapLabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Drag_To_Select_Gradient"));
jl.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 20));
diff --git a/designer-base/src/main/java/com/fr/design/style/background/gradient/GradientBar.java b/designer-base/src/main/java/com/fr/design/style/background/gradient/GradientBar.java
index 46d1b9165..b088864c0 100644
--- a/designer-base/src/main/java/com/fr/design/style/background/gradient/GradientBar.java
+++ b/designer-base/src/main/java/com/fr/design/style/background/gradient/GradientBar.java
@@ -192,7 +192,15 @@ public class GradientBar extends JComponent implements UIObserver, ColorSelectab
}
float[] dist = new float[list.size()];
for (int i = 0; i < list.size(); i++) {
- dist[i] = (float) ((list.get(i).getX() - 4) / (max - 4));
+ double value = list.get(i).getX() - 4;
+ double defaultMax = max - 4;
+ if (Double.compare(value, defaultMax) > 0) {
+ // 设置了预定义的渐变色 渐变色起始位置比较大 然后由预定义样式切换到自定义样式 做下等比例转换
+ dist[i] = (float) (value / (GradientBackgroundPane.DEFAULT_GRADIENT_WIDTH - 4));
+ list.get(i).setX(max * dist[i]);
+ } else {
+ dist[i] = (float) (value / defaultMax);
+ }
}
LinearGradientPaint paint = new LinearGradientPaint(start, end, dist, c);
diff --git a/designer-base/src/main/java/com/fr/design/style/background/impl/BPane.java b/designer-base/src/main/java/com/fr/design/style/background/impl/BPane.java
index 9a9805a5c..8f9168676 100644
--- a/designer-base/src/main/java/com/fr/design/style/background/impl/BPane.java
+++ b/designer-base/src/main/java/com/fr/design/style/background/impl/BPane.java
@@ -15,7 +15,7 @@ public abstract class BPane extends BackgroundDetailPane {
this.initComponents(nColumn);
}
- private void initComponents(int nColumn) {
+ protected void initComponents(int nColumn) {
this.setLayout(FRGUIPaneFactory.createBorderLayout());
this.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
diff --git a/designer-base/src/main/java/com/fr/design/style/background/impl/TextureBackgroundPane.java b/designer-base/src/main/java/com/fr/design/style/background/impl/TextureBackgroundPane.java
index 3dd59bd5b..9d1cb168c 100644
--- a/designer-base/src/main/java/com/fr/design/style/background/impl/TextureBackgroundPane.java
+++ b/designer-base/src/main/java/com/fr/design/style/background/impl/TextureBackgroundPane.java
@@ -1,197 +1,59 @@
package com.fr.design.style.background.impl;
-import com.fr.base.GraphHelper;
-import com.fr.base.background.TextureBackground;
import com.fr.design.layout.FRGUIPaneFactory;
+import com.fr.design.style.background.BackgroundDetailPane;
+import com.fr.design.style.background.texture.TextureDetailPane;
import com.fr.general.Background;
-import com.fr.general.ComparatorUtils;
-import javax.swing.*;
-import javax.swing.event.ChangeEvent;
+import javax.swing.BorderFactory;
+import javax.swing.JPanel;
import javax.swing.event.ChangeListener;
-import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.geom.Rectangle2D;
+import java.awt.BorderLayout;
/**
* Texture background pane. TODO kunsnat: 拆出去. 真特么的长..
*/
-public class TextureBackgroundPane extends BPane {
-
- private static final TexturePaint[] EMBED_TEXTURE_PAINT_ARRAY = new TexturePaint[]{
- TextureBackground.NEWSPRINT_TEXTURE_PAINT,
- TextureBackground.RECYCLED_PAPER_TEXTURE_PAINT,
- TextureBackground.PARCHMENT_TEXTURE_PAINT,
- TextureBackground.STATIONERY_TEXTURE_PAINT,
- TextureBackground.GREEN_MARBLE_TEXTURE_PAINT,
- TextureBackground.WHITE_MARBLE_TEXTURE_PAINT,
- TextureBackground.BROWN_MARBLE_TEXTURE_PAINT,
- TextureBackground.GRANITE_TEXTURE_PAINT,
- TextureBackground.BLUE_TISSUE_PAPER_TEXTURE_PAINT,
- TextureBackground.PINK_TISSUE_PAPER_TEXTURE_PAINT,
- TextureBackground.PURPLE_MESH_TEXTURE_PAINT,
- TextureBackground.BOUQUET_TEXTURE_PAINT,
- TextureBackground.PAPYRUS_TEXTURE_PAINT,
- TextureBackground.CANVAS_TEXTURE_PAINT,
- TextureBackground.DENIM_TEXTURE_PAINT,
- TextureBackground.WOVEN_MAT_TEXTURE_PAINT,
- TextureBackground.WATER_DROPLETS_TEXTURE_PAINT,
- TextureBackground.PAPER_BAG_TEXTURE_PAINT,
- TextureBackground.FISH_FOSSIL_TEXTURE_PAINT,
- TextureBackground.SAND_TEXTURE_PAINT,
- TextureBackground.CORK_TEXTURE_PAINT,
- TextureBackground.WALNUT_TEXTURE_PAINT,
- TextureBackground.OAK_TEXTURE_PAINT,
- TextureBackground.MEDIUM_WOOD_TEXTURE_PAINT};
-
- private static final String[] EMBED_TEXTURE_PAINT_DES_ARRAY = new String[]{
- com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Newsprint"),
- com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Recycled_Paper"),
- com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Parchment"),
- com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Stationery"),
- com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Green_Marble"),
- com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_White_Marble"),
- com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Brown_Marble"),
- com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Granite"),
- com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Blue_Tissue_Paper"),
- com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Pink_Tissue_Paper"),
- com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Purple_Mesh"),
- com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Bouquet"),
- com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Papyrus"),
- com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Canvas"),
- com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Denim"),
- com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Woven_Mat"),
- com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Water_Droplets"),
- com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_PaperBag"),
- com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_FishFossil"),
- com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Sand"),
- com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Cork"),
- com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Walnut"),
- com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Oak"),
- com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Medium_Wood")
- };
-
- private TexturePaint texturePaint;
- private TextureButton[] textureButtonArray;
+public class TextureBackgroundPane extends BackgroundDetailPane {
+
+
+ private TextureDetailPane detailPane;
public TextureBackgroundPane() {
- super(8);// 默认的.
+ this(8);// 默认的.
}
- public TextureBackgroundPane(int colum) {
- super(colum);// 自定义的.
- }
+ public TextureBackgroundPane(int column) {
+ this.detailPane = TextureDetailPane.createNormalTextureDetailPane(column);
+ this.setLayout(FRGUIPaneFactory.createBorderLayout());
+ this.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
- protected LayoutManager layoutOfTypePane(int nColumn) {
- return FRGUIPaneFactory.createNColumnGridLayout(nColumn);
+ JPanel contentPane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane();
+ this.add(contentPane, BorderLayout.NORTH);
+
+ JPanel typePane = FRGUIPaneFactory.createTitledBorderPane(titleOfTypePane());
+ contentPane.add(typePane);
+ typePane.add(this.detailPane);
}
+
+
protected String titleOfTypePane() {
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture");
}
- protected void setChildrenOfTypePane(JPanel typePane2) {
- ButtonGroup patternButtonGroup = new ButtonGroup();
- textureButtonArray = new TextureButton[EMBED_TEXTURE_PAINT_ARRAY.length];
- for (int i = 0; i < EMBED_TEXTURE_PAINT_ARRAY.length; i++) {
- textureButtonArray[i] = new TextureButton(
- EMBED_TEXTURE_PAINT_ARRAY[i], EMBED_TEXTURE_PAINT_DES_ARRAY[i]);
- patternButtonGroup.add(textureButtonArray[i]);
- typePane2.add(textureButtonArray[i]);
- }
- }
+
public void populate(Background background) {
- if (background instanceof TextureBackground) {
- TextureBackground textureBackground = (TextureBackground) background;
-
- this.texturePaint = textureBackground.getTexturePaint();
-
- for (int i = 0; i < textureButtonArray.length; i++) {
- if (ComparatorUtils.equals(textureButtonArray[i].getTexturePaint(), this.texturePaint)) {
- textureButtonArray[i].setSelected(true);
- break;
- }
- }
- } else {
- this.textureButtonArray[0].setSelected(true);
- this.texturePaint = textureButtonArray[0].getTexturePaint();
- }
+ this.detailPane.populate(background);
}
public Background update() throws Exception {
- return new TextureBackground(this.texturePaint);
+ return this.detailPane.update();
}
+ @Override
public void addChangeListener(ChangeListener changeListener) {
- for (int i = 0; i < this.textureButtonArray.length; i++) {
- this.textureButtonArray[i].addChangeListener(changeListener);
- }
+ this.detailPane.addChangeListener(changeListener);
}
- /**
- * Texture type button.
- */
- class TextureButton extends JToggleButton implements ActionListener {
-
- private TexturePaint buttonTexturePaint;
-
- public TextureButton(TexturePaint buttonTexturePaint, String tooltip) {
- this.buttonTexturePaint = buttonTexturePaint;
- this.setToolTipText(tooltip);
-
- this.setCursor(new Cursor(Cursor.HAND_CURSOR));
- this.addActionListener(this);
- this.setBorder(null);
- }
-
- public void paintComponent(Graphics g) {
- Graphics2D g2d = (Graphics2D) g;
-
- Dimension d = getSize();
-
- g2d.setPaint(this.buttonTexturePaint);
- GraphHelper.fill(g2d, new Rectangle2D.Double(0, 0, d.width - 1d,
- d.height - 1d));
-
- if (ComparatorUtils.equals(texturePaint, this.buttonTexturePaint)) {// it's
- // selected.
- g2d.setPaint(Color.black);
- } else {
- g2d.setPaint(Color.gray);
- }
- GraphHelper.draw(g2d, new Rectangle2D.Double(0, 0, d.width - 1d,
- d.height - 1d));
- }
-
- public Dimension getPreferredSize() {
- return new Dimension(36, 32);
- }
-
- public TexturePaint getTexturePaint() {
- return this.buttonTexturePaint;
- }
-
- /**
- * set Pattern setIndex.
- */
- public void actionPerformed(ActionEvent evt) {
- TextureBackgroundPane.this.texturePaint = this.getTexturePaint();
-
- fireChagneListener();
- TextureBackgroundPane.this.repaint(); // repaint.
- }
-
- public void addChangeListener(ChangeListener changeListener) {
- this.changeListener = changeListener;
- }
-
- private void fireChagneListener() {
- if (this.changeListener != null) {
- ChangeEvent evt = new ChangeEvent(this);
- this.changeListener.stateChanged(evt);
- }
- }
- }
}
diff --git a/designer-base/src/main/java/com/fr/design/style/background/texture/TextureDetailPane.java b/designer-base/src/main/java/com/fr/design/style/background/texture/TextureDetailPane.java
new file mode 100644
index 000000000..fd6fe7f2c
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/style/background/texture/TextureDetailPane.java
@@ -0,0 +1,208 @@
+package com.fr.design.style.background.texture;
+
+import com.fr.base.GraphHelper;
+import com.fr.base.background.TextureBackground;
+import com.fr.design.layout.FRGUIPaneFactory;
+import com.fr.design.style.background.BackgroundDetailPane;
+import com.fr.general.Background;
+import com.fr.general.ComparatorUtils;
+
+import javax.swing.ButtonGroup;
+import javax.swing.JToggleButton;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import java.awt.Color;
+import java.awt.Cursor;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.GridLayout;
+import java.awt.LayoutManager;
+import java.awt.TexturePaint;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.geom.Rectangle2D;
+
+/**
+ * Created by kerry on 2020-08-31
+ */
+public class TextureDetailPane extends BackgroundDetailPane {
+
+ private static final TexturePaint[] EMBED_TEXTURE_PAINT_ARRAY = new TexturePaint[]{
+ TextureBackground.NEWSPRINT_TEXTURE_PAINT,
+ TextureBackground.RECYCLED_PAPER_TEXTURE_PAINT,
+ TextureBackground.PARCHMENT_TEXTURE_PAINT,
+ TextureBackground.STATIONERY_TEXTURE_PAINT,
+ TextureBackground.GREEN_MARBLE_TEXTURE_PAINT,
+ TextureBackground.WHITE_MARBLE_TEXTURE_PAINT,
+ TextureBackground.BROWN_MARBLE_TEXTURE_PAINT,
+ TextureBackground.GRANITE_TEXTURE_PAINT,
+ TextureBackground.BLUE_TISSUE_PAPER_TEXTURE_PAINT,
+ TextureBackground.PINK_TISSUE_PAPER_TEXTURE_PAINT,
+ TextureBackground.PURPLE_MESH_TEXTURE_PAINT,
+ TextureBackground.BOUQUET_TEXTURE_PAINT,
+ TextureBackground.PAPYRUS_TEXTURE_PAINT,
+ TextureBackground.CANVAS_TEXTURE_PAINT,
+ TextureBackground.DENIM_TEXTURE_PAINT,
+ TextureBackground.WOVEN_MAT_TEXTURE_PAINT,
+ TextureBackground.WATER_DROPLETS_TEXTURE_PAINT,
+ TextureBackground.PAPER_BAG_TEXTURE_PAINT,
+ TextureBackground.FISH_FOSSIL_TEXTURE_PAINT,
+ TextureBackground.SAND_TEXTURE_PAINT,
+ TextureBackground.CORK_TEXTURE_PAINT,
+ TextureBackground.WALNUT_TEXTURE_PAINT,
+ TextureBackground.OAK_TEXTURE_PAINT,
+ TextureBackground.MEDIUM_WOOD_TEXTURE_PAINT};
+
+ private static final String[] EMBED_TEXTURE_PAINT_DES_ARRAY = new String[]{
+ com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Newsprint"),
+ com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Recycled_Paper"),
+ com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Parchment"),
+ com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Stationery"),
+ com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Green_Marble"),
+ com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_White_Marble"),
+ com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Brown_Marble"),
+ com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Granite"),
+ com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Blue_Tissue_Paper"),
+ com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Pink_Tissue_Paper"),
+ com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Purple_Mesh"),
+ com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Bouquet"),
+ com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Papyrus"),
+ com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Canvas"),
+ com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Denim"),
+ com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Woven_Mat"),
+ com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Water_Droplets"),
+ com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_PaperBag"),
+ com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_FishFossil"),
+ com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Sand"),
+ com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Cork"),
+ com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Walnut"),
+ com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Oak"),
+ com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture_Medium_Wood")
+ };
+
+
+ private TexturePaint texturePaint;
+ private TextureButton[] textureButtonArray;
+
+ private TextureDetailPane(LayoutManager layoutManager, Dimension perTextureBtnSize) {
+// this.setForeground(Color.WHITE);
+// this.setBackground(Color.WHITE);
+ this.setLayout(layoutManager);
+ this.setChildrenOfTypePane(perTextureBtnSize);
+ }
+
+ public static TextureDetailPane createNormalTextureDetailPane(int nColumn) {
+ return new TextureDetailPane(FRGUIPaneFactory.createNColumnGridLayout(nColumn), new Dimension(36, 32));
+ }
+
+ public static TextureDetailPane createMiniTextureDetailPane(int nColumn) {
+ return new TextureDetailPane(new GridLayout(0, nColumn, 2, 2), new Dimension(23, 23));
+ }
+
+
+ protected void setChildrenOfTypePane(Dimension dimension) {
+ ButtonGroup patternButtonGroup = new ButtonGroup();
+ textureButtonArray = new TextureButton[EMBED_TEXTURE_PAINT_ARRAY.length];
+ for (int i = 0; i < EMBED_TEXTURE_PAINT_ARRAY.length; i++) {
+ textureButtonArray[i] = new TextureButton(
+ EMBED_TEXTURE_PAINT_ARRAY[i], EMBED_TEXTURE_PAINT_DES_ARRAY[i]);
+ textureButtonArray[i].setPreferredSize(dimension);
+ patternButtonGroup.add(textureButtonArray[i]);
+ this.add(textureButtonArray[i]);
+ }
+ }
+
+ public void populate(Background background) {
+ if (background instanceof TextureBackground) {
+ TextureBackground textureBackground = (TextureBackground) background;
+
+ this.texturePaint = textureBackground.getTexturePaint();
+
+ for (int i = 0; i < textureButtonArray.length; i++) {
+ if (ComparatorUtils.equals(textureButtonArray[i].getTexturePaint(), this.texturePaint)) {
+ textureButtonArray[i].setSelected(true);
+ break;
+ }
+ }
+ } else {
+ this.textureButtonArray[0].setSelected(true);
+ this.texturePaint = textureButtonArray[0].getTexturePaint();
+ }
+ }
+
+ public Background update() throws Exception {
+ return new TextureBackground(this.texturePaint);
+ }
+
+ public void addChangeListener(ChangeListener changeListener) {
+ for (int i = 0; i < this.textureButtonArray.length; i++) {
+ this.textureButtonArray[i].addChangeListener(changeListener);
+ }
+ }
+
+ /**
+ * Texture type button.
+ */
+ class TextureButton extends JToggleButton implements ActionListener {
+
+ private TexturePaint buttonTexturePaint;
+
+ public TextureButton(TexturePaint buttonTexturePaint, String tooltip) {
+ this.buttonTexturePaint = buttonTexturePaint;
+ this.setToolTipText(tooltip);
+
+ this.setCursor(new Cursor(Cursor.HAND_CURSOR));
+ this.addActionListener(this);
+ this.setBorder(null);
+ }
+
+ public void paintComponent(Graphics g) {
+ Graphics2D g2d = (Graphics2D) g;
+
+ Dimension d = getSize();
+
+ g2d.setPaint(this.buttonTexturePaint);
+ GraphHelper.fill(g2d, new Rectangle2D.Double(0, 0, d.width - 1d,
+ d.height - 1d));
+
+ if (ComparatorUtils.equals(texturePaint, this.buttonTexturePaint)) {// it's
+ // selected.
+ g2d.setPaint(Color.black);
+ } else {
+ g2d.setPaint(Color.gray);
+ }
+ GraphHelper.draw(g2d, new Rectangle2D.Double(0, 0, d.width - 1d,
+ d.height - 1d));
+ }
+
+ public Dimension getPreferredSize() {
+ return new Dimension(36, 32);
+ }
+
+ public TexturePaint getTexturePaint() {
+ return this.buttonTexturePaint;
+ }
+
+ /**
+ * set Pattern setIndex.
+ */
+ public void actionPerformed(ActionEvent evt) {
+ TextureDetailPane.this.texturePaint = this.getTexturePaint();
+
+ fireChagneListener();
+ TextureDetailPane.this.repaint(); // repaint.
+ }
+
+ public void addChangeListener(ChangeListener changeListener) {
+ this.changeListener = changeListener;
+ }
+
+ private void fireChagneListener() {
+ if (this.changeListener != null) {
+ ChangeEvent evt = new ChangeEvent(this);
+ this.changeListener.stateChanged(evt);
+ }
+ }
+ }
+}
diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/style/ChartColorAdjustPane.java b/designer-base/src/main/java/com/fr/design/style/color/ColorAdjustPane.java
similarity index 94%
rename from designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/style/ChartColorAdjustPane.java
rename to designer-base/src/main/java/com/fr/design/style/color/ColorAdjustPane.java
index b053a5eb9..909501857 100644
--- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/style/ChartColorAdjustPane.java
+++ b/designer-base/src/main/java/com/fr/design/style/color/ColorAdjustPane.java
@@ -1,14 +1,12 @@
-package com.fr.design.mainframe.chart.gui.style;
+package com.fr.design.style.color;
import com.fr.base.BaseUtils;
import com.fr.base.background.ColorBackground;
-import com.fr.design.chartx.component.button.ColorButton;
import com.fr.design.event.UIObserver;
import com.fr.design.event.UIObserverListener;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.layout.VerticalFlowLayout;
import com.fr.design.style.AbstractSelectBox;
-import com.fr.design.style.color.ColorSelectPane;
import javax.swing.JPanel;
import javax.swing.event.ChangeEvent;
@@ -32,7 +30,7 @@ import java.awt.image.BufferedImage;
* @version 10.0
* Created by Bjorn on 2020-03-25
*/
-public class ChartColorAdjustPane extends JPanel implements UIObserver {
+public class ColorAdjustPane extends JPanel implements UIObserver {
public static final Color[] DEFAULT_COLORS = {
new Color(99, 178, 238),
@@ -58,11 +56,11 @@ public class ChartColorAdjustPane extends JPanel implements UIObserver {
private ChangeListener changeListener;
- public ChartColorAdjustPane() {
+ public ColorAdjustPane() {
this(DEFAULT_COLORS);
}
- public ChartColorAdjustPane(Color[] colors) {
+ public ColorAdjustPane(Color[] colors) {
iniListener();
createColorButton(colors);
createContentPane();
@@ -217,7 +215,7 @@ public class ChartColorAdjustPane extends JPanel implements UIObserver {
if(colorButtons.size() < MAX_BUTTON) {
colorButtons.add(createColorButton(color));
}
- ChartColorAdjustPane.this.stateChanged();
+ ColorAdjustPane.this.stateChanged();
relayout();
}
});
diff --git a/designer-chart/src/main/java/com/fr/design/chartx/component/button/ColorButton.java b/designer-base/src/main/java/com/fr/design/style/color/ColorButton.java
similarity index 97%
rename from designer-chart/src/main/java/com/fr/design/chartx/component/button/ColorButton.java
rename to designer-base/src/main/java/com/fr/design/style/color/ColorButton.java
index dd908505d..f5f2288ff 100644
--- a/designer-chart/src/main/java/com/fr/design/chartx/component/button/ColorButton.java
+++ b/designer-base/src/main/java/com/fr/design/style/color/ColorButton.java
@@ -1,9 +1,8 @@
-package com.fr.design.chartx.component.button;
+package com.fr.design.style.color;
import com.fr.base.BaseUtils;
import com.fr.base.background.ColorBackground;
import com.fr.design.style.AbstractSelectBox;
-import com.fr.design.style.color.ColorSelectPane;
import javax.swing.JPanel;
import javax.swing.event.ChangeEvent;
diff --git a/designer-base/src/main/java/com/fr/design/style/color/ColorSelectPane.java b/designer-base/src/main/java/com/fr/design/style/color/ColorSelectPane.java
index c82eac0c0..437b3c8c4 100644
--- a/designer-base/src/main/java/com/fr/design/style/color/ColorSelectPane.java
+++ b/designer-base/src/main/java/com/fr/design/style/color/ColorSelectPane.java
@@ -53,25 +53,19 @@ public class ColorSelectPane extends TransparentPane implements ColorSelectable
initialCompents(isSupportTransparent);
}
- private void initialCompents(boolean isSupportTransparent) {
+ protected void initialCompents(boolean isSupportTransparent) {
this.setLayout(FRGUIPaneFactory.createBorderLayout());
this.setBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, 5));
if (isSupportTransparent) {
- UIButton transpanrentButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_ChartF_Transparency"));
- this.add(transpanrentButton, BorderLayout.NORTH);
- transpanrentButton.addActionListener(new ActionListener() {
-
- @Override
- public void actionPerformed(ActionEvent e) {
- doTransparent();
- }
- });
+ this.add(createTranspanrentButton(), BorderLayout.NORTH);
}
+ this.add(createCenterPane(), BorderLayout.CENTER);
+ }
+ protected JPanel createCenterPane(){
// center
JPanel centerPane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane();
- this.add(centerPane, BorderLayout.CENTER);
centerPane.add(getRow1Pane());
@@ -98,6 +92,19 @@ public class ColorSelectPane extends TransparentPane implements ColorSelectable
centerPane1.setBorder(BorderFactory.createEmptyBorder(2, 8, 8, 8));
centerPane1.add(customButton, BorderLayout.NORTH);
centerPane.add(centerPane1);
+ return centerPane;
+ }
+
+ protected UIButton createTranspanrentButton(){
+ UIButton transpanrentButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_ChartF_Transparency"));
+ transpanrentButton.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ doTransparent();
+ }
+ });
+ return transpanrentButton;
}
protected JPanel getMenuColorPane() {
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 f443a10ec..d3d2c59c6 100644
--- a/designer-base/src/main/java/com/fr/design/utils/DesignUtils.java
+++ b/designer-base/src/main/java/com/fr/design/utils/DesignUtils.java
@@ -6,14 +6,17 @@ import com.fr.concurrent.NamedThreadFactory;
import com.fr.design.DesignerEnvManager;
import com.fr.design.ExtraDesignClassManager;
import com.fr.design.dialog.FineJOptionPane;
+import com.fr.design.env.DesignerWorkspaceInfo;
import com.fr.design.fun.DesignerEnvProcessor;
import com.fr.design.gui.UILookAndFeel;
+import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.DesignerContext;
import com.fr.exit.DesignerExiter;
import com.fr.file.FileFILE;
import com.fr.general.ComparatorUtils;
import com.fr.general.FRFont;
import com.fr.general.GeneralContext;
+import com.fr.general.GeneralUtils;
import com.fr.log.FineLoggerFactory;
import com.fr.stable.ArrayUtils;
import com.fr.stable.CommonCodeUtils;
@@ -21,8 +24,11 @@ import com.fr.stable.StableUtils;
import com.fr.stable.StringUtils;
import com.fr.stable.os.OperatingSystem;
import com.fr.start.ServerStarter;
+import com.fr.value.NotNullLazyValue;
import com.fr.workspace.WorkContext;
-
+import org.jetbrains.annotations.NotNull;
+import com.fr.workspace.connect.WorkspaceConnectionInfo;
+import com.fr.workspace.engine.channel.http.FunctionalHttpRequest;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import java.awt.Desktop;
@@ -248,6 +254,7 @@ public class DesignUtils {
// 刷新DesignerFrame里面的面板
SwingUtilities.invokeLater(new Runnable() {
+ @Override
public void run() {
if (DesignerContext.getDesignerFrame() == null) {
return;
@@ -269,7 +276,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()) {
@@ -286,41 +293,50 @@ public class DesignUtils {
}
/**
- * 获取当前系统语言下设计器用的默认字体
+ * 获取当前系统语言下设计器界面使用的默认字体
*
* @return 默认字体
*/
- private static FRFont getCurrentLocaleFont() {
- 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");
- }
+ public static FRFont getDefaultGUIFont() {
+ return CURRENT_LOCALE_FONT.getValue();
+ }
- //先初始化的设计器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");
- if (!guiFRFont.canDisplay(displayChar)) {
- //比如想在中文或英文系统里用韩文设计器
+ /**
+ * 获取当前系统语言下设计器用的默认字体
+ */
+ 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");
+ }
+
+ String file = Toolkit.i18nText("Fine-Design_Basic_File");
+ char displayChar = file.charAt(0);
+ if (!guiFRFont.canDisplay(displayChar)) {
+ //如果不能用默认的语言显示字体, 比如想在英文系统里用中文设计器
+ //默认语言(中文:宋体, 英文: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);
@@ -404,4 +420,23 @@ public class DesignUtils {
public static boolean sendFeedBack(FeedBackInfo feedBackInfo) throws Exception {
return true;
}
+
+
+ public static boolean checkDesignerRemoteVersion() {
+ if (WorkContext.getCurrent().isLocal()){
+ return true;
+ }
+ String envName = DesignerEnvManager.getEnvManager().getCurEnvName();
+ DesignerWorkspaceInfo selectedEnv = DesignerEnvManager.getEnvManager().getWorkspaceInfo(envName);
+ String localBranch;
+ String remoteBranch;
+ WorkspaceConnectionInfo connectionInfo = selectedEnv.getConnection();
+ localBranch = GeneralUtils.readFullBuildNO();
+ try {
+ remoteBranch = new FunctionalHttpRequest(connectionInfo).getServerBranch();
+ } catch (Exception e) {
+ return false;
+ }
+ return localBranch.contains("#") && localBranch.equals(remoteBranch);
+ }
}
diff --git a/designer-base/src/main/java/com/fr/design/write/submit/DBManipulationPane.java b/designer-base/src/main/java/com/fr/design/write/submit/DBManipulationPane.java
index 590f9d112..ccf01dd5e 100644
--- a/designer-base/src/main/java/com/fr/design/write/submit/DBManipulationPane.java
+++ b/designer-base/src/main/java/com/fr/design/write/submit/DBManipulationPane.java
@@ -53,6 +53,7 @@ import javax.swing.BorderFactory;
import javax.swing.DefaultCellEditor;
import javax.swing.DefaultComboBoxModel;
import javax.swing.Icon;
+import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
@@ -867,13 +868,14 @@ public class DBManipulationPane extends BasicBeanPane {
textLabel = new UILabel();
textLabel.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
+ vPaneDLG.setAlwaysOnTop(true);
vPaneDLG.setVisible(true);
}
});
vPane = new ValuePane(types);
- vPaneDLG = vPane.showSmallWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() {
+ vPaneDLG = vPane.showSmallWindow(new JFrame(), new DialogActionAdapter() {
public void doOk() {
fireEditingStopped(); // Make the renderer
// reappear.
diff --git a/designer-base/src/main/java/com/fr/env/RemoteEnvPane.java b/designer-base/src/main/java/com/fr/env/RemoteEnvPane.java
index 515ce3690..0b7d64ee1 100644
--- a/designer-base/src/main/java/com/fr/env/RemoteEnvPane.java
+++ b/designer-base/src/main/java/com/fr/env/RemoteEnvPane.java
@@ -4,6 +4,8 @@ import com.fr.design.DesignerEnvManager;
import com.fr.design.ExtraDesignClassManager;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.border.UITitledBorder;
+import com.fr.design.dialog.FineJOptionPane;
+import com.fr.design.dialog.link.MessageWithLink;
import com.fr.design.env.RemoteDesignerWorkspaceInfo;
import com.fr.design.fun.DesignerEnvProcessor;
import com.fr.design.gui.ibutton.UIButton;
@@ -16,6 +18,7 @@ import com.fr.design.gui.itextfield.UITextField;
import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.layout.TableLayoutHelper;
+import com.fr.design.mainframe.DesignerContext;
import com.fr.design.scrollruler.ModLineBorder;
import com.fr.license.exception.RegistEditionException;
import com.fr.log.FineLoggerFactory;
@@ -25,6 +28,7 @@ import com.fr.workspace.WorkContext;
import com.fr.workspace.connect.WorkspaceConnectionInfo;
import com.fr.workspace.engine.exception.WorkspaceAuthException;
+import com.fr.workspace.engine.exception.WorkspaceCheckException;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JDialog;
@@ -53,12 +57,13 @@ import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
-import java.util.function.Supplier;
+
import static com.fr.design.layout.TableLayout.FILL;
import static com.fr.design.layout.TableLayout.PREFERRED;
import static com.fr.env.TestConnectionResult.AUTH_FAILED;
import static com.fr.third.guava.base.Optional.fromNullable;
+import static javax.swing.JOptionPane.ERROR_MESSAGE;
/**
* @author yaohwu
@@ -143,6 +148,12 @@ public class RemoteEnvPane extends BasicBeanPane {
* https 证书路径输入框
*/
private JPanel httpsCertFileInputPanel;
+
+ /**
+ * 当前远程工作目录是否为新创建的
+ */
+ private boolean newCreated;
+
/**
* 主机名,web应用,Servlet,端口监听器
*/
@@ -327,12 +338,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();
@@ -364,7 +378,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
@@ -565,9 +581,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) {
@@ -575,6 +588,8 @@ public class RemoteEnvPane extends BasicBeanPane {
} catch (RegistEditionException e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
throw e;
+ } catch (WorkspaceCheckException e) {
+ return TestConnectionResult.parseByException(e);
}
}
@@ -583,6 +598,14 @@ public class RemoteEnvPane extends BasicBeanPane {
okButton.setEnabled(true);
try {
TestConnectionResult result = get();
+ if (result.isVerifyResult()) {
+ dialog.dispose();
+ FineJOptionPane.showMessageDialog(RemoteEnvPane.this,
+ new MessageWithLink(result.getText(), Toolkit.i18nText("Fine-Design_Basic_Remote_Design_Modify_PassWord"), connection.getUrl() + RemoteWorkspaceURL.SYSTEM_LOGIN_PATH),
+ Toolkit.i18nText("Fine-Design_Basic_Dialog_Message_Title"),
+ ERROR_MESSAGE,
+ UIManager.getIcon("OptionPane.errorIcon"));
+ }
message.setText(result.getText());
uiLabel.setIcon(result.getIcon());
} catch (Exception e) {
@@ -627,7 +650,7 @@ public class RemoteEnvPane extends BasicBeanPane {
message.setBorder(BorderFactory.createEmptyBorder(8, 5, 0, 0));
okButton.setEnabled(false);
- dialog = new JDialog((Dialog) SwingUtilities.getWindowAncestor(RemoteEnvPane.this), UIManager.getString("OptionPane.messageDialogTitle"), true);
+ dialog = new JDialog((Dialog) SwingUtilities.getWindowAncestor(RemoteEnvPane.this), Toolkit.i18nText("Fine-Design_Basic_Dialog_Message_Title"), true);
dialog.setSize(new Dimension(308, 132));
okButton.setEnabled(false);
diff --git a/designer-base/src/main/java/com/fr/env/RemoteWorkspaceURL.java b/designer-base/src/main/java/com/fr/env/RemoteWorkspaceURL.java
index dee40422c..4ea950e84 100644
--- a/designer-base/src/main/java/com/fr/env/RemoteWorkspaceURL.java
+++ b/designer-base/src/main/java/com/fr/env/RemoteWorkspaceURL.java
@@ -9,6 +9,8 @@ import com.fr.stable.StringUtils;
*/
public class RemoteWorkspaceURL implements FCloneable {
+ public static final String SYSTEM_LOGIN_PATH = "#management/system/login";
+
/**
* 默认 web app name
*/
diff --git a/designer-base/src/main/java/com/fr/env/TestConnectionResult.java b/designer-base/src/main/java/com/fr/env/TestConnectionResult.java
index 4524254f4..c44f18487 100644
--- a/designer-base/src/main/java/com/fr/env/TestConnectionResult.java
+++ b/designer-base/src/main/java/com/fr/env/TestConnectionResult.java
@@ -1,12 +1,15 @@
package com.fr.env;
+import com.fr.decision.webservice.exception.login.UserLoginLockException;
+import com.fr.decision.webservice.exception.login.UserPasswordNeedUpdateException;
+import com.fr.decision.webservice.exception.user.UserPasswordStrengthLimitException;
import com.fr.design.i18n.Toolkit;
-import com.fr.log.FineLoggerFactory;
-import com.fr.stable.AssistUtils;
-import com.fr.workspace.WorkContext;
+import com.fr.exception.RemoteDesignPermissionDeniedException;
+import com.fr.general.ComparatorUtils;
+import com.fr.stable.StringUtils;
import com.fr.workspace.connect.WorkspaceConnectionInfo;
-import com.fr.workspace.engine.channel.http.FunctionalHttpRequest;
+import com.fr.workspace.engine.exception.WorkspaceCheckException;
import javax.swing.Icon;
import javax.swing.UIManager;
@@ -76,12 +79,127 @@ public enum TestConnectionResult {
public String getText() {
return Toolkit.i18nText("Fine-Design_Basic_Remote_Connect_Auth_Failed");
}
+ },
+
+ /**
+ * 登录锁定
+ */
+ LOGIN_LOCK {
+
+ private String value;
+
+ @Override
+ public Icon getIcon() {
+ return UIManager.getIcon("OptionPane.errorIcon");
+ }
+
+ @Override
+ public String getText() {
+ return Toolkit.i18nText("Fine-Design_Basic_Remote_Design_Login_Lock", value);
+ }
+
+ @Override
+ public String errorCode() {
+ return UserLoginLockException.ERROR_CODE;
+ }
+
+ @Override
+ public void setValue(String lockMin) {
+ this.value = lockMin;
+ }
+
+ @Override
+ public boolean isVerifyResult() {
+ return true;
+ }
+ },
+
+ /**
+ * 没有远程设计权限
+ */
+ PERMISSION_DENIED {
+ @Override
+ public Icon getIcon() {
+ return UIManager.getIcon("OptionPane.errorIcon");
+ }
+
+ @Override
+ public String getText() {
+ return Toolkit.i18nText("Fine-Design_Basic_Remote_Design_Permission_Denied");
+ }
+
+ @Override
+ public String errorCode() {
+ return RemoteDesignPermissionDeniedException.ERROR_CODE;
+ }
+ },
+
+ /**
+ * 弱密码
+ */
+ PASSWORD_STRENGTH_LIMIT () {
+ @Override
+ public Icon getIcon() {
+ return UIManager.getIcon("OptionPane.errorIcon");
+ }
+
+ @Override
+ public String getText() {
+ return Toolkit.i18nText("Fine-Design_Basic_Remote_Design_Weak_Password");
+ }
+
+ @Override
+ public String errorCode() {
+ return UserPasswordStrengthLimitException.ERROR_CODE;
+ }
+
+ @Override
+ public boolean isVerifyResult() {
+ return true;
+ }
+ },
+
+ /**
+ * 密码更新
+ */
+ PASSWORD_NEED_UPDATE {
+ @Override
+ public Icon getIcon() {
+ return UIManager.getIcon("OptionPane.errorIcon");
+ }
+
+ @Override
+ public String getText() {
+ return Toolkit.i18nText("Fine-Design_Basic_Remote_Design_Update_Password");
+ }
+
+ @Override
+ public String errorCode() {
+ return UserPasswordNeedUpdateException.ERROR_CODE;
+ }
+
+ @Override
+ public boolean isVerifyResult() {
+ return true;
+ }
};
public abstract Icon getIcon();
public abstract String getText();
+ public void setValue(String value) {
+ // do noting
+ }
+
+ public String errorCode() {
+ return StringUtils.EMPTY;
+ }
+
+ public boolean isVerifyResult() {
+ return false;
+ }
+
public static TestConnectionResult parse(Boolean value, WorkspaceConnectionInfo info) {
if (value == null) {
return AUTH_FAILED;
@@ -92,4 +210,17 @@ public enum TestConnectionResult {
//去掉测试连接时所做的检测
return FULLY_SUCCESS;
}
+
+ public static TestConnectionResult parseByException(WorkspaceCheckException e) {
+ for (TestConnectionResult result : values()) {
+ if (ComparatorUtils.equals(e.errorCode(), result.errorCode())) {
+ // 登录锁定 获取下锁定的时间
+ if (ComparatorUtils.equals(result, LOGIN_LOCK)) {
+ result.setValue(e.getMessage().replaceAll("\\D+", StringUtils.EMPTY));
+ }
+ return result;
+ }
+ }
+ return AUTH_FAILED;
+ }
}
diff --git a/designer-base/src/main/resources/com/fr/design/icon/icon_edit.png b/designer-base/src/main/resources/com/fr/design/icon/icon_edit.png
new file mode 100644
index 000000000..f6de9d0d4
Binary files /dev/null and b/designer-base/src/main/resources/com/fr/design/icon/icon_edit.png differ
diff --git a/designer-base/src/main/resources/com/fr/design/icon/icon_predefined_style.png b/designer-base/src/main/resources/com/fr/design/icon/icon_predefined_style.png
new file mode 100644
index 000000000..af81b6b3b
Binary files /dev/null and b/designer-base/src/main/resources/com/fr/design/icon/icon_predefined_style.png differ
diff --git a/designer-base/src/main/resources/com/fr/design/mainframe/predefined/previewData b/designer-base/src/main/resources/com/fr/design/mainframe/predefined/previewData
new file mode 100644
index 000000000..444c5e314
--- /dev/null
+++ b/designer-base/src/main/resources/com/fr/design/mainframe/predefined/previewData
@@ -0,0 +1,11 @@
+城市 当月目标 当月实际完成 月度完成率
+南通市 324,646 324,646 105%
+合肥市 248,938 348,938 103%
+邵阳市 248,938 348,938 103%
+九江市 248,938 348,938 103%
+武汉市 248,938 348,938 103%
+郑州市 248,938 348,938 103%
+无锡市 248,938 348,938 103%
+南京市 248,938 348,938 103%
+苏州市 248,938 348,938 103%
+合计 3200,425 2900,300 95%
diff --git a/designer-base/src/test/java/com/fr/design/mainframe/predefined/info/PredefinedStyleInfoCollectorTest.java b/designer-base/src/test/java/com/fr/design/mainframe/predefined/info/PredefinedStyleInfoCollectorTest.java
new file mode 100644
index 000000000..c3c3242bd
--- /dev/null
+++ b/designer-base/src/test/java/com/fr/design/mainframe/predefined/info/PredefinedStyleInfoCollectorTest.java
@@ -0,0 +1,97 @@
+package com.fr.design.mainframe.predefined.info;
+
+import com.fr.config.BBSAttr;
+import com.fr.config.MarketConfig;
+import com.fr.design.DesignerEnvManager;
+import com.fr.general.GeneralUtils;
+import com.fr.json.JSON;
+import com.fr.json.JSONFactory;
+import com.fr.json.JSONObject;
+import com.fr.stable.ProductConstants;
+import com.fr.third.org.apache.commons.io.FileUtils;
+import org.easymock.EasyMock;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.powermock.api.easymock.PowerMock;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor;
+import org.powermock.modules.junit4.PowerMockRunner;
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * Created by kerry on 2020-09-05
+ */
+@RunWith(PowerMockRunner.class)
+@PrepareForTest({ProductConstants.class, MarketConfig.class, DesignerEnvManager.class, GeneralUtils.class})
+@SuppressStaticInitializationFor({"com.fr.jvm.assist.FineAssist"})
+public class PredefinedStyleInfoCollectorTest {
+ private String filePath;
+ private String initialFileContent;
+
+
+ @Before
+ public void setUp() throws IOException {
+ PowerMock.mockStatic(ProductConstants.class);
+
+ filePath = getClass().getResource("predefinedStyle.info").getPath();
+ String dirPath = filePath.substring(0, filePath.indexOf("predefinedStyle.info"));
+ EasyMock.expect(ProductConstants.getEnvHome()).andReturn(dirPath).anyTimes();
+
+ EasyMock.replay();
+ PowerMock.replayAll();
+ initialFileContent = FileUtils.readFileToString(new File(filePath), "utf-8");
+ }
+
+ @After
+ public void tearDown() throws IOException {
+ FileUtils.writeStringToFile(new File(filePath), initialFileContent, "utf-8");
+ }
+
+ @Test
+ public void testCollectClickNumber() {
+ PredefinedStyleInfoCollector.getInstance().collectClickNumber();
+ Assert.assertEquals(1, PredefinedStyleInfoCollector.getInstance().getClickNumber());
+ }
+
+ @Test
+ public void testCollectUseNumber() {
+ PredefinedStyleInfoCollector.getInstance().collectUseNumber("test");
+ Assert.assertEquals(1, PredefinedStyleInfoCollector.getInstance().getUseNumber());
+ }
+
+ @Test
+ public void testGenerateTotalInfo() {
+ PowerMock.mockStatic(DesignerEnvManager.class);
+ PowerMock.mockStatic(MarketConfig.class);
+ PowerMock.mockStatic(GeneralUtils.class);
+
+ DesignerEnvManager envManager = EasyMock.mock(DesignerEnvManager.class);
+ EasyMock.expect(envManager.getUUID()).andReturn("xxxxx-12345-xxxxx").once();
+ EasyMock.expect(DesignerEnvManager.getEnvManager()).andReturn(envManager).once();
+
+
+ MarketConfig marketConfig = EasyMock.mock(MarketConfig.class);
+ BBSAttr bbsAttr = new BBSAttr();
+ bbsAttr.setBbsUid(12345);
+ EasyMock.expect(marketConfig.getBBSAttr()).andReturn(bbsAttr).once();
+ EasyMock.expect(MarketConfig.getInstance()).andReturn(marketConfig).once();
+
+ EasyMock.expect(GeneralUtils.readFullVersionNO()).andReturn("10.0.9.2020.0817.final");
+
+ EasyMock.replay(envManager, marketConfig);
+
+ PowerMock.replayAll();
+ String content = PredefinedStyleInfoCollector.getInstance().generateTotalInfo();
+ JSONObject jsonObject = JSONFactory.createJSON(JSON.OBJECT, content);
+ Assert.assertEquals("predefinedStyle", jsonObject.getString("functionName"));
+ Assert.assertEquals("FR-F7003", jsonObject.getString("functionId"));
+ Assert.assertEquals("xxxxx-12345-xxxxx", jsonObject.getString("uuid"));
+ Assert.assertEquals(12345, jsonObject.getInt("uid"));
+ Assert.assertEquals("10.0.9.2020.0817.final", jsonObject.getString("jatTime"));
+ }
+
+}
diff --git a/designer-base/src/test/resources/com/fr/design/mainframe/predefined/info/predefinedStyle.info b/designer-base/src/test/resources/com/fr/design/mainframe/predefined/info/predefinedStyle.info
new file mode 100644
index 000000000..1d66b6107
--- /dev/null
+++ b/designer-base/src/test/resources/com/fr/design/mainframe/predefined/info/predefinedStyle.info
@@ -0,0 +1,2 @@
+
+
diff --git a/designer-chart/src/main/java/com/fr/design/chart/gui/ChartComponent.java b/designer-chart/src/main/java/com/fr/design/chart/gui/ChartComponent.java
index 85b13aef7..1a5088a27 100644
--- a/designer-chart/src/main/java/com/fr/design/chart/gui/ChartComponent.java
+++ b/designer-chart/src/main/java/com/fr/design/chart/gui/ChartComponent.java
@@ -7,6 +7,7 @@ import com.fr.base.chart.chartdata.CallbackEvent;
import com.fr.base.chart.result.WebChartIDInfo;
import com.fr.chart.base.ChartConstants;
import com.fr.chart.chartattr.ChartCollection;
+import com.fr.design.file.HistoryTemplateListCache;
import com.fr.design.file.HistoryTemplateListPane;
import com.fr.design.gui.chart.MiddleChartComponent;
import com.fr.log.FineLoggerFactory;
@@ -144,6 +145,7 @@ public class ChartComponent extends MiddleChartComponent implements MouseListene
return;
}
+ chartCollection4Design.setPredefinedStyleName(getGlobalPredefinedStyleName(), false);
Graphics2D g2d = (Graphics2D) g;
Paint oldPaint = g2d.getPaint();
@@ -268,4 +270,8 @@ public class ChartComponent extends MiddleChartComponent implements MouseListene
public void callback() {
this.repaint();
}
+
+ private String getGlobalPredefinedStyleName() {
+ return HistoryTemplateListCache.getInstance().getCurrentEditingTemplate().getTemplatePredefinedStyle();
+ }
}
\ No newline at end of file
diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPaneWithPreStyle.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPaneWithPreStyle.java
new file mode 100644
index 000000000..e27ed43e1
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPaneWithPreStyle.java
@@ -0,0 +1,97 @@
+package com.fr.design.mainframe.chart.gui.style;
+
+import com.fr.chart.base.TextAttr;
+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.van.chart.designer.TableLayout4VanChartHelper;
+
+import javax.swing.JPanel;
+import javax.swing.SwingConstants;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+/**
+ * @author Bjorn
+ * @version 10.0
+ * Created by Bjorn on 2020-09-03
+ */
+public class ChartTextAttrPaneWithPreStyle extends ChartTextAttrPane {
+
+ private static final int PREDEFINED_STYLE = 0;
+ private static final int CUSTOM = 1;
+
+ private UIButtonGroup preButton;
+ private JPanel textFontPane;
+
+ public ChartTextAttrPaneWithPreStyle() {
+ initListener();
+ }
+
+ protected JPanel getContentPane(JPanel buttonPane) {
+ preButton = new UIButtonGroup<>(new String[]{Toolkit.i18nText("Fine-Design_Chart_Predefined"),
+ Toolkit.i18nText("Fine-Design_Chart_Custom")});
+ double f = TableLayout.FILL;
+ double e = getEdithAreaWidth();
+ double[] columnSize = {f, e};
+ double p = TableLayout.PREFERRED;
+ textFontPane = TableLayout4VanChartHelper.createGapTableLayoutPane(getComponents(buttonPane), getRowSize(), columnSize);
+
+ double[] rowSize = {p, p, p};
+ UILabel text = new UILabel(Toolkit.i18nText("Fine-Design_Chart_Character"), SwingConstants.LEFT);
+ Component[][] components = {
+ new Component[]{null, null},
+ new Component[]{text, preButton},
+ new Component[]{textFontPane, null},
+ };
+ return TableLayout4VanChartHelper.createGapTableLayoutPane(components, rowSize, columnSize);
+ }
+
+ protected double getEdithAreaWidth() {
+ return TableLayout4VanChartHelper.EDIT_AREA_WIDTH;
+ }
+
+ protected Component[][] getComponents(JPanel buttonPane) {
+ return new Component[][]{
+ new Component[]{null, getFontNameComboBox()},
+ new Component[]{null, buttonPane}
+ };
+ }
+
+ private void initListener() {
+ preButton.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ checkPreButton();
+ }
+ });
+ }
+
+ private void checkPreButton() {
+ textFontPane.setVisible(preButton.getSelectedIndex() == CUSTOM);
+ textFontPane.setPreferredSize(preButton.getSelectedIndex() == CUSTOM ? new Dimension(0, 60) : new Dimension(0, 0));
+ }
+
+ public void populate(TextAttr textAttr) {
+ if (textAttr.isPredefinedStyle()) {
+ preButton.setSelectedIndex(PREDEFINED_STYLE);
+ } else {
+ preButton.setSelectedIndex(CUSTOM);
+ }
+ super.populate(textAttr);
+ checkPreButton();
+ }
+
+ public void update(TextAttr textAttr) {
+ int selectedIndex = preButton.getSelectedIndex();
+ if (selectedIndex == PREDEFINED_STYLE) {
+ textAttr.setPredefinedStyle(true);
+ } else {
+ textAttr.setPredefinedStyle(false);
+ }
+ super.update(textAttr);
+ }
+}
diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/style/ColorSelectBoxWithPreStyle.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/style/ColorSelectBoxWithPreStyle.java
new file mode 100644
index 000000000..a4a0344fa
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/style/ColorSelectBoxWithPreStyle.java
@@ -0,0 +1,88 @@
+package com.fr.design.mainframe.chart.gui.style;
+
+import com.fr.chart.base.ColorWithPreStyle;
+import com.fr.design.dialog.BasicPane;
+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.style.color.ColorSelectBox;
+import com.fr.van.chart.designer.TableLayout4VanChartHelper;
+
+import javax.swing.JPanel;
+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;
+
+/**
+ * @author Bjorn
+ * @version 10.0
+ * Created by Bjorn on 2020-09-07
+ */
+public class ColorSelectBoxWithPreStyle extends BasicPane {
+
+ private static final int PREDEFINED_STYLE = 0;
+ private static final int CUSTOM = 1;
+
+ private UIButtonGroup preButton;
+ private ColorSelectBox colorSelectBox;
+
+ public ColorSelectBoxWithPreStyle(int preferredWidth) {
+ preButton = new UIButtonGroup<>(new String[]{Toolkit.i18nText("Fine-Design_Chart_Predefined"),
+ Toolkit.i18nText("Fine-Design_Chart_Custom")});
+ colorSelectBox = new ColorSelectBox(preferredWidth);
+ initContent();
+ initListener();
+ }
+
+ private void initContent() {
+ double f = TableLayout.FILL;
+ double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH;
+ double[] columnSize = {f, e};
+ double p = TableLayout.PREFERRED;
+
+ double[] rowSize = {p, p, p};
+ UILabel text = new UILabel(Toolkit.i18nText("Fine-Design_Chart_Color"), SwingConstants.LEFT);
+ Component[][] components = {
+ new Component[]{text, preButton},
+ new Component[]{null, colorSelectBox},
+ };
+ JPanel gapTableLayoutPane = TableLayout4VanChartHelper.createGapTableLayoutPane(components, rowSize, columnSize);
+ this.setLayout(new BorderLayout());
+ this.add(gapTableLayoutPane, BorderLayout.CENTER);
+ }
+
+ private void initListener() {
+ preButton.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ checkPreButton();
+ }
+ });
+ }
+
+ private void checkPreButton() {
+ colorSelectBox.setVisible(preButton.getSelectedIndex() == CUSTOM);
+ this.setPreferredSize(preButton.getSelectedIndex() == CUSTOM ? new Dimension(0, 55) : new Dimension(0, 23));
+ }
+
+ public String title4PopupWindow() {
+ return null;
+ }
+
+ public void populate(ColorWithPreStyle colorWithPreStyle) {
+ preButton.setSelectedIndex(colorWithPreStyle.isPredefinedStyle() ? PREDEFINED_STYLE : CUSTOM);
+ colorSelectBox.setSelectObject(colorWithPreStyle.getColor());
+ checkPreButton();
+ }
+
+ public ColorWithPreStyle update() {
+ ColorWithPreStyle colorWithPreStyle = new ColorWithPreStyle();
+ colorWithPreStyle.setPredefinedStyle(preButton.getSelectedIndex() == PREDEFINED_STYLE);
+ colorWithPreStyle.setColor(colorSelectBox.getSelectObject());
+ return colorWithPreStyle;
+ }
+}
diff --git a/designer-chart/src/main/java/com/fr/design/module/ChartPreFillStylePane.java b/designer-chart/src/main/java/com/fr/design/module/ChartPreFillStylePane.java
index 09ba3d3ce..8091a78eb 100644
--- a/designer-chart/src/main/java/com/fr/design/module/ChartPreFillStylePane.java
+++ b/designer-chart/src/main/java/com/fr/design/module/ChartPreFillStylePane.java
@@ -8,7 +8,7 @@ import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
-import com.fr.design.mainframe.chart.gui.style.ChartColorAdjustPane;
+import com.fr.design.style.color.ColorAdjustPane;
import com.fr.design.style.background.gradient.FixedGradientBar;
import javax.swing.BorderFactory;
@@ -38,7 +38,7 @@ public class ChartPreFillStylePane extends BasicBeanPane {
private UIButtonGroup groupButton;
- private ChartColorAdjustPane colorAdjustPane;
+ private ColorAdjustPane colorAdjustPane;
private FixedGradientBar colorGradient;
public ChartPreFillStylePane() {
@@ -59,7 +59,7 @@ public class ChartPreFillStylePane extends BasicBeanPane {
changeColorSetPane = new JPanel(cardLayout = new CardLayout());
changeColorSetPane.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 0));
changeColorSetPane.add(colorGradient = new FixedGradientBar(4, 150), "gradient");
- changeColorSetPane.add(colorAdjustPane = new ChartColorAdjustPane(), "acc");
+ changeColorSetPane.add(colorAdjustPane = new ColorAdjustPane(), "acc");
cardLayout.show(changeColorSetPane, "acc");
customPane.add(changeColorSetPane, BorderLayout.CENTER);
@@ -124,9 +124,9 @@ public class ChartPreFillStylePane extends BasicBeanPane {
if (colorList.isEmpty()) {
List resultList = new ArrayList<>();
- Collections.addAll(resultList, ChartColorAdjustPane.DEFAULT_COLORS);
+ Collections.addAll(resultList, ColorAdjustPane.DEFAULT_COLORS);
condition.setColorList(resultList);
- colorAdjustPane.updateColor(ChartColorAdjustPane.DEFAULT_COLORS);
+ colorAdjustPane.updateColor(ColorAdjustPane.DEFAULT_COLORS);
} else {
colorAdjustPane.updateColor(colorList.toArray(new Color[colorList.size()]));
}
diff --git a/designer-chart/src/main/java/com/fr/design/module/ChartPreStyleManagerPane.java b/designer-chart/src/main/java/com/fr/design/module/ChartPreStyleManagerPane.java
index 44b504ef3..98f3862dc 100644
--- a/designer-chart/src/main/java/com/fr/design/module/ChartPreStyleManagerPane.java
+++ b/designer-chart/src/main/java/com/fr/design/module/ChartPreStyleManagerPane.java
@@ -2,7 +2,7 @@ package com.fr.design.module;
import com.fr.base.ChartColorMatching;
import com.fr.base.ChartPreStyleConfig;
-import com.fr.design.chartx.component.combobox.ColorSchemeComboBox;
+import com.fr.design.gui.icombobox.ColorSchemeComboBox;
import com.fr.design.dialog.BasicPane;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.i18n.Toolkit;
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 c23a5c921..25eb587d8 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/box/VanChartBoxTooltipContentPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/box/VanChartBoxTooltipContentPane.java
@@ -7,6 +7,13 @@ 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;
@@ -48,6 +55,9 @@ public class VanChartBoxTooltipContentPane extends VanChartTooltipContentPane {
private JPanel dataNumberPane;
private JPanel dataOutlierPane;
+ private JPanel richTextNumberPane;
+ private JPanel richTextOutlierPane;
+
public VanChartBoxTooltipContentPane(VanChartStylePane parent, JPanel showOnPane, boolean isDetailed) {
super(parent, showOnPane);
checkFormatVisible(isDetailed);
@@ -145,6 +155,16 @@ public class VanChartBoxTooltipContentPane extends VanChartTooltipContentPane {
return commonPanel;
}
+ protected JPanel createRichFormatPanel() {
+ JPanel richFormatPanel = new JPanel(new BorderLayout());
+
+ richFormatPanel.add(createRichTextCateAndSeriesPane(), BorderLayout.NORTH);
+ richFormatPanel.add(createRichTextDataNumberPane(), BorderLayout.CENTER);
+ richFormatPanel.add(createRichTextDataDetailPane(), BorderLayout.SOUTH);
+
+ return richFormatPanel;
+ }
+
protected Component[][] getRichTextComponents() {
return new Component[][]{
new Component[]{getRichTextCategoryNameFormatPane(), null},
@@ -229,6 +249,72 @@ public class VanChartBoxTooltipContentPane extends VanChartTooltipContentPane {
return detailPane;
}
+ private JPanel createRichTextCateAndSeriesPane() {
+ double p = TableLayout.PREFERRED;
+ double f = TableLayout.FILL;
+ double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH;
+
+ double[] columnSize = {f, e};
+ double[] rowSize = {p, p, p};
+
+ Component[][] cateAndSeries = new Component[][]{
+ new Component[]{null, null},
+ new Component[]{null, getRichTextCategoryNameFormatPane()},
+ new Component[]{null, getRichTextSeriesNameFormatPane()}
+ };
+
+ return TableLayoutHelper.createTableLayoutPane(cateAndSeries, rowSize, columnSize);
+ }
+
+ private JPanel createRichTextDataNumberPane() {
+ double p = TableLayout.PREFERRED;
+ double f = TableLayout.FILL;
+ double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH;
+
+ double[] columnSize = {f, e};
+ double[] rowSize = {p, p};
+
+ Component[][] dataNumber = new Component[][]{
+ new Component[]{null, null},
+ new Component[]{null, richTextNumber},
+ };
+
+ richTextNumberPane = TableLayoutHelper.createTableLayoutPane(dataNumber, rowSize, columnSize);
+
+ return richTextNumberPane;
+ }
+
+ private JPanel createRichTextDataDetailPane() {
+ double p = TableLayout.PREFERRED;
+ double f = TableLayout.FILL;
+ double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH;
+
+ double[] columnSize = {f, e};
+
+ JPanel detailPane = new JPanel(new BorderLayout());
+
+ Component[][] richTextDetail = new Component[][]{
+ new Component[]{null, null},
+ new Component[]{null, richTextMax},
+ new Component[]{new UILabel(getLabelContentTitle()), richTextQ3},
+ new Component[]{null, richTextMedian},
+ new Component[]{null, richTextQ1},
+ new Component[]{null, richTextMin}
+ };
+
+ Component[][] dataOutlier = new Component[][]{
+ new Component[]{null, null},
+ new Component[]{null, richTextOutlier},
+ };
+
+ richTextOutlierPane = TableLayoutHelper.createTableLayoutPane(dataOutlier, new double[]{p, p}, columnSize);
+
+ detailPane.add(TableLayoutHelper.createTableLayoutPane(richTextDetail, new double[]{p, p, p, p, p, p}, columnSize), BorderLayout.NORTH);
+ detailPane.add(richTextOutlierPane, BorderLayout.CENTER);
+
+ return detailPane;
+ }
+
public boolean isDirty() {
return getCategoryNameFormatPane().isDirty()
|| getSeriesNameFormatPane().isDirty()
@@ -291,24 +377,48 @@ public class VanChartBoxTooltipContentPane extends VanChartTooltipContentPane {
if (attrTooltipContent instanceof AttrBoxTooltipContent) {
AttrBoxTooltipContent boxTooltipContent = (AttrBoxTooltipContent) attrTooltipContent;
- VanChartFormatPaneWithoutCheckBox[] formatPaneGroup = new VanChartFormatPaneWithoutCheckBox[]{
+ VanChartFormatPaneWithoutCheckBox[] formatPaneGroup = getFormatPaneGroup();
+ AttrTooltipFormat[] formatGroup = getFormatGroup(boxTooltipContent);
+
+ populateRichTextFormat(formatPaneGroup, formatGroup);
+ populateRichText(attrTooltipContent.getRichTextAttr());
+
+ checkRichEditorState(attrTooltipContent);
+ }
+ }
+
+ private VanChartFormatPaneWithoutCheckBox[] getFormatPaneGroup() {
+ if (detailed) {
+ return new VanChartFormatPaneWithoutCheckBox[]{
richTextNumber, richTextMax, richTextQ3, richTextMedian,
richTextQ1, richTextMin, richTextOutlier
};
+ }
- AttrTooltipFormat[] formatGroup = new AttrTooltipFormat[]{
- boxTooltipContent.getRichTextNumber(),
- boxTooltipContent.getRichTextMax(),
- boxTooltipContent.getRichTextQ3(),
- boxTooltipContent.getRichTextMedian(),
- boxTooltipContent.getRichTextQ1(),
- boxTooltipContent.getRichTextMin(),
- boxTooltipContent.getRichTextOutlier()
- };
+ return new VanChartFormatPaneWithoutCheckBox[]{
+ richTextMax, richTextQ3, richTextMedian, richTextQ1, richTextMin
+ };
+ }
- populateRichTextFormat(formatPaneGroup, formatGroup);
- populateRichText(attrTooltipContent.getRichTextAttr());
+ private AttrTooltipFormat[] getFormatGroup(AttrBoxTooltipContent boxTooltipContent) {
+ AttrTooltipDataNumberFormat richTextNumber = boxTooltipContent.getRichTextNumber();
+ AttrTooltipDataMaxFormat richTextMaxFormat = boxTooltipContent.getRichTextMax();
+ AttrTooltipDataQ3Format richTextQ3Format = boxTooltipContent.getRichTextQ3();
+ AttrTooltipDataMedianFormat richTextMedianFormat = boxTooltipContent.getRichTextMedian();
+ AttrTooltipDataQ1Format richTextQ1Format = boxTooltipContent.getRichTextQ1();
+ AttrTooltipDataMinFormat richTextMinFormat = boxTooltipContent.getRichTextMin();
+ AttrTooltipDataOutlierFormat richTextOutlierFormat = boxTooltipContent.getRichTextOutlier();
+
+ if (detailed) {
+ return new AttrTooltipFormat[]{
+ richTextNumber, richTextMaxFormat, richTextQ3Format, richTextMedianFormat,
+ richTextQ1Format, richTextMinFormat, richTextOutlierFormat
+ };
}
+
+ return new AttrTooltipFormat[]{
+ richTextMaxFormat, richTextQ3Format, richTextMedianFormat, richTextQ1Format, richTextMinFormat
+ };
}
protected void updateFormatPane(AttrTooltipContent attrTooltipContent) {
@@ -352,5 +462,8 @@ public class VanChartBoxTooltipContentPane extends VanChartTooltipContentPane {
dataNumberPane.setVisible(detailed);
dataOutlierPane.setVisible(detailed);
+
+ richTextNumberPane.setVisible(detailed);
+ richTextOutlierPane.setVisible(detailed);
}
}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/box/data/table/BoxPlotTableResultDataSeriesPane.java b/designer-chart/src/main/java/com/fr/van/chart/box/data/table/BoxPlotTableResultDataSeriesPane.java
index cfd3ea8d5..5af1fa416 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/box/data/table/BoxPlotTableResultDataSeriesPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/box/data/table/BoxPlotTableResultDataSeriesPane.java
@@ -15,10 +15,10 @@ import com.fr.stable.StringUtils;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
+import java.util.List;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
-import java.util.List;
public class BoxPlotTableResultDataSeriesPane extends AbstractTableDataContentPane {
@@ -66,6 +66,7 @@ public class BoxPlotTableResultDataSeriesPane extends AbstractTableDataContentPa
private JPanel createUIComboBoxPane(UIComboBox comboBox, String title) {
UILabel label = new UILabel(title);
label.setPreferredSize(new Dimension(80, 20));
+ comboBox.setPreferredSize(new Dimension(100, 20));
JPanel panel = new JPanel();
diff --git a/designer-chart/src/main/java/com/fr/van/chart/box/data/table/UIComboBoxWithEditLabel.java b/designer-chart/src/main/java/com/fr/van/chart/box/data/table/UIComboBoxWithEditLabel.java
index 3ba858364..7b51fc564 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/box/data/table/UIComboBoxWithEditLabel.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/box/data/table/UIComboBoxWithEditLabel.java
@@ -31,6 +31,7 @@ public abstract class UIComboBoxWithEditLabel extends JPanel implements UIObserv
editLabel.setPreferredSize(new Dimension(80, 20));
comboBox = new UIComboBox();
+ comboBox.setPreferredSize(new Dimension(100, 20));
this.setLayout(new BorderLayout(4, 0));
this.add(editLabel, BorderLayout.WEST);
diff --git a/designer-chart/src/main/java/com/fr/van/chart/bubble/VanChartBubbleConditionPane.java b/designer-chart/src/main/java/com/fr/van/chart/bubble/VanChartBubbleConditionPane.java
index 4ee071987..18408d7e7 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/bubble/VanChartBubbleConditionPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/bubble/VanChartBubbleConditionPane.java
@@ -20,7 +20,6 @@ import com.fr.van.chart.designer.other.condition.item.VanChartEffectConditionPan
import com.fr.van.chart.designer.other.condition.item.VanChartLabelConditionPane;
import com.fr.van.chart.designer.other.condition.item.VanChartSeriesColorConditionPane;
import com.fr.van.chart.designer.other.condition.item.VanChartTooltipConditionPane;
-import com.fr.van.chart.scatter.component.label.VanChartScatterLabelConditionPane;
import com.fr.van.chart.scatter.component.tooltip.VanChartScatterTooltipConditionPane;
import java.awt.Dimension;
@@ -66,7 +65,7 @@ public class VanChartBubbleConditionPane extends DataSeriesConditionPane {
}
private void addNormalAction() {
- classPaneMap.put(ScatterAttrLabel.class, new VanChartScatterLabelConditionPane(this, plot));
+ classPaneMap.put(ScatterAttrLabel.class, new VanChartLabelConditionPane(this, plot));
classPaneMap.put(ScatterAttrTooltip.class, new VanChartScatterTooltipConditionPane(this, plot));
classPaneMap.put(AttrEffect.class, new VanChartEffectConditionPane(this, EffectHelper.getBubblePlotDefaultEffect()));
}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/bubble/VanChartBubbleStylePane.java b/designer-chart/src/main/java/com/fr/van/chart/bubble/VanChartBubbleStylePane.java
index 63ebd17bb..de4e88070 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/bubble/VanChartBubbleStylePane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/bubble/VanChartBubbleStylePane.java
@@ -6,7 +6,6 @@ import com.fr.design.gui.frpane.AttributeChangeListener;
import com.fr.design.mainframe.chart.gui.style.series.ChartSeriesPane;
import com.fr.plugin.chart.bubble.VanChartBubblePlot;
import com.fr.van.chart.bubble.force.VanChartForceBubbleAreaPane;
-import com.fr.van.chart.bubble.force.VanChartForceBubbleLabelPane;
import com.fr.van.chart.bubble.force.VanChartForceBubbleTooltipPane;
import com.fr.van.chart.designer.style.background.VanChartAreaPane;
import com.fr.van.chart.scatter.component.VanChartScatterStylePane;
@@ -22,17 +21,6 @@ public class VanChartBubbleStylePane extends VanChartScatterStylePane {
super(listener);
}
- @Override
- protected void createVanChartLabelPane(List paneList) {
- Plot plot = getChart().getPlot();
-
- if(((VanChartBubblePlot) plot).isForceBubble()){
- paneList.add(new VanChartForceBubbleLabelPane(VanChartBubbleStylePane.this));
- } else {
- super.createVanChartLabelPane(paneList);
- }
- }
-
protected void addVanChartTooltipPane(List paneList){
Plot plot = getChart().getPlot();
if(((VanChartBubblePlot) plot).isForceBubble()){
diff --git a/designer-chart/src/main/java/com/fr/van/chart/bubble/force/VanChartForceBubbleLabelPane.java b/designer-chart/src/main/java/com/fr/van/chart/bubble/force/VanChartForceBubbleLabelPane.java
deleted file mode 100644
index 13bcac26e..000000000
--- a/designer-chart/src/main/java/com/fr/van/chart/bubble/force/VanChartForceBubbleLabelPane.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.fr.van.chart.bubble.force;
-
-import com.fr.chart.chartattr.Plot;
-import com.fr.van.chart.designer.style.VanChartStylePane;
-import com.fr.van.chart.designer.style.label.VanChartLabelPane;
-import com.fr.van.chart.designer.style.label.VanChartPlotLabelPane;
-
-/**
- * Created by Mitisky on 16/3/31.
- */
-public class VanChartForceBubbleLabelPane extends VanChartLabelPane {
- public VanChartForceBubbleLabelPane(VanChartStylePane parent) {
- super(parent);
- }
-
- protected VanChartPlotLabelPane getLabelPane(Plot plot) {
- return new VanChartPlotLabelPane(plot, parent);
- }
-}
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
index 3243bad71..b2b287087 100644
--- 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
@@ -1,17 +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);
+ public VanChartColumnPlotLabelDetailPane(Plot plot, VanChartStylePane parent, boolean inCondition) {
+ super(plot, parent, inCondition);
+ }
+
+ protected void initToolTipContentPane(Plot plot) {
+ VanChartLabelContentPane dataLabelContentPane = new VanChartLabelContentPane(getParentPane(), VanChartColumnPlotLabelDetailPane.this, isInCondition()) {
+ 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/VanChartColumnPlotLabelPane.java b/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnPlotLabelPane.java
deleted file mode 100644
index e80f6310d..000000000
--- a/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnPlotLabelPane.java
+++ /dev/null
@@ -1,20 +0,0 @@
-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/VanChartColumnSeriesPane.java b/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnSeriesPane.java
index a5a3238d5..c92cfd857 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnSeriesPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnSeriesPane.java
@@ -69,7 +69,7 @@ public class VanChartColumnSeriesPane extends VanChartAbstractPlotSeriesPane {
//边框(有圆角)
protected VanChartBorderPane createDiffBorderPane() {
- return new VanChartBorderWithRadiusPane();
+ return new VanChartBorderWithRadiusPane(true);
}
private JPanel createSeriesStylePane(double[] row, double[] col) {
diff --git a/designer-chart/src/main/java/com/fr/van/chart/custom/style/VanChartCustomPlotLabelTabPane.java b/designer-chart/src/main/java/com/fr/van/chart/custom/style/VanChartCustomPlotLabelTabPane.java
index 5461b220f..04b94ef5c 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/custom/style/VanChartCustomPlotLabelTabPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/custom/style/VanChartCustomPlotLabelTabPane.java
@@ -83,14 +83,14 @@ public class VanChartCustomPlotLabelTabPane extends VanChartCustomPlotTabPane customPlotList = plot.getCustomPlotList();
for (int i = 0; i < paneList.size() && i < customPlotList.size(); i++) {
ConditionAttr attrList = customPlotList.get(i).getConditionCollection().getDefaultAttr();
- DataSeriesCondition attr = customPlotList.get(i).getAttrLabelFromConditionCollection();
- if (attr != null) {
- attrList.remove(attr);
- }
VanChartPlotLabelPane labelPane = (VanChartPlotLabelPane) paneList.get(i);
AttrLabel attrLabel = labelPane.update();
+ DataSeriesCondition attr = customPlotList.get(i).getAttrLabelFromConditionCollection();
+ if (attr != null) {
+ attrList.remove(attr);
+ }
if (attrLabel != null) {
attrList.addDataSeriesCondition(attrLabel);
}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/custom/style/VanChartCustomSeriesPane.java b/designer-chart/src/main/java/com/fr/van/chart/custom/style/VanChartCustomSeriesPane.java
index d92e35506..f8a920dbc 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/custom/style/VanChartCustomSeriesPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/custom/style/VanChartCustomSeriesPane.java
@@ -1,5 +1,6 @@
package com.fr.van.chart.custom.style;
+import com.fr.chart.base.AttrFillStyle;
import com.fr.chart.chartattr.Chart;
import com.fr.chartx.config.info.constant.ConfigType;
import com.fr.design.layout.TableLayout;
@@ -90,10 +91,15 @@ public class VanChartCustomSeriesPane extends ChartSeriesPane {
VanChartCustomPlot plot = (VanChartCustomPlot) chart.getPlot();
- if (fillStylePane != null){
- plot.setPlotFillStyle(fillStylePane.updateBean());
+ if (fillStylePane != null) {
+ AttrFillStyle plotFillStyle = plot.getPlotFillStyle();
+ if(plotFillStyle == null) {
+ plotFillStyle = new AttrFillStyle();
+ plot.setPlotFillStyle(plotFillStyle);
+ }
+ fillStylePane.updateBean(plotFillStyle);
}
- if (seriesPane != null){
+ if (seriesPane != null) {
plotSeriesPane.updateBean(plot);
}
//系列埋点
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 9ea26a5c5..46126d277 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
@@ -24,23 +24,25 @@ 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.column.VanChartColumnPlotLabelDetailPane;
import com.fr.van.chart.designer.component.VanChartLabelContentPane;
import com.fr.van.chart.designer.component.VanChartRefreshTooltipContentPane;
import com.fr.van.chart.designer.component.VanChartTooltipContentPane;
import com.fr.van.chart.designer.style.HeatMapRangeLegendPane;
+import com.fr.van.chart.designer.style.MapRangeLegendPane;
import com.fr.van.chart.designer.style.VanChartPlotLegendPane;
import com.fr.van.chart.designer.style.VanChartRangeLegendPane;
import com.fr.van.chart.designer.style.VanChartStylePane;
import com.fr.van.chart.designer.style.VanLegendPaneWidthOutHighlight;
import com.fr.van.chart.designer.style.label.VanChartGaugePlotLabelPane;
+import com.fr.van.chart.designer.style.label.VanChartPlotLabelDetailPane;
import com.fr.van.chart.designer.style.label.VanChartPlotLabelPane;
import com.fr.van.chart.designer.style.tooltip.VanChartPlotRefreshTooltipPane;
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.label.VanChartGanttPlotLabelPane;
+import com.fr.van.chart.gantt.designer.style.label.VanChartGanttLabelContentPane;
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;
@@ -52,10 +54,10 @@ import com.fr.van.chart.multilayer.style.VanChartMultiPieLabelContentPane;
import com.fr.van.chart.multilayer.style.VanChartMultiPiePlotTooltipPane;
import com.fr.van.chart.multilayer.style.VanChartMultiPieTooltipContentPane;
import com.fr.van.chart.multilayer.style.VanChartMutiPieRefreshTooltipContentPane;
+import com.fr.van.chart.scatter.VanChartScatterLabelContentPane;
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.VanChartStructurePlotLabelPane;
+import com.fr.van.chart.structure.desinger.style.VanChartStructureLabelContentPane;
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.VanChartWordCloudRefreshTooltipContentPane;
@@ -65,12 +67,12 @@ import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
-import java.awt.Component;
import java.lang.reflect.Constructor;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
+import java.awt.Component;
/**
* Created by Mitisky on 16/3/1.
@@ -104,20 +106,6 @@ public class PlotFactory {
return borderAndBackgroundLabelPlots.contains(plot.getClass());
}
- /**
- * 标签Map
- */
- 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);
- }
-
/**
* 图例Map
*/
@@ -128,8 +116,8 @@ public class PlotFactory {
legendMap.put(VanChartMultiPiePlot.class, VanLegendPaneWidthOutHighlight.class);
legendMap.put(VanChartScatterPlot.class, VanChartRangeLegendPane.class);
legendMap.put(VanChartBubblePlot.class, VanChartRangeLegendPane.class);
- legendMap.put(VanChartMapPlot.class, VanChartRangeLegendPane.class);
- legendMap.put(VanChartDrillMapPlot.class, VanChartRangeLegendPane.class);
+ legendMap.put(VanChartMapPlot.class, MapRangeLegendPane.class);
+ legendMap.put(VanChartDrillMapPlot.class, MapRangeLegendPane.class);
legendMap.put(VanChartHeatMapPlot.class, HeatMapRangeLegendPane.class);
legendMap.put(VanChartWordCloudPlot.class, VanChartRangeLegendPane.class);
}
@@ -157,6 +145,10 @@ public class PlotFactory {
labelContentMap.put(VanChartTreeMapPlot.class, VanChartMultiPieLabelContentPane.class);
labelContentMap.put(VanChartFunnelPlot.class, VanChartFunnelLabelContentPane.class);
labelContentMap.put(VanChartHeatMapPlot.class, VanChartMapLabelContentPane.class);
+ labelContentMap.put(VanChartBubblePlot.class, VanChartScatterLabelContentPane.class);
+ labelContentMap.put(VanChartScatterPlot.class, VanChartScatterLabelContentPane.class);
+ labelContentMap.put(VanChartStructurePlot.class, VanChartStructureLabelContentPane.class);
+ labelContentMap.put(VanChartGanttPlot.class, VanChartGanttLabelContentPane.class);
}
private static Map, Class extends VanChartTooltipContentPane>> tooltipContentMap = new HashMap, Class extends VanChartTooltipContentPane>>();
@@ -211,19 +203,24 @@ public class PlotFactory {
* @return 标签界面
*/
public static VanChartPlotLabelPane createPlotLabelPane(Plot plot, VanChartStylePane stylePane) {
- Class extends Plot> key = plot.getClass();
- if (labelMap.containsKey(key)) {
- try {
- Class extends VanChartPlotLabelPane> cl = labelMap.get(key);
- Constructor extends VanChartPlotLabelPane> constructor = cl.getConstructor(Plot.class, VanChartStylePane.class);
- return constructor.newInstance(plot, stylePane);
- } catch (Exception e) {
- FineLoggerFactory.getLogger().error(e.getMessage(), e);
- }
+ return createPlotLabelPane(plot, stylePane, false);
+ }
+
+ public static VanChartPlotLabelPane createPlotLabelPane(Plot plot, VanChartStylePane stylePane, boolean inCondition) {
+ if (plot instanceof VanChartGaugePlot) {
+ return new VanChartGaugePlotLabelPane(plot, stylePane);
}
- return new VanChartPlotLabelPane(plot, stylePane);
+ return new VanChartPlotLabelPane(plot, stylePane, inCondition);
}
+ public static VanChartPlotLabelDetailPane createPlotLabelDetailPane(Plot plot, VanChartStylePane stylePane, boolean inCondition) {
+ if (plot instanceof VanChartColumnPlot) {
+ return new VanChartColumnPlotLabelDetailPane(plot, stylePane, inCondition);
+ }
+ return new VanChartPlotLabelDetailPane(plot, stylePane, inCondition);
+ }
+
+
/**
* 根据图表类型创建图例界面
*
@@ -274,18 +271,22 @@ public class PlotFactory {
* @param showOnPane formatpane用到
* @return 标签的具体内容界面
*/
- public static VanChartTooltipContentPane createPlotLabelContentPane(Plot plot, VanChartStylePane parent, JPanel showOnPane) {
+ public static VanChartTooltipContentPane createPlotLabelContentPane(Plot plot, VanChartStylePane parent, JPanel showOnPane, boolean inCondition) {
Class extends Plot> key = plot.getClass();
+ //力学气泡图特殊
+ if (plot instanceof VanChartBubblePlot && ((VanChartBubblePlot) plot).isForceBubble()) {
+ return new VanChartLabelContentPane(parent, showOnPane, inCondition);
+ }
if (labelContentMap.containsKey(key)) {
try {
Class extends VanChartTooltipContentPane> cl = labelContentMap.get(key);
- Constructor extends VanChartTooltipContentPane> constructor = cl.getConstructor(VanChartStylePane.class, JPanel.class);
- return constructor.newInstance(parent, showOnPane);
+ Constructor extends VanChartTooltipContentPane> constructor = cl.getConstructor(VanChartStylePane.class, JPanel.class, boolean.class);
+ return constructor.newInstance(parent, showOnPane, inCondition);
} catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
}
}
- return new VanChartLabelContentPane(parent, showOnPane);
+ return new VanChartLabelContentPane(parent, showOnPane, inCondition);
}
/**
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartFillStylePane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartFillStylePane.java
index 8f3f83c5b..2299c3585 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartFillStylePane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartFillStylePane.java
@@ -1,159 +1,57 @@
package com.fr.van.chart.designer.component;
-import com.fr.base.ChartColorMatching;
-import com.fr.base.ChartPreStyleConfig;
-import com.fr.base.Utils;
import com.fr.chart.base.AttrFillStyle;
-import com.fr.chart.base.ChartConstants;
-import com.fr.chart.base.ChartUtils;
-import com.fr.design.beans.BasicBeanPane;
-import com.fr.design.chartx.component.combobox.ColorSchemeComboBox;
-import com.fr.design.event.UIObserverListener;
+import com.fr.design.gui.icombobox.ColorSchemeComboBox;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.i18n.Toolkit;
-import com.fr.design.layout.FRGUIPaneFactory;
-import com.fr.design.layout.TableLayout;
import com.fr.design.mainframe.DesignerBean;
import com.fr.design.mainframe.DesignerContext;
-import com.fr.design.mainframe.chart.gui.style.ChartColorAdjustPane;
-import com.fr.design.style.background.gradient.FixedGradientBar;
+import com.fr.design.mainframe.predefined.ui.detail.ColorFillStylePane;
import com.fr.design.utils.gui.GUICoreUtils;
-import com.fr.stable.StringUtils;
-import com.fr.van.chart.designer.TableLayout4VanChartHelper;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
-import java.util.List;
import java.awt.BorderLayout;
-import java.awt.CardLayout;
-import java.awt.Color;
import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
/**
* Created by mengao on 2017/8/17.
*/
-public class VanChartFillStylePane extends BasicBeanPane implements DesignerBean {
+public class VanChartFillStylePane extends ColorFillStylePane implements DesignerBean {
public static final String name = "vanChartFillStyle";
- protected ColorSchemeComboBox styleSelectBox;
- protected JPanel customPane;
- protected JPanel changeColorSetPane;
- protected FixedGradientBar colorGradient;
-
- protected CardLayout cardLayout;
-
- protected ChartColorAdjustPane colorAdjustPane;
-
- private Color[] gradientColors;
- private Color[] accColors;
-
- private boolean gradientSelect = false;
-
public VanChartFillStylePane() {
- this.setLayout(new BorderLayout());
-
- styleSelectBox = new ColorSchemeComboBox();
- customPane = new JPanel(FRGUIPaneFactory.createBorderLayout()) {
- @Override
- public Dimension getPreferredSize() {
- if (!gradientSelect) {
- return colorAdjustPane.getPreferredSize();
- }
- return colorGradient.getPreferredSize();
- }
- };
-
- changeColorSetPane = new JPanel(cardLayout = new CardLayout());
- changeColorSetPane.add(colorGradient = new FixedGradientBar(4, 130), "gradient");
- gradientColors = new Color[]{Color.WHITE, FixedGradientBar.NEW_CHARACTER};
- changeColorSetPane.add(colorAdjustPane = new ChartColorAdjustPane(), "acc");
- accColors = ChartColorAdjustPane.DEFAULT_COLORS;
- cardLayout.show(changeColorSetPane, "acc");
- customPane.add(changeColorSetPane, BorderLayout.CENTER);
- initListener();
- initLayout();
+ super();
DesignerContext.setDesignerBean(name, this);
+ }
+ protected void styleSelectBoxChange() {
+ getCustomPane().setVisible(getStyleSelectBox().getSelectedIndex() != 0);
+ super.styleSelectBoxChange();
}
- private void initListener() {
- colorAdjustPane.registerChangeListener(new UIObserverListener() {
- @Override
- public void doChange() {
- accColors = colorAdjustPane.getColors();
- if (styleSelectBox.getSelectType() != ColorSchemeComboBox.SelectType.COMBINATION_COLOR) {
- styleSelectBox.setSelectType(ColorSchemeComboBox.SelectType.COMBINATION_COLOR);
- }
- VanChartFillStylePane.this.revalidate();
- }
- });
- colorGradient.registerChangeListener(new UIObserverListener() {
- @Override
- public void doChange() {
- gradientColors[0] = colorGradient.getSelectColorPointBtnP1().getColorInner();
- gradientColors[1] = colorGradient.getSelectColorPointBtnP2().getColorInner();
- if (styleSelectBox.getSelectType() != ColorSchemeComboBox.SelectType.GRADATION_COLOR) {
- styleSelectBox.setSelectType(ColorSchemeComboBox.SelectType.GRADATION_COLOR);
- }
- }
- });
- styleSelectBox.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- switch (styleSelectBox.getSelectType()) {
- case COMBINATION_COLOR:
- colorAdjustPane.updateColor(accColors);
- cardLayout.show(changeColorSetPane, "acc");
- gradientSelect = false;
- break;
- case GRADATION_COLOR:
- colorGradient.updateColor(gradientColors[0], gradientColors[1]);
- cardLayout.show(changeColorSetPane, "gradient");
- gradientSelect = true;
- break;
- default:
- ColorSchemeComboBox.ColorInfo selectColorInfo = styleSelectBox.getSelectColorInfo();
- if (selectColorInfo.isGradient()) {
- colorGradient.updateColor(selectColorInfo.getColors().get(0), selectColorInfo.getColors().get(1));
- cardLayout.show(changeColorSetPane, "gradient");
- gradientSelect = true;
- } else {
- colorAdjustPane.updateColor(selectColorInfo.getColors().toArray(new Color[]{}));
- cardLayout.show(changeColorSetPane, "acc");
- gradientSelect = false;
- }
- break;
- }
- VanChartFillStylePane.this.revalidate();
- }
- });
+ protected ColorSchemeComboBox createColorSchemeComboBox() {
+ return new ColorSchemeComboBox(null, true);
}
protected void initLayout() {
- this.setBorder(BorderFactory.createEmptyBorder(0, 0, 5, 0));
- this.setLayout(new BorderLayout());
+ super.initLayout();
this.add(getContentPane(), BorderLayout.CENTER);
}
protected JPanel getContentPane() {
- 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_Match_Color_Scheme")), styleSelectBox},
- new Component[]{null, customPane},
+ JPanel contentPane = super.getContentPane();
+ contentPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 5, 0));
+ return contentPane;
+ }
+ protected Component[][] contentPaneComponents() {
+ return new Component[][]{
+ new Component[]{null, null},
+ new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Match_Color_Scheme")), getStyleSelectBox()},
+ new Component[]{null, getCustomPane()},
};
- JPanel panel = TableLayout4VanChartHelper.createGapTableLayoutPane(components, rowSize, columnSize);
- panel.setBorder(BorderFactory.createEmptyBorder(0, 0, 5, 0));
- return panel;
}
@Override
@@ -161,107 +59,31 @@ public class VanChartFillStylePane extends BasicBeanPane implemen
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Color");
}
- @Override
public void populateBean(AttrFillStyle condition) {
- String fillStyleName = condition == null ? "" : condition.getFillStyleName();
- if (StringUtils.isBlank(fillStyleName) || !styleSelectBox.getItems().contains(fillStyleName)) {//兼容处理
- if (condition == null || condition.getColorStyle() == ChartConstants.COLOR_DEFAULT) {
- styleSelectBox.setSelectType(ColorSchemeComboBox.SelectType.DEFAULT);//默认
- } else {
- int colorStyle = condition.getColorStyle();
- if (colorStyle == ChartConstants.COLOR_GRADIENT) {
- gradientColors[0] = condition.getColorIndex(0);
- gradientColors[1] = condition.getColorIndex(1);
- styleSelectBox.setSelectType(ColorSchemeComboBox.SelectType.GRADATION_COLOR);
- } else {
- int colorSize = condition.getColorSize();
- accColors = new Color[colorSize];
- for (int i = 0; i < colorSize; i++) {
- accColors[i] = condition.getColorIndex(i);
- }
- styleSelectBox.setSelectType(ColorSchemeComboBox.SelectType.COMBINATION_COLOR);
- }
- }
- } else {
- styleSelectBox.setSelectedItem(fillStyleName);
+ if (condition.isPredefinedStyle()) {
+ getStyleSelectBox().setSelectType(ColorSchemeComboBox.SelectType.DEFAULT);
+ return;
}
+ populateBean(condition.getColorFillStyle());
}
- @Override
- public AttrFillStyle updateBean() {
- switch (styleSelectBox.getSelectType()) {
- case COMBINATION_COLOR:
- return updateCombinationColor();
- case GRADATION_COLOR:
- return updateGradationColor();
- case DEFAULT:
- return updateDefaultColor();
- default:
- return updateNormalColor();
- }
- }
-
- private AttrFillStyle updateCombinationColor() {
- AttrFillStyle condition = new AttrFillStyle();
- condition.clearColors();
- condition.setColorStyle(ChartConstants.COLOR_ACC);
- for (int i = 0, length = accColors.length; i < length; i++) {
- condition.addFillColor(accColors[i]);
+ public void updateBean(AttrFillStyle attrFillStyle) {
+ if (getStyleSelectBox().getSelectedIndex() == 0) {
+ attrFillStyle.setPredefinedStyle(true);
+ return;
}
- condition.setCustomFillStyle(true);
- return condition;
- }
-
- private AttrFillStyle updateGradationColor() {
- AttrFillStyle condition = new AttrFillStyle();
- condition.clearColors();
- condition.setColorStyle(ChartConstants.COLOR_GRADIENT);
- Color start = gradientColors[0];
- Color end = gradientColors[1];
- condition.addFillColor(start);
- condition.addFillColor(end);
- condition.setCustomFillStyle(true);
- return condition;
- }
-
- private AttrFillStyle updateDefaultColor() {
- AttrFillStyle condition = new AttrFillStyle();
- condition.clearColors();
- condition.setColorStyle(ChartConstants.COLOR_DEFAULT);
- return condition;
- }
-
- private AttrFillStyle updateNormalColor() {
- ChartPreStyleConfig manager = ChartPreStyleConfig.getInstance();
- Object preStyle = manager.getPreStyle(styleSelectBox.getSelectedItem());
- if (preStyle instanceof ChartColorMatching) {
- AttrFillStyle def = ChartUtils.chartColorMatching2AttrFillStyle((ChartColorMatching) preStyle);
- def.setFillStyleName(Utils.objectToString(styleSelectBox.getSelectedItem()));
- return def;
- } else {
- return updateModifyColor();
- }
- }
-
- private AttrFillStyle updateModifyColor() {
- AttrFillStyle condition = new AttrFillStyle();
- condition.clearColors();
- ColorSchemeComboBox.ColorInfo selectColorInfo = styleSelectBox.getSelectColorInfo();
- boolean isGradient = selectColorInfo.isGradient();
- List colors = selectColorInfo.getColors();
- condition.setColorList(colors);
- condition.setCustomFillStyle(true);
- condition.setColorStyle(isGradient ? ChartConstants.COLOR_GRADIENT : ChartConstants.COLOR_ACC);
- return condition;
+ attrFillStyle.setPredefinedStyle(false);
+ attrFillStyle.setColorFillStyle(updateBean());
}
/**
* 刷新组件对象
*/
public void refreshBeanElement() {
- AttrFillStyle attrFillStyle = updateBean();
+ AttrFillStyle attrFillStyle = new AttrFillStyle();
+ updateBean(attrFillStyle);
- styleSelectBox.refresh();
+ getStyleSelectBox().refresh();
populateBean(attrFillStyle);
GUICoreUtils.repaint(this);
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 7fe05a360..18745f915 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,18 +1,51 @@
package com.fr.van.chart.designer.component;
+import com.fr.design.mainframe.chart.gui.style.ChartTextAttrPaneWithPreStyle;
+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;
+import java.awt.BorderLayout;
public class VanChartLabelContentPane extends VanChartTooltipContentPane {
private static final long serialVersionUID = 5630276526789839288L;
- public VanChartLabelContentPane(VanChartStylePane parent, JPanel showOnPane) {
- super(parent, showOnPane);
+ public VanChartLabelContentPane(VanChartStylePane parent, JPanel showOnPane, boolean inCondition) {
+ super(parent, showOnPane, inCondition);
}
protected VanChartHtmlLabelPane createHtmlLabelPane() {
return new VanChartHtmlLabelPaneWithBackGroundLabel();
}
+
+ protected AttrTooltipContent createAttrTooltip() {
+ return new AttrTooltipContent(TextAlign.CENTER);
+ }
+
+ public JPanel createCommonStylePane() {
+ if (isInCondition()) {
+ return super.createCommonStylePane();
+ }
+ setTextAttrPane(new ChartTextAttrPaneWithPreStyle());
+
+ JPanel stylePanel = new JPanel(new BorderLayout());
+ stylePanel.add(getTextAttrPane(), BorderLayout.CENTER);
+
+ return stylePanel;
+ }
+
+ public void updateTextAttr(AttrTooltipContent attrTooltipContent) {
+ if (isInCondition()) {
+ super.updateTextAttr(attrTooltipContent);
+ return;
+ }
+ if (hasTextStylePane()) {
+ this.getTextAttrPane().update(attrTooltipContent.getTextAttr());
+ if (!attrTooltipContent.getTextAttr().isPredefinedStyle()) {
+ attrTooltipContent.setCustom(true);
+ }
+ }
+ }
}
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
index e584ea544..a13208df5 100644
--- 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
@@ -10,7 +10,7 @@ import java.awt.Frame;
public class VanChartRichEditorDialog extends BasicDialog {
- public static final Dimension DEFAULT = new Dimension(660, 600);
+ public static final Dimension DEFAULT = new Dimension(960, 600);
public VanChartRichEditorDialog(Frame parent, BasicPane pane) {
super(parent, pane);
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartRichEditorPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartRichEditorPane.java
index d1f294e41..622d2a0ee 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartRichEditorPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartRichEditorPane.java
@@ -2,6 +2,7 @@ package com.fr.van.chart.designer.component;
import com.fr.design.ui.ModernUIPane;
import com.fr.plugin.chart.base.AttrTooltipRichText;
+import com.fr.plugin.chart.type.TextAlign;
import com.fr.stable.StringUtils;
import com.teamdev.jxbrowser.chromium.Browser;
import com.teamdev.jxbrowser.chromium.JSValue;
@@ -37,6 +38,7 @@ public class VanChartRichEditorPane {
.prepare(new ScriptContextAdapter() {
public void onScriptContextCreated(ScriptContextEvent event) {
browser = event.getBrowser();
+ browser.getCacheStorage().clearCache();
JSValue ns = browser.executeJavaScriptAndReturnValue("window." + namespace);
ns.asObject().setProperty(variable, model);
@@ -69,18 +71,35 @@ public class VanChartRichEditorPane {
paramsStr.deleteCharAt(len - 1);
}
- return new RichEditorModel(richText.getContent(), richText.isAuto(), paramsStr.toString());
+ String content = richText.getContent();
+ String initParams = StringUtils.EMPTY;
+ String align = StringUtils.EMPTY;
+
+ if (content.contains("data-id") && !content.contains("class")) {
+ initParams = richText.getInitParamsContent();
+
+ String left = TextAlign.LEFT.getAlign();
+ String center = TextAlign.CENTER.getAlign();
+
+ align = content.contains(left) ? left : center;
+ }
+
+ return new RichEditorModel(content, richText.isAuto(), paramsStr.toString(), initParams, align);
}
public static class RichEditorModel {
private String content;
private boolean auto;
private String params;
+ private String initParams;
+ private String align;
- public RichEditorModel(String content, boolean auto, String params) {
+ public RichEditorModel(String content, boolean auto, String params, String initParams, String align) {
this.content = content;
this.auto = auto;
this.params = params;
+ this.initParams = initParams;
+ this.align = align;
}
public String getContent() {
@@ -106,5 +125,21 @@ public class VanChartRichEditorPane {
public void setParams(String params) {
this.params = params;
}
+
+ public String getInitParams() {
+ return initParams;
+ }
+
+ public void setInitParams(String initParams) {
+ this.initParams = initParams;
+ }
+
+ public String getAlign() {
+ return align;
+ }
+
+ public void setAlign(String align) {
+ this.align = align;
+ }
}
}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartTooltipContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartTooltipContentPane.java
index 847cd3891..cc04d9c51 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
@@ -12,9 +12,11 @@ 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;
@@ -55,10 +57,10 @@ public class VanChartTooltipContentPane extends BasicBeanPane content;
@@ -91,8 +93,14 @@ public class VanChartTooltipContentPane extends BasicBeanPane getContent() {
+ return content;
+ }
+
public AttrTooltipRichText getRichTextAttr() {
return richText;
}
@@ -330,7 +354,7 @@ public class VanChartTooltipContentPane extends BasicBeanPane(new String[]{
Toolkit.i18nText("Fine-Design_Chart_Automatic"),
Toolkit.i18nText("Fine-Design_Chart_Custom")
@@ -368,7 +392,9 @@ public class VanChartTooltipContentPane extends BasicBeanPane();
+ paneList = new ArrayList<>();
initList();
@@ -86,7 +98,7 @@ public class VanChartBackgroundPane extends BasicPane {
@Override
public void itemStateChanged(ItemEvent e) {
- cardlayout.show(centerPane, (String)typeComboBox.getSelectedItem());
+ cardlayout.show(centerPane, (String) typeComboBox.getSelectedItem());
fireStateChanged();
}
});
@@ -97,7 +109,7 @@ public class VanChartBackgroundPane extends BasicPane {
protected Component[][] getPaneComponents() {
shadow = new UIButtonGroup(new String[]{com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_On"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Off")}, new Boolean[]{true, false});
- return new Component[][]{
+ return new Component[][]{
new Component[]{null, null},
new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Fill")), typeComboBox},
new Component[]{null, centerPane},
@@ -123,13 +135,14 @@ public class VanChartBackgroundPane extends BasicPane {
if (e == null) {
e = new ChangeEvent(this);
}
- ((ChangeListener)listeners[i + 1]).stateChanged(e);
+ ((ChangeListener) listeners[i + 1]).stateChanged(e);
}
}
}
/**
* 返回标题
+ *
* @return 标题
*/
public String title4PopupWindow() {
@@ -137,16 +150,20 @@ public class VanChartBackgroundPane extends BasicPane {
}
public void populate(GeneralInfo attr) {
- if(attr == null) {
+ if (attr == null) {
return;
}
- Background background = attr.getBackground();
double alpha = attr.getAlpha() * ALPHA_V;
transparent.populateBean(alpha);
- if(shadow != null){
+ if (shadow != null) {
shadow.setSelectedIndex(attr.isShadow() == true ? 0 : 1);
}
- for (int i = 0; i < paneList.size(); i++) {
+ populateBackground(attr, 0);
+ }
+
+ public void populateBackground(GeneralInfo attr, int begin) {
+ Background background = attr.getBackground();
+ for (int i = begin; i < paneList.size(); i++) {
BackgroundQuickPane pane = paneList.get(i);
if (pane.accept(background)) {
pane.populateBean(background);
@@ -160,13 +177,17 @@ public class VanChartBackgroundPane extends BasicPane {
if (attr == null) {
attr = new GeneralInfo();
}
- attr.setBackground(paneList.get(typeComboBox.getSelectedIndex()).updateBean());
- if(attr.getBackground() instanceof ImageBackground){
- ((ImageBackground) attr.getBackground()).setLayout(Constants.IMAGE_EXTEND);
- }
+ updateBackground(attr);
attr.setAlpha((float) (transparent.updateBean() / ALPHA_V));
- if(shadow != null){
+ if (shadow != null) {
attr.setShadow(shadow.getSelectedIndex() == 0);
}
}
+
+ public void updateBackground(GeneralInfo attr) {
+ attr.setBackground(paneList.get(typeComboBox.getSelectedIndex()).updateBean());
+ if (attr.getBackground() instanceof ImageBackground) {
+ ((ImageBackground) attr.getBackground()).setLayout(Constants.IMAGE_EXTEND);
+ }
+ }
}
\ No newline at end of file
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/background/VanChartBackgroundPaneWithPreStyle.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/background/VanChartBackgroundPaneWithPreStyle.java
new file mode 100644
index 000000000..fbb66d2e3
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/background/VanChartBackgroundPaneWithPreStyle.java
@@ -0,0 +1,51 @@
+package com.fr.van.chart.designer.component.background;
+
+import com.fr.chart.base.BackgroundWithPreStyle;
+import com.fr.chart.chartglyph.GeneralInfo;
+import com.fr.design.i18n.Toolkit;
+import com.fr.design.mainframe.backgroundpane.ColorBackgroundQuickPane;
+import com.fr.design.mainframe.backgroundpane.ImageBackgroundQuickPane;
+import com.fr.design.mainframe.backgroundpane.NullBackgroundQuickPane;
+import com.fr.design.mainframe.backgroundpane.VanChartGradientPane;
+
+/**
+ * @author Bjorn
+ * @version 10.0
+ * Created by Bjorn on 2020-09-08
+ */
+public class VanChartBackgroundPaneWithPreStyle extends VanChartBackgroundPane {
+
+ private static final int PREDEFINED_STYLE = 0;
+
+ @Override
+ protected void initList() {
+ paneList.add(new NullBackgroundQuickPane() {
+ public String title4PopupWindow() {
+ return Toolkit.i18nText("Fine-Design_Chart_Predefined");
+ }
+ });
+ paneList.add(new NullBackgroundQuickPane());
+ paneList.add(new ColorBackgroundQuickPane());
+ paneList.add(new ImageBackgroundQuickPane(false));
+ paneList.add(new VanChartGradientPane());
+ }
+
+ public void populateBackground(GeneralInfo attr, int begin) {
+ BackgroundWithPreStyle backgroundWithPreStyle = attr.getBackgroundWithPreStyle();
+ if (backgroundWithPreStyle.isPredefinedStyle()) {
+ typeComboBox.setSelectedIndex(PREDEFINED_STYLE);
+ return;
+ }
+ super.populateBackground(attr, begin + 1);
+ }
+
+ public void updateBackground(GeneralInfo attr) {
+ if (typeComboBox.getSelectedIndex() == PREDEFINED_STYLE) {
+ attr.getBackgroundWithPreStyle().setPredefinedStyle(true);
+ return;
+ }
+ attr.getBackgroundWithPreStyle().setPredefinedStyle(false);
+ super.updateBackground(attr);
+ }
+
+}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/background/VanChartBackgroundWithOutImagePane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/background/VanChartBackgroundWithOutImagePane.java
index e457f8c03..06c7aba70 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/background/VanChartBackgroundWithOutImagePane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/background/VanChartBackgroundWithOutImagePane.java
@@ -1,7 +1,10 @@
package com.fr.van.chart.designer.component.background;
+import com.fr.chart.chartglyph.GeneralInfo;
+import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.backgroundpane.ColorBackgroundQuickPane;
import com.fr.design.mainframe.backgroundpane.NullBackgroundQuickPane;
+import com.fr.design.mainframe.backgroundpane.VanChartGradientPane;
/**
* 图表 属性表.背景设置 界面.(包括 无, 颜色, 渐变)+开启阴影
@@ -10,13 +13,49 @@ import com.fr.design.mainframe.backgroundpane.NullBackgroundQuickPane;
public class VanChartBackgroundWithOutImagePane extends VanChartBackgroundPane {
private static final long serialVersionUID = 1322979785605013853L;
+ private static final int AUTO = 0;
+
public VanChartBackgroundWithOutImagePane() {
- super();
+ this(false);
+ }
+
+ public VanChartBackgroundWithOutImagePane(boolean hasAuto) {
+ super(hasAuto);
}
protected void initList() {
+ if (isHasAuto()) {
+ paneList.add(new NullBackgroundQuickPane() {
+ public String title4PopupWindow() {
+ return Toolkit.i18nText("Fine-Design_Chart_Automatic");
+ }
+ });
+ }
paneList.add(new NullBackgroundQuickPane());
paneList.add(new ColorBackgroundQuickPane());
paneList.add(new VanChartGradientPane());
}
+
+ public void populateBackground(GeneralInfo attr, int begin) {
+ if (isHasAuto()) {
+ if (attr.isAutoBackground()) {
+ typeComboBox.setSelectedIndex(AUTO);
+ return;
+ }
+ super.populateBackground(attr, begin + 1);
+ } else {
+ super.populateBackground(attr, begin);
+ }
+ }
+
+ public void updateBackground(GeneralInfo attr) {
+ if (isHasAuto()) {
+ if (typeComboBox.getSelectedIndex() == AUTO) {
+ attr.setAutoBackground(true);
+ return;
+ }
+ attr.setAutoBackground(false);
+ }
+ super.updateBackground(attr);
+ }
}
\ No newline at end of file
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/background/VanChartBackgroundWithOutShadowWithRadiusPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/background/VanChartBackgroundWithOutShadowWithRadiusPane.java
index dadd754d6..902d10ad7 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/background/VanChartBackgroundWithOutShadowWithRadiusPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/background/VanChartBackgroundWithOutShadowWithRadiusPane.java
@@ -19,6 +19,10 @@ public class VanChartBackgroundWithOutShadowWithRadiusPane extends VanChartBackg
super();
}
+ public VanChartBackgroundWithOutShadowWithRadiusPane(boolean hasAuto){
+ super(hasAuto);
+ }
+
protected Component[][] getPaneComponents() {
radius = new UISpinner(0,1000,1,0);
return new Component[][]{
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/background/VanChartGradientPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/background/VanChartGradientPane.java
index 2cdcf2401..c01b0a50d 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/background/VanChartGradientPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/background/VanChartGradientPane.java
@@ -1,105 +1,13 @@
package com.fr.van.chart.designer.component.background;
-import com.fr.base.background.GradientBackground;
-import com.fr.design.event.UIObserverListener;
-import com.fr.design.gui.ibutton.UIButtonGroup;
-import com.fr.design.gui.ilable.UILabel;
-import com.fr.design.layout.TableLayout;
-import com.fr.design.layout.TableLayoutHelper;
-import com.fr.design.mainframe.backgroundpane.GradientBackgroundQuickPane;
-import com.fr.design.style.background.gradient.FixedGradientBar;
-import com.fr.general.Background;
-
-
-import javax.swing.JPanel;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-import java.awt.BorderLayout;
-import java.awt.Component;
+import com.fr.common.annotations.Compatible;
/**
- * 渐变色设置界面,bar无法拖拽
+ * @author Bjorn
+ * @version 10.0
+ * Created by Bjorn on 2020-10-20
+ * 扩展图表兼容
*/
-public class VanChartGradientPane extends GradientBackgroundQuickPane {
- protected static final int CHART_GRADIENT_WIDTH = 150;
- private static final long serialVersionUID = 256594362341221087L;
-
- private FixedGradientBar gradientBar;
- private UIButtonGroup directionPane;
-
- public VanChartGradientPane() {
- constructPane();
- }
-
- protected void constructPane(){
- String[] textArray = {com.fr.design.i18n.Toolkit.i18nText("FIne-Design_Report_Utils_Left_To_Right"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Utils_Top_To_Bottom")};
- Integer[] valueArray = {GradientBackground.LEFT2RIGHT, GradientBackground.TOP2BOTTOM};
- directionPane = new UIButtonGroup(textArray, valueArray);
- directionPane.setSelectedIndex(0);
- gradientBar = new FixedGradientBar(4, CHART_GRADIENT_WIDTH);
-
- double p = TableLayout.PREFERRED;
- double f = TableLayout.FILL;
- double[] columnSize = {p, f};
- double[] rowSize = {p, p, p};
-
- Component[][] components = new Component[][]{
- new Component[]{gradientBar, null},
- new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Gradient_Direction")),directionPane},
- };
- JPanel Gradient = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize);
- this.setLayout(new BorderLayout());
- this.add(Gradient, BorderLayout.CENTER);
- }
-
- public void populateBean(Background background) {
- GradientBackground bg = (GradientBackground) background;
- this.gradientBar.getSelectColorPointBtnP1().setColorInner(bg.getStartColor());
- this.gradientBar.getSelectColorPointBtnP2().setColorInner(bg.getEndColor());
- directionPane.setSelectedItem(bg.getDirection());
- this.gradientBar.repaint();
- }
-
- public GradientBackground updateBean() {
- GradientBackground gb = new GradientBackground(gradientBar.getSelectColorPointBtnP1().getColorInner(), gradientBar.getSelectColorPointBtnP2().getColorInner());
- gb.setDirection(directionPane.getSelectedItem());
-
- return gb;
- }
-
- /**
- * 给组件登记一个观察者监听事件
- *
- * @param listener 观察者监听事件
- */
- public void registerChangeListener(final UIObserverListener listener) {
- gradientBar.addChangeListener(new ChangeListener() {
- public void stateChanged(ChangeEvent e) {
- listener.doChange();
- }
- });
- directionPane.addChangeListener(new ChangeListener() {
- public void stateChanged(ChangeEvent e) {
- listener.doChange();
- }
- });
- }
-
- /**
- * 是否接受
- * @param background 背景
- * @return 是则返回true
- */
- public boolean accept(Background background) {
- return background instanceof GradientBackground;
- }
-
- /**
- * 名称
- * @return 名称
- */
- public String title4PopupWindow() {
- return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Gradient_Color");
- }
-
+@Compatible
+public class VanChartGradientPane extends com.fr.design.mainframe.backgroundpane.VanChartGradientPane {
}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/border/VanChartBorderPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/border/VanChartBorderPane.java
index 4514e39b9..94f66b63a 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/border/VanChartBorderPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/border/VanChartBorderPane.java
@@ -4,6 +4,7 @@ package com.fr.van.chart.designer.component.border;
import com.fr.chart.base.AttrBorder;
import com.fr.chart.chartglyph.GeneralInfo;
import com.fr.design.dialog.BasicPane;
+import com.fr.design.gui.ibutton.UIButtonGroup;
import com.fr.design.gui.icombobox.LineComboBox;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.i18n.Toolkit;
@@ -17,47 +18,105 @@ import com.fr.van.chart.designer.TableLayout4VanChartHelper;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
//线型 + 颜色
public class VanChartBorderPane extends BasicPane {
private static final long serialVersionUID = -7770029552989609464L;
+
+ private UIButtonGroup autoButton;
protected LineComboBox currentLineCombo;
protected ColorSelectBox currentLineColorPane;
+ protected JPanel colorPanel;
+
public VanChartBorderPane() {
+ this(false);
+ }
+
+ public VanChartBorderPane(boolean hasAuto) {
+ if (hasAuto) {
+ autoButton = new UIButtonGroup<>(new String[]{Toolkit.i18nText("Fine-Design_Chart_Automatic"),
+ Toolkit.i18nText("Fine-Design_Chart_Custom")});
+ initListener();
+ }
initComponents();
+ initColorPanel();
+ initContent();
}
protected void initComponents() {
currentLineCombo = new LineComboBox(CoreConstants.STRIKE_LINE_STYLE_ARRAY_4_CHART);
currentLineColorPane = new ColorSelectBox(100);
+ }
+
+ protected void initContent() {
double f = TableLayout.FILL;
double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH;
double[] columnSize = {f, e};
Component[][] components = getUseComponent();
JPanel panel = TableLayout4VanChartHelper.createGapTableLayoutPane(components, getRowSize(), columnSize);
this.setLayout(new BorderLayout());
- this.add(panel,BorderLayout.CENTER);
+ this.add(panel, BorderLayout.CENTER);
+ }
+
+ protected void initColorPanel() {
+ double p = TableLayout.PREFERRED;
+ double f = TableLayout.FILL;
+ double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH;
+ double[] columnSize = {f, e};
+ double[] rowSize;
+ UILabel colorLabel = FRWidgetFactory.createLineWrapLabel(Toolkit.i18nText("Fine-Design_Chart_Color"));
+ Component[][] components;
+ if (autoButton != null) {
+ rowSize = new double[]{p, p};
+ components = new Component[][]{
+ new Component[]{colorLabel, autoButton},
+ new Component[]{null, currentLineColorPane}
+ };
+ } else {
+ rowSize = new double[]{p};
+ components = new Component[][]{
+ new Component[]{colorLabel, currentLineColorPane}
+ };
+ }
+ colorPanel = TableLayout4VanChartHelper.createGapTableLayoutPane(components, rowSize, columnSize);
+ }
+
+ protected double[] getRowSize() {
+ double p = TableLayout.PREFERRED;
+ return new double[]{p, p, p, p};
}
protected Component[][] getUseComponent() {
UILabel lineStyleLabel = FRWidgetFactory.createLineWrapLabel(Toolkit.i18nText("Fine-Design_Chart_Line_Style"));
- UILabel colorLabel = FRWidgetFactory.createLineWrapLabel(Toolkit.i18nText("Fine-Design_Chart_Color"));
return new Component[][]{
- new Component[]{null,null},
+ new Component[]{null, null},
new Component[]{lineStyleLabel, UIComponentUtils.wrapWithBorderLayoutPane(currentLineCombo)},
- new Component[]{colorLabel, currentLineColorPane},
+ new Component[]{colorPanel, null},
};
}
- protected double[] getRowSize() {
- double p = TableLayout.PREFERRED;
- return new double[]{p, p, p, p};
+ private void initListener() {
+ autoButton.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ checkPreButton();
+ }
+ });
+ }
+
+ private void checkPreButton() {
+ currentLineColorPane.setVisible(autoButton.getSelectedIndex() == 1);
+ currentLineColorPane.setPreferredSize(autoButton.getSelectedIndex() == 1 ? new Dimension(0, 20) : new Dimension(0, 0));
}
/**
* 标题
+ *
* @return 标题
*/
public String title4PopupWindow() {
@@ -65,44 +124,73 @@ public class VanChartBorderPane extends BasicPane {
}
public void populate(GeneralInfo attr) {
- if(attr == null) {
+ if (attr == null) {
return;
}
- currentLineCombo.setSelectedLineStyle(attr.getBorderStyle());
- currentLineColorPane.setSelectObject(attr.getBorderColor());
+ if (currentLineCombo != null) {
+ currentLineCombo.setSelectedLineStyle(attr.getBorderStyle());
+ }
+ if (currentLineColorPane != null) {
+ currentLineColorPane.setSelectObject(attr.getBorderColor());
+ }
}
public void update(GeneralInfo attr) {
- if(attr == null) {
+ if (attr == null) {
attr = new GeneralInfo();
}
- attr.setBorderStyle(currentLineCombo.getSelectedLineStyle());
- attr.setBorderColor(currentLineColorPane.getSelectObject());
+ if (currentLineCombo != null) {
+ attr.setBorderStyle(currentLineCombo.getSelectedLineStyle());
+ }
+ if (currentLineColorPane != null) {
+ attr.setBorderColor(currentLineColorPane.getSelectObject());
+ }
}
- public void update(AttrBorder attrBorder){
- if(attrBorder == null){
+ public void update(AttrBorder attrBorder) {
+ if (attrBorder == null) {
return;
}
- attrBorder.setBorderStyle(currentLineCombo.getSelectedLineStyle());
- attrBorder.setBorderColor(currentLineColorPane.getSelectObject());
+ if (autoButton != null) {
+ attrBorder.setAutoColor(autoButton.getSelectedIndex() == 0);
+ }
+ if (currentLineCombo != null) {
+ attrBorder.setBorderStyle(currentLineCombo.getSelectedLineStyle());
+ }
+ if (currentLineColorPane != null) {
+ attrBorder.setBorderColor(currentLineColorPane.getSelectObject());
+ }
}
public void populate(AttrBorder attr) {
- if(attr == null) {
+ if (attr == null) {
return;
}
- currentLineCombo.setSelectedLineStyle(attr.getBorderStyle());
- currentLineColorPane.setSelectObject(attr.getBorderColor());
+ if (autoButton != null) {
+ autoButton.setSelectedIndex(attr.isAutoColor() ? 0 : 1);
+ checkPreButton();
+ }
+ if (currentLineCombo != null) {
+ currentLineCombo.setSelectedLineStyle(attr.getBorderStyle());
+ }
+ if (currentLineColorPane != null) {
+ currentLineColorPane.setSelectObject(attr.getBorderColor());
+ }
}
public AttrBorder update() {
AttrBorder attr = new AttrBorder();
-
- attr.setBorderStyle(currentLineCombo.getSelectedLineStyle());
- attr.setBorderColor(currentLineColorPane.getSelectObject());
+ if (autoButton != null) {
+ attr.setAutoColor(autoButton.getSelectedIndex() == 0);
+ }
+ if (currentLineCombo != null) {
+ attr.setBorderStyle(currentLineCombo.getSelectedLineStyle());
+ }
+ if (currentLineColorPane != null) {
+ attr.setBorderColor(currentLineColorPane.getSelectObject());
+ }
return attr;
}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/border/VanChartBorderPaneWithPreStyle.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/border/VanChartBorderPaneWithPreStyle.java
new file mode 100644
index 000000000..790082ae4
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/border/VanChartBorderPaneWithPreStyle.java
@@ -0,0 +1,57 @@
+package com.fr.van.chart.designer.component.border;
+
+import com.fr.chart.chartglyph.GeneralInfo;
+import com.fr.design.gui.icombobox.LineComboBox;
+import com.fr.design.gui.ilable.UILabel;
+import com.fr.design.i18n.Toolkit;
+import com.fr.design.mainframe.chart.gui.style.ColorSelectBoxWithPreStyle;
+import com.fr.design.utils.gui.UIComponentUtils;
+import com.fr.design.widget.FRWidgetFactory;
+import com.fr.stable.CoreConstants;
+
+import java.awt.Component;
+
+/**
+ * @author Bjorn
+ * @version 10.0
+ * Created by Bjorn on 2020-09-07
+ */
+public class VanChartBorderPaneWithPreStyle extends VanChartBorderPane {
+
+ private ColorSelectBoxWithPreStyle colorSelectBoxWithPreStyle;
+
+ public VanChartBorderPaneWithPreStyle() {
+ super();
+ }
+
+ protected void initComponents() {
+ currentLineCombo = new LineComboBox(CoreConstants.STRIKE_LINE_STYLE_ARRAY_4_CHART);
+ colorSelectBoxWithPreStyle = new ColorSelectBoxWithPreStyle(100);
+ }
+
+ protected Component[][] getUseComponent() {
+ UILabel lineStyleLabel = FRWidgetFactory.createLineWrapLabel(Toolkit.i18nText("Fine-Design_Chart_Line_Style"));
+
+ return new Component[][]{
+ new Component[]{null, null},
+ new Component[]{lineStyleLabel, UIComponentUtils.wrapWithBorderLayoutPane(currentLineCombo)},
+ new Component[]{colorSelectBoxWithPreStyle, null},
+ };
+ }
+
+ public void populate(GeneralInfo attr) {
+ super.populate(attr);
+ if (attr == null) {
+ return;
+ }
+ colorSelectBoxWithPreStyle.populate(attr.getColorWithPreStyle());
+ }
+
+ public void update(GeneralInfo attr) {
+ super.update(attr);
+ if (attr == null) {
+ attr = new GeneralInfo();
+ }
+ attr.setColorWithPreStyle(colorSelectBoxWithPreStyle.update());
+ }
+}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/border/VanChartBorderWithAlphaPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/border/VanChartBorderWithAlphaPane.java
index e2ff67c91..724cefe92 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/border/VanChartBorderWithAlphaPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/border/VanChartBorderWithAlphaPane.java
@@ -2,7 +2,6 @@ package com.fr.van.chart.designer.component.border;
import com.fr.design.gui.frpane.UINumberDragPane;
import com.fr.design.gui.ilable.UILabel;
-
import com.fr.design.utils.gui.UIComponentUtils;
import com.fr.design.widget.FRWidgetFactory;
import com.fr.plugin.chart.VanChartAttrHelper;
@@ -19,12 +18,23 @@ import java.awt.Component;
public class VanChartBorderWithAlphaPane extends VanChartBorderPane{
private UINumberDragPane transparent;
+ public VanChartBorderWithAlphaPane() {
+ super();
+ }
+
+ public VanChartBorderWithAlphaPane(boolean hasAuto) {
+ super(hasAuto);
+ }
+
@Override
protected void initComponents() {
+ super.initComponents();
transparent = new UINumberDragPane(0,100);
- this.add(new JSeparator(), BorderLayout.SOUTH);
+ }
- super.initComponents();
+ protected void initContent() {
+ this.add(new JSeparator(), BorderLayout.SOUTH);
+ super.initContent();
}
@Override
@@ -35,7 +45,7 @@ public class VanChartBorderWithAlphaPane extends VanChartBorderPane{
FRWidgetFactory.createLineWrapLabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Line_Style")),
UIComponentUtils.wrapWithBorderLayoutPane(currentLineCombo)
},
- new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Color")),currentLineColorPane},
+ new Component[]{colorPanel, null},
new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Alpha")), transparent}
};
}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/border/VanChartBorderWithRadiusPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/border/VanChartBorderWithRadiusPane.java
index fabf1e669..d6fdf9c69 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/border/VanChartBorderWithRadiusPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/border/VanChartBorderWithRadiusPane.java
@@ -19,15 +19,28 @@ public class VanChartBorderWithRadiusPane extends VanChartBorderPane {
private static final long serialVersionUID = -3937853702118283803L;
private UISpinner radius;
+ public VanChartBorderWithRadiusPane() {
+ super();
+ }
+
+ public VanChartBorderWithRadiusPane(boolean hasAuto) {
+ super(hasAuto);
+ }
+
public UISpinner getRadius() {
return radius;
}
@Override
protected void initComponents() {
+ super.initComponents();
radius = new UISpinner(0,1000,1,0);
+ }
+
+ @Override
+ protected void initContent() {
this.add(new JSeparator(), BorderLayout.SOUTH);
- super.initComponents();
+ super.initContent();
}
@Override
@@ -38,7 +51,7 @@ public class VanChartBorderWithRadiusPane extends VanChartBorderPane {
FRWidgetFactory.createLineWrapLabel(Toolkit.i18nText("Fine-Design_Chart_Line_Style")),
UIComponentUtils.wrapWithBorderLayoutPane(currentLineCombo)
},
- new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Color")),currentLineColorPane},
+ new Component[]{colorPanel, null},
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Report_Radius")),radius}
} ;
}
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 690a6ab24..3e26c7041 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
@@ -13,7 +13,7 @@ import javax.swing.JPanel;
public class GaugeLabelContentPane extends VanChartLabelContentPane {
public GaugeLabelContentPane(VanChartStylePane parent, JPanel showOnPane) {
- super(parent, showOnPane);
+ super(parent, showOnPane, false);
}
protected String getLabelContentTitle() {
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 5bab55e61..8724429f3 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/tooltip/TooltipContentPaneWithOutSeries.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/tooltip/TooltipContentPaneWithOutSeries.java
@@ -57,5 +57,7 @@ public class TooltipContentPaneWithOutSeries extends VanChartTooltipContentPane
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/condition/item/VanChartLabelConditionPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/other/condition/item/VanChartLabelConditionPane.java
index 706a9cb75..115bdb948 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/other/condition/item/VanChartLabelConditionPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/other/condition/item/VanChartLabelConditionPane.java
@@ -3,9 +3,8 @@ package com.fr.van.chart.designer.other.condition.item;
import com.fr.chart.base.DataSeriesCondition;
import com.fr.chart.chartattr.Plot;
import com.fr.design.condition.ConditionAttributesPane;
-
import com.fr.plugin.chart.base.AttrLabel;
-import com.fr.van.chart.designer.style.label.VanChartPlotLabelNoCheckPane;
+import com.fr.van.chart.designer.PlotFactory;
import com.fr.van.chart.designer.style.label.VanChartPlotLabelPane;
import javax.swing.JPanel;
@@ -27,7 +26,7 @@ public class VanChartLabelConditionPane extends AbstractNormalMultiLineCondition
}
protected VanChartPlotLabelPane createLabelPane() {
- return new VanChartPlotLabelNoCheckPane(getPlot(),null);
+ return PlotFactory.createPlotLabelPane(getPlot(), null, true);
}
public VanChartLabelConditionPane(ConditionAttributesPane conditionAttributesPane, Plot plot) {
@@ -36,6 +35,7 @@ public class VanChartLabelConditionPane extends AbstractNormalMultiLineCondition
/**
* 条件属性item的名称
+ *
* @return item的名称
*/
public String nameForPopupMenuItem() {
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/style/HeatMapRangeLegendPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/HeatMapRangeLegendPane.java
index cb316dffe..d77a106a2 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/HeatMapRangeLegendPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/HeatMapRangeLegendPane.java
@@ -7,7 +7,7 @@ import javax.swing.JPanel;
* 只有渐变色图例和区域段图例.
* 没有主题配色
*/
-public class HeatMapRangeLegendPane extends VanChartRangeLegendPane {
+public class HeatMapRangeLegendPane extends MapRangeLegendPane {
public HeatMapRangeLegendPane() {
}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/style/MapRangeLegendPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/MapRangeLegendPane.java
new file mode 100644
index 000000000..c2b1620b4
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/MapRangeLegendPane.java
@@ -0,0 +1,25 @@
+package com.fr.van.chart.designer.style;
+
+import com.fr.van.chart.designer.component.background.VanChartBackgroundPane;
+import com.fr.van.chart.designer.component.background.VanChartBackgroundWithOutImagePane;
+
+/**
+ * @author Bjorn
+ * @version 10.0
+ * Created by Bjorn on 2020-09-11
+ */
+public class MapRangeLegendPane extends VanChartRangeLegendPane {
+
+ public MapRangeLegendPane() {
+ super();
+ }
+
+ public MapRangeLegendPane(VanChartStylePane parent) {
+ super(parent);
+ }
+
+ @Override
+ protected VanChartBackgroundPane creatBackgroundPane(){
+ return new VanChartBackgroundWithOutImagePane(true);
+ }
+}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/style/VanChartPlotLegendPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/VanChartPlotLegendPane.java
index 241a93ea0..ef1e8573a 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/VanChartPlotLegendPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/VanChartPlotLegendPane.java
@@ -14,6 +14,7 @@ import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
import com.fr.design.mainframe.chart.PaneTitleConstants;
import com.fr.design.mainframe.chart.gui.style.ChartTextAttrPane;
+import com.fr.design.mainframe.chart.gui.style.ChartTextAttrPaneWithPreStyle;
import com.fr.design.utils.gui.UIComponentUtils;
import com.fr.plugin.chart.attr.VanChartLegend;
import com.fr.plugin.chart.type.LayoutType;
@@ -21,6 +22,7 @@ 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.VanChartFloatPositionPane;
+import com.fr.van.chart.designer.component.background.VanChartBackgroundPane;
import com.fr.van.chart.designer.component.background.VanChartBackgroundWithOutImagePane;
import com.fr.van.chart.designer.component.border.VanChartBorderWithRadiusPane;
@@ -54,7 +56,7 @@ public class VanChartPlotLegendPane extends BasicPane {
private ChartTextAttrPane textAttrPane;
private VanChartBorderWithRadiusPane borderPane;
- private VanChartBackgroundWithOutImagePane backgroundPane;
+ private VanChartBackgroundPane backgroundPane;
private UIButtonGroup location;
private UIToggleButton customFloatPositionButton;
private UIButtonGroup layoutButton;
@@ -135,7 +137,7 @@ public class VanChartPlotLegendPane extends BasicPane {
protected JPanel createLegendPaneWithoutHighlight() {
borderPane = new VanChartBorderWithRadiusPane();
- backgroundPane = new VanChartBackgroundWithOutImagePane();
+ backgroundPane = creatBackgroundPane();
double p = TableLayout.PREFERRED;
double f = TableLayout.FILL;
@@ -153,9 +155,13 @@ public class VanChartPlotLegendPane extends BasicPane {
return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize);
}
+ protected VanChartBackgroundPane creatBackgroundPane(){
+ return new VanChartBackgroundWithOutImagePane();
+ }
+
protected JPanel createLegendPane() {
borderPane = new VanChartBorderWithRadiusPane();
- backgroundPane = new VanChartBackgroundWithOutImagePane();
+ backgroundPane = creatBackgroundPane();
highlightPane = createHighlightPane();
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
@@ -281,7 +287,7 @@ public class VanChartPlotLegendPane extends BasicPane {
}
private JPanel createTitleStylePane() {
- textAttrPane = new ChartTextAttrPane();
+ textAttrPane = new ChartTextAttrPaneWithPreStyle();
return TableLayout4VanChartHelper.createExpandablePaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Widget_Style"), textAttrPane);
}
@@ -382,7 +388,7 @@ public class VanChartPlotLegendPane extends BasicPane {
legend = new VanChartLegend();
}
legend.setLegendVisible(isLegendVisible.isSelected());
- legend.setFRFont(textAttrPane.updateFRFont());
+ textAttrPane.update(legend.getTextAttr());
borderPane.update(legend);
backgroundPane.update(legend);
@@ -408,7 +414,7 @@ public class VanChartPlotLegendPane extends BasicPane {
public void populateBean(VanChartLegend legend) {
if (legend != null) {
isLegendVisible.setSelected(legend.isLegendVisible());
- textAttrPane.populate(legend.getFRFont());
+ textAttrPane.populate(legend.getTextAttr());
borderPane.populate(legend);
backgroundPane.populate(legend);
if (!legend.isFloating()) {
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/style/VanChartStylePane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/VanChartStylePane.java
index 4dc9b6ba5..32a4f8e54 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/VanChartStylePane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/VanChartStylePane.java
@@ -25,8 +25,8 @@ public class VanChartStylePane extends ChartStylePane {
protected java.util.List getPaneList() {
java.util.List paneList = new ArrayList();
Plot plot = getChart().getPlot();
- paneList.add(new VanChartTitlePane(VanChartStylePane.this));
- if(plot.isSupportLegend()){
+ paneList.add(createVanChartTitlePane());
+ if (plot.isSupportLegend()) {
paneList.add(new VanChartLegendPane(VanChartStylePane.this));
}
@@ -34,14 +34,14 @@ public class VanChartStylePane extends ChartStylePane {
paneList.add(createChartSeriesPane());
- if(plot.isHaveAxis()){
- if(plot instanceof VanChartAxisPlot) {
+ if (plot.isHaveAxis()) {
+ if (plot instanceof VanChartAxisPlot) {
createVanChartAxisPane(paneList, (VanChartAxisPlot) plot);
}
addOtherAxisPane(paneList, plot);
- if(plot.isSupportDataSheet()) {
+ if (plot.isSupportDataSheet()) {
paneList.add(new VanChartDataSheetPane());
}
}
@@ -53,6 +53,10 @@ public class VanChartStylePane extends ChartStylePane {
return paneList;
}
+ protected VanChartTitlePane createVanChartTitlePane() {
+ return new VanChartTitlePane(VanChartStylePane.this);
+ }
+
protected void addOtherAxisPane(java.util.List paneList, Plot plot) {
}
@@ -68,7 +72,7 @@ public class VanChartStylePane extends ChartStylePane {
paneList.add(new VanChartLabelPane(VanChartStylePane.this));
}
- protected void addVanChartTooltipPane(List paneList){
+ protected void addVanChartTooltipPane(List paneList) {
paneList.add(new VanChartTooltipPane(VanChartStylePane.this));
}
}
\ No newline at end of file
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/style/VanChartTitlePane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/VanChartTitlePane.java
index 3d5042e6a..cfcb0debb 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/VanChartTitlePane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/VanChartTitlePane.java
@@ -15,7 +15,7 @@ import com.fr.design.gui.ispinner.UISpinner;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
import com.fr.design.mainframe.chart.PaneTitleConstants;
-import com.fr.design.mainframe.chart.gui.style.ChartTextAttrPane;
+import com.fr.design.mainframe.chart.gui.style.ChartTextAttrPaneWithPreStyle;
import com.fr.design.mainframe.chart.info.ChartInfoCollector;
import com.fr.design.utils.gui.UIComponentUtils;
import com.fr.plugin.chart.attr.VanChartTitle;
@@ -54,7 +54,7 @@ public class VanChartTitlePane extends AbstractVanChartScrollPane {
private JPanel titlePane;
private TinyFormulaPane titleContent;
- private ChartTextAttrPane textAttrPane;
+ private ChartTextAttrPaneWithPreStyle textAttrPane;
private UIButtonGroup alignmentPane;
private VanChartBackgroundWithOutShadowWithRadiusPane backgroundPane;
private UIToggleButton useHtml;
@@ -112,7 +112,7 @@ public class VanChartTitlePane extends AbstractVanChartScrollPane {
}
private JPanel createTitlePane() {
- backgroundPane = new VanChartBackgroundWithOutShadowWithRadiusPane();
+ backgroundPane = createBackgroundPane();
double p = TableLayout.PREFERRED;
@@ -132,6 +132,10 @@ public class VanChartTitlePane extends AbstractVanChartScrollPane {
return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize);
}
+ protected VanChartBackgroundWithOutShadowWithRadiusPane createBackgroundPane() {
+ return new VanChartBackgroundWithOutShadowWithRadiusPane();
+ }
+
private JPanel createTitleContentPane(double[] row, double[] col) {
titleContent = new TinyFormulaPane();
useHtml = new UIToggleButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Html"));
@@ -171,7 +175,7 @@ public class VanChartTitlePane extends AbstractVanChartScrollPane {
}
private JPanel createTitleStylePane() {
- textAttrPane = new ChartTextAttrPane();
+ textAttrPane = new ChartTextAttrPaneWithPreStyle();
return TableLayout4VanChartHelper.createExpandablePaneWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Widget_Style"), textAttrPane);
}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/style/VanChartTitleWithAutoBackground.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/VanChartTitleWithAutoBackground.java
new file mode 100644
index 000000000..eb87f4363
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/VanChartTitleWithAutoBackground.java
@@ -0,0 +1,19 @@
+package com.fr.van.chart.designer.style;
+
+import com.fr.van.chart.designer.component.background.VanChartBackgroundWithOutShadowWithRadiusPane;
+
+/**
+ * @author Bjorn
+ * @version 10.0
+ * Created by Bjorn on 2020-10-20
+ */
+public class VanChartTitleWithAutoBackground extends VanChartTitlePane {
+
+ public VanChartTitleWithAutoBackground(VanChartStylePane parent) {
+ super(parent);
+ }
+
+ protected VanChartBackgroundWithOutShadowWithRadiusPane createBackgroundPane() {
+ return new VanChartBackgroundWithOutShadowWithRadiusPane(true);
+ }
+}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/style/axis/VanChartBaseAxisPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/axis/VanChartBaseAxisPane.java
index be2c7d8a5..f841252b7 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/axis/VanChartBaseAxisPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/axis/VanChartBaseAxisPane.java
@@ -20,7 +20,8 @@ import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
import com.fr.design.mainframe.chart.PaneTitleConstants;
import com.fr.design.mainframe.chart.gui.style.ChartTextAttrPane;
-import com.fr.design.style.color.ColorSelectBox;
+import com.fr.design.mainframe.chart.gui.style.ChartTextAttrPaneWithPreStyle;
+import com.fr.design.mainframe.chart.gui.style.ColorSelectBoxWithPreStyle;
import com.fr.design.utils.gui.UIComponentUtils;
import com.fr.design.widget.FRWidgetFactory;
import com.fr.plugin.chart.attr.axis.VanChartAxis;
@@ -34,6 +35,7 @@ import com.fr.stable.StringUtils;
import com.fr.van.chart.designer.TableLayout4VanChartHelper;
import com.fr.van.chart.designer.component.VanChartHtmlLabelPane;
import com.fr.van.chart.designer.style.VanChartStylePane;
+import com.fr.van.chart.designer.style.axis.component.AxisLabelDisplayComboBox;
import javax.swing.BorderFactory;
import javax.swing.Icon;
@@ -66,6 +68,8 @@ public class VanChartBaseAxisPane extends FurtherBasicBeanPane {
protected ChartTextAttrPane labelTextAttrPane;
protected UINumberDragPane labelTextRotation;
+ private AxisLabelDisplayComboBox labelDisplayComboBox;
+
//轴标签缩略间隔显示 恢复用注释。下面6行删除。
protected UITextField labelGapValue;
@@ -75,11 +79,13 @@ public class VanChartBaseAxisPane extends FurtherBasicBeanPane {
//protected UISpinner labelGapValue;
protected JPanel labelPanel;
+ private JPanel labelGapPane;
private JPanel labelGapStylePane;
private JPanel labelGapValuePane;
+ private JPanel labelDisplayPane;
protected LineComboBox axisLineStyle;
- protected ColorSelectBox axisLineColor;
+ protected ColorSelectBoxWithPreStyle axisLineColor;
protected UIButtonGroup mainTick;
protected UIButtonGroup secondTick;
@@ -116,6 +122,10 @@ public class VanChartBaseAxisPane extends FurtherBasicBeanPane {
this.add(createContentPane(isXAxis), BorderLayout.CENTER);
}
+ protected boolean showLabelDisplay() {
+ return true;
+ }
+
protected JPanel createContentPane(boolean isXAxis) {
double p = TableLayout.PREFERRED;
@@ -127,7 +137,7 @@ public class VanChartBaseAxisPane extends FurtherBasicBeanPane {
double[] rowSize = {p, p, p, p, p, p, p, p};
Component[][] components = new Component[][]{
new Component[]{createTitlePane(new double[]{p, p, p, p, p, p}, column, isXAxis), null},
- new Component[]{createLabelPane(new double[]{p, p}, column), null},
+ new Component[]{createLabelPane(new double[]{p, p, p}, column), null},
new Component[]{createLineStylePane(new double[]{p, p, p, p, p}, columnSize), null},
new Component[]{createAxisPositionPane(new double[]{p, p, p}, columnSize, isXAxis), null},
new Component[]{createDisplayStrategy(), null},
@@ -142,7 +152,7 @@ public class VanChartBaseAxisPane extends FurtherBasicBeanPane {
titleAlignPane = isXAxis ? getXAxisTitleAlignPane() : getYAxisTitleAlignPane();
titleAlignPane.setSelectedItem(Constants.CENTER);
titleContent = new TinyFormulaPane();
- titleUseHtml = new UIToggleButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Html"));
+ titleUseHtml = new UIToggleButton(Toolkit.i18nText("Fine-Design_Chart_Html"));
UIComponentUtils.setLineWrap(titleUseHtml);
titleTextAttrPane = getChartTextAttrPane();
titleTextRotation = new UINumberDragPane(-ROTATION_MAX, ROTATION_MAX);
@@ -153,12 +163,12 @@ public class VanChartBaseAxisPane extends FurtherBasicBeanPane {
}
Component[][] components = new Component[][]{
new Component[]{null, null},
- new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Content")), titleContent},
+ new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Content")), titleContent},
new Component[]{null, titleUseHtml},
- new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Layout_Position")), titleAlignPane},
+ new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Layout_Position")), titleAlignPane},
new Component[]{titleTextAttrPane, null},
new Component[]{
- FRWidgetFactory.createLineWrapLabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_TextRotation")),
+ FRWidgetFactory.createLineWrapLabel(Toolkit.i18nText("Fine-Design_Chart_TextRotation")),
UIComponentUtils.wrapWithBorderLayoutPane(titleTextRotation)
},
};
@@ -199,54 +209,95 @@ public class VanChartBaseAxisPane extends FurtherBasicBeanPane {
}
protected JPanel createLabelPane(double[] row, double[] col) {
- showLabel = new UIButtonGroup(new String[]{com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Use_Show"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Hidden")});
- labelTextAttrPane = getChartTextAttrPane();
+ initLabelComponents();
+
+ labelGapPane = createLabelGapPane(row, col);
+ labelPanel = createLabelDetailPanel();
+
+ addComponentsListener();
+
+ JPanel showLabelPane = TableLayout4VanChartHelper.createGapTableLayoutPane(Toolkit.i18nText("Fine-Design_Chart_Axis_Label"), showLabel);
+
+ JPanel labelPane = new JPanel(new BorderLayout());
+ labelPane.add(showLabelPane, BorderLayout.NORTH);
+ labelPane.add(labelPanel, BorderLayout.CENTER);
+
+ return TableLayout4VanChartHelper.createExpandablePaneWithTitle(PaneTitleConstants.CHART_STYLE_LABEL_TITLE, labelPane);
+ }
+
+ private void initLabelComponents() {
+ showLabel = new UIButtonGroup(new String[]{Toolkit.i18nText("Fine-Design_Chart_Use_Show"), Toolkit.i18nText("Fine-Design_Chart_Hidden")});
+
+ labelDisplayComboBox = new AxisLabelDisplayComboBox();
+ labelDisplayPane = TableLayout4VanChartHelper.createGapTableLayoutPane(Toolkit.i18nText("Fine-Design_Chart_Axis_Label_Show"), labelDisplayComboBox);
+ labelDisplayPane.setVisible(showLabelDisplay());
+ labelTextAttrPane = getChartTextAttrPane();
labelTextRotation = new UINumberDragPane(-ROTATION_MAX, ROTATION_MAX);
- labelGapStyle = new UIButtonGroup(new String[]{com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Automatic"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Fixed")});
+ labelGapStyle = new UIButtonGroup<>(new String[]{Toolkit.i18nText("Fine-Design_Chart_Automatic"), Toolkit.i18nText("Fine-Design_Chart_Fixed")});
labelGapValue = new UITextField();
+ }
+
+ private JPanel createLabelGapPane(double[] row, double[] col) {
Component[][] gapComponents = new Component[][]{
+ new Component[]{null, null},
new Component[]{
- FRWidgetFactory.createLineWrapLabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_TextRotation")),
+ FRWidgetFactory.createLineWrapLabel(Toolkit.i18nText("Fine-Design_Chart_TextRotation")),
UIComponentUtils.wrapWithBorderLayoutPane(labelTextRotation)
},
- new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Label_Interval")), labelGapStyle},
+ new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Label_Interval")), labelGapStyle}
};
- JPanel panel = TableLayout4VanChartHelper.createGapTableLayoutPane(gapComponents, row, col);
- labelGapValuePane = TableLayout4VanChartHelper.createGapTableLayoutPane(com.fr.design.i18n.Toolkit.i18nText(""), labelGapValue, TableLayout4VanChartHelper.SECOND_EDIT_AREA_WIDTH);
- JPanel gapPanel = new JPanel(new BorderLayout());
- gapPanel.add(panel, BorderLayout.CENTER);
- gapPanel.add(labelGapValuePane, BorderLayout.SOUTH);
- Component[][] components = new Component[][]{
- new Component[]{labelTextAttrPane, null},
- new Component[]{gapPanel, null},
- };
+ JPanel gapDetailPane = TableLayout4VanChartHelper.createGapTableLayoutPane(gapComponents, row, col);
+ labelGapValuePane = TableLayout4VanChartHelper.createGapTableLayoutPane(Toolkit.i18nText(""), labelGapValue, TableLayout4VanChartHelper.SECOND_EDIT_AREA_WIDTH);
+
+ JPanel panel = new JPanel(new BorderLayout());
+ panel.add(gapDetailPane, BorderLayout.CENTER);
+ panel.add(labelGapValuePane, BorderLayout.SOUTH);
+
+ return panel;
+ }
- JPanel showLabelPane = TableLayout4VanChartHelper.createGapTableLayoutPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Axis_Label"), showLabel);
- labelPanel = TableLayout4VanChartHelper.createGapTableLayoutPane(components, row, col);
- labelPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 0));
+ private JPanel createLabelDetailPanel() {
+ JPanel panel = new JPanel(new BorderLayout());
+ panel.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 0));
+
+ panel.add(labelDisplayPane, BorderLayout.NORTH);
+ panel.add(labelTextAttrPane, BorderLayout.CENTER);
+ panel.add(labelGapPane, BorderLayout.SOUTH);
+
+ return panel;
+ }
+
+ private void addComponentsListener() {
+ // 显示/隐藏
showLabel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
checkLabelPane();
}
});
+
+ // 间隔/缩略/换行
+ labelDisplayComboBox.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ checkLabelGapPane();
+ }
+ });
+
+ // 自动/固定
labelGapStyle.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
checkLabelGapValuePane();
}
});
- JPanel jPanel = new JPanel(new BorderLayout());
- jPanel.add(showLabelPane, BorderLayout.NORTH);
- jPanel.add(labelPanel, BorderLayout.CENTER);
- return TableLayout4VanChartHelper.createExpandablePaneWithTitle(PaneTitleConstants.CHART_STYLE_LABEL_TITLE, jPanel);
}
// protected JPanel createLabelPane(double[] row, double[] col){
// double p = TableLayout.PREFERRED;
-// showLabel = new UIButtonGroup(new String[]{com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Use_Show"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Hidden")});
+// showLabel = new UIButtonGroup(new String[]{Toolkit.i18nText("Fine-Design_Chart_Use_Show"), Toolkit.i18nText("Fine-Design_Chart_Hidden")});
// labelTextAttrPane = getChartTextAttrPane();
//
// JPanel rotationPane = createLabelRotationPane(col);
@@ -259,7 +310,7 @@ public class VanChartBaseAxisPane extends FurtherBasicBeanPane {
// new Component[]{overlapPane, null},
// };
//
-// JPanel showLabelPane = TableLayout4VanChartHelper.createGapTableLayoutPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Axis_Label"),showLabel);
+// JPanel showLabelPane = TableLayout4VanChartHelper.createGapTableLayoutPane(Toolkit.i18nText("Fine-Design_Chart_Axis_Label"),showLabel);
// labelPanel = TableLayout4VanChartHelper.createGapTableLayoutPane(components, new double[]{p, p, p}, col);
// labelPanel.setBorder(BorderFactory.createEmptyBorder(0,10,0,0));
// showLabel.addActionListener(new ActionListener() {
@@ -279,7 +330,7 @@ public class VanChartBaseAxisPane extends FurtherBasicBeanPane {
Component[][] gapComponents = new Component[][]{
new Component[]{
- FRWidgetFactory.createLineWrapLabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_TextRotation")),
+ FRWidgetFactory.createLineWrapLabel(Toolkit.i18nText("Fine-Design_Chart_TextRotation")),
UIComponentUtils.wrapWithBorderLayoutPane(labelTextRotation)
}
};
@@ -327,31 +378,23 @@ public class VanChartBaseAxisPane extends FurtherBasicBeanPane {
}
protected ChartTextAttrPane getChartTextAttrPane() {
- return new ChartTextAttrPane() {
-
- @Override
- protected JPanel getContentPane(JPanel buttonPane) {
- double p = TableLayout.PREFERRED;
- double f = TableLayout.FILL;
- double e = TableLayout4VanChartHelper.SECOND_EDIT_AREA_WIDTH;
- double[] columnSize = {f, e};
- double[] rowSize = {p, p, p};
-
- return TableLayout4VanChartHelper.createGapTableLayoutPane(getComponents(buttonPane), rowSize, columnSize);
+ return new ChartTextAttrPaneWithPreStyle() {
+ protected double getEdithAreaWidth() {
+ return TableLayout4VanChartHelper.SECOND_EDIT_AREA_WIDTH;
}
};
}
protected JPanel createLineStylePane(double[] row, double[] col) {
axisLineStyle = createLineComboBox();
- axisLineColor = new ColorSelectBox(100);
- String[] strings = new String[]{com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Open"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Close")};
+ axisLineColor = new ColorSelectBoxWithPreStyle(100);
+ String[] strings = new String[]{Toolkit.i18nText("Fine-Design_Chart_Open"), Toolkit.i18nText("Fine-Design_Chart_Close")};
AxisTickLineType[] values = new AxisTickLineType[]{AxisTickLineType.TICK_LINE_OUTSIDE, AxisTickLineType.TICK_LINE_NONE};
mainTick = new UIButtonGroup(strings, values);
secondTick = new UIButtonGroup(strings, values);
JPanel panel = TableLayout4VanChartHelper.createGapTableLayoutPane(getLineStylePaneComponents(), row, col);
- return TableLayout4VanChartHelper.createExpandablePaneWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Axis_Line_Style"), panel);
+ return TableLayout4VanChartHelper.createExpandablePaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Axis_Line_Style"), panel);
}
protected LineComboBox createLineComboBox() {
@@ -361,34 +404,34 @@ public class VanChartBaseAxisPane extends FurtherBasicBeanPane {
protected Component[][] getLineStylePaneComponents() {
return new Component[][]{
new Component[]{null, null},
- new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Type")), axisLineStyle},
- new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Color")), axisLineColor},
- new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Main_Graduation_Line")), mainTick},
- new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Second_Graduation_Line")), secondTick},
+ new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Type")), axisLineStyle},
+ new Component[]{axisLineColor, null},
+ new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Main_Graduation_Line")), mainTick},
+ new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Second_Graduation_Line")), secondTick},
};
}
protected JPanel createAxisPositionPane(double[] row, double[] col, boolean isXAxis) {
position = new UIButtonGroup(getAxisPositionNameArray(isXAxis), getAxisPositionValueArray(isXAxis));
- reversed = new UIButtonGroup(new String[]{com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_On"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Off")}, new Boolean[]{true, false});
+ reversed = new UIButtonGroup(new String[]{Toolkit.i18nText("Fine-Design_Chart_On"), Toolkit.i18nText("Fine-Design_Chart_Off")}, new Boolean[]{true, false});
Component[][] components = new Component[][]{
new Component[]{null, null},
new Component[]{
- FRWidgetFactory.createLineWrapLabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Axis_Label_Position")),
+ FRWidgetFactory.createLineWrapLabel(Toolkit.i18nText("Fine-Design_Chart_Axis_Label_Position")),
UIComponentUtils.wrapWithBorderLayoutPane(position)
},
- new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_AxisReversed")), reversed},
+ new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_AxisReversed")), reversed},
};
JPanel panel = TableLayout4VanChartHelper.createGapTableLayoutPane(components, row, col);
- return TableLayout4VanChartHelper.createExpandablePaneWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Layout_Position"), panel);
+ return TableLayout4VanChartHelper.createExpandablePaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Layout_Position"), panel);
}
private String[] getAxisPositionNameArray(boolean isXAxis) {
if (isXAxis) {
- return new String[]{com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Axis_Top"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Axis_Bottom"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Axis_Vertical_Zero")};
+ return new String[]{Toolkit.i18nText("Fine-Design_Chart_Axis_Top"), Toolkit.i18nText("Fine-Design_Chart_Axis_Bottom"), Toolkit.i18nText("Fine-Design_Chart_Axis_Vertical_Zero")};
} else {
- return new String[]{com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Layout_Left"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Layout_Right"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Axis_Vertical_Zero")};
+ return new String[]{Toolkit.i18nText("Fine-Design_Chart_Layout_Left"), Toolkit.i18nText("Fine-Design_Chart_Layout_Right"), Toolkit.i18nText("Fine-Design_Chart_Axis_Vertical_Zero")};
}
}
@@ -403,10 +446,10 @@ public class VanChartBaseAxisPane extends FurtherBasicBeanPane {
protected JPanel createDisplayStrategy() {
//区域显示策略 恢复用注释。删除到return,即除了注释的代码都删除。
maxProportion = new UISpinner(0, 100, 1, 30);
- axisLimitSize = new UIButtonGroup(new String[]{com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Limit"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Not_Limit")});
+ axisLimitSize = new UIButtonGroup(new String[]{Toolkit.i18nText("Fine-Design_Chart_Limit"), Toolkit.i18nText("Fine-Design_Chart_Not_Limit")});
- JPanel limitSizePane = TableLayout4VanChartHelper.createGapTableLayoutPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Area_Size"), axisLimitSize);
- maxProportionPane = TableLayout4VanChartHelper.createGapTableLayoutPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Max_Proportion"), maxProportion, TableLayout4VanChartHelper.SECOND_EDIT_AREA_WIDTH);
+ JPanel limitSizePane = TableLayout4VanChartHelper.createGapTableLayoutPane(Toolkit.i18nText("Fine-Design_Chart_Area_Size"), axisLimitSize);
+ maxProportionPane = TableLayout4VanChartHelper.createGapTableLayoutPane(Toolkit.i18nText("Fine-Design_Chart_Max_Proportion"), maxProportion, TableLayout4VanChartHelper.SECOND_EDIT_AREA_WIDTH);
maxProportionPane.setBorder(BorderFactory.createEmptyBorder(0, 12, 0, 0));
JPanel panel = new JPanel(new BorderLayout());
panel.add(limitSizePane, BorderLayout.NORTH);
@@ -419,7 +462,7 @@ public class VanChartBaseAxisPane extends FurtherBasicBeanPane {
}
});
- return TableLayout4VanChartHelper.createExpandablePaneWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Display_Strategy"), panel);
+ return TableLayout4VanChartHelper.createExpandablePaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Display_Strategy"), panel);
//区域显示策略 恢复用注释。取消注释。
// limitPane = new LimitPane();
@@ -427,8 +470,8 @@ public class VanChartBaseAxisPane extends FurtherBasicBeanPane {
}
protected JPanel createValueStylePane() {
- valueFormatStyle = new UIButtonGroup(new String[]{com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Common"),
- com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Custom")});
+ valueFormatStyle = new UIButtonGroup(new String[]{Toolkit.i18nText("Fine-Design_Chart_Common"),
+ Toolkit.i18nText("Fine-Design_Chart_Custom")});
valueFormat = createFormatPane();
checkFormatType();
@@ -436,8 +479,8 @@ public class VanChartBaseAxisPane extends FurtherBasicBeanPane {
htmlLabelPane = new VanChartHtmlLabelPane();
centerPane = new JPanel(new CardLayout());
- centerPane.add(valueFormat, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Common"));
- centerPane.add(htmlLabelPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Custom"));
+ centerPane.add(valueFormat, Toolkit.i18nText("Fine-Design_Chart_Common"));
+ centerPane.add(htmlLabelPane, Toolkit.i18nText("Fine-Design_Chart_Custom"));
double p = TableLayout.PREFERRED;
double f = TableLayout.FILL;
@@ -445,7 +488,7 @@ public class VanChartBaseAxisPane extends FurtherBasicBeanPane {
double[] rowSize = {p, p, p};
Component[][] components = new Component[][]{
new Component[]{null, null},
- new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Axis_Label_Format"), SwingConstants.LEFT), valueFormatStyle},
+ new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Axis_Label_Format"), SwingConstants.LEFT), valueFormatStyle},
new Component[]{null, centerPane},
};
JPanel contentPane = TableLayout4VanChartHelper.createGapTableLayoutPane(components, rowSize, columnSize);
@@ -458,7 +501,7 @@ public class VanChartBaseAxisPane extends FurtherBasicBeanPane {
}
});
- return TableLayout4VanChartHelper.createExpandablePaneWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Use_Format"), contentPane);
+ return TableLayout4VanChartHelper.createExpandablePaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Use_Format"), contentPane);
}
protected FormatPane createFormatPane() {
@@ -480,6 +523,7 @@ public class VanChartBaseAxisPane extends FurtherBasicBeanPane {
protected void checkAllUse() {
checkCardPane();
checkLabelPane();
+ checkLabelGapPane();
checkTitlePane();
//区域显示策略 恢复用注释。删除下面一行。
checkMaxProPortionUse();
@@ -502,9 +546,9 @@ public class VanChartBaseAxisPane extends FurtherBasicBeanPane {
if (centerPane != null && valueFormatStyle != null) {
CardLayout cardLayout = (CardLayout) centerPane.getLayout();
if (valueFormatStyle.getSelectedIndex() == 1) {
- cardLayout.show(centerPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Custom"));
+ cardLayout.show(centerPane, Toolkit.i18nText("Fine-Design_Chart_Custom"));
} else {
- cardLayout.show(centerPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Common"));
+ cardLayout.show(centerPane, Toolkit.i18nText("Fine-Design_Chart_Common"));
}
}
}
@@ -539,6 +583,18 @@ public class VanChartBaseAxisPane extends FurtherBasicBeanPane {
checkLabelGapValuePane();
}
+ protected void checkLabelGapPane() {
+ if (labelGapPane != null) {
+ boolean visible = true;
+
+ if (showLabelDisplay() && labelDisplayPane != null && labelDisplayComboBox != null) {
+ visible = labelDisplayComboBox.getSelectedIndex() == 0;
+ }
+
+ labelGapPane.setVisible(visible);
+ }
+ }
+
protected void checkLabelGapValuePane() {
if (labelGapValuePane != null && labelGapStyle != null) {
boolean visible = labelGapStyle.getSelectedIndex() == 1;
@@ -568,7 +624,7 @@ public class VanChartBaseAxisPane extends FurtherBasicBeanPane {
*/
@Override
public String title4PopupWindow() {
- return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Category_Axis");
+ return Toolkit.i18nText("Fine-Design_Chart_Category_Axis");
}
/**
@@ -639,6 +695,9 @@ public class VanChartBaseAxisPane extends FurtherBasicBeanPane {
// if (overlapHandleTypeGroup != null) {
// overlapHandleTypeGroup.setSelectedItem(axis.getOverlapHandleType());
// }
+ if (labelDisplayComboBox != null) {
+ labelDisplayComboBox.populateBean(axis.getLabelDisplay());
+ }
if (labelGapStyle != null) {
labelGapStyle.setSelectedIndex(axis.isAutoLabelGap() ? 0 : 1);
}
@@ -656,7 +715,7 @@ public class VanChartBaseAxisPane extends FurtherBasicBeanPane {
axisLineStyle.setSelectedLineStyle(axis.getAxisStyle());
}
if (axisLineColor != null) {
- axisLineColor.setSelectObject(axis.getAxisColor());
+ axisLineColor.populate(axis.getLineColorWithPreStyle());
}
if (mainTick != null) {
mainTick.setSelectedItem(axis.getMainTickLine());
@@ -775,6 +834,9 @@ public class VanChartBaseAxisPane extends FurtherBasicBeanPane {
// if (overlapHandleTypeGroup != null) {
// axis.setOverlapHandleType(overlapHandleTypeGroup.getSelectedItem());
// }
+ if (labelDisplayComboBox != null) {
+ axis.setLabelDisplay(labelDisplayComboBox.updateBean());
+ }
if (labelGapStyle != null) {
axis.setAutoLabelGap(labelGapStyle.getSelectedIndex() == 0);
}
@@ -796,7 +858,7 @@ public class VanChartBaseAxisPane extends FurtherBasicBeanPane {
axis.setAxisStyle(axisLineStyle.getSelectedLineStyle());
}
if (axisLineColor != null) {
- axis.setAxisColor(axisLineColor.getSelectObject());
+ axis.setLineColorWithPreStyle(axisLineColor.update());
}
if (mainTick != null) {
axis.setMainTickLine(mainTick.getSelectedItem());
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/style/axis/VanChartTimeAxisPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/axis/VanChartTimeAxisPane.java
index 69a326ac4..f960b4aff 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/axis/VanChartTimeAxisPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/axis/VanChartTimeAxisPane.java
@@ -12,6 +12,7 @@ import com.fr.design.gui.icheckbox.UICheckBox;
import com.fr.design.gui.icombobox.UIComboBox;
import com.fr.design.gui.itextfield.UITextField;
import com.fr.design.gui.style.FormatPane;
+import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
@@ -69,7 +70,7 @@ public class VanChartTimeAxisPane extends VanChartBaseAxisPane {
double[] rowSize = {p,p,p,p,p,p,p,p,p,p,p,p,p,p};
Component[][] components = new Component[][]{
new Component[]{createTitlePane(new double[]{p, p, p, p, p,p}, column, isXAxis),null},
- new Component[]{createLabelPane(new double[]{p, p}, column),null},
+ new Component[]{createLabelPane(new double[]{p, p, p}, column),null},
new Component[]{createValueDefinition(),null},
new Component[]{createLineStylePane(new double[]{p, p,p,p,p}, columnSize),null},
new Component[]{createAxisPositionPane(new double[]{p, p, p}, columnSize, isXAxis),null},
@@ -80,6 +81,10 @@ public class VanChartTimeAxisPane extends VanChartBaseAxisPane {
return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize);
}
+ protected boolean showLabelDisplay() {
+ return false;
+ }
+
@Override
protected void addOverlapGroupButton(JPanel panel) {
//do nothing
@@ -87,7 +92,7 @@ public class VanChartTimeAxisPane extends VanChartBaseAxisPane {
private JPanel createValueDefinition(){
timeMinMaxValuePane = new TimeMinMaxValuePane();
- return TableLayout4VanChartHelper.createExpandablePaneWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Value_Definition"), timeMinMaxValuePane);
+ return TableLayout4VanChartHelper.createExpandablePaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Value_Definition"), timeMinMaxValuePane);
}
@Override
@@ -127,7 +132,7 @@ public class VanChartTimeAxisPane extends VanChartBaseAxisPane {
*/
@Override
public String title4PopupWindow() {
- return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_TimeAxis");
+ return Toolkit.i18nText("Fine-Design_Chart_TimeAxis");
}
private class TimeMinMaxValuePane extends JPanel{
@@ -174,10 +179,10 @@ public class VanChartTimeAxisPane extends VanChartBaseAxisPane {
secTickPane.add(secondUnitField);
secTickPane.add(secondType);
- minPane = TableLayout4VanChartHelper.createGapTableLayoutPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Data_Min"),minValueField, TableLayout4VanChartHelper.SECOND_EDIT_AREA_WIDTH);
- maxPane = TableLayout4VanChartHelper.createGapTableLayoutPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Data_Max"),maxValueField, TableLayout4VanChartHelper.SECOND_EDIT_AREA_WIDTH);
- mainPane = TableLayout4VanChartHelper.createGapTableLayoutPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Main_Type"),mainTickPane, TableLayout4VanChartHelper.SECOND_EDIT_AREA_WIDTH);
- secPane = TableLayout4VanChartHelper.createGapTableLayoutPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_SecType"),secTickPane, TableLayout4VanChartHelper.SECOND_EDIT_AREA_WIDTH);
+ minPane = TableLayout4VanChartHelper.createGapTableLayoutPane(Toolkit.i18nText("Fine-Design_Chart_Data_Min"),minValueField, TableLayout4VanChartHelper.SECOND_EDIT_AREA_WIDTH);
+ maxPane = TableLayout4VanChartHelper.createGapTableLayoutPane(Toolkit.i18nText("Fine-Design_Chart_Data_Max"),maxValueField, TableLayout4VanChartHelper.SECOND_EDIT_AREA_WIDTH);
+ mainPane = TableLayout4VanChartHelper.createGapTableLayoutPane(Toolkit.i18nText("Fine-Design_Chart_Main_Type"),mainTickPane, TableLayout4VanChartHelper.SECOND_EDIT_AREA_WIDTH);
+ secPane = TableLayout4VanChartHelper.createGapTableLayoutPane(Toolkit.i18nText("Fine-Design_Chart_SecType"),secTickPane, TableLayout4VanChartHelper.SECOND_EDIT_AREA_WIDTH);
minPane.setBorder(BorderFactory.createEmptyBorder(0,TableLayout4VanChartHelper.COMPONENT_INTERVAL,0,0));
maxPane.setBorder(BorderFactory.createEmptyBorder(0,TableLayout4VanChartHelper.COMPONENT_INTERVAL,0,0));
@@ -208,10 +213,10 @@ public class VanChartTimeAxisPane extends VanChartBaseAxisPane {
private void initMin() {
// 最小值.
- minCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Custom_Min_Value"));
+ minCheckBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Chart_Custom_Min_Value"));
Date tmp = null;
- DateEditor dateEditor = new DateEditor(tmp, true, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Date"), UIDatePicker.STYLE_CN_DATETIME1);
- Editor formulaEditor = new FormulaEditor(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Formula"));
+ DateEditor dateEditor = new DateEditor(tmp, true, Toolkit.i18nText("Fine-Design_Basic_Date"), UIDatePicker.STYLE_CN_DATETIME1);
+ Editor formulaEditor = new FormulaEditor(Toolkit.i18nText("Fine-Design_Chart_Formula"));
Editor[] editor = new Editor[]{dateEditor, formulaEditor};
minValueField = new ValueEditorPane(editor);
minCheckBox.addActionListener(new ActionListener() {
@@ -223,10 +228,10 @@ public class VanChartTimeAxisPane extends VanChartBaseAxisPane {
private void initMax() {
// 最大值
- maxCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Custom_Max_Value"));
+ maxCheckBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Chart_Custom_Max_Value"));
Date tmp = null;
- DateEditor dateEditor = new DateEditor(tmp, true, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Date"), UIDatePicker.STYLE_CN_DATETIME1);
- Editor formulaEditor = new FormulaEditor(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Formula"));
+ DateEditor dateEditor = new DateEditor(tmp, true, Toolkit.i18nText("Fine-Design_Basic_Date"), UIDatePicker.STYLE_CN_DATETIME1);
+ Editor formulaEditor = new FormulaEditor(Toolkit.i18nText("Fine-Design_Chart_Formula"));
Editor[] editor = new Editor[]{dateEditor, formulaEditor};
maxValueField = new ValueEditorPane(editor);
maxCheckBox.addActionListener(new ActionListener() {
@@ -238,7 +243,7 @@ public class VanChartTimeAxisPane extends VanChartBaseAxisPane {
private void initMain() {
// 主要刻度单位
- mainTickBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Custom_Main_Type"));
+ mainTickBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Chart_Custom_Main_Type"));
mainUnitField = new UITextField();
mainUnitField.setPreferredSize(new Dimension(20, 20));
mainType = new UIComboBox(TYPES);
@@ -254,7 +259,7 @@ public class VanChartTimeAxisPane extends VanChartBaseAxisPane {
private void initSecond() {
// 次要刻度单位
- secondTickBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Custom_Second_Type"));
+ secondTickBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Chart_Custom_Second_Type"));
secondUnitField = new UITextField();
secondUnitField.setPreferredSize(new Dimension(20, 20));
secondType = new UIComboBox(TYPES);
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/style/axis/VanChartValueAxisPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/axis/VanChartValueAxisPane.java
index 934185b38..7633d0c1e 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/axis/VanChartValueAxisPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/axis/VanChartValueAxisPane.java
@@ -5,6 +5,7 @@ import com.fr.chart.base.ChartBaseUtils;
import com.fr.design.chart.ChartSwingUtils;
import com.fr.design.gui.icheckbox.UICheckBox;
import com.fr.design.gui.itextfield.UITextField;
+import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
import com.fr.plugin.chart.attr.axis.VanChartAxis;
@@ -50,7 +51,7 @@ public class VanChartValueAxisPane extends VanChartBaseAxisPane {
double[] rowSize = {p,p,p,p,p,p,p,p,p,p,p,p,p,p};
Component[][] components = new Component[][]{
new Component[]{createTitlePane(new double[]{p, p, p, p, p, p}, column, isXAxis), null},
- new Component[]{createLabelPane(new double[]{p, p}, column), null},
+ new Component[]{createLabelPane(new double[]{p, p, p}, column), null},
new Component[]{createMinMaxValuePane(new double[]{p, p}, columnSize), null},
new Component[]{createLineStylePane(new double[]{p, p, p, p, p}, columnSize), null},
new Component[]{createAxisPositionPane(new double[]{p, p, p}, columnSize, isXAxis), null},
@@ -61,6 +62,10 @@ public class VanChartValueAxisPane extends VanChartBaseAxisPane {
return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize);
}
+ protected boolean showLabelDisplay() {
+ return false;
+ }
+
@Override
protected void addOverlapGroupButton(JPanel panel) {
//do nothing
@@ -68,12 +73,12 @@ public class VanChartValueAxisPane extends VanChartBaseAxisPane {
protected JPanel createMinMaxValuePane(double[] row, double[] col){
JPanel panel = createCommenValuePane(row,col);
- return TableLayout4VanChartHelper.createExpandablePaneWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Value_Definition"), panel);
+ return TableLayout4VanChartHelper.createExpandablePaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Value_Definition"), panel);
}
protected JPanel createCommenValuePane(double[] row, double[] col){
initMinMaxValuePane();
- logBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Custom_LogBase_Value"));
+ logBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Chart_Custom_LogBase_Value"));
logBaseField = new UITextField();
logBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
@@ -87,7 +92,7 @@ public class VanChartValueAxisPane extends VanChartBaseAxisPane {
// logPane.add(logBaseField);
- logPane = TableLayout4VanChartHelper.createGapTableLayoutPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Log_Base_Value"), logBaseField, TableLayout4VanChartHelper.SECOND_EDIT_AREA_WIDTH);
+ logPane = TableLayout4VanChartHelper.createGapTableLayoutPane(Toolkit.i18nText("Fine-Design_Chart_Log_Base_Value"), logBaseField, TableLayout4VanChartHelper.SECOND_EDIT_AREA_WIDTH);
logPane.setBorder(BorderFactory.createEmptyBorder(0, TableLayout4VanChartHelper.COMPONENT_INTERVAL, 0, 0));
@@ -125,7 +130,7 @@ public class VanChartValueAxisPane extends VanChartBaseAxisPane {
*/
@Override
public String title4PopupWindow() {
- return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Value_Axis");
+ return Toolkit.i18nText("Fine-Design_Chart_Value_Axis");
}
@Override
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/style/axis/component/AxisLabelDisplayComboBox.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/axis/component/AxisLabelDisplayComboBox.java
new file mode 100644
index 000000000..33b837eb7
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/axis/component/AxisLabelDisplayComboBox.java
@@ -0,0 +1,48 @@
+package com.fr.van.chart.designer.style.axis.component;
+
+import com.fr.design.gui.icombobox.UIComboBox;
+import com.fr.design.i18n.Toolkit;
+import com.fr.plugin.chart.type.AxisLabelDisplay;
+
+public class AxisLabelDisplayComboBox extends UIComboBox {
+
+ public static final String[] DISPLAY_ITEM_GROUP = {
+ Toolkit.i18nText("Fine-Design_Chart_Label_OverlapInterval"),
+ Toolkit.i18nText("Fine-Design_Chart_Label_OverlapAbbreviate"),
+ Toolkit.i18nText("Fine-Design_Chart_Label_OverlapMulti_Line")
+ };
+
+ public static final AxisLabelDisplay[] DISPLAY_TYPE_GROUP = {
+ AxisLabelDisplay.INTERVAL,
+ AxisLabelDisplay.ELLIPSIS,
+ AxisLabelDisplay.MULTI_LINE
+ };
+
+ public AxisLabelDisplayComboBox() {
+ super(DISPLAY_ITEM_GROUP);
+ setSelectedIndex(0);
+ }
+
+ public void reset() {
+ this.setSelectedItem(DISPLAY_ITEM_GROUP[0]);
+ }
+
+ public void populateBean(AxisLabelDisplay type) {
+ for (int i = 0; i < DISPLAY_TYPE_GROUP.length; i++) {
+ if (type != null && type == DISPLAY_TYPE_GROUP[i]) {
+ setSelectedIndex(i);
+ break;
+ }
+ }
+ }
+
+ public AxisLabelDisplay updateBean() {
+ int selectIndex = getSelectedIndex();
+
+ if (selectIndex >= 0 && selectIndex < DISPLAY_TYPE_GROUP.length) {
+ return DISPLAY_TYPE_GROUP[selectIndex];
+ }
+
+ return null;
+ }
+}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/style/axis/gauge/VanChartGaugeDetailAxisPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/axis/gauge/VanChartGaugeDetailAxisPane.java
index 39c6321a2..60c77734c 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/axis/gauge/VanChartGaugeDetailAxisPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/axis/gauge/VanChartGaugeDetailAxisPane.java
@@ -8,6 +8,7 @@ import com.fr.design.layout.TableLayoutHelper;
import com.fr.design.mainframe.chart.PaneTitleConstants;
import com.fr.design.mainframe.chart.gui.style.ChartTextAttrPane;
import com.fr.design.mainframe.chart.gui.style.ChartTextAttrPaneWithAuto;
+import com.fr.design.mainframe.chart.gui.style.ChartTextAttrPaneWithPreStyle;
import com.fr.design.style.color.ColorSelectBox;
import com.fr.plugin.chart.attr.axis.VanChartAxis;
import com.fr.plugin.chart.attr.axis.VanChartGaugeAxis;
@@ -102,7 +103,7 @@ public class VanChartGaugeDetailAxisPane extends VanChartValueAxisPane {
if (isMulti(gaugeStyle)) {
return new ChartTextAttrPaneWithAuto(FontAutoType.SIZE_AND_COLOR);
} else {
- return new ChartTextAttrPane();
+ return new ChartTextAttrPaneWithPreStyle();
}
}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/style/axis/radar/VanChartRadarXAxisPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/axis/radar/VanChartRadarXAxisPane.java
index c69fc9b52..3558443c4 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/axis/radar/VanChartRadarXAxisPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/axis/radar/VanChartRadarXAxisPane.java
@@ -2,6 +2,7 @@ package com.fr.van.chart.designer.style.axis.radar;
import com.fr.design.gui.icombobox.LineComboBox;
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;
@@ -29,7 +30,7 @@ public class VanChartRadarXAxisPane extends VanChartBaseAxisPane {
double[] column = {f, s};
double[] rowSize = {p,p,p,p,p,p};
Component[][] components = new Component[][]{
- new Component[]{createLabelPane(new double[]{p, p}, column),null},
+ new Component[]{createLabelPane(new double[]{p, p, p}, column),null},
new Component[]{createLineStylePane(new double[]{p, p, p, p}, columnSize),null},
new Component[]{createValueStylePane(),null},
};
@@ -37,11 +38,15 @@ public class VanChartRadarXAxisPane extends VanChartBaseAxisPane {
return TableLayoutHelper.createTableLayoutPane(components,rowSize,columnSize);
}
+ protected boolean showLabelDisplay() {
+ return false;
+ }
+
protected Component[][] getLineStylePaneComponents() {
return new Component[][]{
new Component[]{null,null} ,
- new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Type")),axisLineStyle} ,
- new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Color")),axisLineColor},
+ new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Type")), axisLineStyle},
+ new Component[]{axisLineColor, null},
};
}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/style/axis/radar/VanChartRadarYAxisPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/axis/radar/VanChartRadarYAxisPane.java
index d30d24573..001567688 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/axis/radar/VanChartRadarYAxisPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/axis/radar/VanChartRadarYAxisPane.java
@@ -3,9 +3,9 @@ package com.fr.van.chart.designer.style.axis.radar;
import com.fr.design.gui.ibutton.UIButtonGroup;
import com.fr.design.gui.icombobox.LineComboBox;
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.attr.axis.VanChartAxis;
import com.fr.plugin.chart.attr.axis.VanChartValueAxis;
import com.fr.stable.CoreConstants;
@@ -41,7 +41,7 @@ public class VanChartRadarYAxisPane extends VanChartValueAxisPane {
double[] column = {f, s};
double[] rowSize = {p, p, p, p, p, p, p, p};
Component[][] components = new Component[][]{
- new Component[]{createLabelPane(new double[]{p, p}, column), null},
+ new Component[]{createLabelPane(new double[]{p, p, p}, column), null},
new Component[]{createMinMaxValuePane(new double[]{p, p, p}, columnSize), null},
new Component[]{createLineStylePane(new double[]{p, p, p, p}, columnSize), null},
new Component[]{createValueStylePane(), null},
@@ -61,15 +61,15 @@ public class VanChartRadarYAxisPane extends VanChartValueAxisPane {
double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH;
double[] columnSize = {f, e};
- valueStyle = new UIButtonGroup(new String[]{com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Axis_Unified_Count"),
- com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Respectively_Specified")});
+ valueStyle = new UIButtonGroup(new String[]{Toolkit.i18nText("Fine-Design_Chart_Axis_Unified_Count"),
+ Toolkit.i18nText("Fine-Design_Chart_Respectively_Specified")});
JPanel commenPane = createCommenValuePane(new double[]{p, p, p}, columnSize);
tableDataPane = new RadarTableDataPane();
centerPane = new JPanel(new CardLayout());
- centerPane.add(commenPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Axis_Unified_Count"));
- centerPane.add(tableDataPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Respectively_Specified"));
+ centerPane.add(commenPane, Toolkit.i18nText("Fine-Design_Chart_Axis_Unified_Count"));
+ centerPane.add(tableDataPane, Toolkit.i18nText("Fine-Design_Chart_Respectively_Specified"));
JPanel contentPane = new JPanel(new BorderLayout());
contentPane.add(valueStyle, BorderLayout.NORTH);
@@ -81,16 +81,16 @@ public class VanChartRadarYAxisPane extends VanChartValueAxisPane {
}
});
- JPanel panel = TableLayout4VanChartHelper.createExpandablePaneWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Value_Definition"), contentPane);
- contentPane.setBorder(BorderFactory.createEmptyBorder(10,5,0,0));
+ JPanel panel = TableLayout4VanChartHelper.createExpandablePaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Value_Definition"), contentPane);
+ contentPane.setBorder(BorderFactory.createEmptyBorder(10, 5, 0, 0));
return panel;
}
protected Component[][] getLineStylePaneComponents() {
return new Component[][]{
- new Component[]{null,null} ,
- new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Type")), axisLineStyle},
- new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Color")), axisLineColor},
+ new Component[]{null, null},
+ new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Type")), axisLineStyle},
+ new Component[]{axisLineColor, null},
};
}
@@ -102,9 +102,9 @@ public class VanChartRadarYAxisPane extends VanChartValueAxisPane {
if (centerPane != null && valueStyle != null) {
CardLayout cardLayout = (CardLayout) centerPane.getLayout();
if (valueStyle.getSelectedIndex() == 0) {
- cardLayout.show(centerPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Axis_Unified_Count"));
+ cardLayout.show(centerPane, Toolkit.i18nText("Fine-Design_Chart_Axis_Unified_Count"));
} else {
- cardLayout.show(centerPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Respectively_Specified"));
+ cardLayout.show(centerPane, Toolkit.i18nText("Fine-Design_Chart_Respectively_Specified"));
}
}
}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/style/background/VanChartAlertValuePane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/background/VanChartAlertValuePane.java
index b23958341..ca59824f6 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/background/VanChartAlertValuePane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/background/VanChartAlertValuePane.java
@@ -205,7 +205,7 @@ public class VanChartAlertValuePane extends BasicBeanPane {
} else {
alertText.populateBean(GeneralUtils.objectToString(chartAlertValue.getAlertContentFormula()));
}
- fontName.setSelectedItem(chartAlertValue.getAlertFont().getName());
+ fontName.setSelectedItem(chartAlertValue.getAlertFont().getFamily());
fontSize.setSelectedItem(chartAlertValue.getAlertFont().getSize());
fontColor.setSelectObject(chartAlertValue.getAlertFont().getForeground());
}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/style/background/VanChartAreaBackgroundPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/background/VanChartAreaBackgroundPane.java
index 48473996f..d53a7ebc6 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/background/VanChartAreaBackgroundPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/background/VanChartAreaBackgroundPane.java
@@ -10,6 +10,7 @@ import com.fr.design.mainframe.chart.PaneTitleConstants;
import com.fr.van.chart.designer.AbstractVanChartScrollPane;
import com.fr.van.chart.designer.TableLayout4VanChartHelper;
import com.fr.van.chart.designer.component.background.VanChartBackgroundPane;
+import com.fr.van.chart.designer.component.background.VanChartBackgroundPaneWithPreStyle;
import com.fr.van.chart.designer.component.border.VanChartBorderWithRadiusPane;
import com.fr.van.chart.designer.style.background.radar.VanChartRadarAxisAreaPane;
@@ -41,7 +42,11 @@ public class VanChartAreaBackgroundPane extends AbstractVanChartScrollPane {
private LineTypeComboBox horizonLineType;
private LineTypeComboBox verticalLineType;
- private ColorSelectBox horizontalColorBox;
- private ColorSelectBox verticalColorBox;
+ private ColorSelectBoxWithPreStyle horizontalColorBox;
+ private ColorSelectBoxWithPreStyle verticalColorBox;
private JPanel horizontalColorPane;
private JPanel verticalColorPane;
@@ -53,8 +54,8 @@ public class VanChartAxisAreaPane extends BasicBeanPane {
}
private void initComponents() {
- horizontalColorBox = new ColorSelectBox(PREFERRED_WIDTH);
- verticalColorBox = new ColorSelectBox(PREFERRED_WIDTH);
+ horizontalColorBox = new ColorSelectBoxWithPreStyle(PREFERRED_WIDTH);
+ verticalColorBox = new ColorSelectBoxWithPreStyle(PREFERRED_WIDTH);
horizonLineType = new LineTypeComboBox(new LineType[]{LineType.NONE, LineType.SOLID, LineType.DASHED});
verticalLineType = new LineTypeComboBox(new LineType[]{LineType.NONE, LineType.SOLID, LineType.DASHED});
@@ -89,13 +90,13 @@ public class VanChartAxisAreaPane extends BasicBeanPane {
protected void initGridLineComponents() {
Component[][] upComponent = new Component[][]{
new Component[]{null, null},
- new Component[]{null, horizontalColorBox}
+ new Component[]{horizontalColorBox, null}
};
horizontalColorPane = TableLayout4VanChartHelper.createGapTableLayoutPane(upComponent);
Component[][] downComponent = new Component[][]{
new Component[]{null, null},
- new Component[]{null, verticalColorBox}
+ new Component[]{verticalColorBox, null}
};
verticalColorPane = TableLayout4VanChartHelper.createGapTableLayoutPane(downComponent);
@@ -143,7 +144,7 @@ public class VanChartAxisAreaPane extends BasicBeanPane {
return panel;
}
- protected AlertLineListControlPane getAlertLinePane () {
+ protected AlertLineListControlPane getAlertLinePane() {
return new AlertLineListControlPane();
}
@@ -153,7 +154,7 @@ public class VanChartAxisAreaPane extends BasicBeanPane {
verticalColorBackground = new ColorSelectBox(100);
Component[][] components = getIntervalPaneComponents();
JPanel defaultPane = TableLayoutHelper.createTableLayoutPane(components, row, col);
- defaultPane.setBorder(BorderFactory.createEmptyBorder(0,12,0,0));
+ defaultPane.setBorder(BorderFactory.createEmptyBorder(0, 12, 0, 0));
customIntervalBackground = getBackgroundListControlPane();
cardLayout = new CardLayout();
@@ -220,12 +221,12 @@ public class VanChartAxisAreaPane extends BasicBeanPane {
VanChartAxis defaultYAxis = rectanglePlot.getDefaultYAxis();
if (defaultXAxis != null) {
- verticalColorBox.setSelectObject(defaultXAxis.getMainGridColor());
+ verticalColorBox.populate(defaultXAxis.getMainGridColorWithPreStyle());
verticalLineType.setSelectedItem(defaultXAxis.getGridLineType());
}
if (defaultYAxis != null) {
- horizontalColorBox.setSelectObject(defaultYAxis.getMainGridColor());
+ horizontalColorBox.populate(defaultYAxis.getMainGridColorWithPreStyle());
horizonLineType.setSelectedItem(defaultYAxis.getGridLineType());
}
}
@@ -253,12 +254,12 @@ public class VanChartAxisAreaPane extends BasicBeanPane {
VanChartAxis defaultYAxis = rectanglePlot.getDefaultYAxis();
if (defaultXAxis != null) {
- defaultXAxis.setMainGridColor(verticalColorBox.getSelectObject());
+ defaultXAxis.setMainGridColorWithPreStyle(verticalColorBox.update());
defaultXAxis.setGridLineType((LineType) verticalLineType.getSelectedItem());
}
if (defaultYAxis != null) {
- defaultYAxis.setMainGridColor(horizontalColorBox.getSelectObject());
+ defaultYAxis.setMainGridColorWithPreStyle(horizontalColorBox.update());
defaultYAxis.setGridLineType((LineType) horizonLineType.getSelectedItem());
}
}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/style/datasheet/VanChartDataSheetPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/datasheet/VanChartDataSheetPane.java
index 884a1e1c4..724fb6426 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/datasheet/VanChartDataSheetPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/datasheet/VanChartDataSheetPane.java
@@ -1,6 +1,5 @@
package com.fr.van.chart.designer.style.datasheet;
-import com.fr.base.FRContext;
import com.fr.chart.chartattr.Chart;
import com.fr.chart.chartattr.Plot;
import com.fr.chart.chartglyph.DataSheet;
@@ -11,9 +10,9 @@ import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
import com.fr.design.mainframe.chart.PaneTitleConstants;
import com.fr.design.mainframe.chart.gui.style.ChartTextAttrPane;
+import com.fr.design.mainframe.chart.gui.style.ChartTextAttrPaneWithPreStyle;
import com.fr.design.mainframe.chart.info.ChartInfoCollector;
import com.fr.general.ComparatorUtils;
-import com.fr.general.FRFont;
import com.fr.plugin.chart.VanChartAttrHelper;
import com.fr.plugin.chart.attr.plot.VanChartRectanglePlot;
import com.fr.plugin.chart.base.VanChartConstants;
@@ -21,6 +20,7 @@ import com.fr.plugin.chart.type.AxisType;
import com.fr.van.chart.designer.AbstractVanChartScrollPane;
import com.fr.van.chart.designer.TableLayout4VanChartHelper;
import com.fr.van.chart.designer.component.border.VanChartBorderPane;
+import com.fr.van.chart.designer.component.border.VanChartBorderPaneWithPreStyle;
import com.fr.van.chart.designer.component.format.FormatPaneWithNormalType;
import javax.swing.JPanel;
@@ -58,11 +58,11 @@ public class VanChartDataSheetPane extends AbstractVanChartScrollPane {
double f = TableLayout.FILL;
double[] columnSize = {f};
double[] rowSize = {p, p, p};
- Component[][] components =creatComponent(dataSheetPane);
+ Component[][] components = creatComponent(dataSheetPane);
JPanel panel = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize);
this.setLayout(new BorderLayout());
- this.add(panel,BorderLayout.CENTER);
+ this.add(panel, BorderLayout.CENTER);
isShowDataSheet.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
@@ -71,7 +71,8 @@ public class VanChartDataSheetPane extends AbstractVanChartScrollPane {
});
}
}
- protected Component[][] creatComponent(JPanel dataSheetPane){
+
+ protected Component[][] creatComponent(JPanel dataSheetPane) {
Component[][] components = new Component[][]{
new Component[]{isShowDataSheet},
@@ -79,28 +80,37 @@ public class VanChartDataSheetPane extends AbstractVanChartScrollPane {
};
return components;
}
+
// 检查数据表界面是否可用.
private void checkDataSheetPaneUse() {
dataSheetPane.setVisible(isShowDataSheet.isSelected());
}
- private JPanel createDataSheetPane(){
- textAttrPane = new ChartTextAttrPane();
+ private JPanel createDataSheetPane() {
+ textAttrPane = createChartTextAttrPane();
formatPane = new FormatPaneWithNormalType();
- borderPane = new VanChartBorderPane();
+ borderPane = createBorderPanePane();
double p = TableLayout.PREFERRED;
double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH;
double d = TableLayout4VanChartHelper.DESCRIPTION_AREA_WIDTH;
double[] columnSize = {d, e};
- double[] rowSize = {p,p,p};
+ double[] rowSize = {p, p, p};
Component[][] components = new Component[][]{
- new Component[]{TableLayout4VanChartHelper.createExpandablePaneWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Base_Format"),formatPane),null},
- new Component[]{TableLayout4VanChartHelper.createExpandablePaneWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Widget_Style"),textAttrPane),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_Report_Base_Format"), formatPane), null},
+ new Component[]{TableLayout4VanChartHelper.createExpandablePaneWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Widget_Style"), textAttrPane), null},
+ new Component[]{TableLayout4VanChartHelper.createExpandablePaneWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Border"), borderPane), null},
};
- return TableLayout4VanChartHelper.createGapTableLayoutPane(components,rowSize,columnSize);
+ return TableLayout4VanChartHelper.createGapTableLayoutPane(components, rowSize, columnSize);
+ }
+
+ protected VanChartBorderPane createBorderPanePane() {
+ return new VanChartBorderPaneWithPreStyle();
+ }
+
+ protected ChartTextAttrPane createChartTextAttrPane() {
+ return new ChartTextAttrPaneWithPreStyle();
}
@Override
@@ -119,11 +129,11 @@ public class VanChartDataSheetPane extends AbstractVanChartScrollPane {
@Override
public void updateBean(Chart chart) {
- if(chart == null) {
+ if (chart == null) {
return;
}
Plot plot = chart.getPlot();
- if(plot == null) {
+ if (plot == null) {
return;
}
DataSheet dataSheet = plot.getDataSheet();
@@ -133,7 +143,7 @@ public class VanChartDataSheetPane extends AbstractVanChartScrollPane {
plot.setDataSheet(dataSheet);
}
dataSheet.setVisible(isShowDataSheet.isSelected());
- if(isShowDataSheet.isSelected()){
+ if (isShowDataSheet.isSelected()) {
update(dataSheet);
}
@@ -144,14 +154,14 @@ public class VanChartDataSheetPane extends AbstractVanChartScrollPane {
@Override
public void populateBean(Chart chart) {
- if(chart == null || chart.getPlot() == null) {
+ if (chart == null || chart.getPlot() == null) {
return;
}
- VanChartRectanglePlot rectanglePlot = (VanChartRectanglePlot)chart.getPlot();
- if(rectanglePlot.getXAxisList().size() == 1){
- if(ComparatorUtils.equals(rectanglePlot.getDefaultXAxis().getAxisType(), AxisType.AXIS_CATEGORY)
+ VanChartRectanglePlot rectanglePlot = (VanChartRectanglePlot) chart.getPlot();
+ if (rectanglePlot.getXAxisList().size() == 1) {
+ if (ComparatorUtils.equals(rectanglePlot.getDefaultXAxis().getAxisType(), AxisType.AXIS_CATEGORY)
&& rectanglePlot.getDefaultXAxis().getPosition() == VanChartConstants.AXIS_BOTTOM
- && rectanglePlot.getCategoryNum() == 1 ){
+ && rectanglePlot.getCategoryNum() == 1) {
//只有单个分类坐标轴且坐标轴位置在下面,数据表才可以用
isShowDataSheet.setEnabled(!rectanglePlot.isAxisRotation());
@@ -173,16 +183,14 @@ public class VanChartDataSheetPane extends AbstractVanChartScrollPane {
}
public void populate(DataSheet dataSheet) {
- FRFont font = FRContext.getDefaultValues().getFRFont() == null ? FRFont.getInstance() : FRContext.getDefaultValues().getFRFont();
- textAttrPane.populate(dataSheet.getFont() == null ? font : dataSheet.getFont());
+ textAttrPane.populate(dataSheet.getTextAttr());
formatPane.populateBean(dataSheet.getFormat());
borderPane.populate(dataSheet);
}
public DataSheet update(DataSheet dataSheet) {
-
- dataSheet.setFont(textAttrPane.updateFRFont());
+ textAttrPane.update(dataSheet.getTextAttr());
dataSheet.setFormat(formatPane.update());
borderPane.update(dataSheet);
return dataSheet;
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/style/datasheet/VanchartDataSheetNoCheckPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/datasheet/VanchartDataSheetNoCheckPane.java
index cc47a3fc1..a81ed1902 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/datasheet/VanchartDataSheetNoCheckPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/datasheet/VanchartDataSheetNoCheckPane.java
@@ -2,7 +2,9 @@ package com.fr.van.chart.designer.style.datasheet;
import com.fr.chart.chartglyph.DataSheet;
import com.fr.design.gui.iscrollbar.UIScrollBar;
+import com.fr.design.mainframe.chart.gui.style.ChartTextAttrPane;
import com.fr.plugin.chart.base.AttrDataSheet;
+import com.fr.van.chart.designer.component.border.VanChartBorderPane;
import javax.swing.JPanel;
import java.awt.Component;
@@ -46,4 +48,13 @@ public class VanchartDataSheetNoCheckPane extends VanChartDataSheetPane {
update(dataSheet);
return attrDataSheet;
}
+
+ @Override
+ protected ChartTextAttrPane createChartTextAttrPane(){
+ return new ChartTextAttrPane();
+ }
+
+ protected VanChartBorderPane createBorderPanePane() {
+ return new VanChartBorderPane();
+ }
}
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 9a5c45382..d8c321738 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
@@ -49,10 +49,6 @@ public class VanChartGaugeCateOrPercentLabelDetailPane extends VanChartGaugeLabe
return getGaugeStyle() == GaugeStyle.RING || getGaugeStyle() == GaugeStyle.SLOT;
}
- protected boolean isFontColorAuto() {
- return getGaugeStyle() == GaugeStyle.RING || getGaugeStyle() == GaugeStyle.SLOT;
- }
-
protected boolean hasLabelPosition(Plot plot) {
switch (getGaugeStyle()) {
case RING:
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 665fdc256..09481a929 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
@@ -41,7 +41,7 @@ public class VanChartGaugeLabelDetailPane extends VanChartPlotLabelDetailPane {
private ChartTextAttrPane textFontPane;
public VanChartGaugeLabelDetailPane(Plot plot, VanChartStylePane parent) {
- super(plot, parent);
+ super(plot, parent, false);
}
protected void initLabelDetailPane(Plot plot) {
@@ -81,7 +81,7 @@ public class VanChartGaugeLabelDetailPane extends VanChartPlotLabelDetailPane {
}
protected boolean isFontColorAuto() {
- return false;
+ return true;
}
private FontAutoType getFontAutoType() {
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 fd387654e..a245ce845 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
@@ -36,7 +36,7 @@ import java.awt.Component;
public class VanChartPlotLabelDetailPane extends BasicPane {
private static final long serialVersionUID = -22438250307946275L;
- private static final int HORIZONTAL_INDEX = 0;
+ public static final int HORIZONTAL_INDEX = 0;
private BasicBeanPane dataLabelContentPane;
@@ -58,13 +58,19 @@ public class VanChartPlotLabelDetailPane extends BasicPane {
private VanChartStylePane parent;
private Plot plot;
+ private boolean inCondition;
- public VanChartPlotLabelDetailPane(Plot plot, VanChartStylePane parent) {
+ public VanChartPlotLabelDetailPane(Plot plot, VanChartStylePane parent, boolean inCondition) {
+ this.inCondition = inCondition;
this.parent = parent;
this.plot = plot;
initLabelDetailPane(plot);
}
+ public boolean isInCondition() {
+ return inCondition;
+ }
+
public BasicBeanPane getDataLabelContentPane() {
return dataLabelContentPane;
}
@@ -77,20 +83,24 @@ public class VanChartPlotLabelDetailPane extends BasicPane {
return parent;
}
- protected void initLabelDetailPane (Plot plot) {
+ protected void initLabelDetailPane(Plot plot) {
this.setLayout(new BorderLayout());
initToolTipContentPane(plot);
JPanel contentPane = createLabelPane(plot);
- this.add(contentPane,BorderLayout.CENTER);
+ this.add(contentPane, BorderLayout.CENTER);
}
public Plot getPlot() {
return plot;
}
+ public UIButtonGroup getOrientation() {
+ return orientation;
+ }
+
//默认从factory中取
protected void initToolTipContentPane(Plot plot) {
- dataLabelContentPane = PlotFactory.createPlotLabelContentPane(plot, parent, VanChartPlotLabelDetailPane.this);
+ dataLabelContentPane = PlotFactory.createPlotLabelContentPane(plot, parent, VanChartPlotLabelDetailPane.this, inCondition);
}
private JPanel createLabelPane(Plot plot) {
@@ -105,12 +115,12 @@ public class VanChartPlotLabelDetailPane extends BasicPane {
}
protected Component[][] getLabelPaneComponents(Plot plot, double p, double[] columnSize) {
- if(hasLabelPosition(plot)){
+ if (hasLabelPosition(plot)) {
// 仅饼图、柱形图、条形图、折线图、面积图含有边框和背景
if (hasBorderAndBackground(plot)) {
return new Component[][]{
- new Component[]{dataLabelContentPane,null},
+ new Component[]{dataLabelContentPane, null},
new Component[]{createLabelPositionPane(Toolkit.i18nText("Fine-Design_Chart_Layout_Position"), plot), null},
new Component[]{createLabelBorderPane(), null},
new Component[]{createLabelBackgroundPane(), null}
@@ -118,25 +128,25 @@ public class VanChartPlotLabelDetailPane extends BasicPane {
}
return new Component[][]{
- new Component[]{dataLabelContentPane,null},
+ new Component[]{dataLabelContentPane, null},
new Component[]{createLabelPositionPane(Toolkit.i18nText("Fine-Design_Chart_Layout_Position"), plot), null}
};
}
- return new Component[][]{
- new Component[]{dataLabelContentPane,null}
+ return new Component[][]{
+ new Component[]{dataLabelContentPane, null}
};
}
private JPanel createLabelBorderPane() {
- borderPane = new VanChartBorderWithShapePane();
+ borderPane = new VanChartBorderWithShapePane();
borderPaneWithTitle = TableLayout4VanChartHelper.createExpandablePaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Border"), borderPane);
return borderPaneWithTitle;
}
private JPanel createLabelBackgroundPane() {
- backgroundPane = new VanChartBackgroundWithOutImagePane(){
+ backgroundPane = new VanChartBackgroundWithOutImagePane() {
protected Component[][] getPaneComponents() {
return new Component[][]{
@@ -158,7 +168,7 @@ public class VanChartPlotLabelDetailPane extends BasicPane {
}
protected double[] getLabelPaneRowSize(Plot plot, double p) {
- return hasLabelPosition(plot) ? new double[]{p,p,p,p,p} : new double[]{p,p,p};
+ return hasLabelPosition(plot) ? new double[]{p, p, p, p, p} : new double[]{p, p, p};
}
protected boolean hasLabelPosition(Plot plot) {
@@ -278,7 +288,7 @@ public class VanChartPlotLabelDetailPane extends BasicPane {
}
}
- protected JPanel getLabelPositionPane (Component[][] comps, double[] row, double[] col){
+ protected JPanel getLabelPositionPane(Component[][] comps, double[] row, double[] col) {
return TableLayoutHelper.createTableLayoutPane(comps, row, col);
}
@@ -291,8 +301,8 @@ public class VanChartPlotLabelDetailPane extends BasicPane {
});
}
- protected ChartTextAttrPane initTextFontPane () {
- return new ChartTextAttrPane(){
+ protected ChartTextAttrPane initTextFontPane() {
+ return new ChartTextAttrPane() {
protected Component[][] getComponents(JPanel buttonPane) {
return new Component[][]{
new Component[]{null, null},
@@ -313,7 +323,7 @@ public class VanChartPlotLabelDetailPane extends BasicPane {
}
private void checkAllUse() {
- if(tractionLine == null){
+ if (tractionLine == null) {
return;
}
checkPositionEnabled();
@@ -337,33 +347,33 @@ public class VanChartPlotLabelDetailPane extends BasicPane {
tractionLinePane.setVisible(position.getSelectedItem() == Constants.OUTSIDE);
}
- protected void checkPane(){
+ protected void checkPane() {
checkPositionPane(Toolkit.i18nText("Fine-Design_Chart_Layout_Position"));
}
public void populate(AttrLabelDetail detail) {
checkPane();
dataLabelContentPane.populateBean(detail.getContent());
- if(position != null){
+ if (position != null) {
position.setSelectedItem(detail.getPosition());
}
- if(orientation != null){
+ if (orientation != null) {
orientation.setSelectedIndex(detail.isHorizontal() ? 0 : 1);
}
- if(tractionLine != null){
+ if (tractionLine != null) {
tractionLine.setSelected(detail.isShowGuidLine());
}
- if(autoAdjust != null){
+ if (autoAdjust != null) {
autoAdjust.setSelectedIndex(detail.isAutoAdjust() ? 0 : 1);
}
- if(backgroundColor != null){
+ if (backgroundColor != null) {
backgroundColor.setSelectObject(detail.getBackgroundColor());
}
- if(borderPane != null){
+ if (borderPane != null) {
borderPane.populate(detail.getBorder());
}
- if(backgroundPane != null){
+ if (backgroundPane != null) {
backgroundPane.populate(detail.getBackground());
}
@@ -375,30 +385,30 @@ public class VanChartPlotLabelDetailPane extends BasicPane {
public void update(AttrLabelDetail detail) {
detail.setContent(dataLabelContentPane.updateBean());
- if(position != null && position.getSelectedItem() != null){
+ if (position != null && position.getSelectedItem() != null) {
detail.setPosition(position.getSelectedItem());
- } else if(position != null){
+ } else if (position != null) {
position.setSelectedItem(detail.getPosition());
}
detail.setAutoAdjust(autoAdjust != null && autoAdjust.getSelectedItem());
- if(orientation != null){
+ if (orientation != null) {
detail.setHorizontal(orientation.getSelectedIndex() == 0);
}
- if(tractionLine != null){
+ if (tractionLine != null) {
detail.setShowGuidLine(tractionLine.isSelected() && detail.getPosition() == Constants.OUTSIDE);
}
- if(backgroundColor != null){
+ if (backgroundColor != null) {
detail.setBackgroundColor(backgroundColor.getSelectObject());
}
- if(borderPane != null){
+ if (borderPane != null) {
borderPane.update(detail.getBorder());
}
- if(backgroundPane != null){
+ if (backgroundPane != null) {
backgroundPane.update(detail.getBackground());
}
}
-}
+}
\ No newline at end of file
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
deleted file mode 100644
index beb89e5d7..000000000
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartPlotLabelNoCheckPane.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.fr.van.chart.designer.style.label;
-
-import com.fr.chart.chartattr.Plot;
-import com.fr.plugin.chart.base.AttrLabel;
-import com.fr.van.chart.designer.style.VanChartStylePane;
-
-import java.awt.BorderLayout;
-
-/**
- * 条件属性中用到
- */
-public class VanChartPlotLabelNoCheckPane extends VanChartPlotLabelPane {
-
- private static final long serialVersionUID = 8124894034484334810L;
-
- public VanChartPlotLabelNoCheckPane(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);
- }
-}
\ 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 f1fa6f0f1..71ad599fd 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
@@ -6,7 +6,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.plugin.chart.attr.plot.VanChartPlot;
import com.fr.plugin.chart.base.AttrLabel;
import com.fr.van.chart.designer.PlotFactory;
@@ -29,19 +28,22 @@ public class VanChartPlotLabelPane extends BasicPane {
private JPanel labelPane;
+ private boolean inCondition;
+
public VanChartPlotLabelPane(Plot plot, VanChartStylePane parent) {
+ this(plot, parent, false);
+ }
+
+ public VanChartPlotLabelPane(Plot plot, VanChartStylePane parent, boolean inCondition) {
this.parent = parent;
this.plot = plot;
+ this.inCondition = inCondition;
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;
}
@@ -67,31 +69,38 @@ public class VanChartPlotLabelPane extends BasicPane {
}
protected void createLabelPane() {
- labelDetailPane = new VanChartPlotLabelDetailPane(this.plot, this.parent);
+ labelDetailPane = createPlotLabelDetailPane();
labelPane.add(labelDetailPane, BorderLayout.CENTER);
}
protected void addComponents() {
+ this.setLayout(new BorderLayout());
+ this.add(getCenterPane(), BorderLayout.CENTER);
+ }
+
+ private JPanel getCenterPane() {
+ if (inCondition) {
+ return labelPane;
+ }
double p = TableLayout.PREFERRED;
double f = TableLayout.FILL;
double[] columnSize = {f};
- double[] rowSize = {p,p};
+ double[] rowSize = {p, p};
Component[][] components = new Component[][]{
new Component[]{isLabelShow},
new Component[]{labelPane}
};
-
- JPanel panel = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize);
- this.setLayout(new BorderLayout());
- this.add(panel,BorderLayout.CENTER);
-
isLabelShow.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
checkBoxUse();
}
});
+
+ JPanel panel = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize);
+ return panel;
}
+
@Override
protected String title4PopupWindow() {
return null;
@@ -99,7 +108,7 @@ public class VanChartPlotLabelPane extends BasicPane {
private void checkBoxUse() {
labelPane.setVisible(isLabelShow.isSelected());
- if(checkEnabled4Large()) {
+ if (checkEnabled4Large()) {
isLabelShow.setEnabled(!PlotFactory.largeDataModel(plot));
}
}
@@ -109,10 +118,11 @@ public class VanChartPlotLabelPane extends BasicPane {
}
public void populate(AttrLabel attr) {
- if(attr == null) {
- attr = ((VanChartPlot)this.plot).getDefaultAttrLabel();
+ if (attr == null) {
+ attr = ((VanChartPlot) this.plot).getDefaultAttrLabel();
}
- isLabelShow.setSelected(attr.isEnable());
+
+ isLabelShow.setSelected(inCondition ? true : attr.isEnable());
labelDetailPane.populate(attr.getAttrLabelDetail());
@@ -121,7 +131,7 @@ public class VanChartPlotLabelPane extends BasicPane {
public AttrLabel update() {
//刪除返回null,否則無法保存不顯示標籤的屬性
- AttrLabel attrLabel = ((VanChartPlot)this.plot).getDefaultAttrLabel();
+ AttrLabel attrLabel = ((VanChartPlot) this.plot).getDefaultAttrLabel();
attrLabel.setEnable(isLabelShow.isSelected());
labelDetailPane.update(attrLabel.getAttrLabelDetail());
@@ -129,4 +139,7 @@ public class VanChartPlotLabelPane extends BasicPane {
return attrLabel;
}
+ public VanChartPlotLabelDetailPane createPlotLabelDetailPane() {
+ return PlotFactory.createPlotLabelDetailPane(plot, parent, inCondition);
+ }
}
\ No newline at end of file
diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/style/series/VanChartAbstractPlotSeriesPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/series/VanChartAbstractPlotSeriesPane.java
index e8f9def4b..667c73d3a 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/series/VanChartAbstractPlotSeriesPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/series/VanChartAbstractPlotSeriesPane.java
@@ -5,6 +5,7 @@ import com.fr.base.chart.chartdata.model.LargeDataModel;
import com.fr.base.chart.chartdata.model.NormalDataModel;
import com.fr.chart.base.AttrAlpha;
import com.fr.chart.base.AttrBorder;
+import com.fr.chart.base.AttrFillStyle;
import com.fr.chart.base.GradientStyle;
import com.fr.chart.chartattr.Plot;
import com.fr.chart.chartglyph.ConditionAttr;
@@ -81,6 +82,14 @@ public abstract class VanChartAbstractPlotSeriesPane extends AbstractPlotSeriesP
super(parent, plot);
}
+ public UINumberDragPane getTransparent() {
+ return transparent;
+ }
+
+ public void setTransparent(UINumberDragPane transparent) {
+ this.transparent = transparent;
+ }
+
protected JPanel getContentPane(boolean custom) {
if (custom) {
JScrollPane scrollPane = new JScrollPane();
@@ -245,7 +254,7 @@ public abstract class VanChartAbstractPlotSeriesPane extends AbstractPlotSeriesP
}
protected VanChartBorderPane createDiffBorderPane() {
- return new VanChartBorderPane();
+ return new VanChartBorderPane(true);
}
@@ -340,7 +349,12 @@ public abstract class VanChartAbstractPlotSeriesPane extends AbstractPlotSeriesP
checkoutMapType(plot);
if (vanChartFillStylePane != null) {//配色
- plot.setPlotFillStyle(vanChartFillStylePane.updateBean());
+ AttrFillStyle plotFillStyle = plot.getPlotFillStyle();
+ if (plotFillStyle == null) {
+ plotFillStyle = new AttrFillStyle();
+ plot.setPlotFillStyle(plotFillStyle);
+ }
+ vanChartFillStylePane.updateBean(plotFillStyle);
}
if (stylePane != null) {//风格
diff --git a/designer-chart/src/main/java/com/fr/van/chart/drillmap/designer/other/VanChartDrillMapInteractivePane.java b/designer-chart/src/main/java/com/fr/van/chart/drillmap/designer/other/VanChartDrillMapInteractivePane.java
index cc912cf3f..f25802130 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/drillmap/designer/other/VanChartDrillMapInteractivePane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/drillmap/designer/other/VanChartDrillMapInteractivePane.java
@@ -3,8 +3,11 @@ package com.fr.van.chart.drillmap.designer.other;
import com.fr.chart.base.DrillMapTools;
import com.fr.chart.chartattr.Chart;
import com.fr.design.gui.ibutton.UIButtonGroup;
+import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
+import com.fr.design.mainframe.backgroundpane.ColorBackgroundQuickPane;
+import com.fr.design.mainframe.backgroundpane.NullBackgroundQuickPane;
import com.fr.design.mainframe.chart.gui.style.ChartTextAttrPane;
import com.fr.plugin.chart.attr.plot.VanChartPlot;
import com.fr.plugin.chart.drillmap.VanChartDrillMapPlot;
@@ -12,7 +15,6 @@ import com.fr.plugin.chart.vanchart.VanChart;
import com.fr.van.chart.designer.TableLayout4VanChartHelper;
import com.fr.van.chart.designer.component.background.VanChartBackgroundPaneWithOutImageAndShadow;
import com.fr.van.chart.designer.other.VanChartInteractivePaneWithMapZoom;
-import com.fr.design.i18n.Toolkit;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
@@ -74,7 +76,20 @@ public class VanChartDrillMapInteractivePane extends VanChartInteractivePaneWith
};
}
};
- backgroundPane = new VanChartBackgroundPaneWithOutImageAndShadow();
+
+ backgroundPane = new VanChartBackgroundPaneWithOutImageAndShadow() {
+ @Override
+ protected void initList() {
+ paneList.add(new NullBackgroundQuickPane() {
+ @Override
+ public String title4PopupWindow() {
+ return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Automatic");
+ }
+ });
+ paneList.add(new ColorBackgroundQuickPane());
+ }
+ };
+
selectBackgroundPane = new VanChartBackgroundPaneWithOutImageAndShadow();
catalogSuperLink = new VanChartCatalogHyperLinkPane();
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 af29cddf3..a97225d55 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
@@ -4,6 +4,7 @@ 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;
@@ -21,8 +22,8 @@ import java.awt.Component;
* Created by Mitisky on 16/10/10.
*/
public class VanChartFunnelLabelContentPane extends VanChartLabelContentPane {
- public VanChartFunnelLabelContentPane(VanChartStylePane parent, JPanel showOnPane) {
- super(parent, showOnPane);
+ public VanChartFunnelLabelContentPane(VanChartStylePane parent, JPanel showOnPane, boolean inCondition) {
+ super(parent, showOnPane, inCondition);
}
protected double[] getRowSize(double p){
@@ -77,13 +78,19 @@ public class VanChartFunnelLabelContentPane extends VanChartLabelContentPane {
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/VanChartFunnelTooltipContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/funnel/designer/style/VanChartFunnelTooltipContentPane.java
index ef6fc8210..247194ec4 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/funnel/designer/style/VanChartFunnelTooltipContentPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/funnel/designer/style/VanChartFunnelTooltipContentPane.java
@@ -77,15 +77,23 @@ public class VanChartFunnelTooltipContentPane extends VanChartTooltipContentPane
setRichTextAttr(new AttrTooltipRichText());
populateRichTextFormat(formatPaneGroup, formatGroup);
populateRichText(attrTooltipContent.getRichTextAttr());
+
+ checkRichEditorState(attrTooltipContent);
}
protected AttrTooltipContent createAttrTooltip() {
AttrTooltipContent attrTooltipContent = new AttrTooltipContent();
- attrTooltipContent.getCategoryFormat().setEnable(false);
+
attrTooltipContent.setSeriesFormat(new AttrTooltipNameFormat());
attrTooltipContent.setRichTextSeriesFormat(new AttrTooltipNameFormat());
+
+ attrTooltipContent.getCategoryFormat().setEnable(false);
attrTooltipContent.getSeriesFormat().setEnable(true);
attrTooltipContent.getValueFormat().setEnable(true);
+
+ attrTooltipContent.getRichTextCategoryFormat().setEnable(false);
+ attrTooltipContent.getRichTextSeriesFormat().setEnable(true);
+ attrTooltipContent.getRichTextValueFormat().setEnable(true);
return attrTooltipContent;
}
}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/other/VanChartGanttConditionPane.java b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/other/VanChartGanttConditionPane.java
index 24a5d45fe..fab646430 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
@@ -19,6 +19,7 @@ import com.fr.van.chart.designer.other.condition.item.VanChartTooltipConditionPa
import com.fr.van.chart.designer.style.tooltip.VanChartPlotTooltipNoCheckPane;
import com.fr.van.chart.designer.style.tooltip.VanChartPlotTooltipPane;
+import javax.swing.JPanel;
import java.awt.Dimension;
/**
@@ -55,6 +56,11 @@ public class VanChartGanttConditionPane extends DataSeriesConditionPane {
((AttrGanttTooltipContent) attrGanttTooltip.getContent()).getDurationFormat().setEnable(true);
return attrGanttTooltip;
}
+
+ @Override
+ protected JPanel createDisplayStrategy(Plot plot) {
+ return null;
+ }
};
}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/axis/GanttAxisStylePane.java b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/axis/GanttAxisStylePane.java
index 51e045edf..8ff6786ba 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/axis/GanttAxisStylePane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/axis/GanttAxisStylePane.java
@@ -23,22 +23,28 @@ public class GanttAxisStylePane extends BasicBeanPane {
private ColorSelectBoxWithOutTransparent colorSelectBox4button;
private UINumberDragPane transparent;
+ public ChartTextAttrPane getTextAttrPane() {
+ return textAttrPane;
+ }
+
+ public ColorSelectBoxWithOutTransparent getColorSelectBox4button() {
+ return colorSelectBox4button;
+ }
+
+ public UINumberDragPane getTransparent() {
+ return transparent;
+ }
+
public GanttAxisStylePane() {
- textAttrPane = new ChartTextAttrPane();
- colorSelectBox4button = new ColorSelectBoxWithOutTransparent(100);
- transparent = new UINumberDragPane(0, 100);
+ initComponents();
double p = TableLayout.PREFERRED;
double f = TableLayout.FILL;
double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH;
- double[] row = {p,p,p};
+ double[] row = {p, p, p, p};
double[] col = {f, e};
- Component[][] components = new Component[][]{
- new Component[]{textAttrPane, null},
- new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Color")), colorSelectBox4button},
- new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Alpha")), transparent}
- };
+ Component[][] components = getUsedComponents();
JPanel content = TableLayoutHelper.createTableLayoutPane(components, row, col);
@@ -46,6 +52,20 @@ public class GanttAxisStylePane extends BasicBeanPane {
this.add(content, BorderLayout.CENTER);
}
+ protected void initComponents() {
+ textAttrPane = new ChartTextAttrPane();
+ colorSelectBox4button = new ColorSelectBoxWithOutTransparent(100);
+ transparent = new UINumberDragPane(0, 100);
+ }
+
+ protected Component[][] getUsedComponents() {
+ return new Component[][]{
+ new Component[]{textAttrPane, null},
+ new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Color")), colorSelectBox4button},
+ new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Alpha")), transparent}
+ };
+ }
+
@Override
public void populateBean(GanttAxisStyleAttr contentAttr) {
textAttrPane.populate(contentAttr.getTextAttr());
diff --git a/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/axis/GanttAxisStylePaneWithPosition.java b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/axis/GanttAxisStylePaneWithPosition.java
new file mode 100644
index 000000000..102b0c232
--- /dev/null
+++ b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/axis/GanttAxisStylePaneWithPosition.java
@@ -0,0 +1,57 @@
+package com.fr.van.chart.gantt.designer.style.axis;
+
+import com.fr.base.BaseUtils;
+import com.fr.design.gui.ibutton.UIButtonGroup;
+import com.fr.design.gui.ilable.UILabel;
+import com.fr.design.i18n.Toolkit;
+import com.fr.plugin.chart.gantt.attr.GanttAxisStyleAttr;
+import com.fr.plugin.chart.gantt.attr.GanttAxisStyleAttrWithPosition;
+import com.fr.stable.Constants;
+
+import javax.swing.Icon;
+import java.awt.Component;
+
+/**
+ * @author Bjorn
+ * @version 10.0
+ * Created by Bjorn on 2020-10-27
+ */
+public class GanttAxisStylePaneWithPosition extends GanttAxisStylePane {
+
+ private UIButtonGroup alignmentPane;
+
+ protected void initComponents() {
+ super.initComponents();
+ Icon[] alignmentIconArray = {BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_left_normal.png"),
+ BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_center_normal.png"),
+ BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_right_normal.png")};
+ Integer[] alignment = new Integer[]{Constants.LEFT, Constants.CENTER, Constants.RIGHT};
+ alignmentPane = new UIButtonGroup<>(alignmentIconArray, alignment);
+ }
+
+ protected Component[][] getUsedComponents() {
+ return new Component[][]{
+ new Component[]{getTextAttrPane(), null},
+ new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Color")), getColorSelectBox4button()},
+ new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Report_Alpha")), getTransparent()},
+ new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Form_BorderLayout_Constraints")), alignmentPane}
+ };
+ }
+
+ public void populateBean(GanttAxisStyleAttrWithPosition contentAttr) {
+ super.populateBean(contentAttr);
+ alignmentPane.setSelectedItem(contentAttr.getPosition());
+ }
+
+ public void updateBean(GanttAxisStyleAttrWithPosition contentAttr) {
+ super.updateBean(contentAttr);
+ contentAttr.setPosition(alignmentPane.getSelectedItem());
+ }
+
+ @Override
+ public GanttAxisStyleAttr updateBean() {
+ GanttAxisStyleAttrWithPosition styleAttr = new GanttAxisStyleAttrWithPosition();
+ updateBean(styleAttr);
+ return styleAttr;
+ }
+}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/axis/GanttProcessAxisPane.java b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/axis/GanttProcessAxisPane.java
index c642c3e13..c2461899b 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/axis/GanttProcessAxisPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/axis/GanttProcessAxisPane.java
@@ -27,8 +27,8 @@ public class GanttProcessAxisPane extends AbstractVanChartScrollPane {
private UISpinner horizontalProportion;
private GanttAxisStylePane horizontalHeaderPane;
- private GanttAxisStylePane verticalHeaderPane;
- private GanttAxisStylePane bodyPane;
+ private GanttAxisStylePaneWithPosition verticalHeaderPane;
+ private GanttAxisStylePaneWithPosition bodyPane;
@Override
protected JPanel createContentPane() {
@@ -54,7 +54,7 @@ public class GanttProcessAxisPane extends AbstractVanChartScrollPane {
}
private Component createBodyPane() {
- bodyPane = new GanttAxisStylePane();
+ bodyPane = new GanttAxisStylePaneWithPosition();
return TableLayout4VanChartHelper.createExpandablePaneWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Content"), bodyPane);
}
@@ -66,7 +66,7 @@ public class GanttProcessAxisPane extends AbstractVanChartScrollPane {
}
private Component createVerticalHeaderPane() {
- verticalHeaderPane = new GanttAxisStylePane();
+ verticalHeaderPane = new GanttAxisStylePaneWithPosition();
return TableLayout4VanChartHelper.createExpandablePaneWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Vertical_Table"), verticalHeaderPane);
}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/label/VanChartGanttLabelContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/label/VanChartGanttLabelContentPane.java
index cfb1e63a8..69409d34b 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/label/VanChartGanttLabelContentPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/label/VanChartGanttLabelContentPane.java
@@ -24,8 +24,8 @@ public class VanChartGanttLabelContentPane extends VanChartLabelContentPane {
private VanChartFormatComBoxWithCheckBox durationFormatPane;
private VanChartFormatPaneWithCheckBox progressFormatPane;
- public VanChartGanttLabelContentPane(VanChartStylePane parent, JPanel showOnPane) {
- super(parent, showOnPane);
+ public VanChartGanttLabelContentPane(VanChartStylePane parent, JPanel showOnPane, boolean inCondition) {
+ super(parent, showOnPane, inCondition);
}
protected void initFormatPane(VanChartStylePane parent, JPanel showOnPane) {
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
deleted file mode 100644
index e00e0afd4..000000000
--- a/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/label/VanChartGanttPlotLabelDetailPane.java
+++ /dev/null
@@ -1,16 +0,0 @@
-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
deleted file mode 100644
index 546f772dd..000000000
--- a/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/label/VanChartGanttPlotLabelPane.java
+++ /dev/null
@@ -1,20 +0,0 @@
-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/tooltip/VanChartGanttTooltipContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/tooltip/VanChartGanttTooltipContentPane.java
index 0d1cc22ba..d724deff5 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/tooltip/VanChartGanttTooltipContentPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/tooltip/VanChartGanttTooltipContentPane.java
@@ -167,6 +167,8 @@ public class VanChartGanttTooltipContentPane extends VanChartTooltipContentPane
richTextProgressFormatPane.updateFormatParams(params, progressFormat.getJs());
populateRichText(attrTooltipContent.getRichTextAttr());
+
+ checkRichEditorState(attrTooltipContent);
}
}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/gauge/VanChartGaugeSeriesPane.java b/designer-chart/src/main/java/com/fr/van/chart/gauge/VanChartGaugeSeriesPane.java
index af7aaf001..ed237d4c3 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/gauge/VanChartGaugeSeriesPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/gauge/VanChartGaugeSeriesPane.java
@@ -29,6 +29,9 @@ 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/11/27.
@@ -38,6 +41,9 @@ public class VanChartGaugeSeriesPane extends VanChartAbstractPlotSeriesPane {
private static final long serialVersionUID = -4414343926082129759L;
private UIButtonGroup gaugeLayout;//布局:横向、纵向
+ private UIButtonGroup hingeColorAuto;
+ private UIButtonGroup paneBackgroundColorAuto;
+ private UIButtonGroup slotBackgroundColorAuto;
private ColorSelectBox hingeColor;//枢纽颜色
private ColorSelectBox hingeBackgroundColor;//枢纽背景颜色
private ColorSelectBox needleColor;//指针颜色
@@ -62,7 +68,7 @@ public class VanChartGaugeSeriesPane extends VanChartAbstractPlotSeriesPane {
double f = TableLayout.FILL;
double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH;
double[] columnSize = {f};
- double[] rowSize = {p,p,p,p,p,p};
+ double[] rowSize = {p,p,p,p,p,p,p};
Component[][] components = new Component[][]{
new Component[]{createGaugeLayoutPane()},
new Component[]{createGaugeStylePane(rowSize, new double[]{f,e})},
@@ -138,7 +144,8 @@ public class VanChartGaugeSeriesPane extends VanChartAbstractPlotSeriesPane {
initRotate();
return new Component[][]{
new Component[]{null, null},
- getPaneBackgroundColor(),
+ getPaneBackgroundColorAuto(),
+ new Component[]{null, paneBackgroundColor},
getInnerPaneBackgroundColor(),
new Component[]{createRadiusPane(Toolkit.i18nText("Fine-Design_Chart_Radius_Set")), null},
getChutePercent()
@@ -147,7 +154,8 @@ public class VanChartGaugeSeriesPane extends VanChartAbstractPlotSeriesPane {
return new Component[][]{
new Component[]{null, null},
getNeedleColor(),
- getSlotBackgroundColor(),
+ getSlotBackgroundColorAuto(),
+ new Component[]{null, slotBackgroundColor},
new Component[]{createRadiusPane(Toolkit.i18nText("Fine-Design_Chart_Radius_Set")), null},
getChutePercent()
};
@@ -155,25 +163,37 @@ public class VanChartGaugeSeriesPane extends VanChartAbstractPlotSeriesPane {
return new Component[][]{
new Component[]{null, null},
getNeedleColor(),
- getSlotBackgroundColor(),
+ getSlotBackgroundColorAuto(),
+ new Component[]{null, slotBackgroundColor},
new Component[]{createRadiusPane(Toolkit.i18nText("Fine-Design_Chart_Length_Set")), null},
getThermometerWidth()
};
default:
return new Component[][]{
new Component[]{null, null},
- getHingeColor(),
+ getHingeColorAuto(),
+ new Component[]{null, hingeColor},
getHingeBackgroundColor(),
getNeedleColor(),
- getPaneBackgroundColor(),
+ getPaneBackgroundColorAuto(),
+ new Component[]{null, paneBackgroundColor},
new Component[]{createRadiusPane(Toolkit.i18nText("Fine-Design_Chart_Radius_Set")), null}
};
}
}
- private Component[] getHingeColor() {
+ private Component[] getHingeColorAuto() {
hingeColor = new ColorSelectBox(120);
- return new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Hinge")),hingeColor};
+ hingeColorAuto = new UIButtonGroup<>(new String[]{Toolkit.i18nText("Fine-Design_Chart_Auto"),
+ Toolkit.i18nText("Fine-Design_Chart_Custom")});
+
+ hingeColorAuto.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ checkHingeColorAutoButton();
+ }
+ });
+ return new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Hinge")), hingeColorAuto};
}
private Component[] getHingeBackgroundColor() {
@@ -186,11 +206,39 @@ public class VanChartGaugeSeriesPane extends VanChartAbstractPlotSeriesPane {
return new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Needle")),needleColor};
}
+ private Component[] getPaneBackgroundColorAuto() {
+ paneBackgroundColor = new ColorSelectBox(120);
+ paneBackgroundColorAuto = new UIButtonGroup<>(new String[]{Toolkit.i18nText("Fine-Design_Chart_Auto"),
+ Toolkit.i18nText("Fine-Design_Chart_Custom")});
+
+ paneBackgroundColorAuto.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ checkPaneBackgroundColorAutoButton();
+ }
+ });
+ return new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Pane_Background")), paneBackgroundColorAuto};
+ }
+
private Component[] getPaneBackgroundColor() {
paneBackgroundColor = new ColorSelectBox(120);
return new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Pane_Background")),paneBackgroundColor};
}
+ private Component[] getSlotBackgroundColorAuto() {
+ slotBackgroundColor = new ColorSelectBox(120);
+ slotBackgroundColorAuto = new UIButtonGroup<>(new String[]{Toolkit.i18nText("Fine-Design_Chart_Auto"),
+ Toolkit.i18nText("Fine-Design_Chart_Custom")});
+
+ slotBackgroundColorAuto.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ checkSlotBackgroundColorAutoButton();
+ }
+ });
+ return new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Slot_Background")), slotBackgroundColorAuto};
+ }
+
private Component[] getSlotBackgroundColor() {
slotBackgroundColor = new ColorSelectBox(120);
return new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Slot_Background")),slotBackgroundColor};
@@ -220,6 +268,20 @@ public class VanChartGaugeSeriesPane extends VanChartAbstractPlotSeriesPane {
return TableLayout4VanChartHelper.createExpandablePaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Range"), colorPickerPane);
}
+ private void checkHingeColorAutoButton() {
+ hingeColor.setVisible(hingeColorAuto.getSelectedIndex() == 1);
+ hingeColor.setPreferredSize(hingeColorAuto.getSelectedIndex() == 1 ? new Dimension(0, 20) : new Dimension(0, 0));
+ }
+
+ private void checkSlotBackgroundColorAutoButton() {
+ slotBackgroundColor.setVisible(slotBackgroundColorAuto.getSelectedIndex() == 1);
+ slotBackgroundColor.setPreferredSize(slotBackgroundColorAuto.getSelectedIndex() == 1 ? new Dimension(0, 20) : new Dimension(0, 0));
+ }
+
+ private void checkPaneBackgroundColorAutoButton() {
+ paneBackgroundColor.setVisible(paneBackgroundColorAuto.getSelectedIndex() == 1);
+ paneBackgroundColor.setPreferredSize(paneBackgroundColorAuto.getSelectedIndex() == 1 ? new Dimension(0, 20) : new Dimension(0, 0));
+ }
public void populateBean(Plot plot) {
if(plot == null) {
@@ -231,6 +293,18 @@ public class VanChartGaugeSeriesPane extends VanChartAbstractPlotSeriesPane {
GaugeDetailStyle detailStyle = gaugePlot.getGaugeDetailStyle();
gaugeLayout.setSelectedIndex(detailStyle.isHorizontalLayout() ? 0 : 1);
+ if (hingeColorAuto != null) {
+ hingeColorAuto.setSelectedIndex(detailStyle.isHingeColorAuto() ? 0 : 1);
+ checkHingeColorAutoButton();
+ }
+ if (paneBackgroundColorAuto != null) {
+ paneBackgroundColorAuto.setSelectedIndex(detailStyle.isPaneBackgroundColorAuto() ? 0 : 1);
+ checkPaneBackgroundColorAutoButton();
+ }
+ if (slotBackgroundColorAuto != null) {
+ slotBackgroundColorAuto.setSelectedIndex(detailStyle.isSlotBackgroundColorAuto() ? 0 : 1);
+ checkSlotBackgroundColorAutoButton();
+ }
if(hingeColor != null){
hingeColor.setSelectObject(detailStyle.getHingeColor());
}
@@ -275,6 +349,15 @@ public class VanChartGaugeSeriesPane extends VanChartAbstractPlotSeriesPane {
GaugeDetailStyle detailStyle = gaugePlot.getGaugeDetailStyle();
detailStyle.setHorizontalLayout(gaugeLayout.getSelectedIndex() == 0);
+ if (hingeColorAuto != null) {
+ detailStyle.setHingeColorAuto(hingeColorAuto.getSelectedIndex() == 0);
+ }
+ if (paneBackgroundColorAuto != null) {
+ detailStyle.setPaneBackgroundColorAuto(paneBackgroundColorAuto.getSelectedIndex() == 0);
+ }
+ if (slotBackgroundColorAuto != null) {
+ detailStyle.setSlotBackgroundColorAuto(slotBackgroundColorAuto.getSelectedIndex() == 0);
+ }
if(hingeColor != null){
detailStyle.setHingeColor(hingeColor.getSelectObject());
}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/map/VanChartMapSeriesPane.java b/designer-chart/src/main/java/com/fr/van/chart/map/VanChartMapSeriesPane.java
index bf44ded48..714afadc2 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/map/VanChartMapSeriesPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/map/VanChartMapSeriesPane.java
@@ -3,15 +3,19 @@ package com.fr.van.chart.map;
import com.fr.base.chart.chartdata.model.DataProcessor;
import com.fr.chart.chartattr.Plot;
import com.fr.chart.chartglyph.ConditionAttr;
+import com.fr.design.constants.LayoutConstants;
import com.fr.design.gui.frpane.UINumberDragPane;
import com.fr.design.gui.ibutton.UIButtonGroup;
import com.fr.design.gui.icombobox.UIComboBox;
+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.ChartStylePane;
import com.fr.design.style.color.ColorSelectBox;
import com.fr.design.utils.gui.GUICoreUtils;
+import com.fr.design.utils.gui.UIComponentUtils;
+import com.fr.design.widget.FRWidgetFactory;
import com.fr.general.ComparatorUtils;
import com.fr.plugin.chart.VanChartAttrHelper;
import com.fr.plugin.chart.base.AttrBorderWithAlpha;
@@ -40,12 +44,15 @@ import com.fr.van.chart.map.line.VanChartLineMapEffectPane;
import javax.swing.BorderFactory;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JPanel;
+import javax.swing.SwingConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Component;
import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
@@ -72,6 +79,8 @@ public class VanChartMapSeriesPane extends VanChartColorValueSeriesPane {
//area
private VanChartBorderWithAlphaPane borderWithAlphaPane;
+
+ private UIButtonGroup nullValueAuto;
private ColorSelectBox nullValueColorBox;
//point
@@ -235,9 +244,24 @@ public class VanChartMapSeriesPane extends VanChartColorValueSeriesPane {
}
}
+ //不透明度
+ protected JPanel createAlphaPane() {
+ setTransparent(new UINumberDragPane(0, 100));
+ double p = TableLayout.PREFERRED;
+ double f = TableLayout.FILL;
+ double[] columnSize = {f, TableLayout4VanChartHelper.EDIT_AREA_WIDTH};
+ double[] rowSize = {p, p};
+ UILabel label = FRWidgetFactory.createLineWrapLabel(Toolkit.i18nText("Fine-Design_Report_Alpha"));
+ label.setVerticalAlignment(SwingConstants.TOP);
+ Component[][] components = new Component[][]{
+ new Component[]{null, null},
+ new Component[]{label, UIComponentUtils.wrapWithBorderLayoutPane(getTransparent())},
+ };
+ return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, TableLayout4VanChartHelper.COMPONENT_INTERVAL, LayoutConstants.VGAP_LARGE);
+ }
protected JPanel createAreaPane() {
- borderWithAlphaPane = new VanChartBorderWithAlphaPane();
+ borderWithAlphaPane = new VanChartBorderWithAlphaPane(true);
double p = TableLayout.PREFERRED;
double f = TableLayout.FILL;
@@ -253,9 +277,39 @@ public class VanChartMapSeriesPane extends VanChartColorValueSeriesPane {
}
protected JPanel createNullValueColorPane() {
+ nullValueAuto = new UIButtonGroup<>(new String[]{Toolkit.i18nText("Fine-Design_Chart_Auto"),
+ Toolkit.i18nText("Fine-Design_Chart_Custom")});
nullValueColorBox = new ColorSelectBox(80);
+ initNullValueListener();
- return TableLayout4VanChartHelper.createGapTableLayoutPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_NULL_Value_Color"), nullValueColorBox);
+ double f = TableLayout.FILL;
+ double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH;
+ double[] columnSize = {f, e};
+ double p = TableLayout.PREFERRED;
+
+ double[] rowSize = {p, p, p};
+ UILabel text = new UILabel(Toolkit.i18nText("Fine-Design_Chart_NULL_Value_Color"), SwingConstants.LEFT);
+ Component[][] components = {
+ new Component[]{null, null},
+ new Component[]{text, nullValueAuto},
+ new Component[]{null, nullValueColorBox},
+ };
+ return TableLayout4VanChartHelper.createGapTableLayoutPane(components, rowSize, columnSize);
+ }
+
+
+ private void initNullValueListener() {
+ nullValueAuto.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ checkNullValueButton();
+ }
+ });
+ }
+
+ private void checkNullValueButton() {
+ nullValueColorBox.setVisible(nullValueAuto.getSelectedIndex() == 1);
+ nullValueColorBox.setPreferredSize(nullValueAuto.getSelectedIndex() == 1 ? new Dimension(0, 20) : new Dimension(0, 0));
}
private JPanel createPointPane() {
@@ -445,7 +499,13 @@ public class VanChartMapSeriesPane extends VanChartColorValueSeriesPane {
markerTypeCom.setSelectedItem(((VanChartMapPlot) plot).getMapMarkerType().toLocalString());
}
if (nullValueColorBox != null) {
+ if (((VanChartMapPlot) plot).isAutoNullValue()) {
+ nullValueAuto.setSelectedIndex(0);
+ } else {
+ nullValueAuto.setSelectedIndex(1);
+ }
nullValueColorBox.setSelectObject(((VanChartMapPlot) plot).getNullValueColor());
+ checkNullValueButton();
}
//大数据模式 恢复用注释。下面3行删除。
if (lineMapLargeDataModelGroup != null) {
@@ -461,6 +521,7 @@ public class VanChartMapSeriesPane extends VanChartColorValueSeriesPane {
((VanChartMapPlot) plot).setMapMarkerType(MapMarkerType.parseInt(markerTypeCom.getSelectedIndex()));
}
if (nullValueColorBox != null) {
+ ((VanChartMapPlot) plot).setAutoNullValue(nullValueAuto.getSelectedIndex() == 0);
((VanChartMapPlot) plot).setNullValueColor(nullValueColorBox.getSelectObject());
}
//大数据模式 恢复用注释。下面3行删除。
diff --git a/designer-chart/src/main/java/com/fr/van/chart/map/designer/style/VanChartMapStylePane.java b/designer-chart/src/main/java/com/fr/van/chart/map/designer/style/VanChartMapStylePane.java
index 68ec083e4..2083d9f12 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/map/designer/style/VanChartMapStylePane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/map/designer/style/VanChartMapStylePane.java
@@ -7,6 +7,8 @@ import com.fr.general.ComparatorUtils;
import com.fr.plugin.chart.map.VanChartMapPlot;
import com.fr.plugin.chart.type.MapType;
import com.fr.van.chart.designer.style.VanChartStylePane;
+import com.fr.van.chart.designer.style.VanChartTitlePane;
+import com.fr.van.chart.designer.style.VanChartTitleWithAutoBackground;
import com.fr.van.chart.map.designer.style.label.VanChartMapLabelPane;
import com.fr.van.chart.map.designer.style.tooltip.VanChartMapTooltipPane;
@@ -20,6 +22,11 @@ public class VanChartMapStylePane extends VanChartStylePane {
super(listener);
}
+
+ protected VanChartTitlePane createVanChartTitlePane() {
+ return new VanChartTitleWithAutoBackground(VanChartMapStylePane.this);
+ }
+
protected void createVanChartLabelPane(List paneList) {
Plot plot = getChart().getPlot();
if(!isLineMapPlot(plot)) {
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 f73c32a48..084953c99 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/map/designer/style/label/VanChartMapLabelContentPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/map/designer/style/label/VanChartMapLabelContentPane.java
@@ -3,6 +3,7 @@ package com.fr.van.chart.map.designer.style.label;
import com.fr.plugin.chart.base.AttrTooltipContent;
import com.fr.plugin.chart.base.format.AttrTooltipAreaNameFormat;
import com.fr.plugin.chart.base.format.AttrTooltipMapValueFormat;
+import com.fr.plugin.chart.type.TextAlign;
import com.fr.van.chart.designer.component.VanChartLabelContentPane;
import com.fr.van.chart.designer.component.format.MapAreaNameFormatPaneWithCheckBox;
import com.fr.van.chart.designer.component.format.MapAreaNameFormatPaneWithoutCheckBox;
@@ -20,8 +21,8 @@ import javax.swing.JPanel;
* Created by Mitisky on 16/5/20.
*/
public class VanChartMapLabelContentPane extends VanChartLabelContentPane {
- public VanChartMapLabelContentPane(VanChartStylePane parent, JPanel showOnPane) {
- super(parent, showOnPane);
+ public VanChartMapLabelContentPane(VanChartStylePane parent, JPanel showOnPane, boolean inCondition) {
+ super(parent, showOnPane, inCondition);
}
@Override
@@ -42,7 +43,7 @@ public class VanChartMapLabelContentPane extends VanChartLabelContentPane {
@Override
protected AttrTooltipContent createAttrTooltip() {
- AttrTooltipContent content = new AttrTooltipContent();
+ AttrTooltipContent content = new AttrTooltipContent(TextAlign.CENTER);
content.setCategoryFormat(new AttrTooltipAreaNameFormat());
content.setValueFormat(new AttrTooltipMapValueFormat());
content.setRichTextCategoryFormat(new AttrTooltipAreaNameFormat());
diff --git a/designer-chart/src/main/java/com/fr/van/chart/map/designer/type/VanChartMapSourceChoosePane.java b/designer-chart/src/main/java/com/fr/van/chart/map/designer/type/VanChartMapSourceChoosePane.java
index e58797dca..17b275e30 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/map/designer/type/VanChartMapSourceChoosePane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/map/designer/type/VanChartMapSourceChoosePane.java
@@ -646,10 +646,8 @@ public class VanChartMapSourceChoosePane extends JPanel implements UIObserver {
private void resetGisLayer(VanChartMapPlot mapPlot) {
- String layerName = mapPlot.getDefaultGisLayerName();
-
- mapPlot.getGisLayer().setGisLayerType(GISLayerType.PREDEFINED_LAYER);
- mapPlot.getGisLayer().setLayerName(layerName);
+ mapPlot.getGisLayer().setGisLayerType(GISLayerType.AUTO);
+ mapPlot.getGisLayer().setLayerName(GISLayerType.getLocString(GISLayerType.AUTO));
gisLayer.setSelectedItem(mapPlot.getGisLayer().getShowItemName());
}
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 a3d8f3c57..73e766afc 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/multilayer/style/VanChartMultiPieLabelContentPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/multilayer/style/VanChartMultiPieLabelContentPane.java
@@ -2,6 +2,7 @@ package com.fr.van.chart.multilayer.style;
import com.fr.plugin.chart.base.AttrTooltipContent;
import com.fr.plugin.chart.multilayer.style.AttrTooltipMultiLevelNameFormat;
+import com.fr.plugin.chart.type.TextAlign;
import com.fr.van.chart.designer.component.VanChartLabelContentPane;
import com.fr.van.chart.designer.component.format.PercentFormatPaneWithCheckBox;
import com.fr.van.chart.designer.component.format.PercentFormatPaneWithoutCheckBox;
@@ -15,8 +16,8 @@ import javax.swing.JPanel;
* Created by Fangjie on 2016/6/15.
*/
public class VanChartMultiPieLabelContentPane extends VanChartLabelContentPane {
- public VanChartMultiPieLabelContentPane(VanChartStylePane parent, JPanel showOnPane) {
- super(parent, showOnPane);
+ public VanChartMultiPieLabelContentPane(VanChartStylePane parent, JPanel showOnPane, boolean inCondition) {
+ super(parent, showOnPane, inCondition);
}
@Override
@@ -36,7 +37,7 @@ public class VanChartMultiPieLabelContentPane extends VanChartLabelContentPane {
}
protected AttrTooltipContent createAttrTooltip() {
- AttrTooltipContent content = new AttrTooltipContent();
+ AttrTooltipContent content = new AttrTooltipContent(TextAlign.CENTER);
content.setCategoryFormat(new AttrTooltipMultiLevelNameFormat());
content.setRichTextCategoryFormat(new AttrTooltipMultiLevelNameFormat());
return content;
diff --git a/designer-chart/src/main/java/com/fr/van/chart/scatter/VanChartScatterConditionPane.java b/designer-chart/src/main/java/com/fr/van/chart/scatter/VanChartScatterConditionPane.java
index c1e7886c9..4bd463c80 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/scatter/VanChartScatterConditionPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/scatter/VanChartScatterConditionPane.java
@@ -17,11 +17,11 @@ import com.fr.plugin.chart.scatter.attr.ScatterAttrTooltip;
import com.fr.van.chart.bubble.VanChartBubbleConditionSelectionPane;
import com.fr.van.chart.designer.PlotFactory;
import com.fr.van.chart.designer.other.condition.item.VanChartEffectConditionPane;
+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.VanChartTrendLineConditionPane;
import com.fr.van.chart.scatter.component.VanChartScatterLineTypeConditionPane;
import com.fr.van.chart.scatter.component.VanChartScatterMarkerConditionPane;
-import com.fr.van.chart.scatter.component.label.VanChartScatterLabelConditionPane;
import com.fr.van.chart.scatter.component.tooltip.VanChartScatterTooltipConditionPane;
import com.fr.van.chart.scatter.large.VanChartScatterLargeModelMarkerConditionPane;
@@ -57,7 +57,7 @@ public class VanChartScatterConditionPane extends DataSeriesConditionPane {
} else {
classPaneMap.put(VanChartAttrLine.class, new VanChartScatterLineTypeConditionPane(this));
classPaneMap.put(VanChartAttrMarker.class, new VanChartScatterMarkerConditionPane(this));
- classPaneMap.put(ScatterAttrLabel.class, new VanChartScatterLabelConditionPane(this, plot));
+ classPaneMap.put(ScatterAttrLabel.class, new VanChartLabelConditionPane(this, plot));
classPaneMap.put(AttrEffect.class, new VanChartEffectConditionPane(this, EffectHelper.getScatterPlotDefaultEffect()));
}
}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/scatter/VanChartScatterLabelContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/scatter/VanChartScatterLabelContentPane.java
index 72ab39c9a..9a48756cc 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,9 +1,13 @@
package com.fr.van.chart.scatter;
+import com.fr.design.mainframe.chart.gui.style.ChartTextAttrPaneWithPreStyle;
+import com.fr.plugin.chart.base.AttrTooltipContent;
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;
+import java.awt.BorderLayout;
/**
* 散点图标签界面
@@ -11,13 +15,37 @@ import javax.swing.JPanel;
public class VanChartScatterLabelContentPane extends VanChartScatterTooltipContentPane{
private static final long serialVersionUID = 5595016643808487922L;
- public VanChartScatterLabelContentPane(VanChartStylePane parent, JPanel showOnPane) {
- super(parent, showOnPane);
+ public VanChartScatterLabelContentPane(VanChartStylePane parent, JPanel showOnPane, boolean inCondition) {
+ super(parent, showOnPane, inCondition);
}
@Override
protected VanChartHtmlLabelPane createHtmlLabelPane() {
- return new VanChartHtmlLabelPane();
+ return new VanChartHtmlLabelPaneWithBackGroundLabel();
}
+ public JPanel createCommonStylePane() {
+ if (isInCondition()) {
+ return super.createCommonStylePane();
+ }
+ setTextAttrPane(new ChartTextAttrPaneWithPreStyle());
+
+ JPanel stylePanel = new JPanel(new BorderLayout());
+ stylePanel.add(getTextAttrPane(), BorderLayout.CENTER);
+
+ return stylePanel;
+ }
+
+ public void updateTextAttr(AttrTooltipContent attrTooltipContent) {
+ if (isInCondition()) {
+ super.updateTextAttr(attrTooltipContent);
+ return;
+ }
+ if (hasTextStylePane()) {
+ this.getTextAttrPane().update(attrTooltipContent.getTextAttr());
+ if (!attrTooltipContent.getTextAttr().isPredefinedStyle()) {
+ attrTooltipContent.setCustom(true);
+ }
+ }
+ }
}
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 cdc2b040e..39b20bedb 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
@@ -58,6 +58,10 @@ public class VanChartScatterTooltipContentPane extends VanChartTooltipContentPa
super(parent, showOnPane);
}
+ public VanChartScatterTooltipContentPane(VanChartStylePane parent, JPanel showOnPane, boolean inCondition){
+ super(parent, showOnPane, inCondition);
+ }
+
@Override
protected void initFormatPane(VanChartStylePane parent, JPanel showOnPane){
@@ -128,6 +132,8 @@ public class VanChartScatterTooltipContentPane extends VanChartTooltipContentPa
setRichTextAttr(new AttrTooltipRichText());
populateRichTextFormat(formatPaneGroup, formatGroup);
populateRichText(attrTooltipContent.getRichTextAttr());
+
+ checkRichEditorState(attrTooltipContent);
}
}
diff --git a/designer-chart/src/main/java/com/fr/van/chart/scatter/component/label/VanChartScatterLabelConditionPane.java b/designer-chart/src/main/java/com/fr/van/chart/scatter/component/label/VanChartScatterLabelConditionPane.java
deleted file mode 100644
index 2ff71ee0c..000000000
--- a/designer-chart/src/main/java/com/fr/van/chart/scatter/component/label/VanChartScatterLabelConditionPane.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.fr.van.chart.scatter.component.label;
-
-import com.fr.chart.chartattr.Plot;
-import com.fr.design.condition.ConditionAttributesPane;
-import com.fr.van.chart.designer.other.condition.item.VanChartLabelConditionPane;
-import com.fr.van.chart.designer.style.label.VanChartPlotLabelPane;
-
-public class VanChartScatterLabelConditionPane extends VanChartLabelConditionPane {
-
- public VanChartScatterLabelConditionPane(ConditionAttributesPane conditionAttributesPane, Plot plot) {
- super(conditionAttributesPane, plot);
- }
-
- @Override
- protected VanChartPlotLabelPane createLabelPane() {
- return new VanChartScatterPlotLabelNoCheckPane(getPlot(), null);
- }
-}
\ No newline at end of file
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
deleted file mode 100644
index a78261f65..000000000
--- a/designer-chart/src/main/java/com/fr/van/chart/scatter/component/label/VanChartScatterPlotLabelDetailPane.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.fr.van.chart.scatter.component.label;
-
-import com.fr.chart.chartattr.Plot;
-import com.fr.van.chart.designer.style.VanChartStylePane;
-import com.fr.van.chart.designer.style.label.VanChartPlotLabelDetailPane;
-import com.fr.van.chart.scatter.VanChartScatterLabelContentPane;
-
-
-
-/**
- * 散点图的分类,多x、y标签
- */
-public class VanChartScatterPlotLabelDetailPane extends VanChartPlotLabelDetailPane {
-
- private static final long serialVersionUID = 5176535960949074940L;
- public VanChartScatterPlotLabelDetailPane(Plot plot, VanChartStylePane parent) {
- super(plot, parent);
- }
-
- @Override
- protected void initToolTipContentPane(Plot plot) {
- 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
deleted file mode 100644
index a40918073..000000000
--- a/designer-chart/src/main/java/com/fr/van/chart/scatter/component/label/VanChartScatterPlotLabelNoCheckPane.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.fr.van.chart.scatter.component.label;
-
-import com.fr.chart.chartattr.Plot;
-import com.fr.plugin.chart.base.AttrLabel;
-import com.fr.van.chart.designer.style.VanChartStylePane;
-
-import java.awt.BorderLayout;
-
-/**
- * 条件属性中用到
- */
-public class VanChartScatterPlotLabelNoCheckPane extends VanChartScatterPlotLabelPane {
-
- private static final long serialVersionUID = 8124894034484334810L;
-
- public VanChartScatterPlotLabelNoCheckPane(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);
- }
-}
\ 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
deleted file mode 100644
index fb8be9016..000000000
--- a/designer-chart/src/main/java/com/fr/van/chart/scatter/component/label/VanChartScatterPlotLabelPane.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.fr.van.chart.scatter.component.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;
-
-/**
- * Created by Mitisky on 16/3/1.
- */
-public class VanChartScatterPlotLabelPane extends VanChartPlotLabelPane {
- private static final long serialVersionUID = 7405875523954797047L;
-
- public VanChartScatterPlotLabelPane(Plot plot, VanChartStylePane parent) {
- super(plot, parent);
- }
-
- @Override
- protected void createLabelPane() {
- 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 bfe147ba6..beeb7efe9 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/style/VanChartStructureLabelContentPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/style/VanChartStructureLabelContentPane.java
@@ -4,6 +4,7 @@ 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;
@@ -18,8 +19,8 @@ import java.awt.Component;
* Created by shine on 2017/2/15.
*/
public class VanChartStructureLabelContentPane extends VanChartLabelContentPane {
- public VanChartStructureLabelContentPane(VanChartStylePane parent, JPanel showOnPane) {
- super(parent, showOnPane);
+ public VanChartStructureLabelContentPane(VanChartStylePane parent, JPanel showOnPane, boolean inCondition) {
+ super(parent, showOnPane, inCondition);
}
@Override
@@ -60,7 +61,7 @@ public class VanChartStructureLabelContentPane extends VanChartLabelContentPane
@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
deleted file mode 100644
index 20e784c52..000000000
--- a/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/style/VanChartStructurePlotLabelDetailPane.java
+++ /dev/null
@@ -1,16 +0,0 @@
-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
deleted file mode 100644
index e4cdc99e1..000000000
--- a/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/style/VanChartStructurePlotLabelPane.java
+++ /dev/null
@@ -1,20 +0,0 @@
-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/VanChartStructureTooltipContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/style/VanChartStructureTooltipContentPane.java
index 493da6934..f5999391f 100644
--- a/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/style/VanChartStructureTooltipContentPane.java
+++ b/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/style/VanChartStructureTooltipContentPane.java
@@ -106,6 +106,8 @@ public class VanChartStructureTooltipContentPane extends VanChartTooltipContentP
setRichTextAttr(new AttrTooltipRichText());
populateRichTextFormat(formatPaneGroup, formatGroup);
populateRichText(attrTooltipContent.getRichTextAttr());
+
+ checkRichEditorState(attrTooltipContent);
}
@Override
diff --git a/designer-chart/src/main/resources/com/fr/design/editor/rich_editor.html b/designer-chart/src/main/resources/com/fr/design/editor/rich_editor.html
index 95cf3cf3b..07fbb3ec7 100644
--- a/designer-chart/src/main/resources/com/fr/design/editor/rich_editor.html
+++ b/designer-chart/src/main/resources/com/fr/design/editor/rich_editor.html
@@ -40,6 +40,8 @@
var content = Pool.data.getContent();
var isAuto = Pool.data.isAuto();
var params = Pool.data.getParams();
+ var initParams = Pool.data.getInitParams();
+ var align = Pool.data.getAlign();
var getDimensionIds = function (params) {
var result = [];
@@ -57,8 +59,29 @@
return result;
}
+ var getInitContent = function (params, initParams, align) {
+ var editorService = BI.Services.getService("bi.service.design.chart.common.editor");
+ var paramGroup = params.split("-");
+
+ content = "";
+
+ for (var i = 0, len = paramGroup.length; i < len; i++) {
+ var [key, value] = paramGroup[i].split(":");
+
+ if (initParams.indexOf(value) > -1) {
+ content += '' + editorService.getEditorParamImage(key) + '
';
+ }
+ }
+
+ return content;
+ }
+
var dimensionIds = getDimensionIds(params);
+ if (initParams) {
+ content = getInitContent(params, initParams, align);
+ }
+
var rich_editor = BI.createWidget({
type: "bi.design.chart.common.editor",
element: "body",
@@ -92,11 +115,25 @@
});
Pool.dispatch = function () {
+ var content = Pool.data.getContent();
+ var isAuto = Pool.data.isAuto();
+ var params = Pool.data.getParams();
+ var initParams = Pool.data.getInitParams();
+ var align = Pool.data.getAlign();
+
+ if (initParams) {
+ content = getInitContent(params, initParams, align);
+ }
+
+ rich_editor.editor.bindToolbar(rich_editor.bar);
+
rich_editor.setValue({
- content: Pool.data.getContent(),
- isAuto: Pool.data.isAuto(),
- dimensionIds: getDimensionIds(Pool.data.getParams())
+ content: content,
+ isAuto: isAuto,
+ dimensionIds: getDimensionIds(params)
});
+
+ rich_editor.setFocus();
}
Pool.update = function () {
diff --git a/designer-chart/src/main/resources/com/fr/design/editor/script/editor.js b/designer-chart/src/main/resources/com/fr/design/editor/script/editor.js
index 494be9525..bb5370e4f 100644
--- a/designer-chart/src/main/resources/com/fr/design/editor/script/editor.js
+++ b/designer-chart/src/main/resources/com/fr/design/editor/script/editor.js
@@ -27,7 +27,6 @@
this.editor = BI.createWidget({
type: "bi.nic_editor",
$value: "chart-common-editor",
- height: 365,
cls: "editor bi-border bi-focus-shadow " + (o.textAlign === "center" ? "editor-center-text" : ""),
listeners: [{
eventName: BI.NicEditor.EVENT_FOCUS,
@@ -194,7 +193,7 @@
content = this.editor.getValue(BI.NicEditor.FormatType.ESCAPE),
isEqualToPlaceholder = editorService.isRichTextEqual(content, this.options.placeholder);
- var HTML_ONLY_STYLE_TAG = "|||||||||||||||||
||
|
";
+ var HTML_ONLY_STYLE_TAG = "|||||||||||||||||
";
if (!isEqualToPlaceholder) {
content = content.replaceAll(HTML_ONLY_STYLE_TAG, "");
@@ -232,7 +231,7 @@
content = this.editor.getValue(BI.NicEditor.FormatType.ESCAPE),
origin = content;
if (isAuto) {
- // content = this._switchToAutoStyle();
+ content = this._switchToAutoStyle();
this.setFocus();
} else if (editorService.isRichTextEqual(content, this.options.placeholder)) {
content = "";
diff --git a/designer-chart/src/main/resources/com/fr/design/editor/script/insertcombo/combo.insert_param.js b/designer-chart/src/main/resources/com/fr/design/editor/script/insertcombo/combo.insert_param.js
index 7efb49c0c..7cf11f9ce 100644
--- a/designer-chart/src/main/resources/com/fr/design/editor/script/insertcombo/combo.insert_param.js
+++ b/designer-chart/src/main/resources/com/fr/design/editor/script/insertcombo/combo.insert_param.js
@@ -45,27 +45,15 @@
var searchPopup = {
type: "bi.vertical",
cls: "bi-border",
- hgap: 15,
- tgap: 5,
+ tgap: 10,
bgap: 10,
- items: [{
- type: "bi.searcher",
- adapter: this.adapter,
- width: 210,
- height: 24,
- listeners: [{
- eventName: BI.Searcher.EVENT_CHANGE,
- action: function () {
- self.store.changeParam(this.getValue()[0]);
- }
- }]
- }, this.adapter]
+ items: [this.adapter]
};
return {
type: "bi.combo",
direction: "bottom,left",
- isNeedAdjustWidth: false,
+ isNeedAdjustWidth: true,
el: {
type: "bi.vertical_adapt",
items: [{
@@ -79,7 +67,8 @@
}]
},
popup: {
- el: searchPopup
+ el: searchPopup,
+ minWidth: 150
},
ref: function (_ref) {
self.combo = _ref;
diff --git a/designer-form/src/main/java/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java b/designer-form/src/main/java/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java
index 24c3a19db..c0eb39297 100644
--- a/designer-form/src/main/java/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java
+++ b/designer-form/src/main/java/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java
@@ -19,7 +19,12 @@ import com.fr.design.designer.creator.cardlayout.XWCardTitleLayout;
import com.fr.design.designer.creator.cardlayout.XWTabFitLayout;
import com.fr.design.designer.properties.FRFitLayoutConstraints;
import com.fr.design.designer.properties.FRFitLayoutPropertiesGroupModel;
+import com.fr.design.file.HistoryTemplateListCache;
import com.fr.design.fun.FormWidgetOptionProvider;
+import com.fr.design.mainframe.FormDesigner;
+import com.fr.design.mainframe.JForm;
+import com.fr.design.mainframe.JTemplate;
+import com.fr.design.mainframe.WidgetPropertyPane;
import com.fr.design.utils.ComponentUtils;
import com.fr.form.ui.LayoutBorderStyle;
import com.fr.form.ui.container.WAbsoluteLayout;
@@ -342,7 +347,15 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter {
//拖拽组件原大小、位置
Rectangle backupBound = creator.getBackupBound();
backupBound.x -= container.getX();
- backupBound.y -= container.getY();
+ // REPORT-34739 对绝对画布块的backupBound.y的调整还需要考虑一下参数面板块的高度造成的偏移
+ int paraHeight = 0;
+ if (creator.acceptType(XWAbsoluteLayout.class)) {
+ JTemplate, ?> jTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate();
+ if (jTemplate instanceof JForm) {
+ paraHeight = ((JForm) jTemplate).getFormDesign().getParaHeight();
+ }
+ }
+ backupBound.y -= (container.getY() - paraHeight);
//当前拖拽组件的位置
int x = creator.getX();
int y = creator.getY();
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 c002bceb3..a565f4bf4 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
@@ -20,6 +20,8 @@ import com.fr.design.mainframe.HelpDialogManager;
import com.fr.design.mainframe.widget.editors.WLayoutBorderStyleEditor;
import com.fr.design.module.DesignModuleFactory;
import com.fr.form.ui.BaseChartEditor;
+import com.fr.form.ui.NameComponentBackground;
+import com.fr.form.ui.NameLayoutBorderStyle;
import com.fr.form.ui.Widget;
import com.fr.stable.Constants;
import com.fr.stable.core.PropertyChangeAdapter;
@@ -228,6 +230,7 @@ public class XChartEditor extends XBorderStyleWidgetCreator {
* 渲染Painter
*/
public void paint(Graphics g) {
+ initBorderStyle();
designerEditor.paintEditor(g, this.getSize());
if (coverPanel != null) {
coverPanel.setSize(this.getSize());
@@ -362,4 +365,14 @@ public class XChartEditor extends XBorderStyleWidgetCreator {
return false;
}
+ /**
+ * 初始化组件的预定义信息
+ */
+ public void initWidgetPredefinedInfo(String styleName){
+ this.toData().setNameBorderStyle(NameLayoutBorderStyle.createPredefinedStyle(styleName));
+ this.toData().setNameBackground(NameComponentBackground.createPredefinedStyle(styleName));
+ initBorderStyle();
+ }
+
+
}
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 ec83a1f9a..f3218e9a5 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
@@ -24,11 +24,16 @@ import com.fr.design.utils.gui.LayoutUtils;
import com.fr.form.ui.Widget;
import com.fr.form.ui.container.WTitleLayout;
import com.fr.stable.Constants;
+import com.fr.stable.CoreGraphHelper;
import com.fr.stable.StableUtils;
import com.fr.stable.StringUtils;
+import com.fr.third.javax.annotation.Nullable;
import javax.swing.BorderFactory;
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
import javax.swing.JComponent;
+import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.Border;
import java.awt.BorderLayout;
@@ -38,6 +43,7 @@ import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
+import java.awt.image.BufferedImage;
import java.beans.IntrospectionException;
import java.util.ArrayList;
import java.util.List;
@@ -805,11 +811,18 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo
return false;
}
- /**
- * 是否支持置顶显示
- */
+
public boolean isTopable() {
return true;
}
+ /**
+ * 初始化组件的预定义信息
+ */
+ public void initWidgetPredefinedInfo(String styleName){
+
+ }
+
+
+
}
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 718c30aeb..a0f902112 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
@@ -19,6 +19,8 @@ import com.fr.form.FormProvider;
import com.fr.form.ui.ElementCaseEditor;
import com.fr.form.ui.ElementCaseEditorProvider;
+import com.fr.form.ui.NameComponentBackground;
+import com.fr.form.ui.NameLayoutBorderStyle;
import com.fr.report.fit.ReportFitAttr;
import com.fr.stable.ArrayUtils;
import com.fr.stable.CoreGraphHelper;
@@ -372,4 +374,20 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme
return true;
}
+ /**
+ * 初始化组件的预定义信息
+ */
+ public void initWidgetPredefinedInfo(String styleName){
+ this.toData().setNameBorderStyle(NameLayoutBorderStyle.createPredefinedStyle(styleName));
+ this.toData().setNameBackground(NameComponentBackground.createPredefinedStyle(styleName));
+ initBorderStyle();
+ }
+
+ @Override
+ public void paint(Graphics g) {
+ super.paint(g);
+ initBorderStyle();
+ }
+
+
}
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 2c88e6252..917b73434 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
@@ -7,8 +7,10 @@ import com.fr.design.form.util.XCreatorConstants;
import com.fr.design.fun.WidgetPropertyUIProvider;
import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.widget.editors.WLayoutBorderStyleEditor;
+import com.fr.form.ui.NameFormBackground;
import com.fr.form.ui.container.WAbsoluteBodyLayout;
+import com.fr.stable.StringUtils;
import com.fr.stable.core.PropertyChangeAdapter;
import java.awt.Component;
@@ -135,4 +137,11 @@ public class XWAbsoluteBodyLayout extends XWAbsoluteLayout {
public boolean isTopable() {
return false;
}
+
+ /**
+ * 初始化组件的预定义信息
+ */
+ public void initWidgetPredefinedInfo(String styleName){
+ this.toData().setNameBackground(NameFormBackground.createPredefinedStyle(styleName));
+ }
}
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 3e425b4cd..7379b8310 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
@@ -12,6 +12,7 @@ import com.fr.design.mainframe.FormArea;
import com.fr.design.mainframe.FormDesigner;
import com.fr.design.mainframe.WidgetPropertyPane;
import com.fr.design.utils.gui.LayoutUtils;
+import com.fr.form.ui.NameFormBackground;
import com.fr.form.ui.PaddingMargin;
import com.fr.form.ui.Widget;
import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget;
@@ -23,6 +24,7 @@ import com.fr.general.FRLogger;
import com.fr.general.FRScreen;
import com.fr.stable.ArrayUtils;
import com.fr.stable.AssistUtils;
+import com.fr.stable.StringUtils;
import javax.swing.JOptionPane;
import java.awt.Component;
@@ -1342,4 +1344,11 @@ public class XWFitLayout extends XLayoutContainer {
}
}
}
+ /**
+ * 初始化组件的预定义信息
+ */
+ public void initWidgetPredefinedInfo(String styleName){
+ this.toData().setNameBackground(NameFormBackground.createPredefinedStyle(styleName));
+ }
+
}
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 a706674c7..076bd24d9 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
@@ -8,19 +8,16 @@ import com.fr.design.designer.creator.CRPropertyDescriptor;
import com.fr.design.designer.creator.XCreator;
import com.fr.design.designer.creator.XLayoutContainer;
import com.fr.design.designer.creator.XWFitLayout;
-import com.fr.design.designer.properties.mobile.MobileBooKMarkUsePropertyUI;
-import com.fr.design.designer.properties.mobile.MobileBookMarkPropertyUI;
-import com.fr.design.form.util.FormDesignerUtils;
import com.fr.design.form.util.XCreatorConstants;
import com.fr.design.fun.WidgetPropertyUIProvider;
import com.fr.design.gui.imenu.UIPopupMenu;
import com.fr.design.mainframe.FormDesigner;
import com.fr.design.mainframe.FormHierarchyTreePane;
-import com.fr.design.mainframe.WidgetPropertyPane;
import com.fr.design.mainframe.widget.editors.ButtonTypeEditor;
import com.fr.design.mainframe.widget.editors.ImgBackgroundEditor;
import com.fr.design.utils.gui.LayoutUtils;
import com.fr.form.ui.CardSwitchButton;
+import com.fr.form.ui.NameComponentBackground;
import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget;
import com.fr.form.ui.container.cardlayout.WCardTagLayout;
import com.fr.form.ui.container.cardlayout.WTabFitLayout;
@@ -643,4 +640,14 @@ public class XWTabFitLayout extends XWFitLayout {
public boolean isTopable() {
return true;
}
+
+
+
+ /**
+ * 初始化组件的预定义信息
+ */
+ public void initWidgetPredefinedInfo(String styleName){
+ this.toData().setNameBackground(NameComponentBackground.createPredefinedStyle(styleName));
+ }
+
}
diff --git a/designer-form/src/main/java/com/fr/design/form/parameter/FormParaDesigner.java b/designer-form/src/main/java/com/fr/design/form/parameter/FormParaDesigner.java
index 8956125eb..8d13f3ab4 100644
--- a/designer-form/src/main/java/com/fr/design/form/parameter/FormParaDesigner.java
+++ b/designer-form/src/main/java/com/fr/design/form/parameter/FormParaDesigner.java
@@ -30,6 +30,7 @@ import com.fr.design.mainframe.EastRegionContainerPane;
import com.fr.design.mainframe.FormArea;
import com.fr.design.mainframe.FormDesigner;
import com.fr.design.mainframe.FormDesignerModeForSpecial;
+import com.fr.design.mainframe.FormDesignerUI;
import com.fr.design.mainframe.FormParaPane;
import com.fr.design.mainframe.FormWidgetDetailPane;
import com.fr.design.mainframe.JTemplate;
@@ -58,6 +59,7 @@ import java.awt.Graphics;
import java.awt.Image;
import java.awt.Insets;
import java.awt.Rectangle;
+import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -467,6 +469,21 @@ public class FormParaDesigner extends FormDesigner implements ParameterDesignerP
return ((FormParameterUI) getTarget()).getDesignSize();
}
+ /**
+ * 设置其UI类为DesignerUI,负责渲染
+ */
+ @Override
+ public void updateUI() {
+ setUI(new FormDesignerUI(){
+ @Override
+ protected Rectangle getFitPaintBounds(Component component, Component parent) {
+ return new Rectangle(0, 0, parent.getSize().width, parent.getSize().height);
+ }
+
+ });
+ }
+
+
/**
* 设置高度
*
@@ -722,4 +739,11 @@ public class FormParaDesigner extends FormDesigner implements ParameterDesignerP
return new JComponent[]{new CutAction(this).createToolBarComponent(), new CopyAction(this).createToolBarComponent(), new PasteAction(this).createToolBarComponent(),
new FormDeleteAction(this).createToolBarComponent()};
}
+
+ @Override
+ public boolean checkIfBeyondValidArea(MouseEvent e){
+ return false;
+ }
+
+
}
diff --git a/designer-form/src/main/java/com/fr/design/gui/xpane/FormPredefinedBackgroundPane.java b/designer-form/src/main/java/com/fr/design/gui/xpane/FormPredefinedBackgroundPane.java
new file mode 100644
index 000000000..58787a19d
--- /dev/null
+++ b/designer-form/src/main/java/com/fr/design/gui/xpane/FormPredefinedBackgroundPane.java
@@ -0,0 +1,102 @@
+package com.fr.design.gui.xpane;
+
+import com.fr.config.predefined.BackgroundWithAlpha;
+import com.fr.design.layout.FRGUIPaneFactory;
+import com.fr.design.mainframe.predefined.ui.PredefinedStyleSettingPane;
+import com.fr.design.mainframe.predefined.ui.detail.background.BackgroundWithAlphaSettingPane;
+import com.fr.design.mainframe.predefined.ui.preview.StyleSettingPreviewPane;
+import com.fr.form.ui.NameComponentBackground;
+import com.fr.form.ui.NameFormBackground;
+
+import javax.swing.JPanel;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.geom.Rectangle2D;
+
+/**
+ * Created by kerry on 2020-09-02
+ */
+public class FormPredefinedBackgroundPane extends PredefinedStyleSettingPane {
+ private BackgroundWithAlphaSettingPane backgroundPane;
+
+ @Override
+ protected StyleSettingPreviewPane createPreviewPane() {
+ return new PreviewPane();
+ }
+
+ @Override
+ protected JPanel createCustomDetailPane() {
+ JPanel panel = FRGUIPaneFactory.createBorderLayout_S_Pane();
+ backgroundPane = new BackgroundWithAlphaSettingPane();
+ backgroundPane.addChangeListener(new ChangeListener() {
+ @Override
+ public void stateChanged(ChangeEvent e) {
+ previewPane.refresh();
+ }
+ });
+ panel.add(backgroundPane, BorderLayout.CENTER);
+ return panel;
+ }
+
+ @Override
+ public void populateBean(NameComponentBackground ob) {
+ this.setPopulating(true);
+ super.populate(ob);
+ this.backgroundPane.populateBean(ob.createRealStyle());
+ this.previewPane.refresh();
+ this.setPopulating(false);
+ }
+
+
+ @Override
+ public NameComponentBackground updateBean() {
+ if (this.predefinedRadioBtn.isSelected()) {
+ return NameFormBackground.createPredefinedStyle(getPredefinedStyleName());
+ } else {
+ return NameFormBackground.createCustomStyle(this.backgroundPane.updateBean());
+ }
+ }
+
+ private BackgroundWithAlpha getCurrentValue() {
+ if (this.predefinedRadioBtn.isSelected()) {
+ NameComponentBackground componentBackground = NameFormBackground.createPredefinedStyle(getPredefinedStyleName());
+ return componentBackground.createRealStyle();
+ } else {
+ return this.backgroundPane.updateBean();
+ }
+ }
+
+ @Override
+ public String title4PopupWindow() {
+ return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background");
+ }
+
+ class PreviewPane extends StyleSettingPreviewPane {
+ private BackgroundWithAlpha background;
+
+ public PreviewPane() {
+ this.setLayout(FRGUIPaneFactory.createBorderLayout());
+ this.setPreferredSize(new Dimension(390, 511));
+ this.setBackground(Color.WHITE);
+ }
+
+
+ public void refresh() {
+ background = getCurrentValue();
+ this.repaint();
+ }
+
+ @Override
+ public void paint(Graphics g) {
+ super.paint(g);
+ if (background != null && background.getBackground() != null) {
+ background.getBackground().paint(g, new Rectangle2D.Double(0, 0, this.getWidth(), this.getHeight()));
+ }
+ }
+ }
+
+}
diff --git a/designer-form/src/main/java/com/fr/design/gui/xpane/PredefinedComponentStyleSettingPane.java b/designer-form/src/main/java/com/fr/design/gui/xpane/PredefinedComponentStyleSettingPane.java
new file mode 100644
index 000000000..6a67a1281
--- /dev/null
+++ b/designer-form/src/main/java/com/fr/design/gui/xpane/PredefinedComponentStyleSettingPane.java
@@ -0,0 +1,144 @@
+package com.fr.design.gui.xpane;
+
+import com.fr.config.predefined.PredefinedComponentStyle;
+import com.fr.design.beans.BasicBeanPane;
+import com.fr.design.formula.TinyFormulaPane;
+import com.fr.design.gui.ilable.UILabel;
+import com.fr.design.layout.FRGUIPaneFactory;
+import com.fr.design.mainframe.predefined.ui.PredefinedStyleSettingPane;
+import com.fr.design.mainframe.predefined.ui.detail.component.ComponentFrameStylePane;
+import com.fr.design.mainframe.predefined.ui.detail.component.ComponentTitleStylePane;
+import com.fr.design.mainframe.predefined.ui.preview.StyleSettingPreviewPane;
+import com.fr.form.ui.LayoutBorderStyle;
+import com.fr.form.ui.NameLayoutBorderStyle;
+import javax.swing.JPanel;
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+
+/**
+ * Created by kerry on 2020-09-02
+ */
+public class PredefinedComponentStyleSettingPane extends PredefinedStyleSettingPane {
+ private StyleSettingPane styleSettingPane;
+ private TinyFormulaPane formulaPane;
+
+ @Override
+ protected StyleSettingPreviewPane createPreviewPane() {
+ return new PreviewPane();
+ }
+
+ protected JPanel createPredefinedSettingPane() {
+ JPanel jPanel = new JPanel();
+ jPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 10));
+ jPanel.add(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Widget_Style_Title_Content")));
+ formulaPane = new TinyFormulaPane();
+ formulaPane.setPreferredSize(new Dimension(158, 30));
+ jPanel.add(formulaPane);
+ return jPanel;
+
+ }
+
+ @Override
+ protected JPanel createCustomDetailPane() {
+ JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane();
+ styleSettingPane = new StyleSettingPane();
+ jPanel.add(styleSettingPane, BorderLayout.CENTER);
+ return jPanel;
+ }
+
+ @Override
+ public void populateBean(NameLayoutBorderStyle ob) {
+ this.setPopulating(true);
+ super.populate(ob);
+ this.formulaPane.populateBean(ob.getTitleText().toString());
+ styleSettingPane.populateBean(ob);
+ this.previewPane.refresh();
+ this.setPopulating(false);
+ }
+
+
+ @Override
+ public NameLayoutBorderStyle updateBean() {
+ if (predefinedRadioBtn.isSelected()) {
+ NameLayoutBorderStyle layoutBorderStyle = NameLayoutBorderStyle.createPredefinedStyle(getPredefinedStyleName());
+ layoutBorderStyle.setTitleText(formulaPane.updateBean());
+ return layoutBorderStyle;
+ }
+ return styleSettingPane.updateBean();
+ }
+
+ @Override
+ public String title4PopupWindow() {
+ return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Style");
+ }
+
+ class StyleSettingPane extends BasicBeanPane {
+ private ComponentFrameStylePane frameStylePane;
+ private ComponentTitleStylePane titleStylePane;
+
+ public StyleSettingPane() {
+ initPane();
+ }
+
+ private void initPane() {
+ this.setLayout(FRGUIPaneFactory.createBorderLayout());
+ JPanel frame = FRGUIPaneFactory.createTitledBorderNoGapPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Widget_Style_Frame"));
+ frameStylePane = new ComponentFrameStylePane();
+ frameStylePane.setPreferredSize(new Dimension(233, 225));
+ frame.add(frameStylePane);
+
+ JPanel title = FRGUIPaneFactory.createTitledBorderNoGapPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Widget_Style_Title"));
+ titleStylePane = ComponentTitleStylePane.createStyleSettingPane();
+ titleStylePane.setPreferredSize(new Dimension(233, 220));
+ title.add(titleStylePane);
+
+ this.add(frame, BorderLayout.NORTH);
+ this.add(title, BorderLayout.CENTER);
+ }
+
+ @Override
+ public void populateBean(NameLayoutBorderStyle ob) {
+ PredefinedComponentStyle componentStyle = new PredefinedComponentStyle();
+ componentStyle.setBorderStyle(ob.createRealStyle());
+ frameStylePane.populate(componentStyle);
+ titleStylePane.populate(componentStyle);
+ }
+
+ @Override
+ public NameLayoutBorderStyle updateBean() {
+ PredefinedComponentStyle componentStyle = update();
+ NameLayoutBorderStyle nameLayoutBorderStyle = NameLayoutBorderStyle.createCustomStyle(componentStyle.getBorderStyle());
+ return nameLayoutBorderStyle;
+ }
+
+ public PredefinedComponentStyle update() {
+ PredefinedComponentStyle componentStyle = new PredefinedComponentStyle();
+ frameStylePane.update(componentStyle);
+ titleStylePane.update(componentStyle);
+ return componentStyle;
+ }
+
+ @Override
+ protected String title4PopupWindow() {
+ return null;
+ }
+ }
+
+ class PreviewPane extends StyleSettingPreviewPane {
+ private LayoutBorderPreviewPane layoutBorderPreviewPane;
+
+ public PreviewPane() {
+ this.setPreferredSize(new Dimension(390, 511));
+ this.setLayout(FRGUIPaneFactory.createBorderLayout());
+ this.layoutBorderPreviewPane = new LayoutBorderPreviewPane(new LayoutBorderStyle());
+ this.add(this.layoutBorderPreviewPane, BorderLayout.CENTER);
+ }
+
+ public void refresh() {
+ NameLayoutBorderStyle componentStyle = PredefinedComponentStyleSettingPane.this.updateBean();
+ this.layoutBorderPreviewPane.repaint((LayoutBorderStyle) componentStyle.createRealStyle());
+ }
+
+ }
+}
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 ee667fd38..e1ac304b2 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
@@ -4,11 +4,9 @@ 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.file.HistoryTemplateListCache;
import com.fr.design.gui.itree.UITreeUI;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.stable.StringUtils;
@@ -19,9 +17,7 @@ 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;
@@ -37,8 +33,9 @@ import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Enumeration;
+import java.util.HashMap;
import java.util.List;
-import java.util.Vector;
+import java.util.Map;
public class ComponentTree extends JTree {
@@ -46,6 +43,8 @@ public class ComponentTree extends JTree {
private ComponentTreeModel model;
private UITreeUI uiTreeUI = new UITreeUI();
private PopupPreviewPane previewPane;
+
+ private static final Map> treePathCache = new HashMap<>();
private static final int PADDING_LEFT = 5;
private static final int PADDING_TOP = 5;
@@ -85,6 +84,7 @@ public class ComponentTree extends JTree {
public ComponentTree(FormDesigner designer, ComponentTreeModel model) {
this(designer);
this.setModel(model);
+ expandTree();
}
public void setSelectionPath(TreePath path) {
@@ -138,7 +138,6 @@ public class ComponentTree extends JTree {
setSelectionPaths(treepath);
if (treepath.length > 0) {
scrollPathToVisible(treepath[0]);
- //expandPath(treepath[0]);
}
}
@@ -193,6 +192,20 @@ public class ComponentTree extends JTree {
return paths;
}
+ @Override
+ protected void setExpandedState(TreePath path, boolean state) {
+ super.setExpandedState(path, state);
+ saveTreePath();
+ }
+
+ /**
+ * 删除key对应的缓存展开路径
+ */
+ public void removeTreePath(String key) {
+ if (StringUtils.isNotEmpty(key)) {
+ treePathCache.remove(key);
+ }
+ }
private void setSelectionPath() {
@@ -232,6 +245,7 @@ public class ComponentTree extends JTree {
public void refreshTreeRoot() {
model = new ComponentTreeModel(designer, designer.getTopContainer());
setModel(model);
+ expandTree();
setDragEnabled(false);
setDropMode(DropMode.ON_OR_INSERT);
setTransferHandler(new TreeTransferHandler());
@@ -239,49 +253,56 @@ public class ComponentTree extends JTree {
}
/**
- * 获得树的展开路径
- * */
- public void getExpandNodes(List searchList) {
- getExpandNodes((XLayoutContainer)designer.getTopContainer(),searchList);
+ * 从缓存中获取展开路径并进行展开
+ */
+ public void expandTree() {
+ expandTree(loadTreePath());
}
- 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);
- }
- }
+ /**
+ * 按照传入参数展开组件树
+ */
+ private void expandTree(List list) {
+ if (list == null) {
+ return;
}
- //对绝对布局做特殊处理
- 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);
- }
- }
+ for (TreePath treePath : list) {
+ expandPath(treePath);
}
}
/**
- * 将树按照展开路径进行展开
- * */
- 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 List getExpandTreePaths() {
+ List result = new ArrayList<>();
+ TreePath rootTreePath = buildTreePath(designer.getTopContainer());
+ Enumeration enumeration = getExpandedDescendants(rootTreePath);
+ if (enumeration != null) {
+ while (enumeration.hasMoreElements()) {
+ result.add(enumeration.nextElement());
}
}
+ return result;
+ }
+
+ private void saveTreePath() {
+ String templateID = designer.getTarget().getTemplateID();
+ JTemplate, ?> jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate();
+ if (templateID != null && jt != null && StringUtils.equals(templateID, jt.getTarget().getTemplateID())) {
+ String key = jt.getEditingFILE().getPath() + templateID;
+ treePathCache.put(key, getExpandTreePaths());
+ }
+ }
+
+ private List loadTreePath() {
+ JTemplate, ?> jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate();
+ if (jt == null) {
+ return null;
+ }
+ String key = jt.getEditingFILE().getPath() + designer.getTarget().getTemplateID();
+
+ return treePathCache.get(key);
}
private TreePath buildTreePath(Component comp) {
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 089bafc59..524dd8bf1 100644
--- a/designer-form/src/main/java/com/fr/design/mainframe/EditingMouseListener.java
+++ b/designer-form/src/main/java/com/fr/design/mainframe/EditingMouseListener.java
@@ -166,7 +166,7 @@ public class EditingMouseListener extends MouseInputAdapter {
// 获取焦点,以便获取热键
designer.requestFocus();
}
- if (e.getButton() == MouseEvent.BUTTON1 && !beyondValidArea(e)) {
+ if (e.getButton() == MouseEvent.BUTTON1 && !designer.checkIfBeyondValidArea(e)) {
Direction dir = selectionModel.getDirectionAt(e);
if (!DesignerMode.isAuthorityEditing()) {
@@ -194,15 +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());
@@ -384,7 +375,7 @@ public class EditingMouseListener extends MouseInputAdapter {
if (component.getCoverPane().getComponentCount() > 1) {
JComponent button1 = (JComponent) component.getCoverPane().getComponent(1);
int minX1 = button1.getX() + getParentPositionX(component, 0) - designer.getHorizontalScaleValue();
- int minY1 = button1.getY() + getParentPositionY(component, 0) - designer.getVerticalScaleValue();
+ int minY1 = button1.getY() + getParentPositionY(component, 0) - designer.getVerticalScaleValue() + component.getY();
if (e.getX() + GAP - component.getInsets().left > minX1 && e.getX() - GAP - component.getInsets().left < minX1 + button1.getWidth()) {
if (e.getY() + GAP - component.getInsets().top > minY1 && e.getY() - GAP - component.getInsets().top < minY1 + button1.getHeight()) {
designer.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
diff --git a/designer-form/src/main/java/com/fr/design/mainframe/FormDesigner.java b/designer-form/src/main/java/com/fr/design/mainframe/FormDesigner.java
index a80032ed6..7923c3fa2 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
@@ -37,10 +37,10 @@ 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;
+import com.fr.design.file.HistoryTemplateListCache;
import com.fr.design.file.HistoryTemplateListPane;
import com.fr.design.form.util.XCreatorConstants;
import com.fr.design.fun.RightSelectionHandlerProvider;
@@ -969,7 +969,9 @@ public class FormDesigner extends TargetComponent