daniel 7 years ago
parent
commit
77fc8abc23
  1. 1
      designer/src/com/fr/design/actions/file/newReport/NewWorkBookAction.java
  2. 365
      designer/src/com/fr/design/mainframe/AuthorityToolBarPane.java
  3. 171
      designer/src/com/fr/design/mainframe/FormatBrushAction.java
  4. 9
      designer/src/com/fr/design/mainframe/bbs/UserInfoLabel.java
  5. 4
      designer/src/com/fr/design/report/freeze/RepeatAndFreezeSettingPane.java
  6. 391
      designer/src/com/fr/grid/GridKeyListener.java
  7. 1604
      designer/src/com/fr/grid/GridMouseAdapter.java
  8. 7
      designer/src/com/fr/quickeditor/ChartQuickEditor.java
  9. 2
      designer_base/src/com/fr/design/actions/help/AboutPane.java
  10. 4
      designer_base/src/com/fr/design/actions/help/WebDemoAction.java
  11. 4
      designer_base/src/com/fr/design/actions/server/PluginManagerAction.java
  12. 75
      designer_base/src/com/fr/design/data/DesignTableDataManager.java
  13. 530
      designer_base/src/com/fr/design/data/datapane/TreeTableDataDictPane.java
  14. 19
      designer_base/src/com/fr/design/extra/LoginDialog.java
  15. 152
      designer_base/src/com/fr/design/extra/LoginPane.java
  16. 159
      designer_base/src/com/fr/design/extra/LoginWebBridge.java
  17. 14
      designer_base/src/com/fr/design/extra/LoginWebPane.java
  18. 14
      designer_base/src/com/fr/design/extra/PluginHelper.java
  19. 10
      designer_base/src/com/fr/design/extra/PluginWebBridge.java
  20. 4
      designer_base/src/com/fr/design/extra/QQLoginDialog.java
  21. 145
      designer_base/src/com/fr/design/extra/QQLoginPane.java
  22. 131
      designer_base/src/com/fr/design/extra/QQLoginWebBridge.java
  23. 129
      designer_base/src/com/fr/design/extra/QQLoginWebPane.java
  24. 36
      designer_base/src/com/fr/design/extra/ReuseWebBridge.java
  25. 54
      designer_base/src/com/fr/design/extra/ReuseWebPane.java
  26. 58
      designer_base/src/com/fr/design/extra/WebViewDlgHelper.java
  27. 3
      designer_base/src/com/fr/design/extra/exe/PluginLoginExecutor.java
  28. 30
      designer_base/src/com/fr/design/gui/autocomplete/AutoCompletePopupWindow.java
  29. 2592
      designer_base/src/com/fr/design/gui/autocomplete/AutoCompletion.java
  30. 75
      designer_base/src/com/fr/design/gui/autocomplete/ParameterizedCompletionContext.java
  31. 3
      designer_base/src/com/fr/design/gui/chart/BaseChartPropertyPane.java
  32. 2
      designer_base/src/com/fr/design/gui/frpane/UIAdvancedTextPane.java
  33. 18
      designer_base/src/com/fr/design/gui/icombobox/ExtendedComboBox.java
  34. 28
      designer_base/src/com/fr/design/gui/icombobox/UIComboBoxUI.java
  35. 585
      designer_base/src/com/fr/design/gui/ilist/CheckBoxList.java
  36. 11
      designer_base/src/com/fr/design/gui/ilist/UIList.java
  37. 17
      designer_base/src/com/fr/design/gui/itable/TableSorter.java
  38. 49
      designer_base/src/com/fr/design/gui/itabpane/UITabsHeaderIconPane.java
  39. 18
      designer_base/src/com/fr/design/gui/itextfield/UITextField.java
  40. 63
      designer_base/src/com/fr/design/gui/itree/checkboxtree/CheckBoxTree.java
  41. 33
      designer_base/src/com/fr/design/gui/style/BackgroundSpecialPane.java
  42. 2
      designer_base/src/com/fr/design/gui/syntax/ui/rsyntaxtextarea/RSyntaxTextAreaDefaultInputMap.java
  43. 24
      designer_base/src/com/fr/design/gui/syntax/ui/rtextarea/RTADefaultInputMap.java
  44. 80
      designer_base/src/com/fr/design/locale/designer.properties
  45. 136
      designer_base/src/com/fr/design/locale/designer_en_US.properties
  46. 2416
      designer_base/src/com/fr/design/locale/designer_ja_JP.properties
  47. 43
      designer_base/src/com/fr/design/locale/designer_ko_KR.properties
  48. 40
      designer_base/src/com/fr/design/locale/designer_zh_CN.properties
  49. 251
      designer_base/src/com/fr/design/locale/designer_zh_TW.properties
  50. 8
      designer_base/src/com/fr/design/mainframe/loghandler/DesignerLogHandler.java
  51. 3
      designer_base/src/com/fr/design/module/DesignModule.java
  52. 257
      designer_base/src/com/fr/design/module/DesignModuleFactory.java
  53. 8
      designer_base/src/com/fr/design/style/color/UsedColorPane.java
  54. 4
      designer_base/src/com/fr/design/utils/DesignUtils.java
  55. 15
      designer_base/src/com/fr/start/BaseDesigner.java
  56. 12
      designer_base/src/com/fr/start/StartServer.java
  57. 188
      designer_chart/src/com/fr/design/ChartEnvManager.java
  58. 42
      designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java
  59. 6
      designer_chart/src/com/fr/design/chart/fun/IndependentChartUIProvider.java
  60. 10
      designer_chart/src/com/fr/design/chart/fun/impl/AbstractIndependentChartUI.java
  61. 7
      designer_chart/src/com/fr/design/chart/fun/impl/AbstractIndependentChartUIWithAPILevel.java
  62. 103
      designer_chart/src/com/fr/design/chart/fun/impl/AbstractIndependentChartsUI.java
  63. 69
      designer_chart/src/com/fr/design/chart/report/GisMapDataPane4Chart.java
  64. 341
      designer_chart/src/com/fr/design/chart/report/GisMapTableDataContentPane4Chart.java
  65. 68
      designer_chart/src/com/fr/design/chart/report/MapCubeDataPane4Chart.java
  66. 133
      designer_chart/src/com/fr/design/chart/report/MapDataPane4Chart.java
  67. 113
      designer_chart/src/com/fr/design/chart/report/MapMoreCubeLayerPane4Chart.java
  68. 79
      designer_chart/src/com/fr/design/chart/report/MapSinglePane4Chart.java
  69. 93
      designer_chart/src/com/fr/design/chart/report/MapTableCubeDataPane4Chart.java
  70. 268
      designer_chart/src/com/fr/design/chart/report/MapTableDataSinglePane4Chart.java
  71. 244
      designer_chart/src/com/fr/design/mainframe/AbstractChartDataPane4Chart.java
  72. 111
      designer_chart/src/com/fr/design/mainframe/AbstractMapPlotPane4ToolBar.java
  73. 521
      designer_chart/src/com/fr/design/mainframe/ChartArea.java
  74. 230
      designer_chart/src/com/fr/design/mainframe/ChartDesigner.java
  75. 211
      designer_chart/src/com/fr/design/mainframe/ChartDesignerUI.java
  76. 18
      designer_chart/src/com/fr/design/mainframe/ChartPropertyPane.java
  77. 558
      designer_chart/src/com/fr/design/mainframe/ChartToolBarPane.java
  78. 98
      designer_chart/src/com/fr/design/mainframe/DesignerFrame4Chart.java
  79. 203
      designer_chart/src/com/fr/design/mainframe/GisMapPlotPane4ToolBar.java
  80. 339
      designer_chart/src/com/fr/design/mainframe/MapArrayPane.java
  81. 210
      designer_chart/src/com/fr/design/mainframe/MapPlotPane4ToolBar.java
  82. 19
      designer_chart/src/com/fr/design/mainframe/MiddleChartPropertyPane.java
  83. 90
      designer_chart/src/com/fr/design/mainframe/PlotToolBarFactory.java
  84. 91
      designer_chart/src/com/fr/design/mainframe/ToolTip4Chart.java
  85. 170
      designer_chart/src/com/fr/design/mainframe/actions/ChartDownLoadWorker.java
  86. 51
      designer_chart/src/com/fr/design/mainframe/actions/ChartFeedBackAciton.java
  87. 25
      designer_chart/src/com/fr/design/mainframe/actions/ChartUpdateAction.java
  88. 56
      designer_chart/src/com/fr/design/mainframe/actions/ChartWebAction.java
  89. 35
      designer_chart/src/com/fr/design/mainframe/actions/OpenChartAction.java
  90. 74
      designer_chart/src/com/fr/design/mainframe/actions/UpdateOnlineAction.java
  91. 69
      designer_chart/src/com/fr/design/mainframe/actions/UpdateVersion.java
  92. 55
      designer_chart/src/com/fr/design/mainframe/chart/ChartDesignEditPane.java
  93. 2
      designer_chart/src/com/fr/design/mainframe/chart/ChartEditPane.java
  94. 39
      designer_chart/src/com/fr/design/mainframe/chart/ChartsConfigPane.java
  95. 56
      designer_chart/src/com/fr/design/mainframe/chart/ChartsEditPane.java
  96. 238
      designer_chart/src/com/fr/design/mainframe/chart/UpdateOnLinePane.java
  97. 2
      designer_chart/src/com/fr/design/mainframe/chart/gui/ChartDataPane.java
  98. 71
      designer_chart/src/com/fr/design/mainframe/chart/gui/ChartDesignerDataPane.java
  99. 48
      designer_chart/src/com/fr/design/mainframe/chart/gui/data/ChartDesignDataLoadPane.java
  100. 124
      designer_chart/src/com/fr/design/mainframe/chart/gui/data/EmbbeddDataPane.java
  101. Some files were not shown because too many files have changed in this diff Show More

1
designer/src/com/fr/design/actions/file/newReport/NewWorkBookAction.java

@ -28,6 +28,7 @@ public class NewWorkBookAction extends UpdateAction {
/**
* 动作
*
* @param e 事件
*/
public void actionPerformed(ActionEvent e) {

365
designer/src/com/fr/design/mainframe/AuthorityToolBarPane.java

File diff suppressed because one or more lines are too long

171
designer/src/com/fr/design/mainframe/FormatBrushAction.java

File diff suppressed because one or more lines are too long

9
designer/src/com/fr/design/mainframe/bbs/UserInfoLabel.java

@ -5,7 +5,6 @@ package com.fr.design.mainframe.bbs;
import com.fr.base.FRContext;
import com.fr.design.DesignerEnvManager;
import com.fr.design.dialog.UIDialog;
import com.fr.design.extra.*;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.imenu.UIMenuItem;
@ -103,17 +102,13 @@ public class UserInfoLabel extends UILabel {
if (StableUtils.getMajorJavaVersion() == 8) {
PluginWebBridge.getHelper().setUILabel(UserInfoLabel.this);
}
QQLoginWebBridge.getHelper().setUILabelInPlugin(UserInfoLabel.this);
LoginWebBridge.getHelper().setUILabelInPlugin(UserInfoLabel.this);
UserLoginContext.addLoginContextListener(new LoginContextListener() {
@Override
public void showLoginContext() {
LoginPane managerPane = new LoginPane();
UIDialog qqdlg = new LoginDialog(DesignerContext.getDesignerFrame(), managerPane);
LoginWebBridge.getHelper().setDialogHandle(qqdlg);
WebViewDlgHelper.createLoginDialog();
LoginWebBridge.getHelper().setUILabel(UserInfoLabel.this);
QQLoginWebBridge.getHelper().setLoginlabel();
qqdlg.setVisible(true);
clearLoginInformation();
updateInfoPane();
}

4
designer/src/com/fr/design/report/freeze/RepeatAndFreezeSettingPane.java

@ -10,7 +10,7 @@ import javax.swing.event.ChangeListener;
import com.fr.base.FRContext;
import com.fr.design.dialog.BasicPane;
import com.fr.design.extra.WebDialog;
import com.fr.design.extra.WebViewDlgHelper;
import com.fr.design.gui.icheckbox.UICheckBox;
import com.fr.design.gui.ilable.ActionLabel;
import com.fr.design.gui.ilable.UILabel;
@ -553,7 +553,7 @@ public class RepeatAndFreezeSettingPane extends BasicPane {
public void actionPerformed(ActionEvent e) {
try {
//Desktop.getDesktop().browse(new URI(url));
WebDialog.createPluginDialog();
WebViewDlgHelper.createPluginDialog();
RepeatAndFreezeSettingPane.this.getTopLevelAncestor().setVisible(false);
} catch (Exception exp) {

391
designer/src/com/fr/grid/GridKeyListener.java

@ -1,212 +1,207 @@
package com.fr.grid;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import com.fr.design.mainframe.ElementCasePane;
import com.fr.grid.selection.CellSelection;
import com.fr.grid.selection.FloatSelection;
import com.fr.grid.selection.Selection;
import com.fr.report.elementcase.ElementCase;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
/**
*
* @editor zhou
* @since 2012-3-23上午10:55:36
*/
public class GridKeyListener implements KeyListener {
private Grid grid;
// Keypressed last time
private long keyPressedLastTime = 0;
private boolean isKeyPressedContentChanged = false;
public GridKeyListener(Grid grid) {
this.grid = grid;
}
public void keyPressed(KeyEvent evt) {
if (!grid.isEnabled() || evt.isConsumed()) {// 如果用户在自己的KyeListener里面consume了.就不执行下面的代码了.
return;
}
KeyEvent newEvt = KeyEventWork.processKeyEvent(evt);
if (newEvt == null) {
return;
}
long systemCurrentTime = System.currentTimeMillis();
int code = evt.getKeyCode();
boolean isNeedRepaint = false;
ElementCasePane reportPane = grid.getElementCasePane();
ElementCase report = reportPane.getEditingElementCase();
if (reportPane.getSelection() instanceof FloatSelection) {
if (systemCurrentTime - keyPressedLastTime <= 2) {
return;
} else {
keyPressedLastTime = systemCurrentTime;
}
dealWithFloatSelection(reportPane, code);
} else {
if (systemCurrentTime - keyPressedLastTime <= 32) {
return;
} else {
keyPressedLastTime = systemCurrentTime;
}
dealWithCellSelection(evt, code);
}
switch (code) {
case KeyEvent.VK_PAGE_UP: {// page up
reportPane.getVerticalScrollBar().setValue(Math.max(0, grid.getVerticalValue() - grid.getVerticalExtent()));
isNeedRepaint = true;
break;
}
case KeyEvent.VK_PAGE_DOWN: {// page down
reportPane.getVerticalScrollBar().setValue(grid.getVerticalValue() + grid.getVerticalExtent());
isNeedRepaint = true;
break;
}
// Richie:Ctrl + A全选单元格
case KeyEvent.VK_A:
if (code == KeyEvent.VK_A && evt.isControlDown()) {
reportPane.setSelection(new CellSelection(0, 0, report.getColumnCount(), report.getRowCount()));
isNeedRepaint = true;
}
isNeedRepaint = true;
break;
}
if (isNeedRepaint) {
reportPane.repaint();
}
}
/**
* 单选中悬浮元素时只处理4个方向键
*
* @param reportPane
* @param code
*/
private void dealWithFloatSelection(ElementCasePane reportPane, int code) {
boolean isContentChanged = false;
FloatSelection floatselection = (FloatSelection)reportPane.getSelection();
switch (code) {
case KeyEvent.VK_LEFT: {// left
floatselection.moveLeft(reportPane);
isContentChanged = true;
break;
}
case KeyEvent.VK_RIGHT: {// right
floatselection.moveRight(reportPane);
isContentChanged = true;
break;
}
case KeyEvent.VK_UP: {// up
floatselection.moveUp(reportPane);
isContentChanged = true;
break;
}
case KeyEvent.VK_DOWN: {// down
floatselection.moveDown(reportPane);
isContentChanged = true;
break;
}
}
if (isContentChanged) {
grid.getElementCasePane().repaint();
this.isKeyPressedContentChanged = true;
}
}
private void dealWithCellSelection(KeyEvent evt, int code) {
switch (code) {
case KeyEvent.VK_ESCAPE: {
if (grid.isCellEditing()) {
grid.cancelEditing();
}
break;
}
case KeyEvent.VK_F2: {
if (!grid.isCellEditing()) {
grid.startEditing();
}
break;
}
}
// 支持小键盘
if (IS_NUM_PAD_KEY(code)) {
keyTyped(evt);
}
}
public void keyReleased(KeyEvent evt) {
if (!grid.isEnabled() || evt.isConsumed()) {
return;
}
KeyEvent newEvt = KeyEventWork.processKeyEvent(evt);
if (newEvt == null) {
return;
}
if (this.isKeyPressedContentChanged) {
grid.getElementCasePane().fireTargetModified();
this.isKeyPressedContentChanged = false;
}
}
public void keyTyped(KeyEvent evt) {
if (!grid.isEnabled() || evt.isConsumed()) {
return;
}
KeyEvent newEvt = KeyEventWork.processKeyEvent(evt);
if (newEvt == null || evt.isControlDown()) {// uneditable.
return;
}
char ch = evt.getKeyChar();
if (ch == KeyEvent.VK_TAB) {// 禁止Tab键.
return;
}
int code = evt.getKeyCode();
if (Character.isDefined(ch)) {// VK_SUBTRACT小键盘的减号
Selection s = grid.getElementCasePane().getSelection();
if (s instanceof CellSelection) {
if (!grid.getElementCasePane().isSelectedOneCell()) {
Toolkit.getDefaultToolkit().beep();
return;
}
if (!grid.isCellEditing()) {
grid.startEditing(true);
}
if (grid.getCellEditor() != null && grid.editorComponent != null) {
if (IS_NUM_PAD_KEY(code)) {
// 103 - 55 = 48, 小键盘和大键盘数字的差值 48
KeyEvent ke = new KeyEvent(grid, KeyEvent.KEY_PRESSED, 0, 0, code - 48, ch);
grid.editorComponent.dispatchEvent(ke);
ke.consume();
} else {
if (!evt.isConsumed()) {
grid.editorComponent.dispatchEvent(evt);
}
}
}
}
}
}
/**
* 小键盘
* @param code
* @return
*/
private static boolean IS_NUM_PAD_KEY(int code){
return code == KeyEvent.VK_NUMPAD0 || code == KeyEvent.VK_NUMPAD1
private static final int DIFF = 48; // 103 - 55 = 48, 小键盘和大键盘数字的差值 48
private static final int DELAY = 32;
private Grid grid;
// Keypressed last time
private long keyPressedLastTime = 0;
private boolean isKeyPressedContentChanged = false;
public GridKeyListener(Grid grid) {
this.grid = grid;
}
public void keyPressed(KeyEvent evt) {
if (!grid.isEnabled() || evt.isConsumed()) {// 如果用户在自己的KyeListener里面consume了.就不执行下面的代码了.
return;
}
if (KeyEventWork.processKeyEvent(evt) == null) {
return;
}
long systemCurrentTime = System.currentTimeMillis();
int code = evt.getKeyCode();
boolean isNeedRepaint = false;
ElementCasePane reportPane = grid.getElementCasePane();
ElementCase report = reportPane.getEditingElementCase();
if (reportPane.getSelection() instanceof FloatSelection) {
if (systemCurrentTime - keyPressedLastTime <= 2) {
return;
} else {
keyPressedLastTime = systemCurrentTime;
}
dealWithFloatSelection(reportPane, code);
} else {
if (systemCurrentTime - keyPressedLastTime <= DELAY) {
return;
} else {
keyPressedLastTime = systemCurrentTime;
}
dealWithCellSelection(evt, code);
}
switch (code) {
case KeyEvent.VK_PAGE_UP: {// page up
reportPane.getVerticalScrollBar().setValue(Math.max(0, grid.getVerticalValue() - grid.getVerticalExtent()));
isNeedRepaint = true;
break;
}
case KeyEvent.VK_PAGE_DOWN: {// page down
reportPane.getVerticalScrollBar().setValue(grid.getVerticalValue() + grid.getVerticalExtent());
isNeedRepaint = true;
break;
}
// Richie:Ctrl + A全选单元格
case KeyEvent.VK_A:
if (evt.isControlDown()) {
reportPane.setSelection(new CellSelection(0, 0, report.getColumnCount(), report.getRowCount()));
}
isNeedRepaint = true;
break;
}
if (isNeedRepaint) {
reportPane.repaint();
}
}
/**
* 单选中悬浮元素时只处理4个方向键
*
* @param reportPane
* @param code
*/
private void dealWithFloatSelection(ElementCasePane reportPane, int code) {
boolean isContentChanged = false;
FloatSelection floatselection = (FloatSelection) reportPane.getSelection();
switch (code) {
case KeyEvent.VK_LEFT: {// left
floatselection.moveLeft(reportPane);
isContentChanged = true;
break;
}
case KeyEvent.VK_RIGHT: {// right
floatselection.moveRight(reportPane);
isContentChanged = true;
break;
}
case KeyEvent.VK_UP: {// up
floatselection.moveUp(reportPane);
isContentChanged = true;
break;
}
case KeyEvent.VK_DOWN: {// down
floatselection.moveDown(reportPane);
isContentChanged = true;
break;
}
}
if (isContentChanged) {
grid.getElementCasePane().repaint();
this.isKeyPressedContentChanged = true;
}
}
private void dealWithCellSelection(KeyEvent evt, int code) {
switch (code) {
case KeyEvent.VK_ESCAPE: {
if (grid.isCellEditing()) {
grid.cancelEditing();
}
break;
}
case KeyEvent.VK_F2: {
if (!grid.isCellEditing()) {
grid.startEditing();
}
break;
}
}
// 支持小键盘
if (IS_NUM_PAD_KEY(code)) {
keyTyped(evt);
}
}
public void keyReleased(KeyEvent evt) {
if (!grid.isEnabled() || evt.isConsumed()) {
return;
}
KeyEvent newEvt = KeyEventWork.processKeyEvent(evt);
if (newEvt == null) {
return;
}
if (this.isKeyPressedContentChanged) {
grid.getElementCasePane().fireTargetModified();
this.isKeyPressedContentChanged = false;
}
}
public void keyTyped(KeyEvent evt) {
if (!grid.isEnabled() || evt.isConsumed()) {
return;
}
KeyEvent newEvt = KeyEventWork.processKeyEvent(evt);
if (newEvt == null || evt.isControlDown()) {// uneditable.
return;
}
char ch = evt.getKeyChar();
if (ch == KeyEvent.VK_TAB) {// 禁止Tab键.
return;
}
int code = evt.getKeyCode();
if (Character.isDefined(ch)) {// VK_SUBTRACT小键盘的减号
Selection s = grid.getElementCasePane().getSelection();
if (s instanceof CellSelection) {
if (!grid.getElementCasePane().isSelectedOneCell()) {
Toolkit.getDefaultToolkit().beep();
return;
}
if (!grid.isCellEditing()) {
grid.startEditing(true);
}
if (grid.getCellEditor() != null && grid.editorComponent != null) {
if (IS_NUM_PAD_KEY(code)) {
KeyEvent ke = new KeyEvent(grid, KeyEvent.KEY_PRESSED, 0, 0, code - DIFF, ch);
grid.editorComponent.dispatchEvent(ke);
ke.consume();
} else {
if (!evt.isConsumed()) {
grid.editorComponent.dispatchEvent(evt);
}
}
}
}
}
}
/**
* 小键盘
*
* @param code
* @return
*/
private static boolean IS_NUM_PAD_KEY(int code) {
return code == KeyEvent.VK_NUMPAD0 || code == KeyEvent.VK_NUMPAD1
|| code == KeyEvent.VK_NUMPAD2
|| code == KeyEvent.VK_NUMPAD3
|| code == KeyEvent.VK_NUMPAD4
@ -215,10 +210,10 @@ public class GridKeyListener implements KeyListener {
|| code == KeyEvent.VK_NUMPAD7
|| code == KeyEvent.VK_NUMPAD8
|| code == KeyEvent.VK_NUMPAD9
|| code == KeyEvent.VK_MULTIPLY
|| code == KeyEvent.VK_MULTIPLY
|| code == KeyEvent.VK_ADD
|| code == KeyEvent.VK_SUBTRACT
|| code == KeyEvent.VK_DECIMAL
|| code == KeyEvent.VK_DIVIDE;
}
}
}

1604
designer/src/com/fr/grid/GridMouseAdapter.java

File diff suppressed because it is too large Load Diff

7
designer/src/com/fr/quickeditor/ChartQuickEditor.java

@ -1,24 +1,24 @@
package com.fr.quickeditor;
import com.fr.base.chart.BaseChartCollection;
import com.fr.chart.chartattr.ChartCollection;
import com.fr.design.designer.TargetComponent;
import com.fr.design.gui.chart.BaseChartPropertyPane;
import com.fr.design.mainframe.ElementCasePane;
import com.fr.design.module.DesignModuleFactory;
import com.fr.design.selection.QuickEditor;
import com.fr.grid.selection.CellSelection;
import com.fr.grid.selection.FloatSelection;
import com.fr.grid.selection.Selection;
import com.fr.poly.PolyDesigner;
import com.fr.poly.creator.ChartBlockEditor;
import com.fr.report.cell.Elem;
import com.fr.design.selection.QuickEditor;
import java.awt.*;
public class ChartQuickEditor extends QuickEditor<TargetComponent>{
// kunsnat: editingPropertyPane初始化 避开设计器启动, 在用到的时候再初始化.
//private BaseChartPropertyPane editingPropertyPane = null;
public ChartQuickEditor() {
setLayout(new BorderLayout());
setBorder(null);
@ -45,9 +45,8 @@ public class ChartQuickEditor extends QuickEditor<TargetComponent>{
element = ((ElementCasePane)tc).getEditingElementCase().getFloatElement(fs.getSelectedFloatName());
}
collection = (BaseChartCollection) element.getValue();
add(editingPropertyPane = DesignModuleFactory.getChartPropertyPane(), BorderLayout.CENTER);
editingPropertyPane.setSupportCellData(true);
}
editingPropertyPane.populateChartPropertyPane(collection, tc);
}

2
designer_base/src/com/fr/design/actions/help/AboutPane.java

@ -47,7 +47,7 @@ public class AboutPane extends JPanel {
BoxCenterAlignmentCopyablePane buildCopyPane = new BoxCenterAlignmentCopyablePane(
getBuildTitle(),
GeneralUtils.readBuildNO(),
GeneralUtils.readFullBuildNO(),
new String[]{
Inter.getLocText("FR-Designer-Basic_Copy_Build_NO"),
Inter.getLocText("FR-Designer-Basic_Copy_Build_NO_OK")

4
designer_base/src/com/fr/design/actions/help/WebDemoAction.java

@ -23,7 +23,7 @@ public class WebDemoAction extends UpdateAction {
* @param evt 事件
*/
public void actionPerformed(ActionEvent evt) {
StartServer.browerDemoURL();
StartServer.browserDemoURL();
}
public static final MenuKeySet PRODUCT_DEMO = new MenuKeySet() {
@ -34,7 +34,7 @@ public class WebDemoAction extends UpdateAction {
@Override
public String getMenuName() {
return Inter.getLocText("Product_Demo");
return Inter.getLocText("FR-Product_Demo");
}
@Override

4
designer_base/src/com/fr/design/actions/server/PluginManagerAction.java

@ -2,7 +2,7 @@ package com.fr.design.actions.server;
import com.fr.base.BaseUtils;
import com.fr.design.actions.UpdateAction;
import com.fr.design.extra.WebDialog;
import com.fr.design.extra.WebViewDlgHelper;
import com.fr.design.menu.MenuKeySet;
import com.fr.general.Inter;
@ -25,7 +25,7 @@ public class PluginManagerAction extends UpdateAction {
@Override
public void actionPerformed(ActionEvent e) {
WebDialog.createPluginDialog();
WebViewDlgHelper.createPluginDialog();
}
public static final MenuKeySet PLUGIN_MANAGER = new MenuKeySet() {

75
designer_base/src/com/fr/design/data/DesignTableDataManager.java

@ -36,7 +36,6 @@ import java.io.ByteArrayOutputStream;
import java.text.Collator;
import java.util.*;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
/**
* 设计器管理操作数据集的类:
@ -59,7 +58,7 @@ public abstract class DesignTableDataManager {
private static java.util.Map<String, String> dsNameChangedMap = new HashMap<String, String>();
// private static List<ChangeListener> dsListeners = new ArrayList<ChangeListener>();
private static Map<String, List<ChangeListener>> dsListenersMap = new HashMap<String, List<ChangeListener>>();
private static Map<String, List<ChangeListener>> dsListenersMap = new HashMap<String, List<ChangeListener>>();
public static String NO_PARAMETER = "no_paramater_pane";
@ -79,7 +78,7 @@ public abstract class DesignTableDataManager {
* 响应数据集改变.
*/
private static void fireDsChanged() {
for(Entry<String, List<ChangeListener>> listenerEntry : dsListenersMap.entrySet()) {
for (Entry<String, List<ChangeListener>> listenerEntry : dsListenersMap.entrySet()) {
List<ChangeListener> dsListeners = listenerEntry.getValue();
for (int i = 0; i < dsListeners.size(); i++) {
//增强for循环用的iterator实现的, 如果中间哪个listener修改或删除了(如ChartEditPane.dsChangeListener),
@ -91,8 +90,8 @@ public abstract class DesignTableDataManager {
}
}
public static void closeTemplate(JTemplate<?,?> template) {
if(template != null) {
public static void closeTemplate(JTemplate<?, ?> template) {
if (template != null) {
dsListenersMap.remove(template.getFullPathName());
}
}
@ -151,7 +150,7 @@ public abstract class DesignTableDataManager {
public static void addDsChangeListener(ChangeListener l) {
JTemplate<?, ?> template = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate();
String key = StringUtils.EMPTY;
if(template != null) {
if (template != null) {
key = template.getFullPathName();
}
List<ChangeListener> dsListeners = dsListenersMap.get(key);
@ -180,7 +179,7 @@ public abstract class DesignTableDataManager {
* august:返回当前正在编辑的具有报表数据源的模板(基本报表聚合报表) 包括 : 图表模板
*
* @return TableDataSource
* attention:与这个方法有关系的静态组件不随着切换模板tab而变化的应该重新执行该方法再刷新组件
* attention:与这个方法有关系的静态组件不随着切换模板tab而变化的应该重新执行该方法再刷新组件
*/
public static TableDataSource getEditingTableDataSource() {
return DesignModelAdapter.getCurrentModelAdapter() == null ? null : DesignModelAdapter.getCurrentModelAdapter().getBook();
@ -319,7 +318,6 @@ public abstract class DesignTableDataManager {
}
private static void addStoreProcedureData(java.util.Map<String, TableDataWrapper> resMap) {
DatasourceManagerProvider mgr = DatasourceManager.getProviderInstance();
String[] namearray = new String[0];
@ -381,42 +379,34 @@ public abstract class DesignTableDataManager {
private static EmbeddedTableData previewTableData(TableData tabledata, int rowCount, boolean isMustInputParameters, boolean needLoadingBar) throws Exception {
final AutoProgressBar loadingBar = PreviewTablePane.getInstance().getProgressBar();
Env currentEnv = FRContext.getCurrentEnv();
EmbeddedTableData embeddedTableData = null;
ParameterProvider[] parameters = currentEnv.getTableDataParameters(tabledata);
boolean isNullParameter = parameters == null || parameters.length == 0;
ParameterProvider[] tableDataParameter = tabledata.getParameters(Calculator.createCalculator());
boolean isOriginalNUllParameter = tableDataParameter == null || tableDataParameter.length == 0;
if (isNullParameter && !isOriginalNUllParameter) {
parameters = tableDataParameter;
}
boolean hasValue = true;
for (ParameterProvider parameter : parameters) {
if (parameter.getValue() == null || ComparatorUtils.equals(StringUtils.EMPTY, parameter.getValue())) {
hasValue = false;
break;
}
if (ArrayUtils.isEmpty(parameters)) {
parameters = tabledata.getParameters(Calculator.createCalculator());
}
final Map<String, Object> parameterMap = new HashMap<String, Object>();
if (!hasValue || isMustInputParameters) {
if (parameters != null && parameters.length > 0) {
final ParameterInputPane pPane = new ParameterInputPane(parameters);
pPane.showSmallWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() {
public void doOk() {
parameterMap.putAll(pPane.update());
}
}).setVisible(true);
}
final Map<String, Object> parameterMap = new HashMap<>();
if (needInputParams(isMustInputParameters, parameters)) {
final ParameterInputPane pPane = new ParameterInputPane(parameters);
pPane.showSmallWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() {
@Override
public void doOk() {
parameterMap.putAll(pPane.update());
}
}).setVisible(true);
} else {
for (int i = 0; i < parameters.length; i++) {
parameterMap.put(parameters[i].getName(), parameters[i].getValue());
for (ParameterProvider parameter : parameters) {
parameterMap.put(parameter.getName(), parameter.getValue());
}
}
if (loadingBar != null && needLoadingBar) {
loadingBar.start();
}
try {
embeddedTableData = currentEnv.previewTableData(tabledata, parameterMap, rowCount);
for (ParameterProvider parameter : currentEnv.getTableDataParameters(tabledata)) {
if (parameterMap.containsKey(parameter.getName())) {
parameter.setValue(parameterMap.get(parameter.getName()));
}
}
return currentEnv.previewTableData(tabledata, parameterMap, rowCount);
} catch (TableDataException e) {
throw new TableDataException(e.getMessage(), e);
} finally {
@ -426,7 +416,18 @@ public abstract class DesignTableDataManager {
}
}, 100);
}
return embeddedTableData;
}
private static boolean needInputParams(boolean mustInputParameters, ParameterProvider[] parameters) {
if (mustInputParameters && ArrayUtils.isNotEmpty(parameters)) {
return true;
}
for (ParameterProvider parameter : parameters) {
if (parameter.getValue() == null || StringUtils.EMPTY.equals(parameter.getValue())) {
return true;
}
}
return false;
}
/**
@ -495,6 +496,4 @@ public abstract class DesignTableDataManager {
public static void setThreadLocal(String value) {
threadLocal.set(value);
}
}

530
designer_base/src/com/fr/design/data/datapane/TreeTableDataDictPane.java

@ -1,21 +1,21 @@
package com.fr.design.data.datapane;
import com.fr.design.data.DesignTableDataManager;
import com.fr.data.impl.RecursionTableData;
import com.fr.design.data.DesignTableDataManager;
import com.fr.design.data.datapane.preview.PreviewLabel;
import com.fr.design.data.datapane.preview.PreviewLabel.Previewable;
import com.fr.design.data.datapane.preview.PreviewTablePane;
import com.fr.design.data.tabledata.wrapper.TableDataWrapper;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.ibutton.UIRadioButton;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.dialog.BasicPane;
import com.fr.design.editor.ValueEditorPane;
import com.fr.design.editor.ValueEditorPaneFactory;
import com.fr.design.editor.editor.ColumnIndexEditor;
import com.fr.design.editor.editor.ColumnNameEditor;
import com.fr.design.editor.editor.Editor;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.ibutton.UIRadioButton;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.general.Inter;
import com.fr.script.Calculator;
import com.fr.stable.StringUtils;
@ -29,271 +29,281 @@ import java.awt.event.ItemListener;
import java.util.List;
public class TreeTableDataDictPane extends BasicPane implements Previewable {
private UILabel selectTableDataLabel;
protected TableDataComboBox tableDataNameComboBox;
private UIRadioButton parentMarkRadio;
private UIRadioButton lengthMarkRadio;
private ButtonGroup markButtonGroup;
UILabel originalMarkedFieldLabel1;
UILabel parentMarkedFieldLabel1;
UILabel treeDataFieldLabel1;
UILabel originalMarkedFieldLabel2;
UILabel treeDataFieldLabel2;
private ValueEditorPane originalMarkedFieldPane1;
private ValueEditorPane parentMarkedFieldPane1;
private ValueEditorPane originalMarkedFieldPane2;
public TreeTableDataDictPane(){
private UILabel selectTableDataLabel;
protected TableDataComboBox tableDataNameComboBox;
private UIRadioButton parentMarkRadio;
private UIRadioButton lengthMarkRadio;
private ButtonGroup markButtonGroup;
private UILabel originFieldDependsOnParentLabel;
private UILabel parentFieldLabel;
private UILabel treeDataFieldLabel1;
private UILabel originFieldDependsOnLengthLabel;
private UILabel treeDataFieldLabel2;
private ValueEditorPane originFieldDependsOnParentPane;
private ValueEditorPane parentFieldPane;
private ValueEditorPane originFieldDependsOnLengthPane;
public TreeTableDataDictPane() {
this(StringUtils.EMPTY);
}
public TreeTableDataDictPane(String treeName) {
this.setLayout(new BorderLayout(5,30));
this.setBorder(BorderFactory.createEmptyBorder(20, 20, 0, 0));
selectTableDataLabel = new UILabel(Inter.getLocText(new String[]{"Please_Select","Single", "DS-TableData"}) + " :");
setTableDataNameComboBox(treeName);
tableDataNameComboBox.setPreferredSize(new Dimension(180, 20));
JPanel tableFlowPane = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane();
tableFlowPane.add(selectTableDataLabel);
tableFlowPane.add(tableDataNameComboBox);
tableDataNameComboBox.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent e) {
tdChange();
}
});
tableFlowPane.add(new PreviewLabel(this));
this.add(tableFlowPane, BorderLayout.NORTH);
JPanel centerPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
this.add(centerPane,BorderLayout.CENTER);
parentMarkRadio = new UIRadioButton(Inter.getLocText("Build_Tree_Accord_Parent_Marked_Filed"), true);
lengthMarkRadio = new UIRadioButton(Inter.getLocText("Build_Tree_Accord_Marked_Filed_Length"));
parentMarkRadio.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(isBuildByParentFiled()) {
makeParentEnable();
tdChange();
}
}
});
lengthMarkRadio.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(!isBuildByParentFiled()) {
makeLengthEnable();
tdChange();
}
}
});
markButtonGroup = new ButtonGroup();
markButtonGroup.add(parentMarkRadio);
markButtonGroup.add(lengthMarkRadio);
originalMarkedFieldLabel1 = new UILabel(Inter.getLocText("Original_Marked_Filed") + " :", SwingConstants.RIGHT);
parentMarkedFieldLabel1 = new UILabel(" " + Inter.getLocText("Parent_Marked_Field") + " :", SwingConstants.RIGHT);
treeDataFieldLabel1 = new UILabel(" " + Inter.getLocText("Tree_Data_Field") + " :", SwingConstants.RIGHT);
originalMarkedFieldLabel2 = new UILabel(Inter.getLocText("Original_Marked_Filed") + " :", SwingConstants.RIGHT);
treeDataFieldLabel2 = new UILabel(" " + Inter.getLocText("Tree_Data_Field") + " :", SwingConstants.RIGHT);
// originalMarkedFieldPane1 = ValueEditorPaneFactory.createValueEditorPane(new Editor[] {new OldColumnIndexEditor(Inter.getLocText("Columns"))});
// parentMarkedFieldPane1 = ValueEditorPaneFactory.createValueEditorPane(new Editor[] {new OldColumnIndexEditor(Inter.getLocText("Columns"))});
// originalMarkedFieldPane2 = ValueEditorPaneFactory.createValueEditorPane(new Editor[] {new OldColumnIndexEditor(Inter.getLocText("Columns"))});
originalMarkedFieldPane1 = ValueEditorPaneFactory.createValueEditorPane(new Editor[] { new ColumnNameEditor(), new ColumnIndexEditor() });
parentMarkedFieldPane1 = ValueEditorPaneFactory.createValueEditorPane(new Editor[] { new ColumnNameEditor(), new ColumnIndexEditor() });
originalMarkedFieldPane2 = ValueEditorPaneFactory.createValueEditorPane(new Editor[] { new ColumnNameEditor(), new ColumnIndexEditor() });
makeParentEnable();
JPanel p1 = createCenterFlowZeroGapBorderPane(originalMarkedFieldLabel1, originalMarkedFieldPane1);
JPanel p2 = createCenterFlowZeroGapBorderPane(parentMarkedFieldLabel1, parentMarkedFieldPane1);
JPanel border1 = new JPanel();
border1.setLayout(new BorderLayout(0, 10));
border1.add(p1, BorderLayout.NORTH);
border1.add(p2, BorderLayout.CENTER);
JPanel p4 = createCenterFlowZeroGapBorderPane(originalMarkedFieldLabel2, originalMarkedFieldPane2);
JPanel border2 = new JPanel();
border2.setLayout(new BorderLayout(0, 20));
border2.add(p4, BorderLayout.NORTH);
JPanel xx = FRGUIPaneFactory.createBorderLayout_S_Pane();
xx.add(parentMarkRadio,BorderLayout.NORTH);
xx.add(border1,BorderLayout.CENTER);
JPanel xxx = FRGUIPaneFactory.createBorderLayout_S_Pane();
xxx.add(lengthMarkRadio,BorderLayout.NORTH);
xxx.add(border2,BorderLayout.CENTER);
JPanel buildTreePanel = new JPanel(new BorderLayout(5, 30));
buildTreePanel.add(xx,BorderLayout.NORTH);
buildTreePanel.add(xxx,BorderLayout.CENTER);
centerPane.add(buildTreePanel, BorderLayout.NORTH);
JPanel previewPanel = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane();
UIButton treeDataPreviewButton = new UIButton(Inter.getLocText("Preview"));
previewPanel.add(treeDataPreviewButton);
treeDataPreviewButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
TableDataWrapper tableDataWrappe = tableDataNameComboBox.getSelectedItem();
if(tableDataWrappe == null) {
return;
}
RecursionTableData rtd = new RecursionTableData();
rtd.setOriginalTableDataName(tableDataWrappe.getTableDataName());
if(isBuildByParentFiled()) {
rtd.setMarkFields((Integer.parseInt(originalMarkedFieldPane1.update().toString()) - 1) + "");
rtd.setParentmarkFields(Integer.parseInt(parentMarkedFieldPane1.update().toString()) - 1 + "");
} else {
rtd.setMarkFields(Integer.parseInt(originalMarkedFieldPane2.update().toString()) - 1 + "");
rtd.setParentmarkFields("-1");
}
rtd.setTableDataSource(DesignTableDataManager.getEditingTableDataSource());
rtd.createDataModel(Calculator.createCalculator());
PreviewTablePane.previewTableData(rtd);
}
});
centerPane.add(previewPanel, BorderLayout.CENTER);
}
public TreeTableDataDictPane(String treeName) {
this.setLayout(new BorderLayout(5, 30));
this.setBorder(BorderFactory.createEmptyBorder(20, 20, 0, 0));
selectTableDataLabel = new UILabel(Inter.getLocText(new String[]{"Please_Select", "Single", "DS-TableData"}) + " :");
setTableDataNameComboBox(treeName);
tableDataNameComboBox.setPreferredSize(new Dimension(180, 20));
JPanel tableFlowPane = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane();
tableFlowPane.add(selectTableDataLabel);
tableFlowPane.add(tableDataNameComboBox);
tableDataNameComboBox.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
tdChange();
}
});
tableFlowPane.add(new PreviewLabel(this));
this.add(tableFlowPane, BorderLayout.NORTH);
JPanel centerPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
this.add(centerPane, BorderLayout.CENTER);
parentMarkRadio = new UIRadioButton(Inter.getLocText("FR-Designer_Build_Tree_Accord_Parent_Marked_Filed"), true);
lengthMarkRadio = new UIRadioButton(Inter.getLocText("FR-Designer_Build_Tree_Accord_Marked_Filed_Length"));
parentMarkRadio.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (isBuildByParentFiled()) {
makeParentEnable();
tdChange();
}
}
});
lengthMarkRadio.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (!isBuildByParentFiled()) {
makeLengthEnable();
tdChange();
}
}
});
markButtonGroup = new ButtonGroup();
markButtonGroup.add(parentMarkRadio);
markButtonGroup.add(lengthMarkRadio);
originFieldDependsOnParentLabel = new UILabel(Inter.getLocText("FR-Designer_Original_Marked_Filed") + " :", SwingConstants.RIGHT);
parentFieldLabel = new UILabel(" " + Inter.getLocText("FR-Designer_Parent_Marked_Field") + " :", SwingConstants.RIGHT);
treeDataFieldLabel1 = new UILabel(" " + Inter.getLocText("FR-Designer_Tree_Data_Field") + " :", SwingConstants.RIGHT);
originFieldDependsOnLengthLabel = new UILabel(Inter.getLocText("FR-Designer_Original_Marked_Filed") + " :", SwingConstants.RIGHT);
treeDataFieldLabel2 = new UILabel(" " + Inter.getLocText("FR-Designer_Tree_Data_Field") + " :", SwingConstants.RIGHT);
// originFieldDependsOnParentPane = ValueEditorPaneFactory.createValueEditorPane(new Editor[] {new OldColumnIndexEditor(Inter.getLocText("Columns"))});
// parentFieldPane = ValueEditorPaneFactory.createValueEditorPane(new Editor[] {new OldColumnIndexEditor(Inter.getLocText("Columns"))});
// originFieldDependsOnLengthPane = ValueEditorPaneFactory.createValueEditorPane(new Editor[] {new OldColumnIndexEditor(Inter.getLocText("Columns"))});
originFieldDependsOnParentPane = ValueEditorPaneFactory.createValueEditorPane(new Editor[]{new ColumnNameEditor(), new ColumnIndexEditor()});
parentFieldPane = ValueEditorPaneFactory.createValueEditorPane(new Editor[]{new ColumnNameEditor(), new ColumnIndexEditor()});
originFieldDependsOnLengthPane = ValueEditorPaneFactory.createValueEditorPane(new Editor[]{new ColumnNameEditor(), new ColumnIndexEditor()});
makeParentEnable();
JPanel p1 = createCenterFlowZeroGapBorderPane(originFieldDependsOnParentLabel, originFieldDependsOnParentPane);
JPanel p2 = createCenterFlowZeroGapBorderPane(parentFieldLabel, parentFieldPane);
JPanel border1 = new JPanel();
border1.setLayout(new BorderLayout(0, 10));
border1.add(p1, BorderLayout.NORTH);
border1.add(p2, BorderLayout.CENTER);
JPanel p4 = createCenterFlowZeroGapBorderPane(originFieldDependsOnLengthLabel, originFieldDependsOnLengthPane);
JPanel border2 = new JPanel();
border2.setLayout(new BorderLayout(0, 20));
border2.add(p4, BorderLayout.NORTH);
JPanel xx = FRGUIPaneFactory.createBorderLayout_S_Pane();
xx.add(parentMarkRadio, BorderLayout.NORTH);
xx.add(border1, BorderLayout.CENTER);
JPanel xxx = FRGUIPaneFactory.createBorderLayout_S_Pane();
xxx.add(lengthMarkRadio, BorderLayout.NORTH);
xxx.add(border2, BorderLayout.CENTER);
JPanel buildTreePanel = new JPanel(new BorderLayout(5, 30));
buildTreePanel.add(xx, BorderLayout.NORTH);
buildTreePanel.add(xxx, BorderLayout.CENTER);
centerPane.add(buildTreePanel, BorderLayout.NORTH);
JPanel previewPanel = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane();
UIButton treeDataPreviewButton = new UIButton(Inter.getLocText("FR-Designer_Preview"));
previewPanel.add(treeDataPreviewButton);
treeDataPreviewButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
TableDataWrapper tableDataWrappe = tableDataNameComboBox.getSelectedItem();
if (tableDataWrappe == null) {
return;
}
RecursionTableData rtd = new RecursionTableData();
rtd.setOriginalTableDataName(tableDataWrappe.getTableDataName());
if (isBuildByParentFiled()) {
Object o = parentFieldPane.update();
rtd.setParentmarkFields((Integer) o - 1 + "");
rtd.setParentmarkFieldName("" + o);
Object o2 = originFieldDependsOnParentPane.update();
rtd.setMarkFields((Integer) o2 - 1 + "");
rtd.setMarkFieldName("" + o2);
} else {
Object o = originFieldDependsOnLengthPane.update();
if (o == null) {
rtd.setMarkFields("-1");
} else {
rtd.setMarkFields((Integer) o - 1 + "");
rtd.setMarkFieldName("" + o);
}
}
rtd.setTableDataSource(DesignTableDataManager.getEditingTableDataSource());
rtd.createDataModel(Calculator.createCalculator());
PreviewTablePane.previewTableData(rtd);
}
});
centerPane.add(previewPanel, BorderLayout.CENTER);
}
protected void setTableDataNameComboBox(String treeName) {
tableDataNameComboBox = new TableDataComboBox(DesignTableDataManager.getEditingTableDataSource(),treeName);
tableDataNameComboBox = new TableDataComboBox(DesignTableDataManager.getEditingTableDataSource(), treeName);
}
private void tdChange(){
TableDataWrapper tableDataWrappe = this.tableDataNameComboBox.getSelectedItem();
if (tableDataWrappe == null) {
return;
}
ValueEditorPane[] valueEditorPanes;
if(isBuildByParentFiled()) {
valueEditorPanes = new ValueEditorPane[]{originalMarkedFieldPane1, parentMarkedFieldPane1};
} else {
valueEditorPanes = new ValueEditorPane[]{originalMarkedFieldPane2};
}
try {
List<String> namelist = tableDataWrappe.calculateColumnNameList();
int len = namelist.size();
String[] columnNames = new String[len];
namelist.toArray(columnNames);
for(int i = 0; i < valueEditorPanes.length; i ++) {
valueEditorPanes[i].setEditors(new Editor[] { new ColumnNameEditor(columnNames), new ColumnIndexEditor(len) }, columnNames[0]);
}
} catch (Exception e) {
for(int i = 0; i < valueEditorPanes.length; i ++) {
valueEditorPanes[i].setEditors(new Editor[] { new ColumnNameEditor(), new ColumnIndexEditor() }, 1);
}
} finally {
valueEditorPanes = null;
}
}
@Override
protected String title4PopupWindow() {
return "TreeTableDataDictionay";
}
public RecursionTableData update() {
RecursionTableData td = new RecursionTableData();
if(tableDataNameComboBox.getSelectedItem()==null){
td.setOriginalTableDataName(null);
}else{
td.setOriginalTableDataName(tableDataNameComboBox.getSelectedItem().getTableDataName());
}
if(isBuildByParentFiled()) {
Object o = parentMarkedFieldPane1.update(StringUtils.EMPTY);
if(o instanceof Object[]){
Object[] temp = (Object[]) o;
td.setParentmarkFields(((Integer)temp[0]).intValue() - 1 + "");
td.setParentmarkFieldName((String) temp[1]);
}
Object o2 = originalMarkedFieldPane1.update(StringUtils.EMPTY);
if(o2 instanceof Object[]){
Object[] temp = (Object[]) o2;
td.setMarkFields(((Integer)temp[0]).intValue() - 1 + "");
td.setMarkFieldName((String) temp[1]);
}
} else {
Object o = originalMarkedFieldPane2.update(StringUtils.EMPTY);
if(o == null || !(o instanceof Object[])){
td.setMarkFields("-1");
} else {
Object[] temp = (Object[]) o;
td.setMarkFields(((Integer)temp[0]).intValue() - 1 + "");
td.setMarkFieldName((String) temp[1]);
}
}
td.setTableDataSource(DesignTableDataManager.getEditingTableDataSource());
return td;
}
public void populate(RecursionTableData rtb) {
if(StringUtils.isNotEmpty(rtb.getParentmarkFields())) {
makeParentEnable();
parentMarkRadio.setSelected(true);
lengthMarkRadio.setSelected(false);
tableDataNameComboBox.setSelectedTableDataByName(rtb.getOriginalTableDataName());
if(StringUtils.isNotEmpty(rtb.getMarkFieldName())){
originalMarkedFieldPane1.populate(rtb.getMarkFieldName());
}else{
originalMarkedFieldPane1.populate(rtb.getMarkFieldIndex() + 1);
}
if(StringUtils.isNotEmpty(rtb.getParentmarkFieldName())){
parentMarkedFieldPane1.populate(rtb.getParentmarkFieldName());
}else{
parentMarkedFieldPane1.populate(rtb.getParentmarkFieldIndex() + 1);
}
} else {
makeLengthEnable();
lengthMarkRadio.setSelected(true);
parentMarkRadio.setSelected(false);
tableDataNameComboBox.setSelectedTableDataByName(rtb.getOriginalTableDataName());
if(StringUtils.isNotEmpty(rtb.getMarkFieldName())){
originalMarkedFieldPane2.populate(rtb.getMarkFieldName());
}else{
originalMarkedFieldPane2.populate(rtb.getMarkFieldIndex() + 1);
}
}
}
private void tdChange() {
TableDataWrapper tableDataWrappe = this.tableDataNameComboBox.getSelectedItem();
if (tableDataWrappe == null) {
return;
}
ValueEditorPane[] valueEditorPanes;
if (isBuildByParentFiled()) {
valueEditorPanes = new ValueEditorPane[]{originFieldDependsOnParentPane, parentFieldPane};
} else {
valueEditorPanes = new ValueEditorPane[]{originFieldDependsOnLengthPane};
}
try {
List<String> namelist = tableDataWrappe.calculateColumnNameList();
int len = namelist.size();
String[] columnNames = new String[len];
namelist.toArray(columnNames);
for (int i = 0; i < valueEditorPanes.length; i++) {
valueEditorPanes[i].setEditors(new Editor[]{new ColumnNameEditor(columnNames), new ColumnIndexEditor(len)}, columnNames[0]);
}
} catch (Exception e) {
for (int i = 0; i < valueEditorPanes.length; i++) {
valueEditorPanes[i].setEditors(new Editor[]{new ColumnNameEditor(), new ColumnIndexEditor()}, 1);
}
} finally {
valueEditorPanes = null;
}
}
@Override
protected String title4PopupWindow() {
return "TreeTableDataDictionay";
}
public RecursionTableData update() {
RecursionTableData td = new RecursionTableData();
if (tableDataNameComboBox.getSelectedItem() == null) {
td.setOriginalTableDataName(null);
} else {
td.setOriginalTableDataName(tableDataNameComboBox.getSelectedItem().getTableDataName());
}
if (isBuildByParentFiled()) {
Object o = parentFieldPane.update(StringUtils.EMPTY);
if (o instanceof Object[]) {
Object[] temp = (Object[]) o;
td.setParentmarkFields((Integer) temp[0] - 1 + "");
td.setParentmarkFieldName((String) temp[1]);
}
Object o2 = originFieldDependsOnParentPane.update(StringUtils.EMPTY);
if (o2 instanceof Object[]) {
Object[] temp = (Object[]) o2;
td.setMarkFields((Integer) temp[0] - 1 + "");
td.setMarkFieldName((String) temp[1]);
}
} else {
Object o = originFieldDependsOnLengthPane.update(StringUtils.EMPTY);
if (o == null || !(o instanceof Object[])) {
td.setMarkFields("-1");
} else {
Object[] temp = (Object[]) o;
td.setMarkFields((Integer) temp[0] - 1 + "");
td.setMarkFieldName((String) temp[1]);
}
}
td.setTableDataSource(DesignTableDataManager.getEditingTableDataSource());
return td;
}
public void populate(RecursionTableData rtb) {
if (StringUtils.isNotEmpty(rtb.getParentmarkFields())) {
makeParentEnable();
parentMarkRadio.setSelected(true);
lengthMarkRadio.setSelected(false);
tableDataNameComboBox.setSelectedTableDataByName(rtb.getOriginalTableDataName());
if (StringUtils.isNotEmpty(rtb.getMarkFieldName())) {
originFieldDependsOnParentPane.populate(rtb.getMarkFieldName());
} else {
originFieldDependsOnParentPane.populate(rtb.getMarkFieldIndex() + 1);
}
if (StringUtils.isNotEmpty(rtb.getParentmarkFieldName())) {
parentFieldPane.populate(rtb.getParentmarkFieldName());
} else {
parentFieldPane.populate(rtb.getParentmarkFieldIndex() + 1);
}
} else {
makeLengthEnable();
lengthMarkRadio.setSelected(true);
parentMarkRadio.setSelected(false);
tableDataNameComboBox.setSelectedTableDataByName(rtb.getOriginalTableDataName());
if (StringUtils.isNotEmpty(rtb.getMarkFieldName())) {
originFieldDependsOnLengthPane.populate(rtb.getMarkFieldName());
} else {
originFieldDependsOnLengthPane.populate(rtb.getMarkFieldIndex() + 1);
}
}
}
/**
*
*/
public void preview() {
TableDataWrapper tableDataWrappe = tableDataNameComboBox.getSelectedItem();
if (tableDataWrappe == null) {
return;
}
tableDataWrappe.previewData();
}
private JPanel createCenterFlowZeroGapBorderPane(Component p1, Component p2) {
JPanel p = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane();
p.add(p1);
p.add(p2);
return p;
}
private boolean isBuildByParentFiled() {
return parentMarkRadio.isSelected();
}
private void makeParentEnable() {
originalMarkedFieldPane1.setEnabled(true);
parentMarkedFieldPane1.setEnabled(true);
originalMarkedFieldLabel1.setEnabled(true);
parentMarkedFieldLabel1.setEnabled(true);
treeDataFieldLabel1.setEnabled(true);
originalMarkedFieldLabel2.setEnabled(false);
treeDataFieldLabel2.setEnabled(false);
originalMarkedFieldPane2.setEnabled(false);
}
private void makeLengthEnable() {
originalMarkedFieldPane1.setEnabled(false);
parentMarkedFieldPane1.setEnabled(false);
originalMarkedFieldLabel1.setEnabled(false);
parentMarkedFieldLabel1.setEnabled(false);
treeDataFieldLabel1.setEnabled(false);
originalMarkedFieldLabel2.setEnabled(true);
treeDataFieldLabel2.setEnabled(true);
originalMarkedFieldPane2.setEnabled(true);
}
public void preview() {
TableDataWrapper tableDataWrappe = tableDataNameComboBox.getSelectedItem();
if (tableDataWrappe == null) {
return;
}
tableDataWrappe.previewData();
}
private JPanel createCenterFlowZeroGapBorderPane(Component p1, Component p2) {
JPanel p = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane();
p.add(p1);
p.add(p2);
return p;
}
private boolean isBuildByParentFiled() {
return parentMarkRadio.isSelected();
}
private void makeParentEnable() {
originFieldDependsOnParentPane.setEnabled(true);
parentFieldPane.setEnabled(true);
originFieldDependsOnParentLabel.setEnabled(true);
parentFieldLabel.setEnabled(true);
treeDataFieldLabel1.setEnabled(true);
originFieldDependsOnLengthLabel.setEnabled(false);
treeDataFieldLabel2.setEnabled(false);
originFieldDependsOnLengthPane.setEnabled(false);
}
private void makeLengthEnable() {
originFieldDependsOnParentPane.setEnabled(false);
parentFieldPane.setEnabled(false);
originFieldDependsOnParentLabel.setEnabled(false);
parentFieldLabel.setEnabled(false);
treeDataFieldLabel1.setEnabled(false);
originFieldDependsOnLengthLabel.setEnabled(true);
treeDataFieldLabel2.setEnabled(true);
originFieldDependsOnLengthPane.setEnabled(true);
}
}

19
designer/src/com/fr/design/mainframe/bbs/LoginDialog.java → designer_base/src/com/fr/design/extra/LoginDialog.java

@ -1,32 +1,29 @@
package com.fr.design.mainframe.bbs;
package com.fr.design.extra;
import com.fr.design.dialog.BasicPane;
import com.fr.design.dialog.UIDialog;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.general.Inter;
import com.fr.general.SiteCenter;
import com.fr.general.http.HttpClient;
import com.fr.stable.StringUtils;
import com.fr.stable.StableUtils;
import javax.swing.*;
import java.awt.*;
/**
* Created by zhaohehe on 16/7/26.
* Created by vito on 2017/5/5.
*/
public class LoginDialog extends UIDialog {
private static final Dimension DEFAULT_SHOP = new Dimension(401, 201);
public LoginDialog(Frame frame, BasicPane pane) {
public LoginDialog(Frame frame, Component pane) {
super(frame);
setUndecorated(true);
if (StableUtils.getMajorJavaVersion() == 8) {
setUndecorated(true);
}
JPanel panel = (JPanel) getContentPane();
panel.setLayout(new BorderLayout());
add(pane, BorderLayout.CENTER);
setSize(DEFAULT_SHOP);
GUICoreUtils.centerWindow(this);
setResizable(false);
setTitle(Inter.getLocText("FR-Designer-Plugin_Manager"));
}
@Override

152
designer_base/src/com/fr/design/extra/LoginPane.java

@ -1,152 +0,0 @@
package com.fr.design.extra;
import com.fr.base.FRContext;
import com.fr.design.DesignerEnvManager;
import com.fr.design.RestartHelper;
import com.fr.design.dialog.BasicPane;
import com.fr.design.gui.frpane.UITabbedPane;
import com.fr.general.ComparatorUtils;
import com.fr.general.IOUtils;
import com.fr.general.Inter;
import com.fr.general.SiteCenter;
import com.fr.general.http.HttpClient;
import com.fr.plugin.PluginVerifyException;
import com.fr.stable.StableUtils;
import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.concurrent.ExecutionException;
/**
* Created by zhaohehe on 16/7/27.
*/
public class LoginPane extends BasicPane {
private static final String LATEST = "latest";
public LoginPane() {
setLayout(new BorderLayout());
if (StableUtils.getMajorJavaVersion() == 8) {
String installHome;
if (StableUtils.isDebug()) {
URL url = ClassLoader.getSystemResource("");
installHome = url.getPath();
addPane(installHome);
} else {
installHome = StableUtils.getInstallHome();
File file = new File(StableUtils.pathJoin(installHome, "scripts"));
if (!file.exists()) {
int rv = JOptionPane.showConfirmDialog(
this,
Inter.getLocText("FR-Designer-Plugin_Shop_Need_Install"),
Inter.getLocText("FR-Designer-Plugin_Warning"),
JOptionPane.OK_CANCEL_OPTION,
JOptionPane.INFORMATION_MESSAGE
);
if (rv == JOptionPane.OK_OPTION) {
downloadShopScripts();
}
} else {
addPane(installHome);
updateShopScripts();
}
}
} else {
initTraditionalStore();
}
}
private void addPane(String installHome) {
LoginWebPane webPane = new LoginWebPane(new File(installHome).getAbsolutePath(),LoginPane.this);
add(webPane, BorderLayout.CENTER);
}
@Override
protected String title4PopupWindow() {
return Inter.getLocText("FR-Designer-Plugin_Manager");
}
private void downloadShopScripts() {
new SwingWorker<Boolean, Void>() {
@Override
protected Boolean doInBackground() throws Exception {
String id = "shop_scripts";
String username = DesignerEnvManager.getEnvManager().getBBSName();
String password = DesignerEnvManager.getEnvManager().getBBSPassword();
try {
PluginHelper.downloadPluginFile(id, username, password, new Process<Double>() {
@Override
public void process(Double integer) {
}
});
} catch (PluginVerifyException e) {
JOptionPane.showMessageDialog(LoginPane.this, e.getMessage(), Inter.getLocText("FR-Designer-Plugin_Warning"), JOptionPane.ERROR_MESSAGE);
return false;
} catch (Exception e) {
FRContext.getLogger().error(e.getMessage(), e);
return false;
}
return true;
}
@Override
protected void done() {
try {
if (get()) {
IOUtils.unzip(new File(StableUtils.pathJoin(PluginHelper.DOWNLOAD_PATH, PluginHelper.TEMP_FILE)), StableUtils.getInstallHome());
int rv = JOptionPane.showOptionDialog(
LoginPane.this,
Inter.getLocText("FR-Designer-Plugin_Shop_Installed"),
Inter.getLocText("FR-Designer-Plugin_Warning"),
JOptionPane.YES_NO_OPTION,
JOptionPane.INFORMATION_MESSAGE,
null,
new String[]{Inter.getLocText("FR-Designer-Basic_Restart_Designer"), Inter.getLocText("FR-Designer-Basic_Restart_Designer_Later")},
null
);
if (rv == JOptionPane.OK_OPTION) {
RestartHelper.restart();
}
}
} catch (InterruptedException | ExecutionException e) {
FRContext.getLogger().error(e.getMessage(), e);
}
}
}.execute();
}
private void updateShopScripts() {
new SwingWorker<Void, Void>() {
@Override
protected Void doInBackground() throws Exception {
HttpClient httpClient = new HttpClient(SiteCenter.getInstance().acquireUrlByKind("store.version") + "&version=" + PluginStoreConstants.VERSION);
if (httpClient.getResponseCode() == HttpURLConnection.HTTP_OK) {
if (!ComparatorUtils.equals(httpClient.getResponseText(), LATEST)) {
int rv = JOptionPane.showConfirmDialog(
LoginPane.this,
Inter.getLocText("FR-Designer-Plugin_Shop_Need_Update"),
Inter.getLocText("FR-Designer-Plugin_Warning"),
JOptionPane.OK_CANCEL_OPTION,
JOptionPane.INFORMATION_MESSAGE
);
if (rv == JOptionPane.OK_OPTION) {
downloadShopScripts();
}
}
}
return null;
}
}.execute();
}
private void initTraditionalStore() {
UITabbedPane tabbedPane = new UITabbedPane();
add(tabbedPane, BorderLayout.CENTER);
PluginInstalledPane installedPane = new PluginInstalledPane();
tabbedPane.addTab(installedPane.tabTitle(), installedPane);
tabbedPane.addTab(Inter.getLocText("FR-Designer-Plugin_Update"), new PluginUpdatePane(tabbedPane));
tabbedPane.addTab(Inter.getLocText("FR-Designer-Plugin_All_Plugins"), new PluginFromStorePane(tabbedPane));
}
}

159
designer_base/src/com/fr/design/extra/LoginWebBridge.java

@ -6,7 +6,7 @@ import com.fr.design.dialog.UIDialog;
import com.fr.design.extra.ucenter.Client;
import com.fr.design.extra.ucenter.XMLHelper;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.mainframe.DesignerContext;
import com.fr.general.ComparatorUtils;
import com.fr.general.SiteCenter;
import com.fr.general.http.HttpClient;
import com.fr.json.JSONObject;
@ -14,10 +14,10 @@ import com.fr.stable.EncodeConstants;
import com.fr.stable.StringUtils;
import javafx.scene.web.WebEngine;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import javax.swing.*;
import java.awt.*;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.LinkedList;
@ -47,50 +47,48 @@ public class LoginWebBridge {
//用户名,密码为空
private static final String LOGIN_INFO_EMPTY = "-5";
private static final int TIME_OUT = 10000;
private static final String LOGIN_SUCCESS = "ok";
private static final String LOGIN_FAILED = "failed";
private static com.fr.design.extra.LoginWebBridge helper;
private static LoginWebBridge helper;
private UILabel pluginuiLabel;
private UIDialog uiDialog;
private UIDialog qqDialog;
private UILabel uiLabel;
private String userName;
public int getMessageCount() {
return messageCount;
}
/**
* 测试论坛网络连接
* @return
*/
private boolean testConnection() {
HttpClient client = new HttpClient(SiteCenter.getInstance().acquireUrlByKind("bbs.test"));
return client.isServerAlive();
public LoginWebBridge() {
String username = DesignerEnvManager.getEnvManager().getBBSName();
setUserName(username, uiLabel);
}
public static com.fr.design.extra.LoginWebBridge getHelper() {
public static LoginWebBridge getHelper() {
if (helper != null) {
return helper;
}
synchronized (com.fr.design.extra.LoginWebBridge.class) {
synchronized (LoginWebBridge.class) {
if (helper == null) {
helper = new com.fr.design.extra.LoginWebBridge();
helper = new LoginWebBridge();
}
return helper;
}
}
public static com.fr.design.extra.LoginWebBridge getHelper(WebEngine webEngine) {
getHelper();
helper.setEngine(webEngine);
return helper;
public int getMessageCount() {
return messageCount;
}
private WebEngine webEngine;
public void setUILabelInPlugin(UILabel uiLabel) {
this.pluginuiLabel = uiLabel;
}
public void setEngine(WebEngine webEngine) {
this.webEngine = webEngine;
public void setQqDialog(UIDialog qqDialog) {
closeQQWindow();
this.qqDialog = qqDialog;
}
public void setDialogHandle(UIDialog uiDialog) {
closeWindow();
this.uiDialog = uiDialog;
}
@ -98,57 +96,58 @@ public class LoginWebBridge {
this.uiLabel = uiLabel;
}
public LoginWebBridge() {
String username = DesignerEnvManager.getEnvManager().getBBSName();
setUserName(username, uiLabel);
}
/**
* 设置显示的用户名
*
* @param userName 登录用户名
* @param label label显示
* @param label label显示
*/
public void setUserName(String userName, UILabel label) {
if (uiLabel == null) {
this.uiLabel = label;
}
if(StringUtils.isEmpty(userName)){
if (StringUtils.isEmpty(userName)) {
return;
}
if(!StringUtils.isEmpty(this.userName)){
updateMessageCount();
}
this.userName = userName;
}
/**
* 测试论坛网络连接
*
* @return
*/
private boolean testConnection() {
HttpClient client = new HttpClient(SiteCenter.getInstance().acquireUrlByKind("bbs.test"));
return client.isServerAlive();
}
/**
* 定时取后台论坛消息
*/
public void updateMessageCount(){
public void updateMessageCount() {
//启动获取消息更新的线程
//登陆状态, 根据存起来的用户名密码, 每1分钟发起一次请求, 更新消息条数.
Thread updateMessageThread = new Thread(new Runnable() {
@Override
public void run() {
sleep(CHECK_MESSAGE_TIME);
while(StringUtils.isNotEmpty(DesignerEnvManager.getEnvManager().getBBSName())){
while (StringUtils.isNotEmpty(DesignerEnvManager.getEnvManager().getBBSName())) {
HashMap<String, String> para = new HashMap<>();
int uid = DesignerEnvManager.getEnvManager().getBbsUid();
para.put("uid", String.valueOf(uid));
HttpClient getMessage = new HttpClient(SiteCenter.getInstance().acquireUrlByKind("bbs.message"), para);
getMessage.asGet();
if(getMessage.isServerAlive()){
if (getMessage.isServerAlive()) {
try {
String res = getMessage.getResponseText();
if (res.equals(FAILED_MESSAGE_STATUS)) {
}else {
if (!ComparatorUtils.equals(res, FAILED_MESSAGE_STATUS)) {
JSONObject jo = new JSONObject(res);
if (jo.getString("status").equals(SUCCESS_MESSAGE_STATUS)) {
if (SUCCESS_MESSAGE_STATUS.equals(jo.optString("status"))) {
setMessageCount(Integer.parseInt(jo.getString("message")));
}
}
} catch (Exception e) {
FRContext.getLogger().info(e.getMessage());
} catch (Exception ignore) {
}
}
sleep(CHECK_MESSAGE_TIME);
@ -160,6 +159,7 @@ public class LoginWebBridge {
/**
* 设置获取的消息长度并设置显示
*
* @param count
*/
public void setMessageCount(int count) {
@ -177,7 +177,7 @@ public class LoginWebBridge {
uiLabel.setText(sb.toString());
}
private String encode(String str){
private String encode(String str) {
try {
return URLEncoder.encode(str, EncodeConstants.ENCODING_UTF_8);
} catch (UnsupportedEncodingException e) {
@ -185,7 +185,7 @@ public class LoginWebBridge {
}
}
private void sleep(long millis){
private void sleep(long millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException e) {
@ -199,7 +199,7 @@ public class LoginWebBridge {
public void registerHref() {
try {
Desktop.getDesktop().browse(new URI(SiteCenter.getInstance().acquireUrlByKind("bbs.register")));
}catch (Exception e) {
} catch (Exception e) {
FRContext.getLogger().info(e.getMessage());
}
}
@ -210,13 +210,14 @@ public class LoginWebBridge {
public void forgetHref() {
try {
Desktop.getDesktop().browse(new URI(SiteCenter.getInstance().acquireUrlByKind("bbs.reset")));
}catch (Exception e) {
} catch (Exception e) {
FRContext.getLogger().info(e.getMessage());
}
}
/**
* 设计器端的用户登录
*
* @param username 用户名
* @param password 密码
* @return 登录信息标志
@ -227,9 +228,10 @@ public class LoginWebBridge {
/**
* 插件管理的用户登录部分
*
* @param username 用户名
* @param password 密码
* @param uiLabel 设计器端的label
* @param uiLabel 设计器端的label
* @return 登录信息标志
*/
public String pluginManageLogin(String username, String password, UILabel uiLabel) {
@ -238,9 +240,10 @@ public class LoginWebBridge {
/**
* 登录操作
*
* @param username 用户名
* @param password 密码
* @param uiLabel 两边的label显示
* @param uiLabel 两边的label显示
* @return 登录信息标志
*/
public String login(String username, String password, UILabel uiLabel) {
@ -271,8 +274,8 @@ public class LoginWebBridge {
/**
* 更新后台的用户信息
*
* @param username 用户名
* @param password 密码
*/
public void updateUserInfo(String username) {
this.userName = username;
@ -280,6 +283,7 @@ public class LoginWebBridge {
/**
* 关闭窗口并且重新赋值
*
* @param username
*/
public void loginSuccess(String username, UILabel uiLabel) {
@ -294,13 +298,7 @@ public class LoginWebBridge {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
//弹出qq登录的窗口
QQLoginPane managerPane = new QQLoginPane();
UIDialog qqlog = new QQLoginDialog(DesignerContext.getDesignerFrame(),managerPane);
QQLoginWebBridge.getHelper().setDialogHandle(uiDialog);
QQLoginWebBridge.getHelper().setQQDialogHandle(qqlog);
QQLoginWebBridge.getHelper().setUILabel(uiLabel);
qqlog.setVisible(true);
WebViewDlgHelper.createQQLoginDialog();
}
});
}
@ -326,12 +324,55 @@ public class LoginWebBridge {
} else {
return UNKNOWN_ERROR;//未知错误,-3
}
}else {
} else {
return NET_FAILED;
}
}catch (Exception e) {
} catch (Exception e) {
FRContext.getLogger().info(e.getMessage());
}
return UNKNOWN_ERROR;
}
/**
* 关闭QQ授权窗口
*/
public void closeQQWindow() {
if (qqDialog != null) {
qqDialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
qqDialog.setVisible(false);
}
}
/**
* 获取用户信息
*
* @param userInfo
*/
public void getLoginInfo(String userInfo) {
org.json.JSONObject jo = new org.json.JSONObject(userInfo);
String status = jo.get("status").toString();
if (status.equals(LOGIN_SUCCESS)) {
String username = jo.get("username").toString();
int uid = Integer.parseInt(jo.get("uid") == null ? "" : jo.get("uid").toString());
closeWindow();
closeQQWindow();
pluginuiLabel.setText(username);
DesignerEnvManager.getEnvManager().setBBSName(username);
DesignerEnvManager.getEnvManager().setBbsUid(uid);
DesignerEnvManager.getEnvManager().setInShowBBsName(username);
} else if (status.equals(LOGIN_FAILED)) {
//账号没有QQ授权
closeQQWindow();
try {
Desktop.getDesktop().browse(new URI(SiteCenter.getInstance().acquireUrlByKind("QQ_binding")));
} catch (Exception exp) {
}
}
}
public void openUrlAtLocalWebBrowser(WebEngine eng, String url) {
if (url.indexOf("qqLogin.html") > 0) {
return;
}
}
}

14
designer_base/src/com/fr/design/extra/LoginWebPane.java

@ -17,11 +17,7 @@ import javax.swing.*;
*/
public class LoginWebPane extends JFXPanel {
private WebEngine webEngine;
private LoginPane loginPane;
public LoginWebPane(final String installHome,LoginPane loginPane) {
this.loginPane = loginPane;
public LoginWebPane(final String installHome) {
Platform.setImplicitExit(false);
Platform.runLater(new Runnable() {
@Override
@ -30,7 +26,7 @@ public class LoginWebPane extends JFXPanel {
Scene scene = new Scene(root);
LoginWebPane.this.setScene(scene);
WebView webView = new WebView();
webEngine = webView.getEngine();
WebEngine webEngine = webView.getEngine();
webEngine.load("file:///" + installHome + "/scripts/qqLogin/web/login.html");
webEngine.setOnAlert(new EventHandler<WebEvent<String>>() {
@Override
@ -39,17 +35,13 @@ public class LoginWebPane extends JFXPanel {
}
});
JSObject obj = (JSObject) webEngine.executeScript("window");
obj.setMember("LoginHelper", LoginWebBridge.getHelper(webEngine));
obj.setMember("LoginHelper", LoginWebBridge.getHelper());
webView.setContextMenuEnabled(false);//屏蔽右键
root.setCenter(webView);
}
});
}
public void setEngine(WebEngine webEngine) {
this.webEngine = webEngine;
}
private void showAlert(final String message) {
SwingUtilities.invokeLater(new Runnable() {
@Override

14
designer_base/src/com/fr/design/extra/PluginHelper.java

@ -8,7 +8,6 @@ import com.fr.general.*;
import com.fr.general.http.HttpClient;
import com.fr.plugin.Plugin;
import com.fr.plugin.PluginConfigManager;
import com.fr.stable.plugin.PluginConstants;
import com.fr.plugin.PluginLoader;
import com.fr.plugin.PluginManagerHelper;
import com.fr.plugin.dependence.PluginDependence;
@ -18,11 +17,15 @@ import com.fr.stable.ArrayUtils;
import com.fr.stable.EncodeConstants;
import com.fr.stable.StableUtils;
import com.fr.stable.StringUtils;
import com.fr.stable.plugin.PluginConstants;
import com.fr.stable.project.ProjectConstants;
import com.fr.stable.xml.XMLTools;
import javax.swing.*;
import java.io.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URLDecoder;
import java.util.ArrayList;
@ -42,6 +45,7 @@ public class PluginHelper {
public static final String DEPENDENCE_DOWNLOAD_PATH = System.getProperty("user.dir") + "/download/dependence";
public static final String TEMP_FILE = "temp.zip";
public static final String CONNECTION_404 = "404";
/**
* 下载插件
@ -337,9 +341,11 @@ public class PluginHelper {
* @return 当前插件比老的插件版本高则返回true否则返回false
*/
public static boolean isNewThan(Plugin plugin, Plugin oldPlugin) {
return ComparatorUtils.compare(plugin.getVersion(), oldPlugin.getVersion()) >= 0;
return plugin.versionCompareTo(oldPlugin) >= 0;
}
private static String sendInstalledPluginInfo(final Plugin plugin) {
if (StableUtils.isDebug()) {
return "debug status";

10
designer_base/src/com/fr/design/extra/PluginWebBridge.java

@ -136,6 +136,7 @@ public class PluginWebBridge {
}
public void setDialogHandle(UIDialog uiDialog) {
closeWindow();
this.uiDialog = uiDialog;
}
@ -367,6 +368,7 @@ public class PluginWebBridge {
/**
* 获取系统登录的用户名
*
* @param callback
*/
public void getLoginInfo(final JSObject callback) {
@ -381,7 +383,7 @@ public class PluginWebBridge {
try {
String loginUrl = SiteCenter.getInstance().acquireUrlByKind("bbs.default");
Desktop.getDesktop().browse(new URI(loginUrl));
}catch (Exception exp) {
} catch (Exception exp) {
FRContext.getLogger().info(exp.getMessage());
}
}
@ -493,13 +495,14 @@ public class PluginWebBridge {
/*-------------------------------登录部分的处理----------------------------------*/
/**
* 注册页面
*/
public void registerHref() {
try {
Desktop.getDesktop().browse(new URI(SiteCenter.getInstance().acquireUrlByKind("bbs.register")));
}catch (Exception e) {
} catch (Exception e) {
FRContext.getLogger().info(e.getMessage());
}
}
@ -510,7 +513,7 @@ public class PluginWebBridge {
public void forgetHref() {
try {
Desktop.getDesktop().browse(new URI(SiteCenter.getInstance().acquireUrlByKind("bbs.reset")));
}catch (Exception e) {
} catch (Exception e) {
FRContext.getLogger().info(e.getMessage());
}
}
@ -521,6 +524,7 @@ public class PluginWebBridge {
/**
* 登录操作的回调
*
* @param username
* @param password
* @return

4
designer_base/src/com/fr/design/extra/QQLoginDialog.java

@ -1,6 +1,5 @@
package com.fr.design.extra;
import com.fr.design.dialog.BasicPane;
import com.fr.design.dialog.UIDialog;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.general.Inter;
@ -14,7 +13,7 @@ import java.awt.*;
public class QQLoginDialog extends UIDialog {
private static final Dimension DEFAULT_SHOP = new Dimension(700, 500);
public QQLoginDialog(Frame frame, BasicPane pane) {
public QQLoginDialog(Frame frame, Component pane) {
super(frame);
setUndecorated(true);
JPanel panel = (JPanel) getContentPane();
@ -24,7 +23,6 @@ public class QQLoginDialog extends UIDialog {
GUICoreUtils.centerWindow(this);
setResizable(false);
setTitle(Inter.getLocText("FR-Designer-Plugin_Manager"));
}
@Override

145
designer_base/src/com/fr/design/extra/QQLoginPane.java

@ -1,145 +0,0 @@
package com.fr.design.extra;
import com.fr.base.FRContext;
import com.fr.design.DesignerEnvManager;
import com.fr.design.RestartHelper;
import com.fr.design.dialog.BasicPane;
import com.fr.general.ComparatorUtils;
import com.fr.general.IOUtils;
import com.fr.general.Inter;
import com.fr.general.SiteCenter;
import com.fr.general.http.HttpClient;
import com.fr.plugin.PluginVerifyException;
import com.fr.stable.StableUtils;
import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.concurrent.ExecutionException;
/**
* Created by zhaohehe on 16/7/28.
*/
public class QQLoginPane extends BasicPane {
private static final String LATEST = "latest";
public QQLoginPane() {
setLayout(new BorderLayout());
if (StableUtils.getMajorJavaVersion() == 8) {
String installHome;
if (StableUtils.isDebug()) {
URL url = ClassLoader.getSystemResource("");
installHome = url.getPath();
addPane(installHome);
} else {
installHome = StableUtils.getInstallHome();
File file = new File(StableUtils.pathJoin(installHome, "scripts"));
if (!file.exists()) {
int rv = JOptionPane.showConfirmDialog(
this,
Inter.getLocText("FR-Designer-Plugin_Shop_Need_Install"),
Inter.getLocText("FR-Designer-Plugin_Warning"),
JOptionPane.OK_CANCEL_OPTION,
JOptionPane.INFORMATION_MESSAGE
);
if (rv == JOptionPane.OK_OPTION) {
downloadShopScripts();
}
} else {
addPane(installHome);
updateShopScripts();
}
}
} else {
}
}
private void addPane(String installHome) {
QQLoginWebPane webPane = new QQLoginWebPane(new File(installHome).getAbsolutePath());
add(webPane, BorderLayout.CENTER);
}
@Override
protected String title4PopupWindow() {
return Inter.getLocText("FR-Designer-Plugin_Manager");
}
private void downloadShopScripts() {
new SwingWorker<Boolean, Void>() {
@Override
protected Boolean doInBackground() throws Exception {
String id = "shop_scripts";
String username = DesignerEnvManager.getEnvManager().getBBSName();
String password = DesignerEnvManager.getEnvManager().getBBSPassword();
try {
PluginHelper.downloadPluginFile(id, username, password, new Process<Double>() {
@Override
public void process(Double integer) {
}
});
} catch (PluginVerifyException e) {
JOptionPane.showMessageDialog(QQLoginPane.this, e.getMessage(), Inter.getLocText("FR-Designer-Plugin_Warning"), JOptionPane.ERROR_MESSAGE);
return false;
} catch (Exception e) {
FRContext.getLogger().error(e.getMessage(), e);
return false;
}
return true;
}
@Override
protected void done() {
try {
if (get()) {
IOUtils.unzip(new File(StableUtils.pathJoin(PluginHelper.DOWNLOAD_PATH, PluginHelper.TEMP_FILE)), StableUtils.getInstallHome());
int rv = JOptionPane.showOptionDialog(
QQLoginPane.this,
Inter.getLocText("FR-Designer-Plugin_Shop_Installed"),
Inter.getLocText("FR-Designer-Plugin_Warning"),
JOptionPane.YES_NO_OPTION,
JOptionPane.INFORMATION_MESSAGE,
null,
new String[]{Inter.getLocText("FR-Designer-Basic_Restart_Designer"), Inter.getLocText("FR-Designer-Basic_Restart_Designer_Later")},
null
);
if (rv == JOptionPane.OK_OPTION) {
RestartHelper.restart();
}
}
} catch (InterruptedException | ExecutionException e) {
FRContext.getLogger().error(e.getMessage(), e);
}
}
}.execute();
}
private void updateShopScripts() {
new SwingWorker<Void, Void>() {
@Override
protected Void doInBackground() throws Exception {
HttpClient httpClient = new HttpClient(SiteCenter.getInstance().acquireUrlByKind("store.version") + "&version=" + PluginStoreConstants.VERSION);
if (httpClient.getResponseCode() == HttpURLConnection.HTTP_OK) {
if (!ComparatorUtils.equals(httpClient.getResponseText(), LATEST)) {
int rv = JOptionPane.showConfirmDialog(
QQLoginPane.this,
Inter.getLocText("FR-Designer-Plugin_Shop_Need_Update"),
Inter.getLocText("FR-Designer-Plugin_Warning"),
JOptionPane.OK_CANCEL_OPTION,
JOptionPane.INFORMATION_MESSAGE
);
if (rv == JOptionPane.OK_OPTION) {
downloadShopScripts();
}
}
}
return null;
}
}.execute();
}
}

131
designer_base/src/com/fr/design/extra/QQLoginWebBridge.java

@ -1,131 +0,0 @@
package com.fr.design.extra;
import com.fr.design.DesignerEnvManager;
import com.fr.design.dialog.UIDialog;
import com.fr.design.gui.ilable.UILabel;
import com.fr.general.FRLogger;
import com.fr.general.SiteCenter;
import javafx.scene.web.WebEngine;
import org.json.JSONObject;
import netscape.javascript.JSObject;
import javax.swing.*;
import java.awt.*;
import java.io.IOException;
import java.net.URI;
/**
* Created by lp on 2016/8/10.
*/
public class QQLoginWebBridge {
private static com.fr.design.extra.QQLoginWebBridge helper;
private WebEngine webEngine;
private static String LOGINSUCCESS = "ok";
private static String LOGINFAILED = "failed";
private UIDialog uiDialog;
private UILabel uiLabel;
private UILabel pluginuiLabel;
private UIDialog qqDialog;
private String username;
private QQLoginWebBridge() {
}
public static com.fr.design.extra.QQLoginWebBridge getHelper() {
if (helper != null) {
return helper;
}
synchronized (com.fr.design.extra.QQLoginWebBridge.class) {
if (helper == null) {
helper = new com.fr.design.extra.QQLoginWebBridge();
}
return helper;
}
}
public void setEngine(WebEngine webEngine) {
this.webEngine = webEngine;
}
public void setDialogHandle(UIDialog uiDialog) {
this.uiDialog = uiDialog;
}
public void setQQDialogHandle(UIDialog uiDialog) {
this.qqDialog = uiDialog;
}
public void setUILabel(UILabel uiLabel) {
this.uiLabel = uiLabel;
}
public void setUILabelInPlugin(UILabel uiLabel) {
this.pluginuiLabel = uiLabel;
}
public void setLoginlabel() {
username = DesignerEnvManager.getEnvManager().getBBSName();
}
private static JSObject window;
public static com.fr.design.extra.QQLoginWebBridge getHelper(WebEngine webEngine) {
getHelper();
helper.setEngine(webEngine);
return helper;
}
/**
* 关闭QQ授权窗口
*/
public void closeQQWindow() {
if (qqDialog != null) {
qqDialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
qqDialog.setVisible(false);
}
}
/**
* 关闭父窗口
*/
public void closeParentWindow() {
if (uiDialog != null) {
uiDialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
uiDialog.setVisible(false);
}
}
/**
* 获取用户信息
* @param userInfo
*/
public void getLoginInfo(String userInfo) {
JSONObject jo = new JSONObject(userInfo);
String status = jo.get("status").toString();
if (status.equals(LOGINSUCCESS)) {
String username = jo.get("username").toString();
int uid = Integer.parseInt(jo.get("uid") == null ? "" : jo.get("uid").toString());
closeQQWindow();
closeParentWindow();
pluginuiLabel.setText(username);
DesignerEnvManager.getEnvManager().setBBSName(username);
DesignerEnvManager.getEnvManager().setBbsUid(uid);
DesignerEnvManager.getEnvManager().setInShowBBsName(username);
}else if (status.equals(LOGINFAILED)){
//账号没有QQ授权
closeQQWindow();
try {
Desktop.getDesktop().browse(new URI(SiteCenter.getInstance().acquireUrlByKind("QQ_binding")));
}catch (Exception exp) {
}
}
}
public void openUrlAtLocalWebBrowser(WebEngine eng, String url) {
if (url.indexOf("qqLogin.html") > 0) {
return;
}
}
}

129
designer_base/src/com/fr/design/extra/QQLoginWebPane.java

@ -40,6 +40,7 @@ import java.awt.*;
public class QQLoginWebPane extends JFXPanel {
private WebEngine webEngine;
private String url;
private static JSObject window;
@ -50,7 +51,9 @@ public class QQLoginWebPane extends JFXPanel {
private static int DEFAULT_CONFIRM_HEIGHT = 160;
private static int DEFAULT_OFFEST = 20;
class Delta { double x, y; }
class Delta {
double x, y;
}
public QQLoginWebPane(final String installHome) {
Platform.setImplicitExit(false);
@ -62,7 +65,8 @@ public class QQLoginWebPane extends JFXPanel {
QQLoginWebPane.this.setScene(scene);
final WebView webView = new WebView();
webEngine = webView.getEngine();
webEngine.load("file:///" + installHome + "/scripts/qqLogin/web/qqLogin.html");
url = "file:///" + installHome + "/scripts/qqLogin/web/qqLogin.html";
webEngine.load(url);
final Stage primaryStage = new Stage();
@ -76,51 +80,56 @@ public class QQLoginWebPane extends JFXPanel {
primaryStage.setX(0);
primaryStage.setY(Screen.getPrimary().getBounds().getHeight() + DEFAULT_PRIMARYSTAGE_HEIGHT);
primaryStage.show();
}catch (Exception e) {
} catch (Exception e) {
FRContext.getLogger().info(e.getMessage());
}
webView.getEngine().setConfirmHandler(new Callback<String, Boolean>() {
@Override public Boolean call(String msg) {
Boolean confirmed = confirm(primaryStage, msg, installHome, webView);
return confirmed;
}
});
webEngine.locationProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable, final String oldValue, String newValue) {
disableLink(webEngine);
// webView好像默认以手机版显示网页,浏览器里过滤掉这个跳转
if (ComparatorUtils.equals(newValue, "file:///" + installHome + "/scripts/qqLogin/web/qqLogin.html") || ComparatorUtils.equals(newValue, SiteCenter.getInstance().acquireUrlByKind("bbs.mobile"))) {
return;
}
QQLoginWebBridge.getHelper().openUrlAtLocalWebBrowser(webEngine, newValue);
}
});
webEngine.setOnAlert(new EventHandler<WebEvent<String>>() {
webEngine.setConfirmHandler(new Callback<String, Boolean>() {
@Override
public void handle(WebEvent<String> event) {
showAlert(event.getData());
public Boolean call(String msg) {
Boolean confirmed = confirm(primaryStage, msg, webView);
return confirmed;
}
});
webEngine.getLoadWorker().stateProperty().addListener(
new ChangeListener<Worker.State>() {
public void changed(ObservableValue ov, Worker.State oldState, Worker.State newState) {
if (newState == Worker.State.SUCCEEDED) {
window = (JSObject) webEngine.executeScript("window");
window.setMember("QQLoginHelper", QQLoginWebBridge.getHelper(webEngine));
}
}
}
);
configWebEngine();
webView.setContextMenuEnabled(false);//屏蔽右键
root.setCenter(webView);
}
});
}
private void configWebEngine() {
webEngine.locationProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable, final String oldValue, String newValue) {
disableLink(webEngine);
// webView好像默认以手机版显示网页,浏览器里过滤掉这个跳转
if (ComparatorUtils.equals(newValue, url) || ComparatorUtils.equals(newValue, SiteCenter.getInstance().acquireUrlByKind("bbs.mobile"))) {
return;
}
LoginWebBridge.getHelper().openUrlAtLocalWebBrowser(webEngine, newValue);
}
});
webEngine.setOnAlert(new EventHandler<WebEvent<String>>() {
@Override
public void handle(WebEvent<String> event) {
showAlert(event.getData());
}
});
webEngine.getLoadWorker().stateProperty().addListener(
new ChangeListener<Worker.State>() {
public void changed(ObservableValue ov, Worker.State oldState, Worker.State newState) {
if (newState == Worker.State.SUCCEEDED) {
window = (JSObject) webEngine.executeScript("window");
window.setMember("QQLoginHelper", LoginWebBridge.getHelper());
}
}
}
);
}
private void showAlert(final String message) {
SwingUtilities.invokeLater(new Runnable() {
@Override
@ -138,7 +147,7 @@ public class QQLoginWebPane extends JFXPanel {
@Override
public void run() {
eng.executeScript("location.reload()");
QQLoginWebBridge.getHelper().closeQQWindow();
LoginWebBridge.getHelper().closeQQWindow();
}
});
} catch (Exception e) {
@ -146,12 +155,12 @@ public class QQLoginWebPane extends JFXPanel {
}
}
private Boolean confirm(final Stage parent, String msg, final String installHome,final WebView webView) {
private Boolean confirm(final Stage parent, String msg, final WebView webView) {
final BooleanProperty confirmationResult = new SimpleBooleanProperty();
// initialize the confirmation dialog
final Stage dialog = new Stage(StageStyle.UTILITY);
dialog.setX(Toolkit.getDefaultToolkit().getScreenSize().getWidth()/2 - DEFAULT_CONFIRM_WIDTH / 2 + DEFAULT_OFFEST);
dialog.setY(Toolkit.getDefaultToolkit().getScreenSize().getHeight()/2 + DEFAULT_OFFEST);
dialog.setX(Toolkit.getDefaultToolkit().getScreenSize().getWidth() / 2 - DEFAULT_CONFIRM_WIDTH / 2 + DEFAULT_OFFEST);
dialog.setY(Toolkit.getDefaultToolkit().getScreenSize().getHeight() / 2 + DEFAULT_OFFEST);
dialog.setHeight(DEFAULT_CONFIRM_HEIGHT);
dialog.setWidth(DEFAULT_CONFIRM_WIDTH);
dialog.setIconified(false);
@ -162,7 +171,8 @@ public class QQLoginWebPane extends JFXPanel {
HBoxBuilder.create().styleClass("modal-dialog").children(
LabelBuilder.create().text(msg).build(),
ButtonBuilder.create().text(Inter.getLocText("FR-Designer-BBSLogin_Switch-Account")).defaultButton(true).onAction(new EventHandler<ActionEvent>() {
@Override public void handle(ActionEvent actionEvent) {
@Override
public void handle(ActionEvent actionEvent) {
// take action and close the dialog.
confirmationResult.set(true);
webView.getEngine().reload();
@ -170,7 +180,8 @@ public class QQLoginWebPane extends JFXPanel {
}
}).build(),
ButtonBuilder.create().text(Inter.getLocText("FR-Engine_Cancel")).cancelButton(true).onAction(new EventHandler<ActionEvent>() {
@Override public void handle(ActionEvent actionEvent) {
@Override
public void handle(ActionEvent actionEvent) {
// abort action and close the dialog.
confirmationResult.set(false);
dialog.close();
@ -180,35 +191,39 @@ public class QQLoginWebPane extends JFXPanel {
, Color.TRANSPARENT
)
);
configDrag(dialog);
// style and show the dialog.
dialog.getScene().getStylesheets().add(getClass().getResource("modal-dialog.css").toExternalForm());
dialog.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
event.consume();
dialog.close();
}
});
dialog.showAndWait();
return confirmationResult.get();
}
private void configDrag(final Stage dialog) {
// allow the dialog to be dragged around.
final Node root = dialog.getScene().getRoot();
final Delta dragDelta = new Delta();
root.setOnMousePressed(new EventHandler<MouseEvent>() {
@Override public void handle(MouseEvent mouseEvent) {
@Override
public void handle(MouseEvent mouseEvent) {
// record a delta distance for the drag and drop operation.
dragDelta.x = dialog.getX() - mouseEvent.getScreenX();
dragDelta.y = dialog.getY() - mouseEvent.getScreenY();
}
});
root.setOnMouseDragged(new EventHandler<MouseEvent>() {
@Override public void handle(MouseEvent mouseEvent) {
@Override
public void handle(MouseEvent mouseEvent) {
dialog.setX(mouseEvent.getScreenX() + dragDelta.x);
dialog.setY(mouseEvent.getScreenY() + dragDelta.y);
}
});
// style and show the dialog.
dialog.getScene().getStylesheets().add(getClass().getResource("modal-dialog.css").toExternalForm());
dialog.setOnCloseRequest(new EventHandler<WindowEvent>(){
@Override
public void handle(WindowEvent event){
event.consume();
dialog.close();
}
});
dialog.showAndWait();
return confirmationResult.get();
}
}

36
designer_base/src/com/fr/design/extra/ReuseWebBridge.java

@ -1,36 +0,0 @@
package com.fr.design.extra;
import javafx.scene.web.WebEngine;
/**
* Created by vito on 2016/9/28.
*/
public class ReuseWebBridge {
public static ReuseWebBridge helper;
private WebEngine webEngine;
public static ReuseWebBridge getHelper() {
if (helper != null) {
return helper;
}
synchronized (ReuseWebBridge.class) {
if (helper == null) {
helper = new ReuseWebBridge();
}
return helper;
}
}
public static ReuseWebBridge getHelper(WebEngine webEngine) {
getHelper();
helper.setEngine(webEngine);
return helper;
}
private ReuseWebBridge() {
}
public void setEngine(WebEngine webEngine) {
this.webEngine = webEngine;
}
}

54
designer_base/src/com/fr/design/extra/ReuseWebPane.java

@ -1,54 +0,0 @@
package com.fr.design.extra;
import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebEvent;
import javafx.scene.web.WebView;
import netscape.javascript.JSObject;
import javax.swing.*;
/**
* Created by vito on 2016/9/28.
*/
public class ReuseWebPane extends JFXPanel {
private WebEngine webEngine;
public ReuseWebPane(final String mainJs) {
Platform.setImplicitExit(false);
Platform.runLater(new Runnable() {
@Override
public void run() {
BorderPane root = new BorderPane();
Scene scene = new Scene(root);
ReuseWebPane.this.setScene(scene);
WebView webView = new WebView();
webEngine = webView.getEngine();
webEngine.load("file:///" + mainJs);
webEngine.setOnAlert(new EventHandler<WebEvent<String>>() {
@Override
public void handle(WebEvent<String> event) {
showAlert(event.getData());
}
});
JSObject obj = (JSObject) webEngine.executeScript("window");
obj.setMember("ReuseHelper", ReuseWebBridge.getHelper(webEngine));
webView.setContextMenuEnabled(false);//屏蔽右键
root.setCenter(webView);
}
});
}
private void showAlert(final String message) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JOptionPane.showMessageDialog(ReuseWebPane.this, message);
}
});
}
}

58
designer_base/src/com/fr/design/extra/WebDialog.java → designer_base/src/com/fr/design/extra/WebViewDlgHelper.java

@ -24,14 +24,14 @@ import java.util.concurrent.ExecutionException;
/**
* Created by vito on 2016/9/28.
*/
public class WebDialog {
public class WebViewDlgHelper {
private static final String LATEST = "latest";
private static final String SHOP_SCRIPTS = "shop_scripts";
private static final int VERSION_8 = 8;
// 调试时,使用installHome = ClassLoader.getSystemResource("").getPath()代替下面
private static String installHome = StableUtils.getInstallHome();
public static void createPluginDialog() {
UIDialog dlg;
if (StableUtils.getMajorJavaVersion() >= VERSION_8) {
String relativePath = "/scripts/store/web/index.html";
String mainJsPath = StableUtils.pathJoin(new File(installHome).getAbsolutePath(), relativePath);
@ -49,10 +49,7 @@ public class WebDialog {
}
} else {
updateShopScripts(SHOP_SCRIPTS);
BasicPane managerPane = new ShopManagerPane(new PluginWebPane(mainJsPath));
dlg = new ShopDialog(DesignerContext.getDesignerFrame(), managerPane);
PluginWebBridge.getHelper().setDialogHandle(dlg);
dlg.setVisible(true);
showPluginDlg(mainJsPath);
}
} else {
BasicPane traditionalStorePane = new BasicPane() {
@ -63,21 +60,62 @@ public class WebDialog {
};
traditionalStorePane.setLayout(new BorderLayout());
traditionalStorePane.add(initTraditionalStore(), BorderLayout.CENTER);
dlg = new ShopDialog(DesignerContext.getDesignerFrame(), traditionalStorePane);
UIDialog dlg = new ShopDialog(DesignerContext.getDesignerFrame(), traditionalStorePane);
dlg.setVisible(true);
}
}
/**
* 以关键词打开设计器商店
* <p>
* // * @param keyword 关键词
*
* @param keyword 关键词
*/
public void createPluginDialog(String keyword) {
public static void createPluginDialog(String keyword) {
PluginWebBridge.getHelper().openWithSearch(keyword);
createPluginDialog();
}
public static void createLoginDialog() {
if (StableUtils.getMajorJavaVersion() == VERSION_8) {
File file = new File(StableUtils.pathJoin(installHome, "scripts"));
if (!file.exists()) {
int rv = JOptionPane.showConfirmDialog(
null,
Inter.getLocText("FR-Designer-Plugin_Shop_Need_Install"),
Inter.getLocText("FR-Designer-Plugin_Warning"),
JOptionPane.OK_CANCEL_OPTION,
JOptionPane.INFORMATION_MESSAGE
);
if (rv == JOptionPane.OK_OPTION) {
downloadShopScripts(SHOP_SCRIPTS);
}
} else {
showLoginDlg();
updateShopScripts(SHOP_SCRIPTS);
}
}
}
public static void createQQLoginDialog() {
QQLoginWebPane webPane = new QQLoginWebPane(new File(installHome).getAbsolutePath());
UIDialog qqlog = new QQLoginDialog(DesignerContext.getDesignerFrame(), webPane);
LoginWebBridge.getHelper().setQqDialog(qqlog);
qqlog.setVisible(true);
}
private static void showPluginDlg(String mainJsPath) {
BasicPane managerPane = new ShopManagerPane(new PluginWebPane(mainJsPath));
UIDialog dlg = new ShopDialog(DesignerContext.getDesignerFrame(), managerPane);
PluginWebBridge.getHelper().setDialogHandle(dlg);
dlg.setVisible(true);
}
private static void showLoginDlg() {
LoginWebPane webPane = new LoginWebPane(new File(installHome).getAbsolutePath());
UIDialog qqdlg = new LoginDialog(DesignerContext.getDesignerFrame(), webPane);
LoginWebBridge.getHelper().setDialogHandle(qqdlg);
qqdlg.setVisible(true);
}
private static Component initTraditionalStore() {
UITabbedPane tabbedPane = new UITabbedPane();

3
designer_base/src/com/fr/design/extra/exe/PluginLoginExecutor.java

@ -38,9 +38,6 @@ public class PluginLoginExecutor implements Executor {
@Override
public void run(Process<String> process) {
String loginResult = LoginWebBridge.getHelper().login(username, password, uiLabel);
if (Integer.valueOf(loginResult) == 0) {
LoginWebBridge.getHelper().updateMessageCount();
}
result = loginResult;
}
}

30
designer_base/src/com/fr/design/gui/autocomplete/AutoCompletePopupWindow.java

@ -10,6 +10,7 @@
package com.fr.design.gui.autocomplete;
import com.fr.design.gui.syntax.ui.rsyntaxtextarea.PopupWindowDecorator;
import com.fr.general.FRLogger;
import javax.swing.*;
import javax.swing.event.CaretEvent;
@ -40,6 +41,7 @@ import java.util.List;
class AutoCompletePopupWindow extends JWindow implements CaretListener,
ListSelectionListener, MouseListener {
private final static int DIS = 5;
/**
* The parent AutoCompletion instance.
*/
@ -179,7 +181,7 @@ class AutoCompletePopupWindow extends JWindow implements CaretListener,
} else {
doAutocomplete();
}
} else if (AutoCompletion.getDebug()) {
} else if (AutoCompletion.isDebug()) {
Thread.dumpStack();
}
}
@ -300,8 +302,8 @@ class AutoCompletePopupWindow extends JWindow implements CaretListener,
*/
private void installKeyBindings() {
if (AutoCompletion.getDebug()) {
System.out.println("PopupWindow: Installing keybindings");
if (AutoCompletion.isDebug()) {
FRLogger.getLogger().debug("PopupWindow: Installing keybindings");
}
if (escapeKap == null) { // Lazily create actions.
@ -313,7 +315,7 @@ class AutoCompletePopupWindow extends JWindow implements CaretListener,
ActionMap am = comp.getActionMap();
replaceAction(im, am, KeyEvent.VK_ESCAPE, escapeKap, oldEscape);
if (AutoCompletion.getDebug() && oldEscape.action == escapeKap.action) {
if (AutoCompletion.isDebug() && oldEscape.action == escapeKap.action) {
Thread.dumpStack();
}
replaceAction(im, am, KeyEvent.VK_UP, upKap, oldUp);
@ -371,7 +373,7 @@ class AutoCompletePopupWindow extends JWindow implements CaretListener,
*/
private void positionDescWindow() {
boolean showDescWindow = descWindow != null && ac.getShowDescWindow();
boolean showDescWindow = descWindow != null && ac.isShowDescWindow();
if (!showDescWindow) {
return;
}
@ -387,14 +389,14 @@ class AutoCompletePopupWindow extends JWindow implements CaretListener,
// Try to position to the right first (LTR)
int x;
if (ac.getTextComponentOrientation().isLeftToRight()) {
x = getX() + getWidth() + 5;
x = getX() + getWidth() + DIS;
if (x + descWindow.getWidth() > screenBounds.x + screenBounds.width) { // doesn't fit
x = getX() - 5 - descWindow.getWidth();
x = getX() - DIS - descWindow.getWidth();
}
} else { // RTL
x = getX() - 5 - descWindow.getWidth();
x = getX() - DIS - descWindow.getWidth();
if (x < screenBounds.x) { // Doesn't fit
x = getX() + getWidth() + 5;
x = getX() + getWidth() + DIS;
}
}
@ -604,7 +606,7 @@ class AutoCompletePopupWindow extends JWindow implements CaretListener,
Rectangle screenBounds = Util.getScreenBoundsForPoint(r.x, r.y);
//Dimension screenSize = getToolkit().getScreenSize();
boolean showDescWindow = descWindow != null && ac.getShowDescWindow();
boolean showDescWindow = descWindow != null && ac.isShowDescWindow();
int totalH = getHeight();
if (showDescWindow) {
totalH = Math.max(totalH, descWindow.getHeight());
@ -655,7 +657,7 @@ class AutoCompletePopupWindow extends JWindow implements CaretListener,
installKeyBindings();
lastLine = ac.getLineOfCaret();
selectFirstItem();
if (descWindow == null && ac.getShowDescWindow()) {
if (descWindow == null && ac.isShowDescWindow()) {
descWindow = createDescriptionWindow();
positionDescWindow();
}
@ -693,7 +695,7 @@ class AutoCompletePopupWindow extends JWindow implements CaretListener,
// because of the way child JWindows' visibility is handled - in
// some ways it's dependent on the parent, in other ways it's not.
if (descWindow != null) {
descWindow.setVisible(visible && ac.getShowDescWindow());
descWindow.setVisible(visible && ac.isShowDescWindow());
}
}
@ -708,8 +710,8 @@ class AutoCompletePopupWindow extends JWindow implements CaretListener,
*/
private void uninstallKeyBindings() {
if (AutoCompletion.getDebug()) {
System.out.println("PopupWindow: Removing keybindings");
if (AutoCompletion.isDebug()) {
FRLogger.getLogger().debug("PopupWindow: Removing keybindings");
}
JTextComponent comp = ac.getTextComponent();

2592
designer_base/src/com/fr/design/gui/autocomplete/AutoCompletion.java

File diff suppressed because it is too large Load Diff

75
designer_base/src/com/fr/design/gui/autocomplete/ParameterizedCompletionContext.java

@ -14,6 +14,7 @@ import com.fr.design.gui.autocomplete.ParameterizedCompletionInsertionInfo.Repla
import com.fr.design.gui.syntax.ui.rsyntaxtextarea.DocumentRange;
import com.fr.design.gui.syntax.ui.rsyntaxtextarea.RSyntaxTextArea;
import com.fr.design.gui.syntax.ui.rtextarea.ChangeableHighlightPainter;
import com.fr.general.FRLogger;
import javax.swing.*;
import javax.swing.event.CaretEvent;
@ -254,7 +255,7 @@ class ParameterizedCompletionContext {
*
* @param offs The offset into the document.
* @return The text of the parameter containing the offset, or
* <code>null</code> if the offset is not in a parameter.
* <code>null</code> if the offset is not in a parameter.
*/
public String getArgumentText(int offs) {
List<Highlight> paramHighlights = getParameterHighlights();
@ -284,7 +285,7 @@ class ParameterizedCompletionContext {
* Returns the highlight of the current parameter.
*
* @return The current parameter's highlight, or <code>null</code> if
* the caret is not in a parameter's bounds.
* the caret is not in a parameter's bounds.
* @see #getCurrentParameterStartOffset()
*/
private Highlight getCurrentParameterHighlight() {
@ -332,7 +333,7 @@ class ParameterizedCompletionContext {
* Returns the starting offset of the current parameter.
*
* @return The current parameter's starting offset, or <code>-1</code> if
* the caret is not in a parameter's bounds.
* the caret is not in a parameter's bounds.
* @see #getCurrentParameterHighlight()
*/
private int getCurrentParameterStartOffset() {
@ -407,7 +408,7 @@ class ParameterizedCompletionContext {
* Inserts the choice selected in the parameter choices window.
*
* @return Whether the choice was inserted. This will be <code>false</code>
* if the window is not visible, or no choice is selected.
* if the window is not visible, or no choice is selected.
*/
boolean insertSelectedChoice() {
if (paramChoicesWindow != null && paramChoicesWindow.isVisible()) {
@ -438,11 +439,9 @@ class ParameterizedCompletionContext {
* @see #uninstallKeyBindings()
*/
private void installKeyBindings() {
if (AutoCompletion.getDebug()) {
System.out.println("CompletionContext: Installing keybindings");
if (AutoCompletion.isDebug()) {
FRLogger.getLogger().debug("CompletionContext: Installing keybindings");
}
JTextComponent tc = ac.getTextComponent();
InputMap im = tc.getInputMap();
ActionMap am = tc.getActionMap();
@ -489,7 +488,6 @@ class ParameterizedCompletionContext {
im.put(ks, IM_KEY_CLOSING);
oldClosingAction = am.get(IM_KEY_CLOSING);
am.put(IM_KEY_CLOSING, new ClosingAction());
}
@ -513,12 +511,7 @@ class ParameterizedCompletionContext {
List<Highlight> highlights = getParameterHighlights();
for (int i = 0; i < highlights.size(); i++) {
Highlight hl = highlights.get(i);
// Check "< dot", not "<= dot" as OutlineHighlightPainter paints
// starting at one char AFTER the highlight starts, to work around
// Java issue. Thanks to Matthew Adereth!
if (currentNext == null || currentNext.getStartOffset() </*=*/dot ||
(hl.getStartOffset() > dot &&
hl.getStartOffset() <= currentNext.getStartOffset())) {
if (needUpdate(currentNext, hl, dot)) {
currentNext = hl;
pos = i;
}
@ -538,6 +531,15 @@ class ParameterizedCompletionContext {
}
private boolean needUpdate(Highlight currentNext, Highlight hl, int dot) {
// Check "< dot", not "<= dot" as OutlineHighlightPainter paints
// starting at one char AFTER the highlight starts, to work around
// Java issue. Thanks to Matthew Adereth!
return currentNext == null || currentNext.getStartOffset() </*=*/dot ||
(hl.getStartOffset() > dot &&
hl.getStartOffset() <= currentNext.getStartOffset());
}
/**
* Moves to and selects the previous parameter.
@ -562,10 +564,7 @@ class ParameterizedCompletionContext {
for (int i = 0; i < highlights.size(); i++) {
Highlight h = highlights.get(i);
if (currentPrev == null || currentPrev.getStartOffset() >= dot ||
(h.getStartOffset() < selStart &&
(h.getStartOffset() > currentPrev.getStartOffset() ||
pos == lastSelectedParam))) {
if (pos == lastSelectedParam || needUpdate(currentPrev, dot, h, selStart)) {
currentPrev = h;
pos = i;
}
@ -593,6 +592,12 @@ class ParameterizedCompletionContext {
}
private boolean needUpdate(Highlight currentPrev, int dot, Highlight h, int selStart) {
return currentPrev == null
|| currentPrev.getStartOffset() >= dot
|| (currentPrev.getStartOffset() < h.getStartOffset() && h.getStartOffset() < selStart);
}
private void possiblyUpdateParamCopies(Document doc) {
@ -616,7 +621,7 @@ class ParameterizedCompletionContext {
try {
replacement = doc.getText(start, len);
} catch (BadLocationException ble) {
// Never happens
// Never happens
}
// Replace any param copies tracking this parameter with the
@ -718,7 +723,7 @@ class ParameterizedCompletionContext {
return h;
} catch (BadLocationException ble) {
// Never happens
// Never happens
}
return null;
@ -733,8 +738,8 @@ class ParameterizedCompletionContext {
*/
private void uninstallKeyBindings() {
if (AutoCompletion.getDebug()) {
System.out.println("CompletionContext Uninstalling keybindings");
if (AutoCompletion.isDebug()) {
FRLogger.getLogger().debug("CompletionContext Uninstalling keybindings");
}
JTextComponent tc = ac.getTextComponent();
@ -1037,7 +1042,6 @@ class ParameterizedCompletionContext {
* @see #uninstall()
*/
public void install(JTextComponent tc) {
boolean replaceTabs = false;
if (tc instanceof RSyntaxTextArea) {
RSyntaxTextArea textArea = (RSyntaxTextArea) tc;
@ -1047,14 +1051,10 @@ class ParameterizedCompletionContext {
}
Highlighter h = tc.getHighlighter();
try {
// Insert the parameter text
ParameterizedCompletionInsertionInfo info =
pc.getInsertionInfo(tc, replaceTabs);
ParameterizedCompletionInsertionInfo info = pc.getInsertionInfo(tc, replaceTabs);
tc.replaceSelection(info.getTextToInsert());
// Add highlights around the parameters.
final int replacementCount = info.getReplacementCount();
for (int i = 0; i < replacementCount; i++) {
@ -1067,40 +1067,31 @@ class ParameterizedCompletionContext {
for (int i = 0; i < info.getReplacementCopyCount(); i++) {
ReplacementCopy rc = info.getReplacementCopy(i);
paramCopyInfos.add(new ParamCopyInfo(rc.getId(),
(Highlight) h.addHighlight(rc.getStart(), rc.getEnd(),
paramCopyP)));
(Highlight) h.addHighlight(rc.getStart(), rc.getEnd(), paramCopyP)));
}
// Go back and start at the first parameter.
tc.setCaretPosition(info.getSelectionStart());
if (info.hasSelection()) {
tc.moveCaretPosition(info.getSelectionEnd());
}
minPos = info.getMinOffset();
maxPos = info.getMaxOffset();
try {
defaultEndOffs = tc.getDocument().createPosition(
info.getDefaultEndOffs());
defaultEndOffs = tc.getDocument().createPosition(info.getDefaultEndOffs());
} catch (BadLocationException ble) {
// Never happens
// Never happens
}
// Listen for document events AFTER we insert
tc.getDocument().addDocumentListener(this);
} catch (BadLocationException ble) {
// Never happens
// Never happens
}
// Add listeners to the text component, AFTER text insertion.
tc.addCaretListener(this);
tc.addFocusListener(this);
installKeyBindings();
}
public void removeUpdate(DocumentEvent e) {
handleDocumentEvent(e);
}

3
designer_base/src/com/fr/design/gui/chart/BaseChartPropertyPane.java

@ -2,7 +2,6 @@ package com.fr.design.gui.chart;
import com.fr.base.chart.BaseChartCollection;
import com.fr.design.designer.TargetComponent;
import com.fr.design.mainframe.BaseWidgetPropertyPane;
import com.fr.design.mainframe.DockingView;
/**
@ -23,5 +22,7 @@ public abstract class BaseChartPropertyPane extends DockingView {
public abstract ChartEditPaneProvider getChartEditPane();
public abstract void addChartEditPane(String plotID);
//public abstract void clear();
}

2
designer_base/src/com/fr/design/gui/frpane/UIAdvancedTextPane.java

@ -143,7 +143,7 @@ public class UIAdvancedTextPane extends UITextPane {
setName(Inter.getLocText("M_Edit-Cut"));
setMnemonic('T');
setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_edit/cut.png"));
setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, KeyEvent.CTRL_MASK));
setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, KeyEvent.CTRL_MASK));
}
public void actionPerformed(ActionEvent evt) {

18
designer_base/src/com/fr/design/gui/icombobox/ExtendedComboBox.java

@ -1,21 +1,15 @@
package com.fr.design.gui.icombobox;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.Rectangle;
import javax.swing.*;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.basic.BasicComboPopup;
import javax.swing.plaf.basic.ComboPopup;
import java.awt.*;
import java.awt.event.InputEvent;
import java.awt.event.MouseEvent;
import java.util.Vector;
import javax.swing.ComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.basic.BasicComboPopup;
import javax.swing.plaf.basic.ComboPopup;
import static com.fr.design.gui.syntax.ui.rtextarea.RTADefaultInputMap.DEFAULT_MODIFIER;
public class ExtendedComboBox extends UIComboBox {

28
designer_base/src/com/fr/design/gui/icombobox/UIComboBoxUI.java

@ -1,28 +1,20 @@
package com.fr.design.gui.icombobox;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.event.InputEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.*;
import javax.swing.plaf.basic.BasicComboBoxUI;
import javax.swing.plaf.basic.BasicComboPopup;
import javax.swing.plaf.basic.ComboPopup;
import com.fr.design.constants.UIConstants;
import sun.swing.DefaultLookup;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.icontainer.UIScrollPane;
import com.fr.stable.Constants;
import com.fr.stable.StringUtils;
import sun.swing.DefaultLookup;
import javax.swing.*;
import javax.swing.plaf.basic.BasicComboBoxUI;
import javax.swing.plaf.basic.BasicComboPopup;
import javax.swing.plaf.basic.ComboPopup;
import java.awt.*;
import java.awt.event.InputEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
/**
* @author zhou F

585
designer_base/src/com/fr/design/gui/ilist/CheckBoxList.java

@ -1,311 +1,300 @@
package com.fr.design.gui.ilist;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import com.fr.design.gui.icheckbox.UICheckBox;
import com.fr.stable.StringUtils;
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.EventListener;
import java.util.List;
import javax.swing.JComponent;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
import javax.swing.ListModel;
import javax.swing.ListSelectionModel;
import javax.swing.UIManager;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
import com.fr.design.gui.icheckbox.UICheckBox;
import com.fr.stable.StringUtils;
/**
* CheckBoxs + JList.
*/
public class CheckBoxList extends JComponent {
/**
* 选择状态----全选和全不选
*
* @editor zhou
* @since 2012-4-1下午2:39:10
*/
public static enum SelectedState {
ALL, NONE
}
private boolean[] selects;
private JList jlist;
private UICheckBox chooseAll;
public CheckBoxList(Object[] items) {
this(items, SelectedState.NONE, StringUtils.EMPTY);
}
public CheckBoxList(Object[] items, String name) {
this(items, SelectedState.NONE, name);
}
/**
* Class constructor.
*
* @param items
* Items with which to populate the list.
* @param default_state
* default state, true or false
*/
public CheckBoxList(Object[] items, SelectedState state, String name) {
jlist = new BOXLIST(items);
jlist.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
this.selects = new boolean[items.length];
boolean default_state = (state == SelectedState.ALL);
Arrays.fill(this.selects, default_state);
jlist.setCellRenderer(new CheckListCellRenderer());
jlist.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
doCheck();
}
public void mouseReleased(MouseEvent e) {
doCheck();
}
});
jlist.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
if (e.getKeyChar() == ' ') {
doCheck();
}
}
});
this.setLayout(new BorderLayout());
chooseAll = new UICheckBox(name, default_state);
chooseAll.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (chooseAll.isSelected()) {
setSelected(true);
} else {
setSelected(false);
}
}
});
this.add(chooseAll, BorderLayout.NORTH);
this.add(jlist, BorderLayout.CENTER);
}
/*
* 用于CellRenderer显示value为text
*/
protected String value2Text(Object value) {
return value != null ? value.toString() : StringUtils.EMPTY;
}
public void setItems(Object[] os) {
if (os == null) {
this.setSelected(false);
} else {
for (int i = 0, len = os.length; i < len; i++) {
Object o = os[i];
for (int j = 0, jen = jlist.getModel().getSize(); j < jen; j++) {
if (o.equals(jlist.getModel().getElementAt(j))) {
this.setSelected(j, true);
}
}
}
}
this.repaint();
}
/**
* Is selected
*/
public boolean isSelected(int index) {
if (selects == null || index >= selects.length) {
return false;
}
return selects[index];
}
public void setSelected(int index, boolean isSelected) {
if (selects == null || index >= selects.length) {
return;
}
selects[index] = isSelected;
this.repaint(this.getBounds());
this.fireCheckBoxListSelectionChangeListener();
}
private void setSelected(boolean isSelected) {
if (selects == null) {
return;
}
for (int i = 0; i < selects.length; i++) {
selects[i] = isSelected;
}
this.repaint(this.getBounds());
this.fireCheckBoxListSelectionChangeListener();
}
/**
* Returns an array of the objects that have been selected. Overrides the
* JList method.
*/
public Object[] getSelectedValues() {
return this.jlist.getSelectedValues();
}
private class BOXLIST extends JList {
public BOXLIST(Object[] items) {
super(items);
}
@Override
protected void processMouseEvent(MouseEvent e) {
if (e.getX() < 20) {
if (e.isControlDown() || e.isAltDown() || e.isShiftDown() || e.isMetaDown()) {
int[] indices = getSelectedIndices();
if (indices.length == 0) {
super.processMouseEvent(e);
}
} else {
super.processMouseEvent(e);
}
} else {
super.processMouseEvent(e);
}
int id = e.getID();
switch (id) {
case MouseEvent.MOUSE_PRESSED:
break;
case MouseEvent.MOUSE_RELEASED:
break;
case MouseEvent.MOUSE_CLICKED:
doCheck();
break;
case MouseEvent.MOUSE_EXITED:
break;
case MouseEvent.MOUSE_ENTERED:
break;
}
}
@Override
protected void processMouseMotionEvent(MouseEvent e) {
if (e.getX() < 20) {
return;
}
super.processMouseEvent(e);
}
@Override
public Object[] getSelectedValues() {
List<Object> list = new ArrayList<Object>(selects.length);
for (int i = 0; i < selects.length; i++) {
if (selects[i]) {
list.add(this.getModel().getElementAt(i));
}
}
return list.toArray();
}
}
private void doCheck() {
// p:这里必须改变所有选择checkbox.
int index = jlist.getSelectedIndex();
boolean sValue = !selects[index];
// p:开始设置所有选择的checkbox.
int[] indices = jlist.getSelectedIndices();
for (int i = 0; i < indices.length; i++) {
setSelected(indices[i], sValue);
}
for (boolean selected : selects) {
if (!selected) {
chooseAll.setSelected(false);
return;
}
}
chooseAll.setSelected(true);
repaint();
}
private static final Border noFocusBorder = new EmptyBorder(1, 1, 1, 1);
private class CheckListCellRenderer extends UICheckBox implements ListCellRenderer {
public CheckListCellRenderer() {
this.setOpaque(true);
this.setBorder(noFocusBorder);
}
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
this.setText(value2Text(value));
this.setSelected(selects[index]);
this.setFont(list.getFont());
if (isSelected) {
this.setBackground(list.getSelectionBackground());
this.setForeground(list.getSelectionForeground());
} else {
this.setBackground(list.getBackground());
this.setForeground(list.getForeground());
}
if (cellHasFocus) {
this.setBorder(UIManager.getBorder("List.focusCellHighlightBorder"));
} else {
this.setBorder(noFocusBorder);
}
return this;
}
}
public void addCheckBoxListSelectionChangeListener(CheckBoxListSelectionChangeListener l) {
this.listenerList.add(CheckBoxListSelectionChangeListener.class, l);
}
public void removeCheckBoxListSelectionChangeListener(CheckBoxListSelectionChangeListener l) {
this.listenerList.remove(CheckBoxListSelectionChangeListener.class, l);
}
public void fireCheckBoxListSelectionChangeListener() {
// 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 - 2; i >= 0; i -= 2) {
if (listeners[i] == CheckBoxListSelectionChangeListener.class) {
((CheckBoxListSelectionChangeListener)listeners[i + 1]).selectionChanged(this);
}
}
}
public static interface CheckBoxListSelectionChangeListener extends EventListener {
public void selectionChanged(CheckBoxList target);
}
public ListModel getModel() {
return jlist.getModel();
}
private final static int X_COORDINATE = 20;
/**
* 选择状态----全选和全不选
*
* @editor zhou
* @since 2012-4-1下午2:39:10
*/
public static enum SelectedState {
ALL, NONE
}
private boolean[] selects;
private JList jlist;
private UICheckBox chooseAll;
public CheckBoxList(Object[] items) {
this(items, SelectedState.NONE, StringUtils.EMPTY);
}
public CheckBoxList(Object[] items, String name) {
this(items, SelectedState.NONE, name);
}
/**
* Class constructor.
*
* @param items Items with which to populate the list.
* @param state default state, true or false
*/
public CheckBoxList(Object[] items, SelectedState state, String name) {
jlist = new BOXLIST(items);
jlist.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
this.selects = new boolean[items.length];
boolean default_state = (state == SelectedState.ALL);
Arrays.fill(this.selects, default_state);
jlist.setCellRenderer(new CheckListCellRenderer());
jlist.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
doCheck();
}
public void mouseReleased(MouseEvent e) {
doCheck();
}
});
jlist.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
if (e.getKeyChar() == ' ') {
doCheck();
}
}
});
this.setLayout(new BorderLayout());
chooseAll = new UICheckBox(name, default_state);
chooseAll.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (chooseAll.isSelected()) {
setSelected(true);
} else {
setSelected(false);
}
}
});
this.add(chooseAll, BorderLayout.NORTH);
this.add(jlist, BorderLayout.CENTER);
}
/*
* 用于CellRenderer显示value为text
*/
protected String value2Text(Object value) {
return value != null ? value.toString() : StringUtils.EMPTY;
}
public void setItems(Object[] os) {
if (os == null) {
this.setSelected(false);
} else {
for (int i = 0, len = os.length; i < len; i++) {
Object o = os[i];
for (int j = 0, jen = jlist.getModel().getSize(); j < jen; j++) {
if (o.equals(jlist.getModel().getElementAt(j))) {
this.setSelected(j, true);
}
}
}
}
this.repaint();
}
/**
* Is selected
*/
public boolean isSelected(int index) {
if (selects == null || index >= selects.length) {
return false;
}
return selects[index];
}
public void setSelected(int index, boolean isSelected) {
if (selects == null || index >= selects.length) {
return;
}
selects[index] = isSelected;
this.repaint(this.getBounds());
this.fireCheckBoxListSelectionChangeListener();
}
private void setSelected(boolean isSelected) {
if (selects == null) {
return;
}
for (int i = 0; i < selects.length; i++) {
selects[i] = isSelected;
}
this.repaint(this.getBounds());
this.fireCheckBoxListSelectionChangeListener();
}
/**
* Returns an array of the objects that have been selected. Overrides the
* JList method.
*/
public Object[] getSelectedValues() {
return this.jlist.getSelectedValues();
}
private class BOXLIST extends JList {
public BOXLIST(Object[] items) {
super(items);
}
@Override
protected void processMouseEvent(MouseEvent e) {
if (e.getX() < X_COORDINATE) {
boolean anyMaskDown = e.isControlDown() || e.isAltDown() || e.isShiftDown() || e.isMetaDown();
if (anyMaskDown) {
int[] indices = getSelectedIndices();
if (indices.length == 0) {
super.processMouseEvent(e);
}
} else {
super.processMouseEvent(e);
}
} else {
super.processMouseEvent(e);
}
int id = e.getID();
switch (id) {
case MouseEvent.MOUSE_PRESSED:
break;
case MouseEvent.MOUSE_RELEASED:
break;
case MouseEvent.MOUSE_CLICKED:
doCheck();
break;
case MouseEvent.MOUSE_EXITED:
break;
case MouseEvent.MOUSE_ENTERED:
break;
}
}
@Override
protected void processMouseMotionEvent(MouseEvent e) {
if (e.getX() < X_COORDINATE) {
return;
}
super.processMouseEvent(e);
}
@Override
public Object[] getSelectedValues() {
List<Object> list = new ArrayList<Object>(selects.length);
for (int i = 0; i < selects.length; i++) {
if (selects[i]) {
list.add(this.getModel().getElementAt(i));
}
}
return list.toArray();
}
}
private void doCheck() {
// p:这里必须改变所有选择checkbox.
int index = jlist.getSelectedIndex();
boolean sValue = !selects[index];
// p:开始设置所有选择的checkbox.
int[] indices = jlist.getSelectedIndices();
for (int i = 0; i < indices.length; i++) {
setSelected(indices[i], sValue);
}
for (boolean selected : selects) {
if (!selected) {
chooseAll.setSelected(false);
return;
}
}
chooseAll.setSelected(true);
repaint();
}
private static final Border NO_FOCUS_BORDER = new EmptyBorder(1, 1, 1, 1);
private class CheckListCellRenderer extends UICheckBox implements ListCellRenderer {
public CheckListCellRenderer() {
this.setOpaque(true);
this.setBorder(NO_FOCUS_BORDER);
}
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
this.setText(value2Text(value));
this.setSelected(selects[index]);
this.setFont(list.getFont());
if (isSelected) {
this.setBackground(list.getSelectionBackground());
this.setForeground(list.getSelectionForeground());
} else {
this.setBackground(list.getBackground());
this.setForeground(list.getForeground());
}
if (cellHasFocus) {
this.setBorder(UIManager.getBorder("List.focusCellHighlightBorder"));
} else {
this.setBorder(NO_FOCUS_BORDER);
}
return this;
}
}
public void addCheckBoxListSelectionChangeListener(CheckBoxListSelectionChangeListener l) {
this.listenerList.add(CheckBoxListSelectionChangeListener.class, l);
}
public void removeCheckBoxListSelectionChangeListener(CheckBoxListSelectionChangeListener l) {
this.listenerList.remove(CheckBoxListSelectionChangeListener.class, l);
}
public void fireCheckBoxListSelectionChangeListener() {
// 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 - 2; i >= 0; i -= 2) {
if (listeners[i] == CheckBoxListSelectionChangeListener.class) {
((CheckBoxListSelectionChangeListener) listeners[i + 1]).selectionChanged(this);
}
}
}
public static interface CheckBoxListSelectionChangeListener extends EventListener {
public void selectionChanged(CheckBoxList target);
}
public ListModel getModel() {
return jlist.getModel();
}
}

11
designer_base/src/com/fr/design/gui/ilist/UIList.java

@ -17,7 +17,7 @@ import java.util.Vector;
* Time: 上午11:07
* To change this template use File | Settings | File Templates.
*/
public class UIList extends JList{
public class UIList extends JList {
private Icon icon;
public UIList() {
@ -46,12 +46,12 @@ public class UIList extends JList{
if (rendererComp.getPreferredSize().width > getVisibleRect().width) {
String tips = (rendererComp instanceof JComponent) ? ((JComponent) rendererComp).getToolTipText() : null;
if (tips == null) {
if(value instanceof JTemplate){
if (value instanceof JTemplate) {
tips = ((JTemplate) value).getEditingFILE().getName();
icon = ((JTemplate) value).getEditingFILE().getIcon();
} else if (value instanceof ListModelElement || value instanceof TableProcedure){
tips = ((JLabel)rendererComp).getText();
icon = ((JLabel)rendererComp).getIcon();
} else if (value instanceof ListModelElement || value instanceof TableProcedure) {
tips = ((JLabel) rendererComp).getText();
icon = ((JLabel) rendererComp).getIcon();
}
}
return tips;
@ -71,6 +71,7 @@ public class UIList extends JList{
}
return null;
}
public JToolTip createToolTip() {
UIToolTip tip = new UIToolTip(icon);
tip.setComponent(this);

17
designer_base/src/com/fr/design/gui/itable/TableSorter.java

@ -15,6 +15,7 @@ import java.util.List;
import java.util.Map;
import javax.swing.Icon;
import com.fr.design.gui.ilable.UILabel;
import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
@ -79,7 +80,7 @@ import javax.swing.table.TableModel;
public class TableSorter extends AbstractTableModel {
protected TableModel tableModel;
private static final int ADD = 4;
public static final int DESCENDING = -1;
public static final int NOT_SORTED = 0;
public static final int ASCENDING = 1;
@ -341,17 +342,14 @@ public class TableSorter extends AbstractTableModel {
fireTableChanged(e);
return;
}
// If the table structure has changed, cancel the sorting; the
// sorting columns may have been either moved or deleted from
// the model.
// If the table structure has changed, cancel the sorting; the
// sorting columns may have been either moved or deleted from the model.
if (e.getFirstRow() == TableModelEvent.HEADER_ROW) {
cancelSorting();
fireTableChanged(e);
return;
}
// We can map a cell event through to the view without widening
// We can map a cell event through to the view without widening
// when the following conditions apply:
//
// a) all the changes are on one row (e.getFirstRow() == e.getLastRow()) and,
@ -380,8 +378,7 @@ public class TableSorter extends AbstractTableModel {
column, e.getType()));
return;
}
// Something has happened to the data that may have invalidated the row order.
// Something has happened to the data that may have invalidated the row order.
clearSortingState();
fireTableDataChanged();
return;
@ -402,7 +399,7 @@ public class TableSorter extends AbstractTableModel {
// Cycle the sorting states through {NOT_SORTED, ASCENDING, DESCENDING} or
// {NOT_SORTED, DESCENDING, ASCENDING} depending on whether shift is pressed.
status = status + (e.isShiftDown() ? -1 : 1);
status = (status + 4) % 3 - 1; // signed mod, returning {-1, 0, 1}
status = (status + ADD) % 3 - 1; // signed mod, returning {-1, 0, 1}
setSortingStatus(column, status);
}
}

49
designer_base/src/com/fr/design/gui/itabpane/UITabsHeaderIconPane.java

@ -1,37 +1,22 @@
package com.fr.design.gui.itabpane;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GradientPaint;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.AbstractAction;
import javax.swing.ActionMap;
import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.InputMap;
import javax.swing.JComponent;
import com.fr.design.constants.UIConstants;
import com.fr.design.gui.ilable.UILabel;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
import javax.swing.SwingConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import com.fr.base.BaseUtils;
import com.fr.design.constants.UIConstants;
import com.fr.design.gui.core.UITabComponent;
import com.fr.design.gui.ibutton.UITabButton;
import com.fr.design.gui.ilable.UILabel;
import com.fr.stable.StringUtils;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* 本来想弄个延迟加载的发现在单元格属性表那边没有意义就算了.这个面板是纯粹的没有与模板的任何交互操作(比如说populate() update())
*
@ -40,6 +25,7 @@ import com.fr.stable.StringUtils;
*/
public class UITabsHeaderIconPane extends JPanel implements UITabComponent {
private static final long serialVersionUID = 1L;
private static final int DIS = 30;
private UILabel nameLabel;
@ -143,9 +129,7 @@ public class UITabsHeaderIconPane extends JPanel implements UITabComponent {
private void show(final JPanel panel) {
int count = centerPane.getComponentCount();// 获取centerPanel中控件数
List<Component> list = new ArrayList<Component>();//
for (Component comp : centerPane.getComponents()) {
list.add(comp);
}
list.addAll(Arrays.asList(centerPane.getComponents()));
if (count > 0) {// 如果centerPanel中控件数大于0就执行效果
for (int i = 0; i < count; i++) {
Component comp = centerPane.getComponent(i);// 获得该位置的控件
@ -159,11 +143,11 @@ public class UITabsHeaderIconPane extends JPanel implements UITabComponent {
int height = centerPane.getHeight();
int width = centerPane.getWidth();
int y = -height;
for (int i = 0; i <= height; i += 30) {
for (int i = 0; i <= height; i += DIS) {
// 设置面板位置
currentPanel.setBounds(0, i, width, height);
panel.setBounds(0, y, width, height);
y += 30;
y += DIS;
try {
Thread.sleep(3);
} catch (InterruptedException e) {
@ -173,7 +157,6 @@ public class UITabsHeaderIconPane extends JPanel implements UITabComponent {
centerPane.remove(currentPanel);// 移除当前面板
}
panel.setBounds(0, 0, width, height);
}
}.start();
break;

18
designer_base/src/com/fr/design/gui/itextfield/UITextField.java

@ -1,20 +1,17 @@
package com.fr.design.gui.itextfield;
import java.awt.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.Document;
import com.fr.design.event.GlobalNameListener;
import com.fr.design.event.GlobalNameObserver;
import com.fr.design.event.UIObserver;
import com.fr.design.event.UIObserverListener;
import com.fr.stable.Constants;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.stable.Constants;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.Document;
import java.awt.*;
/**
* @author Jerry
@ -186,6 +183,7 @@ public class UITextField extends JTextField implements UIObserver, GlobalNameObs
/**
* 主函数
*
* @param args 参数
*/
public static void main(String... args) {

63
designer_base/src/com/fr/design/gui/itree/checkboxtree/CheckBoxTree.java

@ -5,8 +5,14 @@
*/
package com.fr.design.gui.itree.checkboxtree;
import java.awt.Component;
import java.awt.Rectangle;
import com.fr.design.gui.icheckbox.UICheckBox;
import javax.swing.*;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.text.Position;
import javax.swing.tree.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
@ -16,19 +22,6 @@ import java.beans.PropertyChangeListener;
import java.util.Hashtable;
import java.util.Vector;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.text.Position;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.TreeCellRenderer;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
import com.fr.design.gui.icheckbox.UICheckBox;
/**
* CheckBoxTree is a special JTree which uses UICheckBox as the tree renderer.
* In addition to regular JTree's features, it also allows you select any number
@ -37,11 +30,11 @@ import com.fr.design.gui.icheckbox.UICheckBox;
* select one or several tree nodes and press SPACE key to toggle the
* check box selection for all selected tree nodes.
* <p/>
* In order to retrieve which tree paths are selected, you need to call
* In order to retrieve which tree paths are selected, you need to call
* {@link #getCheckBoxTreeSelectionModel()}.
* It will return the selection model that keeps track of which tree
* It will return the selection model that keeps track of which tree
* paths have been checked. For example
* {@link CheckBoxTreeSelectionModel#getSelectionPaths()}
* {@link CheckBoxTreeSelectionModel#getSelectionPaths()}
* will give the list of paths which have
* been checked.
*/
@ -111,7 +104,7 @@ public class CheckBoxTree extends JTree {
addPropertyChangeListener(JTree.SELECTION_MODEL_PROPERTY, _modelChangeListener);
updateRowMapper();
}
/**
* Inserts the mouse listener at the particular index in the listeners' chain.
*
@ -122,7 +115,7 @@ public class CheckBoxTree extends JTree {
private void insertMouseListener(Component component, MouseListener l, int index) {
MouseListener[] listeners = component.getMouseListeners();
for (int i = 0, length = listeners.length; i < length; i++) {
component.removeMouseListener(listeners[i]);
component.removeMouseListener(listeners[i]);
}
// for (MouseListener listener : listeners) {
// component.removeMouseListener(listener);
@ -168,7 +161,7 @@ public class CheckBoxTree extends JTree {
* Gets the cell renderer with check box.
*
* @return CheckBoxTree's own cell renderer which has the check box. The actual cell renderer
* you set by setCellRenderer() can be accessed by using {@link #getActualCellRenderer()}.
* you set by setCellRenderer() can be accessed by using {@link #getActualCellRenderer()}.
*/
public TreeCellRenderer getCellRenderer() {
TreeCellRenderer cellRenderer = super.getCellRenderer();
@ -177,8 +170,7 @@ public class CheckBoxTree extends JTree {
}
if (_treeCellRenderer == null) {
_treeCellRenderer = createCellRenderer(cellRenderer);
}
else {
} else {
_treeCellRenderer.setActualTreeRenderer(cellRenderer);
}
return _treeCellRenderer;
@ -194,8 +186,7 @@ public class CheckBoxTree extends JTree {
public TreeCellRenderer getActualCellRenderer() {
if (_treeCellRenderer != null) {
return _treeCellRenderer.getActualTreeRenderer();
}
else {
} else {
return super.getCellRenderer();
}
}
@ -245,13 +236,13 @@ public class CheckBoxTree extends JTree {
}
TreePath path = _tree.getPathForLocation(e.getX(), e.getY());
if (path == null)
if (path == null) {
return null;
}
if (clicksInCheckBox(e, path)) {
return path;
}
else {
} else {
return null;
}
}
@ -259,13 +250,11 @@ public class CheckBoxTree extends JTree {
protected boolean clicksInCheckBox(MouseEvent e, TreePath path) {
if (!_tree.isCheckBoxVisible(path)) {
return false;
}
else {
} else {
Rectangle bounds = _tree.getPathBounds(path);
if (_tree.getComponentOrientation().isLeftToRight()) {
return e.getX() < bounds.x + _hotspot;
}
else {
} else {
return e.getX() > bounds.x + bounds.width - _hotspot;
}
}
@ -320,8 +309,9 @@ public class CheckBoxTree extends JTree {
return;
}
if (e.getModifiers() == 0 && e.getKeyChar() == KeyEvent.VK_SPACE)
if (e.getModifiers() == 0 && e.getKeyChar() == KeyEvent.VK_SPACE) {
toggleSelections();
}
}
public void keyTyped(KeyEvent e) {
@ -349,8 +339,7 @@ public class CheckBoxTree extends JTree {
selectionModel.removeSelectionPath(path);
else
selectionModel.addSelectionPath(path);
}
finally {
} finally {
if (!selectionModel.isSingleEventMode()) {
selectionModel.setBatchMode(false);
}
@ -365,8 +354,8 @@ public class CheckBoxTree extends JTree {
return;
}
for (int i = 0, length = treePaths.length; i < length; i++) {
TreePath tmpTreePath = treePaths[i];
toggleSelection(tmpTreePath);
TreePath tmpTreePath = treePaths[i];
toggleSelection(tmpTreePath);
}
// for (TreePath treePath : treePaths) {
// toggleSelection(treePath);

33
designer_base/src/com/fr/design/gui/style/BackgroundSpecialPane.java

@ -1,6 +1,12 @@
package com.fr.design.gui.style;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import com.fr.design.ExtraDesignClassManager;
import com.fr.design.event.UIObserverListener;
import com.fr.design.fun.BackgroundQuickUIProvider;
import com.fr.design.mainframe.backgroundpane.*;
/**
@ -40,11 +46,26 @@ public class BackgroundSpecialPane extends BackgroundPane{
fireStateChanged();
}
});
return new BackgroundQuickPane[] {
new NullBackgroundQuickPane(),
colorBackgroundPane,
imageBackgroundPane,
gradientPane
};
//hugh:表单支持背景接口
List<BackgroundQuickPane> kinds = new ArrayList<BackgroundQuickPane>();
kinds.add(new NullBackgroundQuickPane());
kinds.add(colorBackgroundPane);
kinds.add(imageBackgroundPane);
kinds.add(gradientPane);
Set<BackgroundQuickUIProvider> providers = ExtraDesignClassManager.getInstance().getArray(BackgroundQuickUIProvider.MARK_STRING);
for (BackgroundQuickUIProvider provider : providers) {
BackgroundQuickPane newTypePane = provider.appearanceForBackground();
newTypePane.registerChangeListener(new UIObserverListener() {
@Override
public void doChange() {
fireStateChanged();
}
});
kinds.add(newTypePane);
}
return kinds.toArray(new BackgroundQuickPane[kinds.size()]);
}
}

2
designer_base/src/com/fr/design/gui/syntax/ui/rsyntaxtextarea/RSyntaxTextAreaDefaultInputMap.java

@ -34,7 +34,7 @@ public class RSyntaxTextAreaDefaultInputMap extends RTADefaultInputMap {
*/
public RSyntaxTextAreaDefaultInputMap() {
int defaultMod = getDefaultModifier();
int defaultMod = DEFAULT_MODIFIER;
//int ctrl = InputEvent.CTRL_MASK;
int shift = InputEvent.SHIFT_MASK;
//int alt = InputEvent.ALT_MASK;

24
designer_base/src/com/fr/design/gui/syntax/ui/rtextarea/RTADefaultInputMap.java

@ -41,6 +41,14 @@ import javax.swing.text.DefaultEditorKit;
public class RTADefaultInputMap extends InputMap {
/**
* Returns the default modifier key for a system. For example, on Windows
* this would be the CTRL key (<code>InputEvent.CTRL_MASK</code>).
*
* @return The default modifier key.
*/
public static final int DEFAULT_MODIFIER = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
/**
* Constructs the default input map for an <code>RTextArea</code>.
*/
@ -48,7 +56,7 @@ public class RTADefaultInputMap extends InputMap {
super();
int defaultModifier = getDefaultModifier();
int defaultModifier = DEFAULT_MODIFIER;
//int ctrl = InputEvent.CTRL_MASK;
int alt = InputEvent.ALT_MASK;
int shift = InputEvent.SHIFT_MASK;
@ -134,18 +142,4 @@ public class RTADefaultInputMap extends InputMap {
*/
}
/**
* Returns the default modifier key for a system. For example, on Windows
* this would be the CTRL key (<code>InputEvent.CTRL_MASK</code>).
*
* @return The default modifier key.
*/
protected static final int getDefaultModifier() {
return Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
}
}

80
designer_base/src/com/fr/design/locale/designer.properties

@ -1,4 +1,3 @@
# generated time: \u661F\u671F\u56DB \u5341\u4E00\u6708 24 12:02:51 CST 2016
FR-Designer-BBSLogin_Account=
FR-Designer-BBSLogin_Connection-Failure=
FR-Designer-BBSLogin_Connection-Failure-Tip=
@ -12,7 +11,7 @@ FR-Designer-BBSLogin_Switch-Account=
FR-Designer-BBSLogin_Privite-Message=
FR-Designer-BBSLogin_Times=
FR-Designer-BBSLogin_Username-Empty-Tip=
FR-Designer-Basic_More_Color=
FR-Designer-Basic_More_Color=More colors
FR-Designer-Estate_Any=
FR-Designer-Estate_Default_Font=
FR-Designer-Estate_Default_Null=
@ -87,18 +86,18 @@ FR-Designer_Currency_Line=
FR-Designer_Current_tab=
FR-Designer_Custom=
FR-Designer_Custom-Angle=
FR-Designer_DS-Dictionary=
FR-Designer_DS-Dictionary=Dictionary
FR-Designer_Data-confusion=
FR-Designer_Data_Type=
FR-Designer_Double_Click_Edit_OR_Clear=
FR-Designer_Email=
FR-Designer_Email=email
FR-Designer_Enabled=
FR-Designer_End-Date=
FR-Designer_ExportAndOutput=
FR-Designer_FRFont=
FR-Designer_FS_Close_Other_Templates=
FR-Designer_File=
FR-Designer_Filter_Conditions=
FR-Designer_FS_Close_Other_Templates=close other templates
FR-Designer_File=File
FR-Designer_Filter_Conditions=Filter Conditions
FR-Designer_Finish-Modify-Share=
FR-Designer_Fit=
FR-Designer_Fit-App=
@ -106,7 +105,7 @@ FR-Designer_Font-Family=
FR-Designer_Font-Size=
FR-Designer_Forbid_Drag_into_Adapt_Pane=Forbid Drag into Para Pane
FR-Designer_Forbid_Drag_into_Para_Pane=Forbid Drag into Para Pane
FR-Designer_Foreground=
FR-Designer_Foreground=Foreground
FR-Designer_Form-AuthorityEdited_Cannot_be_Supported=Form authority editing can not be supported
FR-Designer_Form-Report=
FR-Designer_Form_EmbeddedTD=
@ -117,12 +116,12 @@ FR-Designer_Forum=
FR-Designer_Get-Cube=
FR-Designer_Help=
FR-Designer_Hide=
FR-Designer_Hyperlink=
FR-Designer_Hyperlink=Hyperlink
FR-Designer_Hyperlink-Form_link=
FR-Designer_IDCard=
FR-Designer_Icon=
FR-Designer_Index=
FR-Designer_Input_Rule=
FR-Designer_Input_Rule=Input Rule
FR-Designer_Language_Default=
FR-Designer_Layout=
FR-Designer_Layout-HBox=
@ -143,7 +142,7 @@ FR-Designer_M_Help-Tutorial=
FR-Designer_Max_Value=
FR-Designer_Min_Value=
FR-Designer_MobilePhone=
FR-Designer_New_Value=
FR-Designer_New_Value=New_Value
FR-Designer_None=
FR-Designer_PaperSize-Mobile=
FR-Designer_PaperSize-Mobile-Large=
@ -152,12 +151,12 @@ FR-Designer_Para-Body=
FR-Designer_Parameters=
FR-Designer_Phone=
FR-Designer_PostCode=
FR-Designer_Present=
FR-Designer_Preview=
FR-Designer_Present=Present
FR-Designer_Preview=Preview
FR-Designer_Preview-Data-Confusion=
FR-Designer_Product_Demo=
FR-Designer_Query_Type=
FR-Designer_Refresh=
FR-Designer_Refresh=Refresh
FR-Designer_Refresh_Parameter_In_SQL=
FR-Designer_Reg_Expressions=
FR-Designer_Reg_Max_Length=
@ -195,8 +194,8 @@ FR-Designer_Vertical-RightToLeft=
FR-Designer_VerticalBoxLayout=
FR-Designer_Visible=
FR-Designer_WLayout-Border-ToolTips=
FR-Designer_WaterMark=
FR-Designer_Widget=
FR-Designer_WaterMark=WaterMark
FR-Designer_Widget=Widget
FR-Designer_Widget-Settings=
FR-Designer_Widget-Visible=
FR-Designer_XMLA_Explain=
@ -401,14 +400,14 @@ FR-Designer_Choose_Language=
FR-Designer_Work_After_Restart_Designer=
FR-Designer_Setting-Ruler-Units=
FR-Designer_PageSetup-mm=
FR-Designer_Unit_CM=
FR-Designer_Unit_CM=CM
FR-Designer_Page-Setup-Scale-Units=
FR-Designer_Report-Design-Ruler-Units=
FR-Designer_Web_Preview_Port_Setting=
FR-Designer_Designer_Language=
FR-Designer_Unit_INCH=
FR-Designer_Unit_INCH=INCH
FR-Designer_Web_Preview_Port=
FR-Designer_Unit_PT=
FR-Designer_Unit_PT=PT
FR-Designer-Write_Auto_Stash=auto stash
FR-Designer_Printer_Native_Button=
FR-Designer_Event_ShowWidgets=
@ -483,10 +482,10 @@ FR-Designer_Browser_Background=Browser Background
FR-Designer_Import_Css=Import Css
FR-Designer_Import_JavaScript=Import JavaScript
FR-Designer-Datasource-Param_DES=<html>&nbsp;you can type "${abc}" as a parameter, here, abc is a parameter name. <br/>&nbsp;for example\: select * from table where id\=${abc}.<br/>&nbsp;select * from table where id\='${abc}'.(if the field id is typeof string)</html>
FR-Designer-DS-Database_Query=
FR-Designer_Is_Share_DBTableData=
FR-Designer-LayerPageReport_PageQuery=
FR-Designer-LayerPageReport_Define_PageQuerySQL=
FR-Designer-DS-Database_Query=Database Query
FR-Designer_Is_Share_DBTableData=Is_Share_DBTableData
FR-Designer-LayerPageReport_PageQuery=Query for page
FR-Designer-LayerPageReport_Define_PageQuerySQL=Define sql for page
FR-Designer_Event=
FR-Designer_Properties=
FR-Designer_Permissions_Edition=Permissions Edition
@ -512,7 +511,7 @@ FR-Designer_Attribute=
FR-Designer_Form_Editing_Listeners=
FR-Designer_Form_Basic_Properties=
FR-Designer_DS_Dictionary=
FR-Designer_Create_Tree=
FR-Designer_Create_Tree=Create Tree
FR-Designer_Set_Callback_Function=
FR-Designer_ConfirmDialog_Content=
FR-Designer_ConfirmDialog_Title=
@ -558,11 +557,7 @@ FR-Designer_Auto_Adjust_Size=Auto adjust
FR-Designer_Show_As_Download=Display the binary content using download link
FR-Designer_File_Name_For_Download=File Name For Download
FR-Designer_No=No
FR-Designer_Pagination=Page Break
FR-Designer-Move_Tab_First=move to first
FR-Designer-Move_Tab_End=move to end
FR-Designer-Move_Tab_Next=move to next
FR-Designer-Move_Tab_Prev=move to previous
FR-Designer_Pagination=Pagination
FR-Designer_DS_TableData=Data Set
FR-Designer_Parameter-Formula=Formula
FR-Designer_Plugin_Should_Update_Please_Contact_Developer=Plugin version is too low, and is not compatible with current API. Please contact the developer to update.
@ -862,7 +857,7 @@ RP_Authority_Edit=Authority
Warnning=Warning
RoleName_Can_Not_Be_Null=RoleName_Can_Not_Be_Null
Application=Applications
Formula_Dictionary_Display_Examples_Html=<html>the real value is \
Formula_Dictionary_Display_Examples_Html=<html>the real value is \=range(100), the real value($$$)'s display value is \=0 - $$$, <br>the result is 1, 2, ..., 100 and -1, -2, ..., -100.<br></html>
ECP-error_pwd=
FR-Hyperlink_ChartHyperlink=
M_Edit-FormatBrush=Format Painter
@ -993,7 +988,7 @@ Background-Background_is_NULL=No Background
FR-Designer_Sytle-FRFont=Font
Gradation=Gradation
The_current_list_is_empty=The current list is empty
Formula_Dictionary_Display_Examples=the real value is \
Formula_Dictionary_Display_Examples=the real value is \=range(100), the real value($$$)'s display value is \=0 - $$$, \nthe result is 1, 2, ..., 100 and -1, -2, ..., -100.
Schedule-Template_Parameter=Template Parameter
JSShow=Show In Action
Level_coordinates=Level coordinates
@ -1137,7 +1132,7 @@ FRFont-bold=bold
FR-Designer_Set_Submit_Condition=
Form-Change_Widget_Name=Change Widget Name
ReportColumns-Report_Columns=Report Columns
Can_not_use_FormatBursh=
FR-Designer_Can_not_use_FormatBursh=
CellElement-Property_Table=CellElement Property Table
Dictionary-Dynamic_SQL=Dynamic SQL
FR-Designer_Form-CheckBoxGroup=CheckBoxGroup
@ -1375,7 +1370,7 @@ Not_Exsit=not exist in WorkSheet.
Utils-Insert_Row=Insert Row
Utils-Delete_Row=Delete Row
not_support_authority_edit=this element does not support authority edit
Formula_Tips=The formula must be from the beginning of the "\
Formula_Tips=The formula must be from the beginning of the "\="\!
FR-Action_Copy=
Compile_Success=Compile Success
BackgroundTexture-RecycledPaper=Recycled Paper
@ -1540,7 +1535,7 @@ FR-Designer_Cancel=
Button-Group-Display-Columns=Display Column Count
Widget-Height=Height
Examples=Examples
Formula_Dictionary_Display_Example=the real value is \
Formula_Dictionary_Display_Example=the real value is \=range(100), the real value($$$)'s display value is \=0 - $$$, \nthe result is 1, 2, ..., 100 and -1, -2, ..., -100.
StyleAlignment-Horizontal=Horizontal
HyperLink_Must_Alone_Reset=HyperLink_Must_Alone_Reset
ExpandD-Expand_Direction=Display Data Direction
@ -1990,4 +1985,19 @@ FormulaD-Data_Fields=Data Fields
FR-Designer_Role=Role
FR-Designer_Permissions=Permissions
FR-Designer_Form_Button=Button
FR-Designer_WF_Name=Name
FR-Designer_WF_Name=Name
FR-Designer_Double=Double
FR-Designer_Query=
FR-Designer_Font=Font
FR-Designer_Confirm=
FR-Designer_Parameter=
FR-Designer-Plugin_Plugin=Plugin
FR-Designer_Background=Background
Template=Template
FR-Designer_Parent_Marked_Field=Parent Marked Field
FR-Designer_Original_Marked_Filed=Original Marked Filed
FR-Designer_Build_Tree_Accord_Parent_Marked_Filed=Build Tree according parent's marked filed
FR-Designer_Build_Tree_Accord_Marked_Filed_Length=Build Tree according marked filed's length
FR-Product_Demo=Demo
FR-Designer_Tree_Data_Field=Tree Data Field

136
designer_base/src/com/fr/design/locale/designer_en_US.properties

@ -1,4 +1,3 @@
# generated time: \u661F\u671F\u56DB \u5341\u4E00\u6708 24 12:02:51 CST 2016
FR-Designer-BBSLogin_Account=User name
FR-Designer-BBSLogin_Connection-Failure=Connection failure, check your network status
FR-Designer-BBSLogin_Connection-Failure-Tip=Tip
@ -9,19 +8,19 @@ FR-Designer-BBSLogin_Password=Password
FR-Designer-BBSLogin_Password-Empty-Tip=Password can not be null
FR-Designer-BBSLogin_Register-Account=Register Account
FR-Designer-BBSLogin_Switch-Account=Switch Account
FR-Designer-BBSLogin_Privite-Message=Privite Message
FR-Designer-BBSLogin_Privite-Message=Private Message
FR-Designer-BBSLogin_Times=times
FR-Designer-BBSLogin_Username-Empty-Tip=User name can not be null
FR-Designer-Basic_More_Color=More Color...
FR-Designer-Basic_More_Color=More colors
FR-Designer-Estate_Any=Any
FR-Designer-Estate_Default_Font=Default font
FR-Designer-Estate_Default_Null=Default null
FR-Designer-Estate_Default_Text=Default
FR-Designer-Estate_Parameter_Null_Text=Parameter is null, then display as
FR-Designer-Estate_Parameter_Null_Text=Parameter is null, then display as
FR-Designer-Estate_Radio-Group=Common button group controls of real estate
FR-Designer-Estate_Selected_Font=Selected font
FR-Designer-Estate_Widget_Value=Control value
FR-Designer-Layout_Adaptive_Layout=Adaptive layout
FR-Designer-Layout_Adaptive_Layout=Adaptive Layout
FR-Designer-Output_Background_Set=Background set
FR-Designer-Output_Default_Background=Default background
FR-Designer-Output_Excel_Page=Excel Export(page break)
@ -29,7 +28,7 @@ FR-Designer-Output_Excel_Sheet=Excel Export(one page per sheet)
FR-Designer-Output_Excel_Simple=Excel Export(original)
FR-Designer-Plugin_PluginMarket_Coding=Plugin store is developing, stay tuned
FR-Desinger-Plugin_Updater_UpdateAndUpgrade=Update&Upgrade
FR-Desinger-Plugin_Updater_Checking_Jar_Update=Checking jarpackage update
FR-Desinger-Plugin_Updater_Checking_Jar_Update=Checking JARpackage update
FR-Desinger-Plugin_Updater_Checking_Version_Update=Checking version update
FR-Desinger-Plugin_Updater_Update=update
FR-Desinger-Plugin_Updater_Upgrade=upgrade
@ -68,7 +67,7 @@ FR-Designer_Block-intersect=The overlap between block and block is prohibited
FR-Designer_BorderLayout=BorderLayout
FR-Designer_Button-Hotkeys=Hotkeys
FR-Designer_Button-Icon=Button Icon
FR-Designer_Button-Name=Button Name
FR-Designer_Button-Name=Button Name
FR-Designer_Button-Type=Button Type
FR-Designer_CardLayout=TabLayout
FR-Designer_Cell=cell
@ -91,20 +90,20 @@ FR-Designer_DS-Dictionary=Data Dictionary
FR-Designer_Data-confusion=Data Confusion
FR-Designer_Data_Type=Data type
FR-Designer_Double_Click_Edit_OR_Clear=Double Click to Edit or Clear
FR-Designer_Email=Mail
FR-Designer_Email=Email
FR-Designer_Enabled=Enabled
FR-Designer_End-Date=End Date
FR-Designer_ExportAndOutput=Export
FR-Designer_FRFont=Font
FR-Designer_FS_Close_Other_Templates=Close other templates
FR-Designer_File=file
FR-Designer_Filter_Conditions=Filter condition
FR-Designer_File=File
FR-Designer_Filter_Conditions=Filter Conditions
FR-Designer_Finish-Modify-Share=Finish Modification And Share
FR-Designer_Fit-App=App self-adaption
FR-Designer_Fit=self-adaption
FR-Designer_Font-Family=Font name
FR-Designer_Font-Size=Font size
FR-Designer_Forbid_Drag_into_Adapt_Pane=Form body cannot be dragged into the object
FR-Designer_Forbid_Drag_into_Adapt_Pane=Form body cannot be dragged into the object
FR-Designer_Forbid_Drag_into_Para_Pane=The object cannot be dragged into the parameter panel
FR-Designer_Foreground=Foreground
FR-Designer_Form-AuthorityEdited_Cannot_be_Supported=Form permissions edition is not supported
@ -115,7 +114,6 @@ FR-Designer_Format_explan=Format explain
FR-Designer_Allow-Blank=Allow Blank
FR-Designer_Formula=Formula
FR-Designer_Forum=Forum
FR-Designer_Get-CubeGetting cube=
FR-Designer_Help=Help
FR-Designer_Hide=Hide
FR-Designer_Hyperlink=Hyperlink
@ -136,7 +134,7 @@ FR-Designer_M-Help=Help
FR-Designer_M-Insert=Insert
FR-Designer_M-Repeat-Freeze=Duplicate and freeze
FR-Designer_M-Server=Server
FR-Designer_M-SwitchWorkspace=Switch Working Directory
FR-Designer_M-SwitchWorkspace=Switch Working Directory
FR-Designer_M-Template=Template
FR-Designer_MDX_Explain=Syntax Reference MDX syntax.\nFor example\:\nWITH\nMEMBER [Measures].[Special Discount] AS\n[Measures].[Discount Amount] * 1.5\nSELECT\n[Measures].[Special Discount] on COLUMNS,\nNON EMPTY [Product].[Product].MEMBERS ON Rows\nFROM [Adventure Works]\nWHERE [Product].[Category].[Bikes]\nNOTE\: COLUMNS, ROWS can be replaced by 0,1, the query axis only supports returning two axis
FR-Designer_M_Help-About_Software=About software
@ -144,7 +142,7 @@ FR-Designer_M_Help-Tutorial=Help tutorial
FR-Designer_Max_Value=max value
FR-Designer_Min_Value=min value
FR-Designer_MobilePhone=Mobile phone
FR-Designer_New_Value=new value
FR-Designer_New_Value=New Value
FR-Designer_None=none
FR-Designer_PaperSize-Mobile=Mobile
FR-Designer_PaperSize-Mobile-Large=Large screen
@ -153,7 +151,7 @@ FR-Designer_Para-Body=Parameter interface
FR-Designer_Parameters=Parameters
FR-Designer_Phone=Phone
FR-Designer_PostCode=Postcode
FR-Designer_Present=present
FR-Designer_Present=Present
FR-Designer_Preview=Preview
FR-Designer_Preview-Data-Confusion=Preview Data After Confusion
FR-Designer_Product_Demo=Demo
@ -163,7 +161,7 @@ FR-Designer_Refresh_Parameter_In_SQL=Whether to refresh parameters in the SQL
FR-Designer_Reg_Expressions=Regular expressions
FR-Designer_Reg_Max_Length=max length
FR-Designer_Reg_Min_Length=min length
FR-Designer_ReportColumns-Columns=Multi-columns/lines
FR-Designer_ReportColumns-Columns=Fixed columns per line
FR-Designer_Return-Date=Return Date
FR-Designer_RichText=Insert Rich Text
FR-Designer_RichTextEditor=Rich Text Editor
@ -174,7 +172,7 @@ FR-Designer_Search=Search
FR-Designer_Set=Set
FR-Designer_Share-Template=Share Template
FR-Designer_Simple_general=Simple custom query
FR-Designer_Song_TypeFace=Song typeface
FR-Designer_Song_TypeFace=Song TypeFace
FR-Designer_Start-Date=Start Date
FR-Designer_Subscript=Subscript
FR-Designer_Superscript=Superscript
@ -183,7 +181,7 @@ FR-Designer_Swatch=Sample
FR-Designer_Tab_title=Tab title
FR-Designer_TableData=Data set
FR-Designer_Thank_guest=Special thanks to
FR-Designer_Thanks-To=Thanks
FR-Designer_Thanks-To=Thanks To
FR-Designer_Title=Title
FR-Designer_Total=Total
FR-Designer_UnSignIn=Not Sign In
@ -241,7 +239,7 @@ FR-Designer_Refresh_Successfully=Refresh successfully
FR-Designer_SQL-Table=Tab
FR-Designer_SQL-View=View
FR-Designer_Failed=Failed
FR-Designer_Chart_Field_Name=FieldName
FR-Designer_Chart_Field_Name=Field Name
FR-Designer_FormulaD-Text=Text
FR-Designer_FormulaD-Logical=Logical Function
FR-Designer_FormulaD-Array=Array
@ -250,13 +248,13 @@ FR-Designer_FormulaD-Other=Other Functions
FR-Designer_FormulaD-All=All Functions
FR-Designer_Function=Function
FR-Designer_Select=Sel
FR-Designer_Edit=Edit
FR-Designer_Edit=Edt
FR-Designer_Description=Description
FR-Designer_Role_changed_isRefresh=Roles change, whether to refresh
FR-Designer_FS_Name=FineBI
FR-Designer_Datasource-Parameter=Datasource Parameter
FR-Designer_Tree-ComboBox=Tree Combobox
FR-Designer_Form-Iframe=Iframe
FR-Designer_Tree-ComboBox=Drop-down Tree
FR-Designer_Form-Iframe=WebView
FR-Designer_Type=Type
FR-Designer_User-defined=User_defined
FR-Designer_Simple_general_forV6=Simple general for Version6+
@ -268,11 +266,11 @@ FR-Designer_Parameters_name=parameters name
FR-Designer_SAP_datatype=SAP datatype
FR-Designer_Return_set_name=Return set
FR-Designer_Datatype=Datatype
FR-Designer_Corre_parameter=Corresponse parameter
FR-Designer_Corre_parameter=Corresponding parameter
FR-Designer_Default_value=Default value
FR-Designer_SAP_column_name=Column name
FR-Designer_Table_name=Table name
FR-Designer_Columns_choosed=Columns choosed
FR-Designer_Columns_choosed=Columns chosen
FR-Designer_Where_claus=Where claus
FR-Designer_PreStyle=Pre Style
FR-Designer_Loading=Loading
@ -288,18 +286,18 @@ FR-Designer_file-is-locked=File is locked by others.
FR-Designer_Custom_Icon_Message1=The 16 * 16 standard PNG image is better.
FR-Designer_Add=Add
FR-Designer_Custom_Icon_Message2=The icon name is already exist or your operation is unreasonable.
FR-Designer_Tooltips=Tooltips
FR-Designer_Remove=Remove
FR-Designer_Tooltips=Tip
FR-Designer_Remove=Delete
FR-Designer_Custom_Icon_SelectIcon=Select icon
FR-Designer_Click_this_button=Click this button to set path
FR-Designer_Custom_Icon_Message3=The icon name is already exist.
FR-Designer_Set_default_browser=Cannot find the default browser, please set default browser in Intenet options .
FR-Designer_Set_default_browser=Cannot find the default browser, please set default browser in Internet options .
FR-Designer_Open=Open
FR-Designer_Utils-OpenDemoEnv=To open the demo, it needs to switch to the workspace\:
FR-Designer_Utils-switch=\nThe current unsaved editing files will be saved under current environment?\nGo on?
FR-Designer_Utils-NewDemoEnv=To open the demo,it needs to create the workspace\:
FR-Designer_Save_As_Global_Style=Save as Global Style
FR-Designer_Input_The_Name_Of_Gloabel_Style=Input the name of gloabel style
FR-Designer_Input_The_Name_Of_Gloabel_Style=Input the name of global style
FR-Designer_This_Name_Has_Exsit=This name has existed
FR-Designer_Shortcut_Set=Shortcut Setting
FR-Designer_Feature_Name=Feature Name\:
@ -332,7 +330,7 @@ FR-Designer_Event_Set=Event Setup
FR-Designer_Blow_set=Following Settings
FR-Designer_I_Want_To_Set_Single=Individually set for the report
FR-Designer_Using_Server_Report_View_Settings=Use server report settings
FR-Designer_ErrorHandlerTemplate=Error Template Definition
FR-Designer_ErrorHandlerTemplate=Error Template Definition
FR-Designer_Save_Path=Save Path
FR-Designer-Collect_OSXTips=Tip\: Press control + v to paste the activation code
FR-Designer_X_Coordinate=Abscissa
@ -358,7 +356,7 @@ FR-Designer-Series_Dismenber_As_Single=Regard consecutive separators as one
FR-Designer_KeyPoint=KeyPoint
FR-Designer_loadedTreeModel=loadedTreeModel
FR-Designer-Failed_to_load_the_plugin=Failed to load the plugin\uFF0Cplease update the plugin\:
FR-Designer-Plugin_Please_Update_Jar=Please Update Jar
FR-Designer-Plugin_Please_Update_Jar=Please Update Jar To\:
FR-Designer-Invalid_Page_Number=Invalid Page Number
FR-Designer_XMLA_Database=DB
FR-Designer_XMLA_UserName=User name
@ -381,7 +379,7 @@ FR-Designer_Clear_All=Clear All
FR-Designer_Log=Log
FR-Designer-Plugin_Expire_Dialog_Title=Plug expired
FR-Designer-Plugin_Expire_Dialog_Text=Plugin expired, go sail soft application center to make a purchase.
FR-Designer-Plugin_Finerest_Addon=Fineres Addon
FR-Designer-Plugin_Finerest_Addon=Fanruan Plugins
FR-Designer_Performance_First=Performance First
FR-Designer_Total_N_Grade=Total\:${N}Layer
FR-Designer-BBSLogin_Login-Title=BBS Login
@ -394,7 +392,7 @@ FR-Designer_Product_improve=Product improvement
FR-Designer_Join_Product_improve=Join product improvement plan
FR-Designer_Preference-Function=Function
FR-Designer_max_undo_limit=Max
FR-Designer_Surport_String_To_Formula=Surport String To Formula
FR-Designer_Surport_String_To_Formula=Support String To Formula
FR-Designer_Always=Default execute this operation
FR-Designer_Export_Setting=Export Configuration
FR-Designer_Select_Export_Log_Directory=Select Export Log Directory
@ -532,7 +530,7 @@ FR-Designer_Select_panel=Sel
FR-Designer_LayoutTable_Column_Width=250
FR-Designer_Set_BG_Of_Current_Row=Set BG of the row being edited
FR-Designer_Unload_Check=Prompt users when leave without submitting
FR-Designer_ReportColumns_Columns_Optional=\u3000
FR-Designer_ReportColumns_Columns_Optional=Multi-column/row
FR-Designer_Row_Icon_File_Name=row_en.png
FR-Designer_Center_Display=Center
FR-Designer_Left_Display=Left
@ -559,10 +557,6 @@ FR-Designer_Show_As_Download=Display the binary content using download link
FR-Designer_File_Name_For_Download=File Name For Download
FR-Designer_No=No
FR-Designer_Pagination=Page Break
FR-Designer-Move_Tab_First=move to first
FR-Designer-Move_Tab_End=move to end
FR-Designer-Move_Tab_Next=move to next
FR-Designer-Move_Tab_Prev=move to previous
FR-Designer_DS_TableData=Data Set
FR-Designer_Parameter-Formula=Formula
FR-Designer_Plugin_Should_Update_Please_Contact_Developer=Plugin version is too low, and is not compatible with current API. Please contact the developer to update.
@ -623,7 +617,7 @@ BorderLayout-West=West
AnalysisLine=Line
Layer_Report_Warnning_info=<html>Line report engine is suitable for large data.<br/>Many report features will no longer support if use it,<br/>more information in helpdocument.</html>
Tree-Width=Tree Width
alert_word=Export without fixed height, cell hight will change according to the content and pagination position will different from the preview result.
alert_word=Export without fixed height, cell height will change according to the content and pagination position will different from the preview result.
PageSetup-Paper_Size=Paper Size
M-Page_Setup=Page Setup
DashBoard-FormBook=Form
@ -703,7 +697,7 @@ RWA-Click_Cell_To_Edit_Value=Click Cell to Edit Value
Utils-Row_Height=Row Height
ReportD-Excel_Export=Export Attributes
Form-Please_Select_A_Kind_Of_Form_Container=Select A Form Container
Column_Does_Not_Exsit=Column Does Not Exsit
Column_Does_Not_Exsit=Column Does Not Exist
M_Insert-Hyperlink=Hyperlink
can_not_include_underline=Can not contain "_"
FR-Designer-Plugin_Jar_Expired=Jar Expired
@ -803,7 +797,7 @@ CellWrite-Page_Before_Row=Before Row
FR-Designer-Plugin_Load_Plugins_From_Server=Loading data from plugins store
D-Dispaly_Divide_Result_Set_into_Groups=Grouping on Result Set
Closed=Closed
RWA-Help=Set "No update if no modidy", so if cell is not modified, the record will not update; it improves filling and submit performance when data is large.
RWA-Help=Set "No update if no modify", so if cell is not modified, the record will not update; it improves filling and submit performance when data is large.
FR-Designer-Widget-Style_Custom=Custom
FR-Designer-Widget-Style_Render_Style=Rendering style
Highlight-Barcode=BarCode
@ -863,7 +857,7 @@ RP_Authority_Edit=Permission
Warnning=Warning
RoleName_Can_Not_Be_Null=Role name can not be null or duplicate
Application=Applications
Formula_Dictionary_Display_Examples_Html=<html>Real value range is \
Formula_Dictionary_Display_Examples_Html=<html>Real value range is \=range(100), displayed formula of every $$$ in the range is \=0 - $$$, <br> the real result is 1, 2, ..., 100 and diaplay result is -1, -2, ..., -100.<br>&nbsp;</html>
ECP-error_pwd=Password Error
FR-Hyperlink_ChartHyperlink=Chart Hyperlink
M_Edit-FormatBrush=Format Painter
@ -954,7 +948,7 @@ zeroMarginWarn=The printer exist the physical margins <br> report page margin se
Widget-Date_Selector_Return_Type=Return value type
Utils-Switch_To_Template_Reportlet=Switch to template web report
satisfy=satisfy
FR-Designer_WidgetDisplyPosition=Control DisplyPosition
FR-Designer_WidgetDisplyPosition=Control DisplayPosition
FR-Base_Top=Top
FR-Designer_Form-CheckBox=CheckBox
Reportlet-Parameter_Type=Parameter passing mode
@ -972,7 +966,7 @@ FR-Widget_Tree_And_Table=Control tree and control table
FR-Base_Help=Help
FR-Designer-Plugin_Update_Successful=Update successfully, restart the sever to enable it
August=August
LOG-Is_Being_Openned=Is Being Openned
LOG-Is_Being_Openned=Is Being Opened
BackgroundTexture-Oak=Oak
Multi_nam_formula=\ data set name\:
TurnOn=TurnOn
@ -994,7 +988,7 @@ Background-Background_is_NULL=No Background
FR-Designer_Sytle-FRFont=Font
Gradation=Gradation
The_current_list_is_empty=The current list is empty
Formula_Dictionary_Display_Examples=\Real value range is \
Formula_Dictionary_Display_Examples=\Real value range is \=range(100), displayed formula of every $$$ in the range is \=0 - $$$, \n the real result is 1, 2, ..., 100 and diaplay result is -1, -2, ..., -100.
Schedule-Template_Parameter=Template Parameter
JSShow=Dynamic display
Level_coordinates=Hierarchy coordinate
@ -1100,7 +1094,7 @@ Horizontal-Split_Layout=Horizontal partitioning layout
BorderLayout-Center=Center
INFO-Reset_Webapp=Reset Application Server
FR-Designer_Text=Text
IN_and_INOUT_type_not_as_cursor=IN and INOUT type canot be cursor
IN_and_INOUT_type_not_as_cursor=IN and INOUT type cannot be cursor
Main_Axis=Primary axis
M_Edit-Cut=Cut
Utils-The_Name_has_been_existed=The name already exists
@ -1131,7 +1125,7 @@ Schedule-The_selected_file_must_be_end_with_filter=The selected file must end wi
Provide=Provide
FormulaD-Math_&_Trig=Math and Trig
FR-Designer-StyleAlignment_Right=Right
Error_TableDataNameRepeat=\ already exsits in Server DataSet or the name is repeated.
Error_TableDataNameRepeat=\ already exists in Server DataSet or the name is repeated.
Choose_None=Deselect
File-tree=File tree
FRFont-bold=Bold
@ -1167,7 +1161,7 @@ FR-App-Export_png=png
Delete_Column=Delete Column
SecondGraduationLine=Minor Graduation Line
SpecifiedG-Groups=Groups
CONTINUUM_MODE=Continous grouping
CONTINUUM_MODE=Continuous grouping
Datasource-Connection_failed=Connection Failed
CategoryName=Category Name
DBCP_INITIAL_SIZE=Initialize Connections
@ -1181,7 +1175,7 @@ Or-you=or you
FR-Designer_Certificate_Path=Certificate Path
Utils-Last_Page=Last Page
BarCodeD-Drawing_Text=Display Barcode Text
Warning-Template_Do_Not_Exsit=Template do not exsit
Warning-Template_Do_Not_Exsit=Template do not exist
BindColumn-Group=Group
Export-SVG=SVG
Plane3D=Plane 3D
@ -1295,7 +1289,7 @@ DS-Class_TableData=Class Data Set
FR-Designer-Plugin_Illegal_Plugin_Zip_Cannot_Be_Install=Illegal plugin,cannot be installed
DisplayNothingBeforeQuery=Display Nothing Before Query
Y_Axis=Y Axis
FormulaD-Most_Recently_Used=Rencently used
FormulaD-Most_Recently_Used=Recently used
FormulaD-Input_formula_in_the_text_area_below=Input formula in the text area below
Build-Way=Build Way
M_Edit-Undo=Undo
@ -1376,7 +1370,7 @@ Not_Exsit=Not exist in report
Utils-Insert_Row=Insert Row
Utils-Delete_Row=Delete Row
not_support_authority_edit=this element does not support authority edit
Formula_Tips=The formula must be begin with "\
Formula_Tips=The formula must be begin with "\="\!
FR-Action_Copy=Copy
Compile_Success=Compile Successfully
BackgroundTexture-RecycledPaper=Recycled Paper
@ -1398,7 +1392,7 @@ BackgroundTexture-WaterDroplets=Water Drop
FR-Designer-Dependence_Install_Failed=install failed
Layout-Padding=Padding
roles_already_authority_edited=Configured role
WidgetDisplyPosition=Control disply position
WidgetDisplyPosition=Control display position
SpecifiedG-Force_Group=Mandatory Group
FormulaD-Formula_Definition=Formula Definition
I-xyScatterStyle_Marker=Scatter
@ -1531,7 +1525,7 @@ FR-Server_Version_Tip=The version of the server you are connecting is older than
StyleAlignment-Left_To_Right=Left To Right
Verify-ToolTips=If not meet formula, throw up validation error message
BackgroundTexture-Stationery=Letter Paper
FR-Designer_RWA-Help=Set "No update if no modidy", so if cell is not modified, the record will not update; it improves filling and submit performance when data is large.
FR-Designer_RWA-Help=Set "No update if no modify", so if cell is not modified, the record will not update; it improves filling and submit performance when data is large.
M_Insert-Barcode=Barcode
Bounds=Bounds
FR-Designer-Undo_All_Authority_Operations=Undo all the privilege edit operations
@ -1541,7 +1535,7 @@ FR-Designer_Cancel=Cancel
Button-Group-Display-Columns=Number of columns displayed
Widget-Height=Control Height
Examples=Examples
Formula_Dictionary_Display_Example=Real value range is \
Formula_Dictionary_Display_Example=Real value range is \=range(100), displayed formula of every $$$ in the range is \=0 - $$$, \n the real result is 1, 2, ..., 100 and diaplay result is -1, -2, ..., -100.
StyleAlignment-Horizontal=Horizontal
HyperLink_Must_Alone_Reset=Multiple hyperlink
ExpandD-Expand_Direction=Extension Direction
@ -1631,7 +1625,7 @@ FR-Hyperlink_Reportlet=Webreport
M_Edit-Copy=Copy
Sub_Report_Message2=The parent-report is not in the current runtime environment
Sub_Report_Message3=Can not choose itself
Sub_Report_Message1=Please choose the currect path
Sub_Report_Message1=Please choose the correct path
Form-Allow_CustomData=Allow custom data
FR-Server_Version_Tip_MoreInfo=Conform the version numbers of FineReport Designer and the deployment server are consistent, in order to avoid the problems caused by inconsistent versions. If you open the template produced by higher designer vision, error may occurs or the original template properties missed. If the Designer Version you used to create the template is higher than the final deployment server version, the server may not be able to properly load the template.
FR-Designer_Server-version-tip-moreInfo=Conform the version numbers of FineReport Designer and the deployment server are consistent, in order to avoid the problems caused by inconsistent versions. If you open the template produced by higher designer vision, error may occurs or the original template properties missed. If the Designer Version you used to create the template is higher than the final deployment server version, the server may not be able to properly load the template.
@ -1763,7 +1757,7 @@ Form-ToolBar=Form ToolBar
FR-Base_sure_remove_item=Are you sure to delete the selected item
Component_Scale=Component Scale
Hyperlink-Use_CJK_to_encode_parameter=Use CJK to process parameter
LOG-Has_Been_Openned=Report Has Been Openned
LOG-Has_Been_Openned=Report Has Been Opened
FR-Designer-Dependence=
ECP_error_pwd=Password Error
REPORTLET=Parameter of access path to template
@ -1792,7 +1786,7 @@ Form-DataTable=DataTable
Sub_Report_ToolTips=Sub Report ToolTips
Right_Top=Upper right
M_Edit-Merge_Cell=Merge Cell
FR-Designer_Restore_Default=Back to default\
FR-Designer_Restore_Default=Back to default
Component_Interval=Components Interval
Cover_None=Override None
Datasource-From_Database=DB table
@ -1803,7 +1797,7 @@ ParentCell_Setting=Parent Cell Setting
Only_selected_cell_can_paste_only=Paste when cell is selected
M_Report-Report_Columns=Multi-columns/lines
Unit_Hundred=Hundred
FR-Designer_DataTable-Build=
FR-Designer_DataTable-Build=Quick build (hierarchical)
Widget-Form_Widget_Config=Form control
Server-version-tip-moreInfo=Conform the version numbers of FineReport Designer and the deployment server are consistent, in order to avoid the problems caused by inconsistent versions. If you open the template produced by higher designer vision, error may occurs or the original template properties missed. If the Designer Version you used to create the template is higher than the final deployment server version, the server may not be able to properly load the template.
Actions=Task
@ -1823,7 +1817,7 @@ BackgroundTexture-Cork=Cork
M_Format-Data_Map=Data Dictionary
FR-mobile_native_analysis=native analysis
HighLight=High Light
FR-Designer_Dropdown-More-Preview=
FR-Designer_Dropdown-More-Preview=Drop down for more
local=local
FR-Designer_Gradation=Gradation
PageSetup-Finis_Start_Column=Duplicate Last Column
@ -1832,7 +1826,7 @@ FR-Designer-Plugin_All_Plugins=All plugins
FR-Designer_Prepare_Export=Ready to export, please wait
DBCP_TEST_ON_RETURN=Test before Returning Connections
no-alternatives=no alternatives
FR-Designer_Submmit_WClass=Submmit By Custom Class
FR-Designer_Submmit_WClass=Submit By Custom Class
M_Insert-Slope_Line=Insert Slope Line
FR-Designer-Plugin_Plugin_Description=Description
ExpandD-Not_Expand=No extend
@ -1895,12 +1889,12 @@ Border-Style=Border Style
Sort=Sort
Image-Image_Layout=Image Layout
Panel=Panel
FR-Designer-Basic_Copy_Build_NO_OK=Build No. has been copyed
FR-Designer-Basic_Copy_Build_NO_OK=Build No. has been copied
All_Border_Line=All Border
FR-Utils-Please_Input_a_New_Name=Input a New Name
FR-Base_Formula_Plugin=Plugin Function
Two_Rows_Of_Three_Grid=A grid with 2 rows and 3 columns
FR-Designer_Certificate_Pass=Certificate Password\
FR-Designer_Certificate_Pass=Certificate Password
Bubble-Series_Name=Series Name
M-New_Multi_Report=New Aggregate Report
BackgroundTexture-PinkTissuePaper=Pink Sandpaper
@ -1946,7 +1940,7 @@ Widget-User_Defined=Predefine
Url_location=Absolute path
Disk_File=Disk File
Inside=Inside
FR-Designer_filedChosen=
FR-Designer_filedChosen=Dependent fields
ServerM-Predefined_Styles=Predefined Styles
is_need_word_adjust=Word Auto Adjust
Background-Null=No Background
@ -1991,4 +1985,20 @@ FormulaD-Data_Fields=Data Items
FR-Designer_Role=Role
FR-Designer_Permissions=Permissions
FR-Designer_Form_Button=Button
FR-Designer_WF_Name=Name
FR-Designer_WF_Name=Name
FR-Designer_Double=Decimal
FR-Designer_Query=Query
FR-Designer_Font=Font
FR-Designer_Confirm=OK
FR-Designer_Parameter=Parameter
FR-Designer-Plugin_Plugin=Plugin
FR-Designer_Background=BG
Template=Template
FR-Designer_Original_Marked_Filed=Original Tag Field
FR-Designer_Build_Tree_Accord_Marked_Filed_Length=Build tree according to tag field's length
FR-Designer_Can_not_use_FormatBursh=Can't use format painter in multiple selections
FR-Designer_Tree_Data_Field=Tree Data Field
FR-Designer_Parent_Marked_Field=Parent Tag Field
FR-Designer_Build_Tree_Accord_Parent_Marked_Filed=Build Tree according to the parent tag field of the selected data set
FR-Product_Demo=Demo

2416
designer_base/src/com/fr/design/locale/designer_ja_JP.properties

File diff suppressed because it is too large Load Diff

43
designer_base/src/com/fr/design/locale/designer_ko_KR.properties

@ -1,4 +1,3 @@
# generated time: \u661F\u671F\u56DB \u5341\u4E00\u6708 24 12:02:51 CST 2016
FR-Designer-BBSLogin_Account=\u7528\u6237\u540D
FR-Designer-BBSLogin_Connection-Failure=\uB124\uD2B8\uC6CC\uD06C\uB9C1\uD06C\uC2E4\uD328.\uD604\uC7AC\uB124\uD2B8\uC6CC\uD06C\uC0C1\uD0DC\uB97C\uAC80\uC0AC\uD574\uC8FC\uC2ED\uC2DC\uC624.
FR-Designer-BBSLogin_Connection-Failure-Tip=\uC54C\uB9BC
@ -12,7 +11,7 @@ FR-Designer-BBSLogin_Switch-Account=\uC804\uD658\uACC4\uC815\uBC88\uD638
FR-Designer-BBSLogin_Privite-Message=\uAC1C\uC778\u0020\uBA54\uC2DC\uC9C0
FR-Designer-BBSLogin_Times=\uD68C
FR-Designer-BBSLogin_Username-Empty-Tip=\uC0AC\uC6A9\uC790\uC774\uB984\uC740\uBE48\uCE78\uC73C\uB85C\uB458\uC218\uC5C6\uC2B5\uB2C8\uB2E4.
FR-Designer-Basic_More_Color=\uC0C9\uB354\uBCF4\uAE30...
FR-Designer-Basic_More_Color=\uB354\uBCF4\uAE30\uC0C9
FR-Designer-Estate_Any=\uC81C\uD55C\uC5C6\uC74C
FR-Designer-Estate_Default_Font=\uAE30\uBCF8\uAE00\uAF34
FR-Designer-Estate_Default_Null=\uAE30\uBCF8\uBE44\uC5B4\uC788\uC74C
@ -76,7 +75,7 @@ FR-Designer_Chart_Cell=\uCC28\uD2B8 \uD558\uC774\uD37C\uB9C1\uD06C-\uC140 \uC5F0
FR-Designer_Chart_Float=\uCC28\uD2B8\uD558\uC774\uD37C\uB9C1\uD06C-\uC5F0\uB3D9\uC11C\uC2A4\uD39C\uC2A4\uC694\uC18C
FR-Designer_Chart_Float_chart=\uCC28\uD2B8 \uD558\uC774\uD37C\uB9C1\uD06C-\uC704\uC82F \uCC28\uD2B8
FR-Designer_Check-for-Updates=\uC5C5\uB370\uC774\uD2B8\uAC80\uC0AC
FR-Designer_Choose-Data-Confusion-Tip=\\ud63c\uD569\uD560\uD544\uB4DC\uB97C\uC120\uD0DD\uD6C4\uBBF8\uB9AC\uBCF4\uAE30
FR-Designer_Choose-Data-Confusion-Tip=\\ud63c\uD569\uD560\uD544\uB4DC\uB97C\uC120\uD0DD\uD6C4\uBBF8\uB9AC\uBCF4\uAE30
FR-Designer_Close=\uB2EB\uAE30
FR-Designer_Column=\uC5F4
FR-Designer_Column_Measure=\uC5F4\uCD95/\uCE21\uC815\uAC12
@ -106,7 +105,7 @@ FR-Designer_Font-Family=\uAE00\uAF34\uBA85\uCE6D
FR-Designer_Font-Size=\uAE00\uAF34\uD06C\uAE30
FR-Designer_Forbid_Drag_into_Adapt_Pane=\uD574\uB2F9\uAC1D\uCCB4\uB294\uD3FC\uD14C\uC774\uBE14\uBC14\uB514\uB4DC\uB798\uADF8\uB97C\uD5C8\uC6A9\uD558\uC9C0\uC54A\uC2B5\uB2C8\uB2E4.
FR-Designer_Forbid_Drag_into_Para_Pane=\uD574\uB2F9\uAC1D\uCCB4\uB294\uB9E4\uAC1C\uBCC0\uC218\uD328\uB110\uC744\uB4DC\uB798\uADF8\uD560\uC218\uC5C6\uC2B5\uB2C8\uB2E4.
FR-Designer_Foreground=\uC0C9
FR-Designer_Foreground=\uBE44\uC804
FR-Designer_Form-AuthorityEdited_Cannot_be_Supported=\uD3FC\uAD8C\uD55C\uD3B8\uC9D1\uC744\uC9C0\uC6D0\uD558\uC9C0\uC54A\uC2B5\uB2C8\uB2E4.
FR-Designer_Form-Report=\uBB38\uC11C\uBE14\uB7ED
FR-Designer_Form_EmbeddedTD=\uD3FC(\uB0B4\uC7A5\uB370\uC774\uD130)
@ -162,7 +161,7 @@ FR-Designer_Refresh_Parameter_In_SQL=SQL\uC758\uB9E4\uAC1C\uBCC0\uC218\uB97C\uC0
FR-Designer_Reg_Expressions=\uC815\uADDC\uD45C\uD604\uC2DD
FR-Designer_Reg_Max_Length=\uCD5C\uB300\uAE38\uC774
FR-Designer_Reg_Min_Length=\uCD5C\uC18C\uAE38\uC774
FR-Designer_ReportColumns-Columns=\uC140\uB098\uB204\uAE30
FR-Designer_ReportColumns-Columns=\uC5F4\uC140\uB098\uB204\uAE30
FR-Designer_Return-Date=\uB0A0\uC9DC\uB3CC\uC544\uAC00\uAE30
FR-Designer_RichText=\uB9AC\uCE58\uD14D\uC2A4\uD2B8\uBC15\uC2A4\uC0BD\uC785
FR-Designer_RichTextEditor=\uB9AC\uCE58\uD14D\uC2A4\uD2B8\uBC15\uC2A4\uD3B8\uC9D1\uAE30
@ -446,7 +445,6 @@ FR-Designer_WLayout-Absolute-ToolTips=\uC790\uC720\uC2DD\uB808\uC774\uC544\uC6C3
FR-Designer_Add_all=\uBAA8\uB450\uCD94\uAC00
FR-Designer_Reset=
FR-Designer_Language_Change_Successful=
FR-Designer_Template_Web_Attributes=
FR-Designer_Basic=\uAE30\uBCF8
FR-Designer_Printers(Server)=\uD504\uB9B0\uD130(\uC11C\uBC84)
FR-Designer_Pagination_Setting=\uD398\uC774\uC9C0\uB098\uB204\uAE30\uBBF8\uB9AC\uBCF4\uAE30\uC124\uC815
@ -472,7 +470,7 @@ FR-Designer_Exporting=\uB0B4\uBCF4\uB0B4\uAE30\uC911
FR-Designer_Export-PDF=PDF\uC11C\uC2DD
FR-Designer_Button_OK=\uD655\uC778
FR-Designer_Button_Cancel=\uCDE8\uC18C
FR-Designer_JavaScript=
FR-Designer_JavaScript=\uC790\uBC14\uC2A4\uD06C\uB9BD\uD2B8
FR-Designer_JavaScript_Form_Submit=
FR-Designer_JavaScript_Commit_to_Database=
FR-Designer_JavaScript_Custom=
@ -485,7 +483,7 @@ FR-Designer_Attribute=
FR-Designer_Form_Editing_Listeners=
FR-Designer_Form_Basic_Properties=
FR-Designer_DS_Dictionary=
FR-Designer_Create_Tree=
FR-Designer_Create_Tree=\uD2B8\uB9AC\uC0DD\uC131
FR-Designer_Set_Callback_Function=
FR-Designer_ConfirmDialog_Content=
FR-Designer_ConfirmDialog_Title=
@ -859,7 +857,7 @@ RP_Authority_Edit=\uAD8C\uD55C\uD3B8\uC9D1
Warnning=\uC54C\uB9BC
RoleName_Can_Not_Be_Null=\uC5ED\uD560\uC774\uB984\uC740\uBE44\uC5B4\uC788\uAC70\uB098\uC911\uBCF5\uB418\uC5B4\uC11C\uB294\uC548\uB429\uB2C8\uB2E4.
Application=\uC560\uD50C\uB9AC\uCF00\uC774\uC158
Formula_Dictionary_Display_Examples_Html=<html>\uC2E4\uC81C\uAC12\uBC94\uC704:\
Formula_Dictionary_Display_Examples_Html=<html>\uC2E4\uC81C\uAC12\uBC94\uC704:\=0 - $$$\uFF0C<br>\uCD5C\uC885\uACB0\uACFC\uC758\uC2E4\uC81C\uAC12: 1, 2, ..., 100,\uD45C\uC2DC\uAC12: -1, -2, ... , -100. <br>&nbsp;</html>
ECP-error_pwd=\uBE44\uBC00\uBC88\uD638\uC785\uB825\uC624\uB958
FR-Hyperlink_ChartHyperlink=\uCC28\uD2B8\uD558\uC774\uD37C\uB9C1\uD06C
M_Edit-FormatBrush=\uC11C\uC2DD\uD504\uB9B0\uD2B8(B)
@ -990,7 +988,7 @@ Background-Background_is_NULL=\uBC30\uACBD\uC5C6\uC74C
FR-Designer_Sytle-FRFont=\uAE00\uAF34
Gradation=\uB2E8\uACC4
The_current_list_is_empty=\uD604\uC7AC\uB9AC\uC2A4\uD2B8\uBE44\uC5B4\uC788\uC74C
Formula_Dictionary_Display_Examples=\\uc2e4\uC81C\uAC12\uBC94\uC704:\
Formula_Dictionary_Display_Examples=\\uc2e4\uC81C\uAC12\uBC94\uC704:\=0 - $$$\uFF0C\n \uCD5C\uC885\uACB0\uACFC\uC758\uC2E4\uC81C\uAC12: 1, 2, ..., 100, \n \uD45C\uC2DC\uAC12: -1, -2, ... , -100.
Schedule-Template_Parameter=\uD15C\uD50C\uB9BF\uB9E4\uAC1C\uBCC0\uC218
JSShow=\uB3D9\uC801\uB514\uC2A4\uD50C\uB808\uC774
Level_coordinates=\uACC4\uCE35\uBCF4\uC870\uC88C\uD45C
@ -1134,7 +1132,7 @@ FRFont-bold=\uAD75\uAC8C
FR-Designer_Set_Submit_Condition=\uC81C\uCD9C\uC870\uAC74\uC124\uC815
Form-Change_Widget_Name=\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4\uC774\uB984\uBCC0\uACBD
ReportColumns-Report_Columns=\uBB38\uC11C\uC140\uB098\uB204\uAE30
Can_not_use_FormatBursh=\uC911\uBCF5\uC120\uD0DD\uB41C\uC601\uC5ED\uC5D0\uC11C\uC2DD\uC744\uC774\uC6A9\uD558\uC5EC\uC778\uC1C4\uD560\uC218\uC5C6\uC2B5\uB2C8\uB2E4.\!
FR-Designer_Can_not_use_FormatBursh=\uC911\uBCF5\uC120\uD0DD\uB41C\uC601\uC5ED\uC5D0\uC11C\uC2DD\uC744\uC774\uC6A9\uD558\uC5EC\uC778\uC1C4\uD560\uC218\uC5C6\uC2B5\uB2C8\uB2E4.\!
CellElement-Property_Table=\uC140\uC18D\uC131\uD45C
Dictionary-Dynamic_SQL=\uB3D9\uC801 SQL
FR-Designer_Form-CheckBoxGroup=\uCCB4\uD06C\uBC15\uC2A4\uADF8\uB8F9
@ -1537,7 +1535,7 @@ FR-Designer_Cancel=\uCDE8\uC18C
Button-Group-Display-Columns=\uC5F4\uC758\uC218\uB97C\uB098\uD0C0\uB0C4
Widget-Height=\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4\uB192\uC774
Examples=\uC608\uC2DC
Formula_Dictionary_Display_Example=\uC2E4\uC81C\uAC12\uBC94\uC704:\
Formula_Dictionary_Display_Example=\uC2E4\uC81C\uAC12\uBC94\uC704:\=0 - $$$\uFF0C\n\uCD5C\uC885\uACB0\uACFC\uC758\uC2E4\uC81C\uAC12: 1, 2, ..., 100, \uD45C\uC2DC\uAC12: -1, -2, ... , -100.
StyleAlignment-Horizontal=\uC218\uD3C9\uC815\uB82C
HyperLink_Must_Alone_Reset=\uC5EC\uB7EC\uAC1C\uD558\uC774\uD37C\uB9C1\uD06C
ExpandD-Expand_Direction=\uD655\uB300\uBC29\uD5A5
@ -1983,4 +1981,23 @@ FR-Designer_Edit_String_To_Formula=\uBB38\uC790\uC5F4\uC744\uC218\uC2DD\uC73C\uB
FR-Base_UnSignIn=\uC544\uC9C1 \uB4F1\uB85D
Every=\uAC01
CellWrite-Preview_Cell_Content=\uC140\uB0B4\uC6A9\uBBF8\uB9AC\uBCF4\uAE30
FormulaD-Data_Fields=\uB370\uC774\uD130\uD56D\uBAA9
FormulaD-Data_Fields=\uB370\uC774\uD130\uD56D\uBAA9
FR-Designer_Permissions=
FR-Designer_Form_Button=
FR-Designer_WF_Name=
FR-Designer_Role=
FR-Designer_Double=\uC18C\uC218
FR-Designer_Query=\uCC3E\uC544\uBCF4\uAE30
FR-Designer_Font=\uAE00\uAF34
FR-Designer_Confirm=\uD655\uC778
FR-Designer_Parameter=\uB9E4\uAC1C\uBCC0\uC218
FR-Designer-Plugin_Plugin=\uD50C\uB7EC\uADF8\uC778
FR-Designer_Background=\uBC30\uACBD
Template=\uD15C\uD50C\uB9BF
FR-Designer_Original_Marked_Filed=\uCD08\uAE30\uD0DC\uADF8\uD544\uB4DC
FR-Designer_Build_Tree_Accord_Marked_Filed_Length=\uC120\uD0DD\uD55C\uB370\uC774\uD130\uC138\uD2B8\uC758\uD0DC\uADF8\uD544\uB4DC\uAE38\uC774\uC5D0\uB530\uB77C\uD2B8\uB9AC\uC0DD\uC131
FR-Designer_Tree_Data_Field=\uD2B8\uB9AC\uB370\uC774\uD130\uD544\uB4DC
FR-Designer_Parent_Marked_Field=\uBD80\uBAA8\uD0DC\uADF8\uD544\uB4DC
FR-Designer_Build_Tree_Accord_Parent_Marked_Filed=\uC120\uD0DD\uD55C\uB370\uC774\uD130\uC138\uD2B8\uC758\uBD80\uBAA8\uD0DC\uADF8\uD544\uB4DC\uC5D0\uB530\uB77C\uD2B8\uB9AC\uC0DD\uC131
FR-Product_Demo=\uC81C\uD488\uC2DC\uC5F0

40
designer_base/src/com/fr/design/locale/designer_zh_CN.properties

@ -1,4 +1,3 @@
# generated time: \u661F\u671F\u56DB \u5341\u4E00\u6708 24 12:02:51 CST 2016
FR-Designer-BBSLogin_Account=\u7528\u6237\u540D
FR-Designer-BBSLogin_Connection-Failure=\u7F51\u7EDC\u8FDE\u63A5\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u5F53\u524D\u7F51\u7EDC\u72B6\u6001
FR-Designer-BBSLogin_Connection-Failure-Tip=\u63D0\u793A
@ -12,7 +11,7 @@ FR-Designer-BBSLogin_Switch-Account=\u5207\u6362\u8D26\u53F7
FR-Designer-BBSLogin_Privite-Message=\u79C1\u4EBA\u6D88\u606F
FR-Designer-BBSLogin_Times=\u6B21
FR-Designer-BBSLogin_Username-Empty-Tip=\u7528\u6237\u540D\u4E0D\u80FD\u4E3A\u7A7A
FR-Designer-Basic_More_Color=\u66F4\u591A\u989C\u8272...
FR-Designer-Basic_More_Color=\u66F4\u591A\u989C\u8272
FR-Designer-Estate_Any=\u4E0D\u9650
FR-Designer-Estate_Default_Font=\u9ED8\u8BA4\u5B57\u4F53
FR-Designer-Estate_Default_Null=\u9ED8\u8BA4\u4E3A\u7A7A
@ -76,7 +75,7 @@ FR-Designer_Chart_Cell=\u56FE\u8868\u8D85\u94FE-\u8054\u52A8\u5355\u5143\u683C
FR-Designer_Chart_Float=\u56FE\u8868\u8D85\u94FE-\u8054\u52A8\u60AC\u6D6E\u5143\u7D20
FR-Designer_Chart_Float_chart=\u56FE\u8868\u8D85\u94FE-\u60AC\u6D6E\u7A97\u56FE\u8868
FR-Designer_Check-for-Updates=\u68C0\u67E5\u66F4\u65B0
FR-Designer_Choose-Data-Confusion-Tip=\ \u8BF7\u9009\u62E9\u9700\u8981\u6DF7\u6DC6\u7684\u5B57\u6BB5\u540E\u9884\u89C8
FR-Designer_Choose-Data-Confusion-Tip=\ \u8BF7\u9009\u62E9\u9700\u8981\u6DF7\u6DC6\u7684\u5B57\u6BB5\u540E\u9884\u89C8
FR-Designer_Close=\u5173\u95ED
FR-Designer_Column=\u5217
FR-Designer_Column_Measure=\u5217\u8F74/\u5EA6\u91CF\u503C
@ -96,7 +95,7 @@ FR-Designer_Enabled=\u53EF\u7528
FR-Designer_End-Date=\u7ED3\u675F\u65E5\u671F
FR-Designer_ExportAndOutput=\u5BFC\u51FA
FR-Designer_FRFont=\u5B57\u4F53
FR-Designer_FS_Close_Other_Templates=\u5173\u95ED\u5176\u4ED6\u6A21\u677F
FR-Designer_FS_Close_Other_Templates=\u5173\u95ED\u5176\u4ED6\u6A21\u7248
FR-Designer_File=\u6587\u4EF6
FR-Designer_Filter_Conditions=\u8FC7\u6EE4\u6761\u4EF6
FR-Designer_Finish-Modify-Share=\u5B8C\u6210\u4FEE\u6539\u5E76\u5206\u4EAB
@ -106,7 +105,7 @@ FR-Designer_Font-Family=\u5B57\u4F53\u540D\u79F0
FR-Designer_Font-Size=\u5B57\u4F53\u5927\u5C0F
FR-Designer_Forbid_Drag_into_Adapt_Pane=\u8BE5\u5BF9\u8C61\u4E0D\u5141\u8BB8\u62D6\u5165\u8868\u5355\u4E3B\u4F53
FR-Designer_Forbid_Drag_into_Para_Pane=\u8BE5\u5BF9\u8C61\u4E0D\u80FD\u62D6\u5165\u53C2\u6570\u9762\u677F
FR-Designer_Foreground=\u989C\u8272
FR-Designer_Foreground=\u524D\u666F
FR-Designer_Form-AuthorityEdited_Cannot_be_Supported=\u6682\u4E0D\u652F\u6301\u8868\u5355\u6743\u9650\u7F16\u8F91
FR-Designer_Form-Report=\u62A5\u8868\u5757
FR-Designer_Form_EmbeddedTD=\u8868\u5355(\u5185\u7F6E\u6570\u636E)
@ -163,7 +162,7 @@ FR-Designer_Refresh_Parameter_In_SQL=\u662F\u5426\u5237\u65B0SQL\u4E2D\u7684\u53
FR-Designer_Reg_Expressions=\u6B63\u5219\u8868\u8FBE\u5F0F
FR-Designer_Reg_Max_Length=\u6700\u5927\u957F\u5EA6
FR-Designer_Reg_Min_Length=\u6700\u5C0F\u957F\u5EA6
FR-Designer_ReportColumns-Columns=\u5206\u680F
FR-Designer_ReportColumns-Columns=\u5217\u5206\u680F
FR-Designer_Return-Date=\u8FD4\u56DE\u65E5\u671F
FR-Designer_RichText=\u63D2\u5165\u5BCC\u6587\u672C
FR-Designer_RichTextEditor=\u5BCC\u6587\u672C\u7F16\u8F91\u5668
@ -358,7 +357,7 @@ FR-Designer-Series_Dismenber_As_Single=\u8FDE\u7EED\u5206\u9694\u7B26\u89C6\u4E3
FR-Designer_KeyPoint=\u5173\u952E\u8282\u70B9
FR-Designer_loadedTreeModel=\u52A0\u8F7D\u5931\u8D25,\u8BF7\u68C0\u67E5\u540E\u91CD\u8BD5
FR-Designer-Failed_to_load_the_plugin=\u65E0\u6CD5\u52A0\u8F7D\u63D2\u4EF6\uFF0C\u8BF7\u66F4\u65B0\u63D2\u4EF6\uFF1A
FR-Designer-Plugin_Please_Update_Jar=\u8BF7\u66F4\u65B0Jar\u5305, \u63D2\u4EF6\u9700\u6C42\u6700\u4F4E\u7248\u672C
FR-Designer-Plugin_Please_Update_Jar=\u8BF7\u66F4\u65B0Jar\u5305\u81F3\:
FR-Designer-Invalid_Page_Number=\u65E0\u6548\u9875\u7801
FR-Designer_Get-CubeGetting=\u83B7\u53D6cube
FR-Designer_XMLA_Database=\u6570\u636E\u5E93
@ -858,7 +857,7 @@ RP_Authority_Edit=\u6743\u9650\u7F16\u8F91
Warnning=\u63D0\u9192
RoleName_Can_Not_Be_Null=\u89D2\u8272\u540D\u4E0D\u5141\u8BB8\u4E3A\u7A7A\u4E14\u4E0D\u80FD\u91CD\u590D
Application=\u5E94\u7528\u7A0B\u5E8F
Formula_Dictionary_Display_Examples_Html=<html>\u5B9E\u9645\u503C\u8303\u56F4\u4E3A \
Formula_Dictionary_Display_Examples_Html=<html>\u5B9E\u9645\u503C\u8303\u56F4\u4E3A \=range(100),\u5BF9\u5B9E\u9645\u503C\u8303\u56F4\u5185\u7684\u6BCF\u4E2A$$$\u7684\u663E\u793A\u516C\u5F0F\u4E3A \=0 - $$$\uFF0C<br>\u5219\u6700\u7EC8\u7684\u7ED3\u679C\u5B9E\u9645\u503C\u4E3A1, 2, ..., 100,\u663E\u793A\u503C\u4E3A-1, -2, ... , -100\u3002<br>&nbsp;</html>
ECP-error_pwd=\u5BC6\u7801\u9519\u8BEF
FR-Hyperlink_ChartHyperlink=\u56FE\u8868\u8D85\u94FE
M_Edit-FormatBrush=\u683C\u5F0F\u5237(B)
@ -989,7 +988,7 @@ Background-Background_is_NULL=\u6CA1\u6709\u80CC\u666F
FR-Designer_Sytle-FRFont=\u5B57\u4F53
Gradation=\u5C42\u6B21
The_current_list_is_empty=\u5F53\u524D\u5217\u8868\u4E3A\u7A7A
Formula_Dictionary_Display_Examples=\ \u5B9E\u9645\u503C\u8303\u56F4\u4E3A \
Formula_Dictionary_Display_Examples=\ \u5B9E\u9645\u503C\u8303\u56F4\u4E3A \=range(100),\u5BF9\u5B9E\u9645\u503C\u8303\u56F4\n \u5185\u7684\u6BCF\u4E2A$$$\u7684\u663E\u793A\u516C\u5F0F\u4E3A \=0 - $$$\uFF0C\n \u5219\u6700\u7EC8\u7684\u7ED3\u679C\u5B9E\u9645\u503C\u4E3A1, 2, ..., 100, \n \u663E\u793A\u503C\u4E3A-1, -2, ... , -100\u3002
Schedule-Template_Parameter=\u6A21\u677F\u53C2\u6570
JSShow=\u52A8\u6001\u5C55\u793A
Level_coordinates=\u5C42\u6B21\u5750\u6807
@ -1133,7 +1132,7 @@ FRFont-bold=\u52A0\u7C97
FR-Designer_Set_Submit_Condition=\u8BBE\u7F6E\u63D0\u4EA4\u6761\u4EF6
Form-Change_Widget_Name=\u66F4\u6539\u63A7\u4EF6\u540D
ReportColumns-Report_Columns=\u62A5\u8868\u5206\u680F
Can_not_use_FormatBursh=\u4E0D\u80FD\u5BF9\u591A\u91CD\u9009\u5B9A\u533A\u57DF\u4F7F\u7528\u683C\u5F0F\u5237\!
FR-Designer_Can_not_use_FormatBursh=\u4E0D\u80FD\u5BF9\u591A\u91CD\u9009\u5B9A\u533A\u57DF\u4F7F\u7528\u683C\u5F0F\u5237\!
CellElement-Property_Table=\u5355\u5143\u683C\u5C5E\u6027\u8868
Dictionary-Dynamic_SQL=\u52A8\u6001SQL
FR-Designer_Form-CheckBoxGroup=\u590D\u9009\u6846\u7EC4
@ -1371,7 +1370,7 @@ Not_Exsit=\u4E0D\u5B58\u5728\u4E8E\u62A5\u8868
Utils-Insert_Row=\u63D2\u5165\u884C
Utils-Delete_Row=\u5220\u9664\u884C
not_support_authority_edit=\u8BE5\u5143\u7D20\u4E0D\u652F\u6301\u6743\u9650\u63A7\u5236
Formula_Tips=\u516C\u5F0F\u5FC5\u987B\u4EE5"\
Formula_Tips=\u516C\u5F0F\u5FC5\u987B\u4EE5"\="\u53F7\u5F00\u5934\uFF01
FR-Action_Copy=\u590D\u5236
Compile_Success=\u7F16\u8BD1\u6210\u529F
BackgroundTexture-RecycledPaper=\u518D\u751F\u7EB8
@ -1536,7 +1535,7 @@ FR-Designer_Cancel=\u53D6\u6D88
Button-Group-Display-Columns=\u5C55\u793A\u5217\u6570
Widget-Height=\u63A7\u4EF6\u9AD8\u5EA6
Examples=\u4F8B\u5B50
Formula_Dictionary_Display_Example=\u5B9E\u9645\u503C\u8303\u56F4\u4E3A \
Formula_Dictionary_Display_Example=\u5B9E\u9645\u503C\u8303\u56F4\u4E3A \=range(100), \u5BF9\u5B9E\u9645\u503C\u8303\u56F4\u5185\u7684\u6BCF\u4E2A$$$\u7684\u663E\u793A\u516C\u5F0F\u4E3A \=0 - $$$\uFF0C\n\u5219\u6700\u7EC8\u7684\u7ED3\u679C\u5B9E\u9645\u503C\u4E3A1, 2, ..., 100, \u663E\u793A\u503C\u4E3A-1, -2, ... , -100\u3002
StyleAlignment-Horizontal=\u6C34\u5E73\u5BF9\u9F50
HyperLink_Must_Alone_Reset=\u591A\u4E2A\u8D85\u94FE
ExpandD-Expand_Direction=\u6269\u5C55\u65B9\u5411
@ -1986,4 +1985,19 @@ FormulaD-Data_Fields=\u6570\u636E\u9879
FR-Designer_Role=\u89D2\u8272
FR-Designer_Permissions=\u6743\u9650
FR-Designer_Form_Button=\u6309\u94AE
FR-Designer_WF_Name=\u540D\u79F0
FR-Designer_WF_Name=\u540D\u79F0
FR-Designer_Double=\u5C0F\u6570
FR-Designer_Query=\u67E5\u8BE2
FR-Designer_Font=\u5B57\u4F53
FR-Designer_Confirm=\u786E\u8BA4
FR-Designer_Parameter=\u53C2\u6570
FR-Designer-Plugin_Plugin=\u63D2\u4EF6
FR-Designer_Background=\u80CC\u666F
Template=\u6A21\u7248
FR-Designer_Original_Marked_Filed=\u539F\u59CB\u6807\u8BB0\u5B57\u6BB5
FR-Designer_Build_Tree_Accord_Marked_Filed_Length=\u4F9D\u8D56\u6240\u9009\u6570\u636E\u96C6\u7684\u6807\u8BB0\u5B57\u6BB5\u7684\u957F\u5EA6\u6784\u5EFA\u6811
FR-Designer_Tree_Data_Field=\u6811\u6570\u636E\u5B57\u6BB5
FR-Designer_Parent_Marked_Field=\u7236\u6807\u8BB0\u5B57\u6BB5
FR-Designer_Build_Tree_Accord_Parent_Marked_Filed=\u4F9D\u8D56\u6240\u9009\u6570\u636E\u96C6\u7684\u7236\u6807\u8BB0\u5B57\u6BB5\u6784\u5EFA\u6811
FR-Product_Demo=\u4EA7\u54C1\u6F14\u793A

251
designer_base/src/com/fr/design/locale/designer_zh_TW.properties

@ -1,7 +1,6 @@
# generated time: \u661F\u671F\u56DB \u5341\u4E00\u6708 24 12:02:51 CST 2016
FR-Designer-BBSLogin_Account=\u767B\u5165\u5E33\u865F
FR-Designer-BBSLogin_Connection-Failure=\u767B\u5165\u9023\u63A5\u5931\u6557\uFF0C\u8ACB\u6AA2\u67E5\u7576\u524D\u7DB2\u8DEF\u72C0\u614B
FR-Designer-BBSLogin_Connection-Failure-Tip=\u9023\u7DDA\u5931\u6557\u63D0\u793A
FR-Designer-BBSLogin_Connection-Failure=\u767B\u5165\u9023\u63A5\u5931\u6557\uFF0C\u8ACB\u6AA2\u67E5\u7576\u524D\u7DB2\u8DEF\u72C0\u614B
FR-Designer-BBSLogin_Connection-Failure-Tip=\u9023\u7DDA\u5931\u6557\u63D0\u793A
FR-Designer-BBSLogin_Forgot-Password=\u5FD8\u8A18\u5BC6\u78BC
FR-Designer-BBSLogin_Login=\u767B\u9304
FR-Designer-BBSLogin_Login-Failure-Tip=\u5E33\u865F\u6216\u5BC6\u78BC\u932F\u8AA4\uFF0C\u8ACB\u91CD\u65B0\u767B\u9304
@ -9,10 +8,10 @@ FR-Designer-BBSLogin_Password=\u5BC6 \u78BC
FR-Designer-BBSLogin_Password-Empty-Tip=\u5BC6\u78BC\u4E0D\u80FD\u70BA\u7A7A
FR-Designer-BBSLogin_Register-Account=\u8A3B\u518A\u5E33\u865F
FR-Designer-BBSLogin_Switch-Account=\u5207\u63DB\u5E33\u865F
FR-Designer-BBSLogin_Privite-Message=\u79C1\u4EBA\u6D88\u606F
FR-Designer-BBSLogin_Privite-Message=\u79C1\u4EBA\u8A0A\u606F
FR-Designer-BBSLogin_Times=\u6B21
FR-Designer-BBSLogin_Username-Empty-Tip=\u4F7F\u7528\u8005\u70BA\u7A7A\u63D0\u793A
FR-Designer-Basic_More_Color=\u66F4\u591A\u984F\u8272...
FR-Designer-Basic_More_Color=\u66F4\u591A\u984F\u8272
FR-Designer-Estate_Any=\u4E0D\u9650
FR-Designer-Estate_Default_Font=\u9810\u8A2D\u5B57\u9AD4
FR-Designer-Estate_Default_Null=\u9810\u8A2D\u70BA\u7A7A
@ -106,8 +105,8 @@ FR-Designer_Font-Family=\u5B57\u9AD4\u540D\u7A31
FR-Designer_Font-Size=\u5B57\u9AD4\u5927\u5C0F
FR-Designer_Forbid_Drag_into_Adapt_Pane=\u8A72\u5C0D\u8C61\u4E0D\u5141\u8A31\u62D6\u5165\u8868\u55AE\u4E3B\u9AD4
FR-Designer_Forbid_Drag_into_Para_Pane=\u8A72\u5C0D\u8C61\u4E0D\u80FD\u62D6\u5165\u53C3\u6578\u9762\u677F
FR-Designer_Foreground=\u984F\u8272
FR-Designer_Form-AuthorityEdited_Cannot_be_Supported=\u66AB\u4E0D\u652F\u6301\u8868\u55AE\u6B0A\u9650\u7DE8\u8F2F
FR-Designer_Foreground=\u5B57\u5F62\u8272\u5F69
FR-Designer_Form-AuthorityEdited_Cannot_be_Supported=\u66AB\u4E0D\u652F\u63F4\u8868\u55AE\u6B0A\u9650\u7DE8\u8F2F
FR-Designer_Form-Report=\u5831\u8868\u683C\u5F0F
FR-Designer_Form_EmbeddedTD=\u5167\u5D01\u683C\u5F0F
FR-Designer_Form_Module=\u6A21\u7D44\u683C\u5F0F
@ -122,7 +121,7 @@ FR-Designer_Hyperlink-Form_link=\u7576\u524D\u8868\u55AE\u5C0D\u8C61
FR-Designer_IDCard=\u8EAB\u4EFD\u8B49
FR-Designer_Icon=\u5716\u793A
FR-Designer_Index=\u7D22\u5F15
FR-Designer_Input_Rule=\u8F38\u5165\u898F\u5247
FR-Designer_Input_Rule=\u586B\u5BEB\u898F\u5247
FR-Designer_Language_Default=\u9810\u8A2D\u8A9E\u8A00
FR-Designer_Layout=\u5E03\u5C40\u3001\u898F\u5283
FR-Designer_Layout-HBox=\u6C34\u5E73\u76D2\u5B50\u5E03\u5C40
@ -137,7 +136,7 @@ FR-Designer_M-Repeat-Freeze=\u91CD\u8907\u8207\u51CD\u7D50
FR-Designer_M-Server=\u4F3A\u670D\u5668
FR-Designer_M-SwitchWorkspace=\u5207\u63DB\u5DE5\u4F5C\u5340\u9593
FR-Designer_M-Template=\u7BC4\u672C
FR-Designer_MDX_Explain=\u8A9E\u6CD5\u683C\u5F0F\u53C3\u8003MDX\u8A9E\u6CD5\u3002\n\u4F8B\u5982\uFF1A\nWITH\nMEMBER [Measures].[Special Discount] AS\n[Measures].[Discount Amount] * 1.5\nSELECT\n[Measures].[Special Discount] on COLUMNS,\nNON EMPTY [Product].[Product].MEMBERS ON Rows\nFROM [Adventure Works]\nWHERE [Product].[Category].[Bikes]\n\u8A3B\uFF1ACOLUMNS\u3001ROWS\u53EF\u4EE5\u4F7F\u75280\u30011\u4EE3\u66FF\u67E5\u8EF8\u53EA\u652F\u6301\u8FD4\u56DE\u5169\u500B\u8EF8\u3002
FR-Designer_MDX_Explain=\u8A9E\u6CD5\u683C\u5F0F\u53C3\u8003MDX\u8A9E\u6CD5\u3002\n\u4F8B\u5982\uFF1A\nWITH\nMEMBER [Measures].[Special Discount] AS\n[Measures].[Discount Amount] * 1.5\nSELECT\n[Measures].[Special Discount] on COLUMNS,\nNON EMPTY [Product].[Product].MEMBERS ON Rows\nFROM [Adventure Works]\nWHERE [Product].[Category].[Bikes]\n\u8A3B\uFF1ACOLUMNS\u3001ROWS\u53EF\u4EE5\u4F7F\u75280\u30011\u4EE3\u66FF\u67E5\u8EF8\u53EA\u652F\u63F4\u8FD4\u56DE\u5169\u500B\u8EF8\u3002
FR-Designer_M_Help-About_Software=\u95DC\u65BC\u8EDF\u9AD4
FR-Designer_M_Help-Tutorial=\u64CD\u4F5C\u8AAA\u660E
FR-Designer_Max_Value=\u6700\u5927\u503C
@ -152,7 +151,7 @@ FR-Designer_Para-Body=\u53C3\u6578\u672C\u6587
FR-Designer_Parameters=\u53C3\u6578
FR-Designer_Phone=\u96FB\u8A71
FR-Designer_PostCode=\u90F5\u905E\u5340\u865F
FR-Designer_Present=\u7576\u4E0B
FR-Designer_Present=\u6A21\u5F0F
FR-Designer_Preview=\u9810\u89BD
FR-Designer_Preview-Data-Confusion=\u6DF7\u6DC6\u8CC7\u6599\u9810\u89BD
FR-Designer_Product_Demo=\u7522\u54C1\u5C55\u793A
@ -162,9 +161,9 @@ FR-Designer_Refresh_Parameter_In_SQL=\u5728SQL\u4E2D\u91CD\u65B0\u6574\u7406\u76
FR-Designer_Reg_Expressions=\u6B63\u5247\u8868\u9054\u5F0F
FR-Designer_Reg_Max_Length=\u6700\u5927\u9577\u5EA6
FR-Designer_Reg_Min_Length=\u6700\u5C0F\u9577\u5EA6
FR-Designer_ReportColumns-Columns=\u5831\u8868\u6B04\u4F4D
FR-Designer_ReportColumns-Columns=\u6B04\u5206\u6B04
FR-Designer_Return-Date=\u8FD4\u56DE\u65E5\u671F
FR-Designer_RichText= RTF
FR-Designer_RichText=RTF
FR-Designer_RichTextEditor=RTF\u7DE8\u8F2F\u5668
FR-Designer_Row=\u5217
FR-Designer_Row_Dimension=\u5217\u7DAD\u5EA6
@ -181,7 +180,7 @@ FR-Designer_Support_QQ=\u652F\u63F4QQ
FR-Designer_Swatch=\u6A23\u54C1
FR-Designer_Tab_title=tab\u6A19\u984C
FR-Designer_TableData=\u8CC7\u6599\u96C6
FR-Designer_Thank_guest=\u611F\u8B1D\u5BA2\u6236
FR-Designer_Thank_guest=\u611F\u8B1D\u5BA2\u6236
FR-Designer_Thanks-To=\u9CF4\u8B1D
FR-Designer_Title=\u6A19\u984C
FR-Designer_Total=\u7E3D\u5171
@ -195,10 +194,10 @@ FR-Designer_VerticalBoxLayout=\u6A6B\u5411\u4F48\u5C40
FR-Designer_Visible=\u53EF\u898B
FR-Designer_WLayout-Border-ToolTips=\u908A\u754C\u4F48\u5C40
FR-Designer_WaterMark=\u6C34\u5370
FR-Designer_Widget=\u5C0F\u5DE5\u5177
FR-Designer_Widget=\u63A7\u5236\u9805
FR-Designer_Widget-Settings=\u8A2D\u5B9A
FR-Designer_Widget-Visible=\u53EF\u898B
FR-Designer_XMLA_Explain=\u5728\u4F7F\u7528\u591A\u7DAD\u8CC7\u6599\u96C6\u53D6\u6578\u524D\uFF0C\u60A8\u9996\u5148\u9700\u8981\u4E00\u500B\u53EF\u6210\u529F\u9023\u63A5\u7684\u591A\u7DAD\u8CC7\u6599\u5EAB\u9023\u63A5\u3002\n\u8A2D\u5B9A\u5B8C\u8CC7\u6599\u9023\u63A5\u5F8C\uFF0C\u67E5\u8A62\u8CC7\u6599\u6642,\u6709\u5169\u7A2E\u4E0D\u540C\u7684\u53D6\u6578\u624B\u6BB5\u3002\n1.\u7C21\u55AE\u901A\u7528\u67E5\u8A62\uFF1A\n\u7C21\u55AE\u901A\u7528\u67E5\u8A62\u9069\u7528\u65BCFineBI\u53CA\u5176\u4ED6\u591A\u7DAD\u8CC7\u6599\u5EAB\u3002\n\u4F7F\u7528\u7C21\u55AE\u901A\u7528\u67E5\u8A62\uFF0CFR\u5C07\u81EA\u52D5\u8B80\u53D6\u9078\u64C7cube\u7684\u5C64\u6B21\u7D50\u69CB\uFF0C\u60A8\u53EF\u4EE5\u76F4\u63A5\u9078\u64C7\u6240\u9700\u7684\u5EA6\u91CF\u503C\u53CA\u7DAD\u5EA6\uFF0C\u4E26\u6DFB\u52A0\u7BE9\u9078\u689D\u4EF6\uFF0CFR\u6703\u6839\u64DA\u60A8\u7684\u9078\u64C7\u81EA\u52D5\u67E5\u8A62\u8CC7\u6599\u3002\n\u7C21\u55AE\u901A\u7528\u67E5\u8A62\u50C5\u652F\u6301\u7DAD\u5EA6\u53CA\u5EA6\u91CF\u503C\u5169\u500B\u8EF8\u7684\u67E5\u8A62\u3002\n\u5728\u5EA6\u91CF\u503C\u53CA\u7DAD\u5EA6\u8A2D\u5B9A\u4E2D\uFF0C\u76EE\u524D\u60A8\u53EA\u80FD\u9078\u64C7\u6240\u9700\u7DAD\u5EA6\uFF0C\u7121\u6CD5\u624B\u52D5\u4FEE\u6539\u3002\n\u904E\u6FFE\u689D\u4EF6\u63A1\u7528OPEN SQL\u8A9E\u6CD5\uFF0C\u60A8\u53EF\u4EE5\u9375\u5165${abc}\u4F5C\u70BA\u4E00\u500B\u53C3\u6578\uFF0C\u7528\u6CD5\u540C\u8CC7\u6599\u5EAB\u8CC7\u6599\u96C6\u3002\n2.\u81EA\u5B9A\u7FA9MDX\u67E5\u8A62\uFF1A\n\u4F7F\u7528\u81EA\u5B9A\u7FA9MDX\u67E5\u8A62\uFF0C\u60A8\u53EF\u4EE5\u81EA\u5B9A\u7FA9\u7FA9MDX\u8A9E\u53E5\u67E5\u8A62\u6240\u9700\u7D50\u679C\u3002\n\u6CE8\u610F\uFF0C\u81EA\u5B9A\u7FA9MDX\u67E5\u8A62\u4E5F\u53EA\u652F\u6301\u5169\u500B\u8EF8\u7684\u67E5\u8A62\u3002\n\u60A8\u53EF\u9375\u5165${abc}\u4F5C\u70BA\u4E00\u500B\u53C3\u6578\uFF0C\u7528\u6CD5\u540C\u8CC7\u6599\u5EAB\u8CC7\u6599\u96C6\u3002\nFineBI\u7684cube\u4E0D\u652F\u6301MDX\u67E5\u8A62\u3002
FR-Designer_XMLA_Explain=\u5728\u4F7F\u7528\u591A\u7DAD\u8CC7\u6599\u96C6\u53D6\u6578\u524D\uFF0C\u60A8\u9996\u5148\u9700\u8981\u4E00\u500B\u53EF\u6210\u529F\u9023\u63A5\u7684\u591A\u7DAD\u8CC7\u6599\u5EAB\u9023\u63A5\u3002\n\u8A2D\u5B9A\u5B8C\u8CC7\u6599\u9023\u63A5\u5F8C\uFF0C\u67E5\u8A62\u8CC7\u6599\u6642,\u6709\u5169\u7A2E\u4E0D\u540C\u7684\u53D6\u6578\u624B\u6BB5\u3002\n1.\u7C21\u55AE\u901A\u7528\u67E5\u8A62\uFF1A\n\u7C21\u55AE\u901A\u7528\u67E5\u8A62\u9069\u7528\u65BCFineBI\u53CA\u5176\u4ED6\u591A\u7DAD\u8CC7\u6599\u5EAB\u3002\n\u4F7F\u7528\u7C21\u55AE\u901A\u7528\u67E5\u8A62\uFF0CFR\u5C07\u81EA\u52D5\u8B80\u53D6\u9078\u64C7cube\u7684\u5C64\u6B21\u7D50\u69CB\uFF0C\u60A8\u53EF\u4EE5\u76F4\u63A5\u9078\u64C7\u6240\u9700\u7684\u5EA6\u91CF\u503C\u53CA\u7DAD\u5EA6\uFF0C\u4E26\u6DFB\u52A0\u7BE9\u9078\u689D\u4EF6\uFF0CFR\u6703\u6839\u64DA\u60A8\u7684\u9078\u64C7\u81EA\u52D5\u67E5\u8A62\u8CC7\u6599\u3002\n\u7C21\u55AE\u901A\u7528\u67E5\u8A62\u50C5\u652F\u63F4\u7DAD\u5EA6\u53CA\u5EA6\u91CF\u503C\u5169\u500B\u8EF8\u7684\u67E5\u8A62\u3002\n\u5728\u5EA6\u91CF\u503C\u53CA\u7DAD\u5EA6\u8A2D\u5B9A\u4E2D\uFF0C\u76EE\u524D\u60A8\u53EA\u80FD\u9078\u64C7\u6240\u9700\u7DAD\u5EA6\uFF0C\u7121\u6CD5\u624B\u52D5\u4FEE\u6539\u3002\n\u904E\u6FFE\u689D\u4EF6\u63A1\u7528OPEN SQL\u8A9E\u6CD5\uFF0C\u60A8\u53EF\u4EE5\u9375\u5165${abc}\u4F5C\u70BA\u4E00\u500B\u53C3\u6578\uFF0C\u7528\u6CD5\u540C\u8CC7\u6599\u5EAB\u8CC7\u6599\u96C6\u3002\n2.\u81EA\u5B9A\u7FA9MDX\u67E5\u8A62\uFF1A\n\u4F7F\u7528\u81EA\u5B9A\u7FA9MDX\u67E5\u8A62\uFF0C\u60A8\u53EF\u4EE5\u81EA\u5B9A\u7FA9\u7FA9MDX\u8A9E\u53E5\u67E5\u8A62\u6240\u9700\u7D50\u679C\u3002\n\u6CE8\u610F\uFF0C\u81EA\u5B9A\u7FA9MDX\u67E5\u8A62\u4E5F\u53EA\u652F\u63F4\u5169\u500B\u8EF8\u7684\u67E5\u8A62\u3002\n\u60A8\u53EF\u9375\u5165${abc}\u4F5C\u70BA\u4E00\u500B\u53C3\u6578\uFF0C\u7528\u6CD5\u540C\u8CC7\u6599\u5EAB\u8CC7\u6599\u96C6\u3002\nFineBI\u7684cube\u4E0D\u652F\u63F4MDX\u67E5\u8A62\u3002
FR-Designer_bold=\u7C97\u9AD4
FR-Designer_font=\u5B57\u9AD4
FR-Designer_italic=\u659C\u9AD4
@ -349,7 +348,7 @@ FR-Designer_Add_JS_warning=\u8ACB\u8F38\u51FA\u6B63\u78BA\u7684url\u5730\u5740\u
FR-Designer-Encoding_Type=\u7DE8\u78BC\u985E\u578B
FR-Designer-FirstRow_IS_ColumnName=\u7B2C\u4E00\u5217\u5305\u542B\u6B04\u6A19\u984C
FR-Designer_Dismenber=\u5206\u9694\u7B26
FR-Designer_TableDismember=\u88FD\u9336\u7B26
FR-Designer_TableDismember=\u88FD\u8868\u7B26
FR-Designer_Space=\u7A7A\u683C
FR-Designer_CommaDismenber=\u9017\u865F
FR-Designer_Other=\u5176\u4ED6
@ -357,7 +356,7 @@ FR-Designer-Series_Dismenber_As_Single=\u9023\u7E8C\u5206\u9694\u7B26\u8996\u70B
FR-Designer_KeyPoint=\u95DC\u9375\u7BC0\u9EDE
FR-Designer_loadedTreeModel=\u52A0\u8F09\u5931\u6557,\u8ACB\u6AA2\u67E5\u5F8C\u91CD\u8A66
FR-Designer-Failed_to_load_the_plugin=\u7121\u6CD5\u52A0\u8F09\u63D2\u4EF6\uFF0C\u8ACB\u66F4\u65B0\u63D2\u4EF6\uFF1A
FR-Designer-Plugin_Please_Update_Jar=\u8ACB\u66F4\u65B0Jar\u5305, \u63D2\u4EF6\u9700\u6C42\u6700\u4F4E\u7248\u672C
FR-Designer-Plugin_Please_Update_Jar=\u8ACB\u66F4\u65B0Jar\u5305\u81F3\:
FR-Designer-Invalid_Page_Number=\u7121\u6548\u9801\u78BC
FR-Designer_Get-CubeGetting=\u7372\u53D6cube
FR-Designer_XMLA_Database=\u8CC7\u6599\u5EAB
@ -393,7 +392,7 @@ FR-Designer_Product_improve=\u7522\u54C1\u6539\u826F
FR-Designer_Join_Product_improve=\u52A0\u5165\u7522\u54C1\u6539\u826F\u8A08\u5283
FR-Designer_Preference-Function=\u529F\u80FD\u8A2D\u5B9A
FR-Designer_max_undo_limit=\u6700\u5927\u5FA9\u539F\u6B21\u6578
FR-Designer_Surport_String_To_Formula=\u652F\u6301\u5B57\u5143\u4E32\u7DE8\u8F2F\u70BA\u516C\u5F0F
FR-Designer_Surport_String_To_Formula=\u652F\u63F4\u5B57\u5143\u4E32\u7DE8\u8F2F\u70BA\u516C\u5F0F
FR-Designer_Always=\u59CB\u7D42
FR-Designer_Export_Setting=\u532F\u51FA\u914D\u7F6E
FR-Designer_Select_Export_Log_Directory=\u9078\u64C7\u532F\u51FA\u76EE\u9304
@ -560,20 +559,20 @@ FR-Designer_Parameter-Formula=\u516C\u5F0F
FR-Designer_Plugin_Should_Update_Please_Contact_Developer=\u633F\u4EF6\u7248\u672C\u904E\u4F4E\uFF0C\u5B58\u5728API\u4E0D\u76F8\u5BB9\uFF0C\u8ACB\u806F\u7CFB\u958B\u767C\u8005\u965E\u7D1A\u633F\u4EF6
FR-Designer_WidgetOrder=\u63A7\u4EF6\u9806\u5E8F
FR-Designer_Mobile_Form_Analysis_Annotation=\u6CE8\u91CB\uFF1A\u53EF\u4EE5\u901A\u904E\u8A72\u5C6C\u6027\u63A7\u5236\u8868\u55AE\u5728APP\u4E2D\u7684\u89E3\u6790\u65B9\u5F0F\u3002
FR-Designer_Mobile_Report_Analysis_Annotation=\u6CE8\u91CB\uFF1A\u53EF\u4EE5\u901A\u904E\u8A72\u5C6C\u6027\u63A7\u5236\u5831\u8868\u5728APP\u4E2D\u7684\u89E3\u6790\u65B9\u5F0F\uFF0C\u53EA\u652F\u6301\u5206\u9801\u9810\u89BD\uFF0C\u586B\u5831\u9810\u89BD\u6642\u5C6C\u6027\u7121\u6548\u3002
FR-Designer_Background_Null=
FR-Designer_Background_Color=
FR-Designer_Background_Texture=
FR-Designer_Background_Pattern=
FR-Designer_Background_Gradient_Color=
FR-Designer_Background_Image=
FR-Designer_Background_Clear=
FR-Designer_Background_Image_Select=
FR-Designer_Mobile_Report_Analysis_Annotation=\u6CE8\u91CB\uFF1A\u53EF\u4EE5\u901A\u904E\u8A72\u5C6C\u6027\u63A7\u5236\u5831\u8868\u5728APP\u4E2D\u7684\u89E3\u6790\u65B9\u5F0F\uFF0C\u53EA\u652F\u63F4\u5206\u9801\u9810\u89BD\uFF0C\u586B\u5831\u9810\u89BD\u6642\u5C6C\u6027\u7121\u6548\u3002
FR-Designer_Background_Null=\u6C92\u6709\u80CC\u666F
FR-Designer_Background_Color=\u984F\u8272
FR-Designer_Background_Texture=\u7D0B\u7406
FR-Designer_Background_Pattern=\u5716\u6848
FR-Designer_Background_Gradient_Color=\u6F38\u8B8A\u8272
FR-Designer_Background_Image=\u5716\u7247
FR-Designer_Background_Clear=\u6E05\u9664
FR-Designer_Background_Image_Select=\u9078\u64C7\u5716\u7247
FR-Designer_Too_Large_To_Paste=\u7D44\u4EF6\u5927\u5C0F\u8D85\u51FA\u908A\u754C\uFF0C\u7121\u6CD5\u7C98\u8CBC\uFF01
FR-Designer_Too_Small_To_Paste=\u6B64\u8655\u7121\u6CD5\u7C98\u8CBC\uFF0C\u5C0F\u65BC\u7D44\u4EF6\u6700\u5C0F\u9AD8\u5EA6\uFF01
FR-Designer_Initial_Background_Tips=
FR-Designer_Mouse_Move_Tips=
FR-Designer_Mouse_Click_Tips=
FR-Designer_Initial_Background_Tips=\u6309\u9215\u7684\u521D\u59CB\u80CC\u666F
FR-Designer_Mouse_Move_Tips=\u6ED1\u9F20\u79FB\u52D5\u5230\u6309\u9215\u4E0A\u7684\u80CC\u666F\uFF0C\u82E5\u7121\u5247\u4E0D\u6539\u8B8A\u80CC\u666F
FR-Designer_Mouse_Click_Tips=\u6ED1\u9F20\u9EDE\u64CA\u6309\u9215\u6642\u80CC\u666F\uFF0C\u82E5\u7121\u5247\u4E0D\u6539\u8B8A\u80CC\u666F
FR-Designer_AxisReversed=\u8EF8\u9006\u5E8F
FR-Designer_Logarithmic=\u5C0D\u6578\u523B\u5EA6
FR-Designer_Chart_Log_Base=\u5E95\u6578
@ -582,20 +581,20 @@ FR-Designer_Style=\u6A23\u5F0F
FR-Designer_Color=\u984F\u8272
FR-Designer_Border=\u6846\u7DDA
FR-Designer_Background-Pattern=\u5716\u6848
FR-Designer_SimpleDetail_Report=
FR-Designer_Reset=
FR-Designer_AllCategories=
FR-Designer-Selected_Widget=
FR-Designer_SimpleCross_Report=
FR-Designer_LocalWidget=
FR-Designer_SimpleDetail_Report=\u7C21\u55AE\u660E\u7D30\u8868
FR-Designer_Reset=\u53D6\u6D88\u522A\u9664
FR-Designer_AllCategories=\u6240\u6709\u5206\u985E
FR-Designer-Selected_Widget=\u7576\u524D\u63A7\u5236\u9805
FR-Designer_SimpleCross_Report=\u7C21\u55AE\u4EA4\u53C9\u8868
FR-Designer_LocalWidget=\u672C\u5730\u7D44\u4EF6\u5EAB
FR-Designer_Edit_Button_ToolBar=\u7DE8\u8F2F\u6309\u9215\u6240\u5728\u5DE5\u5177\u6B04
FR-Designer_Remove_Button_ToolBar=\u79FB\u9664\u6309\u9215\u6240\u5728\u5DE5\u5177\u6B04
FR-Designer_Install_Template=
FR-Designer_Allow-Blank=
FR-Designer_Delete_Template=
FR-Designer_Download_Template=
FR-Designer_DoubleLayer_Report=
FR-Designer_Validate=
FR-Designer_Install_Template=\u5B89\u88DD\u7D44\u4EF6
FR-Designer_Allow-Blank=\u5141\u8A31\u70BA\u7A7A
FR-Designer_Delete_Template=\u522A\u9664\u7D44\u4EF6
FR-Designer_Download_Template=\u4E0B\u8F09\u7D44\u4EF6
FR-Designer_DoubleLayer_Report=\u96D9\u5C64\u8868\u982D
FR-Designer_Validate=\u6821\u9A57
CellWrite-InsertRow_NULL=\u7A7A\u503C
DashBoard-ChartFloat=\u5716\u8868
contact_info=\u806F\u7E6B\u8A0A\u606F(\u9078\u586B)
@ -611,12 +610,12 @@ FR-Designer_Number=\u6578\u5B57
FR-Designer-Widget-Style_Common=\u666E\u901A
M-Save_As=\u53E6\u5B58\u70BA
Following_parameters_are_not_generated=\u4EE5\u4E0B\u53C3\u6578\u672A\u751F\u6210
FR-Designer-Basic_Activation_Key_Copy_OK=Key has been copy to clipboard
FR-Designer-Basic_Activation_Key_Copy_OK=\u5DF2\u8907\u88FD\u5230\u526A\u8CBC\u677F
Utils-Current_Sheet=\u7576\u524D\u7684Sheet
ConditionB-is_less_than=\u5C0F\u65BC
BorderLayout-West=\u897F
AnalysisLine=\u5206\u6790\u7DDA\u578B
Layer_Report_Warnning_info=<html>\u5217\u5F0F\u5F15\u64CE\u9069\u7528\u65BC\u5927\u8CC7\u6599\u91CF\u60C5\u5F62\u4E0B\u3002<br/>\u4F7F\u7528\u6B64\u5F15\u64CE\u5F88\u591A\u5831\u8868\u7279\u6027\u5C07\u4E0D\u518D\u652F\u6301\uFF0C<br/>\u8A73\u7D30\u5167\u5BB9\u8ACB\u898B\u76F8\u95DC\u6587\u6A94\u3002</html>
Layer_Report_Warnning_info=<html>\u5217\u5F0F\u5F15\u64CE\u9069\u7528\u65BC\u5927\u8CC7\u6599\u91CF\u60C5\u5F62\u4E0B\u3002<br/>\u4F7F\u7528\u6B64\u5F15\u64CE\u5F88\u591A\u5831\u8868\u7279\u6027\u5C07\u4E0D\u518D\u652F\u63F4\uFF0C<br/>\u8A73\u7D30\u5167\u5BB9\u8ACB\u898B\u76F8\u95DC\u6587\u6A94\u3002</html>
Tree-Width=\u5BEC\u5EA6
alert_word=\u9078\u64C7\u4E0D\u56FA\u5B9A\u5217\u9AD8\u532F\u51FA\u6642, \u7DE8\u8F2F\u532F\u51FA\u7684word, \u5132\u5B58\u683C\u5217\u9AD8\u6703\u96A8\u8457\u5167\u5BB9\u81EA\u52D5\u62C9\u4F38, \u6B64\u60C5\u6CC1\u4E0B\u532F\u51FA\u7D50\u679C\u8207\u9810\u89BD\u7D50\u679C\u53EF\u80FD\u6703\u4E0D\u518D\u4E00\u81F4.
PageSetup-Paper_Size=\u7D19\u5F35\u5927\u5C0F
@ -624,13 +623,13 @@ M-Page_Setup=\u9801\u9762\u8A2D\u5B9A
DashBoard-FormBook=\u8868\u55AE
X-Coordinate=\u6A6B\u5EA7\u6A19
Style-Line_Spacing=\u5217\u9593\u8DDD
FR-Designer_Plugin_Should_Update_Title=Warning
FR-Designer_Plugin_Should_Update_Title=\u63D2\u4EF6\u5347\u7D1A\u63D0\u9192
Server-Define_Data_Connection=\u5B9A\u7FA9\u8CC7\u6599\u9023\u63A5
BarInside=\u67F1\u5B50\u5167\u5074
Border-Color=\u6846\u7DDA\u984F\u8272
NotAllow=\u4E0D\u5408\u6CD5
Utils-File_type=\u6A94\u6848\u985E\u578B
FR-Designer-Plugin_Install_From_Local=Install plugin from local file
FR-Designer-Plugin_Install_From_Local=\u5F9E\u672C\u5730\u6587\u4EF6\u5B89\u88DD
Summary_Method=\u532F\u7E3D\u65B9\u5F0F
Select_Specified_Grouping=\u9078\u64C7\u81EA\u5B9A\u7FA9\u5206\u7D44
HF-Number_of_Page=\u7E3D\u9801\u6578
@ -638,13 +637,13 @@ FR-Designer-Tree_Height=\u9AD8\u5EA6
Owner=\u4E3B
Home=\u4E3B\u9801
FR-Server_Embedded_Server_Stop=\u5167\u7F6E\u7684\u4F3A\u670D\u5668-\u505C\u6B62
FR-Designer-Plugin_Detecting_Update=Detecting update
FR-Designer-Plugin_Detecting_Update=\u6B63\u5728\u6AA2\u6E2C\u66F4\u65B0
HF-Whether_to_define_the_selected_type=\u662F\u5426\u5B9A\u7FA9\u9078\u4E2D\u7684\u985E\u578B
StyleAlignment-Right=\u9760\u53F3\u5C0D\u9F4A
FR-Designer_Alignment-Style=\u5C0D\u9F4A\u65B9\u5F0F
PageSetup-Title_Start_Column=\u91CD\u8907\u6A19\u984C\u6B04
Tree-Mutiple_Selection_Or_Not=\u591A\u9078
FR-Designer-Plugin_Search=Search
FR-Designer-Plugin_Search=\u641C\u7D22
Choose_Role=\u6B0A\u9650\u63A7\u5236
Append_Delete_Row_Message=\u6CE8\u610F\uFF01\u6307\u5B9A\u7684\u5132\u5B58\u683C\u9700\u8981\u8A2D\u5B9A\u64F4\u5C55\u5C6C\u6027
Form-ComboBox=\u4E0B\u62C9\u6846
@ -663,7 +662,7 @@ Email-Can_Preview_Report_Content=\u6B63\u6587\u9810\u89BD\u5831\u8868\u5167\u5BB
FR-Designer-FRFont_Italic=\u659C\u9AD4
CellWrite-Print_Background=\u5217\u5370/\u532F\u51FA\u5132\u5B58\u683C\u80CC\u666F
Wizard=\u56AE\u5C0E
Preference-Is_Drag_Permited=\u652F\u6301\u62D6\u62FD
Preference-Is_Drag_Permited=\u652F\u63F4\u62D6\u62FD
FR-Designer_Release_Lock=\u89E3\u9396
Form-Delimiter=\u5206\u9694\u7B26
wrong=\u51FA\u932F\u4E86
@ -676,7 +675,7 @@ Need_Min_Value=\u9700\u8981\u6700\u5C0F\u503C
Allow_Blank=\u5141\u8A31\u70BA\u7A7A\u767D
CellWrite-InsertRow_DEFAULT=\u9810\u8A2D\u503C
Widget-Load_By_Complete=\u5B8C\u5168\u8F09\u5165
FR-Designer-Basic_Only_Submit_Current_Sheet=
FR-Designer-Basic_Only_Submit_Current_Sheet=\u53EA\u63D0\u4EA4\u7576\u524Dsheet
Sort-Sort_Order=\u6392\u5217\u9806\u5E8F
File-File_Size_Limit=\u6A94\u6848\u5927\u5C0F\u9650\u5236
PrintP-Print=\u5217\u5370(T)
@ -685,12 +684,12 @@ Preference-Setting_Colors=\u984F\u8272\u914D\u7F6E
Judge=\u5224\u65B7
Image-Adjust=\u9069\u61C9
Collect-User_Information_DES=\u7528\u6236\u8A0A\u606F\u78BC\u53EA\u662F\u7528\u4F86\u6536\u96C6\u4F7F\u7528\u8005\u8A0A\u606F\u7684\uFF0C\u53EA\u8981\u9EDE\u64CA\u4E0A\u9762\u7684"\u7372\u53D6\u7528\u6236\u8A0A\u606F\u78BC"\u6309\u9215\uFF0C\u5C31\u6703\u5F48\u51FA\u4E00\u500B\u65B0\u7684\u700F\u89BD\u5668\u7A97\u9AD4\uFF0C\u767B\u9304\u5230\u7522\u54C1\u5B98\u65B9\u7DB2\u7AD9\u7372\u5F97\u9019\u500B\u7528\u6236\u8A0A\u606F\u78BC\uFF0C\u6574\u500B\u7A0B\u5E8F\u53EA\u9700\u89813\u5206\u9418\uFF0C\u53EA\u9700\u8981\u64CD\u4F5C\u4E00\u6B21\uFF0C\u800C\u4E14\u5B8C\u5168\u514D\u8CBB\u3002
FR-Designer_Plugin_Normal_Update_From_Local=Update from local file
FR-Designer_Plugin_Normal_Update_From_Local=\u5F9E\u672C\u5730\u6A94\u6848\u66F4\u65B0
BackgroundTexture-Canvas=\u756B\u5E03
BarOutSide=\u67F1\u5B50\u5916\u5074
Preview_ToolTips=\u9810\u89BD\u63D0\u793A
FRFont-Family=\u540D\u5B57
FR-Lic_does_not_Support_Remote=\u60A8\u7576\u524D\u4F7F\u7528\u7684lic\u4E0D\u652F\u6301\u9060\u7A0B\u8A2D\u8A08\u529F\u80FD\uFF0C\u8ACB\u5347\u7D1A\u60A8\u7684lic
FR-Lic_does_not_Support_Remote=\u60A8\u7576\u524D\u4F7F\u7528\u7684lic\u4E0D\u652F\u63F4\u9060\u7A0B\u8A2D\u8A08\u529F\u80FD\uFF0C\u8ACB\u5347\u7D1A\u60A8\u7684lic
InterfaceStyle=\u98A8\u683C
RWA-Key=\u4E3B\u9375
WF-Name=\u540D\u7A31
@ -715,7 +714,7 @@ FR-Designer_Indent-Pixel=\u50CF\u7D20
FR-Designer_Unit_MM=\u516C\u5398
IDLE=\u7A7A\u9592
FRFont-Underline=\u4E0B\u5283\u7DAB
FR-Designer-Plugin_Read_Plugin_List_Error=Error to read plugin list
FR-Designer-Plugin_Read_Plugin_List_Error=\u53BB\u8B80\u63D2\u4EF6\u5217\u8868\u6642\u767C\u751F\u932F\u8AA4
Type_Set=\u985E\u578B\u8A2D\u5B9A
M_Format_A-Cell_Attributes=\u5176\u4ED6\u5C6C\u6027
CellWrite-Show_As_Image=\u7528\u5716\u7247\u986F\u793A\u5167\u5BB9
@ -740,7 +739,7 @@ Hgap=\u6C34\u5E73\u9593\u9699
FR-Designer_Enter-New-FileName=\u8ACB\u8F38\u5165\u65B0\u7684\u6A94\u6848\u540D
Verify_Fail=\u6821\u9A57\u5931\u6557
CellWrite-InsertRow_Policy=\u63D2\u5165\u5217\u7B56\u7565
FR-Designer-Plugin_Illegal_Plugin_Zip=Illegal plugin zip
FR-Designer-Plugin_Illegal_Plugin_Zip=\u4E0D\u662F\u5408\u6CD5\u7684\u63D2\u4EF6\u5305
RCodeVersion=\u7248\u672C
Convert=\u8F49\u63DB
Please_Drag=\u8ACB\u62D6\u5165\u5217\u6B04\u6B04\u4F4D\u3001\u532F\u7E3D\u6B04\u4F4D
@ -795,7 +794,7 @@ read_time_out=\u52A0\u8F09\u8D85\u6642
JavaScript-Commit_to_Database=\u63D0\u4EA4\u5165\u5EAB
DS-Relation_TableData=\u95DC\u806F\u8CC7\u6599\u96C6
CellWrite-Page_Before_Row=\u5217\u524D\u5206\u9801
FR-Designer-Plugin_Load_Plugins_From_Server=Loading plugins from store
FR-Designer-Plugin_Load_Plugins_From_Server=\u6B63\u5728\u5F9E\u63D2\u4EF6\u5546\u5E97\u7372\u53D6\u6578\u64DA
D-Dispaly_Divide_Result_Set_into_Groups=\u5C07\u7D50\u679C\u96C6\u9032\u884C\u5206\u7D44
Closed=\u5DF2\u95DC\u9589
RWA-Help=\u8A2D\u5B9A\u672A\u4FEE\u6539\u4E0D\u66F4\u65B0\u5F8C\uFF0C\u586B\u5831\u9810\u89BD\u5831\u8868\uFF0C\u8A18\u9304\u6240\u5728\u5132\u5B58\u683C\u6C92\u6709\u88AB\u7DE8\u8F2F\u4FEE\u6539\uFF0C\u5247\u6B64\u8A18\u9304\u4E0D\u6703\u9032\u884C\u66F4\u65B0\uFF1B\n\u5728\u5927\u8CC7\u6599\u91CF\u8A18\u9304\u67E5\u8A62\u4E26\u56DE\u586B\u60C5\u6CC1\u4E0B\uFF0C\u555F\u7528\u8A72\u8A2D\u5B9A\uFF0C\u53EF\u4EE5\u63D0\u9AD8\u586B\u5831\u63D0\u4EA4\u6027\u80FD\u3002
@ -810,7 +809,7 @@ No-Privilege=\u6C92\u6709\u6B0A\u9650
ReportColumns-Repeat_Column=\u91CD\u8907\u6B04\u5E8F\u6B04
SecondGraduationUnit=\u6B21\u8981\u523B\u5EA6\u55AE\u4F4D
Form-Widget_Property_Value=\u5C6C\u6027\u503C
GIVE-NAME=Give Name
GIVE-NAME=\u547D\u540D
FR-Designer_Rename=\u91CD\u547D\u540D
Utils-Merge_Cell=\u5408\u5E76\u5132\u5B58\u683C
Style-Spacing_After=\u6BB5\u5F8C
@ -833,7 +832,7 @@ Not_use_a_cell_attribute_table_editing=\u60A8\u4E0D\u53EF\u4EE5\u7528\u5132\u5B5
Root=\u6839\u7BC0\u9EDE
cycle=\u5468\u671F
open-new-form-tip=\u7576\u524D\u6A21\u677F\u70BA711\u4EE5\u4E0B\u7248\u672C\u88FD\u4F5C, \u7121\u6CD5\u517C\u5BB9, \u4E0D\u80FD\u6253\u958B. \u5047\u5982\u60F3\u6253\u958B\u4FEE\u6539\u6B64\u8868\u55AE, \u8ACB\u4F7F\u7528\u5C0D\u61C9\u7248\u672C\u8A2D\u8A08\u5668\u6253\u958B.
Support-Current_Auto_Complete_Shortcut=Current Shortcut
Support-Current_Auto_Complete_Shortcut=\u7576\u524D\u5FEB\u6377\u9375
GROUPING_MODE=\u666E\u901A\u5206\u7D44
DBCP_MAX_IDLE=\u6700\u5927\u7A7A\u9591\u9023\u63A5\u6578
BackgroundTexture-BlueTissuePaper=\u85CD\u8272\u7802\u7D19
@ -845,7 +844,7 @@ PageSetup-Placement_Center_on_Page=\u7F6E\u4E2D\u65B9\u5F0F
sure_to_delete=\u78BA\u8A8D\u522A\u9664
Already_exists_not_add_repeat=\u5DF2\u7D93\u5B58\u5728\uFF0C\u8ACB\u4E0D\u8981\u91CD\u8907\u65B0\u589E
Axis_Title=\u8EF8\u6A19\u984C
FR-Designer-Plugin_Install_Failed=Install failed
FR-Designer-Plugin_Install_Failed=\u63D2\u4EF6\u5B89\u88DD\u5931\u6557
FR-Designer-Widget-Style_Frame=\u6846\u67B6
MainGraduationUnit=\u4E3B\u8981\u523B\u5EA6\u55AE\u4F4D
Second_Axis=\u6B21\u5750\u6A19\u8EF8
@ -858,14 +857,14 @@ RP_Authority_Edit=\u6B0A\u9650\u7DE8\u8F2F
Warnning=\u63D0\u9192
RoleName_Can_Not_Be_Null=\u89D2\u8272\u540D\u4E0D\u5141\u8A31\u70BA\u7A7A\u4E14\u4E0D\u80FD\u91CD\u8907
Application=\u61C9\u7528\u7A0B\u5F0F
Formula_Dictionary_Display_Examples_Html=
Formula_Dictionary_Display_Examples_Html=<html>\u5BE6\u969B\u503C\u7BC4\u570D\u70BA \=range(100),\u5C0D\u5BE6\u969B\u503C\u7BC4\u570D\u5167\u7684\u6BCF\u500B$$$\u7684\u986F\u793A\u516C\u5F0F\u70BA \=0 - $$$\uFF0C<br>\u5247\u6700\u7D42\u7684\u7D50\u679C\u5BE6\u969B\u503C\u70BA1, 2, ..., 100,\u986F\u793A\u503C\u70BA-1, -2, ... , -100\u3002<br>&nbsp;</html>
ECP-error_pwd=\u5BC6\u78BC\u932F\u8AA4
FR-Hyperlink_ChartHyperlink=\u5716\u8868\u8D85\u93C8
M_Edit-FormatBrush=\u8907\u88FD\u683C\u5F0F(B)
Indent-Pixel=\u50CF\u7D20
FR-Designer-Widget-Style_Border_Line=\u6846\u7DDA\u7C97\u7D30
Widget-Default_Widget_Config=\u57FA\u672C\u63A7\u5236\u9805
Version-does-not-support=\u60A8\u7576\u524D\u4F7F\u7528\u7684lic\u4E0D\u652F\u6301\u9060\u7A0B\u8A2D\u8A08\u529F\u80FD\uFF0C\u8ACB\u5347\u7D1A\u60A8\u7684lic
Version-does-not-support=\u60A8\u7576\u524D\u4F7F\u7528\u7684lic\u4E0D\u652F\u63F4\u9060\u7A0B\u8A2D\u8A08\u529F\u80FD\uFF0C\u8ACB\u5347\u7D1A\u60A8\u7684lic
StyleAlignment-Right_To_Left=\u5F9E\u53F3\u5411\u5DE6
Style-Spacing_Before=\u6BB5\u524D
Has_Existed=\u5DF2\u7D93\u5B58\u5728
@ -881,7 +880,7 @@ Parameter-Boolean=\u5E03\u723E\u578B
FRFont-Strikethrough=\u522A\u9664\u7DDA
Server-version-tip=\u60A8\u7576\u524D\u9023\u63A5\u7684\u4F3A\u670D\u5668\u7248\u672C\u4F4E\u65BC\u60A8\u4F7F\u7528\u7684\u8A2D\u8A08\u5668\u7248\u672C\u865F\uFF0C\u7E7C\u7E8C\u9023\u63A5\uFF0C\u60A8\u7DE8\u8F2F\u7684\u4E00\u4E9B\u5C6C\u6027\u53EF\u80FD\u7121\u6CD5\u6709\u6548\u5132\u5B58\u3002\u5047\u5982\u9700\u8981\u9023\u63A5\u8ACB\u5C07\u60A8\u7684\u8A2D\u8A08\u5668\u7248\u672C\u8207\u4F3A\u670D\u5668\u7248\u672C\u4FDD\u6301\u4E00\u81F4
Form-All_Files=\u5168\u90E8\u6A94\u6848
DBCP_NUM_TEST_PER_EVCTION_RUN=\u7A7A\u9591\u93C8\u63A5\u56DE\u6536\u6AA2\u67E5\u6578
DBCP_NUM_TEST_PER_EVCTION_RUN=\u7A7A\u9591\u9023\u63A5\u56DE\u6536\u6AA2\u67E5\u6578
FR-Designer-FRFont_Family=\u540D\u5B57
Device=\u8A2D\u5099
M_Insert-Cell=\u5132\u5B58\u683C\u5143\u7D20
@ -889,7 +888,7 @@ Present-Formula_Present=\u516C\u5F0F\u6A21\u5F0F
FRFont-Superscript=\u4E0A\u6A19
CellWrite-Page_Before_Column=\u6B04\u524D\u5206\u9801
Golden=\u91D1\u8272
Preference-Support_Cell_Editor_Definition=\u652F\u6301\u5132\u5B58\u683C\u7DE8\u8F2F\u5668
Preference-Support_Cell_Editor_Definition=\u652F\u63F4\u5132\u5B58\u683C\u7DE8\u8F2F\u5668
M-Page_Preview=\u5206\u9801\u9810\u89BD
HJS-CC_to=\u6284\u9001
Tree-Select_Leaf_Only=\u53EA\u8FD4\u56DE\u8449\u5B50\u7BC0\u9EDE
@ -962,10 +961,10 @@ Widget-Load_Type=\u8F09\u5165
template_unsaved=\u7BC4\u672C\u7121\u6CD5\u5132\u5B58
check_communication=\u8ACB\u6AA2\u67E5\u7DB2\u8DEF\u901A\u8A0A\u662F\u5426\u6B63\u5E38\u53CA\u4F3A\u670D\u5668\u662F\u5426\u6B63\u5E38\u904B\u884C
List-Need_Head=\u9700\u8981\u6B04\u8868\u982D
FR-Designer-Plugin_Has_Been_Installed=Plugin has been installed
FR-Designer-Plugin_Has_Been_Installed=\u63D2\u4EF6\u5DF2\u5B89\u88DD\uFF0C\u82E5\u60F3\u66F4\u65B0\u63D2\u4EF6\uFF0C\u8ACB\u5207\u63DB\u81F3\u63D2\u4EF6\u66F4\u65B0
FR-Widget_Tree_And_Table=\u63A7\u5236\u9805\u6A39\u548C\u63A7\u5236\u9805\u8868
FR-Base_Help=\u8AAA\u660E
FR-Designer-Plugin_Update_Successful=Update successfully
FR-Designer-Plugin_Update_Successful=\u63D2\u4EF6\u5347\u7D1A\u6210\u529F\uFF0C\u91CD\u555F\u4F3A\u670D\u5668\u4EE5\u751F\u6548
August=\u516B\u6708
LOG-Is_Being_Openned=\u6B63\u5728\u6253\u958B
BackgroundTexture-Oak=\u6A61\u6728
@ -973,7 +972,7 @@ Multi_nam_formula=\ \u8CC7\u6599\u96C6\u540D\: \u8CC7\u65
TurnOn=\u958B\u5553
HJS-Send_Successfully=\u767C\u9001\u6210\u529F
Mon=\u661F\u671F\u4E00
Inner_Parameter=Inner Parameter
Inner_Parameter=\u5167\u7F6E\u53C3\u6578
Required=\u5FC5\u586B
Summary=\u532F\u7E3D
template_unopened=\u7121\u6CD5\u6253\u958B\u7BC4\u672C
@ -982,14 +981,14 @@ DataFunction-Min=\u6700\u5C0F\u503C
StyleFormat-Percent=\u767E\u5206\u6BD4
FR-App-All_Custom=\u81EA\u5B9A\u7FA9
M_Insert-Data_Column=\u63D2\u5165\u8CC7\u6599\u6B04
PLEASE=Please
PLEASE=\u8ACB
Numbers=\u6578\u76EE
Release_Lock=\u89E3\u9396
Background-Background_is_NULL=\u6C92\u6709\u80CC\u666F
FR-Designer_Sytle-FRFont=\u5B57\u9AD4
Gradation=\u5C64\u6B21
The_current_list_is_empty=\u7576\u524D\u6B04\u8868\u70BA\u7A7A
Formula_Dictionary_Display_Examples=
Formula_Dictionary_Display_Examples=\ \u5BE6\u969B\u503C\u7BC4\u570D\u70BA \=range(100),\u5C0D\u5BE6\u969B\u503C\u7BC4\u570D\n \u5167\u7684\u6BCF\u500B$$$\u7684\u986F\u793A\u516C\u5F0F\u70BA \=0 - $$$\uFF0C\n \u5247\u6700\u7D42\u7684\u7D50\u679C\u5BE6\u969B\u503C\u70BA1, 2, ..., 100, \n \u986F\u793A\u503C\u70BA-1, -2, ... , -100\u3002
Schedule-Template_Parameter=\u7BC4\u672C\u53C3\u6578
JSShow=\u52D5\u614B\u5C55\u793A
Level_coordinates=\u5C64\u6B21\u5750\u6A19
@ -1003,7 +1002,7 @@ RWA-Remove_Field=\u79FB\u9664\u6B04\u4F4D
Form-Desin_Width=\u8A2D\u8A08\u5BEC\u5EA6
No-tableData=\u6C92\u6709\u8FD4\u56DE\u8CC7\u6599\u96C6
Page_Total=\u5171
FR-Designer-Plugin_Connect_Server_Error=Error to connect plugin store
FR-Designer-Plugin_Connect_Server_Error=\u7121\u6CD5\u9023\u63A5\u63D2\u4EF6\u5546\u5E97\uFF0C\u8ACB\u7A0D\u5F8C\u518D\u8A66
Import-Excel_Source=Excel\u6E90\u6A94\u6848
Utils-Left_to_Right_a=\u5F9E\u5DE6\u5F80\u53F3
ExpandD-Expand_Attribute=\u64F4\u5C55\u5C6C\u6027
@ -1018,7 +1017,7 @@ Utils-Move_Up=\u4E0A\u79FB
BackgroundTexture-PurpleMesh=\u7D2B\u8272\u7DB2\u8DEF
Export-Word=Word\u683C\u5F0F
ServerM-Widget_Manager=\u5143\u4EF6\u7BA1\u7406
FR-Designer-Basic_Activation_Key=Activation Key\:
FR-Designer-Basic_Activation_Key=\u8A2D\u8A08\u5668\u7DE8\u865F\:
FR-App-Template_Report_Not_Exist=\u6240\u9078\u5831\u8868\u4E0D\u5B58\u5728
Protected=\u4FDD\u8B77
Skip=\u8DF3\u904E
@ -1039,7 +1038,7 @@ FR-Designer-Tree_Width=\u5BEC\u5EA6
Record=\u8A18\u9304
Poly-Report_Component=\u8907\u5408\u5F0F\u5831\u8868\u5143\u4EF6
Options=\u9078\u9805
NS-war-remote=\u932F\u8AA4\u4EE3\u78BC\:1117 \u58D3\u7E2E\u90E8\u7F72\u4E0D\u652F\u6301\u9060\u7A0B\u8A2D\u8A08
NS-war-remote=\u932F\u8AA4\u4EE3\u78BC\:1117 \u58D3\u7E2E\u90E8\u7F72\u4E0D\u652F\u63F4\u9060\u7A0B\u8A2D\u8A08
Sche-Minute=\u5206
Three_Rows_Of_Three_Grid=\u4E09\u5217\u4E09\u6B04\u7684\u683C\u5B50
WorkSheet=\u81EA\u7531\u5831\u8868
@ -1048,7 +1047,7 @@ BindColumn-Select=\u6B04\u8868
FR-Widget_Mobile_Terminal=\u884C\u52D5\u8A2D\u5099
FR-Background_Image_Titled=\u5E73\u92EA
SetPrinterOffset=\u5370\u8868\u6A5F\u504F\u79FB
FR-Designer-Plugin_Installed=Installed
FR-Designer-Plugin_Installed=\u5DF2\u5B89\u88DD
FR-Designer-Hyperlink_Name=\u540D\u5B57
FR-Designer_Form-Button=\u6309\u9215
Black=\u9ED1\u8272
@ -1058,7 +1057,7 @@ PDF-Print_isPopup=\u662F\u5426\u5F48\u51FA\u8A2D\u5B9A\u6846
LayerPageReport_CountPerPage=\u6BCF\u9801\u8A18\u9304\u6578
Display_Modes=\u986F\u793A\u6A21\u5F0F
RowSpan=\u5217\u8DE8\u5EA6
Datasource-Test_Connection=\u6E2C\u8A66\u93C8\u63A5
Datasource-Test_Connection=\u6E2C\u8A66\u9023\u63A5
Function-Function_Manager=\u51FD\u6578\u7BA1\u7406\u5668
Host_Name=\u4E3B\u6A5F\u540D
CellWrite-Show_As_HTML=\u7528HTML\u986F\u793A\u5167\u5BB9
@ -1068,7 +1067,7 @@ Form-SupportTag=\u6A19\u7C64\u5F62\u5F0F\u986F\u793A
ReportD-Report_Write_Attributes=\u5831\u8868\u586B\u5831\u5C6C\u6027
DataFunction-Count=\u500B\u6578
Top_And_Thick_Bottom_Border_Line=\u4E0A\u6846\u7DDA\u548C\u7C97\u4E0B\u6846\u7DDA
Client=Client
Client=\u5BA2\u6236\u7AEF
BindColumn-Result_Serial_Number_Start_From_1=\u5E8F\u865F\u5F9E1\u958B\u59CB
History=\u6B77\u53F2
Already_exists=\u5DF2\u5B58\u5728\uFF0C\u8ACB\u91CD\u65B0\u8F38\u5165\uFF01
@ -1125,7 +1124,7 @@ LayerPageReport_PageEngine=\u4F7F\u7528\u6309\u9801\u904B\u7B97\u5206\u6BB5\u57F
Schedule-The_selected_file_must_be_end_with_filter=\u9078\u64C7\u7684\u6A94\u6848\u5FC5\u9808\u4EE5.cpt\u6216\u8005.class\u6216\u8005.frm\u7D50\u5C3E\u3002
Provide=\u63D0\u4F9B
FormulaD-Math_&_Trig=\u6578\u5B78\u548C\u4E09\u89D2\u51FD\u6578
FR-Designer-StyleAlignment_Right=\u9760\u53F3\u5C0D\u9F4A
FR-Designer-StyleAlignment_Right=\u9760\u53F3
Error_TableDataNameRepeat=\u5DF2\u7D93\u5728\u4F3A\u670D\u5668\u8CC7\u6599\u96C6\u4E2D\u5B58\u5728\u6216\u8005\u591A\u500B\u8CC7\u6599\u96C6\u540D\u91CD\u8907\u3002
Choose_None=\u4E0D\u9078
File-tree=\u6A94\u6848\u6A39
@ -1139,7 +1138,7 @@ Dictionary-Dynamic_SQL=\u52D5\u614BSQL
FR-Designer_Form-CheckBoxGroup=\u5FA9\u9078\u6846\u7D44
DBCP_TIME_BETWEEN_EVICTIONRUNSMILLIS=\u7A7A\u9591\u9023\u63A5\u56DE\u6536\u5668\u4F11\u7720\u6642\u9593
ReportD-Export_Hided_Column=\u532F\u51FA\u96B1\u85CF\u6B04
Preference-Support_Undo=\u652F\u6301\u5FA9\u539F
Preference-Support_Undo=\u652F\u63F4\u5FA9\u539F
FR-mobile_report_analysis=\u5831\u8868\u89E3\u6790
Month=\u6708
Utils-Column_Width=\u6B04\u5BEC
@ -1163,12 +1162,12 @@ Delete_Column=\u522A\u9664\u6B04
SecondGraduationLine=\u6B21\u8981\u523B\u5EA6\u7DDA
SpecifiedG-Groups=\u7D44
CONTINUUM_MODE=\u76F8\u9130\u9023\u7E8C\u5206\u7D44
Datasource-Connection_failed=\u93C8\u63A5\u5931\u6557
Datasource-Connection_failed=\u9023\u63A5\u5931\u6557
CategoryName=\u5206\u985E\u540D
DBCP_INITIAL_SIZE=\u521D\u59CB\u5316\u9023\u63A5\u6578
Colors=\u984F\u8272
FR-Import-Export_CSV=CSV\u683C\u5F0F(\u9017\u865F\u5206\u9694)
FR-Designer-StyleAlignment_Left=\u9760\u5DE6\u5C0D\u9F4A
FR-Designer-StyleAlignment_Left=\u9760\u5DE6
BackgroundTexture-PaperBag=\u7D19\u888B
RWA-BuildIn_SQL=\u5167\u7F6ESQL
SingleLayer=\u55AE\u5C64
@ -1207,7 +1206,7 @@ FS_Start_Date=\u958B\u59CB\u65E5\u671F
FR-ConditionB_Operator=\u64CD\u4F5C\u7B26
Printer-Alias=\u5225\u540D
DS-Class_Name=\u985E\u540D
FR-Designer-Plugin_Has_Been_Disabled=Plugin has been disabled
FR-Designer-Plugin_Has_Been_Disabled=\u63D2\u4EF6\u5DF2\u88AB\u7981\u7528\uFF0C\u91CD\u555F\u8A2D\u8A08\u5668\u53CA\u4F3A\u670D\u5668\u751F\u6548\uFF0C\u4F3A\u670D\u5668\u9700\u624B\u52D5\u91CD\u555F
Sort-Original=\u4E0D\u6392\u5E8F
Utils-Top_to_Bottom_a=\u5F9E\u4E0A\u5F80\u4E0B
Parameter-String=\u5B57\u5143\u4E32
@ -1228,7 +1227,7 @@ Interface=\u4ECB\u9762
FR-Designer-Beyond_Bounds=\u8D85\u51FA\u6216\u8005\u5C0F\u65BCbody\u908A\u754C\uFF0C\u4E0D\u80FD\u8ABF\u6574\u5927\u5C0F
seconds=\u79D2
Auto-Build=\u81EA\u52D5\u69CB\u5EFA
FR-Designer-Plugin_Install_Successful=Install successful
FR-Designer-Plugin_Install_Successful=\u8A72\u63D2\u4EF6\u5C07\u5728\u91CD\u65B0\u555F\u52D5\u8A2D\u8A08\u5668\u53CA\u4F3A\u670D\u5668\u6642\u88AB\u555F\u7528\uFF0C\u4F3A\u670D\u5668\u9700\u624B\u52D5\u91CD\u555F
Template_Path=\u7BC4\u672C\u8DEF\u5F91
FR-Designer-FRFont_Bold=\u7C97\u9AD4
Poly_Name=\u805A\u5408\u584A\u540D
@ -1237,7 +1236,7 @@ Hyperlink-Self_Window=\u7576\u524D\u7A97\u53E3
FR-Designer-Widget-Style_Title=\u6A19\u984C
FR-Designer-FRFont_Size=\u5927\u5C0F
M_File-Export-SVG=SVG\u683C\u5F0F
Capacity=Capacity
Capacity=\u5BB9\u91CF
Rose_Red=\u73AB\u7470\u7D05
StyleAlignment-The_value_of_rotation_must_between_-90_and_90_degrees=\u65CB\u8F49\u503C\u5FC5\u9808\u5728\u8CA090\u5EA6\u523090\u5EA6
HF-Move_Left=\u5DE6\u79FB
@ -1258,7 +1257,7 @@ Deep=\u6DF1\u5EA6
FRFont-Shadow=\u9670\u5F71
Reportlet=\u7DB2\u8DEF\u5831\u8868
Calendar=\u65E5\u66C6
DateFormat-Custom_Warning=\u8A3B\uFF1A\u81EA\u5B9A\u7FA9\u65E5\u671F\u683C\u5F0F\u4E0D\u652F\u6301\u683C\u5F0F\u6821\u9A57
DateFormat-Custom_Warning=\u8A3B\uFF1A\u81EA\u5B9A\u7FA9\u65E5\u671F\u683C\u5F0F\u4E0D\u652F\u63F4\u683C\u5F0F\u6821\u9A57
Unit_MM=\u516C\u5398
Server-Start=\u555F\u52D5
CellPage-Can_Break_On_Paginate=\u5206\u9801\u6642\u53EF\u4EE5\u65B7\u958B
@ -1287,7 +1286,7 @@ Brown=\u8910\u8272
Select_A_Tree_DataSource_To_Build=\u9078\u64C7\u4E00\u500B\u6A39\u72C0\u8CC7\u6599\u96C6\u4F86\u69CB\u5EFA
Overlapping=\u91CD\u66E1\u578B
DS-Class_TableData=\u985E\u5225\u8CC7\u6599\u96C6
FR-Designer-Plugin_Illegal_Plugin_Zip_Cannot_Be_Install=Illegal plugin,cannot be installed
FR-Designer-Plugin_Illegal_Plugin_Zip_Cannot_Be_Install=\u4E0D\u53EF\u8B58\u5225\u7684\u63D2\u4EF6\uFF0C\u7121\u6CD5\u5B89\u88DD
DisplayNothingBeforeQuery=\u9EDE\u64CA\u67E5\u8A62\u524D\u4E0D\u986F\u793A\u5176\u4ED6\u5167\u5BB9
Y_Axis=Y\u8EF8
FormulaD-Most_Recently_Used=\u5E38\u7528\u51FD\u6578
@ -1318,7 +1317,7 @@ FR-Base_Table=\u8868
Des-Remove_WorkSheet=\u8981\u522A\u9664\u7684\u8868\u53EF\u80FD\u5B58\u5728\u8CC7\u6599,\u5982\u679C\u8981\u6C38\u4E45\u522A\u9664\u9019\u4E9B\u8CC7\u6599,\u8ACB\u6309'\u78BA\u5B9A'\u6309\u9215.
Rotation=\u65CB\u8F49
Undefined=\u672A\u5B9A\u7FA9
Support-Auto_Complete_Shortcut=Auto Complete Shortcut
Support-Auto_Complete_Shortcut=\u81EA\u52D5\u88DC\u5168\u5FEB\u6377\u9375
Set_Column_Title_End=\u8A2D\u5B9A\u91CD\u8907\u7D50\u5C3E\u6B04
Submit_Url=\u63D0\u4EA4\u5730\u5740
ReportServerP-Are_you_sure_to_delete_the_selected_printer=\u4F60\u78BA\u5BE6\u60F3\u522A\u9664\u9078\u4E2D\u7684\u5370\u8868\u6A5F\u55CE
@ -1334,7 +1333,7 @@ Format-Error=\u8F38\u5165\u7684\u503C\u683C\u5F0F\u4E0D\u6B63\u78BA
Server-Stop=\u505C\u6B62
Preference-Setting_Grid=\u7DB2\u683C\u8A2D\u5B9A
ReportServerP-Add_Printer=\u589E\u52A0\u5370\u8868\u6A5F
FR-Designer-Plugin_Active=Active
FR-Designer-Plugin_Active=\u555F\u7528
Utils-File_name=\u6A94\u6848\u540D
NOT_NULL_Des=\u4E0D\u80FD\u70BA\u7A7A
Right_Border_Line=\u53F3\u6846\u7DDA
@ -1348,17 +1347,17 @@ ReportColumns-Columns_vertically=\u6B04\u5206\u6B04
ReportGUI-Print_Background=\u5217\u5370/\u532F\u51FA\u5831\u8868\u80CC\u666F
Export-CSV=CSV\u683C\u5F0F(\u9017\u865F\u5206\u9694)
M_Edit-Paste=\u8CBC\u4E0A(P)
FR-Designer-Basic_Restart_Designer=Restart designer
FR-Designer-Basic_Restart_Designer=\u91CD\u555F\u8A2D\u8A08\u5668
ReportServerP-PDF2-INFO=\u50C5\u5728LINUX/UNIX\u4E0B\u672A\u5B89\u88DD\u4E2D\u6587\u5B57\u9AD4\u6642\u4F7F\u7528
FormulaD-Check_Valid=\u6AA2\u67E5\u5408\u6CD5\u6027
server_disconnected=\u9023\u63A5\u5DF2\u65B7\u958B
ParameterD-Parameter_name_cannot_be_null=\u53C3\u6578\u7684\u540D\u5B57\u4E0D\u53EF\u4EE5\u70BA\u7A7A
FR-Designer-Plugin_Version_Is_Lower_Than_Current=The version of plugin is lower than current
FR-Designer-Plugin_Version_Is_Lower_Than_Current=\u5347\u7D1A\u5305\u7684\u63D2\u4EF6\u7248\u672C\u6C92\u6709\u6BD4\u7576\u524D\u7684\u9AD8
RWA-NotChange_Unmodified=\u4E0D\u6539\u8B8A\u6642\u4E0D\u66F4\u65B0
User_Information=\u7528\u6236\u8A0A\u606F
Custom_styles_lost=\u81EA\u5B9A\u7FA9\u6A23\u5F0F\u5DF2\u4E1F\u5931
PageSetup-Margin=\u9801\u908A\u8DDD
M-New_FormBook=\u5EFA\u7ACB\u65B0\u5831\u8868
M-New_FormBook=\u65B0\u589E\u8868\u55AE\uFF08\u6C7A\u7B56\u8868\uFF09
Widget-TreeNode=\u6A39\u7BC0\u9EDE\u6309\u9215
Form-Url=\u5730\u5740
Utils-Beyond_the_left_side_of_Border=\u8D85\u51FA\u5DE6\u908A\u754C
@ -1370,10 +1369,10 @@ paper=\u7D19\u5F35
Not_Exsit=\u4E0D\u5B58\u5728\u65BC\u5831\u8868
Utils-Insert_Row=\u63D2\u5165\u5217
Utils-Delete_Row=\u522A\u9664\u5217
not_support_authority_edit=\u8A72\u5143\u7D20\u4E0D\u652F\u6301\u8A31\u53EF\u6B0A\u63A7\u5236
Formula_Tips=\u516C\u5F0F\u5FC5\u9808\u4EE5"\
not_support_authority_edit=\u8A72\u5143\u7D20\u4E0D\u652F\u63F4\u8A31\u53EF\u6B0A\u63A7\u5236
Formula_Tips=\u516C\u5F0F\u5FC5\u9808\u4EE5"\="\u865F\u958B\u982D
FR-Action_Copy=\u8907\u88FD
Compile_Success=Compile Success
Compile_Success=\u7DE8\u8B6F\u6210\u529F
BackgroundTexture-RecycledPaper=\u518D\u751F\u7D19
StyleAlignment-Single_Line=\u55AE\u5217\u986F\u793A
Utils-Move_Down=\u4E0B\u79FB
@ -1460,7 +1459,7 @@ DBCP_TEST_ON_BORROW=\u7372\u53D6\u9023\u63A5\u524D\u6AA2\u9A57
FR-Designer_layerIndex=\u4F9D\u8CF4\u7684\u5C64\u6578
WEB-Write_Setting=\u586B\u5831\u9762\u9762\u8A2D\u5B9A
M-New_WorkBook=\u65B0\u589E\u5DE5\u4F5C\u7C3F
FR-Designer-Plugin_Has_Been_Actived=Plugin is now active
FR-Designer-Plugin_Has_Been_Actived=\u63D2\u4EF6\u5DF2\u88AB\u555F\u7528\uFF0C\u91CD\u555F\u8A2D\u8A08\u5668\u53CA\u4F3A\u670D\u5668\u751F\u6548\uFF0C\u4F3A\u670D\u5668\u9700\u624B\u52D5\u91CD\u555F
Datasource-Maximum_Number_of_Preview_Rows=\u6700\u5927\u7684\u9810\u89BD\u5217\u6578
ExpandD-Cell_Expand_Attributes=\u64F4\u5C55\u5C6C\u6027
Select_the_repeated_row_and_column=\u9078\u64C7\u9700\u8981\u91CD\u8907\u7684\u5217\u6B04
@ -1510,7 +1509,7 @@ ReportColumns-Repeat_Row=\u8907\u88FD\u5217\u5E8F\u6B04
Print_Setting=\u5217\u5370\u8A2D\u5B9A
Registration-User_Name=\u5E33\u865F
Datasource-User_Defined=\u81EA\u5B9A\u7FA9
FR-Designer-Plugin_DownLoadMessage=\u63D2\u4EF6\u9700\u8981\u4F9D\u8CF4\u7684\u652F\u6301\uFF0C\u662F\u5426\u5B89\u88DD({R1} m)?
FR-Designer-Plugin_DownLoadMessage=\u63D2\u4EF6\u9700\u8981\u4F9D\u8CF4\u7684\u652F\u63F4\uFF0C\u662F\u5426\u5B89\u88DD({R1} m)?
Delay=\u5EF6\u9072
FR-Designer-All_MSBold=\u5FAE\u8EDF\u96C5\u9ED1
Utils-Now_create_connection=\u6B63\u5728\u5EFA\u7ACB\u8CC7\u6599\u9023\u63A5
@ -1536,7 +1535,7 @@ FR-Designer_Cancel=\u53D6\u6D88
Button-Group-Display-Columns=\u5C55\u793A\u6B04\u6578
Widget-Height=\u63A7\u5236\u9805\u9AD8\u5EA6
Examples=\u4F8B\u5B50
Formula_Dictionary_Display_Example=\u5BE6\u969B\u503C\u7BC4\u570D\u70BA Formula_Dictionary_Display_Examples\
Formula_Dictionary_Display_Example=\u5BE6\u969B\u503C\u7BC4\u570D\u70BA Formula_Dictionary_Display_Examples\= \u5BE6\u969B\u503C\u7BC4\u570D\u70BA Formula_Dictionary_Display_Examples_Html\=<html>\u5BE6\u969B\u503C\u7BC4\u570D\u70BA Formula_Editor\=\u516C\u5F0F\u7DE8\u8F2F\u5668
StyleAlignment-Horizontal=\u6C34\u5E73\u5C0D\u9F4A
HyperLink_Must_Alone_Reset=\u591A\u500B\u8D85\u93C8
ExpandD-Expand_Direction=\u64F4\u5C55\u65B9\u5411
@ -1566,7 +1565,7 @@ HF-Undefined=\u6C92\u6709\u5B9A\u7FA9
Widget-User_Defined_Widget_Config=\u9810\u5B9A\u7FA9\u63A7\u5236\u9805
Report-Write_Attributes_Group_Warning=\u8A2D\u5B9A\u7232\u5132\u5B58\u683C\u7D44\u7684\u5404\u6B04\u4F4D\u4E2D\u7684\u5132\u5B58\u683C\u500B\u6578\u5FC5\u9808\u76F8\u540C
Form-Single_quote=\u55AE\u5F15\u865F
Compile_Success_And_Then_Save=Compile Success And Then Save
Compile_Success_And_Then_Save=\u7DE8\u8B6F\u6210\u529F\u624D\u80FD\u6B63\u78BA\u5132\u5B58
FR-Designer_Layout-Padding=\u5167\u908A\u8DDD
Layout_Container=\u4F48\u5C40\u5BB9\u5668
Admin=\u7BA1\u7406\u54E1
@ -1583,7 +1582,7 @@ Tree-Return_Full_Path=\u7D50\u679C\u8FD4\u56DE\u5B8C\u6574\u5C64\u6B21\u8DEF\u5F
FRFont-bolditalic=\u7C97\u9AD4\u659C\u9AD4
FR-Base_StyleFormat_Sample=\u793A\u4F8B
Area_Value=\u5340\u57DF\u503C
FR-Designer-Plugin_Disable=Disable
FR-Designer-Plugin_Disable=\u7981\u7528
Utils-Are_you_sure_to_remove_the_selected_item=\u4F60\u78BA\u5BE6\u6C7A\u5B9A\u522A\u9664\u9078\u4E2D\u7684\u9805
Face_Write=\u586B\u5831
Poly-Report_Block=\u8868\u683C\u985E\u578B\u805A\u5408\u584A
@ -1594,7 +1593,7 @@ FR-Hyperlink_Please_Select_Reportlet=\u8ACB\u9078\u64C7\u7DB2\u8DEF\u5831\u8868
FS_Report_Type=\u985E\u578B
HF-New_Line=\u63DB\u5217\u7B26
Privilege=\u6B0A\u9650
Export-Offline-Html=\u8F38\u51FA\u96E2\u7DDAhtml\u5831\u8868
Export-Offline-Html=\u532F\u51FA\u96E2\u7DDAhtml\u5831\u8868
FR-Designer_open-new-form-tip=\u7576\u524D\u6A21\u677F\u70BA711\u4EE5\u4E0B\u7248\u672C\u88FD\u4F5C, \u7121\u6CD5\u517C\u5BB9, \u4E0D\u80FD\u6253\u958B. \u5047\u5982\u60F3\u6253\u958B\u4FEE\u6539\u6B64\u8868\u55AE, \u8ACB\u4F7F\u7528\u5C0D\u61C9\u7248\u672C\u8A2D\u8A08\u5668\u6253\u958B.
FR-Designer-Widget-Style_Frame_Style=\u6846\u67B6\u6A23\u5F0F
Present-No_Present=\u53D6\u6D88\u6A21\u5F0F\u8A2D\u5B9A
@ -1614,14 +1613,14 @@ FR-Designer_Date=\u65E5\u671F
Column_Multiple=\u8CC7\u6599\u500D\u6578
FR-App-All_File=\u6A94\u6848
Sort-Descending=\u964D\u51AA
FR-Designer-Plugin_Delete=Delete
FR-Designer-Plugin_Delete=\u522A\u9664
Above=\u4EE5\u4E0A\u7248\u672C
Utils-The-Chart=\u5716\u8868
FRFont-plain=\u5E38\u898F
Calculating=\u8655\u7406\u4E2D
Form-Object=\u8868\u55AE\u5C0D\u8C61
May=\u4E94\u6708
FR-Designer_Plugin_Normal_Update=Update
FR-Designer_Plugin_Normal_Update=\u66F4\u65B0
FR-Hyperlink_Reportlet=\u7DB2\u8DEF\u5831\u8868
M_Edit-Copy=\u8907\u88FD(C)
Sub_Report_Message2=\u7236\u5831\u8868\u4E0D\u5728\u7576\u524D\u904B\u884C\u74B0\u5883\u4E0B
@ -1633,10 +1632,10 @@ FR-Designer_Server-version-tip-moreInfo=\u5EFA\u8B70\u60A8\u6240\u5C6C\u5718\u96
Get_Lock=\u52A0\u9396
HF-Edit_Footer=\u7DE8\u8F2F\u9801\u5C3E
Datasource-New_Charset=\u65B0\u7DE8\u78BC
Preference-Custom=Custom
Preference-Custom=\u81EA\u5B9A\u7FA9
BackgroundTexture-Newsprint=\u65B0\u805E\u7D19
ConditionB-Add_bracket=\u65B0\u589E\u62EC\u865F
Datasource-Connection_successfully=\u93C8\u63A5\u6210\u529F
Datasource-Connection_successfully=\u9023\u63A5\u6210\u529F
Function-The_class_must_implement_the_interface=\u6539\u985E\u5FC5\u9808\u5BE6\u73FE\u4ECB\u9762
FR-Designer_ChartF-Transparency=\u900F\u660E
Crimson=\u6DF1\u7D05
@ -1658,9 +1657,9 @@ Verify-Verify_Formula=\u6821\u9A57\u516C\u5F0F
State=\u7701\u5E02
FR-Designer-Widget-Style_Body_Background=\u4E3B\u9AD4\u80CC\u666F
FR-App-Privilege_No=\u6C92\u6709\u6B0A\u9650
Please_Drag_ParaPane=
Please_Drag_ParaPane=\u8ACB\u62D6\u5165\u53C3\u6578\u9762\u677F
Come_True=\u5BE6\u73FE
ISEMPTY=is empty
ISEMPTY=\u70BA\u7A7A
Background-Texture=\u7D0B\u7406
FR-Designer_Verify-Message=\u932F\u8AA4\u8A0A\u606F
Locked=\uFF08\u5DF2\u9396\u5B9A\uFF09
@ -1714,7 +1713,7 @@ Tree_Data_Field=\u6A39\u72C0\u8CC7\u6599\u6B04\u4F4D
Border-Style-Normal=\u76F4\u89D2\u6846\u7DDA
Top_And_Double_Bottom_Border_Line=\u4E0A\u6846\u7DDA\u548C\u96D9\u4E0B\u6846\u7DDA
FR-Server_Embedded_Server_Start=\u5167\u7F6E\u7684\u4F3A\u670D\u5668-\u555F\u52D5
FR-Designer-Basic_Restart_Designer_Later=Restart later
FR-Designer-Basic_Restart_Designer_Later=\u7A0D\u5F8C\u91CD\u555F
StyleAlignment-Top=\u9760\u4E0A\u5C0D\u9F4A
ReportServerP-First=\u9996\u9801
Not_Exist=\u4E0D\u5B58\u5728
@ -1736,7 +1735,7 @@ PageSetup-Horizontally=\u6C34\u5E73\u7F6E\u4E2D
No_Editor_Property_Definition=\u8A72\u7DE8\u8F2F\u5668\u6C92\u6709\u5C6C\u6027\u5B9A\u7FA9
Env-Remote_Server=\u9060\u7A0B\u4F3A\u670D\u5668
FR-Utils_Background=\u80CC\u666F
FR-Designer-Plugin_Warning=Warning
FR-Designer-Plugin_Warning=\u8B66\u544A
Server-version-info=\u60A8\u7576\u524D\u6253\u958B\u7684\u6A21\u677F\u6A94\u6848\u662F\u7531\u66F4\u9AD8\u7248\u672C\u7684\u8A2D\u8A08\u5668\u88FD\u4F5C\u7684\uFF0C\u6253\u958B\u6703\u6709\u51FA\u932F\u6216\u8005\u4E1F\u5931\u539F\u6709\u6A21\u677F\u5C6C\u6027\u7684\u98A8\u96AA\u3002\u5047\u5982\u9700\u8981\u6253\u958B\u6B64\u6A21\u677F\u8ACB\u60A8\u5C07\u60A8\u7684\u8A2D\u8A08\u5668\u5347\u7D1A\u81F3
CellWrite-Page_After_Row=\u5217\u5F8C\u5206\u9801
HF-Right_Section=\u53F3\u5340\u57DF
@ -1813,7 +1812,7 @@ FR-Action_Remove=\u522A\u9664
FRFont-Style=\u5B57\u5F62
Select_DataColumn=\u9078\u64C7\u8CC7\u6599\u6B04
StartValue=\u958B\u59CB\u503C
SINGLE_FILE_UPLOAD=\u53EA\u652F\u6301\u55AE\u6A94\u6848\u4E0A\u50B3
SINGLE_FILE_UPLOAD=\u53EA\u652F\u63F4\u55AE\u6A94\u6848\u4E0A\u50B3
BackgroundTexture-Cork=\u8EDF\u6728\u585E
M_Format-Data_Map=\u8CC7\u6599\u5B57\u5178
FR-mobile_native_analysis=\u539F\u751F\u89E3\u6790
@ -1823,13 +1822,13 @@ local=\u672C\u6A5F
FR-Designer_Gradation=\u5C64\u6B21
PageSetup-Finis_Start_Column=\u91CD\u8907\u7D50\u5C3E\u6B04
Env-Invalid_User_and_Password=\u975E\u6CD5\u7684\u5E33\u865F\u6216\u5BC6\u78BC
FR-Designer-Plugin_All_Plugins=All plugins
FR-Designer-Plugin_All_Plugins=\u5168\u90E8\u63D2\u4EF6
FR-Designer_Prepare_Export=\u958B\u59CB\u532F\u51FA\uFF0C\u8ACB\u7A0D\u5019
DBCP_TEST_ON_RETURN=\u6B78\u9084\u93C8\u63A5\u524D\u6AA2\u9A57
DBCP_TEST_ON_RETURN=\u6B78\u9084\u9023\u63A5\u524D\u6AA2\u9A57
no-alternatives=\u6C92\u6709\u9078\u64C7\u9805
FR-Designer_Submmit_WClass=\u5F8C\u53F0\u985E\u63D0\u4EA4
M_Insert-Slope_Line=\u63D2\u5165\u659C\u7DDA
FR-Designer-Plugin_Plugin_Description=Description
FR-Designer-Plugin_Plugin_Description=\u63D2\u4EF6\u63CF\u8FF0
ExpandD-Not_Expand=\u4E0D\u64F4\u5C55
Utils-Bottom_to_Top=\u5F9E\u4E0B\u5230\u4E0A
Collect-Click\!_Get_user_information_code=\u9EDE\u64CA\!\u7372\u53D6\u7528\u6236\u8A0A\u606F\u78BC
@ -1848,7 +1847,7 @@ Form-NullLayout=\u7D55\u5C0D\u5B9A\u4F4D
ConditionB-Remove_bracket=\u53BB\u6389\u62EC\u865F
email=\u90F5\u7BB1
Minute=\u5206\u9418
FR-Designer-Plugin_Update=Plugins to update
FR-Designer-Plugin_Update=\u63D2\u4EF6\u66F4\u65B0
alraedy_close=\u5DF2\u7D93\u95DC\u9589
ComboCheckBox-End_Symbol=\u7D50\u675F\u7B26
DataColumn=\u8CC7\u6599\u6B04
@ -1858,17 +1857,17 @@ Export-Excel-PageToSheet=\u5206\u9801\u5206Sheet\u532F\u51FA
Edit-Row_Count=\u5217\u6578
DS-Report_TableData=\u5831\u8868\u8CC7\u6599\u96C6
Sche-Hour=\u6642
Group_Count=Group Count
Group_Count=\u8868\u793A\u7E3D\u500B\u6578
EndValue=\u7D50\u675F\u503C
FR-Designer_Sytle-Indentation=\u7E2E\u9032
DownBarBorderStyleAndColor=\u8DCC\u67F1\u6A23\u5F0F
World=\u4E16\u754C
FR-Designer-Basic_Cancel=Cancel
FR-Designer-Basic_Cancel=\u53D6\u6D88
Finally=\u6700\u5F8C
Low=\u4F4E
Please_Input_The_Key=\u8ACB\u8F38\u5165\u5C0D\u61C9\u5730\u5716\u4F7F\u7528\u7684key
Smart=\u667A\u80FD
Preference-Predefined=Predefined
Preference-Predefined=\u9810\u5B9A\u7FA9
Current_custom_global=\u7576\u524D\u5831\u8868\u6240\u7528\u81EA\u5B9A\u7FA9\u5168\u5C40\u6A23\u5F0F
FR-Designer-Plugin_Shop_Need_Install=\u60A8\u9084\u6C92\u6709\u63D2\u4EF6\u5546\u5E97\u7684\u8CC7\u6E90,\u662F\u5426\u4E0B\u8F09?
WEB-Pagination_Setting=\u5206\u9801\u9810\u89BD\u8A2D\u5B9A
@ -1876,14 +1875,14 @@ RCodeDrawPix=\u50CF\u7D20
FR-Designer-Widget-Style_Alpha=\u4E0D\u900F\u660E\u5EA6
BorderLayout-North=\u5317
HJS-Current_Page=\u7576\u524D\u9801
Compile=Compile
Compile=\u7DE8\u8B6F
Show_Blank_Row=\u88DC\u5145\u7A7A\u767D\u5217
TableData_Dynamic_Parameter_Setting=\u52D5\u614B\u53C3\u6578\u6CE8\u5165
FR-Background_Image_Default=\u9810\u8A2D
BackgroundTexture-WhiteMarble=\u767D\u8272\u5927\u7406\u77F3
DataFunction-Sum=\u6C42\u548C
Collect-The_user_information_code_is_invalid=\u9019\u500B\u7528\u6236\u8A0A\u606F\u78BC\u662F\u975E\u6CD5\u7684
Preference-Locale=Locale
Preference-Locale=\u570B\u969B\u5316
M_File-Export-PDF=PDF\u683C\u5F0F
BiasD-From-lower_left_to_upper_right=\u7E3D\u5DE6\u4E0B\u5230\u53F3\u4E0A\u767C\u6563
Border-Style=\u6846\u7DDA\u6A23\u5F0F
@ -1916,7 +1915,7 @@ Preference-Pagination_Line_Color=\u5206\u9801\u7DDA\u984F\u8272
Test_URL=\u6E2C\u8A66\u9023\u63A5
Fill_blank_Data=\u88DC\u5145\u7A7A\u767D\u8CC7\u6599
ReportServerP-The_name_of_printer_cannot_be_null=\u5370\u8868\u6A5F\u7684\u540D\u5B57\u4E0D\u80FD\u70BA\u7A7A
FR-Designer-Basic_Copy_Activation_Key=Double click to copy key to clipboard
FR-Designer-Basic_Copy_Activation_Key=\u96D9\u64CA\u8A2D\u8A08\u5668\u7DE8\u865F\u53EF\u8907\u88FD\u5230\u526A\u8CBC\u677F
Continuum=\u76F8\u9130\u9023\u7E8C
BackgroundTexture-MediumWood=\u6DF1\u8272\u6728\u88FD
Datasource-Column_Index=\u6B04\u5E8F\u865F
@ -1925,11 +1924,11 @@ Form-Component_Bounds=\u5143\u4EF6\u908A\u754C
Utils-Submit=\u63D0\u4EA4
Conditions_formula=\u689D\u4EF6\u516C\u5F0F
M_Insert-Image=\u63D2\u5165\u5716\u7247
FR-Designer-Plugin_Will_Be_Delete=Delete plugin
FR-Designer-Plugin_Will_Be_Delete=\u63D2\u4EF6\u5C07\u88AB\u522A\u9664\uFF0C\u9700\u91CD\u555F\u8A2D\u8A08\u5668\u53CA\u4F3A\u670D\u5668\uFF0C\u4F3A\u670D\u5668\u9700\u624B\u52D5\u91CD\u555F
FormulaD-Functions=\u51FD\u6578
Mobile_Terminal=\u884C\u52D5\u8A2D\u5099
CheckBox=\u5FA9\u9078\u6846
FR-Designer-Plugin_Install=Install
FR-Designer-Plugin_Install=\u5B89\u88DD
Sun=\u65E5
FR-Designer_ToolBar_Bottom=\u5E95\u90E8\u5DE5\u5177\u6B04
Widget-Width=\u63A7\u5236\u9805\u5BEC\u5EA6
@ -1986,4 +1985,20 @@ FormulaD-Data_Fields=\u8CC7\u6599\u9805
FR-Designer_Role=\u89D2\u8272
FR-Designer_Permissions=\u6B0A\u9650
FR-Designer_Form_Button=\u6309\u9215
FR-Designer_WF_Name=\u540D\u7A31
FR-Designer_WF_Name=\u540D\u7A31
FR-Designer_Double=\u5C0F\u6578
FR-Designer_Query=\u67E5\u8A62
FR-Designer_Font=\u5B57\u9AD4
FR-Designer_Confirm=\u78BA\u8A8D
FR-Designer_Parameter=\u53C3\u6578
FR-Designer-Plugin_Plugin=\u63D2\u4EF6
FR-Designer_Background=\u586B\u6EFF\u8272\u5F69
Template=\u7BC4\u672C
FR-Designer_Original_Marked_Filed=\u539F\u59CB\u6A19\u8A18\u6B04\u4F4D
FR-Designer_Build_Tree_Accord_Marked_Filed_Length=\u4F9D\u8CF4\u6240\u9078\u8CC7\u6599\u96C6\u7684\u6A19\u8A18\u6B04\u4F4D\u7684\u9577\u5EA6\u69CB\u5EFA\u6A39\u72C0
FR-Designer_Can_not_use_FormatBursh=\u7121\u6CD5\u4F7F\u7528\u8907\u88FD\u683C\u5F0F
FR-Designer_Tree_Data_Field=\u6A39\u72C0\u8CC7\u6599\u6B04\u4F4D
FR-Designer_Parent_Marked_Field=\u7236\u6A19\u8A18\u6B04\u4F4D
FR-Designer_Build_Tree_Accord_Parent_Marked_Filed=\u4F9D\u8CF4\u6240\u9078\u8CC7\u6599\u96C6\u7684\u7236\u6A19\u8A18\u6B04\u4F4D\u69CB\u5EFA\u6A39
FR-Product_Demo=\u529F\u80FD\u5C55\u793A

8
designer_base/src/com/fr/design/mainframe/loghandler/DesignerLogHandler.java

@ -13,10 +13,7 @@ import com.fr.general.LogRecordTime;
import com.fr.stable.xml.LogRecordTimeProvider;
import javax.swing.*;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.*;
import java.awt.*;
import java.awt.event.*;
import java.text.SimpleDateFormat;
@ -133,7 +130,6 @@ public class DesignerLogHandler {
private LogHandlerArea() {
jTextArea = new JTextPane();
this.setLayout(FRGUIPaneFactory.createBorderLayout());
UIScrollPane js = new UIScrollPane(jTextArea);
this.add(js, BorderLayout.CENTER);
@ -297,6 +293,4 @@ public class DesignerLogHandler {
};
}
}

3
designer_base/src/com/fr/design/module/DesignModule.java

@ -33,6 +33,7 @@ import java.util.Set;
* 所有设计器模块的父类
*/
public abstract class DesignModule extends TopModule {
public static final String LOCALE_FILE_PATH = "com/fr/design/locale/designer";
public void start() {
super.start();
App<?>[] apps = apps4TemplateOpener();
@ -62,7 +63,7 @@ public abstract class DesignModule extends TopModule {
* @return 国际化文件路径
*/
public String[] getLocaleFile() {
return new String[]{"com/fr/design/locale/designer"};
return new String[]{LOCALE_FILE_PATH};
}
public Class<?>[] actionsForInsertCellElement() {

257
designer_base/src/com/fr/design/module/DesignModuleFactory.java

File diff suppressed because one or more lines are too long

8
designer_base/src/com/fr/design/style/color/UsedColorPane.java

@ -42,7 +42,7 @@ public class UsedColorPane extends BasicPane {
* @param rows
* @param columns
* @param reserveCells 留白的单元格个数
* @param colors 最近使用的颜色
* @param selectable
* @param needPickColorButton 是否需要加上取色器按钮
* @param setColorRealTime 取色器是否实时设定颜色
*/
@ -68,7 +68,6 @@ public class UsedColorPane extends BasicPane {
//最近使用颜色
Color[] colors = ColorSelectConfigManager.getInstance().getColors();
int size = colors.length;
int i = 0;
if (needPickColorButton) {
// 取色按钮
@ -84,7 +83,8 @@ public class UsedColorPane extends BasicPane {
i++;
}
while (i < total) {
Color color = i < size ? colors[size - (i - this.reserveCells) - 1] : DEFAULT_COLOR;
Color color = i - this.reserveCells < size ? colors[size - (i - this.reserveCells) - 1] :
DEFAULT_COLOR;
panel.add(new ColorCell(color == null ? DEFAULT_COLOR : color, selectable));
i++;
}
@ -100,7 +100,7 @@ public class UsedColorPane extends BasicPane {
int size = colors.length;
for (int i = this.reserveCells; i < total; i++) {
ColorCell cell = (ColorCell) this.pane.getComponent(i);
Color color = i < size ? colors[size - (i - this.reserveCells) - 1] : DEFAULT_COLOR;
Color color = i - this.reserveCells < size ? colors[size - (i - this.reserveCells) - 1] : DEFAULT_COLOR;
cell.setColor(color == null ? DEFAULT_COLOR : color);
}
}

4
designer_base/src/com/fr/design/utils/DesignUtils.java

@ -112,7 +112,7 @@ public class DesignUtils {
String line = null;
while ((line = reader.readLine()) != null) {
if (line.startsWith("demo")) {
StartServer.browerDemoURL();
StartServer.browserDemoURL();
} else if (StringUtils.isNotEmpty(line)) {
File f = new File(line);
String path = f.getAbsolutePath();
@ -315,7 +315,7 @@ public class DesignUtils {
String web = GeneralContext.getCurrentAppNameOfEnv();
String url = "http://localhost:" + DesignerEnvManager.getEnvManager().getJettyServerPort() + "/" + web + "/" + ConfigManager.getProviderInstance().getServletMapping()
+ postfixOfUri;
StartServer.browerURLWithLocalEnv(url);
StartServer.browserURLWithLocalEnv(url);
} catch (Throwable e) {
//
}

15
designer_base/src/com/fr/start/BaseDesigner.java

@ -7,7 +7,7 @@ import com.fr.base.FRContext;
import com.fr.design.DesignerEnvManager;
import com.fr.design.ExtraDesignClassManager;
import com.fr.design.RestartHelper;
import com.fr.design.extra.WebDialog;
import com.fr.design.extra.WebViewDlgHelper;
import com.fr.design.file.HistoryTemplateListPane;
import com.fr.design.file.MutilTempalteTabPane;
import com.fr.design.file.TemplateTreePane;
@ -16,15 +16,13 @@ import com.fr.design.fun.GlobalListenerProvider;
import com.fr.design.mainframe.DesignerFrame;
import com.fr.design.mainframe.TemplatePane;
import com.fr.design.mainframe.toolbar.ToolBarMenuDock;
import com.fr.design.module.DesignModule;
import com.fr.design.utils.DesignUtils;
import com.fr.env.SignIn;
import com.fr.file.FILE;
import com.fr.file.FILEFactory;
import com.fr.file.FileFILE;
import com.fr.general.ComparatorUtils;
import com.fr.general.FRLogger;
import com.fr.general.Inter;
import com.fr.general.ModuleContext;
import com.fr.general.*;
import com.fr.plugin.PluginCollector;
import com.fr.stable.*;
@ -66,12 +64,15 @@ public abstract class BaseDesigner extends ToolBarMenuDock {
//下面这两句的位置不能随便调换,因为会影响语言切换的问题
initLanguage();
// 先加载设计器的国际化文件
Inter.loadLocaleFile(GeneralContext.getLocale(), DesignModule.LOCALE_FILE_PATH);
SplashWindow splashWindow = new SplashWindow(createSplashPane());
if (args != null) {
for (String arg : args) {
if (ComparatorUtils.equals(arg, "demo")) {
DesignerEnvManager.getEnvManager().setCurrentEnv2Default();
StartServer.browerDemoURL();
StartServer.browserDemoURL();
break;
}
}
@ -127,7 +128,7 @@ public abstract class BaseDesigner extends ToolBarMenuDock {
String text = StableUtils.join(plugins, ",") + ": " + Inter.getLocText("FR-Designer_Plugin_Should_Update_Please_Contact_Developer");
int r = JOptionPane.showConfirmDialog(null, text, Inter.getLocText("FR-Designer_Plugin_Should_Update_Title"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE);
if (r == JOptionPane.OK_OPTION) {
WebDialog.createPluginDialog();
WebViewDlgHelper.createPluginDialog();
}
}
timer.stop();

12
designer_base/src/com/fr/start/StartServer.java

@ -45,10 +45,10 @@ public class StartServer {
* 预览Demo
* 找默认工作目录不应该按照名字去找而应该按照安装路径因为默认工作目录的名字可能会改变
*/
public static void browerDemoURL() {
public static void browserDemoURL() {
if (ComparatorUtils.equals(StableUtils.getInstallHome(), ".")) {//august:供代码使用
String web = GeneralContext.getCurrentAppNameOfEnv();
browerURLWithLocalEnv("http://localhost:" + DesignerEnvManager.getEnvManager().getJettyServerPort() + "/" + web + "/" + ConfigManager.getProviderInstance().getServletMapping()
browserURLWithLocalEnv("http://localhost:" + DesignerEnvManager.getEnvManager().getJettyServerPort() + "/" + web + "/" + ConfigManager.getProviderInstance().getServletMapping()
+ "?op=fs");
return;
}
@ -65,16 +65,16 @@ public class StartServer {
} catch (Exception e) {
FRContext.getLogger().errorWithServerLevel(e.getMessage());
}
initDemoServerAndBrower();
initDemoServerAndBrowser();
}
}).setVisible(true);
} else {
initDemoServerAndBrower();
initDemoServerAndBrowser();
}
}
private static void initDemoServerAndBrower() {
private static void initDemoServerAndBrowser() {
if (jettyHost != null) {
if (!jettyHost.isDemoAppLoaded()) {
jettyHost.exit();
@ -104,7 +104,7 @@ public class StartServer {
*
* @param url 指定路径
*/
public static void browerURLWithLocalEnv(String url) {
public static void browserURLWithLocalEnv(String url) {
try {
if (jettyHost != null) {
if (NEED_LOAD_ENV) {

188
designer_chart/src/com/fr/design/ChartEnvManager.java

@ -1,188 +0,0 @@
package com.fr.design;
import com.fr.base.FRContext;
import com.fr.base.Utils;
import com.fr.general.ComparatorUtils;
import com.fr.general.DateUtils;
import com.fr.general.IOUtils;
import com.fr.stable.ProductConstants;
import com.fr.stable.StableUtils;
import com.fr.stable.StringUtils;
import com.fr.stable.project.ProjectConstants;
import com.fr.stable.xml.*;
import java.io.*;
import java.util.Date;
/**
* Created by IntelliJ IDEA.
* Author : daisy
* Version: 7.1.1
*/
public class ChartEnvManager implements XMLReadable, XMLWriter {
public static final String ACTIVE_KEY = "RXWY-A25421-K58F47757-7373";
private static final int ONE_MONTH_SECOND = 30*24*60*60;//30天,以秒为单位
private static final int MS =1000;
boolean isPushUpdateAuto = true; //是否自动推送更新
private String activationKey = null;
private static ChartEnvManager chartEnvManager;
private Date lastCheckDate;
private long checkTimeSpan =ONE_MONTH_SECOND;
/**
* DesignerEnvManager.
*/
public static ChartEnvManager getEnvManager() {
if(chartEnvManager == null){
chartEnvManager = new ChartEnvManager();
try {
XMLTools.readFileXML(chartEnvManager, chartEnvManager.getDesignerEnvFile());
}catch (Exception exp){
FRContext.getLogger().error(exp.getMessage(), exp);
}
}
return chartEnvManager;
}
private static File envFile = new File(ProductConstants.getEnvHome() + File.separator + ProductConstants.APP_NAME + "ChartEnv.xml");
private File getEnvFile() {
return envFile;
}
private File getDesignerEnvFile() {
File envFile = getEnvFile();
if (!envFile.exists()) {
createEnvFile(envFile);
}
return envFile;
}
private void createEnvFile(File envFile) {
try {
FileWriter fileWriter = new FileWriter(envFile);
StringReader stringReader = new StringReader("<?xml version=\"1.0\" encoding=\"UTF-8\" ?><Env></Env>");
Utils.copyCharTo(stringReader, fileWriter);
stringReader.close();
fileWriter.close();
} catch (IOException e) {
FRContext.getLogger().error(e.getMessage(), e);
}
}
/**
* 返回激活码
*/
public String getActivationKey() {
return activationKey;
}
/**
* 设置激活码
*/
public void setActivationKey(String activationKey) {
this.activationKey = activationKey;
}
public void setPushUpdateAuto(boolean isPushUpdateAuto){
this.isPushUpdateAuto = isPushUpdateAuto;
if(!this.isPushUpdateAuto){
lastCheckDate = new Date();
}
}
/**
* 是否设置了自动推送图表设计器在线更行
* @return 是则返回true
*/
public boolean isPushUpdateAuto(){
return isPushUpdateAuto;
}
/**
*在设置不自动推送在线更新的情况下每30天自动检测一次
* @return 是否需要检测
*/
public boolean isOverOneMonth(){
return !isPushUpdateAuto && ((new Date().getTime()-lastCheckDate.getTime())/MS>=checkTimeSpan);
}
/***
* 重新设置最新检查的日期
*/
public void resetCheckDate(){
this.lastCheckDate = new Date();
}
@Override
public void readXML(XMLableReader reader) {
if (reader.isChildNode()) {
String name = reader.getTagName();
if(ComparatorUtils.equals(name,"ChartAttributes")){
activationKey = reader.getAttrAsString("activationKey",null);
isPushUpdateAuto = reader.getAttrAsBoolean("isPushUpdateAuto",true);
checkTimeSpan = reader.getAttrAsLong("checkTimeSpan",ONE_MONTH_SECOND);
String date = reader.getAttrAsString("lastCheckDate", null);
if(!StringUtils.isEmpty(date)){
lastCheckDate = DateUtils.string2Date(date,true);
} else {
lastCheckDate = new Date();
}
}
}
}
@Override
public void writeXML(XMLPrintWriter writer) {
writer.startTAG("ChartDesigner");
writer.startTAG("ChartAttributes").attr("activationKey",activationKey)
.attr("isPushUpdateAuto",isPushUpdateAuto)
.attr("checkTimeSpan",checkTimeSpan)
.attr("lastCheckDate", DateUtils.getDate2LStr(lastCheckDate))
.end();
writer.end();
}
/**
* 保存设计器的配置文件, 该文件不在env的resource目录下
* 而是在Consts.getEnvHome() + File.separator + Consts.APP_NAME
*
*
* @date 2014-9-29-上午11:04:23
*/
public void saveXMLFile() {
File xmlFile = this.getDesignerEnvFile();
if (xmlFile == null) {
return;
}
if (!xmlFile.getParentFile().exists()) {//建立目录.
StableUtils.mkdirs(xmlFile.getParentFile());
}
String tempName = xmlFile.getName() + ProjectConstants.TEMP_SUFFIX;
File tempFile = new File(xmlFile.getParentFile(), tempName);
writeTempFile(tempFile);
IOUtils.renameTo(tempFile, xmlFile);
}
private void writeTempFile(File tempFile){
try{
OutputStream fout = new FileOutputStream(tempFile);
XMLTools.writeOutputStreamXML(this, fout);
fout.flush();
fout.close();
}catch (Exception e) {
FRContext.getLogger().error(e.getMessage());
}
}
}

42
designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java

@ -11,9 +11,12 @@ import com.fr.design.chart.fun.IndependentChartUIProvider;
import com.fr.design.chart.gui.ChartWidgetOption;
import com.fr.design.chartinterface.*;
import com.fr.design.condition.ConditionAttributesPane;
import com.fr.design.extra.ChartTypeInterfaceCloseableHandler;
import com.fr.design.gui.core.WidgetOption;
import com.fr.design.gui.frpane.AttributeChangeListener;
import com.fr.design.mainframe.chart.AbstractChartAttrPane;
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;
@ -21,11 +24,13 @@ import com.fr.design.mainframe.chart.gui.data.table.AbstractTableDataContentPane
import com.fr.design.module.DesignModuleFactory;
import com.fr.file.XMLFileManager;
import com.fr.form.ui.ChartEditor;
import com.fr.general.*;
import com.fr.general.FRLogger;
import com.fr.general.GeneralContext;
import com.fr.general.IOUtils;
import com.fr.general.Inter;
import com.fr.plugin.PluginCollector;
import com.fr.plugin.PluginLicenseManager;
import com.fr.plugin.PluginMessage;
import com.fr.design.extra.ChartTypeInterfaceCloseableHandler;
import com.fr.plugin.proxy.PluginInstanceProxyFactory;
import com.fr.plugin.proxy.PluginInvocationHandler;
import com.fr.stable.ArrayUtils;
@ -410,6 +415,39 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh
return chartTypeInterfaces.get(priority).get(plot.getPlotID()).getTableDataSourcePane(plot, parent);
}
//获取指定图表的编辑面板
public ChartEditPane getChartEditPane(String plotID) {
Iterator iterator = chartTypeInterfaces.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry entry = (Map.Entry) iterator.next();
String priority = (String) entry.getKey();
if (plotInChart(plotID, priority)) {
return getChartEditPane(priority, plotID);
}
}
return getChartEditPane(ChartTypeManager.CHART_PRIORITY, plotID);
}
private ChartEditPane getChartEditPane(String priority, String plotID) {
return chartTypeInterfaces.get(priority).get(plotID).getChartEditPane(plotID);
}
public ChartsConfigPane getChartConfigPane(String plotID) {
Iterator iterator = chartTypeInterfaces.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry entry = (Map.Entry) iterator.next();
String priority = (String) entry.getKey();
if (plotInChart(plotID, priority)) {
return getChartConfigPane(priority, plotID);
}
}
return getChartConfigPane(ChartTypeManager.CHART_PRIORITY, plotID);
}
private ChartsConfigPane getChartConfigPane(String priority, String plotID) {
return chartTypeInterfaces.get(priority).get(plotID).getChartConfigPane(plotID);
}
public AbstractReportDataContentPane getReportDataSourcePane(Plot plot, ChartDataPane parent) {
Iterator iterator = chartTypeInterfaces.entrySet().iterator();

6
designer_chart/src/com/fr/design/chart/fun/IndependentChartUIProvider.java

@ -5,6 +5,8 @@ import com.fr.design.beans.BasicBeanPane;
import com.fr.design.condition.ConditionAttributesPane;
import com.fr.design.gui.frpane.AttributeChangeListener;
import com.fr.design.mainframe.chart.AbstractChartAttrPane;
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;
@ -89,5 +91,9 @@ public interface IndependentChartUIProvider extends Level {
*/
String getPlotTypeTitle4PopupWindow();
ChartEditPane getChartEditPane(String plotID);
ChartsConfigPane getChartConfigPane(String plotID);
}

10
designer_chart/src/com/fr/design/chart/fun/impl/AbstractIndependentChartUI.java

@ -7,9 +7,12 @@ import com.fr.design.chart.series.SeriesCondition.DataSeriesConditionPane;
import com.fr.design.condition.ConditionAttributesPane;
import com.fr.design.gui.frpane.AttributeChangeListener;
import com.fr.design.mainframe.chart.AbstractChartAttrPane;
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.general.ComparatorUtils;
import com.fr.stable.StableUtils;
/**
@ -30,6 +33,7 @@ public abstract class AbstractIndependentChartUI implements IndependentChartUIPr
public ChartDataPane getChartDataPane(AttributeChangeListener listener){
return new ChartDataPane(listener);
}
/**
* 是否使用默认的界面为了避免界面来回切换
* @return 是否使用默认的界面
@ -53,4 +57,10 @@ public abstract class AbstractIndependentChartUI implements IndependentChartUIPr
public ConditionAttributesPane getPlotConditionPane(Plot plot){
return new DataSeriesConditionPane();
}
public ChartEditPane getChartEditPane(String plotID){ return StableUtils.construct(ChartEditPane.class);}
public ChartsConfigPane getChartConfigPane(String plotID){return null;}
}

7
designer_chart/src/com/fr/design/chart/fun/impl/AbstractIndependentChartUIWithAPILevel.java

@ -7,9 +7,12 @@ import com.fr.design.chart.series.SeriesCondition.DataSeriesConditionPane;
import com.fr.design.condition.ConditionAttributesPane;
import com.fr.design.gui.frpane.AttributeChangeListener;
import com.fr.design.mainframe.chart.AbstractChartAttrPane;
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.general.ComparatorUtils;
import com.fr.stable.StableUtils;
/**
* Created by Mitisky on 16/3/7.
@ -65,4 +68,8 @@ public abstract class AbstractIndependentChartUIWithAPILevel implements Independ
public String getPlotTypeTitle4PopupWindow(){
return getPlotTypePane().title4PopupWindow();
}
public ChartEditPane getChartEditPane(String plotID){ return StableUtils.construct(ChartEditPane.class);}
public ChartsConfigPane getChartConfigPane(String plotID){return null;}
}

103
designer_chart/src/com/fr/design/chart/fun/impl/AbstractIndependentChartsUI.java

@ -0,0 +1,103 @@
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.IndependentChartUIProvider;
import com.fr.design.condition.ConditionAttributesPane;
import com.fr.design.gui.frpane.AttributeChangeListener;
import com.fr.design.mainframe.chart.AbstractChartAttrPane;
import com.fr.design.mainframe.chart.ChartEditPane;
import com.fr.design.mainframe.chart.ChartsEditPane;
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.report.CategoryPlotReportDataContentPane;
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.gui.type.PiePlotPane;
import com.fr.general.ComparatorUtils;
import com.fr.stable.fun.impl.AbstractProvider;
import com.fr.stable.fun.mark.API;
/**
* Created by mengao on 2017/4/24.
* 用户使用第三方图表需要继承的面板抽象类
*/
@API(level = IndependentChartUIProvider.CURRENT_API_LEVEL)
public abstract class AbstractIndependentChartsUI extends AbstractProvider implements IndependentChartUIProvider {
public String mark4Provider() {
return getClass().getName();
}
@Override
public AbstractChartTypePane getPlotTypePane() {
return new PiePlotPane();
}
@Override
public ChartDataPane getChartDataPane(AttributeChangeListener listener) {
return new ChartDataPane(listener);
}
@Override
public AbstractTableDataContentPane getTableDataSourcePane(Plot plot, ChartDataPane parent) {
return new CategoryPlotTableDataContentPane(parent);
}
@Override
public AbstractReportDataContentPane getReportDataSourcePane(Plot plot, ChartDataPane parent) {
return new CategoryPlotReportDataContentPane(parent);
}
public BasicBeanPane<Plot> getPlotSeriesPane(ChartStylePane parent, Plot plot){
return null;
}
public BasicBeanPane<Plot> getPlotSeriesPane(){
return null;
}
public boolean equals(Object obj) {
return obj != null && ComparatorUtils.equals(obj.getClass(), this.getClass());
}
public ConditionAttributesPane getPlotConditionPane(Plot plot){
return null;
}
@Override
public AbstractChartAttrPane[] getAttrPaneArray(AttributeChangeListener listener){
return new AbstractChartAttrPane[]{};
}
@Override
public boolean isUseDefaultPane(){
return false;
}
@Override
public String getIconPath() {
return "com/fr/design/images/form/toolbar/ChartF-Column.png";
}
@Override
/**
* plot面板的标题
* 插件兼容
*/
public String getPlotTypeTitle4PopupWindow(){
return getPlotTypePane().title4PopupWindow();
}
@Override
public ChartEditPane getChartEditPane(String plotID) {
return new ChartsEditPane();
}
}

69
designer_chart/src/com/fr/design/chart/report/GisMapDataPane4Chart.java

@ -1,69 +0,0 @@
package com.fr.design.chart.report;
import com.fr.base.TableData;
import com.fr.base.chart.chartdata.TopDefinitionProvider;
import com.fr.chart.chartattr.Chart;
import com.fr.chart.chartattr.ChartCollection;
import com.fr.chart.chartdata.*;
import com.fr.design.gui.frpane.AttributeChangeListener;
import com.fr.design.mainframe.AbstractChartDataPane4Chart;
import com.fr.design.mainframe.chart.gui.ChartDataPane;
import javax.swing.*;
/**
* Created by IntelliJ IDEA.
* Author : daisy
* Version: 7.1.1
*/
public class GisMapDataPane4Chart extends AbstractChartDataPane4Chart {
private GisMapTableDataContentPane4Chart tablePane = new GisMapTableDataContentPane4Chart();
public GisMapDataPane4Chart(AttributeChangeListener listener, ChartDataPane parent) {
super(listener, parent);
}
protected JPanel getDataContentPane() {
return tablePane;
}
@Override
public void populate(ChartCollection collection) {
tablePane = new GisMapTableDataContentPane4Chart();
if (collection != null && collection.getSelectedChart() != null) {
Chart chart = collection.getSelectedChart();
TopDefinitionProvider definition = chart.getFilterDefinition();
if (definition instanceof TableDataDefinition) {
TableData tableData = ((TableDataDefinition) definition).getTableData();
if (tableData != null) {
populateChoosePane(tableData);
fireTableDataChange();
}
}
if (definition instanceof GisMapTableDefinition) {
tablePane.populateBean((GisMapTableDefinition) definition);
}
}
this.remove(leftContentPane);
this.initContentPane();
this.validate();
dataSource.addItemListener(dsListener);
initAllListeners();
initSelfListener(tablePane);
this.addAttributeChangeListener(attributeChangeListener);
}
@Override
public void update(ChartCollection collection) {
collection.getSelectedChart().setFilterDefinition(tablePane.updateBean());
}
/**
* 数据集数据改变
*/
public void fireTableDataChange() {
tablePane.fireTableDataChange(choosePane.getTableDataWrapper());
}
}

341
designer_chart/src/com/fr/design/chart/report/GisMapTableDataContentPane4Chart.java

@ -1,341 +0,0 @@
package com.fr.design.chart.report;
import com.fr.base.Utils;
import com.fr.chart.base.ChartConstants;
import com.fr.chart.chartdata.GisMapTableDefinition;
import com.fr.chart.chartdata.SeriesDefinition;
import com.fr.design.beans.FurtherBasicBeanPane;
import com.fr.design.constants.LayoutConstants;
import com.fr.design.data.tabledata.wrapper.TableDataWrapper;
import com.fr.design.event.UIObserver;
import com.fr.design.event.UIObserverListener;
import com.fr.design.gui.frpane.UICorrelationPane;
import com.fr.design.gui.ibutton.UIButtonGroup;
import com.fr.design.gui.icombobox.UIComboBox;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.itable.UITableEditor;
import com.fr.design.gui.itextfield.UITextField;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
import com.fr.general.Inter;
import com.fr.stable.ArrayUtils;
import com.fr.stable.StringUtils;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.*;
/**
* Created by IntelliJ IDEA.
* Author : daisy
* Version: 7.1.1
*/
public class GisMapTableDataContentPane4Chart extends FurtherBasicBeanPane<GisMapTableDefinition> implements UIObserver {
private ArrayList<ChangeListener> changeListeners = new ArrayList<ChangeListener>();
private String[] initNames = {""};
private UIButtonGroup<String> addressType;
private UIButtonGroup<String> lnglatOrder;
private UIComboBox addressBox;
private UIComboBox addressNameBox;
private UICorrelationPane titleValuePane;
private JPanel orderPane;
private TableDataWrapper tableDataWrapper;
public GisMapTableDataContentPane4Chart() {
this.setLayout(new BorderLayout());
addressType = new UIButtonGroup<String>(new String[]{Inter.getLocText("Chart-Gis_Address"), Inter.getLocText("Chart-Gis_LatLng")});
lnglatOrder = new UIButtonGroup<String>(new String[]{Inter.getLocText("Chart-Lng_First"), Inter.getLocText("Chart-Lat_First")});
addressBox = new UIComboBox();
addressNameBox = new UIComboBox();
double p = TableLayout.PREFERRED;
double f = TableLayout.FILL;
double[] columnSize = new double[]{p, f};
double[] rowSize = new double[]{p, p, p};
orderPane = new JPanel(new BorderLayout(LayoutConstants.VGAP_MEDIUM, 0)) {
@Override
public Dimension getPreferredSize() {
if (this.isVisible()) {
return super.getPreferredSize();
} else {
return new Dimension(0, 0);
}
}
};
orderPane.add(new UILabel(Inter.getLocText("Chart-LatLng_Order")), BorderLayout.WEST);
orderPane.add(lnglatOrder, BorderLayout.CENTER);
orderPane.setVisible(false);
lnglatOrder.setSelectedIndex(0);
addressType.setSelectedIndex(0);
addressNameBox.removeAllItems();
addressNameBox.addItem(Inter.getLocText("Chart-Use_None"));
Component[][] components = new Component[][]{
new Component[]{addressType, addressBox},
new Component[]{orderPane, null},
new Component[]{new UILabel(Inter.getLocText("Chart-Address_Name") + ":", SwingConstants.RIGHT), addressNameBox},
};
JPanel centerPane = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize);
JPanel pane = new JPanel();
this.add(pane, BorderLayout.CENTER);
pane.setLayout(new BorderLayout());
pane.add(centerPane, BorderLayout.NORTH);
String[] titles = {Inter.getLocText("Chart-Area_Title"), Inter.getLocText("Chart-Area_Value")};
titleValuePane = new UICorrelationPane(titles) {
public UITableEditor createUITableEditor() {
return new InnerTableEditor();
}
};
pane.add(titleValuePane, BorderLayout.CENTER);
}
private void refresh2ComboBox() {// 刷新地址 地址名 名称列表
TableDataWrapper tableDataWrappe =tableDataWrapper;
if (tableDataWrappe == null) {
return;
}
java.util.List<String> columnNameList = tableDataWrappe.calculateColumnNameList();
initNames = columnNameList.toArray(new String[columnNameList.size()]);
addressBox.removeAllItems();
addressNameBox.removeAllItems();
addressNameBox.addItem(Inter.getLocText("Chart-Use_None"));
for (int i = 0, size = initNames.length; i < size; i++) {
addressBox.addItem(initNames[i]);
addressNameBox.addItem(initNames[i]);
}
if(initNames.length > 0){
addressBox.setSelectedIndex(0);
}
addressNameBox.setSelectedIndex(0);
stopEditing();
}
/**
* 界面接入
*
* @param ob 对象
* @return true表示接受
*/
public boolean accept(Object ob) {
return false;
}
/**
* 界面重置
*/
public void reset() {
}
/**
* 界面弹出标题
*
* @return 标题
*/
public String title4PopupWindow() {
return Inter.getLocText("Chart-DS_TableData");
}
private void stopEditing() {
}
@Override
public void populateBean(GisMapTableDefinition ob) {
stopEditing();
if (ob instanceof GisMapTableDefinition) {
GisMapTableDefinition mapDefinition = (GisMapTableDefinition) ob;
if (ob.isAddress()) {
addressType.setSelectedIndex(0);
orderPane.setVisible(false);
} else {
addressType.setSelectedIndex(1);
orderPane.setVisible(true);
}
if (ob.isLngFirst()) {
lnglatOrder.setSelectedIndex(0);
} else {
lnglatOrder.setSelectedIndex(1);
}
addressBox.setSelectedItem(mapDefinition.getAddress());
if (StringUtils.isEmpty(mapDefinition.getAddressName())) {
addressNameBox.setSelectedItem(Inter.getLocText("Chart-Use_None"));
} else {
addressNameBox.setSelectedItem(mapDefinition.getAddressName());
}
java.util.List paneList = new ArrayList();
int titleValueSize = mapDefinition.getTittleValueSize();
for (int i = 0; i < titleValueSize; i++) {
SeriesDefinition definition = mapDefinition.getTittleValueWithIndex(i);
if (definition != null && definition.getSeriesName() != null && definition.getValue() != null) {
paneList.add(new Object[]{definition.getSeriesName(), definition.getValue()});
}
}
if (!paneList.isEmpty()) {
titleValuePane.populateBean(paneList);
}
}
}
@Override
public GisMapTableDefinition updateBean() {// 从一行内容中update
stopEditing();
GisMapTableDefinition definition = new GisMapTableDefinition();
TableDataWrapper tableDataWrappe = tableDataWrapper;
if (tableDataWrappe == null || addressBox.getSelectedItem() == null) {
return null;
}
definition.setTableData(tableDataWrapper.getTableData());
definition.setAddress(Utils.objectToString(addressBox.getSelectedItem()));
if (this.addressType.getSelectedIndex() == 0) {
definition.setAddressType(true);
lnglatOrder.setVisible(false);
} else {
definition.setAddressType(false);
lnglatOrder.setVisible(true);
}
if (this.lnglatOrder.getSelectedIndex() == 0) {
definition.setLnglatOrder(true);
} else {
definition.setLnglatOrder(false);
}
if (addressNameBox.getSelectedItem() != null) {
String adName = Utils.objectToString(addressNameBox.getSelectedItem());
if (ArrayUtils.contains(ChartConstants.getNoneKeys(), adName)) {
definition.setAddressName(StringUtils.EMPTY);
} else {
definition.setAddressName(adName);
}
}
java.util.List paneList = titleValuePane.updateBean();
for (int i = 0, size = paneList.size(); i < size; i++) {
Object[] values = (Object[]) paneList.get(i);
if (values.length == 2) {
SeriesDefinition seriesDefinition = new SeriesDefinition();
seriesDefinition.setSeriesName(values[0]);
seriesDefinition.setValue(values[1]);
definition.addTittleValue(seriesDefinition);
}
}
return definition;
}
/**
* 给组件登记一个观察者监听事件
*
* @param listener 观察者监听事件
*/
public void registerChangeListener(final UIObserverListener listener) {
changeListeners.add(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
listener.doChange();
}
});
}
/**
* 组件是否需要响应添加的观察者事件
*
* @return 如果需要响应观察者事件则返回true否则返回false
*/
public boolean shouldResponseChangeListener() {
return true;
}
private class InnerTableEditor extends UITableEditor {
private JComponent editorComponent;
/**
* 返回当前编辑器的值
*/
public Object getCellEditorValue() {
if (editorComponent instanceof UITextField) {
UITextField textField = (UITextField) editorComponent;
return textField.getText();
} else if (editorComponent instanceof UIComboBox) {
UIComboBox boxPane = (UIComboBox) editorComponent;
return boxPane.getSelectedItem();
}
return super.getCellEditorValue();
}
/**
* 返回当前编辑器..
*/
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
if (column == table.getModel().getColumnCount()) {
return null;
}
if (column == 0) {
UITextField text = new UITextField();
if (value != null) {
text.setText(Utils.objectToString(value));
}
text.addFocusListener(new FocusAdapter() {
public void focusLost(FocusEvent e) {
titleValuePane.stopCellEditing();
titleValuePane.fireTargetChanged();
}
});
this.editorComponent = text;
} else {
UIComboBox box = new UIComboBox(initNames);
box.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
titleValuePane.fireTargetChanged();
titleValuePane.stopCellEditing();
}
});
if (value != null && StringUtils.isNotEmpty(value.toString())) {
box.setSelectedItem(value);
} else {
box.setSelectedItem(value);
}
this.editorComponent = box;
}
return this.editorComponent;
}
}
/**
* 出发数据集改变
* @param wrapper 数据集
*/
public void fireTableDataChange(TableDataWrapper wrapper){
this.tableDataWrapper = wrapper;
refresh2ComboBox();
}
}

68
designer_chart/src/com/fr/design/chart/report/MapCubeDataPane4Chart.java

@ -1,68 +0,0 @@
package com.fr.design.chart.report;
import com.fr.base.chart.chartdata.TopDefinitionProvider;
import com.fr.chart.chartdata.MapMoreLayerTableDefinition;
import com.fr.design.beans.FurtherBasicBeanPane;
import com.fr.design.data.tabledata.wrapper.TableDataWrapper;
import com.fr.design.gui.frpane.UIComboBoxPane;
import com.fr.general.Inter;
import java.awt.*;
import java.util.*;
import java.util.List;
/**
* Created by IntelliJ IDEA.
* Author : daisy
* Version: 7.1.1
*/
public class MapCubeDataPane4Chart extends UIComboBoxPane<TopDefinitionProvider> {
private MapTableCubeDataPane4Chart tablePane;
protected void initLayout() {
this.setLayout(new BorderLayout(0, 0));
this.add(cardPane, BorderLayout.CENTER);
}
@Override
protected List<FurtherBasicBeanPane<? extends TopDefinitionProvider>> initPaneList() {
List list = new ArrayList();
list.add(tablePane = new MapTableCubeDataPane4Chart());
return list;
}
@Override
protected String title4PopupWindow() {
return Inter.getLocText("FR-Chart-Map_LayerData");
}
/**
* 对数据集或者单元格数据加载界面
*/
public void populateBean(TopDefinitionProvider definition) {
if(definition instanceof MapMoreLayerTableDefinition) {
MapMoreLayerTableDefinition tableDefinition = (MapMoreLayerTableDefinition)definition;
this.setSelectedIndex(0);
tablePane.populateBean(tableDefinition);
}
}
/**
* 根据界面 下载保存数据
*/
public TopDefinitionProvider update() {
return tablePane.updateBean();
}
/**
* 出发数据集改变
* @param tableDataWrapper 数据集
*/
public void fireTableDataChanged(TableDataWrapper tableDataWrapper) {
tablePane.setTableDataWrapper(tableDataWrapper);
tablePane.refreshAreaNameBox();
}
}

133
designer_chart/src/com/fr/design/chart/report/MapDataPane4Chart.java

@ -1,133 +0,0 @@
package com.fr.design.chart.report;
import com.fr.base.TableData;
import com.fr.base.chart.chartdata.TopDefinitionProvider;
import com.fr.chart.chartattr.Chart;
import com.fr.chart.chartattr.ChartCollection;
import com.fr.chart.chartdata.*;
import com.fr.design.beans.FurtherBasicBeanPane;
import com.fr.design.gui.frpane.AttributeChangeListener;
import com.fr.design.gui.frpane.UIComboBoxPane;
import com.fr.design.gui.ilable.BoldFontTextLabel;
import com.fr.design.mainframe.AbstractChartDataPane4Chart;
import com.fr.design.mainframe.chart.gui.ChartDataPane;
import com.fr.general.Inter;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.*;
/**
* Created by IntelliJ IDEA.
* Author : daisy
* Version: 7.1.1
* Date: 14/12/3
* Time: 下午6:49
*/
public class MapDataPane4Chart extends AbstractChartDataPane4Chart {
private UIComboBoxPane dataContentPane;
private MapMoreCubeLayerPane4Chart morePane = new MapMoreCubeLayerPane4Chart();
private MapSinglePane4Chart singlePane = new MapSinglePane4Chart();
private ChartCollection currentCollection;
private ItemListener itemListener = new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
fireTableDataChange();
}
};
public MapDataPane4Chart(AttributeChangeListener listener, ChartDataPane parent) {
super(listener, parent);
dataContentPane = new UIComboBoxPane<Chart>() {
protected void initLayout() {
this.setLayout(new BorderLayout(0, 6));
JPanel northPane = new JPanel(new FlowLayout(FlowLayout.LEFT));
northPane.add(new BoldFontTextLabel(Inter.getLocText("FR-Chart-Map_ShowWay") + ":"));
northPane.add(jcb);
this.add(northPane, BorderLayout.NORTH);
this.add(cardPane, BorderLayout.CENTER);
}
protected java.util.List<FurtherBasicBeanPane<? extends Chart>> initPaneList() {
java.util.List list = new ArrayList();
list.add(singlePane);
list.add(morePane);
return list;
}
protected void comboBoxItemStateChanged() {
if(currentCollection == null){
return;
}
fireTableDataChange();
morePane.init4PopuMapTree(currentCollection);
}
protected String title4PopupWindow() {
return Inter.getLocText(new String[]{"Chart-Map", "Data"});
}
};
}
protected JPanel getDataContentPane(){
return dataContentPane;
}
@Override
public void populate(ChartCollection collection) {
currentCollection = collection;
morePane.init4PopuMapTree(collection);
if (collection != null && collection.getSelectedChart() != null) {
Chart chart = collection.getSelectedChart();
TopDefinitionProvider definition = chart.getFilterDefinition();
if (definition instanceof TableDataDefinition) {
TableData tableData = ((TableDataDefinition) definition).getTableData();
if(tableData != null){
populateChoosePane(tableData);
fireTableDataChange();
}
}
if(definition instanceof MapSingleLayerTableDefinition) {
singlePane.populateBean(definition);
} else if(definition instanceof MapMoreLayerTableDefinition) {
morePane.populateBean(collection);
}
}
this.remove(leftContentPane);
this.initContentPane();
this.validate();
dataSource.addItemListener(dsListener);
initAllListeners();
initSelfListener(dataContentPane);
this.addAttributeChangeListener(attributeChangeListener);
}
@Override
public void update(ChartCollection collection) {
if(dataContentPane.getSelectedIndex() == 0) {
collection.getSelectedChart().setFilterDefinition(singlePane.updateBean());
} else {
morePane.updateBean(collection);
}
currentCollection = collection;
}
/**
* 数据集数据改变
*/
public void fireTableDataChange() {
if (dataContentPane == null) {
return;
}
if(dataContentPane.getSelectedIndex() == 0) {
singlePane.fireTableDataChanged(choosePane.getTableDataWrapper());
} else {
morePane.fireTableDataChanged(choosePane.getTableDataWrapper());
}
}
}

113
designer_chart/src/com/fr/design/chart/report/MapMoreCubeLayerPane4Chart.java

@ -1,113 +0,0 @@
package com.fr.design.chart.report;
import com.fr.chart.chartattr.Chart;
import com.fr.chart.chartattr.ChartCollection;
import com.fr.chart.chartattr.MapPlot;
import com.fr.design.data.tabledata.wrapper.TableDataWrapper;
import com.fr.design.dialog.BasicPane;
import com.fr.design.dialog.MultiTabPane;
import com.fr.general.Inter;
import java.util.ArrayList;
import java.util.List;
/**
* Created by IntelliJ IDEA.
* Author : daisy
* Version: 7.1.1
*/
public class MapMoreCubeLayerPane4Chart extends MultiTabPane<ChartCollection> {
private static final long serialVersionUID = -174286187746442527L;
private MapCubeLayerPane layerPane;
private MapCubeDataPane4Chart dataPane;
@Override
protected List<BasicPane> initPaneList() {
List<BasicPane> paneList = new ArrayList<BasicPane>();
paneList.add(layerPane = new MapCubeLayerPane());
paneList.add(dataPane = new MapCubeDataPane4Chart());
return paneList;
}
public ChartCollection updateBean() {
return null;// do nothing
}
public void populateBean(ChartCollection collection) {
Chart selectChart = collection.getSelectedChart();
if(selectChart != null && selectChart.getPlot() instanceof MapPlot) {
MapPlot map = (MapPlot)selectChart.getPlot();
layerPane.populateBean(map.getMapName());
}
// 确认层级关系
dataPane.populateBean(collection.getSelectedChart().getFilterDefinition());
}
public void updateBean(ChartCollection collection) {
collection.getSelectedChart().setFilterDefinition(dataPane.update());
Chart selectChart = collection.getSelectedChart();
if(selectChart != null && selectChart.getPlot() instanceof MapPlot) {
MapPlot map = (MapPlot)selectChart.getPlot();
layerPane.updateBean(map.getMapName());// 确定更新地图名称所对应的层级关系
}
}
/**
* 刷新层级树 数据中populate 数据的层数
* @param collection 图表收集器.
*/
public void init4PopuMapTree(ChartCollection collection) {
Chart selectChart = collection.getSelectedChart();
if(selectChart != null && selectChart.getPlot() instanceof MapPlot) {
MapPlot map = (MapPlot)selectChart.getPlot();
if(layerPane != null) {
layerPane.initRootTree(map.getMapName());
}
}
}
/**
* 判断是否合格
* @param ob 参数判断
* @return 默认合格.
*/
public boolean accept(Object ob) {
return true;
}
/**
* 界面标题
* @return 返回标题
*/
public String title4PopupWindow() {
return Inter.getLocText("FR-Chart-Map_Multilayer");
}
/**
* 重置
*/
public void reset() {
}
/**
* 设置是否支持单元格数据.
*/
public void setSurpportCellData(boolean surpportCellData) {
dataPane.justSupportOneSelect(surpportCellData);
}
/**
* 出发数据集改变
* @param tableDataWrapper 数据集
*/
public void fireTableDataChanged(TableDataWrapper tableDataWrapper) {
dataPane.fireTableDataChanged(tableDataWrapper);
}
}

79
designer_chart/src/com/fr/design/chart/report/MapSinglePane4Chart.java

@ -1,79 +0,0 @@
package com.fr.design.chart.report;
import com.fr.base.chart.chartdata.TopDefinitionProvider;
import com.fr.chart.chartdata.MapSingleLayerTableDefinition;
import com.fr.chart.chartdata.TopDefinition;
import com.fr.design.beans.FurtherBasicBeanPane;
import com.fr.design.data.tabledata.wrapper.TableDataWrapper;
import com.fr.general.Inter;
import java.awt.*;
/**
* Created by IntelliJ IDEA.
* Author : daisy
* Version: 7.1.1
*/
public class MapSinglePane4Chart extends FurtherBasicBeanPane<TopDefinitionProvider> {
private MapTableDataSinglePane4Chart tableSinglePane;
public MapSinglePane4Chart() {
initCom();
}
private void initCom() {
this.setLayout(new BorderLayout());
this.add(tableSinglePane = new MapTableDataSinglePane4Chart(), BorderLayout.CENTER);
}
/**
* 判断准许的情况
* @param ob 数据集
* @return 是不是顶层数据
*/
public boolean accept(Object ob) {
return ob instanceof TopDefinition;
}
/**
* 重置
*/
public void reset() {
}
/**
*界面标题
* @return 界面标题
*/
public String title4PopupWindow() {
return Inter.getLocText(new String[]{"SingleLayer", "Chart-Map"});
}
/**
* 加载单层地图时的 数据来源界面
*/
public void populateBean(TopDefinitionProvider ob) {
if(ob instanceof MapSingleLayerTableDefinition) {
tableSinglePane.populateBean((MapSingleLayerTableDefinition)ob);
}
}
/**
* 保存下载 单层数据界面
*/
public TopDefinitionProvider updateBean() {
return tableSinglePane.updateBean();
}
/**
* 出发数据集改变
* @param tableDataWrapper 数据集
*/
public void fireTableDataChanged(TableDataWrapper tableDataWrapper) {
tableSinglePane.setTableDataWrapper(tableDataWrapper);
tableSinglePane.refreshAreaNameBox();
}
}

93
designer_chart/src/com/fr/design/chart/report/MapTableCubeDataPane4Chart.java

@ -1,93 +0,0 @@
package com.fr.design.chart.report;
import com.fr.chart.chartdata.MapMoreLayerTableDefinition;
import com.fr.chart.chartdata.MapSingleLayerTableDefinition;
import com.fr.design.beans.FurtherBasicBeanPane;
import com.fr.design.data.tabledata.wrapper.TableDataWrapper;
import com.fr.general.Inter;
import java.awt.*;
/**
* Created by IntelliJ IDEA.
* Author : daisy
* Version: 7.1.1
*/
public class MapTableCubeDataPane4Chart extends FurtherBasicBeanPane<MapMoreLayerTableDefinition> {
private MapMoreTableIndexPane tablePane;
private TableDataWrapper tableDataWrapper;
public MapTableCubeDataPane4Chart() {
this.setLayout(new BorderLayout());
tablePane = new MapMoreTableIndexPane();
this.add(tablePane, BorderLayout.CENTER);
}
/**
* 刷新区域名称列表
*/
public void refreshAreaNameBox() {
TableDataWrapper tableDataWrappe = tableDataWrapper;
if (tableDataWrappe == null) {
return;
}
java.util.List<String> columnNameList = tableDataWrappe.calculateColumnNameList();
tablePane.initAreaComBox(columnNameList.toArray(new String[columnNameList.size()]));
}
public void setTableDataWrapper(TableDataWrapper wrapper){
this.tableDataWrapper = wrapper;
}
/**
* 界面接入
* @param ob 界面
* @return 返回接入.
*/
public boolean accept(Object ob) {
return true;
}
/**
* 重置
*/
public void reset() {
}
/**
* 界面弹出标题
* @return 返回标题.
*/
public String title4PopupWindow() {
return Inter.getLocText("FR-Chart-Table_Data");
}
@Override
public void populateBean(MapMoreLayerTableDefinition tableDefinition) {
if (tableDefinition != null) {
MapSingleLayerTableDefinition[] values = tableDefinition.getNameValues();
if(values != null && values.length > 0) {
tablePane.populateBean(values[0]);
}
}
}
@Override
public MapMoreLayerTableDefinition updateBean() {
MapMoreLayerTableDefinition tableDefinition = new MapMoreLayerTableDefinition();
TableDataWrapper tableDataWrappe =tableDataWrapper;
if (tableDataWrappe != null) {
tableDefinition.setTableData(tableDataWrappe.getTableData());
tableDefinition.clearNameValues();
tableDefinition.addNameValue(tablePane.updateBean());
}
return tableDefinition;
}
}

268
designer_chart/src/com/fr/design/chart/report/MapTableDataSinglePane4Chart.java

@ -1,268 +0,0 @@
package com.fr.design.chart.report;
import com.fr.base.Utils;
import com.fr.chart.chartdata.MapSingleLayerTableDefinition;
import com.fr.chart.chartdata.SeriesDefinition;
import com.fr.design.beans.FurtherBasicBeanPane;
import com.fr.design.data.tabledata.wrapper.TableDataWrapper;
import com.fr.design.event.UIObserver;
import com.fr.design.event.UIObserverListener;
import com.fr.design.gui.frpane.UICorrelationPane;
import com.fr.design.gui.icombobox.UIComboBox;
import com.fr.design.gui.ilable.BoldFontTextLabel;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.itable.UITableEditor;
import com.fr.design.gui.itextfield.UITextField;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
import com.fr.general.Inter;
import com.fr.stable.StringUtils;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.*;
/**
* Created by IntelliJ IDEA.
* Author : daisy
* Version: 7.1.1
*/
public class MapTableDataSinglePane4Chart extends FurtherBasicBeanPane<MapSingleLayerTableDefinition> implements UIObserver {
private static final int LABEL_WIDTH_GAP = 5;
private static final int COM_HEIGHT = 20;
private ArrayList<ChangeListener> changeListeners = new ArrayList<ChangeListener>();
private String[] initNames = {""};
private UIComboBox areaNameBox;
private UICorrelationPane titleValuePane;
private TableDataWrapper tableDataWrapper;
public MapTableDataSinglePane4Chart() {
this.setLayout(new BorderLayout());
JPanel pane = new JPanel();
this.add(pane, BorderLayout.CENTER);
pane.setLayout(new BorderLayout());
pane.add(getAreaNamePane(), BorderLayout.NORTH);
String[] titles = {Inter.getLocText("FR-Chart-Area_Title"), Inter.getLocText("FR-Chart-Area_Value")};
titleValuePane = new UICorrelationPane(titles){
public UITableEditor createUITableEditor() {
return new InnerTableEditor();
}
};
pane.add(titleValuePane, BorderLayout.CENTER);
}
private JPanel getAreaNamePane(){
final UILabel label = new BoldFontTextLabel(Inter.getLocText("FR-Chart-Map_ShowWay") + ":");
UILabel nameLabel = new UILabel(Inter.getLocText("FR-Chart-Area_Name") + ":", SwingConstants.RIGHT){
public Dimension getPreferredSize() {
return new Dimension(label.getPreferredSize().width+LABEL_WIDTH_GAP,COM_HEIGHT);
}
};
areaNameBox = new UIComboBox();
areaNameBox.setPreferredSize(new Dimension(80, 20));
double p =TableLayout.PREFERRED;
double f = TableLayout.FILL;
double[] columnSize = {p, f};
double[] rowSize = {p};
Component[][] components = new Component[][]{
new Component[]{nameLabel, areaNameBox},
};
return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize);
}
/**
*刷新区域名称列表
*/
public void refreshAreaNameBox() {// 刷新区域名称列表
TableDataWrapper tableDataWrappe = tableDataWrapper;
if (tableDataWrappe == null) {
return;
}
java.util.List<String> columnNameList = tableDataWrappe.calculateColumnNameList();
initNames = columnNameList.toArray(new String[columnNameList.size()]);
Object oldSelected = areaNameBox.getSelectedItem();
areaNameBox.removeAllItems();
for(int i = 0, size = initNames.length; i < size; i++) {
areaNameBox.addItem(initNames[i]);
}
areaNameBox.getModel().setSelectedItem(oldSelected);
stopEditing();
}
/**
* 是否接受数据集
* @param ob 具体变量
* @return 不是
*/
public boolean accept(Object ob) {
return false;
}
/**
* 界面重置
*/
public void reset() {
}
/**
* 界面弹出标题
* @return 标题
*/
public String title4PopupWindow() {
return Inter.getLocText("FR-Chart-Table_Data");
}
private void stopEditing() {
}
@Override
public void populateBean(MapSingleLayerTableDefinition ob) {
stopEditing();
if (ob instanceof MapSingleLayerTableDefinition) {
MapSingleLayerTableDefinition mapDefinition = (MapSingleLayerTableDefinition) ob;
// fromTableData.populateBean(((NameTableData) mapDefinition.getTableData()));
areaNameBox.setSelectedItem(mapDefinition.getAreaName());
java.util.List paneList = new ArrayList();
int titleValueSize = mapDefinition.getTitleValueSize();
for(int i = 0; i < titleValueSize; i++) {
SeriesDefinition definition = mapDefinition.getTitleValueWithIndex(i);
if(definition != null && definition.getSeriesName() != null && definition.getValue() != null) {
paneList.add(new Object[]{definition.getSeriesName(), definition.getValue()});
}
}
if(!paneList.isEmpty()) {
titleValuePane.populateBean(paneList);
}
}
}
@Override
public MapSingleLayerTableDefinition updateBean() {// 从一行内容中update
stopEditing();
MapSingleLayerTableDefinition definition = new MapSingleLayerTableDefinition();
TableDataWrapper tableDataWrappe = tableDataWrapper;
// = fromTableData.getTableDataWrapper();
if (tableDataWrappe == null || areaNameBox.getSelectedItem() == null) {
return null;
}
definition.setTableData(tableDataWrapper.getTableData());
definition.setAreaName(Utils.objectToString(areaNameBox.getSelectedItem()));
java.util.List paneList = titleValuePane.updateBean();
for(int i = 0, size = paneList.size(); i < size; i++) {
Object[] values = (Object[])paneList.get(i);
if(values.length == 2) {
SeriesDefinition seriesDefinition = new SeriesDefinition();
seriesDefinition.setSeriesName(values[0]);
seriesDefinition.setValue(values[1]);
definition.addTitleValue(seriesDefinition);
}
}
return definition;
}
/**
* 给组件登记一个观察者监听事件
*
* @param listener 观察者监听事件
*/
public void registerChangeListener(final UIObserverListener listener) {
changeListeners.add(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
listener.doChange();
}
});
}
/**
* 组件是否需要响应添加的观察者事件
*
* @return 如果需要响应观察者事件则返回true否则返回false
*/
public boolean shouldResponseChangeListener() {
return true;
}
private class InnerTableEditor extends UITableEditor {
private JComponent editorComponent;
/**
* 返回当前编辑器的值
*/
public Object getCellEditorValue() {
if(editorComponent instanceof UITextField) {
UITextField textField = (UITextField)editorComponent;
return textField.getText();
} else if(editorComponent instanceof UIComboBox) {
UIComboBox boxPane = (UIComboBox)editorComponent;
return boxPane.getSelectedItem();
}
return super.getCellEditorValue();
}
/**
* 返回当前编辑器..
*/
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
if (column == table.getModel().getColumnCount()) {
return null;
}
if(column == 0 ) {
UITextField text = new UITextField();
if(value != null) {
text.setText(Utils.objectToString(value));
}
text.registerChangeListener(new UIObserverListener() {
@Override
public void doChange() {
titleValuePane.fireTargetChanged();
}
});
this.editorComponent = text;
} else {
UIComboBox box = new UIComboBox(initNames);
box.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
titleValuePane.fireTargetChanged();
titleValuePane.stopCellEditing();
}
});
if (value != null && StringUtils.isNotEmpty(value.toString())) {
box.setSelectedItem(value);
} else {
box.setSelectedItem(value);
}
this.editorComponent = box;
}
return this.editorComponent;
}
}
public void setTableDataWrapper(TableDataWrapper wrapper){
this.tableDataWrapper = wrapper;
}
}

244
designer_chart/src/com/fr/design/mainframe/AbstractChartDataPane4Chart.java

@ -1,244 +0,0 @@
package com.fr.design.mainframe;
import com.fr.base.TableData;
import com.fr.chart.chartattr.ChartCollection;
import com.fr.chart.chartdata.JSONTableData;
import com.fr.data.impl.EmbeddedTableData;
import com.fr.data.impl.ExcelTableData;
import com.fr.design.event.UIObserver;
import com.fr.design.event.UIObserverListener;
import com.fr.design.gui.frpane.AttributeChangeListener;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.icombobox.UIComboBox;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
import com.fr.design.mainframe.chart.gui.ChartDataPane;
import com.fr.design.mainframe.chart.gui.data.*;
import com.fr.general.Inter;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
/**
* Created by IntelliJ IDEA.
* Author : daisy
* Version: 7.1.1
* Date: 14/12/3
* Time: 下午6:53
*/
public class AbstractChartDataPane4Chart extends DataContentsPane implements UIObserver {
private static final int DATA_SOURCE_GAP = 18;
private static final int WIDTH = 262;
protected ChartDataPane parentPane;
protected ChartDesignDataLoadPane choosePane;
protected JComponent choose = new UILabel();
protected UIObserverListener observerListener;
protected UIComboBox dataSource = new UIComboBox(
new String[]{"JSON" + Inter.getLocText("Chart-DS_TableData"), Inter.getLocText("Chart-Use_Local") + "EXCEL", Inter.getLocText("Chart-DS_Embedded_TableData")});
protected ItemListener dsListener = new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
int index = dataSource.getSelectedIndex();
if (index == 0) {
initJSON();
} else if (index == 1) {
initExcel();
} else {
initEmbbed();
}
remove(leftContentPane);
clearTableDataSetting();
initContentPane();
AbstractChartDataPane4Chart.this.validate();
}
};
protected AttributeChangeListener attributeChangeListener;
public AbstractChartDataPane4Chart(final AttributeChangeListener listener, ChartDataPane parent) {
this.parentPane = parent;
this.attributeChangeListener = listener;
initJSON();
initAll();
}
protected void populateChoosePane(TableData tableData) {
dataSource.removeItemListener(dsListener);
if (tableData instanceof JSONTableData) {
initJSON();
dataSource.setSelectedIndex(0);
} else if (tableData instanceof ExcelTableData) {
initExcel();
dataSource.setSelectedIndex(1);
} else if (tableData instanceof EmbeddedTableData) {
initEmbbed();
dataSource.setSelectedIndex(2);
}
choosePane.populateChartTableData(tableData);
dataSource.addItemListener(dsListener);
}
protected void initJSON() {
choosePane = new JSONDataPane(this);
UILabel url = new UILabel("URL:");
url.setHorizontalAlignment(SwingConstants.RIGHT);
choose = url;
}
protected void initExcel() {
choose = new UIButton(Inter.getLocText("Chart-Select_Path"));
choosePane = new ExcelDataPane(this, choose);
}
protected void initEmbbed() {
choosePane = new EmbbeddDataPane(this);
choose = null;
}
@Override
public void setSupportCellData(boolean supportCellData) {
}
@Override
protected JPanel createContentPane() {
double p = TableLayout.PREFERRED;
double[] columnSize = {WIDTH};
double[] rowSize = {p, p};
Component[][] components = new Component[][]{
new Component[]{new UILabel(Inter.getLocText("Chart-Data_Import"))},
new Component[]{createDataImportPane()}
};
return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize);
}
private JPanel createDataImportPane() {
double p = TableLayout.PREFERRED;
double f = TableLayout.FILL;
double[] columnSize = {f};
double[] rowSize = {p, p, p};
Component[][] components = new Component[][]{
new Component[]{createDataSourcePane()},
new Component[]{new JSeparator()},
new Component[]{createDataSetPane()}
};
return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize);
}
/**
* 数据配置面板
*
* @return
*/
protected JPanel createDataSetPane() {
double p = TableLayout.PREFERRED;
double f = TableLayout.FILL;
double[] columnSize = {f};
double[] rowSize = {p, p};
Component[][] components = new Component[][]{
new Component[]{new UILabel(Inter.getLocText("Chart-Data_Configuration"))},
new Component[]{getDataContentPane()}
};
return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize);
}
protected JPanel getDataContentPane() {
return new JPanel();
}
private JPanel createDataSourcePane() {
double p = TableLayout.PREFERRED;
double f = TableLayout.FILL;
double[] columnSize = {DATA_SOURCE_GAP, f};
double[] rowSize = {p,};
Component[][] components = new Component[][]{
new Component[]{null, createChooseBoxPane()},
};
return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize);
}
private JPanel createChooseBoxPane() {
UILabel dataSourceLabel = new UILabel(Inter.getLocText("Chart-Data_Resource") + ":");
dataSourceLabel.setHorizontalAlignment(SwingConstants.RIGHT);
double p = TableLayout.PREFERRED;
double f = TableLayout.FILL;
double[] columnSize = {p, f};
double[] rowSize = {p, p};
Component[][] components = new Component[][]{
new Component[]{dataSourceLabel, dataSource},
new Component[]{choose, choosePane}
};
return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize);
}
/**
* 注册观察者监听事件
*
* @param listener 观察者监听事件
*/
public void registerChangeListener(UIObserverListener listener) {
this.observerListener = listener;
}
/**
* 使用应该响应listener
*
* @return 应该响应
*/
public boolean shouldResponseChangeListener() {
return true;
}
protected void initSelfListener(Container parentComponent) {
for (int i = 0; i < parentComponent.getComponentCount(); i++) {
Component tmpComp = parentComponent.getComponent(i);
if (tmpComp instanceof Container) {
initListener((Container) tmpComp);
}
if (tmpComp instanceof UIObserver) {
((UIObserver) tmpComp).registerChangeListener(observerListener);
}
}
}
@Override
public void populate(ChartCollection collection) {
}
@Override
public void update(ChartCollection collection) {
}
/**
* 清空数据集的设置
*/
public void clearTableDataSetting() {
}
/**
* 数据集数据改变
*/
public void fireTableDataChange() {
}
}

111
designer_chart/src/com/fr/design/mainframe/AbstractMapPlotPane4ToolBar.java

@ -1,111 +0,0 @@
package com.fr.design.mainframe;
import com.fr.chart.base.ChartConstants;
import com.fr.chart.base.MapSvgXMLHelper;
import com.fr.chart.chartattr.*;
import com.fr.design.gui.icombobox.UIComboBox;
import com.fr.design.mainframe.chart.ChartDesignEditPane;
import com.fr.general.ComparatorUtils;
import com.fr.stable.Constants;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
/**
* Created by IntelliJ IDEA.
* Author : daisy
* Version: 7.1.1
* Date: 14/12/1
* Time: 下午3:15
*/
public abstract class AbstractMapPlotPane4ToolBar extends JPanel{
protected static final int COM_HEIGHT = 22;
protected static final int COM_GAP = 14;
protected static final int COMBOX_WIDTH = 230;
protected ChartDesigner chartDesigner;
protected UIComboBox mapTypeComboBox;
protected ItemListener mapTypeListener = new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
calculateDetailMaps(mapTypeComboBox.getSelectedIndex());
}
};
public AbstractMapPlotPane4ToolBar(ChartDesigner designer){
this.chartDesigner = designer;
this.setLayout(new FlowLayout(FlowLayout.LEFT, COM_GAP, 0));
this.setBorder(new EmptyBorder(2, 0, 2, 0));
mapTypeComboBox = new UIComboBox(getMapTypes()) {
public Dimension getPreferredSize() {
return new Dimension(COMBOX_WIDTH, COM_HEIGHT);
}
};
mapTypeComboBox.addItemListener(mapTypeListener);
this.add(mapTypeComboBox);
}
protected abstract void calculateDetailMaps(int mapType);
/**
* 更新地图面板
* @param mapType 地图名字
*/
public void populateMapPane(String mapType){
mapTypeComboBox.removeItemListener(mapTypeListener);
for (String type : getMapTypes()) {
java.util.List list = MapSvgXMLHelper.getInstance().getNamesListWithCateName(type);
for (Object name : list) {
if(ComparatorUtils.equals(name,mapType)){
mapTypeComboBox.setSelectedItem(type);
break;
}
}
}
mapTypeComboBox.addItemListener(mapTypeListener);
}
public abstract String[] getMapTypes();
/**
* 切换图表类型
*/
public void fireChange(){
ChartCollection chartCollection = (ChartCollection)chartDesigner.getTarget().getChartCollection();
Chart chart =chartCollection.getSelectedChart();
if(chart.getPlot().getPlotStyle() != ChartConstants.STYLE_NONE){
resetChart(chart);
}
chart.switchPlot(getSelectedClonedPlot());
if(chart.getPlot().getPlotStyle() != ChartConstants.STYLE_NONE){
resetChart(chart);
}
chartDesigner.fireTargetModified();
ChartDesignEditPane.getInstance().populateSelectedTabPane();
}
protected void resetChart(Chart chart){
chart.setTitle(new Title(chart.getTitle().getTextObject()));
chart.setBorderStyle(Constants.LINE_NONE);
chart.setBorderColor(new Color(150, 150, 150));
chart.setBackground(null);
}
protected abstract Plot getSelectedClonedPlot();
/**
* 触发更新
*/
public void fireTargetModified() {
chartDesigner.fireTargetModified();
}
}

521
designer_chart/src/com/fr/design/mainframe/ChartArea.java

@ -1,521 +0,0 @@
/*
* Copyright (c) 2001-2014,FineReport Inc, All Rights Reserved.
*/
package com.fr.design.mainframe;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.itextfield.UINumberField;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
import com.fr.design.scrollruler.*;
import com.fr.general.FRScreen;
import com.fr.general.Inter;
import javax.swing.*;
import javax.swing.border.LineBorder;
import java.awt.*;
import java.awt.event.*;
/**
* Created by IntelliJ IDEA.
* Author : daisy
* Version: 6.5.6
* Date: 14-10-13
* Time: 下午5:08
*/
public class ChartArea extends JComponent implements ScrollRulerComponent {
private static final int TOPGAP = 8;
private static final int MIN_WIDTH = 36;
private static final int MIN_HEIGHT = 21;
private static final double SLIDER_FLOAT = 120.0;
private static final double SLIDER_MIN = 60.0;
private static final double DEFAULT_SLIDER = 100.0;
private static final int ROTATIONS = 50;
private int designerwidth = 810;
private int designerheight = 500;
private int customWidth = 810;
private int customHeight = 500;
private ChartDesigner designer;
private int horizontalValue = 0;
private int verticalValue = 0;
private int verticalMax = 0;
private int horicalMax = 0;
private FormScrollBar verScrollBar;
private FormScrollBar horScrollBar;
//显示和设置图表界面大小的控件
private UINumberField widthPane;
private UINumberField heightPane;
private boolean isValid = true;
private double START_VALUE = DEFAULT_SLIDER;
public ChartArea(ChartDesigner designer) {
this(designer, true);
}
public ChartArea(ChartDesigner designer, boolean useScrollBar) {
this.designer = designer;
this.designer.setParent(this);
this.customWidth = designer.getTarget().getWidth();
this.customHeight = designer.getTarget().getHeight();
this.designerwidth = this.customWidth;
this.designerheight = this.customHeight;
isValid = useScrollBar;
verScrollBar = new FormScrollBar(Adjustable.VERTICAL, this);
horScrollBar = new FormScrollBar(Adjustable.HORIZONTAL, this);
if (useScrollBar) {
this.setLayout(new FormRulerLayout());
designer.setBorder(new LineBorder(new Color(198, 198, 198)));
this.add(FormRulerLayout.CENTER, designer);
addFormSize();
this.add(FormRulerLayout.VERTICAL, verScrollBar);
this.add(FormRulerLayout.HIRIZONTAL, horScrollBar);
enableEvents(AWTEvent.MOUSE_WHEEL_EVENT_MASK);
} else {
// 报表参数界面只要标尺和中心pane
this.setLayout(new RulerLayout());
this.add(RulerLayout.CENTER, designer);
addFormRuler();
}
this.setFocusTraversalKeysEnabled(false);
}
/**
* 增加表单的页面大小控制界面包括手动修改和滑块拖动
*/
private void addFormSize() {
double f = TableLayout.FILL;
double p = TableLayout.PREFERRED;
double[] rowSize = {f};
double[] columnSize = {p, f, p, p, p, p, p,f,p};
UILabel tipsPane = new UILabel("chart");
tipsPane.setPreferredSize(new Dimension(200, 0));
widthPane = new UINumberField();
widthPane.setPreferredSize(new Dimension(60, 0));
heightPane = new UINumberField();
heightPane.setPreferredSize(new Dimension(60, 0));
JPanel panel = new JPanel(){
public Dimension getPreferredSize(){
return new Dimension(200,0);
}
};
JPanel resizePane = TableLayoutHelper.createCommonTableLayoutPane(new JComponent[][]{
{tipsPane, new UILabel(), widthPane, new UILabel(Inter.getLocText("Indent-Pixel")), new UILabel("x"),
heightPane, new UILabel(Inter.getLocText("Indent-Pixel")),new UILabel(),panel}},
rowSize, columnSize, 8
);
this.add(FormRulerLayout.BOTTOM, resizePane);
setWidgetsConfig();
// 先初始话滑块及对应事件,然后获取分辨率调整容器的显示大小
initCalculateSize();
}
private void setWidgetsConfig() {
widthPane.setHorizontalAlignment(widthPane.CENTER);
heightPane.setHorizontalAlignment(heightPane.CENTER);
widthPane.setMaxDecimalLength(0);
heightPane.setMaxDecimalLength(0);
//控件初始值就是根节点组件初始的宽和高
widthPane.setValue(designerwidth);
heightPane.setValue(designerheight);
addWidthPaneListener();
addHeightPaneListener();
}
private void initCalculateSize() {
Toolkit toolkit = Toolkit.getDefaultToolkit();
Dimension scrnsize = toolkit.getScreenSize();
double value = FRScreen.getByDimension(scrnsize).getValue();
if (value != DEFAULT_SLIDER) {
reCalculateRoot(value, true);
}
}
//设置宽度的控件及响应事件
private void addWidthPaneListener() {
widthPane.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent evt) {
reCalculateWidth((int) ((UINumberField) evt.getSource()).getValue());
}
}
);
widthPane.addFocusListener(
new FocusAdapter() {
public void focusLost(FocusEvent e) {
// 失去焦点时,可以认为输入结束
reCalculateWidth((int) ((UINumberField) e.getSource()).getValue());
}
}
);
}
private void addHeightPaneListener() {
heightPane.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent evt) {
reCalculateHeight((int) ((UINumberField) evt.getSource()).getValue());
}
}
);
heightPane.addFocusListener(
new FocusAdapter() {
public void focusLost(FocusEvent e) {
// 失去焦点时,可以认为输入结束
reCalculateHeight((int) ((UINumberField) e.getSource()).getValue());
}
}
);
}
private void reCalculateWidth(int width) {
int dW = width - designerwidth;
if (dW == 0) {
return;
}
// 图表设计器先设大小为实际的高和当前的宽,然后按此调整内部的组件
designer.setSize(width, designerheight);
designerwidth = width;
customWidth = width;
designer.getTarget().setWidth(width);
ChartArea.this.validate();
designer.fireTargetModified();
}
private void reCalculateHeight(int height) {
int dW = height - designerwidth;
if (dW == 0) {
return;
}
// 图表设计器先设大小为实际的高和当前的宽,然后按此调整内部的组件
designer.setSize(designerwidth, height);
designerheight = height;
customHeight = height;
this.designer.getTarget().setHeight(height);
ChartArea.this.validate();
designer.fireTargetModified();
}
/**
* 按照界面大小的百分比值调整root大小
*
* @param needCalculateParaHeight 是否需要调整参数界面高度
* @param value
*/
private void reCalculateRoot(double value, boolean needCalculateParaHeight) {
if (value == START_VALUE) {
return;
}
double percent = (value - START_VALUE) / START_VALUE;
Dimension d = new Dimension(designerwidth, designerheight);
// 调整自适应布局大小后,同步调整参数界面和border大小,此时刷新下formArea
ChartArea.this.validate();
START_VALUE = value;
}
/**
* 增加刻度条
*/
public void addFormRuler() {
BaseRuler vRuler = new VerticalRuler(this);
BaseRuler hRuler = new HorizontalRuler(this);
this.add(RulerLayout.VRULER, vRuler);
this.add(RulerLayout.HRULER, hRuler);
}
/**
* 鼠标滚轮事件
* 由于表单设计界面要求 容器大小大于界面时滚动条才可以拖动所以不支持滚动无限往下滚
*/
@Override
protected void processMouseWheelEvent(java.awt.event.MouseWheelEvent evt) {
int id = evt.getID();
switch (id) {
case MouseEvent.MOUSE_WHEEL: {
int rotations = evt.getWheelRotation();
int value = this.verScrollBar.getValue() + rotations * ROTATIONS;
value = Math.min(value, verticalMax);
value = Math.max(0, value);
doLayout(); //加dolayout是因为每次滚动都要重置 Max的大小
this.verScrollBar.setValue(value);
break;
}
}
}
/**
* 容器布局
*/
public void doLayout() {
layout();
if (isValid) {
setScrollBarProperties(customWidth - designer.getWidth(), horScrollBar);
//计算滚动条值的时候应该算上参数面板的高度
setScrollBarProperties(customHeight - designer.getHeight(), verScrollBar);
}
}
/**
* 设置滚动条的属性
*/
private void setScrollBarProperties(int value, FormScrollBar bar) {
if (value <= 0) {
// 界面有滚动条时,手动缩小容器宽度到界面内,重置滚动条值和max
setScrollBarMax(0, bar);
bar.setMaximum(0);
bar.setValue(0);
bar.setEnabled(false);
} else {
//参数面板拖拽过程中value一直为当前value
int oldValue = verticalValue;
setScrollBarMax(value, bar);
bar.setEnabled(true);
bar.setMaximum(value);
bar.setValue(value);
bar.setValue(oldValue);
}
}
private boolean isScrollNotVisible(FormScrollBar bar) {
if (bar.getOrientation() == Adjustable.VERTICAL) {
return verticalMax == 0;
} else {
return horicalMax == 0;
}
}
private void setScrollBarMax(int max, FormScrollBar bar) {
if (bar.getOrientation() == Adjustable.VERTICAL) {
verticalMax = max;
} else {
horicalMax = max;
}
}
/**
* 返回designer的最小高度
*
* @return int
*/
public int getMinHeight() {
return MIN_HEIGHT;
}
/**
* 返回designer的最小宽度
*
* @return int
*/
public int getMinWidth() {
return MIN_WIDTH;
}
/**
* getRulerLengthUnit
*
* @return short
*/
public short getRulerLengthUnit() {
return -1;
}
/**
* 返回水平滚动条的value
*
* @return int
*/
public int getHorizontalValue() {
return horizontalValue;
}
/**
* 设置水平滚动条的value
*
* @param newValue
*/
public void setHorizontalValue(int newValue) {
this.horizontalValue = newValue;
}
/**
* 返回竖直滚动条的value
*
* @return
*/
public int getVerticalValue() {
return verticalValue;
}
/**
* 竖直滚动条赋值
*
* @param newValue
*/
public void setVerticalValue(int newValue) {
this.verticalValue = newValue;
}
/**
* 返回当前designer的高度
*
* @return height
*/
public int getDesignerHeight() {
return designer.getHeight();
}
/**
* 返回当前designer的宽度
*
* @return
*/
public int getDesignerWidth() {
return designer.getWidth();
}
/**
* 返回宽度控件的value
*
* @return 宽度
*/
public double getWidthPaneValue() {
return widthPane.getValue();
}
/**
* 设置宽度值
*
* @param value
*/
public void setWidthPaneValue(int value) {
widthPane.setValue(value);
}
/**
* 设置高度值
*
* @param value
*/
public void setHeightPaneValue(int value) {
heightPane.setValue(value);
}
/**
* 返回高度控件的value
*
* @return 高度
*/
public double getHeightPaneValue() {
return heightPane.getValue();
}
/**
* 返回界面区域大小
*
* @return Dimension
*/
public Dimension getAreaSize() {
return new Dimension(horScrollBar.getMaximum(), verScrollBar.getMaximum());
}
/**
* setAreaSize
*
* @param totalSize
* @param horizontalValue
* @param verticalValue
*/
public void setAreaSize(Dimension totalSize, int horizontalValue, int verticalValue, double width, double height, double slide) {
horScrollBar.setMaximum((int) totalSize.getWidth());
verScrollBar.setMaximum((int) totalSize.getHeight());
horScrollBar.setValue(horizontalValue);
verScrollBar.setValue(verticalValue);
// 撤销会refresh底层容器,需要按照之前的宽高和百分比重置下容器size
if (width != widthPane.getValue()) {
widthPane.setValue(width);
reCalculateWidth((int) width);
}
if (height != heightPane.getValue()) {
heightPane.setValue(height);
reCalculateHeight((int) height);
}
// undo时会重新refreshRoot,需要再次按照百分比调整下
START_VALUE = DEFAULT_SLIDER;
reCalculateRoot(slide, true);
}
public int getCustomWidth(){
return this.customWidth;
}
public int getCustomHeight(){
return this.customHeight;
}
/**
* 计算滚动条的值和max
*
* @param oldmax 之前最大值
* @param max 当前最大值
* @param newValue 当前value
* @param oldValue 之前value
* @param visi designer的大小
* @param orientation 滚动条方向
* @return 计算后的值和max
*/
@Override
public Point calculateScroll(int oldmax, int max, int newValue, int oldValue, int visi, int orientation) {
int scrollMax = orientation == 1 ? verticalMax : horicalMax;
//防止滚动条到达低端还可以继续点击移动(滚动条最大范围不变时,newValue要在范围之内)
if (oldmax == scrollMax + visi && newValue > scrollMax) {
return new Point(oldValue, oldmax);
}
return new Point(newValue, max);
}
private class FormRulerLayout extends RulerLayout {
public FormRulerLayout() {
super();
}
/**
* 表单用的layout当前不需要标尺
*/
public void layoutContainer(Container target) {
synchronized (target.getTreeLock()) {
Insets insets = target.getInsets();
int top = insets.top;
int left = insets.left;
int bottom = target.getHeight() - insets.bottom;
int right = target.getWidth() - insets.right;
Dimension resize = resizePane.getPreferredSize();
Dimension hbarPreferredSize = null;
Dimension vbarPreferredSize = null;
resizePane.setBounds(left, bottom - resize.height, right, resize.height);
if (horScrollBar != null) {
hbarPreferredSize = horScrollBar.getPreferredSize();
vbarPreferredSize = verScrollBar.getPreferredSize();
horScrollBar.setBounds(left, bottom - hbarPreferredSize.height - resize.height, right - BARSIZE, hbarPreferredSize.height);
verScrollBar.setBounds(right - vbarPreferredSize.width, top, vbarPreferredSize.width, bottom - BARSIZE - resize.height);
}
ChartDesigner dg = ((ChartDesigner) designer);
Rectangle rec = new Rectangle(left + (right - designerwidth) / 2, TOPGAP, right, bottom);
//是否为图表
if (isValid) {
int maxHeight = bottom - hbarPreferredSize.height - resize.height - TOPGAP * 2;
int maxWidth = right - vbarPreferredSize.width;
designerwidth = designerwidth> maxWidth ? maxWidth : designerwidth;
designerheight = designerheight > maxHeight ? maxHeight : designerheight;
int designerLeft = left + (verScrollBar.getX() - designerwidth) / 2;
rec = new Rectangle(designerLeft, TOPGAP, designerwidth, designerheight);
}
// designer是整个表单设计界面中的面板部分,目前只放自适应布局和参数界面。
designer.setBounds(rec);
}
}
}
}

230
designer_chart/src/com/fr/design/mainframe/ChartDesigner.java

@ -1,230 +0,0 @@
/*
* Copyright (c) 2001-2014,FineReport Inc, All Rights Reserved.
*/
package com.fr.design.mainframe;
import com.fr.form.ui.ChartBook;
import com.fr.design.designer.TargetComponent;
import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus;
import com.fr.design.menu.MenuDef;
import com.fr.design.menu.ShortCut;
import com.fr.design.menu.ToolBarDef;
import javax.swing.*;
import javax.swing.event.ChangeListener;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionAdapter;
import java.util.ArrayList;
/**
* Created by IntelliJ IDEA.
* Author : daisy
* Version: 6.5.6
* Date: 14-10-13
* Time: 下午4:30
*/
public class ChartDesigner extends TargetComponent<ChartBook> implements MouseListener{
private ChartArea chartArea;//上层区域
private boolean hasCalGap = false;
private ArrayList<ChangeListener> changeListeners = new ArrayList<ChangeListener>();
public ChartDesigner(ChartBook chartBook) {
super(chartBook);
this.addMouseListener(this);
updateUI();// 初始化界面设计工具的UI实例
}
/**
* 设置上层区域
* @param chartArea 图表区域
*/
public void setParent(ChartArea chartArea) {
this.chartArea = chartArea;
}
/**
* 复制
*/
public void copy() {
}
/**
* 黏贴
* @return 成功返回true
*/
public boolean paste() {
return false;
}
/**
* 剪切
* @return 成功返回TRUE
*/
public boolean cut() {
return false;
}
/**
* 停止编辑
*/
public void stopEditing() {
}
/**
* 权限编辑面板
* @return 面板
*/
public AuthorityEditPane createAuthorityEditPane() {
return null;
}
/**
* 工具条
* @return 工具条
*/
public ToolBarMenuDockPlus getToolBarMenuDockPlus() {
return null;
}
/**
* 菜单状态
* @return 状态
*/
public int getMenuState() {
return 0;
}
/**
* 东上面板
* @return 面板
*/
public JPanel getEastUpPane() {
return null;
}
/**
* 东下面板
* @return 面板
*/
public JPanel getEastDownPane() {
return null;
}
/**
* 取消格式
*/
public void cancelFormat() {
}
/**
* 图表设计器得工具条项
* @return 图表设计器得工具条项
*/
public ToolBarDef[] toolbars4Target() {
return new ToolBarDef[0];
}
/**
* 菜单
* @return 菜单
*/
public MenuDef[] menus4Target() {
return new MenuDef[0];
}
/**
* 菜单项
* @return 菜单项
*/
public ShortCut[] shortcut4TemplateMenu() {
return new ShortCut[0];
}
/**
* 权限编辑得菜单项
* @return 菜单项
*/
public ShortCut[] shortCuts4Authority() {
return new ShortCut[0];
}
/**
* 表单得工具条按钮
* @return 表单得工具条按钮
*/
public JComponent[] toolBarButton4Form() {
return new JComponent[0];
}
/**
* 返回表单区域
* @return 表单区域
*/
public ChartArea getArea() {
return chartArea;
}
/**
* 鼠标点击
* @param e 事件
*/
public void mouseClicked(MouseEvent e) {
}
/**
* 鼠标按下
* @param e 事件
*/
public void mousePressed(MouseEvent e) {
}
/**
* 鼠标释放
* @param e 事件
*/
public void mouseReleased(MouseEvent e) {
}
/**
* 鼠标进入
* @param e 事件
*/
public void mouseEntered(MouseEvent e) {
}
/**
* 鼠标退出
* @param e 事件
*/
public void mouseExited(MouseEvent e) {
}
private void registerChangeListener(ChangeListener changeListener){
if(changeListener == null){
return;
}
this.changeListeners.add(changeListener);
}
public void populate(){
}
/**
* 清除工具栏上面全局风格按钮的选中
*/
public void clearToolBarStyleChoose(){
}
}

211
designer_chart/src/com/fr/design/mainframe/ChartDesignerUI.java

@ -1,211 +0,0 @@
/*
* Copyright (c) 2001-2014,FineReport Inc, All Rights Reserved.
*/
package com.fr.design.mainframe;
import com.fr.base.BaseUtils;
import com.fr.base.ScreenResolution;
import com.fr.base.chart.BaseChartGlyph;
import com.fr.chart.chartattr.*;
import com.fr.chart.charttypes.ColumnIndependentChart;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.mainframe.chart.ChartDesignEditPane;
import com.fr.general.FRLogger;
import javax.swing.*;
import javax.swing.plaf.ComponentUI;
import java.awt.*;
import java.awt.event.MouseEvent;
/**
* Created by IntelliJ IDEA.
* Author : daisy
* Version: 6.5.6
* Date: 14-10-13
* Time: 下午4:55
*/
public class ChartDesignerUI extends ComponentUI {
private static final Icon ADD = BaseUtils.readIcon("/com/fr/design/images/add.png");
private static final Icon DEL = BaseUtils.readIcon("/com/fr/design/images/del.png");
private static final int ICON_SIZE = 22;
private static final int H_GAP = 2;
private static final int V_GAP = 6;
private Rectangle[] iconLocations;
private Rectangle add;
private Rectangle del;
private UILabel tooltipLabel;
private int overIndex = -1;//鼠标悬浮上去的图表的INDEX
// 图表当前的设计器
private ChartDesigner designer;
public ChartDesignerUI() {
}
/**
* 加载界面
*
* @param c 组件
*/
public void installUI(JComponent c) {
designer = (ChartDesigner) c;
}
/**
* 渲染当前的设计界面以及设计辅助状态
*
* @param g 画图类
* @param c 组件
*/
@Override
public void paint(Graphics g, JComponent c) {
ChartCollection chartCollection = (ChartCollection) designer.getTarget().getChartCollection();
Chart editingChart = chartCollection.getSelectedChart();
BaseChartGlyph chartGlyph = null;
if (editingChart != null && editingChart.getPlot() != null) {
chartGlyph = editingChart.createGlyph(editingChart.defaultChartData());
}
int parentWidth = designer.getSize().width;
int parentHeight = designer.getSize().height;
int chartWidth = designer.getArea().getCustomWidth();
int chartHeight = designer.getArea().getCustomHeight();
Graphics clipg;
clipg = g.create(-designer.getArea().getHorizontalValue(), -designer.getArea().getVerticalValue(), parentWidth + designer.getArea().getHorizontalValue(), parentHeight + designer.getArea().getVerticalValue());
clipg = clipg.create(1, 1, designer.getArea().getCustomWidth(), designer.getArea().getCustomHeight());
g.setColor(Color.white);
g.fillRect(0, 0, chartWidth, chartHeight);
chartGlyph.setUseChangeChart(true);
Image chartImage = chartGlyph.toImage(chartWidth, chartHeight, ScreenResolution.getScreenResolution());
clipg.drawImage(chartImage, 0, 0, chartWidth, chartHeight, null);
paintChange(clipg, c);
}
//绘制切换的东西
private void paintChange(Graphics g, JComponent c) {
int chartWidth = designer.getArea().getCustomWidth();
ChartCollection collection = (ChartCollection) designer.getTarget().getChartCollection();
int chartCount = collection.getChartCount();
iconLocations = new Rectangle[chartCount];
int startX = chartWidth - V_GAP - ICON_SIZE;
if (chartCount == 1) {
//只有一个时,只绘制新增按钮,不绘制删除按钮
ADD.paintIcon(c, g, startX, H_GAP);
add = new Rectangle(startX, H_GAP, ICON_SIZE, ICON_SIZE);
del = null;
} else {
DEL.paintIcon(c, g, startX, H_GAP);
del = new Rectangle(startX, H_GAP, ICON_SIZE, ICON_SIZE);
startX -= (V_GAP + ICON_SIZE);
ADD.paintIcon(c, g, startX, H_GAP);
add = new Rectangle(startX, H_GAP, ICON_SIZE, ICON_SIZE);
}
for (int i = chartCount - 1; i >= 0; i--) {
Plot plot = collection.getChart(i).getPlot();
if (plot == null) {
continue;
}
if (collection.getSelectedIndex() == i) {
Icon ploticon = BaseUtils.readIcon(plot.getPlotSmallIconPath() + "_normal.png");
if (ploticon != null) {
startX -= (V_GAP + ICON_SIZE);
ploticon.paintIcon(c, g, startX, H_GAP);
}
}else if(overIndex == i){
Icon ploticon = BaseUtils.readIcon(plot.getPlotSmallIconPath() + "_over.png");
if (ploticon != null) {
startX -= (V_GAP + ICON_SIZE);
ploticon.paintIcon(c, g, startX, H_GAP);
}
} else {
Icon ploticon = BaseUtils.readIcon(plot.getPlotSmallIconPath() + "_gray.png");
if (ploticon != null) {
startX -= (V_GAP + ICON_SIZE);
ploticon.paintIcon(c, g, startX, H_GAP);
}
}
iconLocations[i] = new Rectangle(startX, H_GAP, ICON_SIZE, ICON_SIZE);
}
}
/**
* 鼠标点击
*
* @param e 事件
*/
public void mouseClicked(MouseEvent e) {
Point clikPoint = new Point(e.getPoint().x + designer.getArea().getHorizontalValue(), e.getPoint().y + designer.getArea().getVerticalValue());
ChartCollection collection = (ChartCollection) designer.getTarget().getChartCollection();
for (int i = 0; i < iconLocations.length; i++) {
if (iconLocations[i].contains(clikPoint)) {
if (i == collection.getSelectedIndex()) {
return;
}
collection.setSelectedIndex(i);
designer.repaint();
ChartDesignEditPane.getInstance().populateSelectedTabPane();
return;
}
}
if (add.contains(clikPoint)) {
Chart[] barChart = ColumnIndependentChart.columnChartTypes;
try {
Chart newChart = (Chart) barChart[0].clone();
int select = collection.getSelectedIndex();
collection.addNamedChartAtIndex(newChart.getTitle().getTextObject().toString(), newChart,select+1);
collection.setSelectedIndex(select+1);
ChartDesignEditPane.getInstance().populateSelectedTabPane();
} catch (CloneNotSupportedException e1) {
FRLogger.getLogger().error("Error in Clone");
}
designer.fireTargetModified();
ChartDesignEditPane.getInstance().populateSelectedTabPane();
return;
}
if (del != null && del.contains(clikPoint)) {
int selectedIndex = collection.getSelectedIndex();
collection.removeNameObject(selectedIndex);
if (selectedIndex > 0) {
collection.setSelectedIndex(selectedIndex - 1);
} else {
collection.setSelectedIndex(0);
}
designer.fireTargetModified();
ChartDesignEditPane.getInstance().populateSelectedTabPane();
}
}
/**
* 鼠标悬浮上时的数据点提示
*
* @param e 事件
*/
public void mouseMoved(MouseEvent e) {
Point clikPoint = new Point(e.getPoint().x + designer.getArea().getHorizontalValue(), e.getPoint().y + designer.getArea().getVerticalValue());
if (clikPoint.getY() < H_GAP || clikPoint.getY() > H_GAP + ICON_SIZE) {
ToolTip4Chart.getInstance().hideToolTip();
overIndex = -1;
return;
}
ChartCollection collection = (ChartCollection) designer.getTarget().getChartCollection();
for (int i = 0; i < iconLocations.length; i++) {
if (iconLocations[i].contains(clikPoint)) {
overIndex = i;
String chartName = collection.getChartName(i);
ToolTip4Chart.getInstance().showToolTip(chartName,e.getXOnScreen(),e.getYOnScreen());
return;
}
}
ToolTip4Chart.getInstance().hideToolTip();
overIndex = -1;
}
}

18
designer_chart/src/com/fr/design/mainframe/ChartPropertyPane.java

@ -3,26 +3,20 @@
*/
package com.fr.design.mainframe;
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.JComponent;
import javax.swing.SwingConstants;
import com.fr.design.gui.ilable.UILabel;
import javax.swing.*;
import java.awt.*;
public class ChartPropertyPane extends MiddleChartPropertyPane{
/**
* 创建图表属性表实例.
*/
private synchronized static ChartPropertyPane getInstance() {
if(singleton == null) {
singleton = new ChartPropertyPane();
}
singleton.setSureProperty();
//todo
//创建新图表时,创建属性表配置面板
singleton = new ChartPropertyPane();
return singleton;
}

558
designer_chart/src/com/fr/design/mainframe/ChartToolBarPane.java

@ -1,558 +0,0 @@
/*
* Copyright (c) 2001-2014,FineReport Inc, All Rights Reserved.
*/
package com.fr.design.mainframe;
import com.fr.base.ChartPreStyleManagerProvider;
import com.fr.base.ChartPreStyleServerManager;
import com.fr.base.background.ColorBackground;
import com.fr.chart.base.*;
import com.fr.chart.chartattr.*;
import com.fr.chart.chartglyph.ConditionAttr;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.icombobox.UIComboBox;
import com.fr.design.mainframe.chart.ChartDesignEditPane;
import com.fr.design.mainframe.chart.ChartEditPane;
import com.fr.design.mainframe.chart.gui.type.ColumnPlotPane4ToolBar;
import com.fr.design.mainframe.chart.gui.type.PlotPane4ToolBar;
import com.fr.general.FRFont;
import com.fr.general.Inter;
import com.fr.stable.Constants;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
/**
* Created by IntelliJ IDEA.
* Author : daisy
* Version: 6.5.6
* Date: 14-10-13
* Time: 下午8:32
*/
public class ChartToolBarPane extends JPanel {
public static final int TOTAL_HEIGHT = 42;
private static final int COM_HEIGHT = 22;
private static final int GAP = 7;
private static final int COM_GAP = 14;
private static final int COMBOX_WIDTH = 230;
private static final String[] CHOOSEITEM = new String[]{
Inter.getLocText("FR-Chart-Type_Column"),
Inter.getLocText("FR-Chart-Type_Line"),
Inter.getLocText("FR-Chart-Type_Bar"),
Inter.getLocText("FR-Chart-Type_Pie"),
Inter.getLocText("FR-Chart-Type_Area"),
Inter.getLocText("FR-Chart-Type_XYScatter"),
Inter.getLocText("FR-Chart-Chart_BubbleChart"),
Inter.getLocText("FR-Chart-Type_Radar"),
Inter.getLocText("FR-Chart-Type_Stock"),
Inter.getLocText("FR-Chart-Type_Meter"),
Inter.getLocText("FR-Chart-Type_Range"),
Inter.getLocText("FR-Chart-Type_Comb"),
Inter.getLocText("FR-Chart-Type_Gantt"),
Inter.getLocText("FR-Chart-Type_Donut"),
Inter.getLocText("FR-Chart-Map_Map"),
"gis"+Inter.getLocText("FR-Chart-Map_Map")
};
private UIComboBox chooseComboBox = new UIComboBox(CHOOSEITEM) {
public Dimension getPreferredSize() {
return new Dimension(COMBOX_WIDTH, COM_HEIGHT);
}
};
private JPanel stylePane;
private JPanel plotTypeComboBoxPane;
private UIButton topDownShade = new UIButton(Inter.getLocText("FR-Chart-Style_TopDownShade"));
private UIButton transparent = new UIButton(Inter.getLocText("FR-Chart-Style_Transparent"));
private UIButton plane3D = new UIButton(Inter.getLocText("FR-Chart-Style_Plane3D"));
private UIButton gradient = new UIButton(Inter.getLocText("FR-Chart-Style_GradientHighlight"));
private ItemListener itemListener = new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.DESELECTED) {
ChartToolBarPane.this.remove(centerPane);
ChartToolBarPane.this.remove(stylePane);
if(chooseComboBox.getSelectedIndex() < ChartTypeValueCollection.MAP.toInt()){
calSubChartTypesPane(chooseComboBox.getSelectedIndex());
ChartToolBarPane.this.add(subChartTypesPane,BorderLayout.CENTER);
centerPane = subChartTypesPane;
ChartToolBarPane.this.add(stylePane, BorderLayout.EAST);
} else{
calMapSubChartTypesPane(chooseComboBox.getSelectedIndex());
ChartToolBarPane.this.add(mapTypePane, BorderLayout.CENTER);
centerPane = mapTypePane;
}
ChartCollection chartCollection = (ChartCollection) chartDesigner.getTarget().getChartCollection();
Chart chart = chartCollection.getSelectedChart();
ChartToolBarPane.this.validate();
fireTypeChange();
if(chooseComboBox.getSelectedIndex() == ChartTypeValueCollection.MAP.toInt()){
mapTypePane.populateMapPane(((MapPlot) chart.getPlot()).getMapName());
}else if(chooseComboBox.getSelectedIndex() == ChartTypeValueCollection.GIS.toInt()){
mapTypePane.populateMapPane(chart.getChartName());
}
}
}
};
private PlotPane4ToolBar subChartTypesPane;//默认柱形图
private AbstractMapPlotPane4ToolBar mapTypePane;//地图类型选择的面板
private JPanel centerPane;
private ChartDesigner chartDesigner;
private int lastStyleIndex = -1;
private MouseAdapter styleListener = new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
ChartCollection chartCollection = (ChartCollection) chartDesigner.getTarget().getChartCollection();
Chart chart = chartCollection.getSelectedChart();
Plot newPlot;
int chartType =chart.getPlot().getPlotType().toInt();
if(chartType >= ChartTypeValueCollection.MAP.toInt()){
return;
}
newPlot = subChartTypesPane.setSelectedClonedPlotWithCondition(chart.getPlot());
chartDesigner.fireTargetModified();
UIButton button = (UIButton)e.getSource();
//如果是第二次选中,就是消除
if(button.isSelected()){
button.setSelected(false);
chart.setPlot(newPlot);
resetChart(chart);
lastStyleIndex = -1;
ChartDesignEditPane.getInstance().populateSelectedTabPane();
return;
}
clearStyleChoose();
setStyle(chart,e,newPlot);
lastStyleIndex = chart.getPlot().getPlotStyle();
}
};
private void setStyle( Chart chart,MouseEvent e,Plot newPlot){
if (e.getSource() == topDownShade) {
topDownShade.setSelected(true);
chart.setPlot(newPlot);
chart.getPlot().setPlotStyle(ChartConstants.STYLE_SHADE);
resetChart(chart);
createCondition4Shade(chart);
setPlotFillStyle(chart);
} else if (e.getSource() == transparent) {
transparent.setSelected(true);
chart.setPlot(newPlot);
chart.getPlot().setPlotStyle(ChartConstants.STYLE_TRANSPARENT);
resetChart(chart);
createCondition4Transparent(chart);
setPlotFillStyle(chart);
} else if (e.getSource() == plane3D) {
plane3D.setSelected(true);
chart.setPlot(newPlot);
chart.getPlot().setPlotStyle(ChartConstants.STYLE_3D);
resetChart(chart);
createCondition4Plane3D(chart);
setPlotFillStyle(chart);
} else if (e.getSource() == gradient) {
gradient.setSelected(true);
chart.setPlot(newPlot);
chart.getPlot().setPlotStyle(ChartConstants.STYLE_OUTER);
resetChart(chart);
createCondition4HighLight(chart);
setPlotFillStyle(chart);
}
chart.setStyleGlobal(true);
ChartEditPane pane = ChartDesignEditPane.getInstance();
pane.styleChange(true);
ChartDesignEditPane.getInstance().populate((ChartCollection)chartDesigner.getTarget().getChartCollection());
pane.styleChange(false);
}
public ChartToolBarPane(ChartDesigner designer) {
chartDesigner = designer;
subChartTypesPane = new ColumnPlotPane4ToolBar(designer);//默认柱形图
this.setLayout(new BorderLayout());
this.setBorder(new EmptyBorder(GAP, COM_GAP, GAP, 0));
plotTypeComboBoxPane = new JPanel();
plotTypeComboBoxPane.setBorder(new EmptyBorder(2, 0, 2, 0));
plotTypeComboBoxPane.setLayout(new BorderLayout());
plotTypeComboBoxPane.add(chooseComboBox, BorderLayout.CENTER);
chooseComboBox.addItemListener(itemListener);
//默认选择第一个
chooseComboBox.setSelectedIndex(0);
this.add(plotTypeComboBoxPane, BorderLayout.WEST);
initStylePane();
this.add(stylePane, BorderLayout.EAST);
this.add(subChartTypesPane, BorderLayout.CENTER);
this.centerPane = subChartTypesPane;
topDownShade.addMouseListener(styleListener);
transparent.addMouseListener(styleListener);
plane3D.addMouseListener(styleListener);
gradient.addMouseListener(styleListener);
}
private void initStylePane(){
stylePane = new JPanel() {
public Dimension getPreferredSize() {
Dimension size = super.getPreferredSize();
return new Dimension(size.width, COM_HEIGHT);
}
};
stylePane.setLayout(new FlowLayout(FlowLayout.LEFT, COM_GAP, 0));
stylePane.setBorder(new EmptyBorder(3, 0, 3, 0));
stylePane.add(topDownShade);
stylePane.add(transparent);
stylePane.add(plane3D);
stylePane.add(gradient);
}
/**
* 清除工具栏上面全局风格按钮的选中
*/
public void clearStyleChoose() {
topDownShade.setSelected(false);
transparent.setSelected(false);
plane3D.setSelected(false);
gradient.setSelected(false);
}
private void calMapSubChartTypesPane(int index){
ChartTypeValueCollection type = ChartTypeValueCollection.parse(index);
mapTypePane = PlotToolBarFactory.createToolBar4MapPlot(type,chartDesigner);
}
private void calSubChartTypesPane(int index) {
ChartTypeValueCollection type = ChartTypeValueCollection.parse(index);
subChartTypesPane = PlotToolBarFactory.createToolBar4NormalPlot(type,chartDesigner);
}
private void fireTypeChange() {
if(chooseComboBox.getSelectedIndex() < ChartTypeValueCollection.MAP.toInt()){
subChartTypesPane.fireChange();
}else{
mapTypePane.fireChange();
}
}
//图表区属性清空
private void resetChart(Chart chart) {
chart.setTitle(new Title(chart.getTitle().getTextObject()));
chart.setBorderStyle(Constants.LINE_NONE);
chart.setBorderColor(new Color(150, 150, 150));
chart.setBackground(null);
setPlotFillStyle(chart);
}
//高光渐变的默认属性设置
private void createCondition4HighLight(Chart chart) {
if (chart != null) {
//标题
Title title = new Title(chart.getTitle().getTextObject());
chart.setTitle(title);
title.setTitleVisible(true);
TextAttr textAttr = title.getTextAttr();
if (textAttr == null) {
textAttr = new TextAttr();
title.setTextAttr(textAttr);
}
title.setPosition(Constants.LEFT);
textAttr.setFRFont(FRFont.getInstance("Microsoft YaHei", Font.BOLD, 16f, new Color(51, 51, 51)));
//图例
Legend legend = new Legend();
legend.setFRFont(FRFont.getInstance("SimSun", Font.PLAIN, 9f, new Color(138, 140, 139)));
legend.setPosition(Constants.RIGHT_TOP);
chart.getPlot().setLegend(legend);
//分类轴,现在只有柱形图,条形图,面积图
if (chart.getPlot() instanceof CategoryPlot) {
CategoryPlot plot = (CategoryPlot) chart.getPlot();
//分类轴设置
Axis cateAxis = plot.getxAxis();
cateAxis.setAxisStyle(Constants.LINE_THICK);
cateAxis.setAxisColor(new Color(204, 220, 228));
cateAxis.setTickMarkType(Constants.TICK_MARK_INSIDE);
cateAxis.setSecTickMarkType(Constants.TICK_MARK_NONE);
cateAxis.setShowAxisLabel(true);
cateAxis.getTextAttr().setFRFont(FRFont.getInstance("Microsoft YaHei", Font.PLAIN, 10f, new Color(138, 140, 139)));
//值轴
Axis valueAxis = plot.getyAxis();
valueAxis.setAxisStyle(Constants.NONE);
valueAxis.setAxisColor(null);
valueAxis.setTickMarkType(Constants.TICK_MARK_INSIDE);
valueAxis.setSecTickMarkType(Constants.TICK_MARK_NONE);
valueAxis.setShowAxisLabel(true);
valueAxis.getTextAttr().setFRFont(FRFont.getInstance("SimSun", Font.PLAIN, 10f, new Color(138, 140, 139)));
//绘图区
plot.setBorderStyle(Constants.LINE_THIN);
plot.setBorderColor(new Color(204, 220, 228));
plot.setBackground(ColorBackground.getInstance(new Color(248, 247, 245)));
plot.getyAxis().setMainGridStyle(Constants.LINE_THIN);
plot.getyAxis().setMainGridColor(new Color(192, 192, 192));
}
}
}
//平面3D的默认属性设置
private void createCondition4Plane3D(Chart chart) {
if (chart != null) {
//标题
Title title = new Title(chart.getTitle().getTextObject());
chart.setTitle(title);
title.setTitleVisible(true);
TextAttr textAttr = title.getTextAttr();
if (textAttr == null) {
textAttr = new TextAttr();
title.setTextAttr(textAttr);
}
title.setPosition(Constants.CENTER);
textAttr.setFRFont(FRFont.getInstance("Microsoft YaHei", Font.PLAIN, 16f, new Color(51, 51, 51)));
//图例
Legend legend = new Legend();
legend.setFRFont(FRFont.getInstance("SimSun", Font.PLAIN, 9f, new Color(128, 128, 128)));
legend.setPosition(Constants.TOP);
chart.getPlot().setLegend(legend);
//分类轴,现在只有柱形图,条形图,面积图
if (chart.getPlot() instanceof CategoryPlot) {
CategoryPlot plot = (CategoryPlot) chart.getPlot();
//分类轴设置
Axis cateAxis = plot.getxAxis();
cateAxis.setAxisStyle(Constants.LINE_THICK);
cateAxis.setAxisColor(new Color(57, 57, 57));
cateAxis.setTickMarkType(Constants.TICK_MARK_NONE);
cateAxis.setSecTickMarkType(Constants.TICK_MARK_NONE);
cateAxis.setShowAxisLabel(true);
cateAxis.getTextAttr().setFRFont(FRFont.getInstance("Microsoft YaHei", Font.PLAIN, 10f, new Color(57, 57, 57)));
//值轴设置
Axis valueAxis = plot.getyAxis();
valueAxis.setAxisStyle(Constants.LINE_NONE);
valueAxis.setTickMarkType(Constants.TICK_MARK_NONE);
valueAxis.setSecTickMarkType(Constants.TICK_MARK_NONE);
valueAxis.setShowAxisLabel(false);
//绘图区
plot.getyAxis().setMainGridStyle(Constants.LINE_THIN);
plot.getyAxis().setMainGridColor(new Color(192, 192, 192));
chart.setBorderStyle(Constants.LINE_NONE);
//数据标签
ConditionAttr attrList = plot.getConditionCollection().getDefaultAttr();
DataSeriesCondition attr = attrList.getExisted(AttrContents.class);
if (attr != null) {
attrList.remove(attr);
}
AttrContents attrContents = new AttrContents();
attrContents.setPosition(Constants.OUTSIDE);
attrContents.setSeriesLabel(ChartConstants.VALUE_PARA);
attrContents.setTextAttr(new TextAttr(FRFont.getInstance("SimSun", Font.PLAIN, 9f, new Color(51, 51, 51))));
attrList.addDataSeriesCondition(attrContents);
}
}
}
//透明风格的默认属性设置
private void createCondition4Transparent(Chart chart) {
if (chart != null) {
//标题
Title title = new Title(chart.getTitle().getTextObject());
chart.setTitle(title);
title.setTitleVisible(true);
TextAttr textAttr = title.getTextAttr();
if (textAttr == null) {
textAttr = new TextAttr();
title.setTextAttr(textAttr);
}
title.setPosition(Constants.LEFT);
textAttr.setFRFont(FRFont.getInstance("Microsoft YaHei", Font.BOLD, 16f, new Color(192, 192, 192)));
//图例
Legend legend = new Legend();
legend.setFRFont(FRFont.getInstance("SimSun", Font.PLAIN, 9f, new Color(138, 140, 139)));
legend.setPosition(Constants.RIGHT_TOP);
chart.getPlot().setLegend(legend);
Plot plot = chart.getPlot();
//绘图区
chart.setBackground(ColorBackground.getInstance(new Color(51, 51, 51)));
//分类轴,现在只有柱形图,条形图,面积图
if (plot instanceof CategoryPlot) {
//边框
plot.setBorderStyle(Constants.LINE_THIN);
plot.setBorderColor(new Color(65, 65, 65));
//分类轴设置
Axis cateAxis = plot.getxAxis();
cateAxis.setAxisStyle(Constants.LINE_THICK);
cateAxis.setAxisColor(new Color(192, 192, 192));
cateAxis.setTickMarkType(Constants.TICK_MARK_NONE);
cateAxis.setSecTickMarkType(Constants.TICK_MARK_NONE);
cateAxis.setShowAxisLabel(true);
cateAxis.getTextAttr().setFRFont(FRFont.getInstance("Microsoft YaHei", Font.PLAIN, 10f, new Color(150, 150, 150)));
//值轴
Axis valueAxis = plot.getyAxis();
valueAxis.setShowAxisLabel(true);
valueAxis.setAxisStyle(Constants.LINE_NONE);
valueAxis.getTextAttr().setFRFont(FRFont.getInstance("SimSun", Font.PLAIN, 10f, new Color(150, 150, 150)));
valueAxis.setMainGridStyle(Constants.LINE_THIN);
valueAxis.setMainGridColor(new Color(63, 62, 62));
}
}
}
//渐变的默认属性设置
private void createCondition4Shade(Chart chart) {
if (chart != null) {
//标题
Title title = new Title(chart.getTitle().getTextObject());
chart.setTitle(title);
title.setTitleVisible(true);
TextAttr textAttr = title.getTextAttr();
if (textAttr == null) {
textAttr = new TextAttr();
title.setTextAttr(textAttr);
}
title.setPosition(Constants.CENTER);
textAttr.setFRFont(FRFont.getInstance("Microsoft YaHei", Font.BOLD, 16f, new Color(0, 51, 102)));
//图例
Legend legend = new Legend();
legend.setFRFont(FRFont.getInstance("SimSun", Font.PLAIN, 9f, new Color(128, 128, 128)));
legend.setPosition(Constants.BOTTOM);
chart.getPlot().setLegend(legend);
//分类轴,现在只有柱形图,条形图,面积图
if (chart.getPlot() instanceof CategoryPlot) {
CategoryPlot plot = (CategoryPlot) chart.getPlot();
//分类轴设置
Axis cateAxis = plot.getxAxis();
cateAxis.setAxisStyle(Constants.LINE_THICK);
cateAxis.setAxisColor(new Color(73, 100, 117));
cateAxis.setTickMarkType(Constants.TICK_MARK_NONE);
cateAxis.setSecTickMarkType(Constants.TICK_MARK_NONE);
cateAxis.setShowAxisLabel(true);
cateAxis.getTextAttr().setFRFont(FRFont.getInstance("Microsoft YaHei", Font.PLAIN, 10f, new Color(128, 128, 128)));
//值轴
Axis valueAxis = plot.getyAxis();
valueAxis.setShowAxisLabel(true);
valueAxis.getTextAttr().setFRFont(FRFont.getInstance("SimSun", Font.PLAIN, 10f, new Color(128, 128, 128)));
valueAxis.setAxisStyle(Constants.LINE_NONE);
//绘图区
plot.getyAxis().setMainGridStyle(Constants.LINE_THIN);
plot.getyAxis().setMainGridColor(new Color(192, 192, 192));
plot.setHorizontalIntervalBackgroundColor(new Color(243, 243, 243));
}
}
}
private void setPlotFillStyle(Chart chart) {
ChartPreStyleManagerProvider manager = ChartPreStyleServerManager.getProviderInstance();
Plot plot = chart.getPlot();
Object preStyle = null;
String name = "";
if (topDownShade.isSelected()) {
name = Inter.getLocText("FR-Chart-Style_Retro");
preStyle = manager.getPreStyle(name);
} else if (transparent.isSelected()) {
name = Inter.getLocText("FR-Chart-Style_Fresh");
preStyle = manager.getPreStyle(name);
} else if (plane3D.isSelected()) {
name = Inter.getLocText("FR-Chart-Style_Bright");
preStyle = manager.getPreStyle(name);
} else if (gradient.isSelected()) {
name = Inter.getLocText("FR-Chart-Style_Bright");
preStyle = manager.getPreStyle(name);
}else{
preStyle = null;
}
if (preStyle == null) {
plot.getPlotFillStyle().setColorStyle(ChartConstants.COLOR_DEFAULT);
} else {
AttrFillStyle fillStyle = ((ChartPreStyle) preStyle).getAttrFillStyle();
fillStyle.setFillStyleName(name);
plot.setPlotFillStyle(fillStyle);
}
}
public void populate(){
ChartCollection chartCollection = (ChartCollection) chartDesigner.getTarget().getChartCollection();
Chart chart = chartCollection.getSelectedChart();
chooseComboBox.removeItemListener(itemListener);
chooseComboBox.setSelectedIndex(chart.getPlot().getPlotType().toInt());
int chartType =chart.getPlot().getPlotType().toInt();
this.removeAll();
populateStyle();
this.add(plotTypeComboBoxPane, BorderLayout.WEST);
initStylePane();
if(chartType < ChartTypeValueCollection.MAP.toInt()){
calSubChartTypesPane(chartType);
subChartTypesPane.setSelectedIndex(chart.getPlot().getDetailType());
ChartToolBarPane.this.add(subChartTypesPane, BorderLayout.CENTER);
this.add(subChartTypesPane, BorderLayout.CENTER);
centerPane = subChartTypesPane;
this.add(stylePane, BorderLayout.EAST);
}else if(chartType == ChartTypeValueCollection.MAP.toInt()){
calMapSubChartTypesPane(chartType);
mapTypePane.populateMapPane(((MapPlot) chart.getPlot()).getMapName());
ChartToolBarPane.this.add(mapTypePane, BorderLayout.CENTER);
centerPane = mapTypePane;
}else{
calMapSubChartTypesPane(chartType);
mapTypePane.populateMapPane((chart.getPlot()).getPlotName());
ChartToolBarPane.this.add(mapTypePane, BorderLayout.CENTER);
centerPane = mapTypePane;
}
ChartToolBarPane.this.validate();
chooseComboBox.addItemListener(itemListener);
}
private void populateStyle() {
clearStyleChoose();
ChartCollection chartCollection = (ChartCollection) chartDesigner.getTarget().getChartCollection();
Chart chart = chartCollection.getSelectedChart();
int plotStyle = chart.getPlot().getPlotStyle();
switch (plotStyle) {
case ChartConstants.STYLE_SHADE:
topDownShade.setSelected(chart.isStyleGlobal() && true);
break;
case ChartConstants.STYLE_TRANSPARENT:
transparent.setSelected(chart.isStyleGlobal() && true);
break;
case ChartConstants.STYLE_3D:
plane3D.setSelected(chart.isStyleGlobal() && true);
break;
case ChartConstants.STYLE_OUTER:
gradient.setSelected(chart.isStyleGlobal() && true);
break;
default:
clearStyleChoose();
break;
}
lastStyleIndex = plotStyle;
}
}

98
designer_chart/src/com/fr/design/mainframe/DesignerFrame4Chart.java

@ -1,98 +0,0 @@
package com.fr.design.mainframe;
import com.fr.design.ChartEnvManager;
import com.fr.design.dialog.BasicDialog;
import com.fr.design.mainframe.actions.UpdateVersion;
import com.fr.design.mainframe.chart.UpdateOnLinePane;
import com.fr.design.mainframe.toolbar.ToolBarMenuDock;
import com.fr.general.ComparatorUtils;
import com.fr.general.FRLogger;
import com.fr.json.JSONObject;
import com.fr.stable.ProductConstants;
import com.fr.stable.StableUtils;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.util.ArrayList;
/**
* Created by IntelliJ IDEA.
* Author : daisy
* Version: 7.1.1
*/
public class DesignerFrame4Chart extends DesignerFrame {
/**
* Constructor.
*
* @param ad
*/
public DesignerFrame4Chart(ToolBarMenuDock ad) {
super(ad);
}
protected ArrayList<WindowListener> getFrameListeners(){
ArrayList<WindowListener> listeners = super.getFrameListeners();
listeners.add(0, new WindowAdapter() {
@Override
public void windowOpened(WindowEvent e) {
super.windowOpened(e);
judgeFirstUseWhenStart();
}
});
return listeners;
}
/**
* 退出
*/
public void exit() {
ChartEnvManager.getEnvManager().saveXMLFile();
super.exit();
}
//不需要西侧的文件树面板
protected void laoyoutWestPane(){
}
protected void judgeFirstUseWhenStart(){
boolean isNeed2Check =ChartEnvManager.getEnvManager().isPushUpdateAuto() || ChartEnvManager.getEnvManager().isOverOneMonth();
if(!StableUtils.checkDesignerActive(ChartEnvManager.getEnvManager().getActivationKey())
|| isNeed2Check){
ChartEnvManager.getEnvManager().setActivationKey(ChartEnvManager.ACTIVE_KEY);
checkVersion();
if(ChartEnvManager.getEnvManager().isOverOneMonth()){
ChartEnvManager.getEnvManager().resetCheckDate();
}
}
}
private void checkVersion(){
new UpdateVersion(){
protected void done() {
try {
JSONObject serverVersion = get();
String version = serverVersion.getString(UpdateVersion.VERSION);
if(!ComparatorUtils.equals(ProductConstants.RELEASE_VERSION, version)){
UpdateOnLinePane updateOnLinePane = new UpdateOnLinePane(version);
BasicDialog dg = updateOnLinePane.showWindow4UpdateOnline(DesignerContext.getDesignerFrame());
updateOnLinePane.setParentDialog(dg);
dg.setVisible(true);
}
}catch (Exception e){
FRLogger.getLogger().error(e.getMessage());
}
}
}.execute();
}
}

203
designer_chart/src/com/fr/design/mainframe/GisMapPlotPane4ToolBar.java

@ -1,203 +0,0 @@
package com.fr.design.mainframe;
import com.fr.chart.base.ChartConstants;
import com.fr.chart.chartattr.*;
import com.fr.chart.charttypes.GisMapIndependentChart;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.itextfield.UITextField;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
import com.fr.general.FRLogger;
import com.fr.general.Inter;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import java.awt.*;
/**
* Created by IntelliJ IDEA.
* Author : daisy
* Version: 7.1.1
* Date: 14/12/1
* Time: 下午3:11
*/
public class GisMapPlotPane4ToolBar extends AbstractMapPlotPane4ToolBar {
private static final int BAIDU = 0;
private static final int GOOGLE= 1;
private static final String[] TYPE_NAMES = new String[]{
Inter.getLocText("FR-Chart-Map_Baidu"),
Inter.getLocText("FR-Chart-Map_Google")};
private UITextField keyField = new UITextField(){
public Dimension getPreferredSize() {
return new Dimension(COMBOX_WIDTH, COM_HEIGHT);
}
};
private DocumentListener keyListener = new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
fireKeyChange();
}
@Override
public void removeUpdate(DocumentEvent e) {
fireKeyChange();
}
@Override
public void changedUpdate(DocumentEvent e) {
fireKeyChange();
}
} ;
private void fireKeyChange(){
ChartCollection chartCollection = (ChartCollection)chartDesigner.getTarget().getChartCollection();
Chart chart =chartCollection.getSelectedChart();
GisMapPlot plot =(GisMapPlot) chart.getPlot();
String key = this.keyField.getText().trim();
if(plot.isGisType() && key != plot.getBaiduKey()){
plot.setBaiduKey(key);
}else if(!plot.isGisType() && key != plot.getGoogleKey()){
plot.setGoogleKey(key);
}
chartDesigner.fireTargetModified();
}
public GisMapPlotPane4ToolBar(final ChartDesigner chartDesigner){
super(chartDesigner);
this.add(getKeyPane());
keyField.getDocument().addDocumentListener(keyListener);
}
private JPanel getKeyPane(){
double p = TableLayout.PREFERRED;
double f = TableLayout.FILL;
double[] columnSize = {p,f};
double[] rowSize = {p};
Component[][] components = new Component[][]{
new Component[]{new UILabel("key"),keyField},
};
return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize);
}
protected void calculateDetailMaps(int mapType){
switch (mapType) {
case BAIDU:
populateDetilMaps(Inter.getLocText("FR-Chart-Map_Baidu"));
break;
case GOOGLE:
populateDetilMaps(Inter.getLocText("FR-Chart-Map_Google"));
break;
default:
populateDetilMaps(Inter.getLocText("FR-Chart-Map_Baidu"));
}
fireMapChange();
}
/**
* 更新地图面板
* @param mapType 地图名字
*/
public void populateMapPane(String mapType){
super.populateMapPane(mapType);
populateDetilMaps(mapTypeComboBox.getSelectedItem().toString());
}
protected void populateDetilMaps(String mapType){
mapTypeComboBox.removeItemListener(mapTypeListener);
ChartCollection chartCollection = (ChartCollection)chartDesigner.getTarget().getChartCollection();
Chart chart =chartCollection.getSelectedChart();
GisMapPlot plot = (GisMapPlot) chart.getPlot();
keyField.getDocument().removeDocumentListener(keyListener);
if(plot.isGisType()){
keyField.setText(plot.getBaiduKey());
mapTypeComboBox.setSelectedIndex(0);
}else{
keyField.setText(plot.getGoogleKey());
mapTypeComboBox.setSelectedIndex(1);
}
keyField.getDocument().addDocumentListener(keyListener);
mapTypeComboBox.addItemListener(mapTypeListener);
}
private void fireMapChange(){
ChartCollection chartCollection = (ChartCollection)chartDesigner.getTarget().getChartCollection();
Chart chart =chartCollection.getSelectedChart();
if(chart.getPlot().getPlotStyle() != ChartConstants.STYLE_NONE){
resetChart(chart);
}
Chart[] cs = GisMapIndependentChart.gisChartTypes;
GisMapPlot plot;
if (cs.length > 0) {
try {
plot = (GisMapPlot)cs[0].getPlot().clone();
} catch (Exception e) {
plot = new GisMapPlot();
}
} else {
plot = new GisMapPlot();
}
try {
chart.switchPlot((Plot)plot.clone());
} catch (CloneNotSupportedException e) {
FRLogger.getLogger().error("Error In GisChart");
chart.switchPlot(new GisMapPlot());
}
plot = (GisMapPlot) chart.getPlot();
boolean index = plot.isGisType();
plot.setGisType(mapTypeComboBox.getSelectedIndex() == 1);
if(index != plot.isGisType()){
if(plot.isGisType()){
this.keyField.setText(plot.getBaiduKey());
}else{
this.keyField.setText(plot.getGoogleKey());
}
}else{
String key = this.keyField.getText().trim();
if(plot.isGisType() && key != plot.getBaiduKey()){
plot.setBaiduKey(key);
}else if(!plot.isGisType() && key != plot.getGoogleKey()){
plot.setGoogleKey(key);
}
}
chartDesigner.fireTargetModified();
}
protected Plot getSelectedClonedPlot() {
Chart[] mapChart = GisMapIndependentChart.gisChartTypes;
GisMapPlot newPlot;
if (mapChart.length > 0) {
try {
newPlot = (GisMapPlot)mapChart[0].getPlot().clone();
} catch (Exception e) {
newPlot = new GisMapPlot();
}
} else {
newPlot = new GisMapPlot();
}
Plot cloned = null;
try {
cloned = (Plot) newPlot.clone();
} catch (CloneNotSupportedException e) {
FRLogger.getLogger().error("Error In GisMapChart");
}
return cloned;
}
public String[] getMapTypes(){
return TYPE_NAMES;
}
}

339
designer_chart/src/com/fr/design/mainframe/MapArrayPane.java

@ -1,339 +0,0 @@
package com.fr.design.mainframe;
import com.fr.chart.base.MapSvgAttr;
import com.fr.chart.base.MapSvgXMLHelper;
import com.fr.design.DesignerEnvManager;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.gui.controlpane.*;
import com.fr.design.gui.icombobox.UIComboBox;
import com.fr.design.gui.ilist.JNameEdList;
import com.fr.design.gui.ilist.ListModelElement;
import com.fr.general.ComparatorUtils;
import com.fr.general.FRLogger;
import com.fr.general.Inter;
import com.fr.stable.CoreConstants;
import com.fr.stable.Nameable;
import com.fr.stable.StringUtils;
import com.fr.stable.core.PropertyChangeAdapter;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Created by IntelliJ IDEA.
* Author : daisy
* Version: 7.1.1
* Date: 14/12/3
* Time: 上午10:00
*/
public class MapArrayPane extends JListControlPane {
private static final int LEFT_WIDTH = 180;
private static final Color LINE_COLOR = new Color(176, 176, 176);
private static final int TOP_GAP = 5;
private static final String[] TYPE_NAMES = new String[]{
Inter.getLocText("FR-Chart-World_Map"),
Inter.getLocText("FR-Chart-State_Map"),
Inter.getLocText("FR-Chart-Province_Map"),
Inter.getLocText("FR-Chart-Custom_Map")};
private String mapType;
private String mapDetailName;
MapPlotPane4ToolBar toolBar;
UIComboBox mapTypeBox;
private ArrayList<String> editedNames = new ArrayList<String>();
private ItemListener typeListener = new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
MapArrayPane.this.updateBeans();
mapType = mapTypeBox.getSelectedItem().toString();
MapArrayPane.this.populate(MapSvgXMLHelper.getInstance().getAllMapObjects4Cate(mapType));
}
};
private ArrayList<String> removeNames = new ArrayList<String>();
private MapEditPane mapEditPane;
private ChartDesigner chartDesigner;
public MapArrayPane(String mapType, String mapDetailName,ChartDesigner chartDesigner) {
this.mapDetailName = mapDetailName;
this.mapType = mapType;
if (mapTypeBox != null) {
mapTypeBox.setSelectedItem(mapType);
}
this.chartDesigner = chartDesigner;
mapTypeBox.addItemListener(typeListener);
this.setBorder(new EmptyBorder(TOP_GAP, 0, 0, 0));
this.addEditingListner(new PropertyChangeAdapter() {
public void propertyChange() {
dealPropertyChange();
}
});
}
public void setToolBarPane(MapPlotPane4ToolBar pane) {
this.toolBar = pane;
}
protected void doWhenPopulate(BasicBeanPane beanPane) {
mapEditPane = (MapEditPane)beanPane;
mapEditPane.dealWidthMap(mapType);
String editingName = ((MapEditPane)beanPane).getCurrentMapName();
if(!editedNames.contains(editingName)){
editedNames.add(editingName);
}
}
protected JPanel getLeftPane() {
JPanel centerPane = super.getLeftPane();
mapTypeBox = new UIComboBox(TYPE_NAMES);
JPanel leftPane = new JPanel();
leftPane.setLayout(new BorderLayout());
leftPane.setBorder(new EmptyBorder(3, 0, 0, 0));
leftPane.add(mapTypeBox, BorderLayout.NORTH);
leftPane.add(centerPane, BorderLayout.CENTER);
return leftPane;
}
private void dealPropertyChange() {
MapSvgXMLHelper helper = MapSvgXMLHelper.getInstance();
java.util.List nameList =helper.getNamesListWithCateName(mapType);
String[] allListNames = nameableList.getAllNames();
allListNames[nameableList.getSelectedIndex()] = StringUtils.EMPTY;
String tempName = getEditingName();
if (StringUtils.isEmpty(tempName)) {
String[] warning = new String[]{"NOT_NULL_Des", "Please_Rename"};
String[] sign = new String[]{",", "!"};
nameableList.stopEditing();
JOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(MapArrayPane.this), Inter.getLocText(warning, sign));
setWarnigText(editingIndex);
return;
}
if (!ComparatorUtils.equals(tempName, selectedName)
&& isNameRepeted(new List[]{nameList, Arrays.asList(allListNames)}, tempName)) {
nameableList.stopEditing();
JOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(MapArrayPane.this),
Inter.getLocText(new String[]{"FR-Chart-Map_NameAlreadyExist", "Please_Rename"}, new String[]{",", "!"}));
setWarnigText(editingIndex);
return;
}
String oldname = mapEditPane.getCurrentMapName();
mapEditPane.setCurrentMapName(tempName);
mapEditPane.dealWidthMap(mapType);
if(editedNames.contains(oldname)){
editedNames.remove(oldname);
editedNames.add(tempName);
}
if(helper.getNewMapAttr(oldname) != null){
MapSvgAttr attr = helper.getNewMapAttr(oldname);
attr.renameMap(tempName);
helper.removeNewMapAttr(oldname);
helper.addNewSvgMaps(tempName,attr);
}
this.toolBar.fireTargetModified();
this.saveMapInfo(tempName);
}
protected void doAfterRemove(){
for(String map2Remove : removeNames){
MapSvgXMLHelper.getInstance().removeMapAttr(map2Remove);
MapSvgXMLHelper.getInstance().removeNewMapAttr(map2Remove);
}
update4AllType();
}
protected void doBeforeRemove(){
removeNames.clear();
for(int index : nameableList.getSelectedIndices()){
removeNames.add(nameableList.getNameAt(index));
}
}
//保存修改过的地图信息
private void saveMapInfo(final String mapName) {
SwingWorker worker = new SwingWorker<Integer, Void>() {
@Override
protected Integer doInBackground() throws Exception {
MapSvgAttr attr = MapSvgXMLHelper.getInstance().getMapAttr(mapName);// 只有在编辑地图时才需要储存相关数据 @kuns
if (attr != null) {
attr.writeBack(mapName);
}
return 0;
}
@Override
protected void done() {
FRLogger.getLogger().info(Inter.getLocText("FR-Chart-Map_Saved")); // 地图已经保存.
}
};
worker.execute();
DesignerEnvManager.addWorkers(worker);
}
private void update4AllType() {
MapSvgXMLHelper helper = MapSvgXMLHelper.getInstance();
helper.clearNames4Cate(mapType);
for(String name : nameableList.getAllNames()){
MapSvgAttr attr = helper.getMapAttr(name);
if(attr == null){
continue;
}
helper.addCateNames(attr.getMapType(),attr.getName());
}
}
/**
* 创建菜单
*
* @return 菜单
*/
public NameableCreator[] createNameableCreators() {
return new NameableCreator[]{
new NameableSelfCreator(Inter.getLocText("FR-Chart-Custom_Map"), MapSvgAttr.class, MapEditPane.class) {
public MapSvgAttr createNameable(UnrepeatedNameHelper helper) {
MapSvgAttr attr = new MapSvgAttr();
attr.setFilePath(MapSvgXMLHelper.customMapPath() + CoreConstants.SEPARATOR + helper.createUnrepeatedName(Inter.getLocText("FR-Chart-Custom_Map")) + ".svg");
MapSvgXMLHelper.getInstance().addNewSvgMaps(attr.getName(), attr);
update4Edited(attr.getName());
// 返回参数设置面板.
return attr;
}
@Override
public String createTooltip() {
return null;
}
public void saveUpdatedBean(ListModelElement wrapper, Object bean) {
wrapper.wrapper = (Nameable)bean;
}
}
};
}
protected boolean isCreatorNeedIocn() {
return false;
}
protected ShortCut4JControlPane[] createShortcuts() {
return new ShortCut4JControlPane[]{
addItemShortCut(),
removeItemShortCut(),
};
}
protected int getLeftPreferredSize() {
return LEFT_WIDTH;
}
@Override
protected String title4PopupWindow() {
return Inter.getLocText(new String[]{"FR-Chart-Map_Map", "FR-Chart-Data_Edit"});
}
/**
* 更新
*/
public void updateBeans() {
super.update();
this.update4AllType();
this.updateAllEditedAttrMaps();
MapSvgXMLHelper.getInstance().clearTempAttrMaps();
//versionID递增
this.toolBar.fireTargetModified();
this.saveMapInfo(selectedName);
}
/**
* 创建list
* @return 返回list
*/
public JNameEdList createJNameList() {
JNameEdList nameEdList = new JNameEdList(new DefaultListModel()) {
public Rectangle createRect(Rectangle rect, int iconWidth) {
return rect;
}
protected void doAfterLostFocus() {
MapArrayPane.this.updateControlUpdatePane();
}
public void setNameAt(String name, int index) {
super.setNameAt(name,index);
update4Edited(name);
}
};
nameEdList.setCellRenderer(new NameableListCellRenderer());
return nameEdList;
}
protected void update4Edited(String editingName){
}
private void updateAllEditedAttrMaps(){
MapSvgXMLHelper helper = MapSvgXMLHelper.getInstance();
for(String editedName : editedNames){
if(helper.getMapAttr(editedName)!=null){
helper.getMapAttr(editedName).writeBack(editedName);
}else if(helper.getNewMapAttr(editedName)!=null){
helper.getNewMapAttr(editedName).writeBack(editedName);
}
}
}
//根据地图的名字返回地图的图片
private Image getMapImage(String mapName) {
if (MapSvgXMLHelper.getInstance().containsMapName(mapName)) {
MapSvgAttr mapAttr = MapSvgXMLHelper.getInstance().getMapAttr(mapName);
if (mapAttr == null) {
return null;
}
return mapAttr.getMapImage();
}
return null;
}
/*
* Nameable的ListCellRenerer
*/
private class NameableListCellRenderer extends
DefaultListCellRenderer {
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
super.getListCellRendererComponent(list, value, index, isSelected,
cellHasFocus);
if (value instanceof ListModelElement) {
Nameable wrappee = ((ListModelElement) value).wrapper;
this.setText(((ListModelElement) value).wrapper.getName());
for (NameableCreator creator : MapArrayPane.this.creators()) {
if (creator.menuIcon() != null && creator.acceptObject2Populate(wrappee) != null) {
this.setIcon(creator.menuIcon());
this.setToolTipText(creator.createTooltip());
break;
}
}
}
return this;
}
}
}

210
designer_chart/src/com/fr/design/mainframe/MapPlotPane4ToolBar.java

@ -1,210 +0,0 @@
package com.fr.design.mainframe;
import com.fr.chart.base.MapSvgXMLHelper;
import com.fr.chart.chartattr.*;
import com.fr.design.dialog.BasicDialog;
import com.fr.design.dialog.DialogActionAdapter;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.icombobox.UIComboBox;
import com.fr.design.mainframe.chart.ChartDesignEditPane;
import com.fr.general.ComparatorUtils;
import com.fr.general.Inter;
import com.fr.stable.StringUtils;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
/**
* Created by IntelliJ IDEA.
* Author : daisy
* Version: 7.1.1
* Date: 14/12/1
* Time: 上午11:57
*/
public class MapPlotPane4ToolBar extends AbstractMapPlotPane4ToolBar{
private static final int WORLD_MAP = 0;
private static final int STATE_MAP = 1;
private static final int PROVINCE_MAP = 2;
private static final int CUSTOM_MAP = 3;
private static final int BUTTON_WIDTH = 44;
private static final String[] TYPE_NAMES = new String[]{
Inter.getLocText("FR-Chart-World_Map"),
Inter.getLocText("FR-Chart-State_Map"),
Inter.getLocText("FR-Chart-Province_Map"),
Inter.getLocText("FR-Chart-Custom_Map")};
private String lastEditingName =StringUtils.EMPTY;
private UIButton mapEditButton = new UIButton(Inter.getLocText("FR-Chart-Data_Edit")){
public Dimension getPreferredSize() {
return new Dimension(BUTTON_WIDTH, COM_HEIGHT);
}
};
protected UIComboBox detailMaps = new UIComboBox(){
public Dimension getPreferredSize() {
return new Dimension(COMBOX_WIDTH, COM_HEIGHT);
}
};
private ItemListener detailListener = new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
fireMapChange();
}
};
private ActionListener mapEditListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String selectedName =StringUtils.EMPTY;
if(detailMaps.getSelectedItem() != null){
selectedName = detailMaps.getSelectedItem().toString();
}
final MapArrayPane mapArrayPane = new MapArrayPane(mapTypeComboBox.getSelectedItem().toString(),selectedName,chartDesigner){
public void updateBeans() {
super.updateBeans();
if(reCalculateDetailsMaps(mapTypeComboBox.getSelectedItem().toString(),lastEditingName) ||
ComparatorUtils.equals(StringUtils.EMPTY,lastEditingName)){
detailMaps.setSelectedItem(lastEditingName);
ChartCollection chartCollection = (ChartCollection)chartDesigner.getTarget().getChartCollection();
com.fr.chart.chartattr.Chart chart =chartCollection.getSelectedChart();
if(chart.getPlot().isMapPlot()){
MapPlot mapPlot = (MapPlot) chart.getPlot();
mapPlot.setMapName(lastEditingName);
}
}
}
protected void update4Edited(String editingName){
lastEditingName = editingName;
}
};
BasicDialog mapArrayDialog = mapArrayPane.showWindow4ChartMapArray(DesignerContext.getDesignerFrame(),
new DialogActionAdapter() {
@Override
public void doOk() {
mapArrayPane.updateBeans();
}
});
mapArrayDialog.setModal(true);
mapArrayPane.setToolBarPane(MapPlotPane4ToolBar.this);
mapArrayPane.populate(MapSvgXMLHelper.getInstance().getAllMapObjects4Cate(mapTypeComboBox.getSelectedItem().toString()));
if(detailMaps.getSelectedItem() != null){
mapArrayPane.setSelectedName(detailMaps.getSelectedItem().toString());
}
mapArrayDialog.setVisible(true);
}
};
public MapPlotPane4ToolBar(ChartDesigner chartDesigner){
super(chartDesigner);
this.add(detailMaps);
detailMaps.addItemListener(detailListener);
mapEditButton.addActionListener(mapEditListener);
this.add(mapEditButton);
}
/**
* 更新地图面板
* @param mapType 地图名字
*/
public void populateMapPane(String mapType){
super.populateMapPane(mapType);
populateDetilMaps(mapTypeComboBox.getSelectedItem().toString());
detailMaps.removeItemListener(detailListener);
detailMaps.setSelectedItem(mapType);
detailMaps.addItemListener(detailListener);
}
/**
* 触发地图改变
*/
public void fireMapChange(){
MapPlot plot = new MapPlot();
String selectedName = StringUtils.EMPTY;
if(detailMaps.getSelectedItem() !=null ){
selectedName = detailMaps.getSelectedItem().toString();
}
plot.setMapName(selectedName);// 名字问题
ChartCollection chartCollection = (ChartCollection)chartDesigner.getTarget().getChartCollection();
Chart chart =chartCollection.getSelectedChart();
chart.setPlot(plot);
ChartDesignEditPane.getInstance().populate(chartCollection);
chartDesigner.fireTargetModified();
}
//默认选中国家地图
protected void calculateDetailMaps(int mapType){
switch (mapType) {
case WORLD_MAP:
populateDetilMaps(Inter.getLocText("FR-Chart-World_Map"));
break;
case STATE_MAP:
populateDetilMaps(Inter.getLocText("FR-Chart-State_Map"));
break;
case PROVINCE_MAP:
populateDetilMaps(Inter.getLocText("FR-Chart-Province_Map"));
break;
case CUSTOM_MAP:
populateDetilMaps(Inter.getLocText("FR-Chart-Custom_Map"));
break;
default:
populateDetilMaps(Inter.getLocText("FR-Chart-State_Map"));
}
fireMapChange();
}
private boolean reCalculateDetailsMaps(String mapType ,String detailMap){
detailMaps.removeItemListener(detailListener);
detailMaps.removeAllItems();
java.util.List list = MapSvgXMLHelper.getInstance().getNamesListWithCateName(mapType);
boolean isContains = false;
for (Object name : list) {
detailMaps.addItem(name);
if(ComparatorUtils.equals(detailMap,name)){
isContains = true;
}
}
detailMaps.addItemListener(detailListener);
return isContains;
}
protected void populateDetilMaps(String mapType){
detailMaps.removeItemListener(detailListener);
detailMaps.removeAllItems();
java.util.List list = MapSvgXMLHelper.getInstance().getNamesListWithCateName(mapType);
for (Object name : list) {
detailMaps.addItem(name);
}
detailMaps.addItemListener(detailListener);
if(detailMaps.getSelectedItem() != null){
lastEditingName = detailMaps.getSelectedItem().toString();
}
}
protected Plot getSelectedClonedPlot() {
MapPlot mapPlot = new MapPlot();
populateDetilMaps(Inter.getLocText("FR-Chart-State_Map"));
if(detailMaps.getSelectedItem()!= null && !StringUtils.isEmpty(detailMaps.getSelectedItem().toString())){
mapPlot.setMapName(detailMaps.getSelectedItem().toString());
}
return mapPlot;
}
public String[] getMapTypes(){
return TYPE_NAMES;
}
}

19
designer_chart/src/com/fr/design/mainframe/MiddleChartPropertyPane.java

@ -3,14 +3,10 @@
*/
package com.fr.design.mainframe;
import java.awt.BorderLayout;
import javax.swing.Icon;
import javax.swing.JComponent;
import com.fr.base.BaseUtils;
import com.fr.base.chart.BaseChartCollection;
import com.fr.chart.chartattr.ChartCollection;
import com.fr.design.ChartTypeInterfaceManager;
import com.fr.design.designer.TargetComponent;
import com.fr.design.gui.chart.BaseChartPropertyPane;
import com.fr.design.gui.chart.ChartEditPaneProvider;
@ -19,7 +15,9 @@ import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.itabpane.TitleChangeListener;
import com.fr.design.mainframe.chart.ChartEditPane;
import com.fr.general.Inter;
import com.fr.stable.StableUtils;
import javax.swing.*;
import java.awt.*;
public abstract class MiddleChartPropertyPane extends BaseChartPropertyPane{
@ -38,10 +36,13 @@ public abstract class MiddleChartPropertyPane extends BaseChartPropertyPane{
createNameLabel();
this.add(createNorthComponent(), BorderLayout.NORTH);
chartEditPane = StableUtils.construct(ChartEditPane.class);
}
public void addChartEditPane(String plotID){
chartEditPane = ChartTypeInterfaceManager.getInstance().getChartEditPane(plotID);
chartEditPane.setSupportCellData(true);
this.createMainPane();
setSureProperty();
}
protected abstract void createNameLabel();
@ -86,6 +87,8 @@ public abstract class MiddleChartPropertyPane extends BaseChartPropertyPane{
* @param ePane 面板
*/
public void populateChartPropertyPane(ChartCollection collection, TargetComponent<?> ePane) {
addChartEditPane(collection.getSelectedChart().getPlot().getPlotID());
setSupportCellData(true);
this.container.setEPane(ePane);
chartEditPane.populate(collection);
}

90
designer_chart/src/com/fr/design/mainframe/PlotToolBarFactory.java

@ -1,90 +0,0 @@
package com.fr.design.mainframe;
import com.fr.chart.base.ChartTypeValueCollection;
import com.fr.design.mainframe.chart.gui.type.*;
import com.fr.general.FRLogger;
import java.lang.reflect.Constructor;
import java.util.HashMap;
/**
* Created by IntelliJ IDEA.
* Author : daisy
* Version: 7.1.1
* 图表设计器工具栏面板的工厂类
*/
public class PlotToolBarFactory {
private static HashMap<ChartTypeValueCollection,Class<? extends PlotPane4ToolBar>> panes4NormalPlot =
new HashMap<ChartTypeValueCollection, Class<? extends PlotPane4ToolBar>>();
private static HashMap<ChartTypeValueCollection,Class<? extends AbstractMapPlotPane4ToolBar>> panes4MapPlot =
new HashMap<ChartTypeValueCollection, Class<? extends AbstractMapPlotPane4ToolBar>>();
static {
panes4NormalPlot.put(ChartTypeValueCollection.COLUMN, ColumnPlotPane4ToolBar.class);
panes4NormalPlot.put(ChartTypeValueCollection.LINE, LinePlotPane4ToolBar.class);
panes4NormalPlot.put(ChartTypeValueCollection.BAR, BarPlotPane4ToolBar.class);
panes4NormalPlot.put(ChartTypeValueCollection.PIE, PiePlotPane4ToolBar.class);
panes4NormalPlot.put(ChartTypeValueCollection.AREA,AreaPlotPane4ToolBar.class);
panes4NormalPlot.put(ChartTypeValueCollection.XYSCATTER,XYSCatterPlotPane4ToolBar.class);
panes4NormalPlot.put(ChartTypeValueCollection.BUBBLE,BubblePlotPane4ToolBar.class);
panes4NormalPlot.put(ChartTypeValueCollection.RADAR,RadarPlotPane4ToolBar.class);
panes4NormalPlot.put(ChartTypeValueCollection.STOCK,StockPlotPane4ToolBar.class);
panes4NormalPlot.put(ChartTypeValueCollection.METER,MeterPlotPane4ToolBar.class);
panes4NormalPlot.put(ChartTypeValueCollection.RANGE,RangePlotPane4ToolBar.class);
panes4NormalPlot.put(ChartTypeValueCollection.COMB,CustomPlotPane4ToolBar.class);
panes4NormalPlot.put(ChartTypeValueCollection.GANTT,GanttPlotPane4ToolBar.class);
panes4NormalPlot.put(ChartTypeValueCollection.DONUT,DonutPlotPane4ToolBar.class);
panes4MapPlot.put(ChartTypeValueCollection.MAP,MapPlotPane4ToolBar.class);
panes4MapPlot.put(ChartTypeValueCollection.GIS,GisMapPlotPane4ToolBar.class);
}
private PlotToolBarFactory(){
}
/**
* 为了地图和gis以外的图表类型创建工具栏
* @param type 图表类型
* @param chartDesigner 图表设计器
* @return 工具栏
*/
public static PlotPane4ToolBar createToolBar4NormalPlot(ChartTypeValueCollection type,ChartDesigner chartDesigner){
if(!panes4NormalPlot.containsKey(type)){
return new ColumnPlotPane4ToolBar(chartDesigner);
}
try {
Class<? extends PlotPane4ToolBar> cls = panes4NormalPlot.get(type);
Constructor<? extends PlotPane4ToolBar > constructor = cls.getConstructor(ChartDesigner.class);
return constructor.newInstance(chartDesigner);
}catch (Exception e){
FRLogger.getLogger().error(e.getMessage());
return new ColumnPlotPane4ToolBar(chartDesigner);
}
}
/**
*为地图和gis创建工具栏
* @param type 类型
* @param chartDesigner 图表设计器
* @return 工具栏
*/
public static AbstractMapPlotPane4ToolBar createToolBar4MapPlot(ChartTypeValueCollection type,ChartDesigner chartDesigner){
if(!panes4MapPlot.containsKey(type)){
return new MapPlotPane4ToolBar(chartDesigner);
}
try {
Class<? extends AbstractMapPlotPane4ToolBar> cls = panes4MapPlot.get(type);
Constructor<? extends AbstractMapPlotPane4ToolBar > constructor = cls.getConstructor(ChartDesigner.class);
return constructor.newInstance(chartDesigner);
}catch (Exception e){
FRLogger.getLogger().error(e.getMessage());
return new MapPlotPane4ToolBar(chartDesigner);
}
}
}

91
designer_chart/src/com/fr/design/mainframe/ToolTip4Chart.java

@ -1,91 +0,0 @@
package com.fr.design.mainframe;
import com.fr.base.GraphHelper;
import com.fr.base.background.ColorBackground;
import com.fr.stable.CoreConstants;
import javax.swing.*;
import java.awt.*;
import java.awt.geom.Dimension2D;
import java.awt.geom.RoundRectangle2D;
/**
* Created by IntelliJ IDEA.
* Author : daisy
* Version: 6.5.6
* Date: 14-10-25
* Time: 下午4:11
*/
public class ToolTip4Chart extends JWindow {
private static ToolTip4Chart instance = new ToolTip4Chart();
private static final int HGAP = 5;
private static final int VGAP = 3;
private static final int FONT_SIZE = 12;
private ToolTipStringPane stringPane;
private Font font = new Font("Dialog", Font.PLAIN, FONT_SIZE);
public ToolTip4Chart() {
stringPane = new ToolTipStringPane();
this.getContentPane().add(stringPane);
}
public static ToolTip4Chart getInstance() {
if (instance == null) {
instance = new ToolTip4Chart();
}
return instance;
}
/**
* 现实提示信息
*
* @param toolTip 提示信息
* @param xAbs 绝对位置x
* @param yAbs 绝对位置Y
*/
public void showToolTip(String toolTip, int xAbs, int yAbs) {
stringPane.text = toolTip.trim();
Dimension2D dim = GraphHelper.stringDimensionWithRotation(toolTip, font, 0, CoreConstants.DEFAULT_FRC);
this.setSize(new Dimension((int) dim.getWidth() + HGAP * 2, (int) dim.getHeight() + VGAP * 2));
stringPane.setPreferredSize(new Dimension((int) dim.getWidth(), (int) dim.getHeight()));
if (!this.isVisible()) {
this.setVisible(true);
if (xAbs + this.getWidth() > Toolkit.getDefaultToolkit().getScreenSize().width) {
xAbs -= this.getWidth();
}
this.setLocation(xAbs, yAbs+HGAP*2);
}
}
/**
* 隐藏弹出框
*/
public void hideToolTip() {
this.setVisible(false);
}
private class ToolTipStringPane extends JPanel {
String text;
public ToolTipStringPane() {
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (!isOpaque()) {
return;
}
g.setFont(font);
Rectangle r = new Rectangle(0, 0, this.getWidth(), this.getHeight());
ColorBackground background = ColorBackground.getInstance(Color.white);
background.paint(g, new RoundRectangle2D.Double(r.getX(), r.getY(), r.getWidth(), r.getHeight(), HGAP, HGAP));
Graphics2D g2d = (Graphics2D) g;
g2d.drawString(text, HGAP, this.getHeight() - HGAP);
}
}
}

170
designer_chart/src/com/fr/design/mainframe/actions/ChartDownLoadWorker.java

@ -1,170 +0,0 @@
package com.fr.design.mainframe.actions;
import com.fr.design.file.HistoryTemplateListPane;
import com.fr.design.file.SaveSomeTemplatePane;
import com.fr.design.mainframe.DesignerContext;
import com.fr.general.ComparatorUtils;
import com.fr.general.FRLogger;
import com.fr.json.JSONObject;
import com.fr.stable.StableUtils;
import com.fr.stable.StringUtils;
import javax.swing.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
/**
* Created by IntelliJ IDEA.
* Author : daisy
* Version: 7.1.1
*/
public class ChartDownLoadWorker extends SwingWorker<Void, Double>{
private static final String FILE_PATH = "http://chart.finedevelop.com/update/";
private static final String VERSION = "version";
private static final String TEMP = "_temp";
private static final int BYTE = 153600;
private static final int FILE_BYTE = 1024;
private HashMap<String,String> files = new HashMap<String, String>();
public ChartDownLoadWorker() {
}
private void loadFilesPaths() throws Exception {
files.clear();
final String installHome = StableUtils.getInstallHome();
JSONObject serverVersion = UpdateVersion.getJsonContent();
if(serverVersion == null){
return;
}
Iterator<String> keys = serverVersion.keys();
while (keys.hasNext()){
String jarName = keys.next();
if(!ComparatorUtils.equals(jarName, VERSION)){
String filePath = (String) serverVersion.get(jarName);
String path =installHome + filePath.substring(2);
files.put(jarName,path);
}
}
files.isEmpty();
}
@Override
protected Void doInBackground() throws Exception {
try {
loadFilesPaths();
Set key = files.keySet();
Iterator iterator = key.iterator();
int totalSize = 0;
//先得到所有的长度,方便计算百分比
while (iterator.hasNext()) {
String jarName = (String) iterator.next();
String jarUrl = FILE_PATH + jarName;
URL url = new URL(jarUrl);
URLConnection connection = url.openConnection();
totalSize += connection.getContentLength();
}
int totalBytesRead = 0;
iterator = key.iterator();
while (iterator.hasNext()) {
String jarName = (String) iterator.next();
String jarUrl = FILE_PATH + jarName;
URL url = new URL(jarUrl);
InputStream reader = url.openStream();
String filePath = files.get(jarName);
int point = filePath.lastIndexOf(".");
//先写临时文件,防止更新一半意外中止
String tmpFilePath = filePath.substring(0,point)+TEMP+filePath.substring(point);
FileOutputStream writer = new FileOutputStream(tmpFilePath);
byte[] buffer = new byte[BYTE];
int bytesRead = 0;
while ((bytesRead = reader.read(buffer)) > 0) {
writer.write(buffer, 0, bytesRead);
buffer = new byte[BYTE];
totalBytesRead += bytesRead;
publish(totalBytesRead/(double)totalSize);
}
}
} catch (Exception e) {
throw new Exception("Update Failed !" + e.getMessage());
}
return null;
}
//替换更新下来的临时文件
protected void replaceFiles(){
try {
Set key = files.keySet();
Iterator iterator = key.iterator();
while (iterator.hasNext()) {
String jarName = (String) iterator.next();
String filePath = files.get(jarName);
int point = filePath.lastIndexOf(".");
//先写临时文件,防止更新一半意外中止
String tmpFilePath = filePath.substring(0,point)+TEMP+filePath.substring(point);
FileInputStream inputStream = new FileInputStream(tmpFilePath);
FileOutputStream writer = new FileOutputStream(filePath);
byte[] buffer = new byte[FILE_BYTE];
int bytesRead = 0;
while ((bytesRead = inputStream.read(buffer))>0){
writer.write(buffer,0,bytesRead);
buffer = new byte[FILE_BYTE];
}
writer.flush();
writer.close();
inputStream.close();
}
} catch (Exception e) {
FRLogger.getLogger().error(e.getMessage());
}
}
/**
* 完成时的动作
*/
public void done() {
//检测是否没有保存的模版
SaveSomeTemplatePane saveSomeTempaltePane = new SaveSomeTemplatePane(true);
// 只有一个文件未保存时
if (HistoryTemplateListPane.getInstance().getHistoryCount() == 1) {
int choose = saveSomeTempaltePane.saveLastOneTemplate();
if (choose != JOptionPane.CANCEL_OPTION) {
restartChartDesigner();
}
} else {
if (saveSomeTempaltePane.showSavePane()) {
restartChartDesigner();
}
}
}
private void restartChartDesigner(){
String installHome = StableUtils.getInstallHome();
if(StringUtils.isEmpty(installHome) || ComparatorUtils.equals(".",installHome)){
DesignerContext.getDesignerFrame().exit();
return;
}
try {
String path = installHome + File.separator + "bin" + File.separator + "restart.bat";
ProcessBuilder builder = new ProcessBuilder(path,installHome);
builder.start();
DesignerContext.getDesignerFrame().exit();
}catch (Exception e){
FRLogger.getLogger().error(e.getMessage());
}
}
}

51
designer_chart/src/com/fr/design/mainframe/actions/ChartFeedBackAciton.java

@ -1,51 +0,0 @@
package com.fr.design.mainframe.actions;
import com.fr.design.actions.help.FeedBackAction;
import com.fr.design.actions.help.FeedBackPane;
import com.fr.design.constants.LayoutConstants;
import com.fr.design.dialog.BasicDialog;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
import com.fr.design.mainframe.DesignerContext;
import com.fr.design.mainframe.DesignerFrame;
import com.fr.general.Inter;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
/**
* Created by IntelliJ IDEA.
* Author : daisy
* Version: 7.1.1
*/
public class ChartFeedBackAciton extends FeedBackAction{
/**
* 动作
* @param e 事件
*/
public void actionPerformed(ActionEvent e) {
final DesignerFrame designerFrame = DesignerContext.getDesignerFrame();
ChartFeedBackPane feedBackPane = new ChartFeedBackPane();
BasicDialog basicDialog =feedBackPane.showWindow(designerFrame,false);
feedBackPane.setFeedbackDialog(basicDialog);
basicDialog.setVisible(true);
}
private class ChartFeedBackPane extends FeedBackPane{
protected JPanel getContactPane() {
double f = TableLayout.FILL;
double p = TableLayout.PREFERRED;
Component[][] components = new Component[][]{
new Component[]{new UILabel(Inter.getLocText("email") + ":", SwingConstants.RIGHT), email},
new Component[]{new UILabel(Inter.getLocText("mobile_number") + ":", SwingConstants.RIGHT), phone}
};
double[] rowSize = {p, p, p};
double[] columnSize = {p, p};
int[][] rowCount = {{1, 1}, {1, 1}, {1, 1}};
return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM);
}
}
}

25
designer_chart/src/com/fr/design/mainframe/actions/ChartUpdateAction.java

@ -1,25 +0,0 @@
package com.fr.design.mainframe.actions;
import com.fr.design.actions.UpdateAction;
import java.awt.event.ActionEvent;
/**
* @author : richie
* @since : 8.0
*/
public class ChartUpdateAction extends UpdateAction {
private static final String DOWNLOAD_DESIGNER="";
private static final String DOWNLOAD_CHART="";
private static final String DOWNLOAD_THIRD="";
public ChartUpdateAction() {
}
@Override
public void actionPerformed(ActionEvent e) {
}
}

56
designer_chart/src/com/fr/design/mainframe/actions/ChartWebAction.java

@ -1,56 +0,0 @@
package com.fr.design.mainframe.actions;
import com.fr.base.BaseUtils;
import com.fr.design.actions.UpdateAction;
import com.fr.design.menu.MenuKeySet;
import com.fr.general.Inter;
import com.fr.start.StartServer;
import javax.swing.*;
import java.awt.event.ActionEvent;
/**
* 图表设计器得产品演示
* Created by IntelliJ IDEA.
* Author : daisy
* Version: 6.5.6
* Date: 14-10-27
* Time: 下午9:01
*/
public class ChartWebAction extends UpdateAction {
public ChartWebAction() {
this.setMenuKeySet(getSelfMenuKeySet());
this.setName(getMenuKeySet().getMenuName());
this.setMnemonic(getMenuKeySet().getMnemonic());
this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_help/demo.png"));
}
private MenuKeySet getSelfMenuKeySet(){
return new MenuKeySet() {
@Override
public char getMnemonic() {
return 'D';
}
@Override
public String getMenuName() {
return Inter.getLocText("FR-Chart-Product_Demo");
}
@Override
public KeyStroke getKeyStroke() {
return null;
}
};
}
/**
* 动作
* @param e 事件
*/
public void actionPerformed(ActionEvent e) {
StartServer.browerURLWithLocalEnv("http://www.vancharts.com/demo.html");
return;
}
}

35
designer_chart/src/com/fr/design/mainframe/actions/OpenChartAction.java

@ -1,35 +0,0 @@
package com.fr.design.mainframe.actions;
import com.fr.design.actions.file.OpenTemplateAction;
import com.fr.design.mainframe.DesignerContext;
import com.fr.file.FILE;
import com.fr.file.FILEChooserPane;
import com.fr.file.FILEChooserPane4Chart;
import java.awt.event.ActionEvent;
/**
* Created by IntelliJ IDEA.
* Author : daisy
* Version: 6.5.6
* Date: 14-10-20
* Time: 下午7:35
*/
public class OpenChartAction extends OpenTemplateAction {
/**
* 动作
* @param evt 事件
*/
public void actionPerformed(ActionEvent evt) {
FILEChooserPane fileChooser = FILEChooserPane4Chart.getInstance(true, true);
if (fileChooser.showOpenDialog(DesignerContext.getDesignerFrame(),".crt")
== FILEChooserPane.OK_OPTION) {
final FILE file = fileChooser.getSelectedFILE();
if (file == null) {//选择的文件不能是 null
return;
}
DesignerContext.getDesignerFrame().openTemplate(file);
}
}
}

74
designer_chart/src/com/fr/design/mainframe/actions/UpdateOnlineAction.java

@ -1,74 +0,0 @@
package com.fr.design.mainframe.actions;
import com.fr.design.ChartEnvManager;
import com.fr.design.actions.UpdateAction;
import com.fr.design.dialog.BasicDialog;
import com.fr.design.mainframe.DesignerContext;
import com.fr.design.mainframe.chart.UpdateOnLinePane;
import com.fr.design.menu.MenuKeySet;
import com.fr.general.FRLogger;
import com.fr.general.Inter;
import com.fr.json.JSONObject;
import com.fr.stable.ProductConstants;
import com.fr.stable.StringUtils;
import javax.swing.*;
import java.awt.event.ActionEvent;
/**
* Created by IntelliJ IDEA.
* Author : daisy
* Version: 7.1.1
* 图表设计器在线更新
*/
public class UpdateOnlineAction extends UpdateAction {
public UpdateOnlineAction() {
this.setMenuKeySet(getKeySet());
this.setName(getMenuKeySet().getMenuKeySetName() + "...");
this.setMnemonic(getMenuKeySet().getMnemonic());
}
private MenuKeySet getKeySet() {
return new MenuKeySet() {
@Override
public char getMnemonic() {
return 'U';
}
@Override
public String getMenuName() {
return Inter.getLocText("FR-Chart-Help_UpdateOnline");
}
@Override
public KeyStroke getKeyStroke() {
return null;
}
};
}
/**
*动作
* @param e 事件
*/
public void actionPerformed(ActionEvent e) {
new UpdateVersion(){
protected void done() {
try {
ChartEnvManager.getEnvManager().resetCheckDate();
JSONObject serverVersion = get();
String version = serverVersion.getString(UpdateVersion.VERSION);
UpdateOnLinePane updateOnLinePane = new UpdateOnLinePane(StringUtils.isEmpty(version)? ProductConstants.RELEASE_VERSION:version);
BasicDialog dg = updateOnLinePane.showWindow4UpdateOnline(DesignerContext.getDesignerFrame());
updateOnLinePane.setParentDialog(dg);
dg.setVisible(true);
}catch (Exception e){
FRLogger.getLogger().error(e.getMessage());
}
}
}.execute();
}
}

69
designer_chart/src/com/fr/design/mainframe/actions/UpdateVersion.java

@ -1,69 +0,0 @@
package com.fr.design.mainframe.actions;
import com.fr.general.FRLogger;
import com.fr.json.JSONObject;
import javax.swing.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
/**
* Created by IntelliJ IDEA.
* Author : daisy
* Version: 7.1.1
*/
public class UpdateVersion extends SwingWorker<JSONObject,Void> {
private static final String VERSION_URL ="http://chart.finedevelop.com/update/update.json";
private static final int TIME_OUT = 300;//5s
public static final String VERSION = "version";
public UpdateVersion(){
}
@Override
protected JSONObject doInBackground() throws Exception {
return getJsonContent();
}
public static JSONObject getJsonContent() throws Exception{
String res = null;
try {
res = readVersionFromServer(TIME_OUT);
} catch (IOException e) {
FRLogger.getLogger().error(e.getMessage());
}
return new JSONObject(res);
}
/**
* 从服务器读取版本
*/
private static String readVersionFromServer(int timeOut) throws IOException {
URL getUrl = new URL(VERSION_URL);
// 根据拼凑的URL,打开连接,URL.openConnection函数会根据URL的类型,
// 返回不同的URLConnection子类的对象,这里URL是一个http,因此实际返回的是HttpURLConnection
HttpURLConnection connection = (HttpURLConnection) getUrl
.openConnection();
connection.setReadTimeout(timeOut);
// 进行连接,但是实际上get request要在下一句的connection.getInputStream()函数中才会真正发到
// 服务器
connection.connect();
// 取得输入流,并使用Reader读取
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf8"));//设置编码,否则中文乱码
String lines;
StringBuffer sb = new StringBuffer();
while ((lines = reader.readLine()) != null) {
sb.append(lines);
}
reader.close();
// 断开连接
connection.disconnect();
return sb.toString();
}
}

55
designer_chart/src/com/fr/design/mainframe/chart/ChartDesignEditPane.java

@ -1,55 +0,0 @@
/*
* Copyright (c) 2001-2014,FineReport Inc, All Rights Reserved.
*/
package com.fr.design.mainframe.chart;
import com.fr.design.file.HistoryTemplateListPane;
import com.fr.design.mainframe.chart.gui.*;
import java.util.ArrayList;
/**
* Created by IntelliJ IDEA.
* Author : daisy
* Version: 6.5.6
* Date: 14-10-15
* Time: 下午5:47
*/
public class ChartDesignEditPane extends ChartEditPane {
private static ChartDesignEditPane instance;
private boolean isFromToolBar = false;
public synchronized static ChartEditPane getInstance() {
if (instance == null) {
instance = new ChartDesignEditPane();
}
return instance;
}
public ChartDesignEditPane() {
paneList = new ArrayList<AbstractChartAttrPane>();
dataPane4SupportCell = new ChartDesignerDataPane(listener);
paneList.add(dataPane4SupportCell);
paneList.add(new StylePane4Chart(listener, false));
paneList.add(new ChartDesignerOtherPane());
createTabsPane();
}
protected void dealWithStyleChange(){
if(!isFromToolBar){
HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().styleChange();
}
}
/**
*主要用于图表设计器判断样式改变是否来自工具栏的全局样式按钮
* @param isFromToolBar 是否来自工具栏
*/
public void styleChange(boolean isFromToolBar){
this.isFromToolBar = isFromToolBar;
}
}

2
designer_chart/src/com/fr/design/mainframe/chart/ChartEditPane.java

@ -51,7 +51,6 @@ public class ChartEditPane extends BasicPane implements AttributeChange,Prepare4
protected JPanel center;
private TargetComponentContainer container = null;
private TitleChangeListener titleChangeListener = null;
private Calendar lastTime;
protected ChartEditPane() {
@ -108,6 +107,7 @@ public class ChartEditPane extends BasicPane implements AttributeChange,Prepare4
}
AbstractChartAttrPane selectedPane = paneList.get(tabsHeaderIconPane.getSelectedIndex());
selectedPane.update(collection);
if (!ComparatorUtils.equals(collection, lastCollection)) {
//此处画图

39
designer_chart/src/com/fr/design/mainframe/chart/ChartsConfigPane.java

@ -0,0 +1,39 @@
package com.fr.design.mainframe.chart;
import com.fr.chart.chartattr.ChartCollection;
import com.fr.general.Inter;
import javax.swing.*;
/**
* Created by mengao on 2017/5/16.
*/
public class ChartsConfigPane extends AbstractChartAttrPane {
public final static String CHART_STYLE_TITLE = Inter.getLocText("Chart-Style_Name");
@Override
public void populate(ChartCollection collection) {
}
@Override
public void update(ChartCollection collection) {
}
@Override
protected JPanel createContentPane() {
return new JPanel();
}
@Override
public String getIconPath() {
return "com/fr/design/images/chart/ChartStyle.png";
}
@Override
public String title4PopupWindow() {
return CHART_STYLE_TITLE;
}
}

56
designer_chart/src/com/fr/design/mainframe/chart/ChartsEditPane.java

@ -0,0 +1,56 @@
package com.fr.design.mainframe.chart;
import com.fr.chart.chartattr.Chart;
import com.fr.design.ChartTypeInterfaceManager;
import com.fr.design.mainframe.chart.gui.ChartDataPane;
import java.awt.*;
import java.util.ArrayList;
/**
* Created by mengao on 2017/5/3.
*/
public class ChartsEditPane extends ChartEditPane {
protected ChartsConfigPane chartsConfigPane;
public ChartsEditPane() {
this.setLayout(new BorderLayout());
paneList = new ArrayList<AbstractChartAttrPane>();
dataPane4SupportCell = new ChartDataPane(listener);
dataPane4SupportCell.setSupportCellData(true);
chartsConfigPane = new ChartsConfigPane();
paneList.add(dataPane4SupportCell);
paneList.add(chartsConfigPane);
createTabsPane();
}
/**
* 重新构造面板
* @param currentChart 图表
*/
public void reLayout(Chart currentChart) {
if (currentChart != null) {
this.removeAll();
this.setLayout(new BorderLayout());
paneList = new ArrayList<AbstractChartAttrPane>();
String plotID = "";
if (currentChart.getPlot() != null) {
plotID = currentChart.getPlot().getPlotID();
}
dataPane4SupportCell = createChartDataPane(plotID);
chartsConfigPane = ChartTypeInterfaceManager.getInstance().getChartConfigPane(plotID);
paneList.add(dataPane4SupportCell);
paneList.add(chartsConfigPane);
createTabsPane();
}
}
}

238
designer_chart/src/com/fr/design/mainframe/chart/UpdateOnLinePane.java

@ -1,238 +0,0 @@
package com.fr.design.mainframe.chart;
import com.fr.design.ChartEnvManager;
import com.fr.design.dialog.BasicDialog;
import com.fr.design.dialog.BasicPane;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.icheckbox.UICheckBox;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.mainframe.actions.ChartDownLoadWorker;
import com.fr.general.ComparatorUtils;
import com.fr.general.Inter;
import com.fr.stable.ProductConstants;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.text.DecimalFormat;
import java.text.NumberFormat;
/**
* Created by IntelliJ IDEA.
* Author : daisy
* Version: 7.1.1
* 在线更新面板
*/
public class UpdateOnLinePane extends BasicPane{
private static final int GAP = 40;
private static final int H_GAP = 16;
private static final int SIDE_GAP =30;
private static final int RIGHT_BORDER_GAP = 34;
private static final Color LABEL_COLOR = new Color(114,114,114);
private static final int MESSAGE_FONT_SIZE = 20;
private static final int PUSH_FONT_SIZE = 12;
private static final int PROGRESS_WIDTH = 500;
private static final int PROGRESS_HEIGHT = 14;
private static final NumberFormat NUMBER_FORMAT = new DecimalFormat("##.##");
private static final int PRECENT =100;
private static final Color FOREGROUNG = new Color(23,190,86);
private static final Color BACKGROUND = new Color(210,210,210);
String serverVersion = ProductConstants.RELEASE_VERSION;
UIButton okButton = new UIButton(Inter.getLocText("FR-Chart-Dialog_OK"));
UIButton updateButton = new UIButton(Inter.getLocText("FR-Chart-App_Update"));
UIButton cancleButton = new UIButton(Inter.getLocText("FR-Chart-Dialog_Cancle"));
UICheckBox pushAuto = new UICheckBox(Inter.getLocText("FR-Chart-UpdateMessage_PushAuto"));
private JPanel messagePane;
private JPanel optionsPane;
private BasicDialog parentDialog;
private ChartDownLoadWorker downLoadWorker = null;
private boolean isUpdateCancle = false;
private ActionListener updateListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
final JProgressBar progressBar = init4UpdatingPane();
downLoadWorker = new ChartDownLoadWorker(){
protected void process(java.util.List<Double> v) {
progressBar.setValue((int)(v.get(v.size() - 1) * PRECENT));
}
public void done() {
try {
get();
} catch (Exception e1) {
init4UpdateFaild();
return;
}
if(!isUpdateCancle){
replaceFiles();
dialogExit();
super.done();
}
}
};
downLoadWorker.execute();
}
};
private ActionListener okListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dialogExit();
}
};
private ActionListener cancleListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(downLoadWorker !=null){
isUpdateCancle = true;
downLoadWorker.cancel(true);
}
dialogExit();
}
};
public void setParentDialog(BasicDialog dialog){
this.parentDialog = dialog;
}
public UpdateOnLinePane(String serverVersion){
this.serverVersion = serverVersion;
this.isUpdateCancle = false;
pushAuto.setSelected(ChartEnvManager.getEnvManager().isPushUpdateAuto());
pushAuto.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
ChartEnvManager.getEnvManager().setPushUpdateAuto(pushAuto.isSelected());
}
});
init4PanesLayout();
initListeners();
judge();
}
private void initListeners(){
updateButton.addActionListener(updateListener);
okButton.addActionListener(okListener);
cancleButton.addActionListener(cancleListener);
}
private void init4PanesLayout(){
this.setLayout(new BorderLayout());
this.messagePane = FRGUIPaneFactory.createBorderLayout_L_Pane();
this.optionsPane = new JPanel(new FlowLayout(FlowLayout.RIGHT,H_GAP ,0)) ;
this.optionsPane.setBorder(new EmptyBorder(0, 0, GAP, RIGHT_BORDER_GAP));
this.add(this.messagePane, BorderLayout.CENTER);
this.add(this.optionsPane, BorderLayout.SOUTH);
pushAuto.setFont(new Font(Inter.getLocText("FR-Designer-All_MSBold"), 0, PUSH_FONT_SIZE));
pushAuto.setForeground(LABEL_COLOR);
this.revalidate();
}
//更新失败的提示
private void init4UpdateFaild(){
this.messagePane.removeAll();
UILabel label = new UILabel(Inter.getLocText("FR-Chart-Version_UpdateFail")+"!");
label.setHorizontalAlignment(SwingConstants.CENTER);
label.setFont(new Font(Inter.getLocText("FR-Designer-All_MSBold"), 0, MESSAGE_FONT_SIZE));
label.setForeground(LABEL_COLOR);
this.messagePane.add(label,BorderLayout.CENTER);
optionsPane.removeAll();
optionsPane.add(okButton);
this.revalidate();
}
private JProgressBar init4UpdatingPane(){
this.messagePane.removeAll();
JPanel centerPane = new JPanel(new GridLayout(2,1));
UILabel label = new UILabel(Inter.getLocText("FR-Chart-App_UpdateProgress"));
label.setHorizontalAlignment(SwingConstants.CENTER);
label.setFont(new Font(Inter.getLocText("FR-Designer-All_MSBold"), 0, MESSAGE_FONT_SIZE));
label.setForeground(LABEL_COLOR);
label.setBorder(new EmptyBorder(PUSH_FONT_SIZE,0,0,0));
centerPane.add(label);
JProgressBar progressBar = new JProgressBar();
progressBar.setMaximum(PRECENT);
progressBar.setMinimum(0);
progressBar.setValue(0);
progressBar.setBorder(new EmptyBorder(MESSAGE_FONT_SIZE,SIDE_GAP,SIDE_GAP*2,SIDE_GAP));
centerPane.add(progressBar);
messagePane.add(centerPane,BorderLayout.CENTER);
optionsPane.removeAll();
optionsPane.add(cancleButton);
this.revalidate();
return progressBar;
}
private void init4VersionSamePane(){
this.messagePane.removeAll();
UILabel label = new UILabel(Inter.getLocText("FR-Chart-Versions_Lasted"));
label.setHorizontalAlignment(SwingConstants.CENTER);
label.setFont(new Font(Inter.getLocText("FR-Designer-All_MSBold"), 0, MESSAGE_FONT_SIZE));
label.setForeground(LABEL_COLOR);
this.messagePane.add(label,BorderLayout.CENTER);
optionsPane.removeAll();
optionsPane.add(pushAuto);
optionsPane.add(okButton);
this.revalidate();
}
private void init4VersionDifferentPane(){
this.messagePane.removeAll();
createPaneShowVersions();
optionsPane.removeAll();
optionsPane.add(pushAuto);
optionsPane.add(updateButton);
optionsPane.add(cancleButton);
this.revalidate();
}
private void createPaneShowVersions(){
JPanel centerPane = new JPanel(new GridLayout(2,1));
UILabel localLabel = new UILabel(Inter.getLocText("FR-Chart-Version_Local")+":"+ ProductConstants.RELEASE_VERSION);
localLabel.setFont(new Font(Inter.getLocText("FR-Designer-All_MSBold"), 0, MESSAGE_FONT_SIZE));
localLabel.setForeground(LABEL_COLOR);
localLabel.setBorder(new EmptyBorder(PUSH_FONT_SIZE,0,0,0));
UILabel serverLabel = new UILabel(Inter.getLocText("FR-Chart-Version_Lasted")+":"+serverVersion);
serverLabel.setFont(new Font(Inter.getLocText("FR-Designer-All_MSBold"), 0, MESSAGE_FONT_SIZE));
serverLabel.setForeground(LABEL_COLOR);
serverLabel.setBorder(new EmptyBorder(-MESSAGE_FONT_SIZE - PUSH_FONT_SIZE, 0, 0,0));
localLabel.setHorizontalAlignment(SwingConstants.CENTER);
serverLabel.setHorizontalAlignment(SwingConstants.CENTER);
centerPane.add(localLabel);
centerPane.add(serverLabel);
messagePane.add(centerPane,BorderLayout.CENTER);
}
private void judge(){
if(ComparatorUtils.equals(ProductConstants.RELEASE_VERSION,serverVersion)){
//版本一致,提示已经是最新版本
init4VersionSamePane();
}else{
init4VersionDifferentPane();
}
}
/**
* Dialog exit.
*/
private void dialogExit() {
parentDialog.setVisible(false);
parentDialog.dispose();
}
protected String title4PopupWindow() {
return Inter.getLocText("FR-Chart-Help_UpdateOnline");
}
}

2
designer_chart/src/com/fr/design/mainframe/chart/gui/ChartDataPane.java

@ -28,7 +28,7 @@ public class ChartDataPane extends AbstractChartAttrPane {
super();
this.listener = listener;
}
@Override
protected JPanel createContentPane() {
contentsPane = new NormalChartDataPane(listener, ChartDataPane.this);

71
designer_chart/src/com/fr/design/mainframe/chart/gui/ChartDesignerDataPane.java

@ -1,71 +0,0 @@
/*
* Copyright (c) 2001-2014,FineReport Inc, All Rights Reserved.
*/
package com.fr.design.mainframe.chart.gui;
import com.fr.chart.chartattr.ChartCollection;
import com.fr.chart.chartattr.GisMapPlot;
import com.fr.chart.chartattr.MapPlot;
import com.fr.design.chart.report.GisMapDataPane4Chart;
import com.fr.design.chart.report.MapDataPane4Chart;
import com.fr.design.gui.frpane.AttributeChangeListener;
import com.fr.design.mainframe.chart.gui.data.ImportSetChartDataPane;
import com.fr.general.FRLogger;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
/**
* Created by IntelliJ IDEA.
* Author : daisy
* Version: 6.5.6
* Date: 14-10-15
* Time: 下午1:57
*/
public class ChartDesignerDataPane extends ChartDataPane {
private AttributeChangeListener listener;
public ChartDesignerDataPane(AttributeChangeListener listener) {
super(listener);
this.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
FRLogger.getLogger().info("SD");
}
});
this.listener = listener;
}
@Override
protected JPanel createContentPane() {
contentsPane = new ImportSetChartDataPane(listener,ChartDesignerDataPane.this);
return contentsPane;
}
protected void repeatLayout(ChartCollection collection) {
if(contentsPane != null) {
this.remove(contentsPane);
}
this.setLayout(new BorderLayout(0, 0));
if (collection.getSelectedChart().getPlot() instanceof MapPlot) {
contentsPane = new MapDataPane4Chart(listener,this);
}else if(collection.getSelectedChart().getPlot() instanceof GisMapPlot){
contentsPane = new GisMapDataPane4Chart(listener,this);
} else{
contentsPane = new ImportSetChartDataPane(listener,ChartDesignerDataPane.this);
}
}
/**
* 主要用于图表设计器
* @return
*/
public boolean isNeedPresentPaneWhenFilterData(){
return true;
}
}

48
designer_chart/src/com/fr/design/mainframe/chart/gui/data/ChartDesignDataLoadPane.java

@ -1,48 +0,0 @@
package com.fr.design.mainframe.chart.gui.data;
import com.fr.base.TableData;
import com.fr.design.data.tabledata.wrapper.TableDataWrapper;
import com.fr.design.data.tabledata.wrapper.TemplateTableDataWrapper;
import com.fr.design.dialog.BasicPane;
import com.fr.design.mainframe.AbstractChartDataPane4Chart;
/**
* 图表设计器导入 界面
* Created by kunsnat on 14-10-21.
* kunsnat@gmail.com
*/
public abstract class ChartDesignDataLoadPane extends BasicPane {
private AbstractChartDataPane4Chart parentPane;
public ChartDesignDataLoadPane(AbstractChartDataPane4Chart parentPane){
this.parentPane = parentPane;
}
/**
* 加载数据集
*
* @param tableData 数据集
*/
public abstract void populateChartTableData(TableData tableData);
/**
* 根据界面 获取数据集相关.
*
* @return 返回数据集
*/
public abstract TableData getTableData();
protected abstract String getNamePrefix();
//响应属性事件
protected void fireChange() {
parentPane.fireTableDataChange();
}
public TableDataWrapper getTableDataWrapper(){
return new TemplateTableDataWrapper(getTableData());
}
}

124
designer_chart/src/com/fr/design/mainframe/chart/gui/data/EmbbeddDataPane.java

@ -1,124 +0,0 @@
/*
* Copyright (c) 2001-2014,FineReport Inc, All Rights Reserved.
*/
package com.fr.design.mainframe.chart.gui.data;
import com.fr.base.BaseUtils;
import com.fr.base.FRContext;
import com.fr.base.TableData;
import com.fr.design.constants.UIConstants;
import com.fr.data.impl.EmbeddedTableData;
import com.fr.design.data.tabledata.tabledatapane.EmbeddedTableDataPane;
import com.fr.design.data.tabledata.wrapper.TableDataWrapper;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.dialog.BasicDialog;
import com.fr.design.dialog.BasicPane;
import com.fr.design.dialog.DialogActionAdapter;
import com.fr.design.mainframe.AbstractChartDataPane4Chart;
import javax.swing.*;
import javax.swing.border.LineBorder;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
/**
* 图表设计器内置数据集面板
* Created by IntelliJ IDEA.
* Author : daisy
* Version: 6.5.6
* Date: 14-10-16
* Time: 上午12:09
*/
public class EmbbeddDataPane extends ChartDesignDataLoadPane {
private UIButton edit;
private UIButton reviewButton;
private EmbeddedTableData tableData;
public EmbbeddDataPane(AbstractChartDataPane4Chart parentPane) {
super(parentPane);
tableData = new EmbeddedTableData();
initEditButton();
initReviewButton();
this.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 3));
this.add(edit);
this.add(reviewButton);
}
private void initEditButton() {
edit = new UIButton(BaseUtils.readIcon("com/fr/design/images/control/edit.png"));
edit.setBorder(new LineBorder(UIConstants.LINE_COLOR));
edit.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
EmbeddedTableDataPane tableDataPane = new EmbeddedTableDataPane();
tableDataPane.populateBean(tableData);
dgEdit(tableDataPane, getNamePrefix());
}
});
}
private void initReviewButton() {
reviewButton = new UIButton(BaseUtils.readIcon("com/fr/design/images/data/search.png"));
reviewButton.setBorder(new LineBorder(UIConstants.LINE_COLOR));
reviewButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent e) {
//预览图表设计器内置数据集
TableDataWrapper tableDataWrappe = getTableDataWrapper();
if (tableDataWrappe != null) {
try {
tableDataWrappe.previewData();
} catch (Exception e1) {
FRContext.getLogger().error(e1.getMessage(), e1);
}
}
}
});
}
@Override
protected String title4PopupWindow() {
return null;
}
@Override
public TableData getTableData() {
return tableData;
}
/**
* 加载数据集
*
* @param tableData 数据集
*/
public void populateChartTableData(TableData tableData) {
if (tableData instanceof EmbeddedTableData) {
this.tableData =(EmbeddedTableData) tableData;
}
}
protected String getNamePrefix() {
return "Embedded";
}
/**
* 编辑面板
*
* @param uPanel 面板
* @param originalName 原始名字
*/
private void dgEdit(final EmbeddedTableDataPane uPanel, String originalName) {
final BasicPane.NamePane nPanel = uPanel.asNamePane();
nPanel.setObjectName(originalName);
final BasicDialog dg;
dg = nPanel.showLargeWindow(SwingUtilities.getWindowAncestor(EmbbeddDataPane.this), new DialogActionAdapter() {
public void doOk() {
tableData = uPanel.updateBean();
fireChange();
}
});
dg.setVisible(true);
}
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save