Browse Source

Merge branch 'feature/10.0' of ssh://code.fineres.com:7999/~fanglei/design10.0 into feature/10.0

* 'feature/10.0' of ssh://code.fineres.com:7999/~fanglei/design10.0: (37 commits)
  REPORT-55795 【10.0.19】报错规范——设计器远程设计连接部分 fix 单元测试
  无jira 解决冲突 错误提交回退
  无jira 解决冲突 错误提交回退
  REPORT-55795 【10.0.19】报错规范——设计器远程设计连接部分
  CHART-20142 所有抽出去的protected public方法 都保留 因为可能被插件或者oem什么的用到
  REPORT-56080 图表双击无法进入图表编辑页
  REPORT-55060 数据集预览支持复制
  REPORT-55060 数据集预览支持复制
  REPORT-55060 数据集预览支持复制
  CHART-18786 feat:表格组件
  解决冲突
  无jira 解决冲突 update
  feat:其他组合图不需要类型界面,自定义组合图需要
  refactor:plugin use 10.0 not compatible xxx copy from 10.0 code
  feat:类型和特性面板如果没有其他设置项 则拿掉
  merge
  merge:REPORT-49986 【10.0.16】性能优化之阻塞EDT线程时优化 fix
  merge:REPORT-51958 远程环境检测及同步
  merge:REPORT-53626 设计器启动异常
  merge:REPORT-53229 补上空格
  ...
feature/10.0
方磊 3 years ago
parent
commit
02494a4e59
  1. 88
      designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java
  2. 24
      designer-base/src/main/java/com/fr/design/base/clipboard/ClipboardHelper.java
  3. 4
      designer-base/src/main/java/com/fr/design/base/mode/DesignModeContext.java
  4. 3
      designer-base/src/main/java/com/fr/design/base/mode/DesignerMode.java
  5. 203
      designer-base/src/main/java/com/fr/design/data/datapane/preview/CopyableJTable.java
  6. 3
      designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java
  7. 239
      designer-base/src/main/java/com/fr/design/dialog/UIDetailErrorLinkDialog.java
  8. 2
      designer-base/src/main/java/com/fr/design/env/DesignerWorkspaceInfo.java
  9. 15
      designer-base/src/main/java/com/fr/design/env/RemoteDesignerWorkspaceInfo.java
  10. 16
      designer-base/src/main/java/com/fr/design/gui/chart/ChartEditPaneActionListener.java
  11. 6
      designer-base/src/main/java/com/fr/design/gui/chart/ChartEditPaneProvider.java
  12. 278
      designer-base/src/main/java/com/fr/design/mainframe/CenterRegionContainerPane.java
  13. 393
      designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java
  14. 7
      designer-base/src/main/java/com/fr/design/mainframe/DesktopCardPane.java
  15. 14
      designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java
  16. 137
      designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java
  17. 83
      designer-base/src/main/java/com/fr/design/mainframe/JTemplateNameHelper.java
  18. 144
      designer-base/src/main/java/com/fr/design/mainframe/NorthRegionContainerPane.java
  19. 25
      designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java
  20. 21
      designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDockPlus.java
  21. 32
      designer-base/src/main/java/com/fr/env/HelpLink.java
  22. 36
      designer-base/src/main/java/com/fr/env/RemoteDesignLocaleMark.java
  23. 48
      designer-base/src/main/java/com/fr/env/RemoteEnvPane.java
  24. 16
      designer-base/src/main/java/com/fr/env/handler/Handler.java
  25. 88
      designer-base/src/main/java/com/fr/env/handler/RemoteDesignExceptionHandler.java
  26. 30
      designer-base/src/main/java/com/fr/env/handler/ResultWrapper.java
  27. 18
      designer-base/src/main/java/com/fr/env/handler/impl/CancelHandler.java
  28. 48
      designer-base/src/main/java/com/fr/env/handler/impl/CommonHandler.java
  29. 21
      designer-base/src/main/java/com/fr/env/handler/impl/ExecutionHandler.java
  30. 24
      designer-base/src/main/java/com/fr/env/handler/impl/UnexpectedHandler.java
  31. 21
      designer-base/src/test/java/com/fr/design/env/RemoteDesignerWorkspaceInfoTest.java
  32. 23
      designer-base/src/test/java/com/fr/design/mainframe/JTemplateNameHelperTest.java
  33. 213
      designer-chart/src/main/java/com/fr/design/ChartTypeInterfaceManager.java
  34. 32
      designer-chart/src/main/java/com/fr/design/chart/fun/ChartTypeUIProvider.java
  35. 1
      designer-chart/src/main/java/com/fr/design/chart/fun/IndependentChartUIProvider.java
  36. 59
      designer-chart/src/main/java/com/fr/design/chart/fun/impl/AbstractChartTypeUI.java
  37. 1
      designer-chart/src/main/java/com/fr/design/chart/fun/impl/AbstractIndependentChartUIWithAPILevel.java
  38. 38
      designer-chart/src/main/java/com/fr/design/chart/fun/impl/DefaultChartTypePane.java
  39. 15
      designer-chart/src/main/java/com/fr/design/chart/fun/impl/InvisibleChartTypePane.java
  40. 25
      designer-chart/src/main/java/com/fr/design/chartx/data/map/LineMapAreaLngLatPaneWithComboBox.java
  41. 16
      designer-chart/src/main/java/com/fr/design/chartx/data/map/PointMapAreaLngLatPaneWithComboBox.java
  42. 2
      designer-chart/src/main/java/com/fr/design/chartx/fields/diff/AbstractCellDataFieldsWithSeriesValuePane.java
  43. 15
      designer-chart/src/main/java/com/fr/design/chartx/fields/diff/AbstractDataSetFieldsWithSeriesValuePane.java
  44. 13
      designer-chart/src/main/java/com/fr/design/chartx/impl/AbstractDataPane.java
  45. 5
      designer-chart/src/main/java/com/fr/design/chartx/impl/AbstractOtherPane.java
  46. 13
      designer-chart/src/main/java/com/fr/design/mainframe/ChartPropertyPane.java
  47. 112
      designer-chart/src/main/java/com/fr/design/mainframe/MapEditPane.java
  48. 53
      designer-chart/src/main/java/com/fr/design/mainframe/chart/ChartEditPane.java
  49. 3
      designer-chart/src/main/java/com/fr/design/mainframe/chart/ChartHyperEditPane.java
  50. 8
      designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java
  51. 70
      designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/ChartTypePane.java
  52. 9
      designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/data/NormalChartDataPane.java
  53. 4
      designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/AbstractChartTypePane.java
  54. 26
      designer-chart/src/main/java/com/fr/design/mainframe/chart/mode/ChartEditContext.java
  55. 12
      designer-chart/src/main/java/com/fr/design/mainframe/chart/mode/ChartEditMode.java
  56. 5
      designer-chart/src/main/java/com/fr/design/module/ChartHyperlinkGroup.java
  57. 4
      designer-chart/src/main/java/com/fr/extended/chart/AbstractExtendedChartUIProvider.java
  58. 4
      designer-chart/src/main/java/com/fr/van/chart/area/AreaIndependentVanChartInterface.java
  59. 4
      designer-chart/src/main/java/com/fr/van/chart/bar/BarIndependentVanChartInterface.java
  60. 4
      designer-chart/src/main/java/com/fr/van/chart/box/BoxIndependentVanChartInterface.java
  61. 4
      designer-chart/src/main/java/com/fr/van/chart/bubble/BubbleIndependentVanChartInterface.java
  62. 4
      designer-chart/src/main/java/com/fr/van/chart/column/VanColumnChartTypeUI.java
  63. 4
      designer-chart/src/main/java/com/fr/van/chart/custom/VanChartCustomDataPane.java
  64. 28
      designer-chart/src/main/java/com/fr/van/chart/custom/VanChartCustomPlotPane.java
  65. 4
      designer-chart/src/main/java/com/fr/van/chart/custom/other/VanChartCustomInteractivePane.java
  66. 15
      designer-chart/src/main/java/com/fr/van/chart/designer/other/VanChartInteractivePane.java
  67. 8
      designer-chart/src/main/java/com/fr/van/chart/drillmap/designer/other/VanChartDrillMapInteractivePane.java
  68. 4
      designer-chart/src/main/java/com/fr/van/chart/funnel/designer/FunnelIndependentVanChartInterface.java
  69. 4
      designer-chart/src/main/java/com/fr/van/chart/gantt/designer/GanttIndependentVanChartInterface.java
  70. 4
      designer-chart/src/main/java/com/fr/van/chart/gauge/GaugeIndependentVanChartInterface.java
  71. 4
      designer-chart/src/main/java/com/fr/van/chart/line/LineIndependentVanChartInterface.java
  72. 3
      designer-chart/src/main/java/com/fr/van/chart/map/designer/other/VanChartMapInteractivePane.java
  73. 7
      designer-chart/src/main/java/com/fr/van/chart/map/designer/type/VanChartMapPlotPane.java
  74. 4
      designer-chart/src/main/java/com/fr/van/chart/multilayer/MultiPieIndependentVanChartInterface.java
  75. 4
      designer-chart/src/main/java/com/fr/van/chart/pie/PieIndependentVanChartInterface.java
  76. 4
      designer-chart/src/main/java/com/fr/van/chart/radar/RadarIndependentVanChartInterface.java
  77. 4
      designer-chart/src/main/java/com/fr/van/chart/scatter/ScatterIndependentVanChartInterface.java
  78. 4
      designer-chart/src/main/java/com/fr/van/chart/structure/desinger/VanStructureChartTypeUI.java
  79. 4
      designer-chart/src/main/java/com/fr/van/chart/treemap/TreeMapIndependentVanChartInterface.java
  80. 4
      designer-chart/src/main/java/com/fr/van/chart/wordcloud/designer/WordCloudIndependentVanChartInterface.java
  81. 5
      designer-form/src/main/java/com/fr/design/designer/beans/models/SelectionModel.java
  82. 15
      designer-realize/src/main/java/com/fr/design/actions/utils/DeprecatedActionManager.java
  83. 203
      designer-realize/src/main/java/com/fr/design/cell/clipboard/CellElementsClip.java
  84. 6
      designer-realize/src/main/java/com/fr/design/mainframe/ElementCasePane.java
  85. 11
      designer-realize/src/main/java/com/fr/design/mainframe/ElementCasePaneDelegate.java
  86. 9
      designer-realize/src/main/java/com/fr/design/mainframe/JWorkBook.java
  87. 5
      designer-realize/src/main/java/com/fr/design/mainframe/ReportComponentComposite.java
  88. 13
      designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellOtherSetPane.java
  89. 1
      designer-realize/src/main/java/com/fr/grid/selection/CellSelection.java
  90. 14
      designer-realize/src/main/java/com/fr/start/module/DesignerWorkspaceProvider.java

88
designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java

@ -6,7 +6,6 @@ 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;
@ -21,14 +20,11 @@ import com.fr.design.notification.NotificationCenter;
import com.fr.design.utils.DesignUtils;
import com.fr.design.versioncheck.VersionCheckUtils;
import com.fr.env.EnvListPane;
import com.fr.env.RemoteWorkspaceURL;
import com.fr.env.TestConnectionResult;
import com.fr.env.handler.RemoteDesignExceptionHandler;
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;
import com.fr.license.exception.RegistEditionException;
import com.fr.locale.InterProviderFactory;
import com.fr.log.FineLoggerFactory;
import com.fr.process.ProcessEventPipe;
@ -46,8 +42,6 @@ import com.fr.workspace.base.WorkspaceAPI;
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;
@ -66,7 +60,6 @@ import java.util.List;
import java.util.Set;
import java.util.HashSet;
import static javax.swing.JOptionPane.ERROR_MESSAGE;
import static javax.swing.JOptionPane.QUESTION_MESSAGE;
public class EnvChangeEntrance {
@ -79,6 +72,8 @@ public class EnvChangeEntrance {
private static EnvChangeEntrance singleton = new EnvChangeEntrance();
}
private BasicDialog dialog;
private EnvChangeEntrance() {
@ -116,13 +111,6 @@ public class EnvChangeEntrance {
Workspace workspace = DesignerWorkspaceGenerator.generate(selectedEnv);
boolean checkValid = workspace != null && selectedEnv.checkValid();
if (!checkValid) {
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_Tool_Tips"), ERROR_MESSAGE, UIManager.getIcon("OptionPane.errorIcon"));
}
});
return false;
}
@ -149,34 +137,9 @@ public class EnvChangeEntrance {
template.refreshToolArea();
}
pluginErrorRemind();
} catch (WorkspaceAuthException | RegistEditionException e) {
// String title = Toolkit.i18nText("Fine-Design_Basic_Remote_Connect_Auth_Failed");
// String title = Toolkit.i18nText("Fine-Design_Basic_Lic_Does_Not_Support_Remote");
strategy.showTip(new PopTip() {
@Override
public void show() {
FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(),
Toolkit.i18nText("Fine-Design_Basic_Switch_Workspace_Failed"),
Toolkit.i18nText("Fine-Design_Basic_Tool_Tips"),
ERROR_MESSAGE,
UIManager.getIcon("OptionPane.errorIcon"));
}
});
return false;
} catch (WorkspaceCheckException e) {
handleWorkspaceCheckException(e, strategy, connectionInfo);
return false;
} catch (Exception exception) {
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_Tool_Tips"),
ERROR_MESSAGE,
UIManager.getIcon("OptionPane.errorIcon")));
}
// 失败的处理
RemoteDesignExceptionHandler.getInstance().handleInSwitch(exception, selectedEnv);
return false;
}
TemplateTreePane.getInstance().refreshDockingView();
@ -188,29 +151,6 @@ public class EnvChangeEntrance {
return true;
}
public 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_Tool_Tips"),
ERROR_MESSAGE,
UIManager.getIcon("OptionPane.errorIcon")));
} else {
if (result.isVerifyResult()) {
FineLoggerFactory.getLogger().error(result.getText().replaceAll(TestConnectionResult.WRAP, StringUtils.EMPTY) + Toolkit.i18nText("Fine-Design_Basic_Remote_Design_Modify_PassWord"));
}
strategy.showTip(() -> FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(),
result.isVerifyResult()
? new MessageWithLink(result.getText(), Toolkit.i18nText("Fine-Design_Basic_Remote_Design_Modify_PassWord"), info.getUrl() + RemoteWorkspaceURL.SYSTEM_LOGIN_PATH)
: result.getText(),
Toolkit.i18nText("Fine-Design_Basic_Error"),
ERROR_MESSAGE,
UIManager.getIcon("OptionPane.errorIcon")));
}
}
/**
* 这个功能留着可能会加回来先做注释处理
* 切换远程环境之前进行版本检测当版本不一致的时候提示
@ -440,7 +380,7 @@ public class EnvChangeEntrance {
public void chooseEnv(final String envName) {
final EnvListPane envListPane = new EnvListPane();
final BasicDialog envListDialog = envListPane.showWindow(DesignerContext.getDesignerFrame());
dialog = envListDialog;
envListPane.populateEnvManager(envName);
envListDialog.addDialogActionListener(new DialogActionAdapter() {
@ -457,6 +397,7 @@ public class EnvChangeEntrance {
@Override
public void doCancel() {
envListDialog.dispose();
dialog = null;
// todo 断开了但是没选择新的环境,那么尝试重连旧环境,等接口
}
});
@ -474,6 +415,7 @@ public class EnvChangeEntrance {
final EnvListPane envListPane = new EnvListPane();
envListPane.populateEnvManager(DesignerEnvManager.getEnvManager().getCurEnvName());
BasicDialog envListDialog = envListPane.showWindow(SwingUtilities.getWindowAncestor(DesignerContext.getDesignerFrame()));
dialog = envListDialog;
envListDialog.addDialogActionListener(new DialogActionAdapter() {
@Override
@ -489,6 +431,7 @@ public class EnvChangeEntrance {
@Override
public void doCancel() {
dialog = null;
DesignerExiter.getInstance().execute();
}
});
@ -523,6 +466,9 @@ public class EnvChangeEntrance {
return false;
}
public BasicDialog getDialog() {
return dialog;
}
/**
* 提示显示策略
@ -559,14 +505,4 @@ public class EnvChangeEntrance {
interface PopTip {
void show();
}
private static class SuccessPopTip implements PopTip {
@Override
public void show() {
FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(),
Toolkit.i18nText("Fine-Design_Basic_Switch_Workspace_Success"),
Toolkit.i18nText("Fine-Design_Basic_Tool_Tips"),
FineJOptionPane.INFORMATION_MESSAGE);
}
}
}

24
designer-base/src/main/java/com/fr/design/base/clipboard/ClipboardHelper.java

@ -0,0 +1,24 @@
package com.fr.design.base.clipboard;
import java.util.List;
public class ClipboardHelper {
public static String formatExcelString(List<List<Object>> table) {
StringBuffer stringBuffer = new StringBuffer();
for (int row = 0; row < table.size(); row++) {
List<Object> rowValue = table.get(row);
for (int col = 0; col < rowValue.size(); col++) {
Object cell = rowValue.get(col);
stringBuffer.append(cell);
if (col != rowValue.size() - 1) {
stringBuffer.append("\t");
}
}
if (row != table.size() - 1) {
stringBuffer.append("\n");
}
}
return stringBuffer.toString();
}
}

4
designer-base/src/main/java/com/fr/design/base/mode/DesignModeContext.java

@ -3,6 +3,7 @@ package com.fr.design.base.mode;
import com.fr.design.designer.TargetComponent;
import static com.fr.design.base.mode.DesignerMode.AUTHORITY;
import static com.fr.design.base.mode.DesignerMode.DUCHAMP;
public class DesignModeContext {
@ -42,6 +43,9 @@ public class DesignModeContext {
return mode == AUTHORITY;
}
public static boolean isDuchampMode() {
return mode == DUCHAMP;
}
public static void doCopy(TargetComponent principal) {
if (isBanCopyAndCut() || principal == null) {

3
designer-base/src/main/java/com/fr/design/base/mode/DesignerMode.java

@ -4,5 +4,6 @@ public enum DesignerMode {
NORMAL,
BAN_COPY_AND_CUT,
VCS,
AUTHORITY
AUTHORITY,
DUCHAMP
}

203
designer-base/src/main/java/com/fr/design/data/datapane/preview/CopyableJTable.java

@ -0,0 +1,203 @@
package com.fr.design.data.datapane.preview;
import com.fr.design.base.clipboard.ClipboardHelper;
import com.fr.design.gui.itable.SortableJTable;
import com.fr.design.gui.itable.TableSorter;
import com.fr.log.FineLoggerFactory;
import com.fr.stable.os.OperatingSystem;
import javax.swing.table.TableCellRenderer;
import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class CopyableJTable extends SortableJTable {
//区域选中用到的定位数据
public int startRow = -1;
public int startCol = -1;
public int endRow = -1;
public int endCol = -1;
//单元格不连续多选用到的定位数据
java.util.List<Point> pointList = new ArrayList<>();
//shift键是否被按下
public boolean isShiftDown = false;
//control\command键是否被按下
public boolean isControlDown = false;
//是否可以复制
public boolean isCopy = true;
int ctrlKeyCode = 17;
int cKeyCode = 67;
int shiftKeyCode = 16;
int commandKeyCode = 157;
//选中单元格的背景色
Color selectBackGround = new Color(54, 133, 242, 63);
public CopyableJTable(TableSorter tableModel) {
super(tableModel);
initListener();
}
private void initListener() {
CopyableJTable self = this;
this.addMouseMotionListener(new java.awt.event.MouseAdapter() {
@Override
public void mouseDragged(MouseEvent evt) {
int row = self.rowAtPoint(evt.getPoint());
int col = self.columnAtPoint(evt.getPoint());
if (self.updateEndPoint(row, col)) {
self.repaint();
}
}
});
this.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
int row = self.rowAtPoint(e.getPoint());
int col = self.columnAtPoint(e.getPoint());
if (!self.isControlDown) {
self.clearPoint();
}
if (self.isShiftDown) {
self.clearPoint();
} else {
self.updateStartPoint(row, col);
}
self.addPoint(row, col);
self.updateEndPoint(row, col);
self.repaint();
}
});
this.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if (isControlKey(e)) {
isControlDown = true;
} else if (e.getKeyCode() == shiftKeyCode) {
isShiftDown = true;
} else if (e.getKeyCode() == cKeyCode) {
if (isControlDown && isCopy) {
self.copy();
isCopy = false;
}
}
}
@Override
public void keyReleased(KeyEvent e) {
if (isControlKey(e)) {
isControlDown = false;
isCopy = true;
} else if (e.getKeyCode() == shiftKeyCode) {
isShiftDown = false;
}
}
private boolean isControlKey(KeyEvent e) {
if (e.getKeyCode() == ctrlKeyCode) {
return true;
}
if (e.getKeyCode() == commandKeyCode && OperatingSystem.isMacos()) {
return true;
}
return false;
}
});
}
@Override
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
Component comp = super.prepareRenderer(renderer, row, column);
if (isChoose(row, column)) {
comp.setBackground(selectBackGround);
} else {
comp.setBackground(this.getBackground());
}
return comp;
}
private boolean updateEndPoint(int row, int col) {
if (endRow != row || endCol != col) {
endRow = row;
endCol = col;
return true;
}
return false;
}
private boolean updateStartPoint(int row, int col) {
if (startRow != row || startCol != col) {
startRow = row;
startCol = col;
return true;
}
return false;
}
private void addPoint(int row, int col) {
pointList.add(new Point(row, col));
}
private void clearPoint() {
pointList = new ArrayList<>();
}
private void copy() {
FineLoggerFactory.getLogger().info("copy cell value");
java.util.List<java.util.List<Object>> table = new ArrayList<>();
if ((startRow != endRow || startCol != endCol) &&
Math.min(startRow, endRow) > -1 && Math.min(startCol, endCol) > -1) {
for (int i = Math.min(startRow, endRow); i <= Math.max(startRow, endRow); i++) {
table.add(new ArrayList<>());
for (int j = Math.min(startCol, endCol); j <= Math.max(startCol, endCol); j++) {
Object text = this.getValueAt(i, j);
table.get(i - Math.min(startRow, endRow)).add(text);
}
}
} else if (pointList.size() > 0) {
Collections.sort(pointList, Comparator.comparing(Point::getX).thenComparing(Point::getY));
int startRow = pointList.get(0).x;
int currentRow = startRow;
table.add(new ArrayList<>());
for (Point point : pointList) {
while (currentRow < point.x) {
table.add(new ArrayList<>());
currentRow++;
}
Object text = this.getValueAt(point.x, point.y);
table.get(currentRow - startRow).add(text);
}
}
Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
Transferable tText = new StringSelection(ClipboardHelper.formatExcelString(table));
clip.setContents(tText, null);
}
private boolean isChoose(int row, int col) {
if (row >= Math.min(startRow, endRow) && row <= Math.max(startRow, endRow)) {
if (col >= Math.min(startCol, endCol) && col <= Math.max(startCol, endCol)) {
return true;
}
}
for (Point point : pointList) {
if (point.x == row && point.y == col) {
return true;
}
}
return false;
}
}

3
designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java

@ -26,7 +26,6 @@ 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.design.utils.gui.GUICoreUtils;
import com.fr.function.TIME;
import com.fr.general.FRFont;
import com.fr.log.FineLoggerFactory;
@ -162,7 +161,7 @@ public class PreviewTablePane extends BasicPane {
}
});
preveiwTable = new SortableJTable(new TableSorter());
preveiwTable = new CopyableJTable(new TableSorter());
preveiwTable.setRowSelectionAllowed(false);
preveiwTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

239
designer-base/src/main/java/com/fr/design/dialog/UIDetailErrorLinkDialog.java

@ -0,0 +1,239 @@
package com.fr.design.dialog;
import com.fr.base.GraphHelper;
import com.fr.design.dialog.link.MessageWithLink;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.icontainer.UIScrollPane;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.itextarea.UITextArea;
import com.fr.design.i18n.Toolkit;
import com.fr.design.utils.DesignUtils;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.general.IOUtils;
import com.fr.stable.StringUtils;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dialog;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Point;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.PrintWriter;
import java.io.StringWriter;
import javax.swing.BorderFactory;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
/**
* 带链接的错误详情弹窗
*
* @author hades
* @version 10.0
* Created by hades on 2021/8/2
*/
public class UIDetailErrorLinkDialog extends UIDialog {
private static final Color LINK_COLOR = new Color(51, 152, 253);
private static final int GAP_5 = 5;
private static final int GAP_10 = 10;
private static final String TAG_A_START = "<a>";
private static final String TAG_A_END = "</a>";
private final Dimension dimension = new Dimension(300, 180);
public static Builder newBuilder() {
return new Builder();
}
private UIDetailErrorLinkDialog(Frame parent, Builder builder) {
super(parent);
init(builder);
}
private UIDetailErrorLinkDialog(Dialog parent, Builder builder) {
super(parent);
init(builder);
}
private void init(Builder builder) {
this.setTitle(builder.title);
// 顶部 图标和提示
UILabel errorIcon = new UILabel(IOUtils.readIcon("com/fr/design/images/lookandfeel/Information_Icon_Error_32x32.png"));
UILabel errorInfo= new UILabel(builder.reason);
JPanel topPane = new JPanel(new FlowLayout(FlowLayout.LEFT, GAP_10, GAP_5));
topPane.add(errorIcon);
topPane.add(errorInfo);
// 中部 详细内容
JPanel contentPane = new JPanel(new BorderLayout());
contentPane.setBorder(BorderFactory.createEmptyBorder(0, GAP_5,0,0));
UILabel errorCodeLabel = new UILabel(Toolkit.i18nText("Fine_Design_Basic_Error_Code", builder.errorCode));
UILabel link = new UILabel(Toolkit.i18nText("Fine_Design_Basic_Show_Error_Stack"));
link.setForeground(LINK_COLOR);
link.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
StringWriter stackTraceWriter = new StringWriter();
builder.throwable.printStackTrace(new PrintWriter(stackTraceWriter));
StackPane stackPane = new StackPane(stackTraceWriter.toString());
BasicDialog dialog = stackPane.showLargeWindow(UIDetailErrorLinkDialog.this, null);
dialog.setVisible(true);
}
});
contentPane.add(errorCodeLabel, BorderLayout.NORTH);
contentPane.add(createComponent(builder), BorderLayout.CENTER);
contentPane.add(link, BorderLayout.SOUTH);
// 确定 + 取消
JPanel actionPane = new JPanel(new FlowLayout(FlowLayout.RIGHT, GAP_10, GAP_10));
actionPane.add(createButton(Toolkit.i18nText("Fine-Design_Report_OK")));
actionPane.add(createButton(Toolkit.i18nText("Fine-Design_Basic_Cancel")));
this.getContentPane().add(topPane, BorderLayout.NORTH);
this.getContentPane().add(contentPane, BorderLayout.CENTER);
this.getContentPane().add(actionPane, BorderLayout.SOUTH);
this.setSize(dimension);
this.setResizable(false);
GUICoreUtils.centerWindow(this);
}
private UIButton createButton(String content) {
UIButton button = new UIButton(content);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
UIDetailErrorLinkDialog.this.dispose();
}
});
return button;
}
private JComponent createComponent(Builder builder) {
JPanel panel = new JPanel(new BorderLayout());
boolean existDetailReason = StringUtils.isNotEmpty(builder.detailReason);
int maxWidth = dimension.width;
if (existDetailReason) {
String message = Toolkit.i18nText("Fine_Design_Basic_Detail_Error_Info", builder.detailReason);
UILabel label = new UILabel(message);
maxWidth = Math.max(maxWidth, GraphHelper.getWidth(message, label.getFont()));
panel.add(label, BorderLayout.NORTH);
}
String solution = existDetailReason ? builder.solution : Toolkit.i18nText("Fine_Design_Basic_Detail_Error_Info", builder.solution);
if (builder.solution.contains(TAG_A_START)) {
String[] solutionP1 = solution.split(TAG_A_START);
String[] solutionP2 = solutionP1[1].split(TAG_A_END);
MessageWithLink messageWithLink;
if (solutionP2.length == 2) {
messageWithLink = new MessageWithLink(solutionP1[0], solutionP2[0], builder.link, solutionP2[1]);
} else {
messageWithLink = new MessageWithLink(solutionP1[0], solutionP2[0], builder.link);
}
panel.add(messageWithLink, BorderLayout.CENTER);
} else {
UILabel solutionLabel = new UILabel(solution);
panel.add(solutionLabel, BorderLayout.CENTER);
}
dimension.width = Math.max(maxWidth, GraphHelper.getWidth(solution, DesignUtils.getDefaultGUIFont()));
return panel;
}
@Override
public void checkValid() throws Exception {
// do nothing
}
class StackPane extends BasicPane {
public StackPane(String stack) {
setLayout(new BorderLayout());
UITextArea textArea = new UITextArea();
textArea.setEditable(false);
textArea.setText(stack);
UIScrollPane scrollPane = new UIScrollPane(textArea);
add(scrollPane);
// 滚动条默认在顶部
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
scrollPane.getViewport().setViewPosition(new Point(0, 0));
}
});
}
@Override
protected String title4PopupWindow() {
return Toolkit.i18nText("Fine_Design_Basic_Error_Stack");
}
}
public static class Builder {
private Window window;
private String title;
private String reason;
private String errorCode;
private String detailReason;
private String solution;
private String link;
private Throwable throwable;
private Builder() {
}
public Builder setTitle(String title) {
this.title = title;
return this;
}
public Builder setReason(String reason) {
this.reason = reason;
return this;
}
public Builder setErrorCode(String errorCode) {
this.errorCode = errorCode;
return this;
}
public Builder setSolution(String solution) {
this.solution = solution;
return this;
}
public Builder setDetailReason(String detailReason) {
this.detailReason = detailReason;
return this;
}
public Builder setThrowable(Throwable throwable) {
this.throwable = throwable;
return this;
}
public Builder setWindow(Window window) {
this.window = window;
return this;
}
public Builder setLink(String link) {
this.link = link;
return this;
}
public UIDetailErrorLinkDialog build() {
if (this.window instanceof Frame) {
return new UIDetailErrorLinkDialog((Frame) window, this);
} else {
return new UIDetailErrorLinkDialog((Dialog) window, this);
}
}
}
}

2
designer-base/src/main/java/com/fr/design/env/DesignerWorkspaceInfo.java vendored

@ -15,5 +15,5 @@ public interface DesignerWorkspaceInfo extends XMLable {
WorkspaceConnectionInfo getConnection();
boolean checkValid();
boolean checkValid() throws Exception;
}

15
designer-base/src/main/java/com/fr/design/env/RemoteDesignerWorkspaceInfo.java vendored

@ -168,8 +168,7 @@ public class RemoteDesignerWorkspaceInfo implements DesignerWorkspaceInfo {
@Override
public boolean checkValid() {
boolean result = false;
public boolean checkValid() throws Exception {
String newPort = Integer.toString(DesignerEnvManager.getEnvManager().getEmbedServerPort());
if (!ComparatorUtils.equals(port, newPort)) {
// 使用过程中 更改了内置服务器端口 重新初始化下
@ -177,15 +176,9 @@ public class RemoteDesignerWorkspaceInfo implements DesignerWorkspaceInfo {
}
if (FILTER_SET.contains(connection.getUrl())) {
FineLoggerFactory.getLogger().error("url is same with local designer");
return result;
return false;
}
try {
WorkContext.getConnector().validateVT(connection);
result = true;
} catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
return result;
}
return result;
WorkContext.getConnector().validateVT(connection);
return true;
}
}

16
designer-base/src/main/java/com/fr/design/gui/chart/ChartEditPaneActionListener.java

@ -0,0 +1,16 @@
package com.fr.design.gui.chart;
import com.fr.chart.chartattr.ChartCollection;
import java.util.EventListener;
/**
* @author shine
* @version 10.0
* Created by shine on 2021/5/26
*/
public interface ChartEditPaneActionListener extends EventListener {
void attributeChange(ChartCollection chartCollection);
}

6
designer-base/src/main/java/com/fr/design/gui/chart/ChartEditPaneProvider.java

@ -10,4 +10,10 @@ public interface ChartEditPaneProvider {
void fire();
default void addChartEditPaneActionListener(ChartEditPaneActionListener l) {
}
default void removeChartEditPaneActionListener(ChartEditPaneActionListener l) {
}
}

278
designer-base/src/main/java/com/fr/design/mainframe/CenterRegionContainerPane.java

@ -0,0 +1,278 @@
package com.fr.design.mainframe;
import com.fr.design.DesignState;
import com.fr.design.base.mode.DesignModeContext;
import com.fr.design.constants.UIConstants;
import com.fr.design.file.HistoryTemplateListCache;
import com.fr.design.file.MutilTempalteTabPane;
import com.fr.design.file.NewTemplatePane;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.imenu.UIMenuHighLight;
import com.fr.design.gui.itoolbar.UILargeToolbar;
import com.fr.design.gui.itoolbar.UIToolbar;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.mainframe.toolbar.ToolBarMenuDock;
import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus;
import org.jetbrains.annotations.Nullable;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.border.MatteBorder;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Insets;
import java.util.ArrayList;
/**
* @author shine
* @version 10.0
* Created by shine on 2021/4/6
*/
public class CenterRegionContainerPane extends JPanel {
private static volatile CenterRegionContainerPane THIS;
private static final int LEFT_ALIGN_GAP = -5;
private DesktopCardPane centerTemplateCardPane;
private JPanel toolbarPane;//撤销重做 等工具栏 + 模板tab标签 + maybe have cpt 字体
private JComponent toolbarComponent;//cpt 字体 等工具栏
private JPanel eastPane;//=largeToolbar+eastCenterPane
private UILargeToolbar largeToolbar;//预览
private JPanel eastCenterPane;//=combineUp + templateTabPane
private UIToolbar combineUp;//撤销重做 等工具栏
private JPanel templateTabPane;//新建模板 + 模板tab标签
private NewTemplatePane newWorkBookPane;//新建模板button
public static CenterRegionContainerPane getInstance() {
if (THIS == null) {
synchronized (CenterRegionContainerPane.class) {
if (THIS == null) {
THIS = new CenterRegionContainerPane();
}
}
}
return THIS;
}
public CenterRegionContainerPane() {
toolbarPane = new JPanel() {
@Override
public Dimension getPreferredSize() {
Dimension dim = super.getPreferredSize();
// dim.height = TOOLBAR_HEIGHT;
return dim;
}
};
toolbarPane.setLayout(FRGUIPaneFactory.createBorderLayout());
eastPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
eastPane.add(largeToolbar = getToolBarMenuDock().createLargeToolbar(), BorderLayout.WEST);
eastCenterPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
combineUpTooBar();
eastCenterPane.add(combineUp, BorderLayout.NORTH);
templateTabPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
templateTabPane.add(newWorkBookPane = getToolBarMenuDock().getNewTemplatePane(), BorderLayout.WEST);
templateTabPane.add(MutilTempalteTabPane.getInstance(), BorderLayout.CENTER);
eastCenterPane.add(templateTabPane, BorderLayout.CENTER);
eastPane.add(eastCenterPane, BorderLayout.CENTER);
toolbarPane.add(eastPane, BorderLayout.NORTH);
toolbarPane.add(new UIMenuHighLight(), BorderLayout.SOUTH);
this.setLayout(new BorderLayout());
this.add(centerTemplateCardPane = new DesktopCardPane(), BorderLayout.CENTER);
this.add(toolbarPane, BorderLayout.NORTH);
}
private ToolBarMenuDock getToolBarMenuDock() {
return DesignerContext.getDesignerFrame().getToolBarMenuDock();
}
/**
* 创建上工具栏
*/
private void combineUpTooBar() {
combineUp = new UIToolbar(FlowLayout.LEFT);
combineUp.setBorder(new MatteBorder(new Insets(0, LEFT_ALIGN_GAP, 1, 0), UIConstants.LINE_COLOR));
combineUp.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 2));
setUpUpToolBar(null);
}
/**
* 重置上工具栏
*/
private void resetCombineUpTooBar(JComponent[] toolbar4Form, ToolBarMenuDockPlus plus) {
combineUp.removeAll();
setUpUpToolBar(toolbar4Form);
plus.insertToCombineUpToolbar(combineUp);
}
/**
* 填充上工具栏的中的工具
*
* @param toolbar4Form 目标组件
*/
private void setUpUpToolBar(@Nullable JComponent[] toolbar4Form) {
UIButton[] fixButtons = getToolBarMenuDock().createUp();
for (UIButton fixButton : fixButtons) {
combineUp.add(fixButton);
}
if (!DesignModeContext.isAuthorityEditing()) {
combineUp.addSeparator(new Dimension(2, 16));
if (toolbar4Form != null) {
for (JComponent jComponent : toolbar4Form) {
combineUp.add(jComponent);
}
}
//添加检测按钮
addCheckButton();
}
//添加分享按钮
addShareButton();
//添加插件中的按钮
addExtraButtons();
}
private void addExtraButtons() {
JTemplate<?, ?> jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate();
if (jt == null) {
return;
}
UIButton[] extraButtons = jt.createExtraButtons();
for (UIButton extraButton : extraButtons) {
combineUp.add(extraButton);
}
if (extraButtons.length > 0) {
combineUp.addSeparator(new Dimension(2, 16));
}
}
private void addCheckButton() {
JTemplate<?, ?> jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate();
if (jt == null) {
return;
}
combineUp.addSeparator(new Dimension(2, 16));
UIButton[] checkButtons = jt.createCheckButton();
for (UIButton checkButton : checkButtons) {
combineUp.add(checkButton);
}
}
private void addShareButton() {
JTemplate<?, ?> jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate();
if (jt == null) {
return;
}
combineUp.addSeparator(new Dimension(2, 16));
UIButton[] shareButtons = jt.createShareButton();
for (UIButton shareButton : shareButtons) {
combineUp.add(shareButton);
}
}
/**
* 检查
*
* @param flag 组件是否可见
* @param al 组件名称
*/
protected void checkCombineUp(boolean flag, ArrayList<String> al) {
//Yvan: 检查当前是否为WORK_SHEET状态,因为只有WORK_SHEET中含有格式刷组件,此时是不需要进行checkComponentsByNames的
JTemplate<?, ?> jTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate();
if (jTemplate != null) {
// 第一个条件满足后还需要添加一重判断,判断是编辑报表块还是参数面板,编辑报表块时则直接return
if (jTemplate.getMenuState() == DesignState.WORK_SHEET && !jTemplate.isUpMode()) {
return;
}
combineUp.checkComponentsByNames(flag, al);
}
}
/**
* 重置相关的工具条.
*
* @param plus 工具条中相关信息
*/
protected void resetToolkitByPlus(ToolBarMenuDockPlus plus, ToolBarMenuDock ad) {
resetCombineUpTooBar(ad.resetUpToolBar(plus), plus);
if (toolbarComponent != null) {
toolbarPane.remove(toolbarComponent);
}
// 颜色,字体那些按钮的工具栏
toolbarPane.add(toolbarComponent = ad.resetToolBar(toolbarComponent, plus), BorderLayout.CENTER);
if (plus.hasToolBarPane()) {
this.add(toolbarPane, BorderLayout.NORTH);
} else {
this.remove(toolbarPane);
}
resetByDesignMode();
}
private void resetByDesignMode() {
if (DesignModeContext.isDuchampMode()) {
eastPane.remove(largeToolbar);
eastCenterPane.remove(templateTabPane);
centerTemplateCardPane.refresh(HistoryTemplateListCache.getInstance().getCurrentEditingTemplate());
} else {
eastPane.add(largeToolbar, BorderLayout.WEST);
eastCenterPane.add(templateTabPane, BorderLayout.CENTER);
}
}
JComponent getToolbarComponent() {
return this.toolbarComponent;
}
/**
* 判断是否在权限编辑状态若是在权限编辑状态则需要有虚线框和关闭突变
*/
protected void needToAddAuhtorityPaint() {
newWorkBookPane.setButtonGray(DesignModeContext.isAuthorityEditing());
}
protected DesktopCardPane getCenterTemplateCardPane() {
return centerTemplateCardPane;
}
protected void refreshUIToolBar() {
if (toolbarComponent instanceof UIToolbar) {
((UIToolbar ) toolbarComponent).refreshUIToolBar();
}
combineUp.refreshUIToolBar();
getToolBarMenuDock().updateEnable();
}
}

393
designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java

@ -4,9 +4,7 @@
package com.fr.design.mainframe;
import com.fr.base.BaseUtils;
import com.fr.base.chart.exception.ChartNotFoundException;
import com.fr.design.DesignModelAdapter;
import com.fr.design.DesignState;
import com.fr.design.DesignerEnvManager;
import com.fr.design.ExtraDesignClassManager;
import com.fr.design.actions.core.ActionFactory;
@ -22,24 +20,16 @@ import com.fr.design.event.TargetModifiedListener;
import com.fr.design.file.HistoryTemplateListCache;
import com.fr.design.file.HistoryTemplateListPane;
import com.fr.design.file.MutilTempalteTabPane;
import com.fr.design.file.NewTemplatePane;
import com.fr.design.file.SaveSomeTemplatePane;
import com.fr.design.file.TemplateTreePane;
import com.fr.design.fun.OemProcessor;
import com.fr.design.fun.TitlePlaceProcessor;
import com.fr.design.fun.impl.AbstractTemplateTreeShortCutProvider;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.imenu.UIMenuHighLight;
import com.fr.design.gui.iprogressbar.ProgressDialog;
import com.fr.design.gui.iscrollbar.UIScrollBar;
import com.fr.design.gui.itoolbar.UIToolbar;
import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.mainframe.loghandler.LogMessageBar;
import com.fr.design.mainframe.toolbar.ToolBarMenuDock;
import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus;
import com.fr.design.mainframe.vcs.common.VcsHelper;
import com.fr.design.menu.MenuManager;
import com.fr.design.menu.ShortCut;
import com.fr.design.os.impl.MacOsAddListenerAction;
import com.fr.design.os.impl.SupportOSImpl;
@ -51,49 +41,32 @@ import com.fr.file.FILE;
import com.fr.file.FILEFactory;
import com.fr.file.FileFILE;
import com.fr.general.ComparatorUtils;
import com.fr.general.GeneralContext;
import com.fr.general.GeneralUtils;
import com.fr.general.IOUtils;
import com.fr.invoke.Reflect;
import com.fr.log.FineLoggerFactory;
import com.fr.plugin.context.PluginContext;
import com.fr.plugin.injectable.PluginModule;
import com.fr.plugin.manage.PluginFilter;
import com.fr.plugin.observer.PluginEvent;
import com.fr.plugin.observer.PluginEventListener;
import com.fr.stable.ProductConstants;
import com.fr.stable.StringUtils;
import com.fr.stable.image4j.codec.ico.ICODecoder;
import com.fr.stable.os.OperatingSystem;
import com.fr.stable.os.support.OSBasedAction;
import com.fr.stable.os.support.OSSupportCenter;
import com.fr.stable.project.ProjectConstants;
import com.fr.start.OemHandler;
import com.fr.workspace.WorkContext;
import com.fr.workspace.Workspace;
import com.fr.workspace.connect.WorkspaceConnectionInfo;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.CopyOnWriteArrayList;
import org.jetbrains.annotations.Nullable;
import javax.swing.Icon;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JMenuBar;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.WindowConstants;
import javax.swing.border.MatteBorder;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.datatransfer.DataFlavor;
@ -116,9 +89,12 @@ import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArrayList;
public class DesignerFrame extends JFrame implements JTemplateActionListener, TargetModifiedListener {
@ -128,8 +104,6 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
private static final long serialVersionUID = -8732559571067484460L;
private static final int LEFT_ALIGN_GAP = -5;
private static final int MENU_HEIGHT = 26;
private static final Integer SECOND_LAYER = 100;
@ -140,22 +114,6 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
private ToolBarMenuDock ad;
private DesktopCardPane centerTemplateCardPane;
private JPanel toolbarPane;
private JComponent toolbarComponent;
private JPanel menuPane;
private JMenuBar menuBar;
private JPanel eastCenterPane;
private UIToolbar combineUp;
private NewTemplatePane newWorkBookPane;
private Icon closeMode;
private JLayeredPane layeredPane = this.getLayeredPane();
@ -285,37 +243,8 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
// the content pane
basePane.setLayout(new BorderLayout());
toolbarPane = new JPanel() {
@Override
public Dimension getPreferredSize() {
Dimension dim = super.getPreferredSize();
// dim.height = TOOLBAR_HEIGHT;
return dim;
}
};
toolbarPane.setLayout(FRGUIPaneFactory.createBorderLayout());
JPanel eastPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
eastPane.add(ad.createLargeToolbar(), BorderLayout.WEST);
eastCenterPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
combineUpTooBar();
eastCenterPane.add(combineUp, BorderLayout.NORTH);
JPanel panel = FRGUIPaneFactory.createBorderLayout_S_Pane();
panel.add(newWorkBookPane = ad.getNewTemplatePane(), BorderLayout.WEST);
panel.add(MutilTempalteTabPane.getInstance(), BorderLayout.CENTER);
eastCenterPane.add(panel, BorderLayout.CENTER);
eastPane.add(eastCenterPane, BorderLayout.CENTER);
toolbarPane.add(eastPane, BorderLayout.NORTH);
toolbarPane.add(new UIMenuHighLight(), BorderLayout.SOUTH);
JPanel centerPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
centerPane.add(centerTemplateCardPane = new DesktopCardPane(), BorderLayout.CENTER);
centerPane.add(toolbarPane, BorderLayout.NORTH);
basePane.add(centerPane, BorderLayout.CENTER);
basePane.add(CenterRegionContainerPane.getInstance(), BorderLayout.CENTER);
laoyoutWestPane();
basePane.add(EastRegionContainerPane.getInstance(), BorderLayout.EAST);
basePane.setBounds(0, 0, contentWidth, contentHeight);
@ -423,7 +352,11 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
public DesktopCardPane getCenterTemplateCardPane() {
return centerTemplateCardPane;
return CenterRegionContainerPane.getInstance().getCenterTemplateCardPane();
}
public void refreshUIToolBar() {
CenterRegionContainerPane.getInstance().refreshUIToolBar();
}
/**
@ -431,80 +364,12 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
*/
protected void initMenuPane() {
menuPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
menuPane.add(new UIMenuHighLight(), BorderLayout.SOUTH);
menuPane.add(initNorthEastPane(ad), BorderLayout.EAST);
basePane.add(menuPane, BorderLayout.NORTH);
basePane.add(NorthRegionContainerPane.getInstance(), BorderLayout.NORTH);
this.resetToolkitByPlus(null);
}
/**
* @param ad 菜单栏
* @return panel
*/
protected JPanel initNorthEastPane(final ToolBarMenuDock ad) {
//hugh: private修改为protected方便oem的时候修改右上的组件构成
//顶部日志+登陆按钮
final JPanel northEastPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
//优先级为-1,保证最后全面刷新一次
GeneralContext.listenPluginRunningChanged(new PluginEventListener(-1) {
@Override
public void on(PluginEvent event) {
refreshNorthEastPane(northEastPane, ad);
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
if (DesignerContext.getDesignerFrame() == null) {
return;
}
DesignerContext.getDesignerFrame().refresh();
DesignerContext.getDesignerFrame().repaint();
}
});
}
}, new PluginFilter() {
@Override
public boolean accept(PluginContext context) {
return context.contain(PluginModule.ExtraDesign);
}
});
refreshNorthEastPane(northEastPane, ad);
return northEastPane;
}
private void refreshNorthEastPane(final JPanel northEastPane, final ToolBarMenuDock ad) {
northEastPane.removeAll();
northEastPane.setLayout(new FlowLayout(FlowLayout.RIGHT, 0, 0));
northEastPane.add(LogMessageBar.getInstance());
TitlePlaceProcessor processor = ExtraDesignClassManager.getInstance().getSingle(TitlePlaceProcessor.MARK_STRING);
if (processor != null) {
final Component[] bbsLoginPane = {null};
OSSupportCenter.buildAction(new OSBasedAction() {
@Override
public void execute(Object... objects) {
bbsLoginPane[0] = ad.createBBSLoginPane();
}
}, SupportOSImpl.USERINFOPANE);
processor.hold(northEastPane, LogMessageBar.getInstance(), bbsLoginPane[0]);
}
northEastPane.add(ad.createAlphaFinePane());
if (!DesignerEnvManager.getEnvManager().getAlphaFineConfigManager().isEnabled()) {
ad.createAlphaFinePane().setVisible(false);
}
northEastPane.add(ad.createNotificationCenterPane());
OSSupportCenter.buildAction(new OSBasedAction() {
@Override
public void execute(Object... objects) {
northEastPane.add(ad.createBBSLoginPane());
}
}, SupportOSImpl.USERINFOPANE);
return NorthRegionContainerPane.getInstance().initNorthEastPane(ad);
}
public void initTitleIcon() {
@ -698,94 +563,6 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
this.closeMode = closeMode;
}
/**
* 创建上工具栏
*/
private void combineUpTooBar() {
combineUp = new UIToolbar(FlowLayout.LEFT);
combineUp.setBorder(new MatteBorder(new Insets(0, LEFT_ALIGN_GAP, 1, 0), UIConstants.LINE_COLOR));
combineUp.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 2));
setUpUpToolBar(null);
}
/**
* 重置上工具栏
*/
private void resetCombineUpTooBar(JComponent[] toolbar4Form) {
combineUp.removeAll();
setUpUpToolBar(toolbar4Form);
}
/**
* 填充上工具栏的中的工具
*
* @param toolbar4Form 目标组件
*/
private void setUpUpToolBar(@Nullable JComponent[] toolbar4Form) {
UIButton[] fixButtons = ad.createUp();
for (UIButton fixButton : fixButtons) {
combineUp.add(fixButton);
}
if (!DesignModeContext.isAuthorityEditing()) {
combineUp.addSeparator(new Dimension(2, 16));
if (toolbar4Form != null) {
for (JComponent jComponent : toolbar4Form) {
combineUp.add(jComponent);
}
}
//添加检测按钮
addCheckButton();
}
//添加分享按钮
addShareButton();
//添加插件中的按钮
addExtraButtons();
}
private void addExtraButtons() {
JTemplate<?, ?> jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate();
if (jt == null) {
return;
}
UIButton[] extraButtons = jt.createExtraButtons();
for (UIButton extraButton : extraButtons) {
combineUp.add(extraButton);
}
if (extraButtons.length > 0) {
combineUp.addSeparator(new Dimension(2, 16));
}
}
private void addCheckButton() {
JTemplate<?, ?> jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate();
if (jt == null) {
return;
}
combineUp.addSeparator(new Dimension(2, 16));
UIButton[] checkButtons = jt.createCheckButton();
for (UIButton checkButton : checkButtons) {
combineUp.add(checkButton);
}
}
private void addShareButton() {
JTemplate<?, ?> jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate();
if (jt == null) {
return;
}
combineUp.addSeparator(new Dimension(2, 16));
UIButton[] shareButtons = jt.createShareButton();
for (UIButton shareButton : shareButtons) {
combineUp.add(shareButton);
}
}
/**
* 检查
*
@ -793,17 +570,10 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
* @param al 组件名称
*/
public void checkCombineUp(boolean flag, ArrayList<String> al) {
//Yvan: 检查当前是否为WORK_SHEET状态,因为只有WORK_SHEET中含有格式刷组件,此时是不需要进行checkComponentsByNames的
JTemplate<?, ?> jTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate();
if (jTemplate != null) {
// 第一个条件满足后还需要添加一重判断,判断是编辑报表块还是参数面板,编辑报表块时则直接return
if (jTemplate.getMenuState() == DesignState.WORK_SHEET && !jTemplate.isUpMode()) {
return;
}
combineUp.checkComponentsByNames(flag, al);
}
CenterRegionContainerPane.getInstance().checkCombineUp(flag, al);
}
/**
* 刷新工具条.
*/
@ -812,6 +582,10 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
this.ad.updateToolBarDef();
}
ToolBarMenuDock getToolBarMenuDock() {
return this.ad;
}
/**
* 重置相关的工具条.
*
@ -823,39 +597,18 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
plus = ToolBarMenuDock.NULLAVOID;
}
DesignState designState = new DesignState(plus);
MenuManager.getInstance().setMenus4Designer(designState);
if (menuBar == null) {
menuPane.add(menuBar = ad.createJMenuBar(plus), BorderLayout.CENTER);
} else {
ad.resetJMenuBar(menuBar, plus);
}
NorthRegionContainerPane.getInstance().resetToolkitByPlus(plus, ad);
resetCombineUpTooBar(ad.resetUpToolBar(plus));
if (toolbarComponent != null) {
toolbarPane.remove(toolbarComponent);
}
// 颜色,字体那些按钮的工具栏
toolbarPane.add(toolbarComponent = ad.resetToolBar(toolbarComponent, plus), BorderLayout.CENTER);
CenterRegionContainerPane.getInstance().resetToolkitByPlus(plus, ad);
this.checkToolbarMenuEnable();
this.validate();
layeredPane.repaint();
}
public void refreshUIToolBar() {
if (toolbarComponent instanceof UIToolbar) {
((UIToolbar ) toolbarComponent).refreshUIToolBar();
}
combineUp.refreshUIToolBar();
this.ad.updateEnable();
}
public JComponent getToolbarComponent() {
return this.toolbarComponent;
return CenterRegionContainerPane.getInstance().getToolbarComponent();
}
/**
@ -863,7 +616,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
*/
public void needToAddAuhtorityPaint() {
newWorkBookPane.setButtonGray(DesignModeContext.isAuthorityEditing());
CenterRegionContainerPane.getInstance().needToAddAuhtorityPaint();
// 进入或退出权限编辑模式,通知插件
Set<ShortCut> extraShortCuts = ExtraDesignClassManager.getInstance().getExtraShortCuts();
@ -981,7 +734,43 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
*/
public JTemplate<?, ?> getSelectedJTemplate() {
return this.centerTemplateCardPane.getSelectedJTemplate();
return getCenterTemplateCardPane().getSelectedJTemplate();
}
/**
* 保存当前编辑的模板
*/
public void saveCurrentEditingTemplate() {
JTemplate<?, ?> editingTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate();
if (editingTemplate == null) {
return;
}
if (editingTemplate.isSaved()) {// isSaved == true表示已经保存过,或者新建的一张模板
if (editingTemplate.getEditingFILE().exists()) {// 表示磁盘上的某一张已经保存过的模板,要添加到历史中
// HistoryTemplateListPane.getInstance().addHistory();
}
} else {
editingTemplate.stopEditing();
if (!editingTemplate.getEditingFILE().exists()) {
int returnVal = FineJOptionPane.showConfirmDialog(DesignerContext.getDesignerFrame(),
Toolkit.i18nText("Fine-Design_Basic_Utils_Would_You_Like_To_Save") + " \"" + editingTemplate.getEditingFILE()
+ "\" ?", Toolkit.i18nText("Fine-Design_Basic_Confirm"), JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE);
if (returnVal == JOptionPane.YES_OPTION && editingTemplate.saveTemplate()) {
editingTemplate.saveTemplate();
FineLoggerFactory.getLogger().info(Toolkit.i18nText("Fine-Design_Basic_Template_Already_Saved",
editingTemplate.getEditingFILE().getName()));
}
} else {
if (editingTemplate.saveTemplate()) {
editingTemplate.saveTemplate();
FineLoggerFactory.getLogger().info(Toolkit.i18nText("Fine-Design_Basic_Template_Already_Saved",
editingTemplate.getEditingFILE().getName()));
}
}
}
}
/**
@ -1010,10 +799,14 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
if (jt == null || jt.getEditingFILE() == null) {
return;
}
if (currentTemplateDeactivateFail()) {
return;
}
jt.addJTemplateActionListener(this);
jt.addTargetModifiedListener(this);
jt.addJTemplateActionListener(VcsHelper.getInstance());
centerTemplateCardPane.showJTemplate(jt);
getCenterTemplateCardPane().showJTemplate(jt);
refreshBaseContentPane(jt);
setTitle();
layeredPane.repaint();
}
@ -1031,11 +824,57 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
if (jt == null || jt.getEditingFILE() == null) {
return;
}
centerTemplateCardPane.showJTemplate(jt);
if (currentTemplateDeactivateFail()) {
return;
}
getCenterTemplateCardPane().showJTemplate(jt);
refreshBaseContentPane(jt);
setTitle();
layeredPane.repaint();
}
/**
* 当前模板 停用失败
*
* @return 是否停用失败
*/
private boolean currentTemplateDeactivateFail() {
JTemplate currentEditingTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate();
return currentEditingTemplate != null && !currentEditingTemplate.deactivateTemplate();
}
/**
* 根据模板刷新 设计器整个界面
*
* @param jTemplate 当前模板
*/
public void refreshBaseContentPane(JTemplate jTemplate) {
JComponent north = jTemplate.north4DesignerFrame(),
center = jTemplate.center4DesignerFrame(),
west = jTemplate.west4DesignerFrame(),
east = jTemplate.east4DesignerFrame();
basePane.removeAll();
if (north != null) {
basePane.add(north, BorderLayout.NORTH);
}
if (center != null) {
basePane.add(center, BorderLayout.CENTER);
}
if (west != null) {
basePane.add(west, BorderLayout.WEST);
}
if (east != null) {
basePane.add(east, BorderLayout.EAST);
}
layeredPane.repaint();
layeredPane.revalidate();
}
/**
* 对象侦听
*
@ -1107,16 +946,6 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
JOptionPane.WARNING_MESSAGE,
UIManager.getIcon("OptionPane.errorIcon")
);
if (this.getSelectedJTemplate() == null) {
addAndActivateJTemplate();
}
} catch (ChartNotFoundException e) {
FineJOptionPane.showMessageDialog(this,
Toolkit.i18nText("Fine-Design_Chart_Not_Found_Exception"),
Toolkit.i18nText("Fine-Design_Basic_Error"),
JOptionPane.ERROR_MESSAGE,
UIManager.getIcon("OptionPane.errorIcon"));
if (this.getSelectedJTemplate() == null) {
addAndActivateJTemplate();
}
@ -1339,4 +1168,4 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
return designerOpened;
}
}
}

7
designer-base/src/main/java/com/fr/design/mainframe/DesktopCardPane.java

@ -53,7 +53,7 @@ public class DesktopCardPane extends BasicPane implements TargetModifiedListener
// 判断是否切换设计器状态到禁止拷贝剪切
if (jt.getTarget().getAttrMark(DesignBanCopyAttrMark.XML_TAG) != null) {
DesignModeContext.switchTo(DesignerMode.BAN_COPY_AND_CUT);
} else if (!DesignModeContext.isVcsMode() && !DesignModeContext.isAuthorityEditing()) {
} else if (!DesignModeContext.isVcsMode() && !DesignModeContext.isAuthorityEditing() && !DesignModeContext.isDuchampMode()) {
DesignModeContext.switchTo(DesignerMode.NORMAL);
}
// 切换时
@ -61,6 +61,11 @@ public class DesktopCardPane extends BasicPane implements TargetModifiedListener
component.fireTabChange();
}
DesignerFrameFileDealerPane.getInstance().setCurrentEditingTemplate(jt);
refresh(jt);
}
protected void refresh(final JTemplate<?, ?> jt) {
if (component != null) {
layeredPane.remove(component);
}

14
designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java

@ -16,7 +16,6 @@ import com.fr.design.layout.VerticalFlowLayout;
import com.fr.design.mainframe.reuse.ReuseGuideDialog;
import com.fr.design.mainframe.reuse.SnapChatKeys;
import com.fr.design.mainframe.share.collect.ComponentCollector;
import com.fr.design.menu.SnapChatUtil;
import com.fr.design.notification.SnapChat;
import com.fr.design.notification.SnapChatFactory;
import com.fr.design.ui.util.UIUtil;
@ -114,7 +113,8 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
POLY_REPORT, // 聚合报表-报表块
POLY_CHART(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Component_Settings")), // 聚合报表-图表块
AUTHORITY_EDITION, // 权限编辑
AUTHORITY_EDITION_DISABLED; // 权限编辑
AUTHORITY_EDITION_DISABLED, // 权限编辑
DUCHAMP_REPORT;
private String title;
@ -280,15 +280,15 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
// 单元格元素
PropertyItem cellElement = new PropertyItem(KEY_CELL_ELEMENT, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Cell_Element"),
"cellelement", new PropertyMode[]{PropertyMode.REPORT, PropertyMode.REPORT_PARA, PropertyMode.REPORT_PARA_WIDGET, PropertyMode.REPORT_FLOAT, PropertyMode.POLY, PropertyMode.POLY_CHART},
new PropertyMode[]{PropertyMode.REPORT, PropertyMode.FORM_REPORT, PropertyMode.POLY_REPORT});
new PropertyMode[]{PropertyMode.REPORT, PropertyMode.FORM_REPORT, PropertyMode.POLY_REPORT, PropertyMode.DUCHAMP_REPORT});
// 单元格属性
PropertyItem cellAttr = new PropertyItem(KEY_CELL_ATTR, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Cell_Attributes"),
"cellattr", new PropertyMode[]{PropertyMode.REPORT, PropertyMode.REPORT_PARA, PropertyMode.REPORT_PARA_WIDGET, PropertyMode.REPORT_FLOAT, PropertyMode.POLY, PropertyMode.POLY_CHART},
new PropertyMode[]{PropertyMode.REPORT, PropertyMode.FORM_REPORT, PropertyMode.POLY_REPORT});
new PropertyMode[]{PropertyMode.REPORT, PropertyMode.FORM_REPORT, PropertyMode.POLY_REPORT, PropertyMode.DUCHAMP_REPORT});
// 悬浮元素
PropertyItem floatElement = new PropertyItem(KEY_FLOAT_ELEMENT, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Float_Element"),
"floatelement", new PropertyMode[]{PropertyMode.REPORT, PropertyMode.REPORT_PARA, PropertyMode.REPORT_PARA_WIDGET, PropertyMode.REPORT_FLOAT, PropertyMode.POLY, PropertyMode.POLY_CHART},
new PropertyMode[]{PropertyMode.REPORT, PropertyMode.REPORT_FLOAT, PropertyMode.POLY_REPORT});
new PropertyMode[]{PropertyMode.REPORT, PropertyMode.REPORT_FLOAT, PropertyMode.POLY_REPORT, PropertyMode.DUCHAMP_REPORT});
// 控件设置
PropertyItem widgetSettings = new PropertyItem(KEY_WIDGET_SETTINGS, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Component_Settings"),
"widgetsettings", new PropertyMode[]{PropertyMode.REPORT, PropertyMode.REPORT_PARA, PropertyMode.REPORT_PARA_WIDGET, PropertyMode.REPORT_FLOAT, PropertyMode.FORM, PropertyMode.POLY},
@ -296,11 +296,11 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
// 条件属性
PropertyItem conditionAttr = new PropertyItem(KEY_CONDITION_ATTR, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Condition_Attributes"),
"conditionattr", new PropertyMode[]{PropertyMode.REPORT, PropertyMode.REPORT_PARA, PropertyMode.REPORT_PARA_WIDGET, PropertyMode.REPORT_FLOAT, PropertyMode.POLY, PropertyMode.POLY_CHART},
new PropertyMode[]{PropertyMode.REPORT, PropertyMode.FORM_REPORT, PropertyMode.POLY_REPORT});
new PropertyMode[]{PropertyMode.REPORT, PropertyMode.FORM_REPORT, PropertyMode.POLY_REPORT, PropertyMode.DUCHAMP_REPORT});
// 超级链接
PropertyItem hyperlink = new PropertyItem(KEY_HYPERLINK, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Hyperlink"),
"hyperlink", new PropertyMode[]{PropertyMode.REPORT, PropertyMode.REPORT_PARA, PropertyMode.REPORT_PARA_WIDGET, PropertyMode.REPORT_FLOAT, PropertyMode.POLY, PropertyMode.POLY_CHART},
new PropertyMode[]{PropertyMode.REPORT, PropertyMode.REPORT_FLOAT, PropertyMode.FORM_REPORT, PropertyMode.POLY_REPORT});
new PropertyMode[]{PropertyMode.REPORT, PropertyMode.REPORT_FLOAT, PropertyMode.FORM_REPORT, PropertyMode.POLY_REPORT, PropertyMode.DUCHAMP_REPORT});
// 组件库
widgetLibSnapChat = SnapChatFactory.createSnapChat(false, SnapChatKeys.COMPONENT);
PropertyItem widgetLib = new PropertyItem(

137
designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java

@ -25,7 +25,6 @@ import com.fr.design.dialog.InformationWarnPane;
import com.fr.design.file.HistoryTemplateListCache;
import com.fr.design.file.HistoryTemplateListPane;
import com.fr.design.file.TemplateResourceManager;
import com.fr.design.file.TemplateTreePane;
import com.fr.design.fun.DesignerFrameUpButtonProvider;
import com.fr.design.fun.MenuHandler;
import com.fr.design.fun.PreviewProvider;
@ -35,7 +34,6 @@ import com.fr.design.gui.frpane.HyperlinkGroupPane;
import com.fr.design.gui.frpane.HyperlinkGroupPaneActionProvider;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.imenu.UIMenuItem;
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;
@ -83,12 +81,8 @@ import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.JComponent;
import javax.swing.JOptionPane;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.undo.UndoManager;
import java.awt.BorderLayout;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.concurrent.Callable;
@ -97,6 +91,7 @@ import java.util.concurrent.Callable;
*/
public abstract class JTemplate<T extends BaseBook, U extends BaseUndoState<?>> extends TargetComponent<T> implements ToolBarMenuDockPlus, DesignerProxy, JTemplateSave, TabChangeListener {
// TODO ALEX_SEP editingFILE这个属性一定要吗?如果非要不可,有没有可能保证不为null
private static final int PREFIX_NUM = 3000;
protected FILE editingFILE = null;
// alex:初始状态为saved,这样不管是新建模板,还是打开模板,如果未做任何操作直接关闭,不提示保存
@ -116,7 +111,6 @@ public abstract class JTemplate<T extends BaseBook, U extends BaseUndoState<?>>
protected TemplateProcessInfo<T> processInfo;
private JComponent centerPane;
private static short currentIndex = 0;// 此变量用于多次新建模板时,让名字不重复
private DesignModelAdapter<T, ?> designModel;
private PreviewProvider previewType;
/**
@ -142,7 +136,7 @@ public abstract class JTemplate<T extends BaseBook, U extends BaseUndoState<?>>
}
public JTemplate(T t, String defaultFileName) {
this(t, new MemFILE(newTemplateNameByIndex(defaultFileName)), true);
this(t, new MemFILE(JTemplateNameHelper.newTemplateNameByIndex(defaultFileName)), true);
}
public JTemplate(T t, FILE file) {
@ -163,7 +157,7 @@ public abstract class JTemplate<T extends BaseBook, U extends BaseUndoState<?>>
// 判断是否切换设计器状态到禁止拷贝剪切
if (t.getAttrMark(DesignBanCopyAttrMark.XML_TAG) != null) {
DesignModeContext.switchTo(com.fr.design.base.mode.DesignerMode.BAN_COPY_AND_CUT);
} else if (!DesignModeContext.isVcsMode() && !DesignModeContext.isAuthorityEditing()) {
} else if (!DesignModeContext.isVcsMode() && !DesignModeContext.isAuthorityEditing() && !DesignModeContext.isDuchampMode()) {
DesignModeContext.switchTo(com.fr.design.base.mode.DesignerMode.NORMAL);
}
this.template = t;
@ -654,8 +648,6 @@ public abstract class JTemplate<T extends BaseBook, U extends BaseUndoState<?>>
/**
* 添加图片到格子中
*
* @return 返回图片URI
*/
public void setPictureElem(Elem elem, CellImage cellImage) {
// 子类实现
@ -865,7 +857,7 @@ public abstract class JTemplate<T extends BaseBook, U extends BaseUndoState<?>>
return false;
}
try {
this.getTarget().export(TemplateResourceManager.getResource().saveTemplate(editingFILE));
export();
} catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), e.getMessage(), "Save Error", JOptionPane.ERROR_MESSAGE);
@ -879,65 +871,9 @@ public abstract class JTemplate<T extends BaseBook, U extends BaseUndoState<?>>
return true;
}
private static String newTemplateNameByIndex(String prefix) {
// 用于获取左侧模板的文件名,如左侧已包含"WorkBook1.cpt, WorkBook12.cpt, WorkBook177.cpt"
// 那么新建的文件名将被命名为"WorkBook178.cpt",即取最大数+1
TemplateFileTree tt = TemplateTreePane.getInstance().getTemplateFileTree();
DefaultMutableTreeNode gen = (DefaultMutableTreeNode) tt.getModel().getRoot();
String[] str = new String[gen.getChildCount()];
List<Integer> reportNum = new ArrayList<>();
for (int j = 0; j < gen.getChildCount(); j++) {
str[j] = gen.getChildAt(j).toString();
//返回文件名中的index(算法中没有再匹配文件后缀了,因为DefaultMutableTreeNode中已经匹配过了)
Integer index = getFileNameIndex(prefix, str[j]);
if (index != null) {
reportNum.add(index);
}
}
Collections.sort(reportNum);
int idx = reportNum.size() > 0 ? reportNum.get(reportNum.size() - 1) + 1 : 1;
idx = idx + currentIndex;
currentIndex++;
return prefix + idx;
}
/**
* @return java.lang.Integer WorkBook11.cpt则返回11如果没有找到index返回null
* @Description 返回文件名中的index
* @param: prefix 前缀
* @param: fileName 文件名称全名
* @Author Henry.Wang
* @Date 2021/4/9 11:13
**/
private static Integer getFileNameIndex(String prefix, String fileName) {
char[] chars = new char[fileName.length()];
int i = 0;
for (; i < fileName.length(); i++) {
char c = fileName.charAt(i);
//匹配前缀
if (i < prefix.length()) {
if (c != prefix.charAt(i)) {
return null;
}
} else {
if (c == '.') {
break;
} else {
//匹配0~9
if (c < 48 || c > 57) {
return null;
}
chars[i - prefix.length()] = c;
}
}
}
String s = new String(chars).substring(0, i - prefix.length());
if (StringUtils.isBlank(s)) {
return null;
}
return Integer.valueOf(s);
protected boolean export() throws Exception {
return this.getTarget().export(TemplateResourceManager.getResource().saveTemplate(editingFILE));
}
// /////////////////////////////toolbarMenuDock//////////////////////////////////
@ -1192,6 +1128,16 @@ public abstract class JTemplate<T extends BaseBook, U extends BaseUndoState<?>>
DesignerContext.getDesignerFrame().addAndActivateJTemplate(this);
}
/**
* 将要激活打开其他模板使当前模板灭活
* 默认 do nothing 返回true
*
* @return true成功停用当前模板
*/
public boolean deactivateTemplate() {
return true;
}
/**
* 返回当前支持的超链界面pane
@ -1304,15 +1250,6 @@ public abstract class JTemplate<T extends BaseBook, U extends BaseUndoState<?>>
*/
public abstract Icon getIcon();
/**
* 导出菜单项
*
* @return 菜单项
*/
@Override
public ShortCut[] shortcut4ExportMenu() {
return new ShortCut[0];
}
/**
* 复制JS代码
@ -1430,6 +1367,46 @@ public abstract class JTemplate<T extends BaseBook, U extends BaseUndoState<?>>
return StringUtils.EMPTY;
}
/**
* 指定 设计器界面 NORTH组件
* 默认是 菜单区域
*
* @return NORTH组件
*/
public JComponent north4DesignerFrame() {
return NorthRegionContainerPane.getInstance();
}
/**
* 指定 设计器界面 CENTER组件
* 默认是 模板对应的工具栏区域+模板设计区域
*
* @return CENTER组件
*/
public JComponent center4DesignerFrame() {
return CenterRegionContainerPane.getInstance();
}
/**
* 指定 设计器界面 WEST组件
* 默认是 模板目录树+数据集编辑区域
*
* @return WEST组件
*/
public JComponent west4DesignerFrame() {
return WestRegionContainerPane.getInstance();
}
/**
* 指定 设计器界面 EAST组件
* 默认是 属性配置界面
*
* @return EAST组件
*/
public JComponent east4DesignerFrame() {
return EastRegionContainerPane.getInstance();
}
private CallbackSaveWorker save(boolean showLoc) {
FILE editingFILE = this.getEditingFILE();
// carl:editingFILE没有,当然不存了,虽然不会有这种情况

83
designer-base/src/main/java/com/fr/design/mainframe/JTemplateNameHelper.java

@ -0,0 +1,83 @@
package com.fr.design.mainframe;
import com.fr.design.file.TemplateTreePane;
import com.fr.design.gui.itree.filetree.TemplateFileTree;
import com.fr.stable.StringUtils;
import javax.swing.tree.DefaultMutableTreeNode;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* @author shine
* @version 10.0
* Created by shine on 2021/5/7
*/
public class JTemplateNameHelper {
private static final int PREFIX_NUM = 3000;
private static short currentIndex = 0;// 此变量用于多次新建模板时,让名字不重复
public static String newTemplateNameByIndex(String prefix) {
// 用于获取左侧模板的文件名,如左侧已包含"WorkBook1.cpt, WorkBook12.cpt, WorkBook177.cpt"
// 那么新建的文件名将被命名为"WorkBook178.cpt",即取最大数+1
TemplateFileTree tt = TemplateTreePane.getInstance().getTemplateFileTree();
DefaultMutableTreeNode gen = (DefaultMutableTreeNode) tt.getModel().getRoot();
String[] str = new String[gen.getChildCount()];
List<Integer> reportNum = new ArrayList<>();
for (int j = 0; j < gen.getChildCount(); j++) {
str[j] = gen.getChildAt(j).toString();
//返回文件名中的index(算法中没有再匹配文件后缀了,因为DefaultMutableTreeNode中已经匹配过了)
Integer index = getFileNameIndex(prefix, str[j]);
if (index != null) {
reportNum.add(index);
}
}
Collections.sort(reportNum);
int idx = reportNum.size() > 0 ? reportNum.get(reportNum.size() - 1) + 1 : 1;
idx = idx + currentIndex;
currentIndex++;
return prefix + idx;
}
/**
* @return java.lang.Integer WorkBook11.cpt则返回11如果没有找到index返回null
* @Description 返回文件名中的index
* @param: prefix 前缀
* @param: fileName 文件名称全名
* @Author Henry.Wang
* @Date 2021/4/9 11:13
**/
private static Integer getFileNameIndex(String prefix, String fileName) {
char[] chars = new char[fileName.length()];
int i = 0;
for (; i < fileName.length(); i++) {
char c = fileName.charAt(i);
//匹配前缀
if (i < prefix.length()) {
if (c != prefix.charAt(i)) {
return null;
}
} else {
if (c == '.') {
break;
} else {
//匹配0~9
if (c < 48 || c > 57) {
return null;
}
chars[i - prefix.length()] = c;
}
}
}
String s = new String(chars).substring(0, i - prefix.length());
if (StringUtils.isBlank(s)) {
return null;
}
return Integer.valueOf(s);
}
}

144
designer-base/src/main/java/com/fr/design/mainframe/NorthRegionContainerPane.java

@ -0,0 +1,144 @@
package com.fr.design.mainframe;
import com.fr.design.DesignState;
import com.fr.design.DesignerEnvManager;
import com.fr.design.ExtraDesignClassManager;
import com.fr.design.fun.TitlePlaceProcessor;
import com.fr.design.gui.imenu.UIMenuHighLight;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.mainframe.loghandler.LogMessageBar;
import com.fr.design.mainframe.toolbar.ToolBarMenuDock;
import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus;
import com.fr.design.menu.MenuManager;
import com.fr.design.os.impl.SupportOSImpl;
import com.fr.general.GeneralContext;
import com.fr.plugin.context.PluginContext;
import com.fr.plugin.injectable.PluginModule;
import com.fr.plugin.manage.PluginFilter;
import com.fr.plugin.observer.PluginEvent;
import com.fr.plugin.observer.PluginEventListener;
import com.fr.stable.os.support.OSBasedAction;
import com.fr.stable.os.support.OSSupportCenter;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.FlowLayout;
/**
* @author shine
* @version 10.0
* Created by shine on 2021/4/6
*/
public class NorthRegionContainerPane extends JPanel {
private static volatile NorthRegionContainerPane THIS;
private JMenuBar menuBar;
public static NorthRegionContainerPane getInstance() {
if (THIS == null) {
synchronized (NorthRegionContainerPane.class) {
if (THIS == null) {
THIS = new NorthRegionContainerPane();
}
}
}
return THIS;
}
public NorthRegionContainerPane() {
ToolBarMenuDock ad = DesignerContext.getDesignerFrame().getToolBarMenuDock();
this.setLayout(new BorderLayout());
this.add(new UIMenuHighLight(), BorderLayout.SOUTH);
this.add(initNorthEastPane(ad), BorderLayout.EAST);
}
/**
* @param ad 菜单栏
* @return panel
*/
protected JPanel initNorthEastPane(final ToolBarMenuDock ad) {
//hugh: private修改为protected方便oem的时候修改右上的组件构成
//顶部日志+登陆按钮
final JPanel northEastPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
//优先级为-1,保证最后全面刷新一次
GeneralContext.listenPluginRunningChanged(new PluginEventListener(-1) {
@Override
public void on(PluginEvent event) {
refreshNorthEastPane(northEastPane, ad);
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
if (DesignerContext.getDesignerFrame() == null) {
return;
}
DesignerContext.getDesignerFrame().refresh();
DesignerContext.getDesignerFrame().repaint();
}
});
}
}, new PluginFilter() {
@Override
public boolean accept(PluginContext context) {
return context.contain(PluginModule.ExtraDesign);
}
});
refreshNorthEastPane(northEastPane, ad);
return northEastPane;
}
private void refreshNorthEastPane(final JPanel northEastPane, final ToolBarMenuDock ad) {
northEastPane.removeAll();
northEastPane.setLayout(new FlowLayout(FlowLayout.RIGHT, 0, 0));
northEastPane.add(LogMessageBar.getInstance());
TitlePlaceProcessor processor = ExtraDesignClassManager.getInstance().getSingle(TitlePlaceProcessor.MARK_STRING);
if (processor != null) {
final Component[] bbsLoginPane = {null};
OSSupportCenter.buildAction(new OSBasedAction() {
@Override
public void execute(Object... objects) {
bbsLoginPane[0] = ad.createBBSLoginPane();
}
}, SupportOSImpl.USERINFOPANE);
processor.hold(northEastPane, LogMessageBar.getInstance(), bbsLoginPane[0]);
}
northEastPane.add(ad.createAlphaFinePane());
if (!DesignerEnvManager.getEnvManager().getAlphaFineConfigManager().isEnabled()) {
ad.createAlphaFinePane().setVisible(false);
}
northEastPane.add(ad.createNotificationCenterPane());
OSSupportCenter.buildAction(new OSBasedAction() {
@Override
public void execute(Object... objects) {
northEastPane.add(ad.createBBSLoginPane());
}
}, SupportOSImpl.USERINFOPANE);
}
/**
* 重置相关的工具条.
*
* @param plus 工具条中相关信息
*/
void resetToolkitByPlus(ToolBarMenuDockPlus plus, ToolBarMenuDock ad) {
DesignState designState = new DesignState(plus);
MenuManager.getInstance().setMenus4Designer(designState);
if (menuBar == null) {
this.add(menuBar = ad.createJMenuBar(plus), BorderLayout.CENTER);
} else {
ad.resetJMenuBar(menuBar, plus);
}
}
}

25
designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java

@ -9,7 +9,19 @@ import com.fr.design.DesignState;
import com.fr.design.DesignerEnvManager;
import com.fr.design.ExtraDesignClassManager;
import com.fr.design.actions.UpdateAction;
import com.fr.design.actions.community.*;
import com.fr.design.actions.community.BBSAction;
import com.fr.design.actions.community.BugAction;
import com.fr.design.actions.community.BugNeedAction;
import com.fr.design.actions.community.CenterAction;
import com.fr.design.actions.community.FacebookFansAction;
import com.fr.design.actions.community.NeedAction;
import com.fr.design.actions.community.QuestionAction;
import com.fr.design.actions.community.SignAction;
import com.fr.design.actions.community.TechSolutionAction;
import com.fr.design.actions.community.TechSupportAction;
import com.fr.design.actions.community.TemplateStoreAction;
import com.fr.design.actions.community.VideoAction;
import com.fr.design.actions.community.WorkOrderCenterAction;
import com.fr.design.actions.file.CloseCurrentTemplateAction;
import com.fr.design.actions.file.ExitDesignerAction;
import com.fr.design.actions.file.OpenRecentReportMenuDef;
@ -64,7 +76,6 @@ import com.fr.plugin.observer.PluginEventType;
import com.fr.stable.ArrayUtils;
import com.fr.stable.StringUtils;
import com.fr.stable.bridge.ObjectHolder;
import com.fr.stable.os.support.OSBasedAction;
import com.fr.stable.os.support.OSSupportCenter;
import com.fr.start.OemHandler;
import com.fr.workspace.WorkContext;
@ -141,16 +152,6 @@ public abstract class ToolBarMenuDock {
return PANLE_HEIGNT;
}
/**
* 导出菜单的子菜单 目前用于图表设计器
*
* @return 子菜单
*/
@Override
public ShortCut[] shortcut4ExportMenu() {
return new ShortCut[0];
}
};
private static final int MENUBAR_HEIGHT = 22;

21
designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDockPlus.java

@ -1,11 +1,13 @@
package com.fr.design.mainframe.toolbar;
import javax.swing.*;
import com.fr.design.gui.itoolbar.UIToolbar;
import com.fr.design.menu.MenuDef;
import com.fr.design.menu.ShortCut;
import com.fr.design.menu.ToolBarDef;
import javax.swing.JComponent;
import javax.swing.JPanel;
public interface ToolBarMenuDockPlus {
/**
* 模板的工具
@ -54,10 +56,19 @@ public interface ToolBarMenuDockPlus {
int getToolBarHeight();
/**
* 导出菜单的子菜单 目前用于图表设计器
* 是否含有工具栏 包含预览按钮 复制粘贴那一行 模板标签页那一行 字体颜色那一行
*
* @return 子菜单
* @return 默认返回true
*/
ShortCut[] shortcut4ExportMenu();
default boolean hasToolBarPane() {
return true;
}
/**
* 复制粘贴那一行工具栏 插入 工具栏按钮
*/
default void insertToCombineUpToolbar(UIToolbar combineUp) {
}
}

32
designer-base/src/main/java/com/fr/env/HelpLink.java vendored

@ -0,0 +1,32 @@
package com.fr.env;
import com.fr.design.DesignerEnvManager;
import com.fr.design.env.DesignerWorkspaceInfo;
import com.fr.general.locale.LocaleCenter;
import com.fr.general.locale.LocaleMark;
import com.fr.locale.InterProviderFactory;
import java.util.HashMap;
import java.util.Map;
/**
* @author hades
* @version 10.0
* Created by hades on 2021/8/9
*/
public class HelpLink {
public static String getLink(String solution) {
Map<String, String> map = new HashMap<>();
String currentName = DesignerEnvManager.getEnvManager().getCurEnvName();
DesignerWorkspaceInfo workspaceInfo = DesignerEnvManager.getEnvManager().getWorkspaceInfo(currentName);
LocaleMark<String> linkMark = LocaleCenter.getMark(RemoteDesignLocaleMark.class);
String link = linkMark.getValue();
map.put(InterProviderFactory.getProvider().getLocText("Fine-Core_Remote_Design_Change_PassWord"), workspaceInfo.getConnection().getUrl() + RemoteWorkspaceURL.SYSTEM_LOGIN_PATH);
map.put(InterProviderFactory.getProvider().getLocText("Fine-Core_Remote_Design_Cert_Error_Solution"), link);
map.put(InterProviderFactory.getProvider().getLocText("Fine-Core_Remote_Design_Connection_Unknown_Error_Solution"), link);
map.put(InterProviderFactory.getProvider().getLocText("Fine-Core_Remote_Design_NetWork_Connection_Error_Solution"), link);
return map.get(solution);
}
}

36
designer-base/src/main/java/com/fr/env/RemoteDesignLocaleMark.java vendored

@ -0,0 +1,36 @@
package com.fr.env;
import com.fr.general.CloudCenter;
import com.fr.general.GeneralContext;
import com.fr.general.locale.LocaleMark;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
/**
* @author hades
* @version 10.0
* Created by hades on 2021/8/9
*/
public class RemoteDesignLocaleMark implements LocaleMark<String> {
private Map<Locale, String> map = new HashMap<>();
private static final String REMOTE_DESIGN_CN = CloudCenter.getInstance().acquireUrlByKind("help.remote.design.zh_CN", "https://help.fanruan.com/finereport/doc-view-3925.html");
private static final String REMOTE_DESIGN_EN = CloudCenter.getInstance().acquireUrlByKind("help.remote.design.en_US", "https://help.fanruan.com/finereport-en/doc-view-3862.html");
public RemoteDesignLocaleMark() {
map.put(Locale.CHINA, REMOTE_DESIGN_CN);
map.put(Locale.KOREA, REMOTE_DESIGN_EN);
map.put(Locale.JAPAN, REMOTE_DESIGN_EN);
map.put(Locale.US, REMOTE_DESIGN_EN);
map.put(Locale.TAIWAN, REMOTE_DESIGN_CN);
}
@Override
public String getValue() {
String result = map.get(GeneralContext.getLocale());
return result == null ? REMOTE_DESIGN_CN : result;
}
}

48
designer-base/src/main/java/com/fr/env/RemoteEnvPane.java vendored

@ -4,8 +4,6 @@ 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;
@ -22,17 +20,12 @@ import com.fr.design.i18n.DesignSizeI18nManager;
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;
import com.fr.env.handler.RemoteDesignExceptionHandler;
import com.fr.stable.StringUtils;
import com.fr.third.guava.base.Strings;
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;
@ -66,9 +59,7 @@ import java.io.File;
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
@ -573,8 +564,7 @@ public class RemoteEnvPane extends BasicBeanPane<RemoteDesignerWorkspaceInfo> {
fileChooserButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
FileChooserProvider fileChooserProvider = new JavaFxNativeFileChooser.Builder().
fileSelectionMode(FileSelectionMode.FILE).build();
FileChooserProvider fileChooserProvider = new JavaFxNativeFileChooser.Builder().fileSelectionMode(FileSelectionMode.FILE).build();
int saveValue = fileChooserProvider.showDialog(SwingUtilities.getWindowAncestor(RemoteEnvPane.this));
if (saveValue == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooserProvider.getSelectedFile();
@ -589,42 +579,24 @@ public class RemoteEnvPane extends BasicBeanPane<RemoteDesignerWorkspaceInfo> {
final RemoteDesignerWorkspaceInfo remoteEnv = updateBean();
final WorkspaceConnectionInfo connection = remoteEnv.getConnection();
final SwingWorker<TestConnectionResult, Void> worker = new SwingWorker<TestConnectionResult, Void>() {
final SwingWorker<Boolean, Void> worker = new SwingWorker<Boolean, Void>() {
@Override
protected TestConnectionResult doInBackground() throws Exception {
try {
return TestConnectionResult.parse(WorkContext.getConnector().testConnection(connection), connection);
} catch (WorkspaceAuthException ignored) {
return AUTH_FAILED;
} catch (RegistEditionException e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
throw e;
} catch (WorkspaceCheckException e) {
return TestConnectionResult.parseByException(e);
}
protected Boolean doInBackground() throws Exception {
return WorkContext.getConnector().testConnection(connection);
}
@Override
protected void done() {
okButton.setEnabled(true);
try {
TestConnectionResult result = get();
if (result.isVerifyResult()) {
dialog.dispose();
FineLoggerFactory.getLogger().error(result.getText().replaceAll(TestConnectionResult.WRAP, StringUtils.EMPTY) + Toolkit.i18nText("Fine-Design_Basic_Remote_Design_Modify_PassWord"));
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"));
if (get()) {
message.setText(Toolkit.i18nText("Fine-Design_Basic_Remote_Connect_Successful"));
uiLabel.setIcon(UIManager.getIcon("OptionPane.informationIcon"));
}
message.setText(result.getText());
uiLabel.setIcon(result.getIcon());
} catch (Exception e) {
FineLoggerFactory.getLogger().error(e, e.getMessage());
message.setText(Toolkit.i18nText("Fine-Design_Basic_Remote_Connect_Failed"));
uiLabel.setIcon(UIManager.getIcon("OptionPane.errorIcon"));
dialog.dispose();
RemoteDesignExceptionHandler.getInstance().handleInTest(e);
}
dialogDownPane.remove(cancelButton);
dialogDownPane.revalidate();

16
designer-base/src/main/java/com/fr/env/handler/Handler.java vendored

@ -0,0 +1,16 @@
package com.fr.env.handler;
/**
* @author hades
* @version 10.0
* Created by hades on 2021/8/5
*/
public interface Handler<T, R> {
/**
* @param t
* @return 是否需要继续处理
*/
R handle(T t);
}

88
designer-base/src/main/java/com/fr/env/handler/RemoteDesignExceptionHandler.java vendored

@ -0,0 +1,88 @@
package com.fr.env.handler;
import com.fr.design.EnvChangeEntrance;
import com.fr.design.dialog.FineJOptionPane;
import com.fr.design.env.DesignerWorkspaceInfo;
import com.fr.design.env.DesignerWorkspaceType;
import com.fr.design.i18n.Toolkit;
import com.fr.env.handler.impl.CancelHandler;
import com.fr.env.handler.impl.CommonHandler;
import com.fr.env.handler.impl.ExecutionHandler;
import com.fr.env.handler.impl.UnexpectedHandler;
import com.fr.log.FineLoggerFactory;
import java.util.ArrayList;
import java.util.List;
import javax.swing.UIManager;
import static javax.swing.JOptionPane.ERROR_MESSAGE;
/**
* @author hades
* @version 10.0
* Created by hades on 2021/8/5
*/
public class RemoteDesignExceptionHandler {
private static final RemoteDesignExceptionHandler INSTANCE = new RemoteDesignExceptionHandler();
public static RemoteDesignExceptionHandler getInstance() {
return INSTANCE;
}
private final List<Handler<Throwable, ResultWrapper>> testList = new ArrayList<>();
private final List<Handler<Throwable, ResultWrapper>> switchList = new ArrayList<>();
private RemoteDesignExceptionHandler() {
// 要保证顺序
testList.add(new CancelHandler());
testList.add(new ExecutionHandler());
testList.add(new UnexpectedHandler());
testList.add(new CommonHandler(false));
switchList.add(new CancelHandler());
switchList.add(new ExecutionHandler());
switchList.add(new UnexpectedHandler());
switchList.add(new CommonHandler(true));
}
public void handle(Throwable e, List<Handler<Throwable, ResultWrapper>> list) {
Throwable throwable = e;
ResultWrapper wrapper;
for (Handler<Throwable, ResultWrapper> handler : list) {
wrapper = handler.handle(throwable);
throwable = wrapper.getThrowable();
if (!wrapper.isNext()) {
break;
}
}
FineLoggerFactory.getLogger().error(throwable.getMessage(), throwable);
}
public void handleInSwitch(Throwable e, DesignerWorkspaceInfo workspaceInfo) {
if (workspaceInfo == null || workspaceInfo.getType() == DesignerWorkspaceType.Local) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
FineJOptionPane.showMessageDialog(EnvChangeEntrance.getInstance().getDialog(),
Toolkit.i18nText("Fine-Design_Basic_Switch_Workspace_Failed"),
Toolkit.i18nText("Fine-Design_Basic_Tool_Tips"),
ERROR_MESSAGE,
UIManager.getIcon("OptionPane.errorIcon"));
return;
}
handle(e, switchList);
}
public void handleInStart(Throwable e, DesignerWorkspaceInfo workspaceInfo) {
if (workspaceInfo == null || workspaceInfo.getType() == DesignerWorkspaceType.Local) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
return;
}
handle(e, testList);
}
public void handleInTest(Throwable e) {
handle(e, testList);
}
}

30
designer-base/src/main/java/com/fr/env/handler/ResultWrapper.java vendored

@ -0,0 +1,30 @@
package com.fr.env.handler;
/**
* @author hades
* @version 10.0
* Created by hades on 2021/8/5
*/
public class ResultWrapper {
private final boolean next;
private final Throwable throwable;
public ResultWrapper(Throwable throwable) {
this(true, throwable);
}
public ResultWrapper(boolean next, Throwable e) {
this.next = next;
this.throwable = e;
}
public boolean isNext() {
return next;
}
public Throwable getThrowable() {
return throwable;
}
}

18
designer-base/src/main/java/com/fr/env/handler/impl/CancelHandler.java vendored

@ -0,0 +1,18 @@
package com.fr.env.handler.impl;
import com.fr.env.handler.Handler;
import com.fr.env.handler.ResultWrapper;
import java.util.concurrent.CancellationException;
/**
* @author hades
* @version 10.0
* Created by hades on 2021/8/5
*/
public class CancelHandler implements Handler<Throwable, ResultWrapper> {
@Override
public ResultWrapper handle(Throwable e) {
return new ResultWrapper(!(e instanceof CancellationException), e);
}
}

48
designer-base/src/main/java/com/fr/env/handler/impl/CommonHandler.java vendored

@ -0,0 +1,48 @@
package com.fr.env.handler.impl;
import com.fr.base.exception.ExceptionDescriptor;
import com.fr.design.EnvChangeEntrance;
import com.fr.design.dialog.UIDetailErrorLinkDialog;
import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.DesignerContext;
import com.fr.env.HelpLink;
import com.fr.env.handler.Handler;
import com.fr.env.handler.ResultWrapper;
import javax.swing.SwingUtilities;
/**
* @author hades
* @version 10.0
* Created by hades on 2021/8/5
*/
public class CommonHandler implements Handler<Throwable, ResultWrapper> {
private final boolean onSwitch;
public CommonHandler(boolean onSwitch) {
this.onSwitch = onSwitch;
}
@Override
public ResultWrapper handle(Throwable e) {
if (e instanceof ExceptionDescriptor) {
ExceptionDescriptor exceptionDescriptor = (ExceptionDescriptor) e;
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
UIDetailErrorLinkDialog detailErrorLinkDialog = UIDetailErrorLinkDialog.newBuilder().
setWindow(onSwitch ? DesignerContext.getDesignerFrame() : EnvChangeEntrance.getInstance().getDialog()).
setErrorCode(exceptionDescriptor.errorCode()).
setReason(exceptionDescriptor.reason()).
setSolution(exceptionDescriptor.solution()).
setDetailReason(exceptionDescriptor.detailReason()).
setTitle(Toolkit.i18nText("Fine-Design_Basic_Connection_Failed")).
setLink(HelpLink.getLink(exceptionDescriptor.solution())).
setThrowable(e).build();
detailErrorLinkDialog.setVisible(true);
}
});
}
return new ResultWrapper(e);
}
}

21
designer-base/src/main/java/com/fr/env/handler/impl/ExecutionHandler.java vendored

@ -0,0 +1,21 @@
package com.fr.env.handler.impl;
import com.fr.env.handler.Handler;
import com.fr.env.handler.ResultWrapper;
import java.util.concurrent.ExecutionException;
/**
* @author hades
* @version 10.0
* Created by hades on 2021/8/5
*/
public class ExecutionHandler implements Handler<Throwable, ResultWrapper> {
@Override
public ResultWrapper handle(Throwable e) {
if (e instanceof ExecutionException) {
return new ResultWrapper(e.getCause());
}
return new ResultWrapper(e.getCause());
}
}

24
designer-base/src/main/java/com/fr/env/handler/impl/UnexpectedHandler.java vendored

@ -0,0 +1,24 @@
package com.fr.env.handler.impl;
import com.fr.base.exception.ExceptionDescriptor;
import com.fr.env.handler.Handler;
import com.fr.env.handler.ResultWrapper;
import com.fr.workspace.engine.convert.ExceptionConverter;
/**
* 出现预料之外的情况异常处理器
*
* @author hades
* @version 10.0
* Created by hades on 2021/8/5
*/
public class UnexpectedHandler implements Handler<Throwable, ResultWrapper> {
@Override
public ResultWrapper handle(Throwable e) {
if (!(e instanceof ExceptionDescriptor)) {
return new ResultWrapper(ExceptionConverter.getInstance().convert(e)) ;
}
return new ResultWrapper(e);
}
}

21
designer-base/src/test/java/com/fr/design/env/RemoteDesignerWorkspaceInfoTest.java vendored

@ -4,7 +4,10 @@ import com.fr.invoke.Reflect;
import com.fr.stable.xml.XMLPrintWriter;
import com.fr.stable.xml.XMLReaderHelper;
import com.fr.stable.xml.XMLableReader;
import com.fr.workspace.WorkContext;
import com.fr.workspace.connect.WorkspaceClient;
import com.fr.workspace.connect.WorkspaceConnectionInfo;
import com.fr.workspace.connect.WorkspaceConnector;
import junit.framework.TestCase;
import org.junit.Assert;
@ -18,15 +21,31 @@ import java.io.ByteArrayOutputStream;
*/
public class RemoteDesignerWorkspaceInfoTest extends TestCase {
public void testCheckValid() {
public void testCheckValid() throws Exception {
RemoteDesignerWorkspaceInfo workspaceInfo0 = RemoteDesignerWorkspaceInfo.create(new WorkspaceConnectionInfo("http://localhost:8075/webroot/decision", "admin", "123", "", "", true));
RemoteDesignerWorkspaceInfo workspaceInfo1 = RemoteDesignerWorkspaceInfo.create(new WorkspaceConnectionInfo("http://127.0.0.1:8075/webroot/decision", "admin", "123", "", "", true));
RemoteDesignerWorkspaceInfo workspaceInfo2 = RemoteDesignerWorkspaceInfo.create(new WorkspaceConnectionInfo("https://127.0.0.1:8075/webroot/decision", "admin", "123", "", "", true));
RemoteDesignerWorkspaceInfo workspaceInfo3 = RemoteDesignerWorkspaceInfo.create(new WorkspaceConnectionInfo("https://localhost:8075/webroot/decision", "admin", "123", "", "", true));
WorkspaceConnector connector = WorkContext.getConnector();
WorkspaceConnector workspaceConnector = new WorkspaceConnector() {
@Override
public boolean testConnection(WorkspaceConnectionInfo connection) throws Exception {
return false;
}
@Override
public WorkspaceClient connect(WorkspaceConnectionInfo connection) throws Exception {
return null;
}
};
WorkContext.setConnector(workspaceConnector);
Assert.assertFalse(workspaceInfo0.checkValid());
Assert.assertFalse(workspaceInfo1.checkValid());
Assert.assertFalse(workspaceInfo2.checkValid());
Assert.assertFalse(workspaceInfo3.checkValid());
WorkContext.setConnector(connector);
}
public void testReadXml() {

23
designer-base/src/test/java/com/fr/design/mainframe/JTemplateNameHelperTest.java

@ -0,0 +1,23 @@
package com.fr.design.mainframe;
import junit.framework.TestCase;
/**
* @author shine
* @version 10.0
* Created by shine on 2021/5/8
*/
public class JTemplateNameHelperTest extends TestCase {
public void testNewTemplateNameByIndex() {
String name = JTemplateNameHelper.newTemplateNameByIndex("TEST");
assertEquals("TEST1", name);
String name1 = JTemplateNameHelper.newTemplateNameByIndex("TEST");
assertEquals("TEST2", name1);
}
}

213
designer-chart/src/main/java/com/fr/design/ChartTypeInterfaceManager.java

@ -8,7 +8,6 @@ import com.fr.chart.fun.ChartTypeProvider;
import com.fr.chartx.attr.ChartProvider;
import com.fr.common.annotations.Compatible;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.beans.FurtherBasicBeanPane;
import com.fr.design.chart.fun.ChartTypeUIProvider;
import com.fr.design.chart.gui.ChartWidgetOption;
import com.fr.design.condition.ConditionAttributesPane;
@ -46,7 +45,6 @@ import com.fr.general.GeneralContext;
import com.fr.general.IOUtils;
import com.fr.invoke.Reflect;
import com.fr.locale.InterProviderFactory;
import com.fr.log.FineLoggerFactory;
import com.fr.plugin.chart.PiePlot4VanChart;
import com.fr.plugin.chart.area.VanChartAreaPlot;
import com.fr.plugin.chart.box.VanChartBoxPlot;
@ -75,7 +73,6 @@ import com.fr.plugin.observer.PluginEvent;
import com.fr.plugin.observer.PluginEventListener;
import com.fr.plugin.solution.closeable.CloseableContainedMap;
import com.fr.stable.ArrayUtils;
import com.fr.stable.AssistUtils;
import com.fr.stable.StringUtils;
import com.fr.stable.plugin.ExtraChartDesignClassManagerProvider;
import com.fr.van.chart.area.AreaIndependentVanChartInterface;
@ -100,17 +97,7 @@ import com.fr.van.chart.treemap.TreeMapIndependentVanChartInterface;
import com.fr.van.chart.wordcloud.designer.WordCloudIndependentVanChartInterface;
import javax.swing.Icon;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.awt.event.ActionListener;
import static com.fr.chart.charttypes.ChartTypeManager.DEFAULT_PRIORITY;
import static com.fr.chart.charttypes.ChartTypeManager.DEPRECATED_CHART_PRIORITY;
import static com.fr.chart.charttypes.ChartTypeManager.VAN_CHART_PRIORITY;
/**
* Created by eason on 14/12/29.
@ -120,10 +107,7 @@ public class ChartTypeInterfaceManager implements ExtraChartDesignClassManagerPr
private static ChartTypeInterfaceManager classManager = new ChartTypeInterfaceManager();
private static LinkedHashMap<String, CloseableContainedMap<String, ChartTypeUIProvider, LinkedHashMap>> chartTypeInterfaces =
new LinkedHashMap<String, CloseableContainedMap<String, ChartTypeUIProvider, LinkedHashMap>>();
private static Map<String, String> idAndPriorityMap = new HashMap<String, String>();
private static CloseableContainedMap<String, ChartTypeUIProvider, HashMap> chartTypeUIs = new CloseableContainedMap<>(HashMap.class);
public static final String TYPE_PANE_DEFAULT_TITLE = "DEFAULT_NAME";
@ -186,127 +170,69 @@ public class ChartTypeInterfaceManager implements ExtraChartDesignClassManagerPr
private static void readVanChart() {
addChartTypeInterface(VAN_CHART_PRIORITY, PiePlot4VanChart.VAN_CHART_PIE_PLOT, new PieIndependentVanChartInterface());
addChartTypeInterface(VAN_CHART_PRIORITY, VanChartColumnPlot.VAN_CHART_COLUMN_PLOT_ID, new VanColumnChartTypeUI());
addChartTypeInterface(VAN_CHART_PRIORITY, VanChartColumnPlot.VAN_CHART_BAR_PLOT_ID, new BarIndependentVanChartInterface());
addChartTypeInterface(VAN_CHART_PRIORITY, VanChartLinePlot.VAN_CHART_LINE_PLOT, new LineIndependentVanChartInterface());
addChartTypeInterface(VAN_CHART_PRIORITY, VanChartAreaPlot.VAN_CHART_AREA_PLOT_ID, new AreaIndependentVanChartInterface());
addChartTypeInterface(VAN_CHART_PRIORITY, VanChartGaugePlot.VAN_CHART_GAUGE_PLOT, new GaugeIndependentVanChartInterface());
addChartTypeInterface(VAN_CHART_PRIORITY, VanChartRadarPlot.VAN_CHART_RADAR_PLOT, new RadarIndependentVanChartInterface());
addChartTypeInterface(VAN_CHART_PRIORITY, VanChartScatterPlot.VAN_CHART_SCATTER_PLOT_ID, new ScatterIndependentVanChartInterface());
addChartTypeInterface(VAN_CHART_PRIORITY, VanChartBubblePlot.VAN_CHART_BUBBLE_PLOT_ID, new BubbleIndependentVanChartInterface());
addChartTypeInterface(VAN_CHART_PRIORITY, VanChartCustomPlot.VAN_CHART_CUSTOM_PLOT_ID, new CustomIndependentVanChartInterface());
addChartTypeInterface(VAN_CHART_PRIORITY, VanChartMultiPiePlot.VAN_CHART_MULTILAYER_PLOT_ID, new MultiPieIndependentVanChartInterface());
addChartTypeInterface(VAN_CHART_PRIORITY, VanChartMapPlot.VAN_CHART_MAP_ID, new VanMapChartTypeUI());
addChartTypeInterface(VAN_CHART_PRIORITY, VanChartDrillMapPlot.VAN_CHART_DRILL_MAP_ID, new VanDrillMapChartTypeUI());
addChartTypeInterface(VAN_CHART_PRIORITY, VanChartTreeMapPlot.VAN_CHART_TREE_MAP_PLOT_ID, new TreeMapIndependentVanChartInterface());
addChartTypeInterface(VAN_CHART_PRIORITY, VanChartFunnelPlot.VAN_CHART_FUNNEL_PLOT_ID, new FunnelIndependentVanChartInterface());
addChartTypeInterface(VAN_CHART_PRIORITY, VanChartHeatMapPlot.VAN_CHART_HEAT_MAP_ID, new VanHeatMapChartTypeUI());
addChartTypeInterface(VAN_CHART_PRIORITY, VanChartWordCloudPlot.WORD_CLOUD_PLOT_ID, new WordCloudIndependentVanChartInterface());
addChartTypeInterface(VAN_CHART_PRIORITY, VanChartGanttPlot.VAN_CHART_GANTT_PLOT_ID, new GanttIndependentVanChartInterface());
addChartTypeInterface(VAN_CHART_PRIORITY, VanChartStructurePlot.STRUCTURE_PLOT_ID, new VanStructureChartTypeUI());
addChartTypeInterface(VAN_CHART_PRIORITY, VanChartBoxPlot.VAN_CHART_BOX_PLOT_ID, new BoxIndependentVanChartInterface());
addChartTypeInterface(PiePlot4VanChart.VAN_CHART_PIE_PLOT, new PieIndependentVanChartInterface());
addChartTypeInterface(VanChartColumnPlot.VAN_CHART_COLUMN_PLOT_ID, new VanColumnChartTypeUI());
addChartTypeInterface(VanChartColumnPlot.VAN_CHART_BAR_PLOT_ID, new BarIndependentVanChartInterface());
addChartTypeInterface(VanChartLinePlot.VAN_CHART_LINE_PLOT, new LineIndependentVanChartInterface());
addChartTypeInterface(VanChartAreaPlot.VAN_CHART_AREA_PLOT_ID, new AreaIndependentVanChartInterface());
addChartTypeInterface(VanChartGaugePlot.VAN_CHART_GAUGE_PLOT, new GaugeIndependentVanChartInterface());
addChartTypeInterface(VanChartRadarPlot.VAN_CHART_RADAR_PLOT, new RadarIndependentVanChartInterface());
addChartTypeInterface(VanChartScatterPlot.VAN_CHART_SCATTER_PLOT_ID, new ScatterIndependentVanChartInterface());
addChartTypeInterface(VanChartBubblePlot.VAN_CHART_BUBBLE_PLOT_ID, new BubbleIndependentVanChartInterface());
addChartTypeInterface(VanChartCustomPlot.VAN_CHART_CUSTOM_PLOT_ID, new CustomIndependentVanChartInterface());
addChartTypeInterface(VanChartMultiPiePlot.VAN_CHART_MULTILAYER_PLOT_ID, new MultiPieIndependentVanChartInterface());
addChartTypeInterface(VanChartMapPlot.VAN_CHART_MAP_ID, new VanMapChartTypeUI());
addChartTypeInterface(VanChartDrillMapPlot.VAN_CHART_DRILL_MAP_ID, new VanDrillMapChartTypeUI());
addChartTypeInterface(VanChartTreeMapPlot.VAN_CHART_TREE_MAP_PLOT_ID, new TreeMapIndependentVanChartInterface());
addChartTypeInterface(VanChartFunnelPlot.VAN_CHART_FUNNEL_PLOT_ID, new FunnelIndependentVanChartInterface());
addChartTypeInterface(VanChartHeatMapPlot.VAN_CHART_HEAT_MAP_ID, new VanHeatMapChartTypeUI());
addChartTypeInterface(VanChartWordCloudPlot.WORD_CLOUD_PLOT_ID, new WordCloudIndependentVanChartInterface());
addChartTypeInterface(VanChartGanttPlot.VAN_CHART_GANTT_PLOT_ID, new GanttIndependentVanChartInterface());
addChartTypeInterface(VanChartStructurePlot.STRUCTURE_PLOT_ID, new VanStructureChartTypeUI());
addChartTypeInterface(VanChartBoxPlot.VAN_CHART_BOX_PLOT_ID, new BoxIndependentVanChartInterface());
}
private static void readDefault() {
addChartTypeInterface(DEPRECATED_CHART_PRIORITY, ChartConstants.COLUMN_CHART, new ColumnChartTypeUI());
addChartTypeInterface(DEPRECATED_CHART_PRIORITY, ChartConstants.LINE_CHART, new LineChartTypeUI());
addChartTypeInterface(DEPRECATED_CHART_PRIORITY, ChartConstants.BAR_CHART, new BarChartTypeUI());
addChartTypeInterface(DEPRECATED_CHART_PRIORITY, ChartConstants.PIE_CHART, new PieChartTypeUI());
addChartTypeInterface(DEPRECATED_CHART_PRIORITY, ChartConstants.AREA_CHART, new AreaChartTypeUI());
addChartTypeInterface(DEPRECATED_CHART_PRIORITY, ChartConstants.SCATTER_CHART, new XYScatterChartTypeUI());
addChartTypeInterface(DEPRECATED_CHART_PRIORITY, ChartConstants.BUBBLE_CHART, new BubbleChartTypeUI());
addChartTypeInterface(DEPRECATED_CHART_PRIORITY, ChartConstants.RADAR_CHART, new RadarChartTypeUI());
addChartTypeInterface(DEPRECATED_CHART_PRIORITY, ChartConstants.STOCK_CHART, new StockChartTypeUI());
addChartTypeInterface(DEPRECATED_CHART_PRIORITY, ChartConstants.METER_CHART, new MeterChartTypeUI());
addChartTypeInterface(DEPRECATED_CHART_PRIORITY, ChartConstants.RANGE_CHART, new RangeChartTypeUI());
addChartTypeInterface(DEPRECATED_CHART_PRIORITY, ChartConstants.CUSTOM_CHART, new CustomChartTypeUI());
addChartTypeInterface(DEPRECATED_CHART_PRIORITY, ChartConstants.GANTT_CHART, new GanttChartTypeUI());
addChartTypeInterface(DEPRECATED_CHART_PRIORITY, ChartConstants.DONUT_CHART, new DonutChartTypeUI());
addChartTypeInterface(DEPRECATED_CHART_PRIORITY, ChartConstants.MAP_CHART, new MapChartTypeUI());
addChartTypeInterface(DEPRECATED_CHART_PRIORITY, ChartConstants.GIS_CHAER, new GisMapChartTypeUI());
addChartTypeInterface(DEPRECATED_CHART_PRIORITY, ChartConstants.FUNNEL_CHART, new FunnelChartTypeUI());
}
private static void addChartTypeInterface(String priority, String plotID, ChartTypeUIProvider provider) {
if (chartTypeInterfaces != null) {
if (!chartTypeInterfaces.containsKey(priority)) {
//新建一个具体图表列表
CloseableContainedMap<String, ChartTypeUIProvider, LinkedHashMap> chartUIList
= new CloseableContainedMap<String, ChartTypeUIProvider, LinkedHashMap>(LinkedHashMap.class);
chartUIList.put(plotID, provider);
chartTypeInterfaces.put(priority, chartUIList);
} else {
Map<String, ChartTypeUIProvider> chartUIList = chartTypeInterfaces.get(priority);
if (!chartUIList.containsKey(plotID)) {
chartUIList.put(plotID, provider);
}
}
idAndPriorityMap.put(plotID, priority);
addChartTypeInterface(ChartConstants.COLUMN_CHART, new ColumnChartTypeUI());
addChartTypeInterface(ChartConstants.LINE_CHART, new LineChartTypeUI());
addChartTypeInterface(ChartConstants.BAR_CHART, new BarChartTypeUI());
addChartTypeInterface(ChartConstants.PIE_CHART, new PieChartTypeUI());
addChartTypeInterface(ChartConstants.AREA_CHART, new AreaChartTypeUI());
addChartTypeInterface(ChartConstants.SCATTER_CHART, new XYScatterChartTypeUI());
addChartTypeInterface(ChartConstants.BUBBLE_CHART, new BubbleChartTypeUI());
addChartTypeInterface(ChartConstants.RADAR_CHART, new RadarChartTypeUI());
addChartTypeInterface(ChartConstants.STOCK_CHART, new StockChartTypeUI());
addChartTypeInterface(ChartConstants.METER_CHART, new MeterChartTypeUI());
addChartTypeInterface(ChartConstants.RANGE_CHART, new RangeChartTypeUI());
addChartTypeInterface(ChartConstants.CUSTOM_CHART, new CustomChartTypeUI());
addChartTypeInterface(ChartConstants.GANTT_CHART, new GanttChartTypeUI());
addChartTypeInterface(ChartConstants.DONUT_CHART, new DonutChartTypeUI());
addChartTypeInterface(ChartConstants.MAP_CHART, new MapChartTypeUI());
addChartTypeInterface(ChartConstants.GIS_CHAER, new GisMapChartTypeUI());
addChartTypeInterface(ChartConstants.FUNNEL_CHART, new FunnelChartTypeUI());
}
private static void addChartTypeInterface(String id, ChartTypeUIProvider provider) {
if (chartTypeUIs != null) {
chartTypeUIs.put(id, provider);
}
}
private ChartTypeUIProvider getChartTypeInterface(String plotID) {
if (idAndPriorityMap.containsKey(plotID)) {
String priority = idAndPriorityMap.get(plotID);
if (chartTypeInterfaces.containsKey(priority)) {
return chartTypeInterfaces.get(priority).get(plotID);
}
private ChartTypeUIProvider getChartTypeInterface(String id) {
if (chartTypeUIs.containsKey(id)) {
return chartTypeUIs.get(id);
}
return null;
}
/**
* 把所有的pane加到list里
*
* @param paneList pane容器
*/
public void addPlotTypePaneList(List<FurtherBasicBeanPane<? extends ChartProvider>> paneList,
Map<String, Map<String, FurtherBasicBeanPane<? extends ChartProvider>>> allChartTypePane,
ActionListener autoButtonListener) {
List<Integer> priorityList = getPriorityInOrder();
for (Integer aPriorityList : priorityList) {
String priority = String.valueOf(aPriorityList);
addPlotTypePaneList(priority, paneList, allChartTypePane, autoButtonListener);
}
}
public void addPlotTypePaneList(String priority, List<FurtherBasicBeanPane<? extends ChartProvider>> paneList,
Map<String, Map<String, FurtherBasicBeanPane<? extends ChartProvider>>> allChartTypePane,
ActionListener autoButtonListener) {
if (chartTypeInterfaces != null && chartTypeInterfaces.containsKey(priority)) {
Map<String, ChartTypeUIProvider> chartUIList = chartTypeInterfaces.get(priority);
Iterator<Map.Entry<String, ChartTypeUIProvider>> iterator = chartUIList.entrySet().iterator();
while (iterator.hasNext()) {
try {
Map.Entry<String, ChartTypeUIProvider> entry = iterator.next();
String plotID = entry.getKey();
AbstractChartTypePane pane = entry.getValue().getPlotTypePane();
if (AssistUtils.equals(pane.title4PopupWindow(), TYPE_PANE_DEFAULT_TITLE)) {
continue;
}
pane.reLayout(plotID);
pane.registerButtonListener(autoButtonListener);
paneList.add(pane);
if (allChartTypePane.get(priority) == null) {
allChartTypePane.put(priority, new LinkedHashMap<String, FurtherBasicBeanPane<? extends ChartProvider>>());
}
allChartTypePane.get(priority).put(plotID, pane);
} catch (Throwable e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
}
}
public AbstractChartTypePane getPlotTypePane(String id) {
if (chartTypeUIs.containsKey(id)) {
return chartTypeUIs.get(id).getPlotTypePane();
}
return null;
}
@Compatible
@ -314,23 +240,9 @@ public class ChartTypeInterfaceManager implements ExtraChartDesignClassManagerPr
return getName(plotID);
}
private List<Integer> getPriorityInOrder() {
List<Integer> priorityList = new ArrayList<Integer>();
if (chartTypeInterfaces != null) {
Iterator iterator = chartTypeInterfaces.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry entry = (Map.Entry) iterator.next();
String priority = (String) entry.getKey();
priorityList.add(Integer.valueOf(priority));
}
}
return ChartTypeManager.orderInPriority(priorityList);
}
public String getIconPath(String plotID) {
if (chartTypeInterfaces != null) {
if (chartTypeUIs != null) {
ChartTypeUIProvider provider = getChartTypeInterface(plotID);
if (provider != null) {
return provider.getIconPath();
@ -341,7 +253,7 @@ public class ChartTypeInterfaceManager implements ExtraChartDesignClassManagerPr
public String[] getDemoImagePath(String chartID) {
if (chartTypeInterfaces != null) {
if (chartTypeUIs != null) {
ChartTypeUIProvider provider = getChartTypeInterface(chartID);
if (provider != null) {
String[] result = null;
@ -397,7 +309,7 @@ public class ChartTypeInterfaceManager implements ExtraChartDesignClassManagerPr
}
public String[] getSubName(String chartID) {
if (chartTypeInterfaces != null) {
if (chartTypeUIs != null) {
ChartTypeUIProvider provider = getChartTypeInterface(chartID);
if (provider != null) {
String[] subNames = null;
@ -430,7 +342,7 @@ public class ChartTypeInterfaceManager implements ExtraChartDesignClassManagerPr
}
public String getName(String chartID) {
if (chartTypeInterfaces != null) {
if (chartTypeUIs != null) {
ChartTypeUIProvider provider = getChartTypeInterface(chartID);
if (provider != null) {
String name = null;
@ -575,9 +487,8 @@ public class ChartTypeInterfaceManager implements ExtraChartDesignClassManagerPr
if (StringUtils.isEmpty(id)) {
id = injection.getAttribute("plotID");
}
String priority = injection.getAttribute("priority", DEFAULT_PRIORITY);
ChartTypeUIProvider instance = (ChartTypeUIProvider) injection.getObject();
addChartTypeInterface(priority, id, instance);
addChartTypeInterface(id, instance);
}
}
@ -586,22 +497,18 @@ public class ChartTypeInterfaceManager implements ExtraChartDesignClassManagerPr
public void demount(PluginSingleInjection injection) {
if (isChartTypeUIProvider(injection)) {
String priority = injection.getAttribute("priority", DEFAULT_PRIORITY);
String id = injection.getAttribute("chartID");
if (StringUtils.isEmpty(id)) {
id = injection.getAttribute("plotID");
}
removeChartTypeInterface(priority, id);
removeChartTypeInterface(id);
}
}
private void removeChartTypeInterface(String priority, String plotID) {
private void removeChartTypeInterface(String id) {
if (chartTypeInterfaces != null) {
if (chartTypeInterfaces.containsKey(priority)) {
Map<String, ChartTypeUIProvider> chartUIList = chartTypeInterfaces.get(priority);
chartUIList.remove(plotID);
}
if (chartTypeUIs != null) {
chartTypeUIs.remove(id);
}
}

32
designer-chart/src/main/java/com/fr/design/chart/fun/ChartTypeUIProvider.java

@ -90,7 +90,9 @@ public interface ChartTypeUIProvider extends Level {
//todo:把下面这些接口删除
@Deprecated
boolean needChartChangePane();
default boolean needChartChangePane() {
return false;
}
/**
* 数据集数据源的界面
@ -98,7 +100,9 @@ public interface ChartTypeUIProvider extends Level {
* @return 数据集数据源的界面
*/
@Deprecated
AbstractTableDataContentPane getTableDataSourcePane(Plot plot, ChartDataPane parent);
default AbstractTableDataContentPane getTableDataSourcePane(Plot plot, ChartDataPane parent) {
return null;
}
/**
@ -107,7 +111,9 @@ public interface ChartTypeUIProvider extends Level {
* @return 单元格数据源的界面
*/
@Deprecated
AbstractReportDataContentPane getReportDataSourcePane(Plot plot, ChartDataPane parent);
default AbstractReportDataContentPane getReportDataSourcePane(Plot plot, ChartDataPane parent) {
return null;
}
/**
* 条件属性界面
@ -115,7 +121,9 @@ public interface ChartTypeUIProvider extends Level {
* @return 条件属性界面
*/
@Deprecated
ConditionAttributesPane getPlotConditionPane(Plot plot);
default ConditionAttributesPane getPlotConditionPane(Plot plot) {
return null;
}
/**
* 系列界面
@ -123,7 +131,9 @@ public interface ChartTypeUIProvider extends Level {
* @return 系列界面
*/
@Deprecated
BasicBeanPane<Plot> getPlotSeriesPane(ChartStylePane parent, Plot plot);
default BasicBeanPane<Plot> getPlotSeriesPane(ChartStylePane parent, Plot plot) {
return null;
}
/**
* 是否使用默认的界面为了避免界面来回切换
@ -131,12 +141,18 @@ public interface ChartTypeUIProvider extends Level {
* @return 是否使用默认的界面
*/
@Deprecated
boolean isUseDefaultPane();
default boolean isUseDefaultPane() {
return false;
}
@Deprecated
ChartEditPane getChartEditPane(String plotID);
default ChartEditPane getChartEditPane(String plotID) {
return new ChartEditPane();
}
@Deprecated
ChartsConfigPane getChartConfigPane(String plotID);
default ChartsConfigPane getChartConfigPane(String plotID) {
return null;
}
}

1
designer-chart/src/main/java/com/fr/design/chart/fun/IndependentChartUIProvider.java

@ -6,6 +6,7 @@ import com.fr.common.annotations.Compatible;
* Created by shine on 2019/09/05.
*/
@Compatible
@Deprecated
public interface IndependentChartUIProvider extends ChartTypeUIProvider {
}

59
designer-chart/src/main/java/com/fr/design/chart/fun/impl/AbstractChartTypeUI.java

@ -1,19 +1,11 @@
package com.fr.design.chart.fun.impl;
import com.fr.chart.chartattr.Plot;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.chart.fun.ChartTypeUIProvider;
import com.fr.design.chartx.impl.AbstractDataPane;
import com.fr.design.chartx.impl.AbstractOtherPane;
import com.fr.design.condition.ConditionAttributesPane;
import com.fr.design.gui.frpane.AttributeChangeListener;
import com.fr.design.mainframe.chart.ChartEditPane;
import com.fr.design.mainframe.chart.ChartsConfigPane;
import com.fr.design.mainframe.chart.gui.ChartDataPane;
import com.fr.design.mainframe.chart.gui.ChartStylePane;
import com.fr.design.mainframe.chart.gui.data.report.AbstractReportDataContentPane;
import com.fr.design.mainframe.chart.gui.data.table.AbstractTableDataContentPane;
import com.fr.design.mainframe.chart.AbstractChartAttrPane;
import com.fr.design.mainframe.chart.gui.type.AbstractChartTypePane;
import com.fr.design.mainframe.chart.mode.ChartEditContext;
import com.fr.stable.fun.impl.AbstractProvider;
import com.fr.stable.fun.mark.API;
@ -24,13 +16,15 @@ import com.fr.stable.fun.mark.API;
public abstract class AbstractChartTypeUI extends AbstractProvider implements ChartTypeUIProvider {
@Override
public abstract AbstractChartTypePane getPlotTypePane();
public AbstractChartTypePane getPlotTypePane() {
return ChartEditContext.duchampMode() ? new InvisibleChartTypePane() : new DefaultChartTypePane();
}
@Override
public abstract AbstractDataPane getChartDataPane(AttributeChangeListener listener);
@Override
public abstract AbstractOtherPane[] getAttrPaneArray(AttributeChangeListener listener);
public abstract AbstractChartAttrPane[] getAttrPaneArray(AttributeChangeListener listener);
@Override
public String[] getSubName() {
@ -46,45 +40,4 @@ public abstract class AbstractChartTypeUI extends AbstractProvider implements Ch
public String mark4Provider() {
return getClass().getName();
}
@Override
public boolean needChartChangePane() {
return false;
}
@Override
public AbstractTableDataContentPane getTableDataSourcePane(Plot plot, ChartDataPane parent) {
return null;
}
@Override
public AbstractReportDataContentPane getReportDataSourcePane(Plot plot, ChartDataPane parent) {
return null;
}
@Override
public boolean isUseDefaultPane() {
return false;
}
@Override
public ChartEditPane getChartEditPane(String plotID) {
return new ChartEditPane();
}
@Override
public ConditionAttributesPane getPlotConditionPane(Plot plot) {
return null;
}
@Override
public BasicBeanPane<Plot> getPlotSeriesPane(ChartStylePane parent, Plot plot) {
return null;
}
@Override
public ChartsConfigPane getChartConfigPane(String plotID) {
return null;
}
}

1
designer-chart/src/main/java/com/fr/design/chart/fun/impl/AbstractIndependentChartUIWithAPILevel.java

@ -17,6 +17,7 @@ import com.fr.stable.StableUtils;
/**
* Created by Mitisky on 16/3/7.
*/
@Deprecated
public abstract class AbstractIndependentChartUIWithAPILevel implements ChartTypeUIProvider {
//这个不能改,是做兼容用的
//2016.10.14-11.24号的8.0jar因为改了这个为3,不会提示5.26号之前的插件更新

38
designer-chart/src/main/java/com/fr/design/chart/fun/impl/DefaultChartTypePane.java

@ -0,0 +1,38 @@
package com.fr.design.chart.fun.impl;
import com.fr.chart.charttypes.ChartTypeManager;
import com.fr.chartx.attr.ChartProvider;
import com.fr.design.ChartTypeInterfaceManager;
import com.fr.design.mainframe.chart.gui.type.AbstractChartTypePane;
/**
* @author shine
* @version 10.0
* Created by shine on 2020/7/8
*/
public class DefaultChartTypePane<T extends ChartProvider> extends AbstractChartTypePane<T> {
@Override
protected String[] getTypeIconPath() {
return ChartTypeInterfaceManager.getInstance().getDemoImagePath(this.getPlotID());
}
@Override
protected String[] getTypeTipName() {
return ChartTypeInterfaceManager.getInstance().getSubName(this.getPlotID());
}
public ChartProvider getDefaultChart() {
return ChartTypeManager.getInstance().getChartTypes(this.getPlotID())[0];
}
public String title4PopupWindow() {
return ChartTypeInterfaceManager.getInstance().getName(this.getPlotID());
}
@Override
public void populateBean(T ob) {
}
}

15
designer-chart/src/main/java/com/fr/design/chart/fun/impl/InvisibleChartTypePane.java

@ -0,0 +1,15 @@
package com.fr.design.chart.fun.impl;
import com.fr.design.ChartTypeInterfaceManager;
/**
* @author shine
* @version 10.0
* Created by shine on 2021/6/25
*/
public class InvisibleChartTypePane extends DefaultChartTypePane {
@Override
public String title4PopupWindow() {
return ChartTypeInterfaceManager.TYPE_PANE_DEFAULT_TITLE;
}
}

25
designer-chart/src/main/java/com/fr/design/chartx/data/map/LineMapAreaLngLatPaneWithComboBox.java

@ -2,7 +2,7 @@ package com.fr.design.chartx.data.map;
import com.fr.chartx.data.field.diff.LineMapColumnFieldCollection;
import com.fr.design.chartx.fields.AbstractDataSetFieldsPane;
import com.fr.design.chartx.fields.diff.LineMapDataSetFieldsPane;
import com.fr.design.chartx.fields.diff.MapDataSetFieldsPane;
import com.fr.design.gui.icombobox.UIComboBox;
import com.fr.design.i18n.Toolkit;
@ -24,15 +24,15 @@ public class LineMapAreaLngLatPaneWithComboBox extends LineMapAreaLngLatPaneWith
private UIComboBox toLng_tab1;
private UIComboBox toLat_tab1;
private LineMapDataSetFieldsPane lineMapDataSetFieldsPane;
private MapDataSetFieldsPane mapDataSetFieldsPane;
public LineMapAreaLngLatPaneWithComboBox(LineMapDataSetFieldsPane lineMapDataSetFieldsPane) {
this.lineMapDataSetFieldsPane = lineMapDataSetFieldsPane;
public LineMapAreaLngLatPaneWithComboBox(MapDataSetFieldsPane mapDataSetFieldsPane) {
this.mapDataSetFieldsPane = mapDataSetFieldsPane;
initComponents();
}
protected void initComponents() {
if (lineMapDataSetFieldsPane == null) {
if (mapDataSetFieldsPane == null) {
return;
}
super.initComponents();
@ -48,7 +48,7 @@ public class LineMapAreaLngLatPaneWithComboBox extends LineMapAreaLngLatPaneWith
return createPane(
new String[]{Toolkit.i18nText("Fine-Design_Chart_Start_Area_Name"),
Toolkit.i18nText("Fine-Design_Chart_End_Area_Name")},
lineMapDataSetFieldsPane.createAreaPanel(fromArea_tab0), lineMapDataSetFieldsPane.createAreaPanel(toArea_tab0)
mapDataSetFieldsPane.createAreaPanel(fromArea_tab0), mapDataSetFieldsPane.createAreaPanel(toArea_tab0)
);
}
@ -64,18 +64,19 @@ public class LineMapAreaLngLatPaneWithComboBox extends LineMapAreaLngLatPaneWith
}
return createPane(
new String[]{
Toolkit.i18nText("Fine-Design_Chart_Start_Area_Name"),
Toolkit.i18nText("Fine-Design_Chart_Start_Longitude"),
Toolkit.i18nText("Fine-Design_Chart_Start_Latitude"),
Toolkit.i18nText("Fine-Design_Chart_End_Area_Name"),
Toolkit.i18nText("Fine-Design_Chart_Start_Area_Name"),
Toolkit.i18nText("Fine-Design_Chart_End_Longitude"),
Toolkit.i18nText("Fine-Design_Chart_End_Latitude")},
lineMapDataSetFieldsPane.createAreaPanel(fromArea_tab1),
Toolkit.i18nText("Fine-Design_Chart_End_Latitude"),
Toolkit.i18nText("Fine-Design_Chart_End_Area_Name")
},
fromLng_tab1,
fromLat_tab1,
lineMapDataSetFieldsPane.createAreaPanel(toArea_tab1),
fromArea_tab1,
toLng_tab1,
toLat_tab1);
toLat_tab1,
toArea_tab1);
}
protected void populateTab0(LineMapColumnFieldCollection fieldCollection) {

16
designer-chart/src/main/java/com/fr/design/chartx/data/map/PointMapAreaLngLatPaneWithComboBox.java

@ -2,7 +2,7 @@ package com.fr.design.chartx.data.map;
import com.fr.chartx.data.field.diff.PointMapColumnFieldCollection;
import com.fr.design.chartx.fields.AbstractDataSetFieldsPane;
import com.fr.design.chartx.fields.diff.PointMapDataSetFieldsPane;
import com.fr.design.chartx.fields.diff.MapDataSetFieldsPane;
import com.fr.design.gui.icombobox.UIComboBox;
import com.fr.design.i18n.Toolkit;
@ -20,15 +20,15 @@ public class PointMapAreaLngLatPaneWithComboBox extends PointMapAreaLngLatPaneWi
private UIComboBox lng_tab1;
private UIComboBox lat_tab1;
private PointMapDataSetFieldsPane pointMapDataSetFieldsPane;
private MapDataSetFieldsPane mapDataSetFieldsPane;
public PointMapAreaLngLatPaneWithComboBox(PointMapDataSetFieldsPane pointMapDataSetFieldsPane) {
this.pointMapDataSetFieldsPane = pointMapDataSetFieldsPane;
public PointMapAreaLngLatPaneWithComboBox(MapDataSetFieldsPane pointMapDataSetFieldsPane) {
this.mapDataSetFieldsPane = pointMapDataSetFieldsPane;
initComponents();
}
protected void initComponents() {
if (pointMapDataSetFieldsPane == null) {
if (mapDataSetFieldsPane == null) {
return;
}
super.initComponents();
@ -41,7 +41,7 @@ public class PointMapAreaLngLatPaneWithComboBox extends PointMapAreaLngLatPaneWi
}
return createPane(
new String[]{Toolkit.i18nText("Fine-Design_Chart_Area_Name")},
pointMapDataSetFieldsPane.createAreaPanel(area_tab0)
mapDataSetFieldsPane.createAreaPanel(area_tab0)
);
}
@ -53,8 +53,8 @@ public class PointMapAreaLngLatPaneWithComboBox extends PointMapAreaLngLatPaneWi
lat_tab1 = new UIComboBox();
}
return createPane(
new String[]{Toolkit.i18nText("Fine-Design_Chart_Area_Name"), Toolkit.i18nText("Fine-Design_Chart_Longitude"), Toolkit.i18nText("Fine-Design_Chart_Latitude")},
pointMapDataSetFieldsPane.createAreaPanel(area_tab1), lng_tab1, lat_tab1
new String[]{Toolkit.i18nText("Fine-Design_Chart_Longitude"), Toolkit.i18nText("Fine-Design_Chart_Latitude"), Toolkit.i18nText("Fine-Design_Chart_Area_Name")},
lng_tab1, lat_tab1, area_tab1
);
}

2
designer-chart/src/main/java/com/fr/design/chartx/fields/diff/AbstractCellDataFieldsWithSeriesValuePane.java

@ -21,7 +21,7 @@ public abstract class AbstractCellDataFieldsWithSeriesValuePane<T extends Column
seriesValueFieldsPane = new CellDataSeriesValueCorrelationPane();
if (normalCenter != null) {
JPanel panel = new JPanel(new BorderLayout(0,6));
JPanel panel = new JPanel(new BorderLayout(0, 6));
panel.add(normalCenter, BorderLayout.NORTH);
panel.add(seriesValueFieldsPane, BorderLayout.CENTER);
return panel;

15
designer-chart/src/main/java/com/fr/design/chartx/fields/diff/AbstractDataSetFieldsWithSeriesValuePane.java

@ -5,8 +5,8 @@ import com.fr.design.chartx.component.SeriesValueFieldComboBoxPane;
import com.fr.design.chartx.fields.AbstractDataSetFieldsPane;
import javax.swing.JPanel;
import java.util.List;
import java.awt.BorderLayout;
import java.util.List;
/**
* Created by shine on 2019/5/16.
@ -20,10 +20,10 @@ public abstract class AbstractDataSetFieldsWithSeriesValuePane<T extends ColumnF
@Override
protected JPanel createCenterPane() {
JPanel normalCenter = super.createCenterPane();
seriesValueFieldComboBoxPane = new SeriesValueFieldComboBoxPane();
getSeriesValueFieldComboBoxPane();
if (normalCenter != null) {
JPanel panel = new JPanel(new BorderLayout(0,6));
JPanel panel = new JPanel(new BorderLayout(0, 6));
panel.add(normalCenter, BorderLayout.NORTH);
panel.add(seriesValueFieldComboBoxPane, BorderLayout.CENTER);
return panel;
@ -34,7 +34,14 @@ public abstract class AbstractDataSetFieldsWithSeriesValuePane<T extends ColumnF
public SeriesValueFieldComboBoxPane getSeriesValueFieldComboBoxPane() {
if (seriesValueFieldComboBoxPane == null) {
seriesValueFieldComboBoxPane = new SeriesValueFieldComboBoxPane();
seriesValueFieldComboBoxPane = new SeriesValueFieldComboBoxPane() {
protected boolean seriesComboBoxHasNone() {
return true;
}
};
}
return seriesValueFieldComboBoxPane;
}

13
designer-chart/src/main/java/com/fr/design/chartx/impl/AbstractDataPane.java

@ -45,12 +45,16 @@ public abstract class AbstractDataPane extends ChartDataPane {
ChartDataDefinitionProvider dataDefinition = chart.getChartDataDefinition();
singleDataPane.populateBean((AbstractDataDefinition) dataDefinition);
populate(dataDefinition);
this.initAllListeners();
this.validate();
}
protected void populate(ChartDataDefinitionProvider dataDefinition) {
singleDataPane.populateBean((AbstractDataDefinition) dataDefinition);
}
@Override
public void update(ChartCollection collection) {
@ -62,6 +66,11 @@ public abstract class AbstractDataPane extends ChartDataPane {
return;
}
chart.setChartDataDefinition(singleDataPane.updateBean());
chart.setChartDataDefinition(update());
}
protected ChartDataDefinitionProvider update() {
return singleDataPane.updateBean();
}
}

5
designer-chart/src/main/java/com/fr/design/chartx/impl/AbstractOtherPane.java

@ -3,6 +3,7 @@ package com.fr.design.chartx.impl;
import com.fr.chart.chartattr.ChartCollection;
import com.fr.chart.impl.AbstractChartWithData;
import com.fr.design.mainframe.chart.AbstractChartAttrPane;
import com.fr.design.mainframe.chart.PaneTitleConstants;
/**
* Created by shine on 2019/09/04.
@ -13,6 +14,10 @@ public abstract class AbstractOtherPane<T extends AbstractChartWithData> extends
protected abstract void update(T chart);
public String title4PopupWindow() {
return PaneTitleConstants.CHART_OTHER_TITLE;
}
@Override
public void populate(ChartCollection collection) {
if (collection == null) {

13
designer-chart/src/main/java/com/fr/design/mainframe/ChartPropertyPane.java

@ -16,6 +16,7 @@ import com.fr.design.gui.chart.ChartEditPaneProvider;
import com.fr.design.gui.frpane.UITitlePanel;
import com.fr.design.mainframe.chart.ChartEditPane;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.stable.AssistUtils;
import javax.swing.BorderFactory;
import javax.swing.Icon;
@ -35,6 +36,9 @@ public class ChartPropertyPane extends BaseChartPropertyPane {
protected ChartEditPane chartEditPane;
//ID一样的话 不用新建chartEditPane
private String currentID;
private ChartPropertyPane() {
initComponent();
}
@ -46,9 +50,12 @@ public class ChartPropertyPane extends BaseChartPropertyPane {
@Override
public void updateChartEditPane(String plotID) {
chartEditPane = ChartTypeInterfaceManager.getInstance().getChartEditPane(plotID);
chartEditPane.setContainer(container);
resetChartEditPane();
if (!AssistUtils.equals(currentID, plotID)) {
chartEditPane = ChartTypeInterfaceManager.getInstance().getChartEditPane(plotID);
chartEditPane.setContainer(container);
currentID = plotID;
resetChartEditPane();
}
}
@Override

112
designer-chart/src/main/java/com/fr/design/mainframe/MapEditPane.java

@ -1,112 +0,0 @@
package com.fr.design.mainframe;
import com.fr.chart.base.MapSvgAttr;
import com.fr.chart.base.MapSvgXMLHelper;
import com.fr.chart.chartglyph.MapShapeValue;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.chart.series.PlotSeries.AbstrctMapAttrEditPane;
import com.fr.design.chart.series.PlotSeries.MapCustomPane;
import com.fr.design.chart.series.PlotSeries.MapDefiAreaNamePane;
import com.fr.design.gui.frpane.UITabbedPane;
import com.fr.stable.CoreConstants;
import com.fr.stable.StringUtils;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;
/**
* Created by IntelliJ IDEA.
* Author : daisy
* Version: 7.1.1
* Date: 14/12/2
* Time: 下午7:17
*/
public class MapEditPane extends BasicBeanPane<MapSvgAttr>{
private UITabbedPane tabbedPane;
private MapCustomPane areaPane ;
// private MapCustomPane pointPane;
private MapDefiAreaNamePane namedPane;
private String currentMapName;
private AbstrctMapAttrEditPane editingPane;
private ChangeListener tabbedChangeListener = new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
switch ( tabbedPane.getSelectedIndex()){
case 1:
namedPane.populateMapAttr(editingPane.updateCurrentAttr());
editingPane = namedPane;
break;
default:
areaPane.populateMapAttr(editingPane.updateCurrentAttr());
editingPane = areaPane;
}
}
} ;
public MapEditPane(){
initTabbedPane();
this.setLayout(new BorderLayout());
this.add(tabbedPane,BorderLayout.CENTER);
}
private void initTabbedPane(){
tabbedPane = new UITabbedPane();
areaPane = new MapCustomPane(false);
// pointPane = new MapCustomPane(false);
namedPane= new MapDefiAreaNamePane(false);
areaPane.setImageSelectType(MapShapeValue.AREA);
// pointPane.setImageSelectType(MapShapeValue.POINT);
tabbedPane.add(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Map_Image_Area"),areaPane);
// tabbedPane.add(com.fr.design.i18n.Toolkit.i18nText("FR-Chart-Map_ImagePoint"),pointPane);
tabbedPane.add(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Map_Corresponding_Fields"),namedPane);
editingPane = areaPane;
}
@Override
protected String title4PopupWindow() {
return null;
}
@Override
public void populateBean(MapSvgAttr ob) {
if(!StringUtils.isEmpty(ob.getName()) && !MapSvgXMLHelper.getInstance().containsMapName(ob.getName())){
MapSvgAttr mapSvgAttr = new MapSvgAttr();
mapSvgAttr.setFilePath(MapSvgXMLHelper.customMapPath()+ CoreConstants.SEPARATOR+ob.getName()+".svg");
MapSvgXMLHelper.getInstance().addNewSvgMaps(ob.getName(), mapSvgAttr);
}
currentMapName = ob.getName();
if(editingPane == null){
editingPane = areaPane;
}
editingPane.populateMapAttr(ob);
tabbedPane.addChangeListener(tabbedChangeListener);
}
public String getCurrentMapName(){
return currentMapName;
}
public void setCurrentMapName(String currentMapName){
this.currentMapName = currentMapName;
}
@Override
public MapSvgAttr updateBean() {
MapSvgAttr currentAttr = editingPane.updateCurrentAttr();
currentMapName =currentAttr != null ? currentAttr.getName() : currentMapName;
MapSvgAttr attr = MapSvgXMLHelper.getInstance().getMapAttr(currentMapName);
if(attr != null ){
MapSvgXMLHelper.getInstance().removeNewMapAttr(currentMapName);
MapSvgXMLHelper.getInstance().pushMapAttr(currentMapName,currentAttr);
return currentAttr;
}else{
return MapSvgXMLHelper.getInstance().getNewMapAttr(currentMapName);
}
}
}

53
designer-chart/src/main/java/com/fr/design/mainframe/chart/ChartEditPane.java

@ -9,6 +9,7 @@ import com.fr.design.beans.FurtherBasicBeanPane;
import com.fr.design.data.DesignTableDataManager;
import com.fr.design.data.tabledata.Prepare4DataSourceChange;
import com.fr.design.dialog.BasicPane;
import com.fr.design.gui.chart.ChartEditPaneActionListener;
import com.fr.design.gui.chart.ChartEditPaneProvider;
import com.fr.design.gui.frpane.AttributeChangeListener;
import com.fr.design.gui.ibutton.UIHeadGroup;
@ -19,6 +20,7 @@ import com.fr.design.mainframe.chart.gui.ChartDataPane;
import com.fr.design.mainframe.chart.gui.ChartOtherPane;
import com.fr.design.mainframe.chart.gui.ChartStylePane;
import com.fr.design.mainframe.chart.gui.ChartTypePane;
import com.fr.design.mainframe.chart.gui.type.AbstractChartTypePane;
import com.fr.design.mainframe.chart.info.ChartInfoCollector;
import com.fr.form.main.Form;
import com.fr.general.ComparatorUtils;
@ -28,11 +30,11 @@ import com.fr.plugin.chart.vanchart.VanChart;
import javax.swing.JPanel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.awt.BorderLayout;
import java.awt.CardLayout;
public class ChartEditPane extends BasicPane implements AttributeChange, Prepare4DataSourceChange, ChartEditPaneProvider {
@ -102,6 +104,33 @@ public class ChartEditPane extends BasicPane implements AttributeChange, Prepare
this.add(center, BorderLayout.CENTER);
}
/**
* 增加面板Listener
*/
public void addChartEditPaneActionListener(ChartEditPaneActionListener l) {
this.listenerList.add(ChartEditPaneActionListener.class, l);
}
/**
* 移除面板Listener
*/
public void removeChartEditPaneActionListener(ChartEditPaneActionListener l) {
this.listenerList.remove(ChartEditPaneActionListener.class, l);
}
private void fireAttributeChange(ChartCollection chartCollection) {
// Guaranteed to return a non-null array
Object[] listeners = listenerList.getListenerList();
// Process the listeners last to first, notifying
// those that are interested in this event
for (int i = listeners.length - 1; i >= 0; i -= 1) {
if (listeners[i] == ChartEditPaneActionListener.class) {
((ChartEditPaneActionListener) listeners[i + 1]).attributeChange(chartCollection);
}
}
}
AttributeChangeListener listener = new AttributeChangeListener() {
@Override
public void attributeChange() {
@ -131,6 +160,7 @@ public class ChartEditPane extends BasicPane implements AttributeChange, Prepare
}
fire();
fireAttributeChange(collection);
}
}
};
@ -147,13 +177,13 @@ public class ChartEditPane extends BasicPane implements AttributeChange, Prepare
*/
public void reLayout(ChartProvider currentChart) {
if (currentChart != null) {
int chartIndex = getSelectedChartIndex(currentChart);
this.removeAll();
this.setLayout(new BorderLayout());
paneList = new ArrayList<AbstractChartAttrPane>();
addTypePane();
String chartID = currentChart.getID();
addTypePane(currentChart);
boolean isDefault = ChartTypeInterfaceManager.getInstance().isUseDefaultPane(chartID);
if (isDefault) {
@ -187,8 +217,17 @@ public class ChartEditPane extends BasicPane implements AttributeChange, Prepare
return chartDataPane;
}
protected void addTypePane() {
paneList.add(typePane);
protected void addTypePane(ChartProvider chart) {
if (visibleTypePane(chart)) {
paneList.add(typePane);
}
}
private boolean visibleTypePane(ChartProvider chart) {
AbstractChartTypePane pane = ChartTypeInterfaceManager.getInstance().getPlotTypePane(chart.getID());
return pane != null
&& !ChartTypeInterfaceManager.TYPE_PANE_DEFAULT_TITLE.equals(pane.title4PopupWindow())
&& pane.visible(chart);
}
protected void setSelectedTab() {

3
designer-chart/src/main/java/com/fr/design/mainframe/chart/ChartHyperEditPane.java

@ -2,6 +2,7 @@ package com.fr.design.mainframe.chart;
import com.fr.chart.chartattr.ChartCollection;
import com.fr.chart.web.ChartHyperPoplink;
import com.fr.chartx.attr.ChartProvider;
import com.fr.design.ChartTypeInterfaceManager;
import com.fr.design.chart.gui.ChartComponent;
import com.fr.design.chart.series.SeriesCondition.impl.ChartHyperPopAttrPane;
@ -48,7 +49,7 @@ public class ChartHyperEditPane extends ChartEditPane {
return dataPane;
}
protected void addTypePane() {
protected void addTypePane(ChartProvider chart) {
paneList.add(attrPane);
paneList.add(typePane);
}

8
designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java

@ -27,9 +27,6 @@ import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
@ -46,6 +43,9 @@ import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
/**
* 图表 类型 增删 控制按钮界面.
@ -252,7 +252,7 @@ public class ChartTypeButtonPane extends BasicBeanPane<ChartCollection> implemen
public ChartProvider getChangeStateNewChart() {
ChartProvider chart = editingCollection.getSelectedChartProvider(ChartProvider.class);
String chartID = chart.getID();
String priority = ChartTypeManager.getInstanceWithCheck().getPriority(chartID);
int priority = ChartTypeManager.getInstanceWithCheck().getPriority(chartID);
ChartProvider firstChart = ChartTypeManager.getInstanceWithCheck().getFirstChart(priority);
try {
return (ChartProvider) firstChart.clone();

70
designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/ChartTypePane.java

@ -17,23 +17,25 @@ import com.fr.design.mainframe.chart.PaneTitleConstants;
import com.fr.design.mainframe.chart.gui.item.FlexibleComboBox;
import com.fr.design.mainframe.chart.gui.item.ItemEventType;
import com.fr.design.mainframe.chart.gui.type.AbstractChartTypePane;
import com.fr.design.mainframe.chart.mode.ChartEditContext;
import com.fr.design.module.DesignModuleFactory;
import com.fr.general.ComparatorUtils;
import com.fr.log.FineLoggerFactory;
import com.fr.stable.AssistUtils;
import com.fr.stable.StringUtils;
import javax.swing.JPanel;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* 图表 属性表, 类型选择 界面.
@ -61,7 +63,14 @@ public class ChartTypePane extends AbstractChartAttrPane {
if (editingCollection != null) {
relayoutChartTypePane(editingCollection);
} else {
chartTypeComBox = new ComboBoxPane();
chartTypeComBox = new ComboBoxPane() {
@Override
protected void initLayout() {
super.initLayout();
jcb.setVisible(ChartEditContext.normalMode());
}
};
}
BasicScrollPane scrollPane = new BasicScrollPane() {
@ -140,14 +149,45 @@ public class ChartTypePane extends AbstractChartAttrPane {
}
}
/**
* 把所有的pane加到list里
*
* @param paneList pane容器
*/
private static void addPlotTypePaneList(List<FurtherBasicBeanPane<? extends ChartProvider>> paneList,
Map<Integer, Map<String, FurtherBasicBeanPane<? extends ChartProvider>>> allChartTypePane,
ActionListener autoButtonListener) {
String[] chartIDs = ChartTypeManager.getInstance().getAllChartIDs();
for (String id : chartIDs) {
AbstractChartTypePane pane = ChartTypeInterfaceManager.getInstance().getPlotTypePane(id);
if (pane == null || AssistUtils.equals(pane.title4PopupWindow(), ChartTypeInterfaceManager.TYPE_PANE_DEFAULT_TITLE)) {
continue;
}
pane.reLayout(id);
pane.registerButtonListener(autoButtonListener);
paneList.add(pane);
Integer priority = ChartTypeManager.getInstance().getPriority(id);
if (allChartTypePane.get(priority) == null) {
allChartTypePane.put(priority, new LinkedHashMap<String, FurtherBasicBeanPane<? extends ChartProvider>>());
}
allChartTypePane.get(priority).put(id, pane);
}
}
class ComboBoxPane extends UIComboBoxPane<ChartProvider> {
private Map<String, Map<String, FurtherBasicBeanPane<? extends ChartProvider>>> allChartTypePane;
//todo:refactor 图表切换过滤不应该根据优先级priority,应该给旧版本图表和新特性图表的图表类型信息分别增加一个switchID之类的
private Map<Integer, Map<String, FurtherBasicBeanPane<? extends ChartProvider>>> allChartTypePane;
@Override
protected List<FurtherBasicBeanPane<? extends ChartProvider>> initPaneList() {
List<FurtherBasicBeanPane<? extends ChartProvider>> paneList = new ArrayList<FurtherBasicBeanPane<? extends ChartProvider>>();
allChartTypePane = new LinkedHashMap<String, Map<String, FurtherBasicBeanPane<? extends ChartProvider>>>();
ChartTypeInterfaceManager.getInstance().addPlotTypePaneList(paneList, allChartTypePane, autoButtonListener);
allChartTypePane = new LinkedHashMap<Integer, Map<String, FurtherBasicBeanPane<? extends ChartProvider>>>();
addPlotTypePaneList(paneList, allChartTypePane, autoButtonListener);
return paneList;
}
@ -209,18 +249,18 @@ public class ChartTypePane extends AbstractChartAttrPane {
}
private void addAllCards() {
Iterator<String> iterator = allChartTypePane.keySet().iterator();
Iterator<Integer> iterator = allChartTypePane.keySet().iterator();
while (iterator.hasNext()) {
addOnePriorityCards(iterator.next(), false);
}
}
private void addOnePriorityCards(String priority) {
private void addOnePriorityCards(int priority) {
addOnePriorityCards(priority, true);
}
private void addOnePriorityCards(String priority, boolean ignore) {
private void addOnePriorityCards(int priority, boolean ignore) {
Map<String, FurtherBasicBeanPane<? extends ChartProvider>> map = allChartTypePane.get(priority);
@ -236,7 +276,7 @@ public class ChartTypePane extends AbstractChartAttrPane {
}
private void addOnePlotIDCards(String priority, String plotID) {
private void addOnePlotIDCards(int priority, String plotID) {
cards.add(allChartTypePane.get(priority).get(plotID));
}
@ -246,7 +286,7 @@ public class ChartTypePane extends AbstractChartAttrPane {
//重构需要重构下拉框选项和cardNames
ChartProvider chart = collection.getSelectedChartProvider(ChartProvider.class);
String chartID = chart.getID();
String priority = ChartTypeManager.getInstanceWithCheck().getPriority(chartID);
int priority = ChartTypeManager.getInstanceWithCheck().getPriority(chartID);
boolean enabledChart = ChartTypeManager.enabledChart(chartID);
String item = ChartTypeInterfaceManager.getInstance().getName(chartID);
@ -360,7 +400,7 @@ public class ChartTypePane extends AbstractChartAttrPane {
buttonPane.populateBean(collection);
chartTypeComBox.populateBean(chart);
buttonPane.setVisible(ChartTypeInterfaceManager.getInstance().needChartChangePane(chart));
buttonPane.setVisible(ChartTypeInterfaceManager.getInstance().needChartChangePane(chart) && ChartEditContext.normalMode());
this.initAllListeners();
}

9
designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/data/NormalChartDataPane.java

@ -7,16 +7,17 @@ import com.fr.design.gui.frpane.AttributeChangeListener;
import com.fr.design.gui.frpane.UIComboBoxPane;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.mainframe.chart.gui.ChartDataPane;
import com.fr.design.mainframe.chart.mode.ChartEditContext;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.van.chart.designer.AbstractVanChartScrollPane;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
import java.util.ArrayList;
import java.util.List;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.util.ArrayList;
import java.util.List;
/**
* 一般数据界面
@ -67,7 +68,9 @@ public class NormalChartDataPane extends DataContentsPane {
label1.setPreferredSize(new Dimension(ChartDataPane.LABEL_WIDTH,ChartDataPane.LABEL_HEIGHT));
northPane.add(GUICoreUtils.createBorderLayoutPane(new Component[]{jcb, null, null, label1, null}));
northPane.setBorder(BorderFactory.createEmptyBorder(0,5,0,8));
this.add(northPane, BorderLayout.NORTH);
if (ChartEditContext.normalMode()) {
this.add(northPane, BorderLayout.NORTH);
}
this.add(cardPane, BorderLayout.CENTER);
}

4
designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/AbstractChartTypePane.java

@ -217,6 +217,10 @@ public abstract class AbstractChartTypePane<T extends ChartProvider> extends Fur
return plotID;
}
public boolean visible(ChartProvider chart) {
return true;
}
/**
* @param ob 对象
* @return

26
designer-chart/src/main/java/com/fr/design/mainframe/chart/mode/ChartEditContext.java

@ -0,0 +1,26 @@
package com.fr.design.mainframe.chart.mode;
import com.fr.common.annotations.Open;
/**
* @author shine
* @version 10.0
* Created by shine on 2021/6/4
*/
@Open
public class ChartEditContext {
private static ChartEditMode current = ChartEditMode.NORMAL;
public static void switchTo(ChartEditMode mode) {
current = mode;
}
public static boolean duchampMode() {
return current == ChartEditMode.DUCHAMP;
}
public static boolean normalMode() {
return current == ChartEditMode.NORMAL;
}
}

12
designer-chart/src/main/java/com/fr/design/mainframe/chart/mode/ChartEditMode.java

@ -0,0 +1,12 @@
package com.fr.design.mainframe.chart.mode;
/**
* @author shine
* @version 10.0
* Created by shine on 2021/6/4
*/
//todo:refactor 弹出框图表没有单元格数据源,就不用一层层传下去了
public enum ChartEditMode {
NORMAL,
DUCHAMP
}

5
designer-chart/src/main/java/com/fr/design/module/ChartHyperlinkGroup.java

@ -3,6 +3,7 @@ package com.fr.design.module;
import com.fr.chart.web.ChartHyperPoplink;
import com.fr.chart.web.ChartHyperRelateCellLink;
import com.fr.chart.web.ChartHyperRelateFloatLink;
import com.fr.design.base.mode.DesignModeContext;
import com.fr.design.chart.series.SeriesCondition.impl.ChartHyperPoplinkPane;
import com.fr.design.chart.series.SeriesCondition.impl.ChartHyperRelateCellLinkPane;
import com.fr.design.chart.series.SeriesCondition.impl.ChartHyperRelateFloatLinkPane;
@ -58,7 +59,7 @@ public class ChartHyperlinkGroup extends BaseHyperlinkGroup {
return false;
}
if (template.isJWorkBook()) {
if (template.isJWorkBook() || DesignModeContext.isDuchampMode()) {
// 如果是普通报表单元格,那么没有 FormHyperlink 选项
FormHyperlinkProvider formHyperlink = StableFactory.getMarkedInstanceObjectFromClass(FormHyperlinkProvider.XML_TAG, FormHyperlinkProvider.class);
//返回true表示可用,返回false表示不可用
@ -93,7 +94,7 @@ public class ChartHyperlinkGroup extends BaseHyperlinkGroup {
if (template == null) {
return false;
}
if (template.isJWorkBook()) {
if (template.isJWorkBook() || DesignModeContext.isDuchampMode()) {
// 如果是普通报表单元格,那么没有 FormHyperlink 选项
FormHyperlinkProvider formHyperlink = StableFactory.getMarkedInstanceObjectFromClass(FormHyperlinkProvider.XML_TAG, FormHyperlinkProvider.class);
//返回true表示可用,返回false表示不可用

4
designer-chart/src/main/java/com/fr/extended/chart/AbstractExtendedChartUIProvider.java

@ -14,10 +14,14 @@ import com.fr.design.mainframe.chart.gui.data.report.AbstractReportDataContentPa
import com.fr.design.mainframe.chart.gui.data.table.AbstractTableDataContentPane;
import com.fr.design.mainframe.chart.gui.type.AbstractChartTypePane;
import com.fr.stable.fun.impl.AbstractProvider;
import com.fr.stable.fun.mark.API;
import static com.fr.design.chart.fun.ChartTypeUIProvider.CURRENT_API_LEVEL;
/**
* Created by shine on 2018/3/2.
*/
@API(level = CURRENT_API_LEVEL)
public abstract class AbstractExtendedChartUIProvider extends AbstractProvider implements ChartTypeUIProvider {
protected abstract AbstractExtendedChartTableDataPane getTableDataSourcePane();

4
designer-chart/src/main/java/com/fr/van/chart/area/AreaIndependentVanChartInterface.java

@ -2,10 +2,12 @@ package com.fr.van.chart.area;
import com.fr.chart.chartattr.Plot;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.chart.fun.impl.InvisibleChartTypePane;
import com.fr.design.condition.ConditionAttributesPane;
import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.chart.gui.ChartStylePane;
import com.fr.design.mainframe.chart.gui.type.AbstractChartTypePane;
import com.fr.design.mainframe.chart.mode.ChartEditContext;
import com.fr.van.chart.vanchart.AbstractMultiCategoryVanChartUI;
/**
@ -47,7 +49,7 @@ public class AreaIndependentVanChartInterface extends AbstractMultiCategoryVanCh
@Override
public AbstractChartTypePane getPlotTypePane() {
return new VanChartAreaPlotPane();
return ChartEditContext.duchampMode() ? new InvisibleChartTypePane() : new VanChartAreaPlotPane();
}
public ConditionAttributesPane getPlotConditionPane(Plot plot){

4
designer-chart/src/main/java/com/fr/van/chart/bar/BarIndependentVanChartInterface.java

@ -3,12 +3,14 @@ package com.fr.van.chart.bar;
import com.fr.chart.chartattr.Chart;
import com.fr.chart.chartattr.Plot;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.chart.fun.impl.InvisibleChartTypePane;
import com.fr.design.condition.ConditionAttributesPane;
import com.fr.design.gui.frpane.AttributeChangeListener;
import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.chart.AbstractChartAttrPane;
import com.fr.design.mainframe.chart.gui.ChartStylePane;
import com.fr.design.mainframe.chart.gui.type.AbstractChartTypePane;
import com.fr.design.mainframe.chart.mode.ChartEditContext;
import com.fr.van.chart.column.VanChartColumnConditionPane;
import com.fr.van.chart.column.VanChartColumnSeriesPane;
import com.fr.van.chart.designer.other.VanChartInteractivePane;
@ -57,7 +59,7 @@ public class BarIndependentVanChartInterface extends AbstractMultiCategoryVanCha
@Override
public AbstractChartTypePane getPlotTypePane() {
return new VanChartBarPlotPane();
return ChartEditContext.duchampMode() ? new InvisibleChartTypePane() : new VanChartBarPlotPane();
}
public ConditionAttributesPane getPlotConditionPane(Plot plot) {

4
designer-chart/src/main/java/com/fr/van/chart/box/BoxIndependentVanChartInterface.java

@ -3,6 +3,7 @@ package com.fr.van.chart.box;
import com.fr.chart.chartattr.Chart;
import com.fr.chart.chartattr.Plot;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.chart.fun.impl.InvisibleChartTypePane;
import com.fr.design.condition.ConditionAttributesPane;
import com.fr.design.gui.frpane.AttributeChangeListener;
import com.fr.design.i18n.Toolkit;
@ -12,6 +13,7 @@ import com.fr.design.mainframe.chart.gui.ChartStylePane;
import com.fr.design.mainframe.chart.gui.data.report.AbstractReportDataContentPane;
import com.fr.design.mainframe.chart.gui.data.table.AbstractTableDataContentPane;
import com.fr.design.mainframe.chart.gui.type.AbstractChartTypePane;
import com.fr.design.mainframe.chart.mode.ChartEditContext;
import com.fr.plugin.chart.attr.plot.VanChartPlot;
import com.fr.van.chart.box.data.report.BoxPlotReportDataContentPane;
import com.fr.van.chart.box.data.table.BoxPlotTableDataContentPane;
@ -56,7 +58,7 @@ public class BoxIndependentVanChartInterface extends AbstractIndependentVanChart
}
public AbstractChartTypePane getPlotTypePane() {
return new VanChartBoxPlotPane();
return ChartEditContext.duchampMode() ? new InvisibleChartTypePane() : new VanChartBoxPlotPane();
}
public ConditionAttributesPane getPlotConditionPane(Plot plot) {

4
designer-chart/src/main/java/com/fr/van/chart/bubble/BubbleIndependentVanChartInterface.java

@ -3,6 +3,7 @@ package com.fr.van.chart.bubble;
import com.fr.chart.chartattr.Chart;
import com.fr.chart.chartattr.Plot;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.chart.fun.impl.InvisibleChartTypePane;
import com.fr.design.condition.ConditionAttributesPane;
import com.fr.design.gui.frpane.AttributeChangeListener;
import com.fr.design.i18n.Toolkit;
@ -13,6 +14,7 @@ import com.fr.design.mainframe.chart.gui.data.report.AbstractReportDataContentPa
import com.fr.design.mainframe.chart.gui.data.report.BubblePlotReportDataContentPane;
import com.fr.design.mainframe.chart.gui.data.table.AbstractTableDataContentPane;
import com.fr.design.mainframe.chart.gui.type.AbstractChartTypePane;
import com.fr.design.mainframe.chart.mode.ChartEditContext;
import com.fr.plugin.chart.base.VanChartConstants;
import com.fr.plugin.chart.bubble.VanChartBubblePlot;
import com.fr.van.chart.bubble.data.VanChartBubblePlotTableDataContentPane;
@ -54,7 +56,7 @@ public class BubbleIndependentVanChartInterface extends AbstractIndependentVanCh
*/
@Override
public AbstractChartTypePane getPlotTypePane() {
return new VanChartBubblePlotPane();
return ChartEditContext.duchampMode() ? new InvisibleChartTypePane() : new VanChartBubblePlotPane();
}
/**

4
designer-chart/src/main/java/com/fr/van/chart/column/VanColumnChartTypeUI.java

@ -2,10 +2,12 @@ package com.fr.van.chart.column;
import com.fr.chart.chartattr.Plot;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.chart.fun.impl.InvisibleChartTypePane;
import com.fr.design.condition.ConditionAttributesPane;
import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.chart.gui.ChartStylePane;
import com.fr.design.mainframe.chart.gui.type.AbstractChartTypePane;
import com.fr.design.mainframe.chart.mode.ChartEditContext;
import com.fr.van.chart.vanchart.AbstractMultiCategoryVanChartUI;
/**
@ -48,7 +50,7 @@ public class VanColumnChartTypeUI extends AbstractMultiCategoryVanChartUI {
@Override
public AbstractChartTypePane getPlotTypePane() {
return new VanChartColumnPlotPane();
return ChartEditContext.duchampMode() ? new InvisibleChartTypePane() : new VanChartColumnPlotPane();
}

4
designer-chart/src/main/java/com/fr/van/chart/custom/VanChartCustomDataPane.java

@ -60,7 +60,9 @@ public class VanChartCustomDataPane extends ChartDataPane {
*/
public void addAttributeChangeListener(AttributeChangeListener listener) {
super.addAttributeChangeListener(listener);
contentsTabPane.addAttributeChangeListener(listener);
if (contentsTabPane != null) {
contentsTabPane.addAttributeChangeListener(listener);
}
}
@Override

28
designer-chart/src/main/java/com/fr/van/chart/custom/VanChartCustomPlotPane.java

@ -3,15 +3,19 @@ package com.fr.van.chart.custom;
import com.fr.base.chart.chartdata.TopDefinitionProvider;
import com.fr.chart.base.DataSeriesCondition;
import com.fr.chart.chartattr.Chart;
import com.fr.chart.chartattr.ChartCollection;
import com.fr.chart.chartattr.Plot;
import com.fr.chart.chartglyph.ConditionAttr;
import com.fr.chart.chartglyph.ConditionCollection;
import com.fr.chartx.attr.ChartProvider;
import com.fr.chartx.data.AbstractDataDefinition;
import com.fr.chartx.data.ChartDataDefinitionProvider;
import com.fr.chartx.data.CustomChartDataDefinition;
import com.fr.design.ChartTypeInterfaceManager;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
import com.fr.design.mainframe.chart.gui.type.ChartImagePane;
import com.fr.design.mainframe.chart.mode.ChartEditContext;
import com.fr.log.FineLoggerFactory;
import com.fr.plugin.chart.attr.plot.VanChartPlot;
import com.fr.plugin.chart.base.VanChartAttrLine;
@ -28,12 +32,12 @@ import com.fr.van.chart.designer.type.AbstractVanChartTypePane;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.awt.CardLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* Created by Mitisky on 16/2/16.
@ -54,11 +58,27 @@ public class VanChartCustomPlotPane extends AbstractVanChartTypePane {
//自定义和自动版面的容器,cardLayOut布局
private JPanel contentPane;
@Override
public boolean visible(ChartProvider chart) {
if (ChartEditContext.duchampMode() && chart instanceof VanChart) {
Plot plot = ((VanChart) chart).getPlot();
if (plot instanceof VanChartCustomPlot) {
CustomStyle customStyle = ((VanChartCustomPlot) plot).getCustomStyle();
return customStyle == CustomStyle.CUSTOM;
}
}
return super.visible(chart);
}
protected Component[][] getPaneComponents(JPanel typePane) {
initContent();
return new Component[][]{
return ChartEditContext.duchampMode() ? new Component[][]{
new Component[]{contentPane},
new Component[]{buttonPane},
}: new Component[][]{
new Component[]{typePane},
new Component[]{stylePane},
new Component[]{contentPane},

4
designer-chart/src/main/java/com/fr/van/chart/custom/other/VanChartCustomInteractivePane.java

@ -1,7 +1,6 @@
package com.fr.van.chart.custom.other;
import com.fr.chart.chartattr.Plot;
import com.fr.plugin.chart.attr.plot.VanChartPlot;
import com.fr.plugin.chart.custom.VanChartCustomPlot;
import com.fr.plugin.chart.custom.type.CustomStyle;
@ -37,6 +36,9 @@ public class VanChartCustomInteractivePane extends VanChartInteractivePane {
@Override
protected void populateHyperlink(Plot plot) {
if (hyperlinkPane == null) {
return;
}
hyperlinkPane.populateBean(chart);
}

15
designer-chart/src/main/java/com/fr/van/chart/designer/other/VanChartInteractivePane.java

@ -20,6 +20,7 @@ import com.fr.design.gui.ispinner.UnsignedIntUISpinner;
import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
import com.fr.design.mainframe.chart.mode.ChartEditContext;
import com.fr.design.widget.FRWidgetFactory;
import com.fr.plugin.chart.attr.axis.VanChartAxis;
import com.fr.plugin.chart.attr.plot.VanChartPlot;
@ -132,7 +133,7 @@ public class VanChartInteractivePane extends AbstractVanChartScrollPane<Chart> {
double[] rowSize = {p, p, p, p, p, p, p};
Component[][] components = new Component[][]{
Component[][] components = ChartEditContext.normalMode() ? new Component[][]{
new Component[]{createToolBarPane(getToolBarRowSize(), columnSize), null},
//大数据模式 恢复用注释。取消注释。
//new Component[]{createLargeDataModePane(), null},
@ -141,6 +142,11 @@ public class VanChartInteractivePane extends AbstractVanChartScrollPane<Chart> {
new Component[]{createZoomPane(plot), null},
new Component[]{createAutoRefreshPane(plot), null},
new Component[]{createHyperlinkPane(), null}
} : new Component[][]{
new Component[]{createToolBarPane(getToolBarRowSize(), columnSize), null},
new Component[]{createAnimationPane(), null},
new Component[]{createAxisRotationPane(new double[]{p, p}, columnSize, plot), null},
new Component[]{createZoomPane(plot), null}
};
return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize);
@ -595,6 +601,9 @@ public class VanChartInteractivePane extends AbstractVanChartScrollPane<Chart> {
protected void populateHyperlink(Plot plot) {
if (superLink == null) {
return;
}
superLink.populate(plot);
}
@ -634,7 +643,9 @@ public class VanChartInteractivePane extends AbstractVanChartScrollPane<Chart> {
}
protected void populateAutoRefresh(VanChart chart) {
VanChartPlot plot = chart.getPlot();
if (autoRefreshPane == null) {
return;
}
RefreshMoreLabel refreshMoreLabel = chart.getRefreshMoreLabel();
if (refreshMoreLabel == null) {

8
designer-chart/src/main/java/com/fr/van/chart/drillmap/designer/other/VanChartDrillMapInteractivePane.java

@ -7,6 +7,7 @@ import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
import com.fr.design.mainframe.chart.gui.style.ChartTextAttrPane;
import com.fr.design.mainframe.chart.mode.ChartEditContext;
import com.fr.plugin.chart.attr.plot.VanChartPlot;
import com.fr.plugin.chart.drillmap.VanChartDrillMapPlot;
import com.fr.plugin.chart.vanchart.VanChart;
@ -39,13 +40,18 @@ public class VanChartDrillMapInteractivePane extends VanChartInteractivePaneWith
double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH;
double[] columnSize = {f, e};
double[] rowSize = {p, p, p, p, p, p, p, p, p, p, p};
Component[][] components = new Component[][]{
Component[][] components = ChartEditContext.normalMode() ? new Component[][]{
new Component[]{createToolBarPane(new double[]{p, p, p}, columnSize), null},
new Component[]{createAnimationPane(), null},
new Component[]{createZoomPane(plot), null},
new Component[]{createDrillToolsPane(), null},
new Component[]{createAutoRefreshPane(plot), null},
new Component[]{createHyperlinkPane(), null}
} : new Component[][]{
new Component[]{createToolBarPane(new double[]{p, p, p}, columnSize), null},
new Component[]{createAnimationPane(), null},
new Component[]{createZoomPane(plot), null},
new Component[]{createDrillToolsPane(), null}
};
return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize);

4
designer-chart/src/main/java/com/fr/van/chart/funnel/designer/FunnelIndependentVanChartInterface.java

@ -3,6 +3,7 @@ package com.fr.van.chart.funnel.designer;
import com.fr.chart.chartattr.Chart;
import com.fr.chart.chartattr.Plot;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.chart.fun.impl.InvisibleChartTypePane;
import com.fr.design.condition.ConditionAttributesPane;
import com.fr.design.gui.frpane.AttributeChangeListener;
import com.fr.design.i18n.Toolkit;
@ -13,6 +14,7 @@ import com.fr.design.mainframe.chart.gui.data.report.AbstractReportDataContentPa
import com.fr.design.mainframe.chart.gui.data.table.AbstractTableDataContentPane;
import com.fr.design.mainframe.chart.gui.data.table.PiePlotTableDataContentPane;
import com.fr.design.mainframe.chart.gui.type.AbstractChartTypePane;
import com.fr.design.mainframe.chart.mode.ChartEditContext;
import com.fr.van.chart.designer.data.OneDimensionalPlotReportDataContentPane;
import com.fr.van.chart.designer.other.VanChartInteractivePaneWithOutSort;
import com.fr.van.chart.designer.other.VanChartOtherPane;
@ -45,7 +47,7 @@ public class FunnelIndependentVanChartInterface extends AbstractIndependentVanCh
*/
@Override
public AbstractChartTypePane getPlotTypePane() {
return new VanChartFunnelTypePane();
return ChartEditContext.duchampMode() ? new InvisibleChartTypePane() : new VanChartFunnelTypePane();
}
public AbstractTableDataContentPane getTableDataSourcePane(Plot plot, ChartDataPane parent){

4
designer-chart/src/main/java/com/fr/van/chart/gantt/designer/GanttIndependentVanChartInterface.java

@ -3,6 +3,7 @@ package com.fr.van.chart.gantt.designer;
import com.fr.chart.chartattr.Chart;
import com.fr.chart.chartattr.Plot;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.chart.fun.impl.InvisibleChartTypePane;
import com.fr.design.condition.ConditionAttributesPane;
import com.fr.design.gui.frpane.AttributeChangeListener;
import com.fr.design.i18n.Toolkit;
@ -12,6 +13,7 @@ import com.fr.design.mainframe.chart.gui.ChartStylePane;
import com.fr.design.mainframe.chart.gui.data.report.AbstractReportDataContentPane;
import com.fr.design.mainframe.chart.gui.data.table.AbstractTableDataContentPane;
import com.fr.design.mainframe.chart.gui.type.AbstractChartTypePane;
import com.fr.design.mainframe.chart.mode.ChartEditContext;
import com.fr.van.chart.designer.other.VanChartOtherPane;
import com.fr.van.chart.designer.style.VanChartStylePane;
import com.fr.van.chart.gantt.designer.data.VanChartGanttDataPane;
@ -42,7 +44,7 @@ public class GanttIndependentVanChartInterface extends AbstractIndependentVanCha
@Override
public AbstractChartTypePane getPlotTypePane() {
return new VanChartGanttPlotPane();
return ChartEditContext.duchampMode() ? new InvisibleChartTypePane() : new VanChartGanttPlotPane();
}
@Override

4
designer-chart/src/main/java/com/fr/van/chart/gauge/GaugeIndependentVanChartInterface.java

@ -2,6 +2,7 @@ package com.fr.van.chart.gauge;
import com.fr.chart.chartattr.Plot;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.chart.fun.impl.InvisibleChartTypePane;
import com.fr.design.gui.frpane.AttributeChangeListener;
import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.chart.AbstractChartAttrPane;
@ -14,6 +15,7 @@ import com.fr.design.mainframe.chart.gui.data.table.AbstractTableDataContentPane
import com.fr.design.mainframe.chart.gui.data.table.CategoryPlotTableDataContentPane;
import com.fr.design.mainframe.chart.gui.data.table.MeterPlotTableDataContentPane;
import com.fr.design.mainframe.chart.gui.type.AbstractChartTypePane;
import com.fr.design.mainframe.chart.mode.ChartEditContext;
import com.fr.plugin.chart.gauge.VanChartGaugePlot;
import com.fr.van.chart.custom.component.CategoryCustomPlotTableDataContentPane;
import com.fr.van.chart.custom.component.MeterCustomPlotReportDataContentPane;
@ -61,7 +63,7 @@ public class GaugeIndependentVanChartInterface extends AbstractIndependentVanCha
@Override
public AbstractChartTypePane getPlotTypePane() {
return new VanChartGaugePlotPane();
return ChartEditContext.duchampMode() ? new InvisibleChartTypePane() : new VanChartGaugePlotPane();
}
public AbstractTableDataContentPane getTableDataSourcePane(Plot plot, ChartDataPane parent) {

4
designer-chart/src/main/java/com/fr/van/chart/line/LineIndependentVanChartInterface.java

@ -2,10 +2,12 @@ package com.fr.van.chart.line;
import com.fr.chart.chartattr.Plot;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.chart.fun.impl.InvisibleChartTypePane;
import com.fr.design.condition.ConditionAttributesPane;
import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.chart.gui.ChartStylePane;
import com.fr.design.mainframe.chart.gui.type.AbstractChartTypePane;
import com.fr.design.mainframe.chart.mode.ChartEditContext;
import com.fr.van.chart.vanchart.AbstractMultiCategoryVanChartUI;
/**
@ -42,7 +44,7 @@ public class LineIndependentVanChartInterface extends AbstractMultiCategoryVanCh
@Override
public AbstractChartTypePane getPlotTypePane() {
return new VanChartLinePlotPane();
return ChartEditContext.duchampMode() ? new InvisibleChartTypePane() : new VanChartLinePlotPane();
}
public ConditionAttributesPane getPlotConditionPane(Plot plot){

3
designer-chart/src/main/java/com/fr/van/chart/map/designer/other/VanChartMapInteractivePane.java

@ -27,6 +27,9 @@ public class VanChartMapInteractivePane extends VanChartInteractivePaneWithMapZo
@Override
protected void populateHyperlink(Plot plot) {
if (hyperlinkPane == null) {
return;
}
hyperlinkPane.populateBean(plot);
}

7
designer-chart/src/main/java/com/fr/van/chart/map/designer/type/VanChartMapPlotPane.java

@ -7,6 +7,7 @@ import com.fr.chartx.data.ChartDataDefinitionProvider;
import com.fr.chartx.data.MapChartDataDefinition;
import com.fr.design.mainframe.chart.gui.type.ChartImagePane;
import com.fr.design.mainframe.chart.info.ChartInfoCollector;
import com.fr.design.mainframe.chart.mode.ChartEditContext;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.log.FineLoggerFactory;
import com.fr.plugin.chart.attr.plot.VanChartPlot;
@ -21,9 +22,9 @@ import com.fr.plugin.chart.vanchart.VanChart;
import com.fr.van.chart.designer.type.AbstractVanChartTypePane;
import javax.swing.JPanel;
import java.awt.Component;
import java.util.HashSet;
import java.util.Set;
import java.awt.Component;
/**
* Created by Mitisky on 16/5/4.
@ -55,7 +56,9 @@ public class VanChartMapPlotPane extends AbstractVanChartTypePane {
} catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
}
return new Component[][]{
return ChartEditContext.duchampMode() ? new Component[][]{
new Component[]{sourceChoosePane}
} : new Component[][]{
new Component[]{typePane},
new Component[]{buttonPane},
new Component[]{sourceChoosePane}

4
designer-chart/src/main/java/com/fr/van/chart/multilayer/MultiPieIndependentVanChartInterface.java

@ -2,6 +2,7 @@ package com.fr.van.chart.multilayer;
import com.fr.chart.chartattr.Plot;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.chart.fun.impl.InvisibleChartTypePane;
import com.fr.design.condition.ConditionAttributesPane;
import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.chart.gui.ChartDataPane;
@ -9,6 +10,7 @@ import com.fr.design.mainframe.chart.gui.ChartStylePane;
import com.fr.design.mainframe.chart.gui.data.report.AbstractReportDataContentPane;
import com.fr.design.mainframe.chart.gui.data.table.AbstractTableDataContentPane;
import com.fr.design.mainframe.chart.gui.type.AbstractChartTypePane;
import com.fr.design.mainframe.chart.mode.ChartEditContext;
import com.fr.van.chart.multilayer.data.MultiPiePlotReportDataContentPane;
import com.fr.van.chart.multilayer.data.MultiPiePlotTableDataContentPane;
import com.fr.van.chart.multilayer.other.VanChartMultiPieConditionPane;
@ -21,7 +23,7 @@ import com.fr.van.chart.vanchart.AbstractIndependentVanChartUI;
public class MultiPieIndependentVanChartInterface extends AbstractIndependentVanChartUI {
@Override
public AbstractChartTypePane getPlotTypePane() {
return new VanChartMultiPiePlotPane();
return ChartEditContext.duchampMode() ? new InvisibleChartTypePane() : new VanChartMultiPiePlotPane();
}
@Override

4
designer-chart/src/main/java/com/fr/van/chart/pie/PieIndependentVanChartInterface.java

@ -2,6 +2,7 @@ package com.fr.van.chart.pie;
import com.fr.chart.chartattr.Plot;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.chart.fun.impl.InvisibleChartTypePane;
import com.fr.design.condition.ConditionAttributesPane;
import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.chart.gui.ChartDataPane;
@ -9,6 +10,7 @@ import com.fr.design.mainframe.chart.gui.ChartStylePane;
import com.fr.design.mainframe.chart.gui.data.table.AbstractTableDataContentPane;
import com.fr.design.mainframe.chart.gui.data.table.CategoryPlotTableDataContentPane;
import com.fr.design.mainframe.chart.gui.type.AbstractChartTypePane;
import com.fr.design.mainframe.chart.mode.ChartEditContext;
import com.fr.van.chart.custom.component.CategoryCustomPlotTableDataContentPane;
import com.fr.van.chart.custom.component.VanChartDataPane;
import com.fr.van.chart.vanchart.AbstractIndependentVanChartUI;
@ -50,7 +52,7 @@ public class PieIndependentVanChartInterface extends AbstractIndependentVanChart
@Override
public AbstractChartTypePane getPlotTypePane() {
return new VanChartPiePlotPane();
return ChartEditContext.duchampMode() ? new InvisibleChartTypePane() : new VanChartPiePlotPane();
}
public ConditionAttributesPane getPlotConditionPane(Plot plot){

4
designer-chart/src/main/java/com/fr/van/chart/radar/RadarIndependentVanChartInterface.java

@ -2,10 +2,12 @@ package com.fr.van.chart.radar;
import com.fr.chart.chartattr.Plot;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.chart.fun.impl.InvisibleChartTypePane;
import com.fr.design.condition.ConditionAttributesPane;
import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.chart.gui.ChartStylePane;
import com.fr.design.mainframe.chart.gui.type.AbstractChartTypePane;
import com.fr.design.mainframe.chart.mode.ChartEditContext;
import com.fr.van.chart.vanchart.AbstractIndependentVanChartUI;
/**
@ -40,7 +42,7 @@ public class RadarIndependentVanChartInterface extends AbstractIndependentVanCha
@Override
public AbstractChartTypePane getPlotTypePane() {
return new VanChartRadarPlotPane();
return ChartEditContext.duchampMode() ? new InvisibleChartTypePane() : new VanChartRadarPlotPane();
}
public BasicBeanPane<Plot> getPlotSeriesPane(ChartStylePane parent, Plot plot){

4
designer-chart/src/main/java/com/fr/van/chart/scatter/ScatterIndependentVanChartInterface.java

@ -4,6 +4,7 @@ package com.fr.van.chart.scatter;
import com.fr.chart.chartattr.Chart;
import com.fr.chart.chartattr.Plot;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.chart.fun.impl.InvisibleChartTypePane;
import com.fr.design.condition.ConditionAttributesPane;
import com.fr.design.gui.frpane.AttributeChangeListener;
import com.fr.design.i18n.Toolkit;
@ -14,6 +15,7 @@ import com.fr.design.mainframe.chart.gui.data.report.AbstractReportDataContentPa
import com.fr.design.mainframe.chart.gui.data.report.BubblePlotReportDataContentPane;
import com.fr.design.mainframe.chart.gui.data.table.AbstractTableDataContentPane;
import com.fr.design.mainframe.chart.gui.type.AbstractChartTypePane;
import com.fr.design.mainframe.chart.mode.ChartEditContext;
import com.fr.van.chart.designer.other.VanChartInteractivePaneWithOutSort;
import com.fr.van.chart.designer.other.VanChartOtherPane;
import com.fr.van.chart.designer.other.zoom.ZoomPane;
@ -33,7 +35,7 @@ public class ScatterIndependentVanChartInterface extends AbstractIndependentVanC
*/
@Override
public AbstractChartTypePane getPlotTypePane() {
return new VanChartScatterPlotPane();
return ChartEditContext.duchampMode() ? new InvisibleChartTypePane() : new VanChartScatterPlotPane();
}
@Override

4
designer-chart/src/main/java/com/fr/van/chart/structure/desinger/VanStructureChartTypeUI.java

@ -3,6 +3,7 @@ package com.fr.van.chart.structure.desinger;
import com.fr.chart.chartattr.Chart;
import com.fr.chart.chartattr.Plot;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.chart.fun.impl.InvisibleChartTypePane;
import com.fr.design.condition.ConditionAttributesPane;
import com.fr.design.gui.frpane.AttributeChangeListener;
import com.fr.design.i18n.Toolkit;
@ -12,6 +13,7 @@ import com.fr.design.mainframe.chart.gui.ChartStylePane;
import com.fr.design.mainframe.chart.gui.data.report.AbstractReportDataContentPane;
import com.fr.design.mainframe.chart.gui.data.table.AbstractTableDataContentPane;
import com.fr.design.mainframe.chart.gui.type.AbstractChartTypePane;
import com.fr.design.mainframe.chart.mode.ChartEditContext;
import com.fr.plugin.chart.base.VanChartConstants;
import com.fr.van.chart.designer.other.VanChartInteractivePaneWithOutSort;
import com.fr.van.chart.designer.other.VanChartOtherPane;
@ -31,7 +33,7 @@ import com.fr.van.chart.vanchart.AbstractIndependentVanChartUI;
public class VanStructureChartTypeUI extends AbstractIndependentVanChartUI {
@Override
public AbstractChartTypePane getPlotTypePane() {
return new VanChartStructureTypePane();
return ChartEditContext.duchampMode() ? new InvisibleChartTypePane() : new VanChartStructureTypePane();
}
@Override

4
designer-chart/src/main/java/com/fr/van/chart/treemap/TreeMapIndependentVanChartInterface.java

@ -3,11 +3,13 @@ package com.fr.van.chart.treemap;
import com.fr.chart.chartattr.Chart;
import com.fr.chart.chartattr.Plot;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.chart.fun.impl.InvisibleChartTypePane;
import com.fr.design.gui.frpane.AttributeChangeListener;
import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.chart.AbstractChartAttrPane;
import com.fr.design.mainframe.chart.gui.ChartStylePane;
import com.fr.design.mainframe.chart.gui.type.AbstractChartTypePane;
import com.fr.design.mainframe.chart.mode.ChartEditContext;
import com.fr.van.chart.designer.other.VanChartInteractivePaneWithOutSort;
import com.fr.van.chart.designer.other.VanChartOtherPane;
import com.fr.van.chart.designer.style.VanChartStylePane;
@ -20,7 +22,7 @@ import com.fr.van.chart.treemap.style.VanChartTreeMapSeriesPane;
public class TreeMapIndependentVanChartInterface extends MultiPieIndependentVanChartInterface {
@Override
public AbstractChartTypePane getPlotTypePane() {
return new VanChartTreeMapPlotPane();
return ChartEditContext.duchampMode() ? new InvisibleChartTypePane() : new VanChartTreeMapPlotPane();
}
@Override

4
designer-chart/src/main/java/com/fr/van/chart/wordcloud/designer/WordCloudIndependentVanChartInterface.java

@ -3,6 +3,7 @@ package com.fr.van.chart.wordcloud.designer;
import com.fr.chart.chartattr.Chart;
import com.fr.chart.chartattr.Plot;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.chart.fun.impl.InvisibleChartTypePane;
import com.fr.design.condition.ConditionAttributesPane;
import com.fr.design.dialog.BasicPane;
import com.fr.design.gui.frpane.AttributeChangeListener;
@ -13,6 +14,7 @@ import com.fr.design.mainframe.chart.gui.ChartStylePane;
import com.fr.design.mainframe.chart.gui.data.report.AbstractReportDataContentPane;
import com.fr.design.mainframe.chart.gui.data.table.AbstractTableDataContentPane;
import com.fr.design.mainframe.chart.gui.type.AbstractChartTypePane;
import com.fr.design.mainframe.chart.mode.ChartEditContext;
import com.fr.plugin.chart.base.VanChartConstants;
import com.fr.van.chart.designer.other.VanChartInteractivePaneWithOutSort;
import com.fr.van.chart.designer.other.VanChartOtherPane;
@ -39,7 +41,7 @@ public class WordCloudIndependentVanChartInterface extends AbstractIndependentVa
*/
@Override
public AbstractChartTypePane getPlotTypePane() {
return new VanChartWordCloudTypePane();
return ChartEditContext.duchampMode() ? new InvisibleChartTypePane() : new VanChartWordCloudTypePane();
}
@Override

5
designer-form/src/main/java/com/fr/design/designer/beans/models/SelectionModel.java

@ -85,13 +85,14 @@ public class SelectionModel {
if (e.getButton() == MouseEvent.BUTTON3 || (!InputEventBaseOnOS.isControlDown(e) && !e.isShiftDown())) {
// 如果Ctrl或者Shift键盘没有按下,则清除已经选择的组件
XCreator selectXCreator = selection.getSelectedCreator();
if (selectXCreator != null && comp != null) {
boolean clickOnce = e.getClickCount() == 1;
boolean hasCom = selectXCreator != null && comp != null;
if (clickOnce && hasCom) {
if (StringUtils.equals(selectXCreator.toData().getWidgetName(), comp.toData().getWidgetName())) {
return;
}
}
selection.reset();
} else {
//按下Ctrl或者shift键时鼠标可以进行多选,两次点击同一控件就取消选中
XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer(comp).getTopLayout();

15
designer-realize/src/main/java/com/fr/design/actions/utils/DeprecatedActionManager.java

@ -7,24 +7,27 @@ import com.fr.base.present.FormulaPresent;
import com.fr.design.ExtraDesignClassManager;
import com.fr.design.actions.UpdateAction;
import com.fr.design.actions.cell.NewPresentAction;
import com.fr.design.actions.core.ActionFactory;
import com.fr.design.actions.edit.clear.*;
import com.fr.design.actions.columnrow.DeleteColumnAction;
import com.fr.design.actions.columnrow.DeleteRowAction;
import com.fr.design.actions.columnrow.InsertColumnAction;
import com.fr.design.actions.columnrow.InsertRowAction;
import com.fr.design.actions.core.ActionFactory;
import com.fr.design.actions.edit.clear.ClearAction;
import com.fr.design.actions.edit.clear.ClearAllAction;
import com.fr.design.actions.edit.clear.ClearContentsAction;
import com.fr.design.actions.edit.clear.ClearFormatsAction;
import com.fr.design.actions.edit.clear.ClearWidgetAction;
import com.fr.design.file.HistoryTemplateListPane;
import com.fr.design.fun.PresentKindProvider;
import com.fr.design.gui.imenu.UIMenu;
import com.fr.design.mainframe.ElementCasePane;
import com.fr.design.mainframe.JTemplate;
import com.fr.design.menu.KeySetUtils;
import com.fr.design.menu.MenuDef;
import com.fr.design.mainframe.ElementCasePane;
import com.fr.grid.selection.CellSelection;
import com.fr.grid.selection.Selection;
import com.fr.design.selection.SelectionEvent;
import com.fr.design.selection.SelectionListener;
import com.fr.grid.selection.CellSelection;
import com.fr.grid.selection.Selection;
import com.fr.report.cell.cellattr.BarcodePresent;
import com.fr.report.cell.cellattr.CurrencyLinePresent;

203
designer-realize/src/main/java/com/fr/design/cell/clipboard/CellElementsClip.java

@ -3,6 +3,7 @@
*/
package com.fr.design.cell.clipboard;
import com.fr.design.base.clipboard.ClipboardHelper;
import com.fr.grid.selection.CellSelection;
import com.fr.log.FineLoggerFactory;
import com.fr.report.cell.CellElement;
@ -12,8 +13,10 @@ import com.fr.report.elementcase.TemplateElementCase;
import com.fr.stable.StringUtils;
import com.fr.stable.unit.FU;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
/**
* The clip of CellElement.
@ -21,16 +24,16 @@ import java.util.Iterator;
public class CellElementsClip implements Cloneable, java.io.Serializable {
private int columnSpan = 0;
private int rowSpan = 0;
private FU[] columnWidth;
private FU[] rowHeight;
private FU[] columnWidth;
private FU[] rowHeight;
private TemplateCellElement[] clips;
public CellElementsClip(int columnSpan, int rowSpan, FU[] columnWidth , FU[] rowHeight, TemplateCellElement[] clips) {
this.columnSpan = columnSpan;
this.rowSpan = rowSpan;
this.columnWidth = columnWidth ;
this.rowHeight = rowHeight;
this.clips = clips;
public CellElementsClip(int columnSpan, int rowSpan, FU[] columnWidth, FU[] rowHeight, TemplateCellElement[] clips) {
this.columnSpan = columnSpan;
this.rowSpan = rowSpan;
this.columnWidth = columnWidth;
this.rowHeight = rowHeight;
this.clips = clips;
}
public CellElementsClip(int columnSpan, int rowSpan, TemplateCellElement[] clips) {
@ -39,122 +42,116 @@ public class CellElementsClip implements Cloneable, java.io.Serializable {
this.clips = clips;
}
public int getColumnSpan() {
return columnSpan;
}
public int getColumnSpan() {
return columnSpan;
}
public void setColumnSpan(int columnSpan) {
this.columnSpan = columnSpan;
}
public void setColumnSpan(int columnSpan) {
this.columnSpan = columnSpan;
}
public int getRowSpan() {
return rowSpan;
}
public int getRowSpan() {
return rowSpan;
}
public void setRowSpan(int rowSpan) {
this.rowSpan = rowSpan;
}
public void setRowSpan(int rowSpan) {
this.rowSpan = rowSpan;
}
public FU[] getColumnWidth() {
return columnWidth;
}
public FU[] getColumnWidth() {
return columnWidth;
}
public void setColumnWidth(FU[] columnWidth) {
this.columnWidth = columnWidth;
}
public void setColumnWidth(FU[] columnWidth) {
this.columnWidth = columnWidth;
}
public FU[] getRowHeight() {
return rowHeight;
}
public FU[] getRowHeight() {
return rowHeight;
}
public void setRowHeight(FU[] rowHeight) {
this.rowHeight = rowHeight;
}
public void setRowHeight(FU[] rowHeight) {
this.rowHeight = rowHeight;
}
public TemplateCellElement[] getClips() {
return clips;
}
public TemplateCellElement[] getClips() {
return clips;
}
public void setClips(TemplateCellElement[] clips) {
this.clips = clips;
}
public void setClips(TemplateCellElement[] clips) {
this.clips = clips;
}
public String compateExcelPaste() {
Arrays.sort(this.clips, CellElementComparator.getRowFirstComparator());
public String compateExcelPaste() {
Arrays.sort(this.clips, CellElementComparator.getRowFirstComparator());
// 排序
StringBuffer sbuf = new StringBuffer();
// 排序
int currentRow = -1;
for (int i = 0; i < clips.length; i++) {
CellElement cellElement = clips[i];
if (currentRow == -1) {// 初始化当前行.
currentRow = cellElement.getRow();
}
List<List<Object>> table = new ArrayList<>();
int startRow = -1;
int currentRow = -1;
for (int i = 0; i < clips.length; i++) {
CellElement cellElement = clips[i];
if (currentRow == -1) {// 初始化当前行.
currentRow = cellElement.getRow();
startRow = currentRow;
table.add(new ArrayList<>());
}
if (currentRow < cellElement.getRow()) {
for (int r = currentRow; r < cellElement.getRow(); r++) {
sbuf.append('\n');
}
currentRow = cellElement.getRow();
}
while (currentRow < cellElement.getRow()) {
table.add(new ArrayList<>());
currentRow++;
}
// 添加分隔符号.
if (sbuf.length() > 0 && sbuf.charAt(sbuf.length() - 1) != '\n') {
sbuf.append('\t');
}
//REPORT-5134:会复制出null
if (cellElement.getValue() == null) {
sbuf.append(StringUtils.EMPTY);
} else {
sbuf.append(cellElement.getValue());
}
}
Object cellValue = cellElement.getValue() == null ? StringUtils.EMPTY : cellElement.getValue();
table.get(currentRow - startRow).add(cellValue);
}
return sbuf.toString();
return ClipboardHelper.formatExcelString(table);
}
public CellSelection pasteAt(TemplateElementCase ec, int column, int row) {
Iterator cells = ec.intersect(column, row, columnSpan, rowSpan);
while (cells.hasNext()) {
TemplateCellElement cellElement = (TemplateCellElement)cells.next();
ec.removeCellElement(cellElement);
}
for (int i = 0; i < clips.length; i++) {
TemplateCellElement cellElement;
try {
cellElement = (TemplateCellElement) clips[i].clone();
} catch (CloneNotSupportedException e) {
Iterator cells = ec.intersect(column, row, columnSpan, rowSpan);
while (cells.hasNext()) {
TemplateCellElement cellElement = (TemplateCellElement) cells.next();
ec.removeCellElement(cellElement);
}
for (int i = 0; i < clips.length; i++) {
TemplateCellElement cellElement;
try {
cellElement = (TemplateCellElement) clips[i].clone();
} catch (CloneNotSupportedException e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
return null;
}
// peter:因为前面已经将这个位置的元素删除了,所以不需要override了.
ec.addCellElement((TemplateCellElement) cellElement.deriveCellElement(
column + cellElement.getColumn(), row + cellElement.getRow()
), false);
}
//设置单元格的宽高
if(this.columnWidth != null && this.rowHeight != null){
return null;
}
// peter:因为前面已经将这个位置的元素删除了,所以不需要override了.
ec.addCellElement((TemplateCellElement) cellElement.deriveCellElement(
column + cellElement.getColumn(), row + cellElement.getRow()
), false);
}
//设置单元格的宽高
if (this.columnWidth != null && this.rowHeight != null) {
pasteWidthAndHeight(ec, column, row, columnSpan, rowSpan);
}
return new CellSelection(column, row, columnSpan, rowSpan);
return new CellSelection(column, row, columnSpan, rowSpan);
}
public void pasteWidthAndHeight(TemplateElementCase ec, int column, int row, int columnSpan, int rowSpan){
for(int i = 0; i < columnSpan; i++){
ec.setColumnWidth(column + i, columnWidth[i]);
}
for(int j = 0; j < rowSpan; j++){
ec.setRowHeight(row + j, rowHeight[j]);
}
}
public void pasteWidthAndHeight(TemplateElementCase ec, int column, int row, int columnSpan, int rowSpan) {
for (int i = 0; i < columnSpan; i++) {
ec.setColumnWidth(column + i, columnWidth[i]);
}
for (int j = 0; j < rowSpan; j++) {
ec.setRowHeight(row + j, rowHeight[j]);
}
}
public void pasteAtRegion(TemplateElementCase ec,
int startColumn, int startRow,
int column, int row,
int columnSpan, int rowSpan) {
int startColumn, int startRow,
int column, int row,
int columnSpan, int rowSpan) {
for (int i = 0; i < clips.length; i++) {
TemplateCellElement cellElement = clips[i];
@ -173,14 +170,14 @@ public class CellElementsClip implements Cloneable, java.io.Serializable {
* Clone.
*/
@Override
public Object clone() throws CloneNotSupportedException {
public Object clone() throws CloneNotSupportedException {
CellElementsClip cloned = (CellElementsClip) super.clone();
if (this.clips != null) {
cloned.clips = new TemplateCellElement[this.clips.length];
for (int i = 0; i < this.clips.length; i++) {
cloned.clips[i] = (TemplateCellElement)this.clips[i].clone();
}
cloned.clips = new TemplateCellElement[this.clips.length];
for (int i = 0; i < this.clips.length; i++) {
cloned.clips[i] = (TemplateCellElement) this.clips[i].clone();
}
}
return cloned;

6
designer-realize/src/main/java/com/fr/design/mainframe/ElementCasePane.java

@ -118,8 +118,6 @@ import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollBar;
import javax.swing.KeyStroke;
import java.lang.reflect.Constructor;
import java.util.Set;
import java.awt.AWTEvent;
import java.awt.Adjustable;
import java.awt.Dimension;
@ -133,6 +131,8 @@ import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.lang.reflect.Constructor;
import java.util.Set;
import static com.fr.design.gui.syntax.ui.rtextarea.RTADefaultInputMap.DEFAULT_MODIFIER;
@ -181,7 +181,7 @@ public abstract class ElementCasePane<T extends TemplateElementCase> extends Tar
DesignerContext.setFormatState(DesignerContext.FORMAT_STATE_ONCE);
DesignerContext.setReferencedElementCasePane(ElementCasePane.this);
DesignerContext.setReferencedIndex(
((JWorkBook) HistoryTemplateListPane.getInstance().getCurrentEditingTemplate()).getEditingReportIndex());
HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().getEditingReportIndex());
formatBrush.setSelected(true);
formatBrushAction.executeActionReturnUndoRecordNeeded();
} else {

11
designer-realize/src/main/java/com/fr/design/mainframe/ElementCasePaneDelegate.java

@ -15,6 +15,7 @@ import com.fr.design.actions.edit.HyperlinkAction;
import com.fr.design.actions.edit.merge.MergeCellAction;
import com.fr.design.actions.edit.merge.UnmergeCellAction;
import com.fr.design.actions.utils.DeprecatedActionManager;
import com.fr.design.base.mode.DesignModeContext;
import com.fr.design.event.TargetModifiedEvent;
import com.fr.design.event.TargetModifiedListener;
import com.fr.design.file.HistoryTemplateListPane;
@ -101,7 +102,9 @@ public class ElementCasePaneDelegate extends ElementCasePane<WorkSheet> {
conditionAttributesGroupPane.populate(ElementCasePaneDelegate.this);
EastRegionContainerPane.getInstance().replaceFloatElementPane(ReportFloatPane.getInstance());
EastRegionContainerPane.getInstance().switchMode(EastRegionContainerPane.PropertyMode.REPORT);
EastRegionContainerPane.getInstance().switchMode(DesignModeContext.isDuchampMode() ?
EastRegionContainerPane.PropertyMode.DUCHAMP_REPORT :
EastRegionContainerPane.PropertyMode.REPORT);
EastRegionContainerPane.getInstance().replaceCellAttrPane(CellElementPropertyPane.getInstance());
EastRegionContainerPane.getInstance().replaceCellElementPane(QuickEditorRegion.getInstance());
EastRegionContainerPane.getInstance().replaceConditionAttrPane(conditionAttributesGroupPane);
@ -201,7 +204,11 @@ public class ElementCasePaneDelegate extends ElementCasePane<WorkSheet> {
menuDef.addShortCut(new GlobalStyleMenuDef(this));
// 单元格形态
menuDef.addShortCut(DeprecatedActionManager.getPresentMenu(this));
menuDef.addShortCut(new CellWidgetAttrAction());
if (!DesignModeContext.isDuchampMode()) {
menuDef.addShortCut(new CellWidgetAttrAction());
}
menuDef.addShortCut(new ConditionAttributesAction());
menuDef.addShortCut(new HyperlinkAction());

9
designer-realize/src/main/java/com/fr/design/mainframe/JWorkBook.java

@ -193,7 +193,7 @@ public class JWorkBook extends JTemplate<WorkBook, WorkBookUndoState> {
}
@Override
protected UIModeControlContainer createCenterPane() {
protected JComponent createCenterPane() {
parameterPane = ModuleContext.isModuleStarted(Module.FORM_MODULE) ? new ParameterDefinitePane() : null;
centerPane = new UIModeControlContainer(parameterPane, reportComposite = new ReportComponentComposite(this)) {
@Override
@ -214,7 +214,7 @@ public class JWorkBook extends JTemplate<WorkBook, WorkBookUndoState> {
reportComposite.addTargetModifiedListener(e -> JWorkBook.this.fireTargetModified());
reportComposite.setParentContainer(centerPane);
return centerPane;
return DesignModeContext.isDuchampMode() ? reportComposite : centerPane;
}
@Override
@ -313,7 +313,7 @@ public class JWorkBook extends JTemplate<WorkBook, WorkBookUndoState> {
}
private boolean hasParameterPane() {
return parameterPane != null;
return parameterPane != null && !DesignModeContext.isDuchampMode();
}
/**
@ -580,7 +580,8 @@ public class JWorkBook extends JTemplate<WorkBook, WorkBookUndoState> {
super.setTarget(book);
}
private TargetComponent delegate4ToolbarMenuAdapter() {
public ReportComponent delegate4ToolbarMenuAdapter() {
return this.reportComposite.getEditingReportComponent();
}

5
designer-realize/src/main/java/com/fr/design/mainframe/ReportComponentComposite.java

@ -2,6 +2,7 @@ package com.fr.design.mainframe;
import com.fr.base.ScreenResolution;
import com.fr.common.inputevent.InputEventBaseOnOS;
import com.fr.design.base.mode.DesignModeContext;
import com.fr.design.designer.EditingState;
import com.fr.design.event.RemoveListener;
import com.fr.design.event.TargetModifiedListener;
@ -215,7 +216,9 @@ public class ReportComponentComposite extends JComponent implements RemoveListen
jSliderContainer = JFormSliderPane.getInstance();
}
southPane.add(hbarContainer, BorderLayout.NORTH);
southPane.add(sheetNameTab, BorderLayout.CENTER);
if (!DesignModeContext.isDuchampMode()) {
southPane.add(sheetNameTab, BorderLayout.CENTER);
}
southPane.add(jSliderContainer, BorderLayout.EAST);
return southPane;
}

13
designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellOtherSetPane.java

@ -361,10 +361,11 @@ public class CellOtherSetPane extends AbstractCellAttrPane {
cellGUIAttr = CellGUIAttr.DEFAULT_CELLGUIATTR;
}
// 是否在编辑表单中的报表块
boolean isInForm = EastRegionContainerPane.getInstance().getCurrentMode().equals(EastRegionContainerPane.PropertyMode.FORM_REPORT);
// 支持 跟随页面设置 选项 = 不在编辑表单中的报表块 && 不在大屏模板cpt组件中
boolean supportFollowTplDefine = !EastRegionContainerPane.getInstance().getCurrentMode().equals(EastRegionContainerPane.PropertyMode.FORM_REPORT)
&& !EastRegionContainerPane.getInstance().getCurrentMode().equals(EastRegionContainerPane.PropertyMode.DUCHAMP_REPORT);
defaultAutoRadioButton.setVisible(!isInForm);
defaultAutoRadioButton.setVisible(supportFollowTplDefine);
switch (cellGUIAttr.getAdjustMode()) {
case CellGUIAttr.ADJUST_MODE_NO_AUTO:
noAutoRadioButton.setSelected(true);
@ -376,10 +377,10 @@ public class CellOtherSetPane extends AbstractCellAttrPane {
autoWidthRadioButton.setSelected(true);
break;
case CellGUIAttr.ADJUST_MODE_DEFAULT:
if (isInForm) {
autoHeightRadioButton.setSelected(true);
} else {
if (supportFollowTplDefine) {
defaultAutoRadioButton.setSelected(true);
} else {
autoHeightRadioButton.setSelected(true);
}
break;
default:

1
designer-realize/src/main/java/com/fr/grid/selection/CellSelection.java

@ -39,7 +39,6 @@ import com.fr.design.mainframe.JTemplate;
import com.fr.design.menu.KeySetUtils;
import com.fr.design.report.RowColumnPane;
import com.fr.design.selection.QuickEditor;
import com.fr.grid.GridUtils;
import com.fr.report.cell.CellElement;
import com.fr.report.cell.DefaultTemplateCellElement;

14
designer-realize/src/main/java/com/fr/start/module/DesignerWorkspaceProvider.java

@ -8,9 +8,8 @@ import com.fr.design.editlock.ServerTableDataLockChangeChecker;
import com.fr.design.env.DesignerWorkspaceGenerator;
import com.fr.design.env.DesignerWorkspaceInfo;
import com.fr.design.env.LocalDesignerWorkspaceInfo;
import com.fr.design.i18n.Toolkit;
import com.fr.design.versioncheck.VersionCheckUtils;
import com.fr.env.TestConnectionResult;
import com.fr.env.handler.RemoteDesignExceptionHandler;
import com.fr.event.Event;
import com.fr.event.EventDispatcher;
import com.fr.event.Listener;
@ -21,7 +20,6 @@ import com.fr.stable.StringUtils;
import com.fr.value.NotNullLazyValue;
import com.fr.workspace.WorkContext;
import com.fr.workspace.Workspace;
import com.fr.workspace.engine.exception.WorkspaceCheckException;
import org.jetbrains.annotations.NotNull;
@ -78,15 +76,7 @@ public class DesignerWorkspaceProvider extends Activator {
});
}
} catch (Throwable e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
if (e.getCause() instanceof WorkspaceCheckException) {
WorkspaceCheckException exception = (WorkspaceCheckException) e.getCause();
// 输出标准详情
TestConnectionResult result = TestConnectionResult.parseByException(exception);
if (result.isVerifyResult()) {
FineLoggerFactory.getLogger().error(result.getText().replaceAll(TestConnectionResult.WRAP, StringUtils.EMPTY) + Toolkit.i18nText("Fine-Design_Basic_Remote_Design_Modify_PassWord"));
}
}
RemoteDesignExceptionHandler.getInstance().handleInStart(e, workspaceInfo);
EnvChangeEntrance.getInstance().dealEvnExceptionWhenStartDesigner();
}
}

Loading…
Cancel
Save