daniel 8 years ago
parent
commit
caf204d858
  1. 2
      .gitignore
  2. 9
      designer/designer.iml
  3. 13
      designer/src/com/fr/design/mainframe/CellElementPropertyPane.java
  4. 2
      designer/src/com/fr/design/mainframe/JWorkBook.java
  5. 52
      designer/src/com/fr/design/mainframe/cell/settingpane/CellOtherSetPane.java
  6. 14
      designer/src/com/fr/design/report/ReportColumnsPane.java
  7. 4
      designer/src/com/fr/design/report/mobile/MobileUseHtmlGroupPane.java
  8. 2
      designer/src/com/fr/design/report/mobile/ReportMobileAttrPane.java
  9. 22
      designer/src/com/fr/design/webattr/EditToolBar.java
  10. 4
      designer/src/com/fr/design/webattr/PageToolBarPane.java
  11. 14
      designer/src/com/fr/design/webattr/PageWebSettingPane.java
  12. 6
      designer/src/com/fr/design/webattr/ReportWebWidgetConstants.java
  13. 49
      designer/src/com/fr/design/webattr/ToolBarDragPane.java
  14. 6
      designer/src/com/fr/design/webattr/WriteToolBarPane.java
  15. 9
      designer/src/com/fr/design/webattr/WriteWebSettingPane.java
  16. 127
      designer/src/com/fr/design/widget/CellWidgetCardPane.java
  17. 2
      designer/src/com/fr/design/widget/ui/CustomWritableRepeatEditorPane.java
  18. 36
      designer/src/com/fr/design/widget/ui/FieldEditorDefinePane.java
  19. 6
      designer/src/com/fr/design/widget/ui/TextFieldEditorDefinePane.java
  20. 39
      designer/src/com/fr/design/widget/ui/btn/ButtonSytleDefinedPane.java
  21. 6
      designer/src/com/fr/grid/selection/CellSelection.java
  22. 6
      designer/src/com/fr/grid/selection/FloatSelection.java
  23. 2
      designer/src/com/fr/grid/selection/Selection.java
  24. 4
      designer/src/com/fr/poly/hanlder/BottomCornerMouseHanlder.java
  25. 38
      designer_base/src/com/fr/design/actions/community/VideoAction.java
  26. 62
      designer_base/src/com/fr/design/actions/file/LocalePane.java
  27. 25
      designer_base/src/com/fr/design/actions/help/AboutPane.java
  28. 10
      designer_base/src/com/fr/design/actions/help/TutorialAction.java
  29. 13
      designer_base/src/com/fr/design/beans/location/MoveUtils.java
  30. 2
      designer_base/src/com/fr/design/data/datapane/TableDataTreePane.java
  31. 8
      designer_base/src/com/fr/design/dialog/mobile/MobileUseHtmlGroupBeanPane.java
  32. 6
      designer_base/src/com/fr/design/editor/editor/DateEditor.java
  33. 2
      designer_base/src/com/fr/design/extra/PluginHelper.java
  34. 374
      designer_base/src/com/fr/design/formula/FormulaPane.java
  35. 51
      designer_base/src/com/fr/design/formula/FunctionConstants.java
  36. 2
      designer_base/src/com/fr/design/formula/FunctionDefNAD.java
  37. 14
      designer_base/src/com/fr/design/formula/FunctionManagerPane.java
  38. 3
      designer_base/src/com/fr/design/fun/ConnectionProvider.java
  39. 41
      designer_base/src/com/fr/design/fun/ExtraButtonToolBarProvider.java
  40. 2
      designer_base/src/com/fr/design/fun/HyperlinkProvider.java
  41. 19
      designer_base/src/com/fr/design/fun/impl/AbstractExtraButtonToolBarProvider.java
  42. 5
      designer_base/src/com/fr/design/gui/controlpane/JListControlPane.java
  43. 3
      designer_base/src/com/fr/design/gui/date/UIDatePicker.java
  44. 3
      designer_base/src/com/fr/design/gui/frpane/HyperlinkGroupPane.java
  45. 33
      designer_base/src/com/fr/design/gui/ibutton/UIButtonGroup.java
  46. 3
      designer_base/src/com/fr/design/gui/ibutton/UIColorButton.java
  47. 8
      designer_base/src/com/fr/design/gui/icombobox/UIComboBox.java
  48. 7
      designer_base/src/com/fr/design/gui/icontainer/UIResizableContainer.java
  49. 54
      designer_base/src/com/fr/design/gui/itable/AbstractPropertyTable.java
  50. 10
      designer_base/src/com/fr/design/gui/itable/PropertyGroup.java
  51. BIN
      designer_base/src/com/fr/design/images/reportcolumns/col_en.png
  52. BIN
      designer_base/src/com/fr/design/images/reportcolumns/row_en.png
  53. 65
      designer_base/src/com/fr/design/locale/designer.properties
  54. 148
      designer_base/src/com/fr/design/locale/designer_en_US.properties
  55. 149
      designer_base/src/com/fr/design/locale/designer_ja_JP.properties
  56. 65
      designer_base/src/com/fr/design/locale/designer_ko_KR.properties
  57. 64
      designer_base/src/com/fr/design/locale/designer_zh_CN.properties
  58. 116
      designer_base/src/com/fr/design/locale/designer_zh_TW.properties
  59. 3
      designer_base/src/com/fr/design/mainframe/DesignerFrame.java
  60. 2
      designer_base/src/com/fr/design/mainframe/DesignerFrameFileDealerPane.java
  61. 2
      designer_base/src/com/fr/design/mainframe/WestRegionContainerPane.java
  62. 15
      designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java
  63. 10
      designer_base/src/com/fr/design/present/dict/TableDataDictPane.java
  64. 2
      designer_base/src/com/fr/design/roleAuthority/RoleTree.java
  65. 8
      designer_base/src/com/fr/design/style/background/gradient/GradientBackgroundPane.java
  66. 7
      designer_base/src/com/fr/design/style/color/ColorPicker.java
  67. 1
      designer_base/src/com/fr/design/style/color/ColorSelectBox.java
  68. 226
      designer_base/src/com/fr/design/style/color/ColorSelectConfigManager.java
  69. 17
      designer_base/src/com/fr/design/style/color/ColorSelectConfigManagerProvider.java
  70. 25
      designer_base/src/com/fr/design/style/color/ColorSelectPane.java
  71. 23
      designer_base/src/com/fr/design/style/color/CustomChooserPanel.java
  72. 11
      designer_base/src/com/fr/design/style/color/NewColorSelectPane.java
  73. 50
      designer_base/src/com/fr/design/style/color/PickColorButtonFactory.java
  74. 39
      designer_base/src/com/fr/design/style/color/UsedColorPane.java
  75. 1
      designer_base/src/com/fr/design/widget/btn/ButtonWithHotkeysDetailPane.java
  76. 2
      designer_base/src/com/fr/design/write/submit/CustomJobPane.java
  77. 4
      designer_base/src/com/fr/env/RemoteEnv.java
  78. 2
      designer_base/src/com/fr/start/BaseDesigner.java
  79. 2
      designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java
  80. 2
      designer_chart/src/com/fr/design/chart/report/GisMapTableDataContentPane.java
  81. 2
      designer_chart/src/com/fr/design/chart/report/GisMapTableDataContentPane4Chart.java
  82. 4
      designer_chart/src/com/fr/design/chart/report/MapCubeLayerPane.java
  83. 7
      designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java
  84. 11
      designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypePane.java
  85. 12
      designer_chart/src/com/fr/design/mainframe/chart/gui/ColorSelectPaneWithOutTransparent.java
  86. 44
      designer_chart/src/com/fr/design/mainframe/chart/gui/UIEditLabel.java
  87. 2
      designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/BubblePlotTableDataContentPane.java
  88. 2
      designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/CategoryPlotTableDataContentPane.java
  89. 2
      designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/StockPlotTableDataContentPane.java
  90. 2
      designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/XYScatterPlotTableDataContentPane.java
  91. 16
      designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPane.java
  92. 2
      designer_form/build.dev.gradle
  93. 13
      designer_form/src/com/fr/design/designer/beans/ConnectorCreator.java
  94. 4
      designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java
  95. 296
      designer_form/src/com/fr/design/designer/beans/adapters/layout/FRBodyLayoutAdapter.java
  96. 8
      designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java
  97. 114
      designer_form/src/com/fr/design/designer/beans/adapters/layout/FRTabFitLayoutAdapter.java
  98. 8
      designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java
  99. 161
      designer_form/src/com/fr/design/designer/beans/location/Inner.java
  100. 7
      designer_form/src/com/fr/design/designer/creator/XChartEditor.java
  101. Some files were not shown because too many files have changed in this diff Show More

2
.gitignore vendored

@ -3,3 +3,5 @@ designer_base/bin
designer_chart/bin designer_chart/bin
designer_form/bin designer_form/bin
*.iml *.iml

9
designer/designer.iml

@ -1,13 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4"> <module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="false"> <component name="NewModuleRootManager" inherit-compiler-output="true">
<output url="file://$MODULE_DIR$/../../env/WebReport/WEB-INF/classes" /> <exclude-output />
<content url="file://$MODULE_DIR$"> <content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content> </content>
<orderEntry type="jdk" jdkName="jdk1.8" jdkType="JavaSDK" /> <orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module" module-name="designer_base" /> <orderEntry type="module" module-name="designer_base" />
<orderEntry type="library" name="lib" level="project" /> <orderEntry type="module" module-name="designer_form" />
<orderEntry type="module" module-name="designer_chart" />
</component> </component>
</module> </module>

13
designer/src/com/fr/design/mainframe/CellElementPropertyPane.java

@ -102,12 +102,23 @@ public class CellElementPropertyPane extends DockingView {
return element; return element;
} }
public void removeAll() {
this.remove(titlePane);
this.remove(cellElementEditPane);
}
public void reInit(ElementCasePane ePane) {
this.add(titlePane, BorderLayout.NORTH);
this.add(cellElementEditPane, BorderLayout.CENTER);
cellElementEditPane.populate(ePane);
}
public void populate(ElementCasePane ePane) { public void populate(ElementCasePane ePane) {
TemplateElementCase elementCase = ePane.getEditingElementCase(); TemplateElementCase elementCase = ePane.getEditingElementCase();
if (elementCase == null) { if (elementCase == null) {
return; return;
} }
cellElementEditPane.populate(ePane); ePane.getSelection().populatePropertyPane(ePane);
} }
@Override @Override

2
designer/src/com/fr/design/mainframe/JWorkBook.java

@ -463,7 +463,7 @@ public class JWorkBook extends JTemplate<WorkBook, WorkBookUndoState> {
*/ */
public ShortCut[] shortCuts4Authority() { public ShortCut[] shortCuts4Authority() {
return new ShortCut[]{ return new ShortCut[]{
new NameSeparator(Inter.getLocText(new String[]{"DashBoard-Potence", "Edit"})), new NameSeparator(Inter.getLocText("FR-Designer_Permissions_Edition")),
BaseUtils.isAuthorityEditing() ? new ExitAuthorityEditAction(this) : new AllowAuthorityEditAction(this), BaseUtils.isAuthorityEditing() ? new ExitAuthorityEditAction(this) : new AllowAuthorityEditAction(this),
}; };

52
designer/src/com/fr/design/mainframe/cell/settingpane/CellOtherSetPane.java

@ -3,7 +3,9 @@ package com.fr.design.mainframe.cell.settingpane;
import java.awt.*; import java.awt.*;
import java.awt.event.ItemEvent; import java.awt.event.ItemEvent;
import java.awt.event.ItemListener; import java.awt.event.ItemListener;
import java.util.Locale;
import com.fr.base.FRContext;
import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.file.HistoryTemplateListPane;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
@ -76,23 +78,23 @@ public class CellOtherSetPane extends AbstractCellAttrPane {
double p = TableLayout.PREFERRED; double p = TableLayout.PREFERRED;
double[] rowSize1 = {p, p, p, p, p, p, p}; double[] rowSize1 = {p, p, p, p, p, p, p};
double[] columnSize1 = {p, f}; double[] columnSize1 = {p, f};
UILabel autoAdjustLabel = new UILabel(Inter.getLocText("Auto_Adjust_Size") + ":", SwingConstants.RIGHT); UILabel autoAdjustLabel = new UILabel(Inter.getLocText("FR-Designer_Auto_Adjust_Size") + ":", SwingConstants.RIGHT);
autoAdjustLabel.setVerticalAlignment(UILabel.TOP); autoAdjustLabel.setVerticalAlignment(UILabel.TOP);
Component[][] components1 = new Component[][]{ Component[][] components1 = new Component[][]{
new Component[]{autoAdjustLabel, autoshrik}, new Component[]{autoAdjustLabel, autoshrik},
new Component[]{new UILabel(Inter.getLocText("Preview") + ":", SwingConstants.RIGHT), previewCellContent}, new Component[]{new UILabel(Inter.getLocText("FR-Designer_Preview") + ":", SwingConstants.RIGHT), previewCellContent},
new Component[]{new UILabel(Inter.getLocText("CellWrite-Print_Export") + ":", SwingConstants.RIGHT), printAndExportContent}, new Component[]{new UILabel(Inter.getLocText("CellWrite-Print_Export") + ":", SwingConstants.RIGHT), printAndExportContent},
new Component[]{null, printAndExportBackground}, new Component[]{null, printAndExportBackground},
new Component[]{new UILabel(Inter.getLocText("Show_Content") + ":", SwingConstants.RIGHT), showContent}, new Component[]{new UILabel(Inter.getLocText("FR-Designer_Show_Content") + ":", SwingConstants.RIGHT), showContent},
new Component[]{null, fileNamePane}, new Component[]{null, fileNamePane},
new Component[]{new UILabel(Inter.getLocText("CellWrite-ToolTip") + ":", SwingConstants.RIGHT), tooltipTextField}, new Component[]{new UILabel(Inter.getLocText("FR-Designer_CellWrite_ToolTip") + ":", SwingConstants.RIGHT), tooltipTextField},
}; };
JPanel northContentPane = TableLayoutHelper.createTableLayoutPane(components1, rowSize1, columnSize1); JPanel northContentPane = TableLayoutHelper.createTableLayoutPane(components1, rowSize1, columnSize1);
double[] rowSize2 = {p, p, p, p, p, p}; double[] rowSize2 = {p, p, p, p, p, p};
double[] columnSize2 = {p, f}; double[] columnSize2 = {p, f};
Component[][] components2 = new Component[][]{ Component[][] components2 = new Component[][]{
new Component[]{new JSeparator(JSeparator.HORIZONTAL), null}, new Component[]{new JSeparator(JSeparator.HORIZONTAL), null},
new Component[]{new UILabel(Inter.getLocText("Pagination")), null}, new Component[]{new UILabel(Inter.getLocText("FR-Designer_Pagination")), null},
new Component[]{pageBeforeRowCheckBox, pageAfterRowCheckBox}, new Component[]{pageBeforeRowCheckBox, pageAfterRowCheckBox},
new Component[]{pageBeforeColumnCheckBox, pageAfterColumnCheckBox}, new Component[]{pageBeforeColumnCheckBox, pageAfterColumnCheckBox},
new Component[]{canBreakOnPaginateCheckBox, null}, new Component[]{canBreakOnPaginateCheckBox, null},
@ -121,22 +123,28 @@ public class CellOtherSetPane extends AbstractCellAttrPane {
private JPanel createNormal() { private JPanel createNormal() {
String[] AjustRowTypes = new String[]{ String[] AjustRowTypes = new String[]{
Inter.getLocText("No"), Inter.getLocText("Utils-Row_Height"), Inter.getLocText("Utils-Column_Width"), Inter.getLocText("Default")}; Inter.getLocText("FR-Designer_No"), Inter.getLocText("Utils-Row_Height"), Inter.getLocText("Utils-Column_Width"), Inter.getLocText("FR-Designer_DEFAULT")};
autoshrik = new UIButtonGroup(AjustRowTypes); autoshrik = new UIButtonGroup(AjustRowTypes);
autoshrik.setTwoLine(); if (FRContext.getLocale().equals(Locale.US)) {
autoshrik.setLayout(new GridLayout(2, 2, 1, 1)); // 英文显示不全,故每行一个按钮
autoshrik.setFourLine();
autoshrik.setLayout(new GridLayout(4, 1, 1, 1));
} else {
autoshrik.setTwoLine();
autoshrik.setLayout(new GridLayout(2, 2, 1, 1));
}
previewCellContent = new UICheckBox(Inter.getLocText("CellWrite-Preview_Cell_Content")); previewCellContent = new UICheckBox(Inter.getLocText("CellWrite-Preview_Cell_Content"));
printAndExportContent = new UICheckBox(Inter.getLocText("CellWrite-Print_Content")); printAndExportContent = new UICheckBox(Inter.getLocText("CellWrite-Print_Content"));
printAndExportBackground = new UICheckBox(Inter.getLocText("CellWrite-Print_Background")); printAndExportBackground = new UICheckBox(Inter.getLocText("CellWrite-Print_Background"));
showContent = new UIComboBox(new String[]{Inter.getLocText("Default"), Inter.getLocText("CellWrite-Show_As_Image"), Inter.getLocText("CellWrite-Show_As_HTML"), showContent = new UIComboBox(new String[]{Inter.getLocText("FR-Designer_DEFAULT"), Inter.getLocText("CellWrite-Show_As_Image"), Inter.getLocText("CellWrite-Show_As_HTML"),
Inter.getLocText("ShowAsDownload")}); Inter.getLocText("FR-Designer_Show_As_Download")});
final CardLayout fileNameLayout = new CardLayout(); final CardLayout fileNameLayout = new CardLayout();
final JPanel fileNamePane = new JPanel(fileNameLayout); final JPanel fileNamePane = new JPanel(fileNameLayout);
JPanel fileNameCCPane = new JPanel(new BorderLayout(4, 0)); JPanel fileNameCCPane = new JPanel(new BorderLayout(4, 0));
fileNameCCPane.add(new UILabel(Inter.getLocText("FileNameForDownload")), BorderLayout.WEST); fileNameCCPane.add(new UILabel(Inter.getLocText("FR-Designer_File_Name_For_Download")), BorderLayout.WEST);
fileNameTextField = new UITextField(); fileNameTextField = new UITextField();
tooltipTextField = new UITextField(); tooltipTextField = new UITextField();
@ -186,13 +194,13 @@ public class CellOtherSetPane extends AbstractCellAttrPane {
} }
private void initAllNames() { private void initAllNames() {
autoshrik.setGlobalName(Inter.getLocText("Auto_Adjust_Size")); autoshrik.setGlobalName(Inter.getLocText("FR-Designer_Auto_Adjust_Size"));
previewCellContent.setGlobalName(Inter.getLocText("Preview")); previewCellContent.setGlobalName(Inter.getLocText("FR-Designer_Preview"));
printAndExportContent.setGlobalName(Inter.getLocText("CellWrite-Preview_Cell_Content")); printAndExportContent.setGlobalName(Inter.getLocText("CellWrite-Preview_Cell_Content"));
printAndExportBackground.setGlobalName(Inter.getLocText("CellWrite-Print_Background")); printAndExportBackground.setGlobalName(Inter.getLocText("CellWrite-Print_Background"));
showContent.setGlobalName(Inter.getLocText("Show_Content")); showContent.setGlobalName(Inter.getLocText("FR-Designer_Show_Content"));
fileNameTextField.setGlobalName(Inter.getLocText("Show_Content")); fileNameTextField.setGlobalName(Inter.getLocText("FR-Designer_Show_Content"));
tooltipTextField.setGlobalName(Inter.getLocText("CellWrite-ToolTip")); tooltipTextField.setGlobalName(Inter.getLocText("FR-Designer_CellWrite_ToolTip"));
pageBeforeRowCheckBox.setGlobalName(Inter.getLocText("CellWrite-Page_Before_Row")); pageBeforeRowCheckBox.setGlobalName(Inter.getLocText("CellWrite-Page_Before_Row"));
pageAfterRowCheckBox.setGlobalName(Inter.getLocText("CellWrite-Page_After_Row")); pageAfterRowCheckBox.setGlobalName(Inter.getLocText("CellWrite-Page_After_Row"));
pageBeforeColumnCheckBox.setGlobalName(Inter.getLocText("CellWrite-Page_Before_Column")); pageBeforeColumnCheckBox.setGlobalName(Inter.getLocText("CellWrite-Page_Before_Column"));
@ -224,10 +232,10 @@ public class CellOtherSetPane extends AbstractCellAttrPane {
} else if (cellGUIAttr.isShowAsHTML()) { } else if (cellGUIAttr.isShowAsHTML()) {
showContent.setSelectedItem(Inter.getLocText("CellWrite-Show_As_HTML")); showContent.setSelectedItem(Inter.getLocText("CellWrite-Show_As_HTML"));
} else if (cellGUIAttr.isShowAsDownload()) { } else if (cellGUIAttr.isShowAsDownload()) {
showContent.setSelectedItem(Inter.getLocText("ShowAsDownload")); showContent.setSelectedItem(Inter.getLocText("FR-Designer_Show_As_Download"));
fileNameTextField.setText(cellGUIAttr.getFileName()); fileNameTextField.setText(cellGUIAttr.getFileName());
} else { } else {
showContent.setSelectedItem(Inter.getLocText("Default")); showContent.setSelectedItem(Inter.getLocText("FR-Designer_DEFAULT"));
} }
tooltipTextField.setText(cellGUIAttr.getTooltipText()); tooltipTextField.setText(cellGUIAttr.getTooltipText());
CellPageAttr cellPageAttr = cellElement.getCellPageAttr(); // 分页 CellPageAttr cellPageAttr = cellElement.getCellPageAttr(); // 分页
@ -272,11 +280,11 @@ public class CellOtherSetPane extends AbstractCellAttrPane {
cellGUIAttr = new CellGUIAttr(); cellGUIAttr = new CellGUIAttr();
} }
if (ComparatorUtils.equals(getGlobalName(), Inter.getLocText("Auto_Adjust_Size"))) { if (ComparatorUtils.equals(getGlobalName(), Inter.getLocText("FR-Designer_Auto_Adjust_Size"))) {
cellGUIAttr.setAdjustMode(autoshrik.getSelectedIndex()); cellGUIAttr.setAdjustMode(autoshrik.getSelectedIndex());
} }
if (ComparatorUtils.equals(getGlobalName(), Inter.getLocText("Preview"))) { if (ComparatorUtils.equals(getGlobalName(), Inter.getLocText("FR-Designer_Preview"))) {
cellGUIAttr.setPreviewContent(previewCellContent.isSelected()); cellGUIAttr.setPreviewContent(previewCellContent.isSelected());
} }
@ -288,7 +296,7 @@ public class CellOtherSetPane extends AbstractCellAttrPane {
cellGUIAttr.setPrintBackground(printAndExportBackground.isSelected()); cellGUIAttr.setPrintBackground(printAndExportBackground.isSelected());
} }
if (ComparatorUtils.equals(getGlobalName(), Inter.getLocText("Show_Content"))) { if (ComparatorUtils.equals(getGlobalName(), Inter.getLocText("FR-Designer_Show_Content"))) {
cellGUIAttr.setShowAsDefault(showContent.getSelectedIndex() == 0); cellGUIAttr.setShowAsDefault(showContent.getSelectedIndex() == 0);
cellGUIAttr.setShowAsImage(showContent.getSelectedIndex() == 1); cellGUIAttr.setShowAsImage(showContent.getSelectedIndex() == 1);
cellGUIAttr.setShowAsHTML(showContent.getSelectedIndex() == 2); cellGUIAttr.setShowAsHTML(showContent.getSelectedIndex() == 2);
@ -300,7 +308,7 @@ public class CellOtherSetPane extends AbstractCellAttrPane {
} }
} }
if (ComparatorUtils.equals(getGlobalName(), Inter.getLocText("CellWrite-ToolTip"))) { if (ComparatorUtils.equals(getGlobalName(), Inter.getLocText("FR-Designer_CellWrite_ToolTip"))) {
if (tooltipTextField.getText() == null || tooltipTextField.getText().trim().length() <= 0) { if (tooltipTextField.getText() == null || tooltipTextField.getText().trim().length() <= 0) {
cellGUIAttr.setTooltipText(fieldName); cellGUIAttr.setTooltipText(fieldName);
} else { } else {

14
designer/src/com/fr/design/report/ReportColumnsPane.java

@ -19,6 +19,7 @@ import javax.swing.SpinnerNumberModel;
import javax.swing.SwingConstants; import javax.swing.SwingConstants;
import com.fr.base.BaseUtils; import com.fr.base.BaseUtils;
import com.fr.base.GraphHelper;
import com.fr.design.border.UIRoundedBorder; import com.fr.design.border.UIRoundedBorder;
import com.fr.design.border.UITitledBorder; import com.fr.design.border.UITitledBorder;
import com.fr.design.dialog.BasicPane; import com.fr.design.dialog.BasicPane;
@ -109,9 +110,12 @@ public class ReportColumnsPane extends BasicPane{
onOffButtonGroup.addActionListener(onOffListener); onOffButtonGroup.addActionListener(onOffListener);
UILabel uiLabel = new UILabel(Inter.getLocText("FR-Designer_ReportColumns-Columns")); UILabel uiLabel = new UILabel(Inter.getLocText("FR-Designer_ReportColumns-Columns"));
uiLabel.setFont(FRFont.getInstance(FONT_NAME, Font.PLAIN, FONT_SIZE)); FRFont uiLableFont = FRFont.getInstance(FONT_NAME, Font.PLAIN, FONT_SIZE);
uiLabel.setFont(uiLableFont);
uiLabel.setHorizontalAlignment(SwingConstants.CENTER); uiLabel.setHorizontalAlignment(SwingConstants.CENTER);
uiLabel.setPreferredSize(new Dimension(100,20)); int uiLabelWidth = GraphHelper.getLocTextWidth("FR-Designer_ReportColumns-Columns", uiLableFont);
uiLabel.setPreferredSize(new Dimension(uiLabelWidth, 20));
north.add(uiLabel,BorderLayout.WEST); north.add(uiLabel,BorderLayout.WEST);
JPanel buttonGroupPane = new JPanel(new FlowLayout(FlowLayout.CENTER, 23,11)); JPanel buttonGroupPane = new JPanel(new FlowLayout(FlowLayout.CENTER, 23,11));
buttonGroupPane.add(onOffButtonGroup); buttonGroupPane.add(onOffButtonGroup);
@ -200,7 +204,7 @@ public class ReportColumnsPane extends BasicPane{
JPanel sampleLablePane = new JPanel(new GridLayout(1,2)); JPanel sampleLablePane = new JPanel(new GridLayout(1,2));
sampleLablePane.setPreferredSize(new Dimension(524, 130)); sampleLablePane.setPreferredSize(new Dimension(524, 130));
JPanel rPane = new JPanel(); JPanel rPane = new JPanel();
UILabel rLabel = new UILabel(BaseUtils.readIcon("/com/fr/design/images/reportcolumns/row.png")); UILabel rLabel = new UILabel(BaseUtils.readIcon("/com/fr/design/images/reportcolumns/" + Inter.getLocText("FR-Designer_Row_Icon_File_Name")));
rLabel.setBorder(BorderFactory.createEmptyBorder(5,45,0,49)); rLabel.setBorder(BorderFactory.createEmptyBorder(5,45,0,49));
rPane.add(rLabel); rPane.add(rLabel);
rowButton = new UIRadioButton(Inter.getLocText("ReportColumns-Columns_horizontally")); rowButton = new UIRadioButton(Inter.getLocText("ReportColumns-Columns_horizontally"));
@ -260,7 +264,7 @@ public class ReportColumnsPane extends BasicPane{
GUICoreUtils.setColumnForSpinner(maxNumberSpinner, 6); GUICoreUtils.setColumnForSpinner(maxNumberSpinner, 6);
maxRadioButton.addActionListener(maxBtnListener); maxRadioButton.addActionListener(maxBtnListener);
maxUILabel = new UILabel(COLUMN_ROW_TEXTS[rowOrColumn] ); maxUILabel = new UILabel(COLUMN_ROW_TEXTS[rowOrColumn] );
JPanel maxRowRadioPane = GUICoreUtils.createFlowPane(new JComponent[]{maxRadioButton, maxNumberSpinner, maxUILabel, new UILabel(Inter.getLocText("FR-Designer_ReportColumns-Columns"))}, FlowLayout.CENTER); JPanel maxRowRadioPane = GUICoreUtils.createFlowPane(new JComponent[]{maxRadioButton, maxNumberSpinner, maxUILabel, new UILabel(Inter.getLocText("FR-Designer_ReportColumns_Columns_Optional"))}, FlowLayout.CENTER);
RowMaxOrSetPane.add(maxRowRadioPane); RowMaxOrSetPane.add(maxRowRadioPane);
//marks:分成多少行 //marks:分成多少行
toXRadioButton = new UIRadioButton(Inter.getLocText("ReportColumns-Columns_to")); toXRadioButton = new UIRadioButton(Inter.getLocText("ReportColumns-Columns_to"));
@ -308,7 +312,7 @@ public class ReportColumnsPane extends BasicPane{
rowPane.setBorder(explainBorder); rowPane.setBorder(explainBorder);
rowPane.setLayout(new FlowLayout(FlowLayout.LEFT, 5,13)); rowPane.setLayout(new FlowLayout(FlowLayout.LEFT, 5,13));
rowPane.setPreferredSize(new Dimension(500,80)); rowPane.setPreferredSize(new Dimension(500,80));
rowPane.add(new UILabel(Inter.getLocText(new String[]{"ReportColumns-Columns","Data"}) + ":")); rowPane.add(new UILabel(Inter.getLocText(new String[]{"FR-Designer_ReportColumns_Columns_Optional","Data"}) + ":"));
repeatColDataTextField = new UITextField(); repeatColDataTextField = new UITextField();
repeatColDataTextField.setPreferredSize(new Dimension(107,24)); repeatColDataTextField.setPreferredSize(new Dimension(107,24));
rowPane.add(repeatColDataTextField); rowPane.add(repeatColDataTextField);

4
designer/src/com/fr/design/report/mobile/MobileUseHtmlGroupPane.java

@ -7,6 +7,10 @@ import com.fr.report.mobile.ElementCaseMobileAttr;
* Created by kunsnat on 2016/8/3. * Created by kunsnat on 2016/8/3.
*/ */
public class MobileUseHtmlGroupPane extends MobileUseHtmlGroupBeanPane<ElementCaseMobileAttr> { public class MobileUseHtmlGroupPane extends MobileUseHtmlGroupBeanPane<ElementCaseMobileAttr> {
public MobileUseHtmlGroupPane(String annotation) {
super(annotation);
}
@Override @Override
public void populateBean(ElementCaseMobileAttr mobileAttr) { public void populateBean(ElementCaseMobileAttr mobileAttr) {
if(mobileAttr != null) { if(mobileAttr != null) {

2
designer/src/com/fr/design/report/mobile/ReportMobileAttrPane.java

@ -34,7 +34,7 @@ public class ReportMobileAttrPane extends BasicBeanPane<ElementCaseMobileAttr>{
appFitBrowserPane.setAppFitPreviewPane(appFitPreviewPane); appFitBrowserPane.setAppFitPreviewPane(appFitPreviewPane);
jPanel.add(appFitBrowserPane); jPanel.add(appFitBrowserPane);
jPanel.add(htmlGroupPane = new MobileUseHtmlGroupPane()); jPanel.add(htmlGroupPane = new MobileUseHtmlGroupPane(Inter.getLocText("FR-Designer_Mobile_Report_Analysis_Annotation")));
jPanel.add(mobileToolBarPane = new MobileToolBarPane()); jPanel.add(mobileToolBarPane = new MobileToolBarPane());

22
designer/src/com/fr/design/webattr/EditToolBar.java

@ -7,6 +7,7 @@ import com.fr.design.dialog.BasicDialog;
import com.fr.design.dialog.BasicPane; import com.fr.design.dialog.BasicPane;
import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.dialog.DialogActionAdapter;
import com.fr.design.fun.ExportToolBarProvider; import com.fr.design.fun.ExportToolBarProvider;
import com.fr.design.fun.ExtraButtonToolBarProvider;
import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.icheckbox.UICheckBox;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
@ -199,7 +200,7 @@ public class EditToolBar extends BasicPane {
toolBarButton.setWidget(widget); toolBarButton.setWidget(widget);
if (widget instanceof Button) { if (widget instanceof Button) {
String iconname = ((Button) widget).getIconName(); String iconname = ((Button) widget).getIconName();
if (!StringUtils.isBlank(iconname)) { if (StringUtils.isNotBlank(iconname)) {
Image iimage = WidgetManager.getProviderInstance().getIconManager().getIconImage(iconname); Image iimage = WidgetManager.getProviderInstance().getIconManager().getIconImage(iconname);
toolBarButton.setIcon(new ImageIcon(iimage)); toolBarButton.setIcon(new ImageIcon(iimage));
} }
@ -386,6 +387,11 @@ public class EditToolBar extends BasicPane {
centerPane.add(getCpane(), "appendcount"); centerPane.add(getCpane(), "appendcount");
centerPane.add(getSubmitPane(), "submit"); centerPane.add(getSubmitPane(), "submit");
Set<ExtraButtonToolBarProvider> extraButtonSet = ExtraDesignClassManager.getInstance().getArray(ExtraButtonToolBarProvider.XML_TAG);
for (ExtraButtonToolBarProvider provider : extraButtonSet) {
provider.updateCenterPane(centerPane);
}
this.add(centerPane, BorderLayout.CENTER); this.add(centerPane, BorderLayout.CENTER);
} }
@ -479,7 +485,6 @@ public class EditToolBar extends BasicPane {
return submitPane; return submitPane;
} }
@Override @Override
protected String title4PopupWindow() { protected String title4PopupWindow() {
return "Button"; return "Button";
@ -528,7 +533,12 @@ public class EditToolBar extends BasicPane {
} else if (widget instanceof CustomToolBarButton) { } else if (widget instanceof CustomToolBarButton) {
populateCustomToolBarButton(); populateCustomToolBarButton();
} }
}
Set<ExtraButtonToolBarProvider> extraButtonSet = ExtraDesignClassManager.getInstance().getArray(ExtraButtonToolBarProvider.XML_TAG);
for (ExtraButtonToolBarProvider provider : extraButtonSet) {
provider.populate(widget, card, centerPane);
}
}
private void populateAppendColumnRow(){ private void populateAppendColumnRow(){
card.show(centerPane, "appendcount"); card.show(centerPane, "appendcount");
@ -613,6 +623,12 @@ public class EditToolBar extends BasicPane {
if (widget instanceof Button) { if (widget instanceof Button) {
updateDefault(); updateDefault();
} }
Set<ExtraButtonToolBarProvider> extraButtonSet = ExtraDesignClassManager.getInstance().getArray(ExtraButtonToolBarProvider.XML_TAG);
for (ExtraButtonToolBarProvider provider : extraButtonSet) {
provider.update(widget);
}
return widget; return widget;
} }

4
designer/src/com/fr/design/webattr/PageToolBarPane.java

@ -27,8 +27,8 @@ import java.util.List;
public class PageToolBarPane extends AbstractEditToolBarPane { public class PageToolBarPane extends AbstractEditToolBarPane {
private UIRadioButton centerRadioButton = new UIRadioButton(Inter.getLocText(new String[]{"Center", "Display"})); private UIRadioButton centerRadioButton = new UIRadioButton(Inter.getLocText("FR-Designer_Center_Display"));
private UIRadioButton leftRadioButton = new UIRadioButton(Inter.getLocText(new String[]{"Left", "Display"})); private UIRadioButton leftRadioButton = new UIRadioButton(Inter.getLocText("FR-Designer_Left_Display"));
private UICheckBox isUseToolBarCheckBox = new UICheckBox(Inter.getLocText("FR-Designer_Use_ToolBar")); private UICheckBox isUseToolBarCheckBox = new UICheckBox(Inter.getLocText("FR-Designer_Use_ToolBar"));
private UICheckBox isShowAsImageBox; private UICheckBox isShowAsImageBox;

14
designer/src/com/fr/design/webattr/PageWebSettingPane.java

@ -36,8 +36,8 @@ public class PageWebSettingPane extends WebSettingPane<WebPage> {
@Override @Override
protected JPanel createOtherSetPane() { protected JPanel createOtherSetPane() {
centerRadioButton = new UIRadioButton(Inter.getLocText(new String[]{"Center", "Display"})); centerRadioButton = new UIRadioButton(Inter.getLocText("FR-Designer_Center_Display"));
leftRadioButton = new UIRadioButton(Inter.getLocText(new String[]{"Left", "Display"})); leftRadioButton = new UIRadioButton(Inter.getLocText("FR-Designer_Left_Display"));
ButtonGroup buttonGroup = new ButtonGroup(); ButtonGroup buttonGroup = new ButtonGroup();
leftRadioButton.setSelected(true); leftRadioButton.setSelected(true);
buttonGroup.add(centerRadioButton); buttonGroup.add(centerRadioButton);
@ -45,15 +45,15 @@ public class PageWebSettingPane extends WebSettingPane<WebPage> {
JPanel buttonpane = new JPanel(FRGUIPaneFactory.createBoxFlowLayout()); JPanel buttonpane = new JPanel(FRGUIPaneFactory.createBoxFlowLayout());
buttonpane.add(centerRadioButton); buttonpane.add(centerRadioButton);
buttonpane.add(leftRadioButton); buttonpane.add(leftRadioButton);
isShowAsImageBox = new UICheckBox(Inter.getLocText("Is_Paint_Page")); isShowAsImageBox = new UICheckBox(Inter.getLocText("FR-Designer_Is_Paint_Page"));
isAutoScaleBox = new UICheckBox(Inter.getLocText("IS_Auto_Scale")); isAutoScaleBox = new UICheckBox(Inter.getLocText("FR-Designer_IS_Auto_Scale"));
isTDHeavyBox = new UICheckBox(Inter.getLocText("IS_TD_HEAVY_EXPORT"), false); isTDHeavyBox = new UICheckBox(Inter.getLocText("FR-Designer_IS_TD_HEAVY_EXPORT"), false);
double p = TableLayout.PREFERRED; double p = TableLayout.PREFERRED;
double[] columnSize = { p,p,p}; double[] columnSize = { p,p,p};
double[] rowSize = { p, p,p,p }; double[] rowSize = { p, p,p,p };
Component[][] components = new Component[][]{ Component[][] components = new Component[][]{
new Component[]{new UILabel(Inter.getLocText("Report_Show_Location") + ":", UILabel.RIGHT), buttonpane,null}, new Component[]{new UILabel(Inter.getLocText("FR-Designer_Report_Show_Location") + ":", UILabel.RIGHT), buttonpane,null},
new Component[]{new UILabel(Inter.getLocText("PageSetup-Page") + ":", UILabel.RIGHT), isShowAsImageBox, isAutoScaleBox}, new Component[]{new UILabel(Inter.getLocText("FR-Designer_PageSetup_Page") + ":", UILabel.RIGHT), isShowAsImageBox, isAutoScaleBox},
new Component[]{null, isTDHeavyBox, null} new Component[]{null, isTDHeavyBox, null}
}; };

6
designer/src/com/fr/design/webattr/ReportWebWidgetConstants.java

@ -78,13 +78,13 @@ public class ReportWebWidgetConstants {
public static final WidgetOption EDIT = WidgetOptionFactory.createByWidgetClass("Edit", Edit.class); public static final WidgetOption EDIT = WidgetOptionFactory.createByWidgetClass("Edit", Edit.class);
// 导出成Excel 分页导出 // 导出成Excel 分页导出
public static final WidgetOption EXCELP = WidgetOptionFactory.createByWidgetClass(Inter.getLocText(new String[]{"Excel", "Export-Excel-Page"}, new String[]{"(", ")"}), public static final WidgetOption EXCELP = WidgetOptionFactory.createByWidgetClass(Inter.getLocText(new String[]{"Excel", "FR-Designer_Export_Excel_Page"}, new String[]{"(", ")"}),
BaseUtils.readIcon("/com/fr/web/images/excel.png"), ExcelP.class); BaseUtils.readIcon("/com/fr/web/images/excel.png"), ExcelP.class);
// 导出成Excel 原样导出 // 导出成Excel 原样导出
public static final WidgetOption EXCELO = WidgetOptionFactory.createByWidgetClass(Inter.getLocText(new String[]{"Excel", "Export-Excel-Simple"}, new String[]{"(", ")"}), public static final WidgetOption EXCELO = WidgetOptionFactory.createByWidgetClass(Inter.getLocText(new String[]{"Excel", "FR-Designer_Export_Excel_Simple"}, new String[]{"(", ")"}),
BaseUtils.readIcon("/com/fr/web/images/excel.png"), ExcelO.class); BaseUtils.readIcon("/com/fr/web/images/excel.png"), ExcelO.class);
// 导出成Excel 分页分Sheet导出 // 导出成Excel 分页分Sheet导出
public static final WidgetOption EXCELS = WidgetOptionFactory.createByWidgetClass(Inter.getLocText(new String[]{"Excel", "Export-Excel-PageToSheet"}, new String[]{"(", ")"}), public static final WidgetOption EXCELS = WidgetOptionFactory.createByWidgetClass(Inter.getLocText(new String[]{"Excel", "FR-Designer_Export_Excel_PageToSheet"}, new String[]{"(", ")"}),
BaseUtils.readIcon("/com/fr/web/images/excel.png"), ExcelS.class); BaseUtils.readIcon("/com/fr/web/images/excel.png"), ExcelS.class);
// 导出成Word // 导出成Word

49
designer/src/com/fr/design/webattr/ToolBarDragPane.java

@ -126,25 +126,9 @@ public class ToolBarDragPane extends WidgetToolBarPane {
} }
} }
}); });
layoutTable = new JTable(toolbarButtonTableModel);
layoutTable.setDefaultRenderer(Object.class, tableRenderer); initLayoutTable();
layoutTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
layoutTable.setColumnSelectionAllowed(false);
layoutTable.setRowSelectionAllowed(false);
layoutTable.setBackground(Color.white);
layoutTable.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() > 1 && !(SwingUtilities.isRightMouseButton(e)) && isEnabled) {
WidgetOption no = (WidgetOption)layoutTable.getValueAt(layoutTable.getSelectedRow(), layoutTable.getSelectedColumn());
Widget widget = no.createWidget();
ToolBarButton tb = new ToolBarButton(no.optionIcon(), widget);
tb.setNameOption(no);
northToolBar.add(tb);
northToolBar.validate();
northToolBar.repaint();
}
}
});
JPanel center = FRGUIPaneFactory.createBorderLayout_S_Pane(); JPanel center = FRGUIPaneFactory.createBorderLayout_S_Pane();
center.setBackground(Color.white); center.setBackground(Color.white);
center.add(topButton, BorderLayout.NORTH); center.add(topButton, BorderLayout.NORTH);
@ -178,6 +162,33 @@ public class ToolBarDragPane extends WidgetToolBarPane {
isUseToolBarCheckBox.setSelected(true); isUseToolBarCheckBox.setSelected(true);
} }
private void initLayoutTable() {
layoutTable = new JTable(toolbarButtonTableModel);
layoutTable.setDefaultRenderer(Object.class, tableRenderer);
layoutTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
layoutTable.setColumnSelectionAllowed(false);
layoutTable.setRowSelectionAllowed(false);
layoutTable.setBackground(Color.white);
int columnWidth = Integer.parseInt(Inter.getLocText("FR-Designer_LayoutTable_Column_Width"));
for (int i = 0; i < layoutTable.getColumnModel().getColumnCount(); i++) {
layoutTable.getColumnModel().getColumn(i).setPreferredWidth(columnWidth);
}
layoutTable.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() > 1 && !(SwingUtilities.isRightMouseButton(e)) && isEnabled) {
WidgetOption no = (WidgetOption)layoutTable.getValueAt(layoutTable.getSelectedRow(), layoutTable.getSelectedColumn());
Widget widget = no.createWidget();
ToolBarButton tb = new ToolBarButton(no.optionIcon(), widget);
tb.setNameOption(no);
northToolBar.add(tb);
northToolBar.validate();
northToolBar.repaint();
}
}
});
}
private boolean isSelectedtable() { private boolean isSelectedtable() {
for (int i = 0; i < layoutTable.getColumnCount(); i++) { for (int i = 0; i < layoutTable.getColumnCount(); i++) {
if (layoutTable.isColumnSelected(i)) { if (layoutTable.isColumnSelected(i)) {

6
designer/src/com/fr/design/webattr/WriteToolBarPane.java

@ -39,8 +39,8 @@ public class WriteToolBarPane extends AbstractEditToolBarPane {
private UIRadioButton topRadioButton = new UIRadioButton(Inter.getLocText("FR-Designer_Top")); private UIRadioButton topRadioButton = new UIRadioButton(Inter.getLocText("FR-Designer_Top"));
private UIRadioButton bottomRadioButton = new UIRadioButton(Inter.getLocText("FR-Designer_Bottom")); private UIRadioButton bottomRadioButton = new UIRadioButton(Inter.getLocText("FR-Designer_Bottom"));
private UILabel sheetShowLocationLabel = new UILabel("sheet" + Inter.getLocText(new String[]{"Label", "Page_Number", "Display position"}) + ":"); private UILabel sheetShowLocationLabel = new UILabel("sheet" + Inter.getLocText(new String[]{"Label", "Page_Number", "Display position"}) + ":");
private UIRadioButton centerRadioButton = new UIRadioButton(Inter.getLocText(new String[]{"Center", "Display"})); private UIRadioButton centerRadioButton = new UIRadioButton(Inter.getLocText("FR-Designer_Center_Display"));
private UIRadioButton leftRadioButton = new UIRadioButton(Inter.getLocText(new String[]{"Left", "Display"})); private UIRadioButton leftRadioButton = new UIRadioButton(Inter.getLocText("FR-Designer_Left_Display"));
private UILabel rptShowLocationLabel = new UILabel(Inter.getLocText("FR-Designer_Report_Show_Location") + ":", UILabel.LEFT); private UILabel rptShowLocationLabel = new UILabel(Inter.getLocText("FR-Designer_Report_Show_Location") + ":", UILabel.LEFT);
private UICheckBox isUseToolBarCheckBox = new UICheckBox(Inter.getLocText("FR-Designer_Use_ToolBar")); private UICheckBox isUseToolBarCheckBox = new UICheckBox(Inter.getLocText("FR-Designer_Use_ToolBar"));
private UIButton editToolBarButton = new UIButton(Inter.getLocText("FR-Designer_Edit")); private UIButton editToolBarButton = new UIButton(Inter.getLocText("FR-Designer_Edit"));
@ -76,7 +76,7 @@ public class WriteToolBarPane extends AbstractEditToolBarPane {
colorButton = new UIColorButton(BaseUtils.readIcon("/com/fr/design/images/gui/color/background.png")); colorButton = new UIColorButton(BaseUtils.readIcon("/com/fr/design/images/gui/color/background.png"));
northPane.add(GUICoreUtils.createFlowPane(new Component[]{colorBox, colorButton}, FlowLayout.LEFT)); northPane.add(GUICoreUtils.createFlowPane(new Component[]{colorBox, colorButton}, FlowLayout.LEFT));
unloadCheck = new UICheckBox(Inter.getLocText(new String[]{"Event-unloadcheck", "Tooltips"})); unloadCheck = new UICheckBox(Inter.getLocText("FR-Designer_Unload_Check"));
unloadCheck.setSelected(true); unloadCheck.setSelected(true);
showWidgets = new UICheckBox(Inter.getLocText("FR-Designer_Event_ShowWidgets")); showWidgets = new UICheckBox(Inter.getLocText("FR-Designer_Event_ShowWidgets"));

9
designer/src/com/fr/design/webattr/WriteWebSettingPane.java

@ -42,8 +42,7 @@ public class WriteWebSettingPane extends WebSettingPane<WebWrite> {
@Override @Override
protected JPanel createOtherSetPane() { protected JPanel createOtherSetPane() {
colorBox = new UICheckBox(Inter.getLocText(new String[]{"Face_Write", "Current", "Edit", "Row", colorBox = new UICheckBox(Inter.getLocText("FR-Designer_Set_BG_Of_Current_Row") + ":");
"Background", "Set"}) + ":");
colorBox.setSelected(true); colorBox.setSelected(true);
colorButton = new UIColorButton(BaseUtils.readIcon("/com/fr/design/images/gui/color/background.png")); colorButton = new UIColorButton(BaseUtils.readIcon("/com/fr/design/images/gui/color/background.png"));
colorBox.addActionListener(new ActionListener() { colorBox.addActionListener(new ActionListener() {
@ -66,15 +65,15 @@ public class WriteWebSettingPane extends WebSettingPane<WebWrite> {
//Sean: 报表显示位置since 706 //Sean: 报表显示位置since 706
rptShowLocationLabel = new UILabel(Inter.getLocText("FR-Designer_Report_Show_Location") + ":", UILabel.LEFT); rptShowLocationLabel = new UILabel(Inter.getLocText("FR-Designer_Report_Show_Location") + ":", UILabel.LEFT);
centerRadioButton = new UIRadioButton(Inter.getLocText(new String[]{"Center", "Display"})); centerRadioButton = new UIRadioButton(Inter.getLocText("FR-Designer_Center_Display"));
leftRadioButton = new UIRadioButton(Inter.getLocText(new String[]{"Left", "Display"})); leftRadioButton = new UIRadioButton(Inter.getLocText("FR-Designer_Left_Display"));
ButtonGroup rptShowButtonGroup = new ButtonGroup(); ButtonGroup rptShowButtonGroup = new ButtonGroup();
leftRadioButton.setSelected(true); leftRadioButton.setSelected(true);
rptShowButtonGroup.add(centerRadioButton); rptShowButtonGroup.add(centerRadioButton);
rptShowButtonGroup.add(leftRadioButton); rptShowButtonGroup.add(leftRadioButton);
JPanel showLocPane = GUICoreUtils.createFlowPane(new Component[]{rptShowLocationLabel, centerRadioButton, leftRadioButton}, FlowLayout.LEFT); JPanel showLocPane = GUICoreUtils.createFlowPane(new Component[]{rptShowLocationLabel, centerRadioButton, leftRadioButton}, FlowLayout.LEFT);
unloadCheck = new UICheckBox(Inter.getLocText(new String[]{"Event-unloadcheck", "Tooltips"})); unloadCheck = new UICheckBox(Inter.getLocText("FR-Designer_Unload_Check"));
unloadCheck.setSelected(true); unloadCheck.setSelected(true);
showWidgets = new UICheckBox(Inter.getLocText(new String[]{"Event-showWidgets"})); showWidgets = new UICheckBox(Inter.getLocText(new String[]{"Event-showWidgets"}));

127
designer/src/com/fr/design/widget/CellWidgetCardPane.java

@ -20,24 +20,28 @@ import java.awt.*;
* carl :单独弄出来 * carl :单独弄出来
*/ */
public class CellWidgetCardPane extends BasicPane { public class CellWidgetCardPane extends BasicPane {
// 当前的编辑器属性定义面板 //当前的编辑器属性定义面板
private DataModify<? extends Widget> currentEditorDefinePane; private DataModify<? extends Widget> currentEditorDefinePane;
//属性配置切换面板
private JTabbedPane tabbedPane; private JTabbedPane tabbedPane;
private BasicWidgetPropertySettingPane widgetPropertyPane; private BasicWidgetPropertySettingPane widgetPropertyPane;
private JPanel attriPane;
private JPanel cardPane;
private CardLayout card;
private JPanel presPane; //通用属性容器
private JPanel cardPaneForPresent; private JPanel attriTabPane;
private CardLayout cardForPresent; private JPanel attriCardPane;
private CardLayout attriCardLayout;
private JPanel cardPaneForTreeSetting; //数字字典属性容器
private JPanel dictTabPane;
private JPanel dictCardPane;
private CardLayout dictCardLayout;
private JPanel formPane; //构建树属性容器
private WidgetEventPane eventTabPane; private JPanel treeTabPane;
//事件属性容器
private JPanel eventTabPane;
private WidgetEventPane eventPane;
public CellWidgetCardPane(ElementCasePane pane) { public CellWidgetCardPane(ElementCasePane pane) {
this.initComponents(pane); this.initComponents(pane);
@ -47,26 +51,26 @@ public class CellWidgetCardPane extends BasicPane {
this.setLayout(FRGUIPaneFactory.createBorderLayout()); this.setLayout(FRGUIPaneFactory.createBorderLayout());
tabbedPane = new UITabbedPane(); tabbedPane = new UITabbedPane();
this.add(tabbedPane, BorderLayout.CENTER); this.add(tabbedPane, BorderLayout.CENTER);
attriPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); attriTabPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
formPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); eventTabPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
eventTabPane = new WidgetEventPane(pane); eventPane = new WidgetEventPane(pane);
formPane.add(eventTabPane, BorderLayout.CENTER); eventTabPane.add(eventPane, BorderLayout.CENTER);
tabbedPane.add(Inter.getLocText("FR-Designer_Attribute"), attriPane); tabbedPane.add(Inter.getLocText("FR-Designer_Attribute"), attriTabPane);
tabbedPane.add(Inter.getLocText("FR-Designer_Form_Editing_Listeners"), formPane); tabbedPane.add(Inter.getLocText("FR-Designer_Form_Editing_Listeners"), eventTabPane);
presPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); dictTabPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
cardPaneForPresent = FRGUIPaneFactory.createCardLayout_S_Pane(); dictCardPane = FRGUIPaneFactory.createCardLayout_S_Pane();
presPane.add(cardPaneForPresent, BorderLayout.CENTER); dictTabPane.add(dictCardPane, BorderLayout.CENTER);
cardForPresent = new CardLayout(); dictCardLayout = new CardLayout();
cardPaneForPresent.setLayout(cardForPresent); dictCardPane.setLayout(dictCardLayout);
cardPaneForTreeSetting = FRGUIPaneFactory.createBorderLayout_L_Pane(); treeTabPane = FRGUIPaneFactory.createBorderLayout_L_Pane();
widgetPropertyPane = new BasicWidgetPropertySettingPane(); widgetPropertyPane = new BasicWidgetPropertySettingPane();
attriPane.add(widgetPropertyPane, BorderLayout.NORTH); attriTabPane.add(widgetPropertyPane, BorderLayout.NORTH);
cardPane = FRGUIPaneFactory.createCardLayout_S_Pane(); attriCardPane = FRGUIPaneFactory.createCardLayout_S_Pane();
attriPane.add(cardPane, BorderLayout.CENTER); attriTabPane.add(attriCardPane, BorderLayout.CENTER);
card = (CardLayout) cardPane.getLayout(); attriCardLayout = (CardLayout) attriCardPane.getLayout();
this.setPreferredSize(new Dimension(600, 450)); this.setPreferredSize(new Dimension(600, 450));
} }
@ -84,49 +88,53 @@ public class CellWidgetCardPane extends BasicPane {
this.tabbedPane.setEnabled(true); this.tabbedPane.setEnabled(true);
} }
attriPane.remove(widgetPropertyPane); attriTabPane.remove(widgetPropertyPane);
widgetPropertyPane = new BasicWidgetPropertySettingPane(); widgetPropertyPane = new BasicWidgetPropertySettingPane();
JPanel northPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); JPanel northPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
northPane.setBorder(BorderFactory.createEmptyBorder(5, 8, 0, 8)); northPane.setBorder(BorderFactory.createEmptyBorder(5, 8, 0, 8));
JPanel basic = FRGUIPaneFactory.createTitledBorderPane(Inter.getLocText("FR-Designer_Form_Basic_Properties")); JPanel basic = FRGUIPaneFactory.createTitledBorderPane(Inter.getLocText("FR-Designer_Form_Basic_Properties"));
northPane.add(basic); northPane.add(basic);
basic.add(widgetPropertyPane); basic.add(widgetPropertyPane);
attriPane.add(northPane, BorderLayout.NORTH); attriTabPane.add(northPane, BorderLayout.NORTH);
WidgetDefinePaneFactory.RN rn = WidgetDefinePaneFactory.createWidgetDefinePane(cellWidget, new Operator() { WidgetDefinePaneFactory.RN rn = WidgetDefinePaneFactory.createWidgetDefinePane(cellWidget, new Operator() {
@Override @Override
public void did(DataCreatorUI ui, String cardName) { public void did(DataCreatorUI ui, String cardName) {
if (ui == null) { if (ui == null) {
addPresPane(false); removeDictAttriPane();
addTreeSettingPane(false); removeTreeAttriPane();
} }
if (ui instanceof DictionaryPane) { if (ui instanceof DictionaryPane) {
removeDictAttriPane();
removeTreeAttriPane();
showDictPane(ui, cardName); showDictPane(ui, cardName);
} else if (ui instanceof TreeSettingPane) { } else if (ui instanceof TreeSettingPane) {
removeDictAttriPane();
removeTreeAttriPane();
showTreePane(ui); showTreePane(ui);
} }
} }
}); });
DataModify<? extends Widget> definePane = rn.getDefinePane(); DataModify<? extends Widget> definePane = rn.getDefinePane();
cardPane.add(definePane.toSwingComponent(), rn.getCardName()); attriCardPane.add(definePane.toSwingComponent(), rn.getCardName());
card.show(cardPane, rn.getCardName()); attriCardLayout.show(attriCardPane, rn.getCardName());
currentEditorDefinePane = definePane; currentEditorDefinePane = definePane;
eventTabPane.populate(cellWidget); eventPane.populate(cellWidget);
widgetPropertyPane.populate(cellWidget); widgetPropertyPane.populate(cellWidget);
tabbedPane.setSelectedIndex(0); tabbedPane.setSelectedIndex(0);
} }
private void showDictPane(DataCreatorUI ui, String cardName) { private void showDictPane(DataCreatorUI ui, String cardName) {
cardPaneForPresent.removeAll(); dictCardPane.removeAll();
cardPaneForPresent.add(ui.toSwingComponent(), cardName); dictCardPane.add(ui.toSwingComponent(), cardName);
cardForPresent.show(cardPaneForPresent, cardName); dictCardLayout.show(dictCardPane, cardName);
addPresPane(true); addDictAttriPane();
} }
private void showTreePane(DataCreatorUI ui) { private void showTreePane(DataCreatorUI ui) {
cardPaneForTreeSetting.removeAll(); treeTabPane.removeAll();
cardPaneForTreeSetting.add(ui.toSwingComponent()); treeTabPane.add(ui.toSwingComponent());
addTreeSettingPane(true); addTreeAttriPane();
} }
public Widget update() { public Widget update() {
@ -139,7 +147,7 @@ public class CellWidgetCardPane extends BasicPane {
} }
widgetPropertyPane.update(widget); widgetPropertyPane.update(widget);
Listener[] listener = eventTabPane == null ? new Listener[0] : eventTabPane.updateListeners(); Listener[] listener = eventPane == null ? new Listener[0] : eventPane.updateListeners();
widget.clearListeners(); widget.clearListeners();
for (Listener l : listener) { for (Listener l : listener) {
widget.addListener(l); widget.addListener(l);
@ -155,25 +163,26 @@ public class CellWidgetCardPane extends BasicPane {
*/ */
public void checkValid() throws Exception { public void checkValid() throws Exception {
currentEditorDefinePane.checkValid(); currentEditorDefinePane.checkValid();
eventTabPane.checkValid(); eventPane.checkValid();
} }
//:jackie 如果选择的项有形态,则将形态面板加入tab面板
private void addPresPane(boolean add) { private void addDictAttriPane() {
if (add) { tabbedPane.add(this.dictTabPane, 1);
tabbedPane.add(this.presPane, 1); tabbedPane.setTitleAt(1, Inter.getLocText("FR-Designer_DS_Dictionary"));
tabbedPane.setTitleAt(1, Inter.getLocText("FR-Designer_DS_Dictionary"));
} else {
tabbedPane.remove(presPane);
}
} }
private void addTreeSettingPane(boolean add) { private void addTreeAttriPane() {
if (add) { tabbedPane.add(this.treeTabPane, 1);
tabbedPane.add(this.cardPaneForTreeSetting, 1); tabbedPane.setTitleAt(1, Inter.getLocText("FR-Designer_Create_Tree"));
tabbedPane.setTitleAt(1, Inter.getLocText("FR-Designer_Create_Tree")); }
} else {
tabbedPane.remove(this.cardPaneForTreeSetting); private void removeDictAttriPane() {
} tabbedPane.remove(this.dictTabPane);
} }
private void removeTreeAttriPane() {
tabbedPane.remove(this.treeTabPane);
}
} }

2
designer/src/com/fr/design/widget/ui/CustomWritableRepeatEditorPane.java

@ -1 +1 @@
package com.fr.design.widget.ui; import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.form.ui.CustomWriteAbleRepeatEditor; import com.fr.general.Inter; import javax.swing.*; import java.awt.*; /** design.gui.icheckbox.UICheckBox; design.gui.icheckbox.UICheckBox; design.gui.icheckbox.UICheckBox; design.gui.icheckbox.UICheckBox; import com.fr.design.layout.FRGUIPaneFactory; design.gui.icheckbox.UICheckBox; import com.fr.design.utils.gui.GUICoreUtils; design.gui.icheckbox.UICheckBox; import com.fr.form.ui.CustomWriteAbleRepeatEditor; design.gui.icheckbox.UICheckBox; import com.fr.general.Inter; design.gui.icheckbox.UICheckBox; design.gui.icheckbox.UICheckBox; import javax.swing.*; design.gui.icheckbox.UICheckBox; import java.awt.*; design.gui.icheckbox.UICheckBox; /** import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.FRGUIPaneFactory; design.gui.icheckbox.UICheckBox; contentPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.utils.gui.GUICoreUtils; this.customDataCheckBox.setPreferredSize(new Dimension(100, 30)); getValidatePane().add(GUICoreUtils.createFlowPane(new JComponent[]{this.customDataCheckBox}, FlowLayout.LEFT, 5)); JPanel otherContentPane = this.setForthContentPane(); if (otherContentPane != null) { contentPane.add(otherContentPane,BorderLayout.CENTER); } return contentPane; } protected abstract JPanel setForthContentPane(); protected void populateSubWritableRepeatEditorBean(T e) { this.customDataCheckBox.setSelected(e.isCustomData()); populateSubCustomWritableRepeatEditorBean(e); } protected abstract void populateSubCustomWritableRepeatEditorBean(T e); protected T updateSubWritableRepeatEditorBean() { T e = updateSubCustomWritableRepeatEditorBean(); e.setCustomData(this.customDataCheckBox.isSelected()); return e; } protected abstract T updateSubCustomWritableRepeatEditorBean(); } package com.fr.design.widget.ui; import com.fr.base.GraphHelper; import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.form.ui.CustomWriteAbleRepeatEditor; import com.fr.general.Inter; import com.fr.design.utils.gui.GUICoreUtils; design.gui.icheckbox.UICheckBox; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.form.ui.CustomWriteAbleRepeatEditor; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.Inter; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.utils.gui.GUICoreUtils; import javax.swing.*; import com.fr.design.utils.gui.GUICoreUtils; import java.awt.*; import com.fr.design.utils.gui.GUICoreUtils; /** import com.fr.design.utils.gui.GUICoreUtils; design.gui.icheckbox.UICheckBox; import com.fr.form.ui.CustomWriteAbleRepeatEditor; import com.fr.form.ui.CustomWriteAbleRepeatEditor; design.gui.icheckbox.UICheckBox; import com.fr.form.ui.CustomWriteAbleRepeatEditor; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.utils.gui.GUICoreUtils; design.gui.icheckbox.UICheckBox; import com.fr.form.ui.CustomWriteAbleRepeatEditor; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.form.ui.CustomWriteAbleRepeatEditor; import com.fr.form.ui.CustomWriteAbleRepeatEditor; import com.fr.form.ui.CustomWriteAbleRepeatEditor; import com.fr.general.Inter; import com.fr.form.ui.CustomWriteAbleRepeatEditor; import com.fr.form.ui.CustomWriteAbleRepeatEditor; import javax.swing.*; import com.fr.form.ui.CustomWriteAbleRepeatEditor; import java.awt.*; import com.fr.form.ui.CustomWriteAbleRepeatEditor; /** import com.fr.general.Inter; import com.fr.general.Inter; design.gui.icheckbox.UICheckBox; import com.fr.general.Inter; import com.fr.design.layout.FRGUIPaneFactory; )); getValidatePane().add(GUICoreUtils.createFlowPane(new JComponent[]{this.customDataCheckBox}, FlowLayout.LEFT, 5)); JPanel otherContentPane = this.setForthContentPane(); if (otherContentPane != null) { contentPane.add(otherContentPane,BorderLayout.CENTER); } return contentPane; } protected abstract JPanel setForthContentPane(); protected void populateSubWritableRepeatEditorBean(T e) { this.customDataCheckBox.setSelected(e.isCustomData()); populateSubCustomWritableRepeatEditorBean(e); } protected abstract void populateSubCustomWritableRepeatEditorBean(T e); protected T updateSubWritableRepeatEditorBean() { T e = updateSubCustomWritableRepeatEditorBean(); e.setCustomData(this.customDataCheckBox.isSelected()); return e; } protected abstract T updateSubCustomWritableRepeatEditorBean(); }

36
designer/src/com/fr/design/widget/ui/FieldEditorDefinePane.java

@ -6,6 +6,7 @@ import java.awt.event.ItemListener;
import javax.swing.*; import javax.swing.*;
import com.fr.base.GraphHelper;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentEvent;
@ -19,6 +20,8 @@ import com.fr.form.ui.FieldEditor;
import com.fr.general.Inter; import com.fr.general.Inter;
public abstract class FieldEditorDefinePane<T extends FieldEditor> extends AbstractDataModify<T> { public abstract class FieldEditorDefinePane<T extends FieldEditor> extends AbstractDataModify<T> {
private static final int ALLOW_BLANK_CHECK_BOX_WIDTH = GraphHelper.getLocTextWidth("FR-Designer_Allow_Null") + 30;
private static final int ALLOW_BLANK_CHECK_BOX_HEIGHT = 30;
private UICheckBox allowBlankCheckBox; private UICheckBox allowBlankCheckBox;
// richer:错误信息,是所有控件共有的属性,所以放到这里来 // richer:错误信息,是所有控件共有的属性,所以放到这里来
private UITextField errorMsgTextField; private UITextField errorMsgTextField;
@ -32,6 +35,24 @@ public abstract class FieldEditorDefinePane<T extends FieldEditor> extends Abstr
protected void initComponents() { protected void initComponents() {
this.setLayout(FRGUIPaneFactory.createBorderLayout()); this.setLayout(FRGUIPaneFactory.createBorderLayout());
this.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 8)); this.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 8));
initRegErrorMsgTextField();
//JPanel firstPanel = FRGUIPaneFactory.createBorderLayout_M_Pane();
allowBlankCheckBox = new UICheckBox(Inter.getLocText("FR-Designer_Allow_Null"));
allowBlankCheckBox.setPreferredSize(new Dimension(ALLOW_BLANK_CHECK_BOX_WIDTH, ALLOW_BLANK_CHECK_BOX_HEIGHT));
allowBlankCheckBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
errorMsgTextField.setEnabled(!allowBlankCheckBox.isSelected());
}
});
initErrorMsgPane();
}
protected void initRegErrorMsgTextField() {
regErrorMsgTextField = new UITextField(16); regErrorMsgTextField = new UITextField(16);
regErrorMsgTextField.getDocument().addDocumentListener(new DocumentListener() { regErrorMsgTextField.getDocument().addDocumentListener(new DocumentListener() {
public void changedUpdate(DocumentEvent e) { public void changedUpdate(DocumentEvent e) {
@ -46,18 +67,9 @@ public abstract class FieldEditorDefinePane<T extends FieldEditor> extends Abstr
regErrorMsgTextField.setToolTipText(regErrorMsgTextField.getText()); regErrorMsgTextField.setToolTipText(regErrorMsgTextField.getText());
} }
}); });
}
//JPanel firstPanel = FRGUIPaneFactory.createBorderLayout_M_Pane(); protected void initErrorMsgPane() {
allowBlankCheckBox = new UICheckBox(Inter.getLocText("Allow_Blank"));
allowBlankCheckBox.setPreferredSize(new Dimension(75, 30));
allowBlankCheckBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
errorMsgTextField.setEnabled(!allowBlankCheckBox.isSelected());
}
});
// 错误信息 // 错误信息
JPanel errorMsgPane = FRGUIPaneFactory.createLeftFlowZeroGapBorderPane(); JPanel errorMsgPane = FRGUIPaneFactory.createLeftFlowZeroGapBorderPane();
errorMsgPane.add(new UILabel(Inter.getLocText(new String[]{"Error", "Tooltips"}) + ":")); errorMsgPane.add(new UILabel(Inter.getLocText(new String[]{"Error", "Tooltips"}) + ":"));
@ -128,7 +140,7 @@ public abstract class FieldEditorDefinePane<T extends FieldEditor> extends Abstr
JPanel firstPane = GUICoreUtils.createFlowPane(new JComponent[]{allowBlankCheckBox}, FlowLayout.LEFT, 5); JPanel firstPane = GUICoreUtils.createFlowPane(new JComponent[]{allowBlankCheckBox}, FlowLayout.LEFT, 5);
validatePane.add(firstPane); validatePane.add(firstPane);
JPanel secondPane = GUICoreUtils.createFlowPane(new JComponent[]{new UILabel(Inter.getLocText(new String[]{"Error", "Tooltips"}) + ":"), errorMsgTextField}, FlowLayout.LEFT, 24); JPanel secondPane = GUICoreUtils.createFlowPane(new JComponent[]{new UILabel(Inter.getLocText(new String[]{"Error", "Tooltips"}) + ":"), errorMsgTextField}, FlowLayout.LEFT, 24);
secondPane.setPreferredSize(new Dimension(310, 23)); secondPane.setPreferredSize(new Dimension(400, 23));
validatePane.add(secondPane); validatePane.add(secondPane);
} }

6
designer/src/com/fr/design/widget/ui/TextFieldEditorDefinePane.java

@ -61,11 +61,7 @@ public class TextFieldEditorDefinePane extends FieldEditorDefinePane<TextEditor>
regPane.getRegComboBox().addActionListener(new ActionListener() { regPane.getRegComboBox().addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
RegExp regExp = (RegExp) regPane.getRegComboBox().getSelectedItem(); RegExp regExp = (RegExp) regPane.getRegComboBox().getSelectedItem();
if (!StringUtils.isNotEmpty(regExp.toRegText())) { getRegErrorMsgTextField().setEnabled(regExp.errorMessageEditable());
getRegErrorMsgTextField().setEnabled(false);
} else {
getRegErrorMsgTextField().setEnabled(true);
}
} }
}); });

39
designer/src/com/fr/design/widget/ui/btn/ButtonSytleDefinedPane.java

@ -1,12 +1,13 @@
package com.fr.design.widget.ui.btn; package com.fr.design.widget.ui.btn;
import java.awt.BorderLayout; import java.awt.*;
import java.awt.Dimension;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import javax.swing.BorderFactory; import javax.swing.BorderFactory;
import javax.swing.ImageIcon; import javax.swing.ImageIcon;
import com.fr.base.background.ColorBackground;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.SwingUtilities; import javax.swing.SwingUtilities;
@ -18,7 +19,7 @@ import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.BasicDialog;
import com.fr.design.dialog.BasicPane; import com.fr.design.dialog.BasicPane;
import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.dialog.DialogActionAdapter;
import com.fr.design.gui.frpane.ImgChoosePane; import com.fr.design.style.background.BackgroundButtonPane;
import com.fr.form.ui.FreeButton; import com.fr.form.ui.FreeButton;
import com.fr.general.Background; import com.fr.general.Background;
import com.fr.general.Inter; import com.fr.general.Inter;
@ -44,9 +45,9 @@ public class ButtonSytleDefinedPane extends BasicPane {
JPanel buttonStylePane = new JPanel(); JPanel buttonStylePane = new JPanel();
buttonStylePane.setLayout(new BorderLayout()); buttonStylePane.setLayout(new BorderLayout());
initBackgroundPane = new BackgroundPane(Inter.getLocText("Background-Initial") + ":", Inter.getLocText("The_initial_background_of_the_button")); initBackgroundPane = new BackgroundPane(Inter.getLocText("FR-Designer_Background-Initial") + ":", Inter.getLocText("FR-Designer_Initial_Background_Tips"));
overBackgroundPane = new BackgroundPane(Inter.getLocText("Background-Over") + ":", Inter.getLocText("Mouse_move-background")); overBackgroundPane = new BackgroundPane(Inter.getLocText("FR-Designer_Background-Over") + ":", Inter.getLocText("FR-Designer_Mouse_Move_Tips"));
clickBackgroundPane = new BackgroundPane(Inter.getLocText("Background-Click") + ":", Inter.getLocText("Mouse_move-background")); clickBackgroundPane = new BackgroundPane(Inter.getLocText("FR-Designer_Background-Click") + ":", Inter.getLocText("FR-Designer_Mouse_Click_Tips"));
JPanel table = FRGUIPaneFactory.createYBoxEmptyBorderPane(); JPanel table = FRGUIPaneFactory.createYBoxEmptyBorderPane();
table.setBorder(new TitledBorder(Inter.getLocText(new String[]{"Custom", "Form-Button", "Style"}))); table.setBorder(new TitledBorder(Inter.getLocText(new String[]{"Custom", "Form-Button", "Style"})));
@ -84,7 +85,7 @@ public class ButtonSytleDefinedPane extends BasicPane {
class BackgroundPane extends JPanel { class BackgroundPane extends JPanel {
private UIButton editButton; private UIButton editButton;
private ImgChoosePane choosePane; private BackgroundButtonPane choosePane;
private Background background; private Background background;
private UILabel ImagePreviewPane; private UILabel ImagePreviewPane;
@ -101,13 +102,11 @@ public class ButtonSytleDefinedPane extends BasicPane {
ImagePreviewPane.setPreferredSize(new Dimension(100, 20)); ImagePreviewPane.setPreferredSize(new Dimension(100, 20));
this.add(ImagePreviewPane); this.add(ImagePreviewPane);
editButton = new UIButton(Inter.getLocText("Edit")); editButton = new UIButton(Inter.getLocText("FR-Designer_Edit"));
editButton.addActionListener(new ActionListener() { editButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
if (choosePane == null) { choosePane = new BackgroundButtonPane();
choosePane = new ImgChoosePane();
}
BasicDialog dlg = choosePane.showWindow(SwingUtilities BasicDialog dlg = choosePane.showWindow(SwingUtilities
.getWindowAncestor(ButtonSytleDefinedPane.this)); .getWindowAncestor(ButtonSytleDefinedPane.this));
dlg.addDialogActionListener(new DialogActionAdapter() { dlg.addDialogActionListener(new DialogActionAdapter() {
@ -116,7 +115,10 @@ public class ButtonSytleDefinedPane extends BasicPane {
populate(choosePane.update()); populate(choosePane.update());
} }
}); });
choosePane.populate((ImageBackground) BackgroundPane.this.background); if(BackgroundPane.this.background == null){
BackgroundPane.this.background = new ColorBackground();
}
choosePane.populate((Background) BackgroundPane.this.background);
dlg.setVisible(true); dlg.setVisible(true);
} }
}); });
@ -125,15 +127,22 @@ public class ButtonSytleDefinedPane extends BasicPane {
public void populate(Background background) { public void populate(Background background) {
this.background = background; this.background = background;
if (background instanceof ImageBackground && ((ImageBackground) background).getImage() != null) { if (background instanceof ImageBackground && ((ImageBackground) background).getImage() != null) {
ImagePreviewPane.setIcon(new ImageIcon(((ImageBackground) background).getImage())); ImagePreviewPane.setIcon(new ImageIcon(((ImageBackground) background).getImage()));
} else { } else if(background instanceof ColorBackground && ((ColorBackground) background).getColor() != null){
ImagePreviewPane.setIcon(null);
ImagePreviewPane.setOpaque(true);
ImagePreviewPane.setBackground(((ColorBackground) background).getColor());
}else{
ImagePreviewPane.setIcon(null); ImagePreviewPane.setIcon(null);
ImagePreviewPane.setOpaque(false);
ImagePreviewPane.setBackground(null);
} }
} }
public ImageBackground update() { public Background update() {
return (ImageBackground) background; return background;
} }
} }
} }

6
designer/src/com/fr/grid/selection/CellSelection.java

@ -18,6 +18,7 @@ import com.fr.design.dialog.DialogActionAdapter;
import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.file.HistoryTemplateListPane;
import com.fr.design.gui.imenu.UIMenu; import com.fr.design.gui.imenu.UIMenu;
import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.gui.imenu.UIPopupMenu;
import com.fr.design.mainframe.CellElementPropertyPane;
import com.fr.design.mainframe.ElementCasePane; import com.fr.design.mainframe.ElementCasePane;
import com.fr.design.mainframe.ElementCasePane.Clear; import com.fr.design.mainframe.ElementCasePane.Clear;
import com.fr.design.mainframe.JTemplate; import com.fr.design.mainframe.JTemplate;
@ -684,4 +685,9 @@ public class CellSelection extends Selection {
editor.populate(tc); editor.populate(tc);
return editor; return editor;
} }
@Override
public void populatePropertyPane(ElementCasePane ePane) {
CellElementPropertyPane.getInstance().reInit(ePane);
}
} }

6
designer/src/com/fr/grid/selection/FloatSelection.java

@ -20,6 +20,7 @@ import com.fr.design.cell.clipboard.CellElementsClip;
import com.fr.design.cell.clipboard.ElementsTransferable; import com.fr.design.cell.clipboard.ElementsTransferable;
import com.fr.design.cell.clipboard.FloatElementsClip; import com.fr.design.cell.clipboard.FloatElementsClip;
import com.fr.design.designer.TargetComponent; import com.fr.design.designer.TargetComponent;
import com.fr.design.mainframe.CellElementPropertyPane;
import com.fr.general.ComparatorUtils; import com.fr.general.ComparatorUtils;
import com.fr.general.Inter; import com.fr.general.Inter;
import com.fr.design.mainframe.ElementCasePane; import com.fr.design.mainframe.ElementCasePane;
@ -230,4 +231,9 @@ public class FloatSelection extends Selection {
editor.populate(tc); editor.populate(tc);
return editor; return editor;
} }
@Override
public void populatePropertyPane(ElementCasePane ePane) {
CellElementPropertyPane.getInstance().removeAll();
}
} }

2
designer/src/com/fr/grid/selection/Selection.java

@ -88,6 +88,8 @@ public abstract class Selection implements FCloneable, Serializable , Selectable
// //////////////////////////Just4CellSelection/////////////////////////////// // //////////////////////////Just4CellSelection///////////////////////////////
public abstract boolean containsColumnRow(ColumnRow cr); public abstract boolean containsColumnRow(ColumnRow cr);
public abstract void populatePropertyPane(ElementCasePane ePane);
@Override @Override
public Selection clone() throws CloneNotSupportedException { public Selection clone() throws CloneNotSupportedException {

4
designer/src/com/fr/poly/hanlder/BottomCornerMouseHanlder.java

@ -161,7 +161,7 @@ public class BottomCornerMouseHanlder extends MouseInputAdapter {
* @param isIntersects 是否重叠 * @param isIntersects 是否重叠
*/ */
@Override @Override
public void setWidgetsIntersects(boolean isIntersects) { public void setWidgetsIntersected(boolean isIntersects) {
} }
/** /**
@ -170,7 +170,7 @@ public class BottomCornerMouseHanlder extends MouseInputAdapter {
* @return 重叠 * @return 重叠
*/ */
@Override @Override
public boolean getWidgetsIntersects() { public boolean isWidgetsIntersected() {
return false; return false;
} }

38
designer_base/src/com/fr/design/actions/community/VideoAction.java

@ -5,6 +5,7 @@ import java.awt.event.ActionEvent;
import java.io.IOException; import java.io.IOException;
import java.net.URI; import java.net.URI;
import java.net.URISyntaxException; import java.net.URISyntaxException;
import java.util.Locale;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
import javax.swing.KeyStroke; import javax.swing.KeyStroke;
@ -32,22 +33,27 @@ public class VideoAction extends UpdateAction
@Override @Override
public void actionPerformed(ActionEvent arg0) public void actionPerformed(ActionEvent arg0)
{ {
String url = SiteCenter.getInstance().acquireUrlByKind("bbs.video"); String url;
if (StringUtils.isEmpty(url)) { if (FRContext.getLocale().equals(Locale.US)) {
FRContext.getLogger().info("The URL is empty!"); url = SiteCenter.getInstance().acquireUrlByKind("bbs.video.en");
return; } else {
} url = SiteCenter.getInstance().acquireUrlByKind("bbs.video");
try { }
Desktop.getDesktop().browse(new URI(url)); if (StringUtils.isEmpty(url)) {
} catch (IOException exp) { FRContext.getLogger().info("The URL is empty!");
JOptionPane.showMessageDialog(null, Inter.getLocText("Set_default_browser")); return;
FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp); }
} catch (URISyntaxException exp) { try {
FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp); Desktop.getDesktop().browse(new URI(url));
} catch (Exception exp) { } catch (IOException exp) {
FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp); JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Designer_Set_default_browser"));
FRContext.getLogger().error("Can not open the browser for URL: " + url); FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp);
} } catch (URISyntaxException exp) {
FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp);
} catch (Exception exp) {
FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp);
FRContext.getLogger().error("Can not open the browser for URL: " + url);
}
} }
public static final MenuKeySet VIDEO = new MenuKeySet() { public static final MenuKeySet VIDEO = new MenuKeySet() {

62
designer_base/src/com/fr/design/actions/file/LocalePane.java

@ -27,6 +27,8 @@ import com.fr.design.dialog.BasicPane;
import com.fr.file.filetree.FileNode; import com.fr.file.filetree.FileNode;
import com.fr.general.*; import com.fr.general.*;
import com.fr.stable.ArrayUtils; import com.fr.stable.ArrayUtils;
import com.fr.stable.StringUtils;
import com.fr.stable.bridge.StableFactory;
import com.fr.stable.project.ProjectConstants; import com.fr.stable.project.ProjectConstants;
/** /**
@ -51,8 +53,8 @@ public class LocalePane extends BasicPane {
add(tabbedPane, BorderLayout.CENTER); add(tabbedPane, BorderLayout.CENTER);
predefineTableModel = new DefaultTableModel() { predefineTableModel = new DefaultTableModel() {
public boolean isCellEditable(int col, int row) { public boolean isCellEditable(int row, int column) {
return false; return column == 0;
} }
}; };
@ -109,23 +111,39 @@ public class LocalePane extends BasicPane {
} }
private void initPredefinedProperties() { private void initPredefinedProperties() {
Map<Locale, LocalePackage> map = Inter.getPredefinedPackageMap();
LocalePackage chinese = map.get(Locale.SIMPLIFIED_CHINESE); Map<Locale, String> supportLocaleMap = Inter.getSupportLocaleMap();
String[] localeFiles = StableFactory.getLocaleFiles();
List<String> sortKeys = new ArrayList<String>(); List<String> sortKeys = new ArrayList<String>();
Set<ResourceBundle> bundles = chinese.getKindsOfResourceBundle(); for (String path : localeFiles) {
for (ResourceBundle bundle : bundles) { ResourceBundle chineseBundle = loadResourceBundle(path, Locale.SIMPLIFIED_CHINESE);
sortKeys.addAll(bundle.keySet()); sortKeys.addAll(chineseBundle.keySet());
} }
Collections.sort(sortKeys); Collections.sort(sortKeys);
Map<Locale, List<ResourceBundle>> localeResourceBundleMap = new HashMap<Locale, List<ResourceBundle>>();
for (Map.Entry<Locale, String> entry : supportLocaleMap.entrySet()) {
Locale locale = entry.getKey();
List<ResourceBundle> list = new ArrayList<>();
for (String path : localeFiles) {
ResourceBundle chineseBundle = loadResourceBundle(path, locale);
list.add(chineseBundle);
}
localeResourceBundleMap.put(locale, list);
}
Map<Locale, Vector<String>> data = new HashMap<Locale, Vector<String>>(); Map<Locale, Vector<String>> data = new HashMap<Locale, Vector<String>>();
for (Map.Entry<Locale, LocalePackage> entry : map.entrySet()) { for (Map.Entry<Locale, List<ResourceBundle>> entry : localeResourceBundleMap.entrySet()) {
Vector<String> column = new Vector<String>(); Vector<String> column = new Vector<String>();
List<ResourceBundle> rbs = entry.getValue();
for (String key : sortKeys) { for (String key : sortKeys) {
column.add(entry.getValue().getLocText(key)); column.add(readText(rbs, key));
} }
data.put(entry.getKey(), column); data.put(entry.getKey(), column);
} }
@ -140,6 +158,19 @@ public class LocalePane extends BasicPane {
} }
} }
private String readText(List<ResourceBundle> rbs, String key) {
for (ResourceBundle rb : rbs) {
if (rb.containsKey(key)) {
return rb.getString(key);
}
}
return null;
}
private ResourceBundle loadResourceBundle(String dir, Locale locale) {
return ResourceBundle.getBundle(dir, locale, Inter.class.getClassLoader());
}
private void initCustomProperties() throws Exception { private void initCustomProperties() throws Exception {
Env env = FRContext.getCurrentEnv(); Env env = FRContext.getCurrentEnv();
if (env == null) { if (env == null) {
@ -176,22 +207,9 @@ public class LocalePane extends BasicPane {
} }
} }
private Properties loadLocaleProperties(String name) {
Properties properties = new Properties();
InputStream inputStream = IOUtils.readResource("/com/fr/general/locale/" + name);
try {
properties.load(inputStream);
} catch (IOException e) {
FRLogger.getLogger().error(e.getMessage());
}
return properties;
}
/** /**
* 保存当前编辑的国际化 * 保存当前编辑的国际化
* *
*
* @date 2014-9-30-下午3:10:30
*/ */
public void save() { public void save() {
Env env = FRContext.getCurrentEnv(); Env env = FRContext.getCurrentEnv();

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

@ -3,6 +3,7 @@
*/ */
package com.fr.design.actions.help; package com.fr.design.actions.help;
import com.fr.base.FRContext;
import com.fr.design.DesignerEnvManager; import com.fr.design.DesignerEnvManager;
import com.fr.design.gui.ilable.ActionLabel; import com.fr.design.gui.ilable.ActionLabel;
import com.fr.design.gui.ilable.BoldFontTextLabel; import com.fr.design.gui.ilable.BoldFontTextLabel;
@ -26,6 +27,7 @@ import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter; import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.net.URI; import java.net.URI;
import java.util.Locale;
public class AboutPane extends JPanel { public class AboutPane extends JPanel {
private static final String FINEREPORT = "FineReport"; private static final String FINEREPORT = "FineReport";
@ -66,15 +68,20 @@ public class AboutPane extends JPanel {
Inter.getLocText("FR-Designer-Basic_Activation_Key_Copy_OK") Inter.getLocText("FR-Designer-Basic_Activation_Key_Copy_OK")
})); }));
if(ComparatorUtils.equals(ProductConstants.APP_NAME,FINEREPORT)){ // 英文去掉服务电话和 QQ
boxCenterAlignmentPane = new BoxCenterAligmentPane(Inter.getLocText("Service_Phone") + ProductConstants.COMPARE_TELEPHONE); if (FRContext.getLocale().equals(Locale.US)){
// do nothing
} else {
if(ComparatorUtils.equals(ProductConstants.APP_NAME,FINEREPORT)){
boxCenterAlignmentPane = new BoxCenterAligmentPane(Inter.getLocText("FR-Designer_Service_Phone") + ProductConstants.COMPARE_TELEPHONE);
contentPane.add(boxCenterAlignmentPane);
}
boxCenterAlignmentPane = new BoxCenterAligmentPane("QQ:" + SiteCenter.getInstance().acquireUrlByKind("help.qq"));
contentPane.add(boxCenterAlignmentPane); contentPane.add(boxCenterAlignmentPane);
} }
boxCenterAlignmentPane = new BoxCenterAligmentPane("QQ:" + SiteCenter.getInstance().acquireUrlByKind("help.qq"));
contentPane.add(boxCenterAlignmentPane);
BoxCenterAligmentPane actionLabel = getURLActionLabel(ProductConstants.WEBSITE_URL); BoxCenterAligmentPane actionLabel = getURLActionLabel(SiteCenter.getInstance().acquireUrlByKind("website." + FRContext.getLocale(), ProductConstants.WEBSITE_URL));
BoxCenterAligmentPane emailLabel = getEmailActionLabel(ProductConstants.SUPPORT_EMAIL); BoxCenterAligmentPane emailLabel = getEmailActionLabel(SiteCenter.getInstance().acquireUrlByKind("support.email", ProductConstants.SUPPORT_EMAIL));
contentPane.add(actionLabel); contentPane.add(actionLabel);
contentPane.add(emailLabel); contentPane.add(emailLabel);
@ -103,12 +110,12 @@ public class AboutPane extends JPanel {
} }
private String getCopyRight(){ private String getCopyRight(){
return append(Inter.getLocText("About-CopyRight"), COPYRIGHT_LABEL, return append(Inter.getLocText("FR-Designer_About_CopyRight"), COPYRIGHT_LABEL,
ProductConstants.HISTORY, StringUtils.BLANK, ProductConstants.COMPANY_NAME); ProductConstants.HISTORY, StringUtils.BLANK, SiteCenter.getInstance().acquireUrlByKind("company.name", ProductConstants.COMPANY_NAME));
} }
private String getBuildTitle() { private String getBuildTitle() {
return append(ProductConstants.APP_NAME, Inter.getLocText("About-Version"), return append(ProductConstants.APP_NAME, Inter.getLocText("FR-Designer_About_Version"),
StringUtils.BLANK, ProductConstants.RELEASE_VERSION, BUILD_PREFIX); StringUtils.BLANK, ProductConstants.RELEASE_VERSION, BUILD_PREFIX);
} }

10
designer_base/src/com/fr/design/actions/help/TutorialAction.java

@ -59,18 +59,20 @@ public class TutorialAction extends UpdateAction {
* @param evt 事件 * @param evt 事件
*/ */
public void actionPerformed(ActionEvent evt) { public void actionPerformed(ActionEvent evt) {
Locale locale = FRContext.getLocale(); String helpURL = SiteCenter.getInstance().acquireUrlByKind("help." + FRContext.getLocale());
if (ComparatorUtils.equals(locale, Locale.CHINA) || ComparatorUtils.equals(locale, Locale.TAIWAN)){
HttpClient client = new HttpClient(SiteCenter.getInstance().acquireUrlByKind("help")); if (helpURL != null) {
HttpClient client = new HttpClient(helpURL);
if(client.getResponseCode() != -1) { if(client.getResponseCode() != -1) {
try { try {
Desktop.getDesktop().browse(new URI(SiteCenter.getInstance().acquireUrlByKind("help"))); Desktop.getDesktop().browse(new URI(helpURL));
return; return;
} catch (Exception e) { } catch (Exception e) {
//出了异常的话, 依然打开本地教程 //出了异常的话, 依然打开本地教程
} }
} }
} }
if (OperatingSystem.isMacOS()) { if (OperatingSystem.isMacOS()) {
nativeExcuteMacInstallHomePrograms("helptutorial.app"); nativeExcuteMacInstallHomePrograms("helptutorial.app");
} }

13
designer_base/src/com/fr/design/beans/location/MoveUtils.java

@ -16,6 +16,7 @@ import java.util.ArrayList;
public class MoveUtils { public class MoveUtils {
public static final int SORPTION_UNIT = 5; public static final int SORPTION_UNIT = 5;
private static final int EQUIDISTANTLINE_UNIT = 4;
public static WidgetForbidWindow widgetForbidWindow = new WidgetForbidWindow(); public static WidgetForbidWindow widgetForbidWindow = new WidgetForbidWindow();
@ -77,13 +78,13 @@ public class MoveUtils {
* 设置designer内部组件是否重叠的标志位 * 设置designer内部组件是否重叠的标志位
* @param isIntersects 是否重叠 * @param isIntersects 是否重叠
*/ */
void setWidgetsIntersects(boolean isIntersects); void setWidgetsIntersected(boolean isIntersects);
/** /**
* 获取designer内部组件是否重叠的标志位 * 获取designer内部组件是否重叠的标志位
* @return 重叠 * @return 重叠
*/ */
boolean getWidgetsIntersects(); boolean isWidgetsIntersected();
/** /**
* 获取designer相对屏幕的位置 * 获取designer相对屏幕的位置
@ -357,10 +358,10 @@ public class MoveUtils {
if(designer.getDesignerLocationOnScreen() != null) { if(designer.getDesignerLocationOnScreen() != null) {
displayForbidWindow(x + designer.getDesignerLocationOnScreen().x, y + designer.getDesignerLocationOnScreen().y); displayForbidWindow(x + designer.getDesignerLocationOnScreen().x, y + designer.getDesignerLocationOnScreen().y);
} }
designer.setWidgetsIntersects(true); designer.setWidgetsIntersected(true);
} }
else{ else{
designer.setWidgetsIntersects(false); designer.setWidgetsIntersected(false);
hideForbidWindow(); hideForbidWindow();
} }
} }
@ -479,10 +480,10 @@ public class MoveUtils {
} }
private static void processEquidistantLinesList(PlacePointing pEquidistantX, PlacePointing pEquidistantY, Rectangle operatingRectangle){ private static void processEquidistantLinesList(PlacePointing pEquidistantX, PlacePointing pEquidistantY, Rectangle operatingRectangle){
EquidistantLine[] equidistantLines1 = new EquidistantLine[4]; EquidistantLine[] equidistantLines1 = new EquidistantLine[EQUIDISTANTLINE_UNIT];
//先按方向处理,只保留四个方向上距离最近 //先按方向处理,只保留四个方向上距离最近
for(int count = 0; count < equidistantLines.size(); count++){ for(int count = 0; count < equidistantLines.size(); count++){
for (int direction = 0; direction < 4; direction++){ for (int direction = 0; direction < EQUIDISTANTLINE_UNIT; direction++){
if(equidistantLines.get(count).getDirection() == (direction + 1)){//direction 1,2,3,4 分别对应top,left,bottom,right if(equidistantLines.get(count).getDirection() == (direction + 1)){//direction 1,2,3,4 分别对应top,left,bottom,right
if(equidistantLines1[direction] != null if(equidistantLines1[direction] != null
&& equidistantLines1[direction].getDistance() > equidistantLines.get(count).getDistance() && equidistantLines1[direction].getDistance() > equidistantLines.get(count).getDistance()

2
designer_base/src/com/fr/design/data/datapane/TableDataTreePane.java

@ -84,7 +84,7 @@ public class TableDataTreePane extends BasicTableDataTreePane {
GeneralContext.addPluginReadListener(new PluginReadListener() { GeneralContext.addPluginReadListener(new PluginReadListener() {
@Override @Override
public void success() { public void success(Status status) {
addMenuDef.clearShortCuts(); addMenuDef.clearShortCuts();
createAddMenuDef(); createAddMenuDef();
} }

8
designer_base/src/com/fr/design/dialog/mobile/MobileUseHtmlGroupBeanPane.java

@ -23,11 +23,11 @@ public abstract class MobileUseHtmlGroupBeanPane<T> extends BasicBeanPane<T> {
private List<UIRadioButton> radioButtons = new ArrayList<UIRadioButton>(); private List<UIRadioButton> radioButtons = new ArrayList<UIRadioButton>();
public MobileUseHtmlGroupBeanPane() { public MobileUseHtmlGroupBeanPane(String annotation) {
initComponents(); initComponents(annotation);
} }
private void initComponents() { private void initComponents(String annotation) {
this.setLayout(FRGUIPaneFactory.createBorderLayout()); this.setLayout(FRGUIPaneFactory.createBorderLayout());
this.setBorder(UITitledBorder.createBorderWithTitle(this.title4PopupWindow())); this.setBorder(UITitledBorder.createBorderWithTitle(this.title4PopupWindow()));
@ -43,7 +43,7 @@ public abstract class MobileUseHtmlGroupBeanPane<T> extends BasicBeanPane<T> {
Component[][] components = new Component[][]{ Component[][] components = new Component[][]{
new Component[]{new UILabel(Inter.getLocText("FR-mobile_analysis_style")), useApp, useHTML5}, new Component[]{new UILabel(Inter.getLocText("FR-mobile_analysis_style")), useApp, useHTML5},
new Component[]{new UILabel(Inter.getLocText("FR-mobile_analysis_annotation")), null, null} new Component[]{new UILabel(annotation), null, null}
}; };
JPanel usePane = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); JPanel usePane = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize);
usePane.setBorder(BorderFactory.createEmptyBorder(10, 13, 10, 10)); usePane.setBorder(BorderFactory.createEmptyBorder(10, 13, 10, 10));

6
designer_base/src/com/fr/design/editor/editor/DateEditor.java

@ -15,6 +15,7 @@ import java.awt.event.ItemListener;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.Locale;
/** /**
* CellEditor used to edit Date object. * CellEditor used to edit Date object.
@ -59,7 +60,10 @@ public class DateEditor extends Editor<Date> {
this.setLayout(FRGUIPaneFactory.createBorderLayout()); this.setLayout(FRGUIPaneFactory.createBorderLayout());
uiDatePicker = new UIDatePicker(); uiDatePicker = new UIDatePicker();
if (format) { if (format) {
uiDatePicker.setStyle(uiDatePicker.STYLE_CN_DATE); int dateStyle = (FRContext.getLocale() == Locale.ENGLISH
|| FRContext.getLocale() == Locale.US
|| FRContext.getLocale() == Locale.UK) ? uiDatePicker.STYLE_EN_DATE : uiDatePicker.STYLE_CN_DATE;
uiDatePicker.setStyle(dateStyle);
uiDatePicker.setEditable(false); uiDatePicker.setEditable(false);
} }
uiDatePicker.addItemListener(new ItemListener() { uiDatePicker.addItemListener(new ItemListener() {

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

@ -256,7 +256,7 @@ public class PluginHelper {
if (PluginLoader.getLoader().isInstalled(plugin)) { if (PluginLoader.getLoader().isInstalled(plugin)) {
throw new com.fr.plugin.PluginVerifyException(Inter.getLocText("FR-Designer-Plugin_Has_Been_Installed")); throw new com.fr.plugin.PluginVerifyException(Inter.getLocText("FR-Designer-Plugin_Has_Been_Installed"));
} }
if (plugin.isJarExpired()) { if (plugin.checkIfJarExpired()) {
String jarExpiredInfo = Inter.getLocText(new String[]{"FR-Designer-Plugin_Jar_Expired", ",", "FR-Designer-Plugin_Install_Failed", ",", "FR-Designer-Plugin_Please_Update_Jar", plugin.getRequiredJarTime()}); String jarExpiredInfo = Inter.getLocText(new String[]{"FR-Designer-Plugin_Jar_Expired", ",", "FR-Designer-Plugin_Install_Failed", ",", "FR-Designer-Plugin_Please_Update_Jar", plugin.getRequiredJarTime()});
FRLogger.getLogger().error(jarExpiredInfo); FRLogger.getLogger().error(jarExpiredInfo);
throw new com.fr.plugin.PluginVerifyException(jarExpiredInfo); throw new com.fr.plugin.PluginVerifyException(jarExpiredInfo);

374
designer_base/src/com/fr/design/formula/FormulaPane.java

@ -32,10 +32,12 @@ import javax.swing.event.ListSelectionListener;
import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener; import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.*; import javax.swing.tree.*;
import java.awt.*; import java.awt.*;
import java.awt.event.*; import java.awt.event.*;
import java.io.*; import java.io.*;
import java.util.Locale; import java.util.Locale;
import java.util.Set;
/** /**
* 公式编辑面板 * 公式编辑面板
* @editor zhou * @editor zhou
@ -61,28 +63,15 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{
initComponents(); initComponents();
} }
protected void initComponents() { private void initFormulaTextAreaKeyListener(){
this.setLayout(new BorderLayout(4, 4)); formulaTextArea.addKeyListener(this);
formulaTextArea.addKeyListener(new KeyAdapter() {
// text
JPanel textPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
this.add(textPane, BorderLayout.CENTER);
JPanel checkBoxandbuttonPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane();
UILabel formulaLabel = new UILabel(Inter.getLocText("FormulaD-Input_formula_in_the_text_area_below") + ":"
+ " ");
formulaLabel.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
formulaTextArea = new RSyntaxTextArea();
configFormulaArea();
formulaTextArea.addKeyListener(this);
formulaTextArea.addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent e) { public void keyReleased(KeyEvent e) {
formulaTextArea.setForeground(Color.black); formulaTextArea.setForeground(Color.black);
String text = formulaTextArea.getText(); String text = formulaTextArea.getText();
// 判断在中文输入状态是否还包含提示符 要删掉 // 判断在中文输入状态是否还包含提示符 要删掉
String tip = "\n\n\n" + Inter.getLocText("Tips:You_Can_Input_B1_To_Input_The_Data_Of_The_First_Row_Second_Column"); //Tips:You_Can_Input_B1_To_Input_The_Data_Of_The_First_Row_Second_Column
String tip = "\n\n\n" + Inter.getLocText("FR-Designer_FormulaPane_Tips");
if(text.contains(tip)) { if(text.contains(tip)) {
text = text.substring(0, text.indexOf(tip)); text = text.substring(0, text.indexOf(tip));
insertPosition = 0; insertPosition = 0;
@ -90,9 +79,10 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{
} }
} }
}); });
}
formulaTextArea.addMouseListener(new MouseAdapter() { private void initFormulaTextAreaMouseListener(){
formulaTextArea.addMouseListener(new MouseAdapter() {
@Override @Override
public void mousePressed(MouseEvent e) { public void mousePressed(MouseEvent e) {
insertPosition = formulaTextArea.getCaretPosition(); insertPosition = formulaTextArea.getCaretPosition();
@ -115,52 +105,81 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{
} }
} }
}); });
UIScrollPane formulaTextAreaScrollPane = new UIScrollPane(formulaTextArea); }
formulaTextAreaScrollPane.setBorder(null);
textPane.add(formulaLabel, BorderLayout.NORTH);
textPane.add(formulaTextAreaScrollPane, BorderLayout.CENTER);
textPane.add(checkBoxandbuttonPane, BorderLayout.SOUTH);
// tipsPane
JPanel tipsPane = new JPanel(new BorderLayout(4, 4));
this.add(tipsPane, BorderLayout.EAST);
JPanel searchPane = new JPanel(new BorderLayout(4, 4));
searchPane.add(keyWordTextField, BorderLayout.CENTER);
UIButton searchButton = new UIButton(Inter.getLocText("Search"));
searchPane.add(searchButton, BorderLayout.EAST);
tipsPane.add(searchPane, BorderLayout.NORTH);
keyWordTextField.addKeyListener(new KeyListener() { private void initFormulaTextArea(){
formulaTextArea = new RSyntaxTextArea();
configFormulaArea();
initFormulaTextAreaKeyListener();
initFormulaTextAreaMouseListener();
}
private void initKeyWordTextFieldKeyListener(){
keyWordTextField.addKeyListener(new KeyListener() {
@Override @Override
public void keyTyped(KeyEvent e) { public void keyTyped(KeyEvent e) {
} }
@Override @Override
public void keyReleased(KeyEvent e) { public void keyReleased(KeyEvent e) {
} }
@Override @Override
public void keyPressed(KeyEvent e) { public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) { if (e.getKeyCode() == KeyEvent.VK_ENTER) {
String toFind = keyWordTextField.getText(); String toFind = keyWordTextField.getText();
search(toFind, false); search(toFind, false);
fixFunctionNameList(); fixFunctionNameList();
e.consume(); e.consume();
} }
} }
}); });
}
private void initTipsPane(){
// tipsPane
JPanel tipsPane = new JPanel(new BorderLayout(4, 4));
this.add(tipsPane, BorderLayout.EAST);
JPanel searchPane = new JPanel(new BorderLayout(4, 4));
searchPane.add(keyWordTextField, BorderLayout.CENTER);
UIButton searchButton = new UIButton(Inter.getLocText("FR-Designer_FormulaPane_Search"));
searchPane.add(searchButton, BorderLayout.EAST);
tipsPane.add(searchPane, BorderLayout.NORTH);
initKeyWordTextFieldKeyListener();
tipsList = new JList(listModel); tipsList = new JList(listModel);
tipsList.addMouseListener(new DoubleClick()); tipsList.addMouseListener(new DoubleClick());
UIScrollPane tipsScrollPane = new UIScrollPane(tipsList); UIScrollPane tipsScrollPane = new UIScrollPane(tipsList);
tipsScrollPane.setPreferredSize(new Dimension(170, 75)); tipsScrollPane.setPreferredSize(new Dimension(170, 75));
tipsScrollPane.setBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, UIConstants.ARC)); tipsScrollPane.setBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, UIConstants.ARC));
tipsPane.add(tipsScrollPane, BorderLayout.CENTER); tipsPane.add(tipsScrollPane, BorderLayout.CENTER);
searchButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String toFind = keyWordTextField.getText();
search(toFind, false);
formulaTextArea.requestFocusInWindow();
fixFunctionNameList();
}
});
}
protected void initComponents() {
this.setLayout(new BorderLayout(4, 4));
// text
JPanel textPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
this.add(textPane, BorderLayout.CENTER);
JPanel checkBoxandbuttonPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane();
UILabel formulaLabel = new UILabel(Inter.getLocText("FormulaD-Input_formula_in_the_text_area_below") + ":"
+ " ");
formulaLabel.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
initFormulaTextArea();
UIScrollPane formulaTextAreaScrollPane = new UIScrollPane(formulaTextArea);
formulaTextAreaScrollPane.setBorder(null);
textPane.add(formulaLabel, BorderLayout.NORTH);
textPane.add(formulaTextAreaScrollPane, BorderLayout.CENTER);
textPane.add(checkBoxandbuttonPane, BorderLayout.SOUTH);
initTipsPane();
UIButton checkValidButton = new UIButton(Inter.getLocText("FormulaD-Check_Valid")); UIButton checkValidButton = new UIButton(Inter.getLocText("FormulaD-Check_Valid"));
checkValidButton.addActionListener(checkValidActionListener); checkValidButton.addActionListener(checkValidActionListener);
@ -169,20 +188,7 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{
checkBoxPane.setPreferredSize(new Dimension(450, 30)); checkBoxPane.setPreferredSize(new Dimension(450, 30));
checkBoxandbuttonPane.add(checkBoxPane, BorderLayout.WEST); checkBoxandbuttonPane.add(checkBoxPane, BorderLayout.WEST);
checkBoxandbuttonPane.add(checkValidButton, BorderLayout.EAST); checkBoxandbuttonPane.add(checkValidButton, BorderLayout.EAST);
extendCheckBoxPane(checkBoxPane); extendCheckBoxPane(checkBoxPane);
searchButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String toFind = keyWordTextField.getText();
search(toFind, false);
formulaTextArea.requestFocusInWindow();
fixFunctionNameList();
}
});
variableTreeAndDescriptionArea = new VariableTreeAndDescriptionArea(); variableTreeAndDescriptionArea = new VariableTreeAndDescriptionArea();
this.add(variableTreeAndDescriptionArea, BorderLayout.SOUTH); this.add(variableTreeAndDescriptionArea, BorderLayout.SOUTH);
} }
@ -253,11 +259,17 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{
this.formulaTextArea.setText(StringUtils.EMPTY); this.formulaTextArea.setText(StringUtils.EMPTY);
} }
} }
//hugh:为啥会是10呢?搞不懂~~~
private static final int KEY_10 = 10;
//上下左右
private static final int KEY_37 = 37;
private static final int KEY_38 = 38;
private static final int KEY_39 = 39;
private static final int KEY_40 = 40;
@Override @Override
public void keyReleased(KeyEvent e) { public void keyReleased(KeyEvent e) {
int key = e.getKeyCode(); int key = e.getKeyCode();
if (key == 38 || key == 40 || key == 37 || key == 39 || key == 10) //如果是删除符号 ,为了可读性 没有和其他按键的程序相融合 if (key == KEY_38 || key == KEY_40 || key == KEY_37 || key == KEY_39 || key == KEY_10) //如果是删除符号 ,为了可读性 没有和其他按键的程序相融合
{ {
listModel.removeAllElements(); listModel.removeAllElements();
currentPosition = formulaTextArea.getCaretPosition(); currentPosition = formulaTextArea.getCaretPosition();
@ -461,7 +473,8 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{
String content = formula.getContent(); String content = formula.getContent();
if (content.trim().equals("=")) { if (content.trim().equals("=")) {
this.formulaTextArea.setForeground(Color.gray); this.formulaTextArea.setForeground(Color.gray);
this.formulaTextArea.setText("\n\n\n" + Inter.getLocText("Tips:You_Can_Input_B1_To_Input_The_Data_Of_The_First_Row_Second_Column")); //Tips:You_Can_Input_B1_To_Input_The_Data_Of_The_First_Row_Second_Column
this.formulaTextArea.setText("\n\n\n" + Inter.getLocText("FR-Designer_FormulaPane_Tips"));
this.formulaTextArea.setCaretPosition(0); this.formulaTextArea.setCaretPosition(0);
ifHasBeenWriten = 0; ifHasBeenWriten = 0;
this.listModel.removeAllElements(); this.listModel.removeAllElements();
@ -549,21 +562,20 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{
this.initComponents(); this.initComponents();
} }
private void initComponents() { private void initFunctionTypeList(JPanel functionPane){
this.setLayout(new BorderLayout(4, 4)); functionTypeList = new QuickList(functionTypeListModel);
// Function
JPanel functionPane = new JPanel(new BorderLayout(4, 4));
this.add(functionPane, BorderLayout.WEST);
functionTypeList = new QuickList(functionTypeListModel);
UIScrollPane functionTypeScrollPane = new UIScrollPane(functionTypeList); UIScrollPane functionTypeScrollPane = new UIScrollPane(functionTypeList);
functionTypeScrollPane.setBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, UIConstants.ARC)); functionTypeScrollPane.setBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, UIConstants.ARC));
functionTypeScrollPane.setPreferredSize(new Dimension(140, 200)); functionTypeScrollPane.setPreferredSize(new Dimension(140, 200));
functionPane.add(this.createNamePane(Inter.getLocText("FormulaD-Function_category") + ":", functionTypeScrollPane), BorderLayout.WEST); functionPane.add(this.createNamePane(Inter.getLocText("FormulaD-Function_category") + ":", functionTypeScrollPane), BorderLayout.WEST);
functionTypeList.setCellRenderer(new DefaultListCellRenderer() { initTypeListCellRenderer();
initGroupTypeModel();
initTypeListSelectionListener();
}
private void initTypeListCellRenderer(){
functionTypeList.setCellRenderer(
new DefaultListCellRenderer() {
@Override @Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
@ -573,48 +585,44 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{
return this; return this;
} }
}); });
}
functionTypeListModel.addElement(FunctionConstants.COMMON); private void initTypeListSelectionListener(){
for (int i = 0; i < FunctionConstants.EMBFUNCTIONS.length; i++) { functionTypeList.addListSelectionListener(new ListSelectionListener() {
functionTypeListModel.addElement(FunctionConstants.EMBFUNCTIONS[i]);
}
functionTypeListModel.addElement(FunctionConstants.ALL);
functionTypeListModel.addElement(FunctionConstants.CUSTOM);
functionTypeListModel.addElement(FunctionConstants.PLUGIN);
functionTypeList.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent evt) { public void valueChanged(ListSelectionEvent evt) {
Object selectedValue = ((JList) evt.getSource()).getSelectedValue(); Object selectedValue = ((JList) evt.getSource()).getSelectedValue();
if (!(selectedValue instanceof FunctionGroup)) { if (!(selectedValue instanceof FunctionGroup)) {
return; return;
} }
NameAndDescription[] nads = ((FunctionGroup) selectedValue).getDescriptions(); NameAndDescription[] nads = ((FunctionGroup) selectedValue).getDescriptions();
functionNameModel = (DefaultListModel) functionNameList.getModel(); functionNameModel = (DefaultListModel) functionNameList.getModel();
functionNameModel.clear(); functionNameModel.clear();
for (NameAndDescription nad : nads) { for (NameAndDescription nad : nads) {
functionNameModel.addElement(nad); functionNameModel.addElement(nad);
} }
if (functionNameModel.size() > 0) { if (functionNameModel.size() > 0) {
functionNameList.setSelectedIndex(0); functionNameList.setSelectedIndex(0);
functionNameList.ensureIndexIsVisible(0); functionNameList.ensureIndexIsVisible(0);
} }
} }
}); });
}
functionNameList = new JList(new DefaultListModel()); private void initGroupTypeModel(){
UIScrollPane functionNameScrollPane = new UIScrollPane(functionNameList); functionTypeListModel.addElement(FunctionConstants.COMMON);
functionNameScrollPane.setPreferredSize(new Dimension(140, 200)); for (int i = 0; i < FunctionConstants.EMBFUNCTIONS.length; i++) {
functionPane.add( functionTypeListModel.addElement(FunctionConstants.EMBFUNCTIONS[i]);
this.createNamePane(Inter.getLocText("FormulaD-Function_name") + ":", functionNameScrollPane), }
BorderLayout.CENTER); functionTypeListModel.addElement(FunctionConstants.ALL);
functionNameScrollPane.setBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, UIConstants.ARC)); functionTypeListModel.addElement(FunctionConstants.CUSTOM);
functionTypeListModel.addElement(FunctionConstants.PLUGIN);
//hugh: 从函数分组插件中添加分组
FunctionConstants.addFunctionGroupFromPlugins(functionTypeListModel);
}
functionNameList.setCellRenderer(new DefaultListCellRenderer() { private void initFunctionNameListCellRenderer(){
functionNameList.setCellRenderer(new DefaultListCellRenderer() {
@Override @Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
@ -625,8 +633,10 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{
return this; return this;
} }
}); });
}
functionNameList.addListSelectionListener(new ListSelectionListener() { private void initFunctionNameListSelectionListener(){
functionNameList.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent evt) { public void valueChanged(ListSelectionEvent evt) {
Object selectedValue = functionNameList.getSelectedValue(); Object selectedValue = functionNameList.getSelectedValue();
@ -640,11 +650,11 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{
descriptionTextArea.moveCaretPosition(0); descriptionTextArea.moveCaretPosition(0);
} }
}); });
}
functionNameList.addMouseListener(new MouseAdapter() { private void initFunctionNameListMouseListener(){
functionNameList.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent evt) { public void mouseClicked(MouseEvent evt) {
if (evt.getClickCount() >= 2) { if (evt.getClickCount() >= 2) {
Object selectedValue = functionNameList.getSelectedValue(); Object selectedValue = functionNameList.getSelectedValue();
if (!(selectedValue instanceof NameAndDescription)) { if (!(selectedValue instanceof NameAndDescription)) {
@ -654,7 +664,6 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{
applyText(insert); applyText(insert);
} }
if (SwingUtilities.isRightMouseButton(evt)) { if (SwingUtilities.isRightMouseButton(evt)) {
JPopupMenu popupMenu = new JPopupMenu(); JPopupMenu popupMenu = new JPopupMenu();
LookDetailAction lookDetailAction = new LookDetailAction(); LookDetailAction lookDetailAction = new LookDetailAction();
@ -665,24 +674,28 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{
} }
} }
}); });
}
// vairable. private void initFunctionNameList(JPanel functionPane){
variablesTree = new JTree(); functionNameList = new JList(new DefaultListModel());
UIScrollPane variablesTreePane = new UIScrollPane(variablesTree); UIScrollPane functionNameScrollPane = new UIScrollPane(functionNameList);
variablesTreePane.setBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, UIConstants.ARC)); functionNameScrollPane.setPreferredSize(new Dimension(140, 200));
this.add(this.createNamePane( functionPane.add(
Inter.getLocText("Variables") + ":", variablesTreePane), BorderLayout.CENTER); this.createNamePane(Inter.getLocText("FormulaD-Function_name") + ":", functionNameScrollPane),
variablesTree.setRootVisible(false); BorderLayout.CENTER);
variablesTree.setShowsRootHandles(true); functionNameScrollPane.setBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, UIConstants.ARC));
variablesTree.addMouseListener(applyTextMouseListener); initFunctionNameListCellRenderer();
variablesTree.setCellRenderer(applyTreeCellRenderer); initFunctionNameListSelectionListener();
initFunctionNameListMouseListener();
}
// Description private void initDescriptionTextArea(){
// Description
descriptionTextArea = new UITextArea(16, 27); descriptionTextArea = new UITextArea(16, 27);
UIScrollPane desScrollPane = new UIScrollPane(descriptionTextArea); UIScrollPane desScrollPane = new UIScrollPane(descriptionTextArea);
desScrollPane.setBorder(null); desScrollPane.setBorder(null);
this.add(this.createNamePane(Inter.getLocText("Formula_Description") + ":", desScrollPane), BorderLayout.EAST); this.add(this.createNamePane(Inter.getLocText("FR-Designer_FormulaPane_Formula_Description") + ":", desScrollPane), BorderLayout.EAST);
descriptionTextArea.setBackground(new Color(255, 255, 225)); descriptionTextArea.setBackground(new Color(255, 255, 225));
descriptionTextArea.setLineWrap(true); descriptionTextArea.setLineWrap(true);
descriptionTextArea.setWrapStyleWord(true); descriptionTextArea.setWrapStyleWord(true);
@ -696,19 +709,41 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{
} }
}); });
variablesTree.addTreeSelectionListener(new TreeSelectionListener() { }
public void valueChanged(TreeSelectionEvent e) { private StringBuilder getText(TextUserObject selectedValue,String path) throws IOException{
Object selectedValue = ((DefaultMutableTreeNode) variablesTree.getLastSelectedPathComponent()).getUserObject(); Reader desReader;
StringBuilder desBuf = new StringBuilder();
InputStream desInputStream = BaseUtils.readResource(path+ ((TextUserObject) selectedValue).displayText+".txt");
if (desInputStream == null) {
String description = "";
desReader = new StringReader(description);
} else {
desReader = new InputStreamReader(desInputStream);
}
BufferedReader reader = new BufferedReader(desReader);
String lineText;
while ((lineText = reader.readLine()) != null) {
if (desBuf.length() > 0) {
desBuf.append('\n');
}
desBuf.append(lineText);
}
reader.close();
desReader.close();
return desBuf;
}
private void initVariablesTreeSelectionListener(){
variablesTree.addTreeSelectionListener(new TreeSelectionListener() {
public void valueChanged(TreeSelectionEvent e) {
Object selectedValue = ((DefaultMutableTreeNode) variablesTree.getLastSelectedPathComponent()).getUserObject();
if (selectedValue == null) { if (selectedValue == null) {
return; return;
} }
StringBuilder desBuf = new StringBuilder(); StringBuilder desBuf = new StringBuilder();
try { try {
Reader desReader;
String path; String path;
Locale locale = FRContext.getLocale(); Locale locale = FRContext.getLocale();
if (locale.equals(Locale.CHINA)) { if (locale.equals(Locale.CHINA)) {
path = "/com/fr/design/insert/formula/variable/cn/"; path = "/com/fr/design/insert/formula/variable/cn/";
@ -716,43 +751,42 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{
path = "/com/fr/design/insert/formula/variable/en/"; path = "/com/fr/design/insert/formula/variable/en/";
} }
if (selectedValue instanceof TextUserObject) { if (selectedValue instanceof TextUserObject) {
desBuf = getText((TextUserObject)selectedValue,path);
InputStream desInputStream = BaseUtils.readResource(path
+ ((TextUserObject) selectedValue).displayText
+ ".txt");
if (desInputStream == null) {
String description = "";
desReader = new StringReader(description);
} else {
desReader = new InputStreamReader(
desInputStream);
}
BufferedReader reader = new BufferedReader(
desReader);
String lineText;
while ((lineText = reader.readLine()) != null) {
if (desBuf.length() > 0) {
desBuf.append('\n');
}
desBuf.append(lineText);
}
reader.close();
desReader.close();
} }
} catch (IOException exp) { } catch (IOException exp) {
FRContext.getLogger().error(exp.getMessage(), exp); FRContext.getLogger().error(exp.getMessage(), exp);
} }
descriptionTextArea.setText(desBuf.toString()); descriptionTextArea.setText(desBuf.toString());
descriptionTextArea.moveCaretPosition(0); descriptionTextArea.moveCaretPosition(0);
} }
}); });
}
private void initVariablesTree(){
// vairable.
variablesTree = new JTree();
UIScrollPane variablesTreePane = new UIScrollPane(variablesTree);
variablesTreePane.setBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, UIConstants.ARC));
this.add(this.createNamePane(
Inter.getLocText("FR-Designer_FormulaPane_Variables") + ":", variablesTreePane), BorderLayout.CENTER);
variablesTree.setRootVisible(false);
variablesTree.setShowsRootHandles(true);
variablesTree.addMouseListener(applyTextMouseListener);
variablesTree.setCellRenderer(applyTreeCellRenderer);
initDescriptionTextArea();
initVariablesTreeSelectionListener();
}
private void initComponents() {
this.setLayout(new BorderLayout(4, 4));
// Function
JPanel functionPane = new JPanel(new BorderLayout(4, 4));
this.add(functionPane, BorderLayout.WEST);
initFunctionTypeList(functionPane);
initFunctionNameList(functionPane);
initVariablesTree();
// 选择: // 选择:
functionTypeList.setSelectedIndex(0); functionTypeList.setSelectedIndex(0);
} }
@ -763,7 +797,7 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{
private class LookDetailAction extends UpdateAction { private class LookDetailAction extends UpdateAction {
public LookDetailAction() { public LookDetailAction() {
this.setName(Inter.getLocText("Function_Detail")); this.setName(Inter.getLocText("FR-Designer_FormulaPane_Function_Detail"));
this.setMnemonic('L'); this.setMnemonic('L');
this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_file/preview.png")); this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_file/preview.png"));
} }
@ -778,7 +812,7 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{
BasicPane basicPane = new BasicPane() { BasicPane basicPane = new BasicPane() {
@Override @Override
protected String title4PopupWindow() { protected String title4PopupWindow() {
return Inter.getLocText("Function_Detail"); return Inter.getLocText("FR-Designer_FormulaPane_Function_Detail");
} }
}; };
basicPane.setLayout(FRGUIPaneFactory.createBorderLayout()); basicPane.setLayout(FRGUIPaneFactory.createBorderLayout());
@ -869,52 +903,28 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{
rootNode.add(bindCellNode); rootNode.add(bindCellNode);
} }
{ rootNode.add(new TextFolderUserObject(Inter.getLocText("FormulaD-Data_Fields"),
MutableTreeNode tableTreeNode = new TextFolderUserObject( BaseUtils.readIcon("/com/fr/design/images/dialog/table.png"),
Inter.getLocText("FormulaD-Data_Fields"), variableResolver.resolveColumnNames()).createMutableTreeNode());
BaseUtils.readIcon("/com/fr/design/images/dialog/table.png"),
variableResolver.resolveColumnNames()).createMutableTreeNode();
rootNode.add(tableTreeNode); // Set cutReport Variable
} rootNode.add(new TextFolderUserObject(Inter.getLocText("FR-Designer_FormulaPane_Variables"),
BaseUtils.readIcon("/com/fr/design/images/dialog/variable.png"),
{ variableResolver.resolveCurReportVariables()).createMutableTreeNode());
// Set cutReport Variable
rootNode.add(new TextFolderUserObject(
Inter.getLocText("Variables"),
BaseUtils.readIcon("/com/fr/design/images/dialog/variable.png"),
variableResolver.resolveCurReportVariables()).createMutableTreeNode());
}
rootNode.add(new TextFolderUserObject(Inter.getLocText(new String[]{"Datasource-Datasource", "Parameter"}),
BaseUtils.readIcon("/com/fr/design/images/dialog/parameter.gif"),
variableResolver.resolveTableDataParameterVariables()).createMutableTreeNode());
{ rootNode.add(new TextFolderUserObject(Inter.getLocText("ParameterD-Report_Parameter"),
rootNode.add(new TextFolderUserObject( BaseUtils.readIcon("/com/fr/design/images/m_report/p.gif"),
Inter.getLocText(new String[]{"Datasource-Datasource", "Parameter"}), variableResolver.resolveReportParameterVariables()).createMutableTreeNode());
BaseUtils.readIcon("/com/fr/design/images/dialog/parameter.gif"),
variableResolver.resolveTableDataParameterVariables()).createMutableTreeNode());
}
{
MutableTreeNode reportParameterTreeNode = new TextFolderUserObject(
Inter.getLocText("ParameterD-Report_Parameter"),
BaseUtils.readIcon("/com/fr/design/images/m_report/p.gif"),
variableResolver.resolveReportParameterVariables()).createMutableTreeNode();
rootNode.add(reportParameterTreeNode);
}
{
MutableTreeNode globalParameterTreeNode = new TextFolderUserObject(
Inter.getLocText("M_Server-Global_Parameters"),
BaseUtils.readIcon("/com/fr/design/images/dialog/parameter.gif"),
variableResolver.resolveGlobalParameterVariables()).createMutableTreeNode();
rootNode.add(globalParameterTreeNode);
}
rootNode.add(new TextFolderUserObject(Inter.getLocText("M_Server-Global_Parameters"),
BaseUtils.readIcon("/com/fr/design/images/dialog/parameter.gif"),
variableResolver.resolveGlobalParameterVariables()).createMutableTreeNode());
variableModel.reload(); variableModel.reload();
// Expand // Expand
for (int row = 0; row < this.variablesTree.getRowCount(); row++) { for (int row = 0; row < this.variablesTree.getRowCount(); row++) {
this.variablesTree.expandRow(row); this.variablesTree.expandRow(row);
@ -993,6 +1003,6 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{
buffer.append("|"); buffer.append("|");
buffer.append("\n"); buffer.append("\n");
} }
System.out.println(buffer.toString()); FRContext.getLogger().debug(buffer.toString());
} }
} }

51
designer_base/src/com/fr/design/formula/FunctionConstants.java

@ -11,6 +11,8 @@ import com.fr.stable.EncodeConstants;
import com.fr.stable.OperatingSystem; import com.fr.stable.OperatingSystem;
import com.fr.stable.StableUtils; import com.fr.stable.StableUtils;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
import com.fr.stable.fun.FunctionDefContainer;
import com.fr.stable.fun.mark.Mutable;
import com.fr.stable.script.Function; import com.fr.stable.script.Function;
import com.fr.stable.script.FunctionDef; import com.fr.stable.script.FunctionDef;
@ -23,8 +25,49 @@ import java.util.*;
import java.util.zip.ZipEntry; import java.util.zip.ZipEntry;
import java.util.zip.ZipFile; import java.util.zip.ZipFile;
import javax.swing.DefaultListModel;
public abstract class FunctionConstants { public abstract class FunctionConstants {
/**
* 将函数分组插件中的函数添加到对应的列表中
* @param listModel
*/
public static void addFunctionGroupFromPlugins(DefaultListModel listModel){
//hugh:自定义函数分组
Set<Mutable> containers = ExtraClassManager.getInstance().getArray(FunctionDefContainer.MARK_STRING);
if(!containers.isEmpty()){
for(Mutable container : containers){
listModel.addElement(createFunctionGroup((FunctionDefContainer)container));
}
}
}
/**
* 创建一个新的分组
* @param container
* @return
*/
private static FunctionGroup createFunctionGroup(final FunctionDefContainer container){
return new FunctionGroup() {
@Override
public String getGroupName() {
return container.getGroupName();
}
@Override
public NameAndDescription[] getDescriptions() {
FunctionDef[] fs = container.getFunctionDefs();
int count = fs.length;
FunctionDefNAD[] nads = new FunctionDefNAD[count];
for (int i = 0; i < count; i ++) {
nads[i] = new FunctionDefNAD(fs[i]);
}
return nads;
}
};
}
public static FunctionGroup PLUGIN = new FunctionGroup() { public static FunctionGroup PLUGIN = new FunctionGroup() {
@Override @Override
public String getGroupName() { public String getGroupName() {
@ -96,7 +139,13 @@ public abstract class FunctionConstants {
} }
Collections.addAll(all, PLUGIN.getDescriptions()); Collections.addAll(all, PLUGIN.getDescriptions());
Collections.addAll(all, CUSTOM.getDescriptions()); Collections.addAll(all, CUSTOM.getDescriptions());
//hugh:自定义函数分组
Set<Mutable> containers = ExtraClassManager.getInstance().getArray(FunctionDefContainer.MARK_STRING);
if(!containers.isEmpty()){
for(Mutable container : containers){
Collections.addAll(all,createFunctionGroup(((FunctionDefContainer)container)).getDescriptions());
}
}
java.util.Collections.sort(all, NameAndDescriptionComparator); java.util.Collections.sort(all, NameAndDescriptionComparator);
return all.toArray(new NameAndDescription[all.size()]); return all.toArray(new NameAndDescription[all.size()]);

2
designer_base/src/com/fr/design/formula/FunctionDefNAD.java

@ -6,7 +6,7 @@ import com.fr.stable.StringUtils;
public class FunctionDefNAD extends AbstractNameAndDescription { public class FunctionDefNAD extends AbstractNameAndDescription {
private FunctionDef def; private FunctionDef def;
FunctionDefNAD(FunctionDef def) { public FunctionDefNAD(FunctionDef def) {
this.def = def; this.def = def;
} }

14
designer_base/src/com/fr/design/formula/FunctionManagerPane.java

@ -20,6 +20,7 @@ import com.fr.file.FunctionManagerProvider;
import com.fr.general.Inter; import com.fr.general.Inter;
import com.fr.general.NameObject; import com.fr.general.NameObject;
import com.fr.stable.Nameable; import com.fr.stable.Nameable;
import com.fr.stable.ProductConstants;
import com.fr.stable.project.ProjectConstants; import com.fr.stable.project.ProjectConstants;
import com.fr.stable.script.FunctionDef; import com.fr.stable.script.FunctionDef;
@ -159,10 +160,11 @@ public class FunctionManagerPane extends BasicPane {
descriptionArea.setWrapStyleWord(true); descriptionArea.setWrapStyleWord(true);
descriptionArea.setLineWrap(true); descriptionArea.setLineWrap(true);
northPane.add(descriptionArea); northPane.add(descriptionArea);
descriptionArea.setText(Inter.getLocText(new String[]{"Function-The_class_must_inherit","Fuction-The_compiled_class_should_be_copied_to",
"Function-J2EE_server", "Directory", "Function-Source_Code", "Example"}, String path1 = getEscapePath(File.separator + ProjectConstants.WEBINF_NAME + File.separator + ProjectConstants.CLASSES_NAME);
new String[]{" \"com.fr.script.AbstractFunction\".", "\n", " \"" + File.separator + "WEB-INF" + File.separator + "classes\"", String path2 = getEscapePath(FRContext.getCurrentEnv().getPath() + File.separator + ProjectConstants.CLASSES_NAME);
",", ".\n", ":" + FRContext.getCurrentEnv().getPath() + File.separator + "classes"})); descriptionArea.setText(Inter.getLocText("FR-Designer_Function_Description_Area_Text", path1, path2));
JPanel descriptionPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); //Description Pane JPanel descriptionPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); //Description Pane
this.add(descriptionPane, BorderLayout.SOUTH); this.add(descriptionPane, BorderLayout.SOUTH);
descriptionPane.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4)); descriptionPane.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
@ -171,6 +173,10 @@ public class FunctionManagerPane extends BasicPane {
descriptionPane.add(new JScrollPane(this.descriptionTextArea), BorderLayout.CENTER); descriptionPane.add(new JScrollPane(this.descriptionTextArea), BorderLayout.CENTER);
} }
private String getEscapePath(String path) {
return path.replace("\\", "\\\\");
}
private ActionListener createEditorButtonActionListener() { private ActionListener createEditorButtonActionListener() {
return new ActionListener() { return new ActionListener() {
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {

3
designer_base/src/com/fr/design/fun/ConnectionProvider.java

@ -12,7 +12,8 @@ public interface ConnectionProvider extends Mutable {
public static final String XML_TAG = "ConnectionProvider"; public static final String XML_TAG = "ConnectionProvider";
int CURRENT_LEVEL = 1; // 2016-12-14 1 -> 2 , 增加connection.feature方法导致不兼容.
int CURRENT_LEVEL = 2;
/** /**
* 数据连接弹出菜单的名字 * 数据连接弹出菜单的名字

41
designer_base/src/com/fr/design/fun/ExtraButtonToolBarProvider.java

@ -0,0 +1,41 @@
package com.fr.design.fun;
import com.fr.form.ui.Widget;
import com.fr.stable.fun.mark.Mutable;
import javax.swing.*;
import java.awt.*;
/**
* 报表工具栏设计器端拓展用于配置按钮额外属性
* Created by harry on 2016-12-23.
*/
public interface ExtraButtonToolBarProvider extends Mutable {
String XML_TAG = "ExtraButtonToolBarProvider";
int CURRENT_LEVEL = 1;
/**
* 用于添加属性面板
*
* @param centerPane 面板
*/
void updateCenterPane(JPanel centerPane);
/**
* 更新界面
*
* @param widget 控件
* @param card 卡片布局
* @param centerPane 面板
*/
void populate(Widget widget, CardLayout card, JPanel centerPane);
/**
* 保存界面设置
*
* @param widget 控件
*/
void update(Widget widget);
}

2
designer_base/src/com/fr/design/fun/HyperlinkProvider.java

@ -10,7 +10,7 @@ import com.fr.stable.fun.mark.Mutable;
public interface HyperlinkProvider extends Mutable { public interface HyperlinkProvider extends Mutable {
String XML_TAG = "HyperlinkProvider"; String XML_TAG = "HyperlinkProvider";
int CURRENT_LEVEL = 1; int CURRENT_LEVEL = 2;
/** /**

19
designer_base/src/com/fr/design/fun/impl/AbstractExtraButtonToolBarProvider.java

@ -0,0 +1,19 @@
package com.fr.design.fun.impl;
import com.fr.design.fun.ExtraButtonToolBarProvider;
import com.fr.stable.fun.impl.AbstractProvider;
import com.fr.stable.fun.mark.API;
/**
* Created by harry on 2016-12-23.
*/
@API(level = ExtraButtonToolBarProvider.CURRENT_LEVEL)
public abstract class AbstractExtraButtonToolBarProvider extends AbstractProvider implements ExtraButtonToolBarProvider {
public int currentAPILevel() {
return ExtraButtonToolBarProvider.CURRENT_LEVEL;
}
public String mark4Provider() {
return getClass().getName();
}
}

5
designer_base/src/com/fr/design/gui/controlpane/JListControlPane.java

@ -109,6 +109,10 @@ public abstract class JListControlPane extends JControlPane {
} }
protected void doBeforePopulate(ListModelElement el, Object obj) {
}
@Override @Override
protected ShortCut4JControlPane addItemShortCut() { protected ShortCut4JControlPane addItemShortCut() {
ShortCut addItemShortCut; ShortCut addItemShortCut;
@ -832,6 +836,7 @@ public abstract class JListControlPane extends JControlPane {
cardPane.add(updatePanes[i], String.valueOf(i)); cardPane.add(updatePanes[i], String.valueOf(i));
} }
card.show(cardPane, String.valueOf(i)); card.show(cardPane, String.valueOf(i));
doBeforePopulate(el, ob2Populate);
updatePanes[i].populateBean(ob2Populate); updatePanes[i].populateBean(ob2Populate);
doWhenPopulate(updatePanes[i]); doWhenPopulate(updatePanes[i]);
break; break;

3
designer_base/src/com/fr/design/gui/date/UIDatePicker.java

@ -31,6 +31,7 @@ public class UIDatePicker extends UIComboBox implements Serializable {
public static final int STYLE_CN_DATE1 = 1; public static final int STYLE_CN_DATE1 = 1;
public static final int STYLE_CN_DATETIME = 2; public static final int STYLE_CN_DATETIME = 2;
public static final int STYLE_CN_DATETIME1 = 3; public static final int STYLE_CN_DATETIME1 = 3;
public static final int STYLE_EN_DATE = 4;
public boolean isWillHide = false; public boolean isWillHide = false;
/** /**
* 日期格式类型 * 日期格式类型
@ -113,6 +114,8 @@ public class UIDatePicker extends UIComboBox implements Serializable {
return new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); return new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
case STYLE_CN_DATETIME1: case STYLE_CN_DATETIME1:
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
case STYLE_EN_DATE:
return new SimpleDateFormat("MM/dd/yyyy");
default: default:
throw new UnsupportedOperationException( throw new UnsupportedOperationException(
"invalid formatStyle parameter!"); "invalid formatStyle parameter!");

3
designer_base/src/com/fr/design/gui/frpane/HyperlinkGroupPane.java

@ -13,6 +13,7 @@ import com.fr.js.JavaScript;
import com.fr.js.NameJavaScript; import com.fr.js.NameJavaScript;
import com.fr.js.NameJavaScriptGroup; import com.fr.js.NameJavaScriptGroup;
import com.fr.plugin.PluginManager; import com.fr.plugin.PluginManager;
import com.fr.stable.ListMap;
import com.fr.stable.Nameable; import com.fr.stable.Nameable;
import java.util.ArrayList; import java.util.ArrayList;
@ -34,7 +35,7 @@ public class HyperlinkGroupPane extends JListControlPane {
* @return 返回Nameable按钮数组. * @return 返回Nameable按钮数组.
*/ */
public NameableCreator[] createNameableCreators() { public NameableCreator[] createNameableCreators() {
Map<String, NameableCreator> nameCreators = new TreeMap<String, NameableCreator>(); Map<String, NameableCreator> nameCreators = new ListMap<>();
NameableCreator[] creators = DesignModuleFactory.getHyperlinkGroupType().getHyperlinkCreators(); NameableCreator[] creators = DesignModuleFactory.getHyperlinkGroupType().getHyperlinkCreators();
for (NameableCreator creator : creators) { for (NameableCreator creator : creators) {
nameCreators.put(creator.menuName(), creator); nameCreators.put(creator.menuName(), creator);

33
designer_base/src/com/fr/design/gui/ibutton/UIButtonGroup.java

@ -28,6 +28,7 @@ import com.fr.design.utils.gui.GUICoreUtils;
public class UIButtonGroup<T> extends JPanel implements GlobalNameObserver { public class UIButtonGroup<T> extends JPanel implements GlobalNameObserver {
private boolean isTwoLine = false; private boolean isTwoLine = false;
private boolean isFourLine = false;
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
protected List<UIToggleButton> labelButtonList; protected List<UIToggleButton> labelButtonList;
protected int selectedIndex = -1; protected int selectedIndex = -1;
@ -176,6 +177,10 @@ public class UIButtonGroup<T> extends JPanel implements GlobalNameObserver {
this.isTwoLine = true; this.isTwoLine = true;
} }
public void setFourLine() {
this.isFourLine = true;
}
/** /**
* paintComponent * paintComponent
* *
@ -201,32 +206,40 @@ public class UIButtonGroup<T> extends JPanel implements GlobalNameObserver {
} }
Graphics2D g2d = (Graphics2D) g; Graphics2D g2d = (Graphics2D) g;
g2d.setColor(UIConstants.LINE_COLOR); g2d.setColor(UIConstants.LINE_COLOR);
if (!isTwoLine) { if (isTwoLine) {
int width = 0; int width = 0;
for (int i = 0; i < labelButtonList.size() - 1; i++) { int upCount = (labelButtonList.size() - 1) / 2 + 1;
for (int i = 0; i < upCount - 1; i++) {
width += labelButtonList.get(i).getWidth() + 1; width += labelButtonList.get(i).getWidth() + 1;
int height = labelButtonList.get(i).getHeight(); int height = labelButtonList.get(i).getHeight() * 2 + 1;
g.drawLine(width, 0, width, height); g.drawLine(width, 0, width, height);
} }
width += labelButtonList.get(labelButtonList.size() - 1).getWidth() + 1; width += labelButtonList.get(upCount).getWidth() + 1;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.drawRoundRect(0, 0, width, getHeight() - 1, UIConstants.ARC, UIConstants.ARC); g2d.drawRoundRect(0, 0, width, getHeight() - 1, UIConstants.ARC, UIConstants.ARC);
g2d.drawLine(0, getHeight() / 2, width, getHeight() / 2);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
} else if (isFourLine) {
// 4 * 1
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.drawRoundRect(0, 0, getWidth() - 1, getHeight() - 1, UIConstants.ARC, UIConstants.ARC);
for (int i = 1; i <= 3; i++) {
g2d.drawLine(0, getHeight() / 4 * i, getWidth() - 1, getHeight() / 4 * i);
}
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF); g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
} else { } else {
int width = 0; int width = 0;
int upCount = (labelButtonList.size() - 1) / 2 + 1; for (int i = 0; i < labelButtonList.size() - 1; i++) {
for (int i = 0; i < upCount - 1; i++) {
width += labelButtonList.get(i).getWidth() + 1; width += labelButtonList.get(i).getWidth() + 1;
int height = labelButtonList.get(i).getHeight() * 2 + 1; int height = labelButtonList.get(i).getHeight();
g.drawLine(width, 0, width, height); g.drawLine(width, 0, width, height);
} }
width += labelButtonList.get(upCount).getWidth() + 1; width += labelButtonList.get(labelButtonList.size() - 1).getWidth() + 1;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.drawRoundRect(0, 0, width, getHeight() - 1, UIConstants.ARC, UIConstants.ARC); g2d.drawRoundRect(0, 0, width, getHeight() - 1, UIConstants.ARC, UIConstants.ARC);
g2d.drawLine(0, getHeight() / 2, width, getHeight() / 2);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF); g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
} }

3
designer_base/src/com/fr/design/gui/ibutton/UIColorButton.java

@ -30,6 +30,7 @@ public class UIColorButton extends UIButton implements PopupHider, UIObserver, G
private static final int SIZE_2 = 2; private static final int SIZE_2 = 2;
private static final int SIZE_4 = 4; private static final int SIZE_4 = 4;
private static final int SIZE_6 = 6; private static final int SIZE_6 = 6;
private static final int POPUP_MENU_SHIFT = -70;
private Color color = Color.BLACK; private Color color = Color.BLACK;
private ColorControlWindow popupWin; private ColorControlWindow popupWin;
private EventListenerList colorChangeListenerList = new EventListenerList(); private EventListenerList colorChangeListenerList = new EventListenerList();
@ -126,7 +127,7 @@ public class UIColorButton extends UIButton implements PopupHider, UIObserver, G
popupWin = this.getColorControlWindow(); popupWin = this.getColorControlWindow();
GUICoreUtils.showPopupMenu(popupWin, this, 0, this.getSize().height); GUICoreUtils.showPopupMenu(popupWin, this, POPUP_MENU_SHIFT, this.getSize().height);
} }
/** /**

8
designer_base/src/com/fr/design/gui/icombobox/UIComboBox.java

@ -160,6 +160,14 @@ public class UIComboBox extends JComboBox implements UIObserver, GlobalNameObser
uiObserverListener = listener; uiObserverListener = listener;
} }
public void removeChangeListener(){
uiObserverListener = null;
}
public UIObserverListener getUiObserverListener(){
return uiObserverListener;
}
/** /**
* @return * @return
*/ */

7
designer_base/src/com/fr/design/gui/icontainer/UIResizableContainer.java

@ -5,6 +5,7 @@ import com.fr.design.constants.UIConstants;
import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.DesignerContext;
import com.fr.stable.Constants; import com.fr.stable.Constants;
import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.stable.collections.utils.MathUtils;
import javax.swing.*; import javax.swing.*;
import java.awt.*; import java.awt.*;
@ -14,10 +15,12 @@ import java.awt.event.MouseMotionListener;
public class UIResizableContainer extends JPanel { public class UIResizableContainer extends JPanel {
private static final long serialVersionUID = 1854340560790476907L; private static final long serialVersionUID = 1854340560790476907L;
private static final int MAX_PARA_HEIGHT = 240;
private int containerWidth = 240; private int containerWidth = 240;
private int preferredWidth = 240; private int preferredWidth = 240;
private int toolPaneY = 300; private int toolPaneY = 300;
private int toolPaneHeight = 10; private int toolPaneHeight = 10;
private int bottomHeight = 30;
private JComponent upPane; private JComponent upPane;
private JComponent downPane; private JComponent downPane;
@ -139,7 +142,7 @@ public class UIResizableContainer extends JPanel {
* @param height * @param height
*/ */
public void setParameterHeight(int height) { public void setParameterHeight(int height) {
paraHeight = hasParameterPane? height : 0; paraHeight = hasParameterPane? Math.min(height, MAX_PARA_HEIGHT) : 0;
refreshContainer(); refreshContainer();
} }
@ -208,7 +211,7 @@ public class UIResizableContainer extends JPanel {
if(isDownPaneVisible){ if(isDownPaneVisible){
upPane.setBounds(0, 0, containerWidth - toolPaneHeight, toolPaneY); upPane.setBounds(0, 0, containerWidth - toolPaneHeight, toolPaneY);
horizontToolPane.setBounds(0, toolPaneY, containerWidth - toolPaneHeight, toolPaneHeight); horizontToolPane.setBounds(0, toolPaneY, containerWidth - toolPaneHeight, toolPaneHeight);
downPane.setBounds(0, toolPaneY + toolPaneHeight, containerWidth - toolPaneHeight, parent.getHeight() - toolPaneY - toolPaneHeight-30); downPane.setBounds(0, toolPaneY + toolPaneHeight, containerWidth - toolPaneHeight, parent.getHeight() - toolPaneY - toolPaneHeight - bottomHeight);
verticalToolPane.setBounds(containerWidth - toolPaneHeight, 0, toolPaneHeight, getHeight()); verticalToolPane.setBounds(containerWidth - toolPaneHeight, 0, toolPaneHeight, getHeight());
}else{ }else{
upPane.setBounds(0, 0, containerWidth - toolPaneHeight, getHeight()); upPane.setBounds(0, 0, containerWidth - toolPaneHeight, getHeight());

54
designer_base/src/com/fr/design/gui/itable/AbstractPropertyTable.java

@ -26,32 +26,39 @@ import com.fr.general.Inter;
*/ */
public abstract class AbstractPropertyTable extends JTable { public abstract class AbstractPropertyTable extends JTable {
// 属性分 // // 所有数据组, 把数据分组,一个可折叠的项里面的所有行 为一
protected ArrayList<PropertyGroup> groups; protected ArrayList<PropertyGroup> groups;
protected TableModel default_table_model;
// 属性表被选中的行加一个浅蓝色的背景 // 属性表被选中的行加一个浅蓝色的背景
public static final Color PROPERTY_SELECTION_BACKGROUND = new Color(153, 204, 255); public static final Color PROPERTY_SELECTION_BACKGROUND = new Color(153, 204, 255);
// 属性表的行高 // 属性表的行高
public static final int PROPERTY_TABLE_ROW_HEIGHT = 22; public static final int PROPERTY_TABLE_ROW_HEIGHT = 22;
private static final int PROPERTY_ICON_WIDTH = 10;
public AbstractPropertyTable() { public AbstractPropertyTable() {
this.setRowHeight(PROPERTY_TABLE_ROW_HEIGHT); this.setTableProperties();
this.initPopup();
this.setModel(new DefaultTableModel());
}
private void setTableProperties() {
JTableHeader header = getTableHeader(); JTableHeader header = getTableHeader();
header.setReorderingAllowed(false); header.setReorderingAllowed(false);
header.setPreferredSize(new Dimension(0, PROPERTY_TABLE_ROW_HEIGHT)); header.setPreferredSize(new Dimension(0, PROPERTY_TABLE_ROW_HEIGHT));
header.setDefaultRenderer(new HeaderRenderer()); header.setDefaultRenderer(new HeaderRenderer());
this.setRowHeight(PROPERTY_TABLE_ROW_HEIGHT);
this.setGridColor(new Color(212, 208, 200)); this.setGridColor(new Color(212, 208, 200));
this.setSelectionBackground(PROPERTY_SELECTION_BACKGROUND); this.setSelectionBackground(PROPERTY_SELECTION_BACKGROUND);
this.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); this.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
this.setColumnSelectionAllowed(false); this.setColumnSelectionAllowed(false);
this.setRowSelectionAllowed(true); this.setRowSelectionAllowed(true);
this.setFillsViewportHeight(true); this.setFillsViewportHeight(true);
this.initPopup();
default_table_model = new DefaultTableModel();
this.setModel(default_table_model);
this.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); this.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
} }
/**
* 在这个函数里面初始化表格数据再repaint
* @param source
*/
public abstract void initPropertyGroups(Object source); public abstract void initPropertyGroups(Object source);
public void fireValueChanged(Object old_value, boolean success, Object newValue) { public void fireValueChanged(Object old_value, boolean success, Object newValue) {
@ -64,12 +71,15 @@ public abstract class AbstractPropertyTable extends JTable {
@Override @Override
public TableCellRenderer getCellRenderer(int row, int column) { public TableCellRenderer getCellRenderer(int row, int column) {
//如果数据组不为空
if (groups != null) { if (groups != null) {
Point pIndex = getGroupIndex(row); Point pIndex = getGroupIndex(row);
if (pIndex == null){ if (pIndex == null){
return super.getCellRenderer(row, column); return super.getCellRenderer(row, column);
} }
//拿出当前行所在的那个属性组
PropertyGroup group = groups.get(pIndex.x); PropertyGroup group = groups.get(pIndex.x);
//如果是标题行
if (pIndex.y == 0) { if (pIndex.y == 0) {
if (column == 0) { if (column == 0) {
return group.getFirstRenderer(); return group.getFirstRenderer();
@ -77,11 +87,13 @@ public abstract class AbstractPropertyTable extends JTable {
return group.getSecondRenderer(); return group.getSecondRenderer();
} }
} else { } else {
//如果是非标题行第一列,采用默认渲染器
if (column == 0) { if (column == 0) {
return super.getCellRenderer(row, column); return super.getCellRenderer(row, column);
} else { } else {
TableCellRenderer renderer = group.getModel().getRenderer(pIndex.y - 1); TableCellRenderer renderer = group.getModel().getRenderer(pIndex.y - 1);
if (renderer instanceof Component) { if (renderer instanceof Component) {
//如果这个渲染器是继承自Component,根据当前行列是否可编辑决定该控件是否可用
((Component) renderer).setEnabled(isCellEditable(row, column)); ((Component) renderer).setEnabled(isCellEditable(row, column));
} }
return renderer; return renderer;
@ -115,6 +127,12 @@ public abstract class AbstractPropertyTable extends JTable {
} }
} }
/**
* 看懂了写个注释先
* 获取当前row行的Point(x, y), x代表当前row行是属于groups中的第x个组y代表当前row行所在的第x组里面的第y行
* @param row
* @return
*/
private Point getGroupIndex(int row) { private Point getGroupIndex(int row) {
int count = 0; int count = 0;
for (int i = 0; i < groups.size(); i++) { for (int i = 0; i < groups.size(); i++) {
@ -135,6 +153,10 @@ public abstract class AbstractPropertyTable extends JTable {
this.addMouseListener(new MouseAdapter() { this.addMouseListener(new MouseAdapter() {
/**
* 如果点到标题行就要触发折叠事件
* @param e
*/
@Override @Override
public void mouseClicked(MouseEvent e) { public void mouseClicked(MouseEvent e) {
if (!e.isPopupTrigger() && groups != null) { if (!e.isPopupTrigger() && groups != null) {
@ -148,13 +170,18 @@ public abstract class AbstractPropertyTable extends JTable {
} }
} }
/**
* 这个mousePressed和上面的mouseClicked唯一不同的地方是单双击和e.getX() < 10 的判断
* 这个意思应该就是说点到图标加号减号立即触发折叠效果否则点其他处要双击才能触发
* @param e
*/
@Override @Override
public void mousePressed(MouseEvent e) { public void mousePressed(MouseEvent e) {
if (!e.isPopupTrigger() && groups != null) { if (!e.isPopupTrigger() && groups != null) {
int row = AbstractPropertyTable.super.rowAtPoint(e.getPoint()); int row = AbstractPropertyTable.super.rowAtPoint(e.getPoint());
if (row != -1) { if (row != -1) {
Point pIndex = getGroupIndex(row); Point pIndex = getGroupIndex(row);
if (pIndex.y == 0 && e.getClickCount() == 1 && e.getX() < 10) { if (pIndex.y == 0 && e.getClickCount() == 1 && e.getX() < PROPERTY_ICON_WIDTH) {
toggleCollapse(pIndex.x); toggleCollapse(pIndex.x);
} }
} }
@ -163,16 +190,27 @@ public abstract class AbstractPropertyTable extends JTable {
}); });
} }
/**
* 切换属性组折叠属性true/false
* @param groupIndex
*/
private void toggleCollapse(int groupIndex) { private void toggleCollapse(int groupIndex) {
PropertyGroup group = groups.get(groupIndex); PropertyGroup group = groups.get(groupIndex);
group.setCollapsed(!group.isCollapsed()); group.setCollapsed(!group.isCollapsed());
//这里获取表格的父控件是为了当表格被折叠了后,装表格的父控件也要相应的重新布局一下
//比如折叠之后表格行数应该比原来的少,占用父容器空间应该小点,不重新布局父容器,表格大小不会改变
Container parent = AbstractPropertyTable.this.getParent(); Container parent = AbstractPropertyTable.this.getParent();
if (parent != null) { if (parent != null) {
parent.doLayout(); // parent.doLayout(); // 这里还是用revalidate吧。。daLayout有时候会失效不知道为什么
parent.revalidate();
} }
repaint(); repaint();
} }
/**
* BeanTableModel类提供表格数据
* 它的所有数据来源均来自PropertyGroup中的AbstractPropertyGroupModel中的descriptor
*/
public class BeanTableModel extends AbstractTableModel { public class BeanTableModel extends AbstractTableModel {
@Override @Override

10
designer_base/src/com/fr/design/gui/itable/PropertyGroup.java

@ -4,11 +4,14 @@ import javax.swing.table.TableCellRenderer;
import com.fr.design.beans.GroupModel; import com.fr.design.beans.GroupModel;
/**
* PropertyGroup类描述了属性表中一个属性分组
*/
public class PropertyGroup { public class PropertyGroup {
private GroupModel model; private GroupModel model; // 描述这个属性组中的数据model
private String name; private String name; // 这组属性的标题名称
private boolean collapsed; private boolean collapsed; // 这组属性是否折叠
private GroupRenderer renderer1; private GroupRenderer renderer1;
private GroupRenderer renderer2; private GroupRenderer renderer2;
@ -55,4 +58,5 @@ public class PropertyGroup {
public TableCellRenderer getSecondRenderer() { public TableCellRenderer getSecondRenderer() {
return renderer2; return renderer2;
} }
} }

BIN
designer_base/src/com/fr/design/images/reportcolumns/col_en.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
designer_base/src/com/fr/design/images/reportcolumns/row_en.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

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

@ -100,7 +100,7 @@ FR-Designer_FS_Close_Other_Templates=
FR-Designer_File= FR-Designer_File=
FR-Designer_Filter_Conditions= FR-Designer_Filter_Conditions=
FR-Designer_Finish-Modify-Share= FR-Designer_Finish-Modify-Share=
FR-Designer_Fit= FR-Designer_Fit-App=
FR-Designer_Font-Family= FR-Designer_Font-Family=
FR-Designer_Font-Size= FR-Designer_Font-Size=
FR-Designer_Forbid_Drag_into_Adapt_Pane=Forbid Drag into Para Pane FR-Designer_Forbid_Drag_into_Adapt_Pane=Forbid Drag into Para Pane
@ -357,6 +357,7 @@ FR-Designer_KeyPoint=KeyPoint
FR-Designer_loadedTreeModel=loadedTreeModel FR-Designer_loadedTreeModel=loadedTreeModel
FR-Designer-Failed_to_load_the_plugin=Failed to load the plugin\uFF0Cplease update the plugin\: FR-Designer-Failed_to_load_the_plugin=Failed to load the plugin\uFF0Cplease update the plugin\:
FR-Designer-Plugin_Please_Update_Jar= FR-Designer-Plugin_Please_Update_Jar=
FR-Designer-Invalid_Page_Number=Invalid Page Number
FR-Designer_XMLA_Database=Database FR-Designer_XMLA_Database=Database
FR-Designer_XMLA_UserName=User name FR-Designer_XMLA_UserName=User name
FR-Designer_XMLA_Password=Password FR-Designer_XMLA_Password=Password
@ -487,6 +488,10 @@ FR-Designer-LayerPageReport_PageQuery=
FR-Designer-LayerPageReport_Define_PageQuerySQL= FR-Designer-LayerPageReport_Define_PageQuerySQL=
FR-Designer_Event= FR-Designer_Event=
FR-Designer_Properties= FR-Designer_Properties=
FR-Designer_Permissions_Edition=Permissions Edition
FR-Designer_Export_Excel_Page=Page
FR-Designer_Export_Excel_Simple=Simple
FR-Designer_Export_Excel_PageToSheet=Page To Sheet
FR-Designer_Export_failed=Export failed FR-Designer_Export_failed=Export failed
FR-Designer_Exported_successfully=Exported successfully FR-Designer_Exported_successfully=Exported successfully
FR-Designer_Exporting=Exporting FR-Designer_Exporting=Exporting
@ -510,14 +515,56 @@ FR-Designer_Create_Tree=
FR-Designer_Set_Callback_Function= FR-Designer_Set_Callback_Function=
FR-Designer_ConfirmDialog_Content= FR-Designer_ConfirmDialog_Content=
FR-Designer_ConfirmDialog_Title= FR-Designer_ConfirmDialog_Title=
FR-Designer_Background_Null=
FR-Designer_Background_Color= FR-Designer_FormulaPane_Tips=Tips\:You_Can_Input_B1_To_Input_The_Data_Of_The_First_Row_Second_Column
FR-Designer_Background_Texture= FR-Designer_FormulaPane_Variables=Variables
FR-Designer_Background_Pattern= FR-Designer_FormulaPane_Formula_Description=Formula_Description
FR-Designer_Background_Gradient_Color= FR-Designer_FormulaPane_Function_Detail=Function Detail
FR-Designer_Background_Image= FR-Designer_FormulaPane_Search=Search
FR-Designer_Background_Clear=
FR-Designer_Background_Image_Select=
FR-Designer_Tab_carousel= FR-Designer_Tab_carousel=
FR-Designer_setCarousel= FR-Designer_setCarousel=
FR-Designer_carouselInterval= FR-Designer_carouselInterval=
FR-Designer_ClassName_panel=ClassName
FR-Designer_Description_panel=Description
FR-Designer_Edit_panel=Edit
FR-Designer_Property_panel=Property
FR-Designer_Select_panel=Select
FR-Designer_LayoutTable_Column_Width=160
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=
FR-Designer_Row_Icon_File_Name=row.png
FR-Designer_Center_Display=Center
FR-Designer_Left_Display=Left
FR-Designer_About_Version=Version
FR-Designer_About_CopyRight=Copy Right
FR-Designer_Service_Phone=Service Phone
FR-Designer_Allow_Blank=Allow Blank
FR-Designer_PageSetup_Page=Page
FR-Designer_Custom_Job_Description=Description
FR-Designer_Property=Property
FR-Designer_ClassName=Class Name
FR-Designer_Polyblock_Edit=Polyblock Edit
FR-Designer_Function_Description_Area_Text=The class must inherit 'com.fr.script.AbstractFunction'. The compiled class should be copied to\nJ2EE server '{R1}WEB-INF{R2}classes' directory.\nAdd the source code(.java file) into the same folder if need.\nExample: {R3}classes}
FR-Designer_PageSetup_Horizontal=Horizontal
FR-Designer_PageSetup_Vertical=Vertical
FR-Designer_Gradient_Direction=Gradient Direction
FR-Designer_Drag_To_Select_Gradient=\\ Drag the button below to choose gradient area, click it to choose color
FR-Designer_Display_Value=Display Value
FR-Designer_Actual_Value=Actual Value
FR-Designer_CellWrite_ToolTip=Tool Tip of Cell
FR-Designer_Show_Content=Show content
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_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.
FR-Designer_WidgetOrder=Widget Order
FR-Designer_Mobile_Form_Analysis_Annotation=annotation\: You can use this attribute to control the analysis of the form in the APP.
FR-Designer_Mobile_Report_Analysis_Annotation=annotation\: You can use this attribute to control the analysis of the report in the APP, only to support the paging preview, fill in the preview of the property is invalid.

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

@ -73,8 +73,8 @@ FR-Designer_Button-Type=Button Type
FR-Designer_CardLayout=TabLayout FR-Designer_CardLayout=TabLayout
FR-Designer_Cell=cell FR-Designer_Cell=cell
FR-Designer_Chart_Cell=Chart Hyperlink-Link Cell FR-Designer_Chart_Cell=Chart Hyperlink-Link Cell
FR-Designer_Chart_Float=Chart Hyperlink-Floating Elements FR-Designer_Chart_Float=Chart Hyperlink-Floating Element
FR-Designer_Chart_Float_chart=Chart Hyperlink-Floating-window Chart FR-Designer_Chart_Float_chart=Chart Hyperlink-Floating Chart
FR-Designer_Check-for-Updates=Check for Updates FR-Designer_Check-for-Updates=Check for Updates
FR-Designer_Choose-Data-Confusion-Tip=\ Please Choose the field needed to be confused and then preview FR-Designer_Choose-Data-Confusion-Tip=\ Please Choose the field needed to be confused and then preview
FR-Designer_Close=close FR-Designer_Close=close
@ -100,6 +100,7 @@ FR-Designer_FS_Close_Other_Templates=Close other templates
FR-Designer_File=file FR-Designer_File=file
FR-Designer_Filter_Conditions=Filter condition FR-Designer_Filter_Conditions=Filter condition
FR-Designer_Finish-Modify-Share=Finish Modification And Share FR-Designer_Finish-Modify-Share=Finish Modification And Share
FR-Designer_Fit-App=App self-adaption
FR-Designer_Fit=self-adaption FR-Designer_Fit=self-adaption
FR-Designer_Font-Family=Font name FR-Designer_Font-Family=Font name
FR-Designer_Font-Size=Font size FR-Designer_Font-Size=Font size
@ -118,7 +119,7 @@ FR-Designer_Get-CubeGetting cube=
FR-Designer_Help=Help FR-Designer_Help=Help
FR-Designer_Hide=Hide FR-Designer_Hide=Hide
FR-Designer_Hyperlink=Hyperlink FR-Designer_Hyperlink=Hyperlink
FR-Designer_Hyperlink-Form_link=Current form object FR-Designer_Hyperlink-Form_link=Current dashboard object
FR-Designer_IDCard=IDCard FR-Designer_IDCard=IDCard
FR-Designer_Icon=Icon FR-Designer_Icon=Icon
FR-Designer_Index=index FR-Designer_Index=index
@ -126,7 +127,7 @@ FR-Designer_Input_Rule=Input Rule
FR-Designer_Language_Default=Default FR-Designer_Language_Default=Default
FR-Designer_Layout=Layout FR-Designer_Layout=Layout
FR-Designer_Layout-HBox=Horizontal Box Layout FR-Designer_Layout-HBox=Horizontal Box Layout
FR-Designer_Layout-Index=Layout Index FR-Designer_Layout-Index=Index
FR-Designer_Layout_Constraints=Layout Constraints FR-Designer_Layout_Constraints=Layout Constraints
FR-Designer_Length=Length FR-Designer_Length=Length
FR-Designer_Loading_Data=Loading Data FR-Designer_Loading_Data=Loading Data
@ -173,15 +174,15 @@ FR-Designer_Search=Search
FR-Designer_Set=Set FR-Designer_Set=Set
FR-Designer_Share-Template=Share Template FR-Designer_Share-Template=Share Template
FR-Designer_Simple_general=Simple custom query 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_Start-Date=Start Date
FR-Designer_Subscript=Subscript FR-Designer_Subscript=Subscript
FR-Designer_Superscript=Superscript FR-Designer_Superscript=Superscript
FR-Designer_Support_QQ=Support online FR-Designer_Support_QQ=Support online
FR-Designer_Swatch=Swatch FR-Designer_Swatch=Sample
FR-Designer_Tab_title=Tab title FR-Designer_Tab_title=Tab title
FR-Designer_TableData=Data set FR-Designer_TableData=Data set
FR-Designer_Thank_guest=Special Thanks FR-Designer_Thank_guest=Special thanks to
FR-Designer_Thanks-To=Thanks FR-Designer_Thanks-To=Thanks
FR-Designer_Title=Title FR-Designer_Title=Title
FR-Designer_Total=Total FR-Designer_Total=Total
@ -190,8 +191,8 @@ FR-Designer_Underline=Underline
FR-Designer_Used=Recently Used FR-Designer_Used=Recently Used
FR-Designer_User-defined-MDX=Custom MDX query FR-Designer_User-defined-MDX=Custom MDX query
FR-Designer_SampleText=SampleText SampleText FR-Designer_SampleText=SampleText SampleText
FR-Designer_Vertical-LeftToRight=Vertical Text (Left to Right) FR-Designer_Vertical-LeftToRight=Vertical Text (left to right)
FR-Designer_Vertical-RightToLeft=Vertical Text (Right To Left) FR-Designer_Vertical-RightToLeft=Vertical Text (right to left)
FR-Designer_VerticalBoxLayout=Vertical Box Layout FR-Designer_VerticalBoxLayout=Vertical Box Layout
FR-Designer_Visible=Visible FR-Designer_Visible=Visible
FR-Designer_WLayout-Border-ToolTips=The complete border layout container\uFF0Cis composed of central, eastern, western, northern and southern parts. You can adjust the height of the northern and southern ones and the width of the eastern and western ones. FR-Designer_WLayout-Border-ToolTips=The complete border layout container\uFF0Cis composed of central, eastern, western, northern and southern parts. You can adjust the height of the northern and southern ones and the width of the eastern and western ones.
@ -358,6 +359,7 @@ FR-Designer_KeyPoint=KeyPoint
FR-Designer_loadedTreeModel=loadedTreeModel FR-Designer_loadedTreeModel=loadedTreeModel
FR-Designer-Failed_to_load_the_plugin=Failed to load the plugin\uFF0Cplease update the plugin\: 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
FR-Designer-Invalid_Page_Number=Invalid Page Number
FR-Designer_XMLA_Database=DB FR-Designer_XMLA_Database=DB
FR-Designer_XMLA_UserName=User name FR-Designer_XMLA_UserName=User name
FR-Designer_XMLA_Password=Password FR-Designer_XMLA_Password=Password
@ -413,12 +415,12 @@ FR-Designer_Unit_PT=Pound
FR-Designer-Write_Auto_Stash=auto stash FR-Designer-Write_Auto_Stash=auto stash
FR-Designer_Printer_Native_Button=Native Print FR-Designer_Printer_Native_Button=Native Print
FR-Designer_Event_ShowWidgets=Display widgets directly FR-Designer_Event_ShowWidgets=Display widgets directly
FR-Designer_Current_Preview_Rows=Current Number of Preview Rows FR-Designer_Current_Preview_Rows=Current Number of Preview Rows
FR-Designer_Data=Data FR-Designer_Data=Data
FR-Designer_Error=Error FR-Designer_Error=Error
FR-Designer_formDesignerModule=Form Designer FR-Designer_formDesignerModule=Form Designer
FR-Designer-Website_Url=http\://www.finereport.com/en FR-Designer-Website_Url=http\://www.finereport.com/en
FR-Designer-BBSLogin_Download-Unlogin-Tip= FR-Designer-BBSLogin_Download-Unlogin-Tip=Login to download
FR-Designer-App_ReLayout=AppRelayout FR-Designer-App_ReLayout=AppRelayout
FR-Designer_Mobile-Attr=Mobile Attr FR-Designer_Mobile-Attr=Mobile Attr
FR-Designer_Mobile-Vertical=Vertical Screen FR-Designer_Mobile-Vertical=Vertical Screen
@ -432,42 +434,42 @@ FR-Designer_COMMUNITY_NEED=need
FR-Designer_COMMUNITY_BUG=bug report FR-Designer_COMMUNITY_BUG=bug report
FR-Designer_COMMUNITY_SIGN=sign FR-Designer_COMMUNITY_SIGN=sign
FR-Designer_COMMUNITY_QUESTIONS=questions FR-Designer_COMMUNITY_QUESTIONS=questions
FR-Designer_Mobile-Zoom=zoom FR-Designer_Mobile-Zoom=Zoom
FR-Designer_Mobile-Open=Open FR-Designer_Mobile-Open=Open
FR-Designer_Mobile-Warning= FR-Designer_Mobile-Warning=Max height cannot exceed 80% of display area
FR-Designer_Button-OK=OK FR-Designer_Button-OK=OK
FR-Designer_Button-Cancel=Cancel FR-Designer_Button-Cancel=Cancel
FR-Designer_Write-Save-Formula=Preserve formula when fill FR-Designer_Write-Save-Formula=Preserve formula when fill
FR-Designer_Export-Save-Formula=Preserve formula when export FR-Designer_Export-Save-Formula=Preserve formula when export
FR-Designer_Form-Fit-Tip=Fit Plugin FR-Designer_Form-Fit-Tip=Adaptive plug-in
FR-Designer_Form-Frozen-Tip=When Use Form Frozen, Suggest Install FR-Designer_Form-Frozen-Tip=When use Frozen, suggest install
FR-Designer_Form-Forzen-Speed=To Speed UP. FR-Designer_Form-Forzen-Speed=, use bidirectional and horizontal adaption to improve the speed.
FR-Designer_Attention=attention FR-Designer_Attention=Attention
FR-Designer_Forbid_Widgets_Intersects=Forbid Widgets Intersects FR-Designer_Forbid_Widgets_Intersects=Forbid component overlap
FR-Designer_Widget_Scaling_Mode_Fit=Area-Fit FR-Designer_Widget_Scaling_Mode_Fit=Area-Fit
FR-Designer_Widget_Scaling_Mode_Fixed=Area-Fixed FR-Designer_Widget_Scaling_Mode_Fixed=Area-Fixed
FR-Designer-Widget_Area_Scaling=Widget Area Scaling FR-Designer-Widget_Area_Scaling=Component area scaling
FR-Designer-Widget_Scaling_Mode=Widget Scaling Mode FR-Designer-Widget_Scaling_Mode=Scaling mode
FR-Designer-QQLogin-Determine=Determine FR-Designer-QQLogin-Determine=Determine
FR-Designer-QQLogin-Cancel=Cancel FR-Designer-QQLogin-Cancel=Cancel
FR-Designer-Reuse_Manager=Reuse Manager FR-Designer-Reuse_Manager=Component management
FR-Designer_TableData-Default-Para=Default Para FR-Designer_TableData-Default-Para=Default parameter
FR-Designer_Layout_Block_Absolute=Absolute Layout Block FR-Designer_Layout_Block_Absolute=Absolute layout block
FR-Designer_Layout_Block_Tab=TabLayout FR-Designer_Layout_Block_Tab=Tab block
FR-Designer_Layout_Block_Blank=Blank Block FR-Designer_Layout_Block_Blank=Blank block
FR-Designer_Attr_Layout=layout FR-Designer_Attr_Layout=Layout
FR-Designer_Attr_Layout_Type=layout type FR-Designer_Attr_Layout_Type=Layout type
FR-Designer_Attr_Bidirectional_Adaptive=Bidirectional Adaptive FR-Designer_Attr_Bidirectional_Adaptive=Bidirectional adaptive
FR-Designer-Selected_Widget=selected widget FR-Designer-Selected_Widget=Selected widget
FR-Designer_LocalWidget=local widget FR-Designer_LocalWidget=Local component library
FR-Designer_AllCategories=all categories FR-Designer_AllCategories=All categories
FR-Designer_Download_Template=download template FR-Designer_Download_Template=Download components
FR-Designer_Install_Template=install template FR-Designer_Install_Template=Install components
FR-Designer_Delete_Template=delete template FR-Designer_Delete_Template=Delete components
FR-Designer_Mobile-Refresh=refresh FR-Designer_Mobile-Refresh=Refresh
FR-Designer_Mobile-ToolBar=toolbar FR-Designer_Mobile-ToolBar=Toolbar
FR-Designer_WLayout-Absolute-ToolTips=Freestyle layout, add control in any position of the layout FR-Designer_WLayout-Absolute-ToolTips=Freestyle layout, add control in any position of the layout
FR-Designer_Reset=reset FR-Designer_Reset=Reset
FR-Designer_Add_all=Add all FR-Designer_Add_all=Add all
FR-Designer_Language_Change_Successful=New language setting will be enabled when designer is restarted FR-Designer_Language_Change_Successful=New language setting will be enabled when designer is restarted
FR-Designer_Template_Web_Attributes=Web Attributes FR-Designer_Template_Web_Attributes=Web Attributes
@ -486,6 +488,10 @@ FR-Designer-DS-Database_Query=DB Query
FR-Designer_Is_Share_DBTableData=Shared data set FR-Designer_Is_Share_DBTableData=Shared data set
FR-Designer_Event=Event FR-Designer_Event=Event
FR-Designer_Properties=Properties FR-Designer_Properties=Properties
FR-Designer_Permissions_Edition=Permissions Edition
FR-Designer_Export_Excel_Page=Page Break
FR-Designer_Export_Excel_Simple=Original
FR-Designer_Export_Excel_PageToSheet=One Page Per Sheet
FR-Designer_Export_failed=Export failed FR-Designer_Export_failed=Export failed
FR-Designer_Exported_successfully=Exported successfully FR-Designer_Exported_successfully=Exported successfully
FR-Designer_Exporting=Exporting FR-Designer_Exporting=Exporting
@ -508,16 +514,58 @@ FR-Designer_Form_Basic_Properties=Basic Property
FR-Designer_DS_Dictionary=Data Dictionary FR-Designer_DS_Dictionary=Data Dictionary
FR-Designer_Create_Tree=Build Tree FR-Designer_Create_Tree=Build Tree
FR-Designer_Set_Callback_Function=Set Callback Function FR-Designer_Set_Callback_Function=Set Callback Function
FR-Designer_ConfirmDialog_Content= FR-Designer_ConfirmDialog_Content=Confirm to delete Tab Control
FR-Designer_ConfirmDialog_Title= FR-Designer_ConfirmDialog_Title=FineReport 8.0
FR-Designer_Background_Null=No Background
FR-Designer_Background_Color=Color FR-Designer_FormulaPane_Tips=Tips\:You can input B1 to get the data in the second cell of the first row
FR-Designer_Background_Texture=Texture FR-Designer_FormulaPane_Variables=Variables
FR-Designer_Background_Pattern=Pattern FR-Designer_FormulaPane_Formula_Description=Formula Description
FR-Designer_Background_Gradient_Color=Gradient Color FR-Designer_FormulaPane_Function_Detail=Function Detail
FR-Designer_Background_Image=Image FR-Designer_FormulaPane_Search=Search
FR-Designer_Background_Clear=Clear FR-Designer_Tab_carousel=Tab carousel
FR-Designer_Background_Image_Select=Select Picture FR-Designer_setCarousel=Start
FR-Designer_Tab_carousel= FR-Designer_carouselInterval=Interval
FR-Designer_setCarousel=
FR-Designer_carouselInterval= FR-Designer_ClassName_panel=Class Name
FR-Designer_Description_panel=Description
FR-Designer_Edit_panel=Edit
FR-Designer_Property_panel=Property
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_Row_Icon_File_Name=row_en.png
FR-Designer_Center_Display=Center
FR-Designer_Left_Display=Left
FR-Designer_About_Version=Version
FR-Designer_About_CopyRight=Copy Right
FR-Designer_Service_Phone=Service Phone
FR-Designer_Allow_Blank=Allow Null
FR-Designer_PageSetup_Page=Page
FR-Designer_Custom_Job_Description=Description
FR-Designer_Property=Property
FR-Designer_ClassName=Class Name
FR-Designer_Polyblock_Edit=Aggregation block edition
FR-Designer_Function_Description_Area_Text=The class must inherit 'com.fr.script.AbstractFunction'. The compiled class files should be copied to\nJ2EE server '{R1}WEB-INF{R2}classes' directory.\nAdd the source code(.java file) into the same folder if need.\nExample: {R3}classes
FR-Designer_PageSetup_Horizontal=Horizontal
FR-Designer_PageSetup_Vertical=Vertical
FR-Designer_Gradient_Direction=Gradient Direction
FR-Designer_Drag_To_Select_Gradient=\\ Drag the button below to choose gradient area, click it to choose color
FR-Designer_Display_Value=Display Value
FR-Designer_Actual_Value=Actual Value
FR-Designer_CellWrite_ToolTip=Tool Tip of Cell
FR-Designer_Show_Content=Show content
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_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.
FR-Designer_WidgetOrder=Widget Order
FR-Designer_Mobile_Form_Analysis_Annotation=annotation\: You can use this attribute to control the analysis of the form in the APP.
FR-Designer_Mobile_Report_Analysis_Annotation=annotation\: You can use this attribute to control the analysis of the report in the APP, only to support the paging preview, fill in the preview of the property is invalid.

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

@ -100,6 +100,7 @@ FR-Designer_FS_Close_Other_Templates=\u305D\u306E\u4ED6\u30C6\u30F3\u30D7\u30EC\
FR-Designer_File=\u30D5\u30A1\u30A4\u30EB FR-Designer_File=\u30D5\u30A1\u30A4\u30EB
FR-Designer_Filter_Conditions=\u9078\u5225\u6761\u4EF6 FR-Designer_Filter_Conditions=\u9078\u5225\u6761\u4EF6
FR-Designer_Finish-Modify-Share=\u4FEE\u6B63\u3092\u5B8C\u4E86\u3057\u3066\u30B7\u30A7\u30A2 FR-Designer_Finish-Modify-Share=\u4FEE\u6B63\u3092\u5B8C\u4E86\u3057\u3066\u30B7\u30A7\u30A2
FR-Designer_Fit-App=App\u81EA\u9069\u5FDC
FR-Designer_Fit=\u81EA\u9069\u5FDC FR-Designer_Fit=\u81EA\u9069\u5FDC
FR-Designer_Font-Family=\u30D5\u30A9\u30F3\u30C8\u540D\u79F0 FR-Designer_Font-Family=\u30D5\u30A9\u30F3\u30C8\u540D\u79F0
FR-Designer_Font-Size=\u30D5\u30A9\u30F3\u30C8\u5927\u5C0F FR-Designer_Font-Size=\u30D5\u30A9\u30F3\u30C8\u5927\u5C0F
@ -222,7 +223,7 @@ FR-Designer-StyleAlignment_Style_Indentation=\u30A4\u30F3\u30C7\u30F3\u30C8
FR-Designer-StyleAlignment_Style_Spacing=\u9593\u9694\u8DDD\u96E2 FR-Designer-StyleAlignment_Style_Spacing=\u9593\u9694\u8DDD\u96E2
FR-Designer-StyleAlignment_Style_Alignment=\u63C3\u3048 FR-Designer-StyleAlignment_Style_Alignment=\u63C3\u3048
FR-Designer-CommitTab_Submit=\u63D0\u51FA\u3059\u308B FR-Designer-CommitTab_Submit=\u63D0\u51FA\u3059\u308B
FR-Designer-CommitTab_SureToDelete=Sure to delete FR-Designer-CommitTab_SureToDelete=\u524A\u9664\u3057\u307E\u3059\u304B
FR-Designer-CommitTab_Remove=\u524A\u9664 FR-Designer-CommitTab_Remove=\u524A\u9664
FR-Designer-Collect_Information_free=\u7121\u6599 FR-Designer-Collect_Information_free=\u7121\u6599
FR-Designer-Collect_Information_Description=\u8A18\u8FF0 FR-Designer-Collect_Information_Description=\u8A18\u8FF0
@ -369,13 +370,13 @@ FR-Designer_LiteCondition_ConditionB-OR=\u30AA\u30A2(OR)
FR-Designer_LiteCondition_Common_Condition=\u666E\u901A\u6761\u4EF6 FR-Designer_LiteCondition_Common_Condition=\u666E\u901A\u6761\u4EF6
FR-Designer_LiteCondition_Formula_Condition=\u516C\u5F0F\u6761\u4EF6 FR-Designer_LiteCondition_Formula_Condition=\u516C\u5F0F\u6761\u4EF6
FR-Designer_LiteCondition_Define=\u5B9A\u7FA9 FR-Designer_LiteCondition_Define=\u5B9A\u7FA9
FR-Designer_Select_All= FR-Designer_Select_All=\u5168\u9078\u629E
FR-Designer-Plugin_Expire_Dialog_Title=\u671F\u9650\u5207\u308C\u306E\u30D7\u30E9\u30B0\u30A4\u30F3 FR-Designer-Plugin_Expire_Dialog_Title=\u671F\u9650\u5207\u308C\u306E\u30D7\u30E9\u30B0\u30A4\u30F3
FR-Designer-Plugin_Expire_Dialog_Text=\u30D7\u30E9\u30B0\u30A4\u30F3\u306F\u3001\u8CFC\u5165\u3092\u3059\u308B\u305F\u3081\u306B\u5E06\u30BD\u30D5\u30C8\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u30BB\u30F3\u30BF\u30FC\u3092\u884C\u304F\u3001\u6709\u52B9\u671F\u9650\u304C\u5207\u308C\u3066\u3044\u307E\u3059\u3002 FR-Designer-Plugin_Expire_Dialog_Text=\u30D7\u30E9\u30B0\u30A4\u30F3\u306F\u3001\u8CFC\u5165\u3092\u3059\u308B\u305F\u3081\u306B\u5E06\u30BD\u30D5\u30C8\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u30BB\u30F3\u30BF\u30FC\u3092\u884C\u304F\u3001\u6709\u52B9\u671F\u9650\u304C\u5207\u308C\u3066\u3044\u307E\u3059\u3002
FR-Designer-Plugin_Finerest_Addon=\u5E06\u8EDF\u5FDC\u7528\u30BB\u30F3\u30BF\u30FC FR-Designer-Plugin_Finerest_Addon=\u5E06\u8EDF\u5FDC\u7528\u30BB\u30F3\u30BF\u30FC
FR-Designer_Performance_First=\u6027\u80FD\u512A\u5148 FR-Designer_Performance_First=\u6027\u80FD\u512A\u5148
FR-Designer_Total_N_Grade=\u5168\u90E8\u3067\:${N}\u5C64 FR-Designer_Total_N_Grade=\u5168\u90E8\u3067\:${N}\u5C64
FR-Designer_time(s)= FR-Designer_time(s)=\u56DE
FR-Designer_General=\u5E38\u7528 FR-Designer_General=\u5E38\u7528
FR-Designer_Advanced=\u9AD8\u7D1A FR-Designer_Advanced=\u9AD8\u7D1A
FR-Designer_Oracle=\u3059\u3079\u3066\u306E\u30C6\u30FC\u30D6\u30EB FR-Designer_Oracle=\u3059\u3079\u3066\u306E\u30C6\u30FC\u30D6\u30EB
@ -407,10 +408,10 @@ FR-Designer_Current_Preview_Rows=\u73FE\u5728\u306E\u30D7\u30EC\u30D3\u30E5\u30F
FR-Designer_Data=\u30C7\u30FC\u30BF FR-Designer_Data=\u30C7\u30FC\u30BF
FR-Designer_Error=\u30A8\u30E9\u30FC FR-Designer_Error=\u30A8\u30E9\u30FC
FR-Designer-Website_Url=http\://www.finereport.com/jp FR-Designer-Website_Url=http\://www.finereport.com/jp
FR-Designer_formDesignerModule= FR-Designer_formDesignerModule=\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u30C7\u30B6\u30A4\u30CA\u30FC
FR-Designer-BBSLogin_Login-Title= FR-Designer-BBSLogin_Login-Title=BBS\u30ED\u30B0\u30A4\u30F3
FR-Designer_Get-CubeGetting= FR-Designer_Get-CubeGetting=cube\u53D6\u5F97
FR-Designer-BBSLogin_Download-Unlogin-Tip= FR-Designer-BBSLogin_Download-Unlogin-Tip=\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9
FR-Designer-App_ReLayout=\u96FB\u8A71\u518D\u30EC\u30A4\u30A2\u30A6\u30C8 FR-Designer-App_ReLayout=\u96FB\u8A71\u518D\u30EC\u30A4\u30A2\u30A6\u30C8
FR-Designer_Mobile-Attr=\u30E2\u30D0\u30A4\u30EB\u7AEF\u672B\u5C5E\u6027 FR-Designer_Mobile-Attr=\u30E2\u30D0\u30A4\u30EB\u7AEF\u672B\u5C5E\u6027
FR-Designer_Mobile-Vertical=\u7E26 FR-Designer_Mobile-Vertical=\u7E26
@ -435,68 +436,106 @@ FR-Designer_Widget_Scaling_Mode_Fixed=\u56FA\u5B9A\u30B5\u30A4\u30BA
FR-Designer-Widget_Area_Scaling=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u30A8\u30EA\u30A2\ FR-Designer-Widget_Area_Scaling=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u30A8\u30EA\u30A2\
FR-Designer-QQLogin-Determine=\u6C7A\u5B9A\u3057\u307E\u3059 FR-Designer-QQLogin-Determine=\u6C7A\u5B9A\u3057\u307E\u3059
FR-Designer-QQLogin-Cancel=\u30AD\u30E3\u30F3\u30BB\u30EB FR-Designer-QQLogin-Cancel=\u30AD\u30E3\u30F3\u30BB\u30EB
FR-Designer-Reuse_Manager= FR-Designer-Reuse_Manager=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8
FR-Designer_Layout_Block_Absolute= FR-Designer_Layout_Block_Absolute=\u7D76\u5BFE\u30EC\u30A4\u30A2\u30A6\u30C8\u30D6\u30ED\u30C3\u30AF
FR-Designer_Layout_Block_Tab= FR-Designer_Layout_Block_Tab=Tab\u30D6\u30ED\u30C3\u30AF
FR-Designer_Layout_Block_Blank= FR-Designer_Layout_Block_Blank=\u7A7A\u767D\u30D6\u30ED\u30C3\u30AF
FR-Designer_Attr_Layout= FR-Designer_Attr_Layout=\u30EC\u30A4\u30A2\u30A6\u30C8
FR-Designer_Attr_Layout_Type= FR-Designer_Attr_Layout_Type=\u30EC\u30A4\u30A2\u30A6\u30C8\u65B9\u5F0F
FR-Designer_Attr_Bidirectional_Adaptive= FR-Designer_Attr_Bidirectional_Adaptive=\u53CC\u65B9\u5411\u81EA\u5DF1\u8ABF\u6574
FR-Designer_Download_Template= FR-Designer_Download_Template=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u3092\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9
FR-Designer-Widget_Scaling_Mode=\u30B9\u30B1\u30FC\u30EA\u30F3\u30B0\u8AD6\u7406 FR-Designer-Widget_Scaling_Mode=\u30B9\u30B1\u30FC\u30EA\u30F3\u30B0\u8AD6\u7406
FR-Designer_Mobile-Refresh= FR-Designer_Mobile-Refresh=\u66F4\u65B0
FR-Designer_Mobile-ToolBar= FR-Designer_Mobile-ToolBar=\u30C4\u30FC\u30EB\u30D0\u30FC
FR-Designer_WLayout-Absolute-ToolTips=\u81EA\u7531\u5F0F\u914D\u7F6E\u3067\u3059\u3002\u914D\u7F6E\u5185\u306E\u4EFB\u610F\u306E\u4F4D\u7F6E\u306B\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u3092\u8FFD\u52A0\u3059\u308B\u3053\u3068 FR-Designer_WLayout-Absolute-ToolTips=\u81EA\u7531\u5F0F\u914D\u7F6E\u3067\u3059\u3002\u914D\u7F6E\u5185\u306E\u4EFB\u610F\u306E\u4F4D\u7F6E\u306B\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u3092\u8FFD\u52A0\u3059\u308B\u3053\u3068
FR-Designer_Add_all=\u3059\u3079\u3066\u8FFD\u52A0 FR-Designer_Add_all=\u3059\u3079\u3066\u8FFD\u52A0
FR-Designer_Language_Change_Successful= FR-Designer_Language_Change_Successful=\u65B0\u3057\u3044\u8A00\u8A9E\u306F\u518D\u8D77\u52D5\u5F8C\u306B\u4F7F\u7528\u3055\u308C\u307E\u3059\u3002
FR-Designer_Template_Web_Attributes= FR-Designer_Template_Web_Attributes=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u30A6\u30A7\u30D6\u30D7\u30ED\u30D1\u30C6\u30A3
FR-Designer_Basic=\u57FA\u672C FR-Designer_Basic=\u57FA\u672C
FR-Designer_Printers(Server)=\u30D7\u30EA\u30F3\u30BF\u30FC(\u30B5\u30FC\u30D0) FR-Designer_Printers(Server)=\u30D7\u30EA\u30F3\u30BF\u30FC(\u30B5\u30FC\u30D0)
FR-Designer_Pagination_Setting=\u30DA\u30FC\u30B8\u5225\u30D7\u30EC\u30D3\u30E5\u30FC\u8A2D\u5B9A FR-Designer_Pagination_Setting=\u30DA\u30FC\u30B8\u5225\u30D7\u30EC\u30D3\u30E5\u30FC\u8A2D\u5B9A
FR-Designer_Write_Setting=\u5831\u544A\u30DA\u30FC\u30B8\u8A2D\u5B9A FR-Designer_Write_Setting=\u66F8\u304D\u8FBC\u307F\u30DA\u30FC\u30B8\u8A2D\u5B9A
FR-Designer_Data_Analysis_Settings=\u30C7\u30FC\u30BF\u5206\u6790\u8A2D\u5B9A FR-Designer_Data_Analysis_Settings=\u30C7\u30FC\u30BF\u5206\u6790\u8A2D\u5B9A
FR-Designer_Browser_Background=\u30D6\u30E9\u30A6\u30B6\u80CC\u666F FR-Designer_Browser_Background=\u30D6\u30E9\u30A6\u30B6\u80CC\u666F
FR-Designer_Import_Css=Css\u5F15\u7528 FR-Designer_Import_Css=Css\u5F15\u7528
FR-Designer_Import_JavaScript=JavaScript\u5F15\u7528 FR-Designer_Import_JavaScript=JavaScript\u5F15\u7528
FR-Designer-Datasource-Param_DES=<html>&nbsp; "${abc}"\u3092\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u3068\u3057\u3066\u5165\u529B\u3067\u304D\u307E\u3059\u3002\u3053\u3053\u3067abc\u306F\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u3002abc\u306F\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u306E\u540D\u524D\u3067\u3059\u3002\u4F8B\u3048\u3070<br/>&nbsp;select * from table where id\=${abc}\u3002<br/>&nbsp;select * from table where id\='${abc}'\u3002(\u3082\u3057id\u306F\u6587\u5B57\u5217\u306A\u3089)</html>\uFFFD FR-Designer-Datasource-Param_DES=<html>&nbsp; "${abc}"\u3092\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u3068\u3057\u3066\u5165\u529B\u3067\u304D\u307E\u3059\u3002\u3053\u3053\u3067abc\u306F\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u3002abc\u306F\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u306E\u540D\u524D\u3067\u3059\u3002\u4F8B\u3048\u3070<br/>&nbsp;select * from table where id\=${abc}\u3002<br/>&nbsp;select * from table where id\='${abc}'\u3002(\u3082\u3057id\u306F\u6587\u5B57\u5217\u306A\u3089)</html>\uFFFD
FR-Designer-DS-Database_Query=\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u30AF\u30A8\u30EA\u30FC FR-Designer-DS-Database_Query=\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u30AF\u30A8\u30EA\u30FC
FR-Designer-LayerPageReport_PageQuery=\u30DA\u30FC\u30B8\u5225\u30AF\u30A8\u30EA FR-Designer-LayerPageReport_PageQuery=\u6539\u30DA\u30FC\u30B8\u691C\u7D22
FR-Designer-LayerPageReport_Define_PageQuerySQL=\u5B9A\u7FA9\u30DA\u30FC\u30B8\u5225\u30AF\u30A8\u30EAsql FR-Designer-LayerPageReport_Define_PageQuerySQL=\u6539\u30DA\u30FC\u30B8\u691C\u7D22sql\u3092\u66F8\u304F
FR-Designer_Is_Share_DBTableData=\u5171\u6709\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8 FR-Designer_Is_Share_DBTableData=\u5171\u6709\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8
FR-Designer_Event=\ FR-Designer_Event=\u30A4\u30D9\u30F3\u30C8
FR-Designer_Properties=FR-Designer_Properties=\ FR-Designer_Properties=\u30D7\u30ED\u30D1\u30C6\u30A3
\ FR-Designer_Permissions_Edition=\u6A29\u9650\u7DE8\u96C6
FR-Designer_Export_Excel_Page=\u6539\u30DA\u30FC\u30B8\u51FA\u529B
FR-Designer_Export_Excel_Simple=\u305D\u306E\u307E\u307E\u51FA\u529B
FR-Designer_Export_Excel_PageToSheet=\u6539\u30DA\u30FC\u30B8\uFF06\u30B7\u30FC\u30C8\u5206\u3051
FR-Designer_Export_failed=\u5C0E\u51FA\u306B\u5931\u6557\u3057\u307E\u3057\u305F FR-Designer_Export_failed=\u5C0E\u51FA\u306B\u5931\u6557\u3057\u307E\u3057\u305F
FR-Designer_Exported_successfully=\u5C0E\u51FA\u6210\u529F FR-Designer_Exported_successfully=\u5C0E\u51FA\u6210\u529F
FR-Designer_Exporting=\u5C0E\u51FA\u3057\u3066\u3044\u307E\u3059 FR-Designer_Exporting=\u5C0E\u51FA\u3057\u3066\u3044\u307E\u3059
FR-Designer_Export-PDF=PDF\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8FR-Designer_Button_OK=FR-Designer_Button_OK=\u78BA\u5B9A FR-Designer_Export-PDF=PDF\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8
FR-Designer_Button_OK=\u78BA\u5B9A
FR-Designer_Button_Cancel=\u30AD\u30E3\u30F3\u30BB\u30EB FR-Designer_Button_Cancel=\u30AD\u30E3\u30F3\u30BB\u30EB
\uFFFD FR-Designer_JavaScript=JavaScript
FR-Designer_JavaScript= FR-Designer_JavaScript_Form_Submit=\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u66F8\u304D\u8FBC\u307F
FR-Designer_JavaScript_Form_Submit= FR-Designer_JavaScript_Commit_to_Database=DB\u306B\u66F8\u304D\u8FBC\u307F
FR-Designer_JavaScript_Commit_to_Database= FR-Designer_JavaScript_Custom=\u30AB\u30B9\u30BF\u30E0
FR-Designer_JavaScript_Custom= FR-Designer_RWA_Submit=\u66F8\u304D\u8FBC\u307F
FR-Designer_RWA_Submit= FR-Designer_Event_Name=\u30A4\u30D9\u30F3\u30C8\u540D
FR-Designer_Event_Name= FR-Designer_Event_Type=\u30A4\u30D9\u30F3\u30C8\u30BF\u30A4\u30D7
FR-Designer_Event_Type= FR-Designer_Event_Name_Type=\u30A4\u30D9\u30F3\u30C8\u540D\u3068\u30BF\u30A4\u30D7
FR-Designer_Event_Name_Type= FR-Designer_JavaScript_Set=JS\u8A2D\u5B9A
FR-Designer_JavaScript_Set= FR-Designer_Attribute=\u30D7\u30ED\u30D1\u30C6\u30A3
FR-Designer_Attribute= FR-Designer_Form_Editing_Listeners=\u30A4\u30D9\u30F3\u30C8\u7DE8\u96C6
FR-Designer_Form_Editing_Listeners= FR-Designer_Form_Basic_Properties=\u57FA\u672C\u30D7\u30ED\u30D1\u30C6\u30A3
FR-Designer_Form_Basic_Properties= FR-Designer_DS_Dictionary=\u30C7\u30FC\u30BF\u8F9E\u66F8
FR-Designer_DS_Dictionary= FR-Designer_Create_Tree=\u30C4\u30EA\u30FC\u69CB\u7BC9
FR-Designer_Create_Tree= FR-Designer_Set_Callback_Function=\u30B3\u30FC\u30EB\u30D0\u30C3\u30AF\u95A2\u6570\u8A2D\u5B9A
FR-Designer_Set_Callback_Function= FR-Designer_ConfirmDialog_Content=tab\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u3092\u524A\u9664\u3057\u307E\u3059\u304B
FR-Designer_ConfirmDialog_Content= FR-Designer_ConfirmDialog_Title=FineReport 8.0
FR-Designer_ConfirmDialog_Title= FR-Designer_FormulaPane_Tips=\u30D2\u30F3\u30C8\:B1\u3092\u5165\u529B
FR-Designer_Background_Null= FR-Designer_FormulaPane_Variables=\u5909\u6570
FR-Designer_Background_Color= FR-Designer_FormulaPane_Formula_Description=\u516C\u5F0F\u8AAC\u660E
FR-Designer_Background_Texture= FR-Designer_FormulaPane_Function_Detail=\u95A2\u6570\u660E\u7D30
FR-Designer_Background_Pattern= FR-Designer_FormulaPane_Search=\u691C\u7D22
FR-Designer_Background_Gradient_Color= FR-Designer_Tab_carousel=tab\u30AB\u30EB\u30FC\u30BB\u30EB
FR-Designer_Background_Image= FR-Designer_setCarousel=\u30AB\u30EB\u30FC\u30BB\u30EB\u30AA\u30F3
FR-Designer_Background_Clear= FR-Designer_carouselInterval=\u30AB\u30EB\u30FC\u30BB\u30EB\u9593\u9694
FR-Designer_Background_Image_Select= FR-Designer_ClassName_panel=\u985E\u540D
FR-Designer_Tab_carousel= FR-Designer_Description_panel=\u8A18\u8FF0
FR-Designer_setCarousel= FR-Designer_Edit_panel=\u7DE8\u96C6
FR-Designer_carouselInterval= FR-Designer_Property_panel=\u5C5E\u6027
FR-Designer_Select_panel=\u9078\u629E
FR-Designer_LayoutTable_Column_Width=160
FR-Designer_Set_BG_Of_Current_Row=\u5831\u544A\u30AB\u30EC\u30F3\u30C8\u7DE8\u96C6\u884C\u80CC\u666F\u8A2D\u5B9A
FR-Designer_Unload_Check=\u63D0\u51FA\u305B\u305A\u306B\u30D2\u30F3\u30C8
FR-Designer_ReportColumns_Columns_Optional=\u6BB5\u7D44\u307F
FR-Designer_Row_Icon_File_Name=row.png
FR-Designer_Center_Display=\u4E2D\u592E\u63C3\u3048\u8868\u793A
FR-Designer_Left_Display=\u5DE6\u8868\u793A
FR-Designer_About_Version=\u30D0\u30FC\u30B8\u30E7\u30F3
FR-Designer_About_CopyRight=\u8457\u4F5C\u6A29\u6240\u6709
FR-Designer_Service_Phone=\u30B5\u30FC\u30D3\u30B9\u96FB\u8A71\uFF1A
FR-Designer_Allow_Blank=\u7A7A\u6B04\u3042\u308A
FR-Designer_PageSetup_Page=\u30DA\u30FC\u30B8
FR-Designer_Custom_Job_Description=\u8A18\u8FF0
FR-Designer_Property=\u5C5E\u6027
FR-Designer_ClassName=\u985E\u540D
FR-Designer_Polyblock_Edit=\u30A2\u30B0\u30EA\u30B2\u30FC\u30B7\u30E7\u30F3\u30D6\u30ED\u30C3\u30AF\u7DE8\u96C6
FR-Designer_Function_Description_Area_Text=\u3053\u306E\u30AF\u30E9\u30B9\u306F\u7D99\u627F\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"com.fr.script.AbstractFunction"\u3002\u3092\u7D99\u627F\u3059\u3079\u304D\u3067\u3059\u3002\u30B3\u30F3\u30D1\u30A4\u30EB\u5F8C\u306E\u985E\u30D5\u30A1\u30A4\u30EB\u3092\nJ2EE\u30B5\u30FC\u30D0\u30FC "{R1}WEB-INF{R2}classes" \u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3002\u306B\u30B3\u30D4\u30FC\u3057\u3066\u3001class\u306B\u5BFE\u5FDC\u3059\u308Bjava\u30D5\u30A1\u30A4\u30EB\u3082\u5F53\u76EE\u6B21\u306B\u7F6E\u3044\u3066\u304F\u3060\u3055\u3044\u3002\n\u4F8B\u3048\u3070\uFF1A{R3}classes
FR-Designer_PageSetup_Horizontal=\u6A2A\u65B9\u5411
FR-Designer_PageSetup_Vertical=\u7E26\u65B9\u5411
FR-Designer_Gradient_Direction=\u65B9\u5411\u3092\u5F90\u3005\u306B\u5909\u5316
FR-Designer_Drag_To_Select_Gradient=\\ \u4E0B\u65B9\u306E\u30DC\u30BF\u30F3\u3092\u30D7\u30EB\u30C0\u30A6\u30F3\u3057\u3066\u6F38\u6B21\u5909\u5316\u30A8\u30EA\u30A2\u3092\u9078\u629E\u3057\u3001\u30AF\u30EA\u30C3\u30AF\u3057
FR-Designer_Display_Value=\u8868\u793A\u5024
FR-Designer_Actual_Value=\u5B9F\u969B\u5024
FR-Designer_CellWrite_ToolTip=\u30BB\u30EB\u30D2\u30F3\u30C8
FR-Designer_Show_Content=\u5185\u5BB9\u8868\u793A
FR-Designer_Auto_Adjust_Size=\u81EA\u52D5\u8ABF\u6574
FR-Designer_Show_As_Download=\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u30EA\u30F3\u30AF\u3067\uFF12\u9032\u6CD5\u306E\u5185\u5BB9\u3092\u8868\u793A
FR-Designer_File_Name_For_Download=\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u30D5\u30A1\u30A4\u30EB\u540D
FR-Designer_No=\u3044\u3044\u3048
FR-Designer_Pagination=\u30DA\u30FC\u30B8\u30F3\u30B0
FR-Designer_DS_TableData=\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9
FR-Designer_Parameter-Formula=\u6570\u5F0F

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

@ -100,6 +100,7 @@ FR-Designer_FS_Close_Other_Templates=\uAE30\uD0C0\uD15C\uD50C\uB9BF\uB2EB\uAE30
FR-Designer_File=\uD30C\uC77C FR-Designer_File=\uD30C\uC77C
FR-Designer_Filter_Conditions=\uD544\uD130\uC870\uAC74 FR-Designer_Filter_Conditions=\uD544\uD130\uC870\uAC74
FR-Designer_Finish-Modify-Share=\uC218\uC815\uC644\uB8CC\uBC0F\uACF5\uC720 FR-Designer_Finish-Modify-Share=\uC218\uC815\uC644\uB8CC\uBC0F\uACF5\uC720
FR-Designer_Fit-App=App\uC790\uAE30\uC801\uC751
FR-Designer_Fit=\uC790\uAE30\uC801\uC751 FR-Designer_Fit=\uC790\uAE30\uC801\uC751
FR-Designer_Font-Family=\uAE00\uAF34\uBA85\uCE6D FR-Designer_Font-Family=\uAE00\uAF34\uBA85\uCE6D
FR-Designer_Font-Size=\uAE00\uAF34\uD06C\uAE30 FR-Designer_Font-Size=\uAE00\uAF34\uD06C\uAE30
@ -459,14 +460,18 @@ FR-Designer-DS-Database_Query=\uB370\uC774\uD130\uBCA0\uC774\uC2A4\uCC3E\uC544\u
FR-Designer_Is_Share_DBTableData=\uB370\uC774\uD130\uC138\uD2B8\uACF5\uC720 FR-Designer_Is_Share_DBTableData=\uB370\uC774\uD130\uC138\uD2B8\uACF5\uC720
FR-Designer-LayerPageReport_PageQuery=\uD398\uC774\uC9C0\uB098\uB204\uAE30\uCC3E\uC544\uBCF4\uAE30 FR-Designer-LayerPageReport_PageQuery=\uD398\uC774\uC9C0\uB098\uB204\uAE30\uCC3E\uC544\uBCF4\uAE30
FR-Designer-LayerPageReport_Define_PageQuerySQL=\uC815\uC758\uD398\uC774\uC9C0\uB098\uB204\uAE30\uCC3E\uC544\uBCF4\uAE30sql FR-Designer-LayerPageReport_Define_PageQuerySQL=\uC815\uC758\uD398\uC774\uC9C0\uB098\uB204\uAE30\uCC3E\uC544\uBCF4\uAE30sql
FR-Designer_Event=\ FR-Designer_Event=
FR-Designer_Permissions_Edition=\uAD8C\uD55C\uD3B8\uC9D1
FR-Designer_Export_Excel_Page=\uD398\uC774\uC9C0\uB098\uB204\uAE30\uC5B4\uB0B4\uBCF4\uB0B4\uAE30
FR-Designer_Export_Excel_Simple=\uC6D0\uB798\uBAA8\uC2B5\uB0B4\uBCF4\uB0B4\uAE30
FR-Designer_Export_Excel_PageToSheet=\uD398\uC774\uC9C0\uC640 Sheet\uB098\uB204\uC5B4\uB0B4\uBCF4\uB0B4\uAE30
FR-Designer_Properties=\uFFFD FR-Designer_Properties=\uFFFD
FR-Designer_Export_failed=\uB0B4\uBCF4\uB0B4\uAE30\uC2E4\uD328 FR-Designer_Export_failed=\uB0B4\uBCF4\uB0B4\uAE30\uC2E4\uD328
FR-Designer_Exported_successfully=\uB0B4\uBCF4\uB0B4\uAE30\uC131\uACF5 FR-Designer_Exported_successfully=\uB0B4\uBCF4\uB0B4\uAE30\uC131\uACF5
FR-Designer_Exporting=\uB0B4\uBCF4\uB0B4\uAE30\uC911 FR-Designer_Exporting=\uB0B4\uBCF4\uB0B4\uAE30\uC911
FR-Designer_Export-PDF=PDF\uC11C\uC2DDFR-Designer_Properties=\uFFFD FR-Designer_Export-PDF=PDF\uC11C\uC2DD
FR-Designer_Button_OK=\uD655\uC778FR-Designer_Button_Cancel=\uCDE8\uC18C FR-Designer_Button_OK=\uD655\uC778
\uFFFD FR-Designer_Button_Cancel=\uCDE8\uC18C
FR-Designer_JavaScript= FR-Designer_JavaScript=
FR-Designer_JavaScript_Form_Submit= FR-Designer_JavaScript_Form_Submit=
FR-Designer_JavaScript_Commit_to_Database= FR-Designer_JavaScript_Commit_to_Database=
@ -484,14 +489,50 @@ FR-Designer_Create_Tree=
FR-Designer_Set_Callback_Function= FR-Designer_Set_Callback_Function=
FR-Designer_ConfirmDialog_Content= FR-Designer_ConfirmDialog_Content=
FR-Designer_ConfirmDialog_Title= FR-Designer_ConfirmDialog_Title=
FR-Designer_Background_Null= FR-Designer_FormulaPane_Tips=\uC54C\uB9BC\: B1\uC744\uC785\uB825\uD558\uC5EC\uCCAB\uBC88\uC9F8\uD589\uB450\uBC88\uC9F8\uC5F4\uC758\uB370\uC774\uD130\uB97C\uC785\uB825\uD560\uC218\uC788\uC2B5\uB2C8\uB2E4.
FR-Designer_Background_Color= FR-Designer_FormulaPane_Variables=\uBCC0\uC218
FR-Designer_Background_Texture= FR-Designer_FormulaPane_Formula_Description=\uC218\uC2DD\uC124\uBA85
FR-Designer_Background_Pattern= FR-Designer_FormulaPane_Function_Detail=\uD568\uC218\uC0C1\uC138\uC0AC\uD56D
FR-Designer_Background_Gradient_Color= FR-Designer_FormulaPane_Search=\uAC80\uC0C9
FR-Designer_Background_Image=
FR-Designer_Background_Clear=
FR-Designer_Background_Image_Select=
FR-Designer_Tab_carousel= FR-Designer_Tab_carousel=
FR-Designer_setCarousel= FR-Designer_setCarousel=
FR-Designer_carouselInterval= FR-Designer_carouselInterval=
FR-Designer_ClassName_panel=\uD074\uB798\uC2A4\uB124\uC784
FR-Designer_Description_panel=\uC124\uBA85
FR-Designer_Edit_panel=\uD3B8\uC9D1
FR-Designer_Property_panel=\uC18D\uC131
FR-Designer_Select_panel=\uC120\uD0DD
FR-Designer_LayoutTable_Column_Width=160
FR-Designer_Set_BG_Of_Current_Row=\uAE30\uC785\uD604\uC7AC\uD3B8\uC9D1\uD589\uBC30\uACBD\uC124\uC815
FR-Designer_Unload_Check=\uBBF8\uC81C\uCD9C\uB098\uAC14\uC74C\uC54C\uB9BC
FR-Designer_ReportColumns_Columns_Optional=\uC140\uB098\uB204\uAE30
FR-Designer_Row_Icon_File_Name=row.png
FR-Designer_Center_Display=\uAC00\uC6B4\uB370\uC815\uB82C\uBCF4\uC774\uAE30
FR-Designer_Left_Display=\uC67C\uCABD\uBCF4\uC774\uAE30
FR-Designer_About_Version=\uBC84\uC804
FR-Designer_About_CopyRight=\uD310\uAD8C\uC18C\uC720
FR-Designer_Service_Phone=\uC11C\uBE44\uC2A4\uC804\uD654\uFF1A
FR-Designer_Allow_Blank=\uBE48\uCE78\uD5C8\uC6A9
FR-Designer_PageSetup_Page=\uC6F9\uD398\uC774\uC9C0
FR-Designer_Custom_Job_Description=\uC124\uBA85
FR-Designer_Property=\uC18D\uC131
FR-Designer_ClassName=\uD074\uB798\uC2A4\uB124\uC784
FR-Designer_Template_Web_Attributes=\uD15C\uD50C\uB9BF \uC6F9 \uC18D\uC131
FR-Designer_Polyblock_Edit=\uCDE8\uD569\uBE14\uB7ED\uD3B8\uC9D1
FR-Designer_Function_Description_Area_Text=\uD574\uB2F9\uD074\uB798\uC2A4\uB294\uACC4\uC2B9\uD574\uC57C\uD55C\uB2E4."com.fr.script.AbstractFunction".\uCEF4\uD30C\uC77C\uD6C4\uC758\uD074\uB798\uC2A4\uD30C\uC77C\uC744~\uB85C\uBCF5\uC0AC\nJ2EE\uC11C\uBC84 "{R1}WEB-INF{R2}classes" \uB514\uB809\uD130\uB9AC, \uD544\uC694\uC2DC class \uC0C1\uC751\uD558\uB294 java\uC18C\uC2A4\uD30C\uC77C\uB3C4\uD574\uB2F9\uB514\uB809\uD130\uB9AC\uD558\uB2E8\uC5D0\uB450\uC5B4\uD3B8\uC9D1\uBC0F\uCC3E\uC544\uBCF4\uAE30\uB97C\uD560\uC218\uC788\uC2B5\uB2C8\uB2E4.\n\uC608: {R3}classes
FR-Designer_PageSetup_Horizontal=\uAC00\uB85C
FR-Designer_PageSetup_Vertical=\uC138\uB85C
FR-Designer_Gradient_Direction=\uADF8\uB77C\uB370\uC774\uC158 \uBC29\uD5A5
FR-Designer_Drag_To_Select_Gradient=\\\uD558\uB2E8\uD0A4\uB97C\uB4DC\uB798\uADF8\uD558\uC5EC\uADF8\uB77C\uB370\uC774\uC158\uC601\uC5ED\uC744\uC120\uD0DD\uD558\uACE0\uD0A4\uB97C\uD074\uB9AD\uD558\uC5EC\uD574\uB2F9\uC0C9\uC120\uD0DD
FR-Designer_Display_Value=\uAC12\uBCF4\uC774\uAE30
FR-Designer_Actual_Value=\uC2E4\uC81C\uAC12
FR-Designer_CellWrite_ToolTip=\uB0B4\uC6A9\uC54C\uB9BC
FR-Designer_Show_Content=\uB0B4\uC6A9\uBCF4\uC774\uAE30
FR-Designer_Auto_Adjust_Size=\uC790\uB3D9\uC870\uC815
FR-Designer_Show_As_Download=\uB2E4\uC6B4\uB85C\uB4DC\uB9C1\uD06C\uB85C2\uC9C4\uBC95\uB0B4\uC6A9\uBCF4\uC774\uAE30
FR-Designer_File_Name_For_Download=\uB2E4\uC6B4\uB85C\uB4DC\uD30C\uC77C\uBA85
FR-Designer_No=\uC544\uB2C8\uC624
FR-Designer_Pagination=\uD398\uC774\uC9C0\uB098\uB204\uAE30
FR-Designer_DS_TableData=\uB370\uC774\uD130\uC138\uD2B8
FR-Designer_Parameter-Formula=\uC218\uC2DD

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

@ -100,6 +100,7 @@ FR-Designer_FS_Close_Other_Templates=\u5173\u95ED\u5176\u4ED6\u6A21\u677F
FR-Designer_File=\u6587\u4EF6 FR-Designer_File=\u6587\u4EF6
FR-Designer_Filter_Conditions=\u8FC7\u6EE4\u6761\u4EF6 FR-Designer_Filter_Conditions=\u8FC7\u6EE4\u6761\u4EF6
FR-Designer_Finish-Modify-Share=\u5B8C\u6210\u4FEE\u6539\u5E76\u5206\u4EAB FR-Designer_Finish-Modify-Share=\u5B8C\u6210\u4FEE\u6539\u5E76\u5206\u4EAB
FR-Designer_Fit-App=App\u81EA\u9002\u5E94
FR-Designer_Fit=\u81EA\u9002\u5E94 FR-Designer_Fit=\u81EA\u9002\u5E94
FR-Designer_Font-Family=\u5B57\u4F53\u540D\u79F0 FR-Designer_Font-Family=\u5B57\u4F53\u540D\u79F0
FR-Designer_Font-Size=\u5B57\u4F53\u5927\u5C0F FR-Designer_Font-Size=\u5B57\u4F53\u5927\u5C0F
@ -358,6 +359,7 @@ FR-Designer_KeyPoint=\u5173\u952E\u8282\u70B9
FR-Designer_loadedTreeModel=\u52A0\u8F7D\u5931\u8D25,\u8BF7\u68C0\u67E5\u540E\u91CD\u8BD5 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-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, \u63D2\u4EF6\u9700\u6C42\u6700\u4F4E\u7248\u672C
FR-Designer-Invalid_Page_Number=\u65E0\u6548\u9875\u7801
FR-Designer_Get-CubeGetting=\u83B7\u53D6cube FR-Designer_Get-CubeGetting=\u83B7\u53D6cube
FR-Designer_XMLA_Database=\u6570\u636E\u5E93 FR-Designer_XMLA_Database=\u6570\u636E\u5E93
FR-Designer_XMLA_UserName=\u7528\u6237\u540D FR-Designer_XMLA_UserName=\u7528\u6237\u540D
@ -490,6 +492,10 @@ FR-Designer-LayerPageReport_Define_PageQuerySQL=\u5B9A\u4E49\u5206\u9875\u67E5\u
FR-Designer_Is_Share_DBTableData=\u5171\u4EAB\u6570\u636E\u96C6 FR-Designer_Is_Share_DBTableData=\u5171\u4EAB\u6570\u636E\u96C6
FR-Designer_Event=\u4E8B\u4EF6 FR-Designer_Event=\u4E8B\u4EF6
FR-Designer_Properties=\u5C5E\u6027 FR-Designer_Properties=\u5C5E\u6027
FR-Designer_Permissions_Edition=\u6743\u9650\u7F16\u8F91
FR-Designer_Export_Excel_Page=\u5206\u9875\u5BFC\u51FA
FR-Designer_Export_Excel_Simple=\u539F\u6837\u5BFC\u51FA
FR-Designer_Export_Excel_PageToSheet=\u5206\u9875\u5206Sheet\u5BFC\u51FA
FR-Designer_Export_failed=\u5BFC\u51FA\u5931\u8D25 FR-Designer_Export_failed=\u5BFC\u51FA\u5931\u8D25
FR-Designer_Exported_successfully=\u5BFC\u51FA\u6210\u529F FR-Designer_Exported_successfully=\u5BFC\u51FA\u6210\u529F
FR-Designer_Exporting=\u6B63\u5728\u5BFC\u51FA FR-Designer_Exporting=\u6B63\u5728\u5BFC\u51FA
@ -514,14 +520,56 @@ FR-Designer_Create_Tree=\u6784\u5EFA\u6811
FR-Designer_Set_Callback_Function=\u8BBE\u7F6E\u56DE\u8C03\u51FD\u6570 FR-Designer_Set_Callback_Function=\u8BBE\u7F6E\u56DE\u8C03\u51FD\u6570
FR-Designer_ConfirmDialog_Content=\u662F\u5426\u786E\u5B9A\u5220\u9664tab\u63A7\u4EF6 FR-Designer_ConfirmDialog_Content=\u662F\u5426\u786E\u5B9A\u5220\u9664tab\u63A7\u4EF6
FR-Designer_ConfirmDialog_Title=FineReport 8.0 FR-Designer_ConfirmDialog_Title=FineReport 8.0
FR-Designer_Background_Null=\u6CA1\u6709\u80CC\u666F
FR-Designer_Background_Color=\u989C\u8272 FR-Designer_FormulaPane_Tips=\u63D0\u793A\:\u60A8\u53EF\u4EE5\u901A\u8FC7\u8F93\u5165B1\u6765\u5199\u5165\u7B2C\u4E00\u884C\u7B2C\u4E8C\u5217\u7684\u6570\u636E\u3002
FR-Designer_Background_Texture=\u7EB9\u7406 FR-Designer_FormulaPane_Variables=\u53D8\u91CF
FR-Designer_Background_Pattern=\u56FE\u6848 FR-Designer_FormulaPane_Formula_Description=\u516C\u5F0F\u8BF4\u660E
FR-Designer_Background_Gradient_Color=\u6E10\u53D8\u8272 FR-Designer_FormulaPane_Function_Detail=\u51FD\u6570\u660E\u7EC6
FR-Designer_Background_Image=\u56FE\u7247 FR-Designer_FormulaPane_Search=\u641C\u7D22
FR-Designer_Background_Clear=\u6E05\u9664
FR-Designer_Background_Image_Select=\u9009\u62E9\u56FE\u7247
FR-Designer_Tab_carousel=tab\u8F6E\u64AD FR-Designer_Tab_carousel=tab\u8F6E\u64AD
FR-Designer_setCarousel=\u5F00\u542F\u8F6E\u64AD FR-Designer_setCarousel=\u5F00\u542F\u8F6E\u64AD
FR-Designer_carouselInterval=\u8F6E\u64AD\u95F4\u9694 FR-Designer_carouselInterval=\u8F6E\u64AD\u95F4\u9694
FR-Designer_ClassName_panel=\u7C7B\u540D
FR-Designer_Description_panel=\u63CF\u8FF0
FR-Designer_Edit_panel=\u7F16\u8F91
FR-Designer_Property_panel=\u5C5E\u6027
FR-Designer_Select_panel=\u9009\u62E9
FR-Designer_LayoutTable_Column_Width=160
FR-Designer_Set_BG_Of_Current_Row=\u586B\u62A5\u5F53\u524D\u7F16\u8F91\u884C\u80CC\u666F\u8BBE\u7F6E
FR-Designer_Unload_Check=\u672A\u63D0\u4EA4\u79BB\u5F00\u63D0\u793A
FR-Designer_ReportColumns_Columns_Optional=\u5206\u680F
FR-Designer_Row_Icon_File_Name=row.png
FR-Designer_Center_Display=\u5C45\u4E2D\u5C55\u793A
FR-Designer_Left_Display=\u5DE6\u5C55\u793A
FR-Designer_About_Version=\u7248\u672C
FR-Designer_About_CopyRight=\u7248\u6743\u6240\u6709
FR-Designer_Service_Phone=\u670D\u52A1\u7535\u8BDD\uFF1A
FR-Designer_Allow_Blank=\u5141\u8BB8\u4E3A\u7A7A
FR-Designer_PageSetup_Page=\u9875\u9762
FR-Designer_Custom_Job_Description=\u63CF\u8FF0
FR-Designer_Property=\u5C5E\u6027
FR-Designer_ClassName=\u7C7B\u540D
FR-Designer_Polyblock_Edit=\u805A\u5408\u5757\u7F16\u8F91
FR-Designer_Function_Description_Area_Text=\u8BE5\u7C7B\u5FC5\u987B\u7EE7\u627F"com.fr.script.AbstractFunction"\u3002\u5E94\u5C06\u7F16\u8BD1\u540E\u7684\u7C7B\u6587\u4EF6\u62F7\u8D1D\u5230\nJ2EE\u670D\u52A1\u5668 "{R1}WEB-INF{R2}classes" \u76EE\u5F55\uFF0C\u5982\u679C\u5FC5\u8981\u7684\u8BDD\u5C06class\u5BF9\u5E94\u7684java\u6E90\u6587\u4EF6\u4E5F\u653E\u7F6E\u5230\u8BE5\u76EE\u5F55\u4E0B\u65B9\u4FBF\u7F16\u8F91\u548C\u67E5\u770B\u3002\n\u4F8B\u5982\uFF1A{R3}classes
FR-Designer_PageSetup_Horizontal=\u6A2A\u5411
FR-Designer_PageSetup_Vertical=\u7EB5\u5411
FR-Designer_Gradient_Direction=\u6E10\u53D8\u65B9\u5411
FR-Designer_Drag_To_Select_Gradient=\\ \u62D6\u52A8\u4E0B\u65B9\u6309\u94AE\u9009\u62E9\u6E10\u53D8\u533A\u57DF\uFF0C\u5355\u51FB\u6309\u94AE\u9009\u62E9\u5BF9\u5E94\u989C\u8272
FR-Designer_Display_Value=\u663E\u793A\u503C
FR-Designer_Actual_Value=\u5B9E\u9645\u503C
FR-Designer_CellWrite_ToolTip=\u5185\u5BB9\u63D0\u793A
FR-Designer_Show_Content=\u663E\u793A\u5185\u5BB9
FR-Designer_Auto_Adjust_Size=\u81EA\u52A8\u8C03\u6574
FR-Designer_Show_As_Download=\u7528\u4E0B\u8F7D\u94FE\u63A5\u663E\u793A\u4E8C\u8FDB\u5236\u5185\u5BB9
FR-Designer_File_Name_For_Download=\u4E0B\u8F7D\u6587\u4EF6\u540D
FR-Designer_No=\u5426
FR-Designer_Pagination=\u5206\u9875
FR-Designer_DS_TableData=\u6570\u636E\u96C6
FR-Designer_Parameter-Formula=\u516C\u5F0F
FR-Designer_Plugin_Should_Update_Please_Contact_Developer=\u63D2\u4EF6\u7248\u672C\u8FC7\u4F4E, \u5B58\u5728API\u4E0D\u517C\u5BB9, \u8BF7\u8054\u7CFB\u5F00\u53D1\u8005\u5347\u7EA7\u63D2\u4EF6
FR-Designer_WidgetOrder=\u63A7\u4EF6\u987A\u5E8F
FR-Designer_Mobile_Form_Analysis_Annotation=\u6CE8\u91CA\uFF1A\u53EF\u4EE5\u901A\u8FC7\u8BE5\u5C5E\u6027\u63A7\u5236\u8868\u5355\u5728APP\u4E2D\u7684\u89E3\u6790\u65B9\u5F0F\u3002
FR-Designer_Mobile_Report_Analysis_Annotation=\u6CE8\u91CA\: \u53EF\u4EE5\u901A\u8FC7\u8BE5\u5C5E\u6027\u63A7\u5236\u62A5\u8868\u5728APP\u4E2D\u7684\u89E3\u6790\u65B9\u5F0F\uFF0C\u53EA\u652F\u6301\u5206\u9875\u9884\u89C8\uFF0C\u586B\u62A5\u9884\u89C8\u65F6\u5C5E\u6027\u65E0\u6548\u3002

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

@ -100,6 +100,7 @@ FR-Designer_FS_Close_Other_Templates=\u95DC\u9589\u5176\u4ED6\u7BC4\u672C
FR-Designer_File=\u6A94\u6848 FR-Designer_File=\u6A94\u6848
FR-Designer_Filter_Conditions=\u904E\u6FFE\u689D\u4EF6 FR-Designer_Filter_Conditions=\u904E\u6FFE\u689D\u4EF6
FR-Designer_Finish-Modify-Share=\u5B8C\u6210\u4FEE\u6539\u4E26\u5206\u4EAB FR-Designer_Finish-Modify-Share=\u5B8C\u6210\u4FEE\u6539\u4E26\u5206\u4EAB
FR-Designer_Fit-App=App\u81EA\u9069\u61C9
FR-Designer_Fit=\u81EA\u9069\u61C9 FR-Designer_Fit=\u81EA\u9069\u61C9
FR-Designer_Font-Family=\u5B57\u9AD4\u540D\u7A31 FR-Designer_Font-Family=\u5B57\u9AD4\u540D\u7A31
FR-Designer_Font-Size=\u5B57\u9AD4\u5927\u5C0F FR-Designer_Font-Size=\u5B57\u9AD4\u5927\u5C0F
@ -357,6 +358,7 @@ FR-Designer_KeyPoint=\u95DC\u9375\u7BC0\u9EDE
FR-Designer_loadedTreeModel=\u52A0\u8F09\u5931\u6557,\u8ACB\u6AA2\u67E5\u5F8C\u91CD\u8A66 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-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, \u63D2\u4EF6\u9700\u6C42\u6700\u4F4E\u7248\u672C
FR-Designer-Invalid_Page_Number=\u7121\u6548\u9801\u78BC
FR-Designer_Get-CubeGetting=\u7372\u53D6cube FR-Designer_Get-CubeGetting=\u7372\u53D6cube
FR-Designer_XMLA_Database=\u8CC7\u6599\u5EAB FR-Designer_XMLA_Database=\u8CC7\u6599\u5EAB
FR-Designer_XMLA_UserName=\u5E33\u865F FR-Designer_XMLA_UserName=\u5E33\u865F
@ -451,12 +453,12 @@ FR-Designer-QQLogin-Determine=\u78BA\u5B9A
FR-Designer-QQLogin-Cancel=\u53D6\u6D88 FR-Designer-QQLogin-Cancel=\u53D6\u6D88
FR-Designer-Reuse_Manager=\u7D44\u4EF6\u7BA1\u7406 FR-Designer-Reuse_Manager=\u7D44\u4EF6\u7BA1\u7406
FR-Designer_TableData-Default-Para=\u6578\u64DA\u96C6\u9ED8\u8A8D\u53C3\u6578 FR-Designer_TableData-Default-Para=\u6578\u64DA\u96C6\u9ED8\u8A8D\u53C3\u6578
FR-Designer_Layout_Block_Absolute= FR-Designer_Layout_Block_Absolute=\u7D55\u5C0D\u756B\u5E03\u584A
FR-Designer_Layout_Block_Tab= FR-Designer_Layout_Block_Tab=Tab\u584A
FR-Designer_Layout_Block_Blank= FR-Designer_Layout_Block_Blank=\u7A7A\u767D\u584A
FR-Designer_Attr_Layout= FR-Designer_Attr_Layout=\u4F48\u5C40
FR-Designer_Attr_Layout_Type= FR-Designer_Attr_Layout_Type=\u4F48\u5C40\u65B9\u5F0F
FR-Designer_Attr_Bidirectional_Adaptive= FR-Designer_Attr_Bidirectional_Adaptive=\u96D9\u5411\u81EA\u9069\u61C9
FR-Designer_Mobile-Refresh=\u5237\u65B0 FR-Designer_Mobile-Refresh=\u5237\u65B0
FR-Designer_Mobile-ToolBar=\u5DE5\u5177\u6B04 FR-Designer_Mobile-ToolBar=\u5DE5\u5177\u6B04
FR-Designer_WLayout-Absolute-ToolTips=\u81EA\u7531\u5F0F\u5E03\u5C40\uFF0C\u53EF\u4EE5\u5728\u5E03\u5C40\u5167\u4EFB\u610F\u4F4D\u7F6E\u65B0\u589E\u63A7\u5236\u9805 FR-Designer_WLayout-Absolute-ToolTips=\u81EA\u7531\u5F0F\u5E03\u5C40\uFF0C\u53EF\u4EE5\u5728\u5E03\u5C40\u5167\u4EFB\u610F\u4F4D\u7F6E\u65B0\u589E\u63A7\u5236\u9805
@ -478,6 +480,10 @@ FR-Designer-LayerPageReport_Define_PageQuerySQL=\u5B9A\u7FA9\u5206\u9801\u67E5\u
FR-Designer_Is_Share_DBTableData=\u662F\u5426\u5171\u4EAB\u8CC7\u6599\u96C6 FR-Designer_Is_Share_DBTableData=\u662F\u5426\u5171\u4EAB\u8CC7\u6599\u96C6
FR-Designer_Properties=\u5C6C\u6027 FR-Designer_Properties=\u5C6C\u6027
FR-Designer_Event=\u4E8B\u4EF6 FR-Designer_Event=\u4E8B\u4EF6
FR-Designer_Permissions_Edition=\u6B0A\u9650\u7DE8\u8F2F
FR-Designer_Export_Excel_Page=\u5206\u9801\u532F\u51FA
FR-Designer_Export_Excel_Simple=\u539F\u6A23\u532F\u51FA
FR-Designer_Export_Excel_PageToSheet=\u5206\u9801\u5206Sheet\u532F\u51FA
FR-Designer_Export_failed=\u532F\u51FA\u5931\u6557 FR-Designer_Export_failed=\u532F\u51FA\u5931\u6557
FR-Designer_Exported_successfully=\u532F\u51FA\u6210\u529F FR-Designer_Exported_successfully=\u532F\u51FA\u6210\u529F
FR-Designer_Exporting=\u6B63\u5728\u532F\u51FA... FR-Designer_Exporting=\u6B63\u5728\u532F\u51FA...
@ -485,31 +491,73 @@ FR-Designer_Export-PDF=PDF\u683C\u5F0F
FR-Designer_Properties_Mobile=\u624B\u6A5F\u5C6C\u6027 FR-Designer_Properties_Mobile=\u624B\u6A5F\u5C6C\u6027
FR-Designer_Button_OK=\u78BA\u5B9A FR-Designer_Button_OK=\u78BA\u5B9A
FR-Designer_Button_Cancel=\u53D6\u6D88 FR-Designer_Button_Cancel=\u53D6\u6D88
FR-Designer_JavaScript= FR-Designer_JavaScript=JavaScript\u8173\u672C
FR-Designer_JavaScript_Form_Submit= FR-Designer_JavaScript_Form_Submit=\u8868\u55AE\u63D0\u4EA4
FR-Designer_JavaScript_Commit_to_Database= FR-Designer_JavaScript_Commit_to_Database=\u63D0\u4EA4\u5165\u5EAB
FR-Designer_JavaScript_Custom= FR-Designer_JavaScript_Custom=\u81EA\u5B9A\u7FA9
FR-Designer_RWA_Submit= FR-Designer_RWA_Submit=\u63D0\u4EA4
FR-Designer_Event_Name= FR-Designer_Event_Name=\u4E8B\u4EF6\u540D
FR-Designer_Event_Type= FR-Designer_Event_Type=\u4E8B\u4EF6\u985E\u578B
FR-Designer_Event_Name_Type= FR-Designer_Event_Name_Type=\u4E8B\u4EF6\u540D\u5B57\u548C\u985E\u578B
FR-Designer_JavaScript_Set= FR-Designer_JavaScript_Set=JS\u8A2D\u7F6E
FR-Designer_Attribute= FR-Designer_Attribute=\u5C6C\u6027
FR-Designer_Form_Editing_Listeners= FR-Designer_Form_Editing_Listeners=\u4E8B\u4EF6\u7DE8\u8F2F
FR-Designer_Form_Basic_Properties= FR-Designer_Form_Basic_Properties=\u57FA\u672C\u5C6C\u6027
FR-Designer_DS_Dictionary= FR-Designer_DS_Dictionary=\u6578\u64DA\u5B57\u5178
FR-Designer_Create_Tree= FR-Designer_Create_Tree=\u69CB\u5EFA\u6A39
FR-Designer_Set_Callback_Function= FR-Designer_Set_Callback_Function=\u8A2D\u7F6E\u56DE\u8ABF\u51FD\u6578
FR-Designer_ConfirmDialog_Content= FR-Designer_ConfirmDialog_Content=\u662F\u5426\u78BA\u5B9A\u522A\u9664TAB\u63A7\u4EF6
FR-Designer_ConfirmDialog_Title= FR-Designer_ConfirmDialog_Title=FineReport 8.0
FR-Designer_Background_Null=
FR-Designer_Background_Color= FR-Designer_FormulaPane_Tips=\u63D0\u793A\:\u60A8\u53EF\u4EE5\u901A\u904E\u8F38\u5165B1\u4F86\u5BEB\u5165\u7B2C\u4E00\u5217\u7B2C\u4E8C\u6B04\u7684\u8CC7\u6599\u3002
FR-Designer_Background_Texture= FR-Designer_FormulaPane_Variables=\u8B8A\u91CF
FR-Designer_Background_Pattern= FR-Designer_FormulaPane_Formula_Description=\u516C\u5F0F\u8AAA\u660E
FR-Designer_Background_Gradient_Color= FR-Designer_FormulaPane_Function_Detail=\u51FD\u6578\u660E\u7D30
FR-Designer_Background_Image= FR-Designer_FormulaPane_Search=\u641C\u7D22
FR-Designer_Background_Clear= FR-Designer_Tab_carousel=Tab\u8F2A\u64AD
FR-Designer_Background_Image_Select= FR-Designer_setCarousel=\u958B\u555F\u8F2A\u64AD
FR-Designer_Tab_carousel= FR-Designer_carouselInterval=\u8F2A\u64AD\u9593\u9694
FR-Designer_setCarousel=
FR-Designer_carouselInterval= FR-Designer_ClassName_panel=\u985E\u540D
FR-Designer_Description_panel=\u63CF\u8FF0
FR-Designer_Edit_panel=\u7DE8\u8F2F
FR-Designer_Property_panel=\u5C6C\u6027
FR-Designer_Select_panel=\u9078\u64C7
FR-Designer_LayoutTable_Column_Width=160
FR-Designer_Set_BG_Of_Current_Row=\u586B\u5831\u7576\u524D\u7DE8\u8F2F\u5217\u80CC\u666F\u8A2D\u5B9A
FR-Designer_Unload_Check=\u672A\u63D0\u4EA4\u96E2\u958B\u63D0\u793A
FR-Designer_ReportColumns_Columns_Optional=\u5831\u8868\u6B04\u4F4D
FR-Designer_Row_Icon_File_Name=row.png
FR-Designer_Center_Display=\u7F6E\u4E2D\u986F\u793A
FR-Designer_Left_Display=\u5DE6\u986F\u793A
FR-Designer_About_Version=\u7248\u672C
FR-Designer_About_CopyRight=\u7248\u6B0A\u6240\u6709
FR-Designer_Service_Phone=\u670D\u52D9\u96FB\u8A71\uFF1A
FR-Designer_Allow_Blank=\u5141\u8A31\u70BA\u7A7A\u767D
FR-Designer_PageSetup_Page=\u9801\u9762
FR-Designer_Custom_Job_Description=\u63CF\u8FF0
FR-Designer_Property=\u5C6C\u6027
FR-Designer_ClassName=\u985E\u540D
FR-Designer_Polyblock_Edit=\u805A\u5408\u584A\u7DE8\u8F2F
FR-Designer_Function_Description_Area_Text=\u8A72\u985E\u5FC5\u9808\u7E7C\u627F"com.fr.script.AbstractFunction"\u3002\u61C9\u5C07\u7DE8\u8B6F\u5F8C\u7684\u985E\u6A94\u6848\u62F7\u8C9D\u5230\nJ2EE\u4F3A\u670D\u5668 "{R1}WEB-INF{R2}classes" \u76EE\u9304\uFF0C\u5982\u679C\u5FC5\u8981\u7684\u8A71\u5C07class\u5C0D\u61C9\u7684java\u539F\u59CB\u6A94\u6848\u4E5F\u653E\u7F6E\u5230\u8A72\u76EE\u9304\u4E0B\u65B9\u4FBF\u7DE8\u8F2F\u548C\u67E5\u770B\u3002\n\u4F8B\u5982\uFF1A{R3}classes
FR-Designer_PageSetup_Horizontal=\u6A2A\u5411
FR-Designer_PageSetup_Vertical=\u7E31\u5411
FR-Designer_Gradient_Direction=\u6F38\u8B8A\u65B9\u5411
FR-Designer_Drag_To_Select_Gradient=\\ \u62D6\u52D5\u4E0B\u767C\u90A3\u500B\u6309\u9215\u61F8\u8457\u5340\u57DF\uFF0C\u55AE\u64CA\u6309\u9215\u9078\u64C7\u984F\u8272
FR-Designer_Display_Value=\u986F\u793A\u503C
FR-Designer_Actual_Value=\u5BE6\u969B\u503C
FR-Designer_CellWrite_ToolTip=\u5167\u5BB9\u63D0\u793A
FR-Designer_Show_Content=\u986F\u793A\u5167\u5BB9
FR-Designer_Auto_Adjust_Size=\u81EA\u52D5\u8ABF\u6574
FR-Designer_Show_As_Download=\u7528\u4E0B\u8F09\u93C8\u63A5\u986F\u793A\u4E8C\u9032\u5236\u5167\u5BB9
FR-Designer_File_Name_For_Download=\u4E0B\u8F09\u6A94\u6848\u540D
FR-Designer_No=\u5426
FR-Designer_Pagination=\u5206\u9801
FR-Designer_DS_TableData=\u8CC7\u6599\u96C6
FR-Designer_Parameter-Formula=\u516C\u5F0F
FR-Designer_Plugin_Should_Update_Please_Contact_Developer=\u63D2\u4EF6\u7248\u672C\u904E\u4F4E, \u5B58\u5728API\u4E0D\u517C\u5BB9, \u8ACB\u806F\u7E6B\u958B\u767C\u8005\u5347\u7D1A\u63D2\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

3
designer_base/src/com/fr/design/mainframe/DesignerFrame.java

@ -169,7 +169,6 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
/** /**
* 初始menuPane的方法 方便OEM时修改该组件 * 初始menuPane的方法 方便OEM时修改该组件
* @param ad
*/ */
protected void initMenuPane(){ protected void initMenuPane(){
menuPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); menuPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
@ -189,7 +188,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
final JPanel northEastPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); final JPanel northEastPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
GeneralContext.addPluginReadListener(new PluginReadListener() { GeneralContext.addPluginReadListener(new PluginReadListener() {
@Override @Override
public void success() { public void success(Status status) {
TitlePlaceProcessor processor = ExtraDesignClassManager.getInstance().getSingle(TitlePlaceProcessor.MARK_STRING); TitlePlaceProcessor processor = ExtraDesignClassManager.getInstance().getSingle(TitlePlaceProcessor.MARK_STRING);
if (processor == null) { if (processor == null) {
processor = new DefaultTitlePlace(); processor = new DefaultTitlePlace();

2
designer_base/src/com/fr/design/mainframe/DesignerFrameFileDealerPane.java

@ -29,6 +29,7 @@ import com.fr.file.filetree.FileNode;
import com.fr.general.ComparatorUtils; import com.fr.general.ComparatorUtils;
import com.fr.general.GeneralContext; import com.fr.general.GeneralContext;
import com.fr.general.Inter; import com.fr.general.Inter;
import com.fr.plugin.proxy.PluginProxyCompatibleUtils;
import com.fr.stable.CoreConstants; import com.fr.stable.CoreConstants;
import com.fr.stable.StableUtils; import com.fr.stable.StableUtils;
import com.fr.stable.project.ProjectConstants; import com.fr.stable.project.ProjectConstants;
@ -131,6 +132,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt
} }
toolbarDef.addShortCut(delFileAction); toolbarDef.addShortCut(delFileAction);
Set<ShortCut> extraShortCuts = ExtraDesignClassManager.getInstance().getArray(ShortCut.TEMPLATE_TREE); Set<ShortCut> extraShortCuts = ExtraDesignClassManager.getInstance().getArray(ShortCut.TEMPLATE_TREE);
extraShortCuts = PluginProxyCompatibleUtils.toOriObjectHashSet(extraShortCuts);
for (ShortCut shortCut : extraShortCuts){ for (ShortCut shortCut : extraShortCuts){
toolbarDef.addShortCut(shortCut); toolbarDef.addShortCut(shortCut);
} }

2
designer_base/src/com/fr/design/mainframe/WestRegionContainerPane.java

@ -29,7 +29,7 @@ public class WestRegionContainerPane extends UIResizableContainer {
super(DesignerFrameFileDealerPane.getInstance(), Constants.RIGHT); super(DesignerFrameFileDealerPane.getInstance(), Constants.RIGHT);
GeneralContext.addPluginReadListener(new PluginReadListener() { GeneralContext.addPluginReadListener(new PluginReadListener() {
@Override @Override
public void success() { public void success(Status status) {
setDownPane(TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter())); setDownPane(TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter()));
} }
}); });

15
designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java

@ -10,7 +10,9 @@ import com.fr.design.ExtraDesignClassManager;
import com.fr.design.actions.UpdateAction; import com.fr.design.actions.UpdateAction;
import com.fr.design.actions.community.*; import com.fr.design.actions.community.*;
import com.fr.design.actions.file.*; import com.fr.design.actions.file.*;
import com.fr.design.actions.help.*; import com.fr.design.actions.help.AboutAction;
import com.fr.design.actions.help.TutorialAction;
import com.fr.design.actions.help.WebDemoAction;
import com.fr.design.actions.server.*; import com.fr.design.actions.server.*;
import com.fr.design.file.NewTemplatePane; import com.fr.design.file.NewTemplatePane;
import com.fr.design.fun.MenuHandler; import com.fr.design.fun.MenuHandler;
@ -28,7 +30,6 @@ import com.fr.design.menu.ShortCut;
import com.fr.design.menu.ToolBarDef; import com.fr.design.menu.ToolBarDef;
import com.fr.env.RemoteEnv; import com.fr.env.RemoteEnv;
import com.fr.general.ComparatorUtils; import com.fr.general.ComparatorUtils;
import com.fr.general.GeneralContext;
import com.fr.general.Inter; import com.fr.general.Inter;
import com.fr.stable.ArrayUtils; import com.fr.stable.ArrayUtils;
import com.fr.stable.ProductConstants; import com.fr.stable.ProductConstants;
@ -160,9 +161,8 @@ public abstract class ToolBarMenuDock {
public Locale[] supportCommunityLocales() { public Locale[] supportCommunityLocales() {
return new Locale[]{ return new Locale[]{
Locale.CHINA, Locale.CHINA,
Locale.JAPAN,
Locale.TAIWAN, Locale.TAIWAN,
Locale.US, Locale.US
}; };
} }
@ -314,6 +314,11 @@ public abstract class ToolBarMenuDock {
public ShortCut[] createHelpShortCuts() { public ShortCut[] createHelpShortCuts() {
java.util.List<ShortCut> shortCuts = new ArrayList<ShortCut>(); java.util.List<ShortCut> shortCuts = new ArrayList<ShortCut>();
shortCuts.add(new WebDemoAction()); shortCuts.add(new WebDemoAction());
// 英文,把 video 和帮助文档放到 Help 下面
if (FRContext.getLocale().equals(Locale.US)) {
shortCuts.add(new VideoAction());
shortCuts.add(new TutorialAction());
}
shortCuts.add(SeparatorDef.DEFAULT); shortCuts.add(SeparatorDef.DEFAULT);
//shortCuts.add(new TutorialAction()); //shortCuts.add(new TutorialAction());
shortCuts.add(SeparatorDef.DEFAULT); shortCuts.add(SeparatorDef.DEFAULT);
@ -398,7 +403,7 @@ public abstract class ToolBarMenuDock {
return toolBar; return toolBar;
} else { } else {
return polyToolBar(Inter.getLocText(new String[]{"Polybolck", "Edit"})); return polyToolBar(Inter.getLocText("FR-Designer_Polyblock_Edit"));
} }
} }

10
designer_base/src/com/fr/design/present/dict/TableDataDictPane.java

@ -77,7 +77,7 @@ public class TableDataDictPane extends FurtherBasicBeanPane<TableDataDictionary>
} }
}); });
keyColumnPane = ValueEditorPaneFactory.createValueEditorPane(new Editor[]{new ColumnNameEditor(), new ColumnIndexEditor()}); keyColumnPane = ValueEditorPaneFactory.createValueEditorPane(new Editor[]{new ColumnNameEditor(), new ColumnIndexEditor()});
FormulaEditor formulaEditor = new FormulaEditor(Inter.getLocText("Parameter-Formula")); FormulaEditor formulaEditor = new FormulaEditor(Inter.getLocText("FR-Designer_Parameter-Formula"));
formulaEditor.setEnabled(true); formulaEditor.setEnabled(true);
valueDictPane = ValueEditorPaneFactory.createValueEditorPane(new Editor[]{new ColumnNameEditor(), new ColumnIndexEditor(), formulaEditor}); valueDictPane = ValueEditorPaneFactory.createValueEditorPane(new Editor[]{new ColumnNameEditor(), new ColumnIndexEditor(), formulaEditor});
} }
@ -95,9 +95,9 @@ public class TableDataDictPane extends FurtherBasicBeanPane<TableDataDictionary>
Component[][] components = new Component[][]{ Component[][] components = new Component[][]{
new Component[]{new UILabel(" " + Inter.getLocText("DS-TableData") + ":", UILabel.RIGHT), firstLine}, new Component[]{new UILabel(" " + Inter.getLocText("FR-Designer_DS_TableData") + ":", UILabel.RIGHT), firstLine},
new Component[]{new UILabel(Inter.getLocText("Actual_Value") + ":", UILabel.RIGHT), keyColumnPane}, new Component[]{new UILabel(Inter.getLocText("FR-Designer_Actual_Value") + ":", UILabel.RIGHT), keyColumnPane},
new Component[]{new UILabel(Inter.getLocText("Display_Value") + ":", UILabel.RIGHT), valueDictPane} new Component[]{new UILabel(Inter.getLocText("FR-Designer_Display_Value") + ":", UILabel.RIGHT), valueDictPane}
}; };
JPanel panel = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); JPanel panel = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize);
@ -158,7 +158,7 @@ public class TableDataDictPane extends FurtherBasicBeanPane<TableDataDictionary>
columnIndexEditor1.addItemListener(itemListener); columnIndexEditor1.addItemListener(itemListener);
keyColumnPane.setEditors(new Editor[]{columnNameEditor1, columnIndexEditor1}, columnNames[0]); keyColumnPane.setEditors(new Editor[]{columnNameEditor1, columnIndexEditor1}, columnNames[0]);
FormulaEditor formulaEditor = new FormulaEditor(Inter.getLocText("Parameter-Formula")); FormulaEditor formulaEditor = new FormulaEditor(Inter.getLocText("FR-Designer_Parameter-Formula"));
formulaEditor.setEnabled(true); formulaEditor.setEnabled(true);
formulaEditor.addChangeListener(new ChangeListener() { formulaEditor.addChangeListener(new ChangeListener() {

2
designer_base/src/com/fr/design/roleAuthority/RoleTree.java

File diff suppressed because one or more lines are too long

8
designer_base/src/com/fr/design/style/background/gradient/GradientBackgroundPane.java

@ -43,7 +43,7 @@ public class GradientBackgroundPane extends BackgroundDetailPane {
JPanel blankJp = new JPanel(); JPanel blankJp = new JPanel();
gradientBar = new GradientBar(4, 254); gradientBar = new GradientBar(4, 254);
blankJp.add(gradientBar); blankJp.add(gradientBar);
UILabel jl = new UILabel(Inter.getLocText("Drag_to_select_gradient")); UILabel jl = new UILabel(Inter.getLocText("FR-Designer_Drag_To_Select_Gradient"));
jl.setHorizontalAlignment(SwingConstants.CENTER); jl.setHorizontalAlignment(SwingConstants.CENTER);
gradientPanel.add(jl, BorderLayout.NORTH); gradientPanel.add(jl, BorderLayout.NORTH);
gradientPanel.add(blankJp, BorderLayout.SOUTH); gradientPanel.add(blankJp, BorderLayout.SOUTH);
@ -53,14 +53,14 @@ public class GradientBackgroundPane extends BackgroundDetailPane {
JPanel innercenterPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); JPanel innercenterPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane();
centerPane.add(new UILabel(" ")); centerPane.add(new UILabel(" "));
centerPane.add(innercenterPane); centerPane.add(innercenterPane);
innercenterPane.add(new UILabel(Inter.getLocText("Gradient-Direction") + ":")); innercenterPane.add(new UILabel(Inter.getLocText("FR-Designer_Gradient_Direction") + ":"));
left2right = new UIRadioButton(Inter.getLocText("PageSetup-Landscape")); left2right = new UIRadioButton(Inter.getLocText("FR-Designer_PageSetup_Horizontal"));
innercenterPane.add(left2right); innercenterPane.add(left2right);
left2right.setSelected(true); left2right.setSelected(true);
left2right.addActionListener(reviewListener); left2right.addActionListener(reviewListener);
top2bottom = new UIRadioButton(Inter.getLocText("PageSetup-Portrait")); top2bottom = new UIRadioButton(Inter.getLocText("FR-Designer_PageSetup_Vertical"));
innercenterPane.add(top2bottom); innercenterPane.add(top2bottom);
top2bottom.addActionListener(reviewListener); top2bottom.addActionListener(reviewListener);

7
designer_base/src/com/fr/design/style/color/ColorPicker.java

@ -7,11 +7,14 @@ package com.fr.design.style.color;
import com.fr.base.BaseUtils; import com.fr.base.BaseUtils;
import com.fr.general.FRLogger; import com.fr.general.FRLogger;
import javax.swing.*;
import java.awt.*; import java.awt.*;
import java.awt.event.*; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.Ellipse2D; import java.awt.geom.Ellipse2D;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import javax.swing.*;
/** /**
* 取色框 * 取色框

1
designer_base/src/com/fr/design/style/color/ColorSelectBox.java

@ -63,6 +63,7 @@ public class ColorSelectBox extends AbstractSelectBox<Color> implements UIObserv
fireDisplayComponent(ColorBackground.getInstance(color)); fireDisplayComponent(ColorBackground.getInstance(color));
} }
}); });
colorPane.setColor(color);
return colorPane; return colorPane;
} }

226
designer_base/src/com/fr/design/style/color/ColorSelectConfigManager.java

@ -1,56 +1,192 @@
package com.fr.design.style.color; package com.fr.design.style.color;
import com.fr.file.XMLFileManager;
import com.fr.base.FRContext;
import com.fr.cluster.rpc.RPC;
import com.fr.file.BaseClusterHelper;
import com.fr.general.ComparatorUtils;
import com.fr.general.GeneralContext;
import com.fr.stable.EnvChangedListener;
import com.fr.stable.xml.XMLPrintWriter;
import com.fr.stable.xml.XMLTools;
import com.fr.stable.xml.XMLableReader;
import com.fr.general.FRLogger;
import java.awt.Color; import java.awt.Color;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.io.InputStream;
/** /**
* 最近使用颜色 * 最近使用颜色
* @author focus
* *
* @author focus
*/ */
public class ColorSelectConfigManager{ public class ColorSelectConfigManager extends XMLFileManager implements ColorSelectConfigManagerProvider {
// 最近使用的颜色个数 // 最近使用的颜色个数
private int colorNums = 20; private int colorNums = 20;
// 最近使用颜色
private List<Color> colors; private static ColorSelectConfigManagerProvider configManager = null;
private static ColorSelectConfigManager colorSelectConfigManager = null;
private static ColorSelectConfigManager colorSelectConfigManager = null; private boolean init = true;
// 最近使用颜色
public Color[] getColors() { private List<Color> colors = new ArrayList<Color>();
if(colors == null){ private static final String RECENT_COLOR_TAG = "RecentColors";
colors = new ArrayList<Color>(); private static final String COLOR_TAG = "Color";
}
return colors.toArray(new Color[colors.size()]); static {
} GeneralContext.addEnvChangedListener(new EnvChangedListener() {
public void envChanged() {
public int getColorNum() { ColorSelectConfigManager.envChanged();
return colorNums; }
} });
public void setColorNum(int colorNums) { }
this.colorNums = colorNums;
} private static void envChanged() {
configManager = null;
public synchronized static ColorSelectConfigManager getInstance() { }
if (colorSelectConfigManager == null) {
colorSelectConfigManager = new ColorSelectConfigManager(); public Color[] getColors() {
}
return colorSelectConfigManager; //初次打开软件时从xml文件中获取历史颜色信息
} if (init) {
ColorSelectConfigManagerProvider manager = ColorSelectConfigManager.getProviderInstance();
/** this.colors = manager.getColorsFromFile();
* 添加颜色到最近使用队列中 init = false;
* }
* @param color 颜色 if (colors == null) {
* colors = new ArrayList<Color>();
*/ }
public void addToColorQueue(Color color){ return colors.toArray(new Color[colors.size()]);
// 过滤重复的最近使用颜色 }
// 因为有个后进先出的问题,最近使用的颜色需要放到最前面所以没用set
if(colors.contains(color)){ public int getColorNum() {
colors.remove(color); return colorNums;
} }
colors.add(color);
} public void setColorNum(int colorNums) {
this.colorNums = colorNums;
}
public synchronized static ColorSelectConfigManager getInstance() {
if (colorSelectConfigManager == null) {
colorSelectConfigManager = new ColorSelectConfigManager();
}
return colorSelectConfigManager;
}
/**
* 添加颜色到最近使用队列中
*
* @param color 颜色
*/
public void addToColorQueue(Color color) {
// 过滤重复的最近使用颜色
// 因为有个后进先出的问题,最近使用的颜色需要放到最前面所以没用set
if (colors.contains(color)) {
colors.remove(color);
}
colors.add(color);
/*@author yaohwu*/
//将历史颜色信息保存到xml文件中去
ColorSelectConfigManagerProvider manager = ColorSelectConfigManager.getProviderInstance();
if (colors != null && !colors.isEmpty()) {
manager.setColorsToFile(colors);
}
try {
FRContext.getCurrentEnv().writeResource(manager);
} catch (Exception e) {
FRLogger.getLogger().error(e.getMessage());
}
}
/**
* 读取配置文件流
*
* @param input
* @throws Exception 异常
*/
@Override
public void readFromInputStream(InputStream input) throws Exception {
ColorSelectConfigManager manager = new ColorSelectConfigManager();
XMLTools.readInputStreamXML(manager, input);
configManager = manager;
FRContext.getCurrentEnv().writeResource(configManager);
}
/**
* 获取配置管理接口
*
* @return 配置管理接口ConfigManagerProvider
*/
public synchronized static ColorSelectConfigManagerProvider getProviderInstance() {
if (configManager == null) {
if (isClusterMember()) {
return configManager;
}
configManager.readXMLFile();
}
return configManager;
}
private synchronized static boolean isClusterMember() {
switch (BaseClusterHelper.getClusterState()) {
case LEADER:
configManager = new ColorSelectConfigManager();
RPC.registerSkeleton(configManager);
return false;
case MEMBER:
String ip = BaseClusterHelper.getMainServiceIP();
configManager = (ColorSelectConfigManagerProvider) RPC.getProxy(ColorSelectConfigManager.class, ip);
return true;
default:
configManager = new ColorSelectConfigManager();
break;
}
return false;
}
public boolean writeResource() throws Exception {
return FRContext.getCurrentEnv().writeResource(ColorSelectConfigManager.getProviderInstance());
}
public String fileName() {
return "recentcolors.xml";
}
public void readXML(XMLableReader reader) {
String name = reader.getTagName();
if (reader.isChildNode()) {
if (ComparatorUtils.equals(COLOR_TAG, name)) {
Color color = null;
colors.add(reader.getAttrAsColor("colors", color));
}
}
}
public void writeXML(XMLPrintWriter writer) {
writer.startTAG(RECENT_COLOR_TAG);
if (this.colors != null && !this.colors.isEmpty()) {
for (int i = 0; i < this.colors.size(); i++) {
writer.startTAG(COLOR_TAG);
writer.attr("colors", colors.get(i).getRGB());
writer.end();
}
}
writer.end();
}
public List<Color> getColorsFromFile() {
return this.colors;
}
public void setColorsToFile(List<Color> colors) {
this.colors = colors;
}
} }

17
designer_base/src/com/fr/design/style/color/ColorSelectConfigManagerProvider.java

@ -0,0 +1,17 @@
package com.fr.design.style.color;
import com.fr.stable.file.RemoteXMLFileManagerProvider;
import java.awt.Color;
import java.util.List;
/**
* Created by yaohwu on 2017/2/8.
*/
public interface ColorSelectConfigManagerProvider extends RemoteXMLFileManagerProvider {
List<Color> getColorsFromFile();
void setColorsToFile(List<Color> colors);
}

25
designer_base/src/com/fr/design/style/color/ColorSelectPane.java

@ -71,11 +71,8 @@ public class ColorSelectPane extends TransparentPane implements ColorSelectable
centerPane.add(getRow1Pane()); centerPane.add(getRow1Pane());
JPanel menuColorPane1 = new JPanel(); JPanel menuColorPane1 = getMenuColorPane();
centerPane.add(menuColorPane1); centerPane.add(menuColorPane1);
menuColorPane1.setLayout(new GridLayout(5, 8, 1, 1));
menuColorPane1.setBorder(BorderFactory.createEmptyBorder(8, 8, 0, 8));
Color[] colorArray = this.getColorArray(); Color[] colorArray = this.getColorArray();
for (int i = 0; i < colorArray.length; i++) { for (int i = 0; i < colorArray.length; i++) {
Color color = colorArray[i] == null ? UsedColorPane.DEFAULT_COLOR : colorArray[i]; Color color = colorArray[i] == null ? UsedColorPane.DEFAULT_COLOR : colorArray[i];
@ -94,24 +91,28 @@ public class ColorSelectPane extends TransparentPane implements ColorSelectable
}); });
customButton.setCursor(new Cursor(Cursor.HAND_CURSOR)); customButton.setCursor(new Cursor(Cursor.HAND_CURSOR));
JPanel centerPane1 = FRGUIPaneFactory.createBorderLayout_S_Pane(); JPanel centerPane1 = FRGUIPaneFactory.createBorderLayout_S_Pane();
centerPane1.setBorder(BorderFactory.createEmptyBorder(2, 8, 0, 8)); centerPane1.setBorder(BorderFactory.createEmptyBorder(2, 8, 8, 8));
centerPane1.add(customButton, BorderLayout.NORTH); centerPane1.add(customButton, BorderLayout.NORTH);
centerPane.add(centerPane1); centerPane.add(centerPane1);
} }
protected JPanel getMenuColorPane() {
JPanel menuColorPane = new JPanel();
menuColorPane.setLayout(new GridLayout(5, 8, 1, 1));
menuColorPane.setBorder(BorderFactory.createEmptyBorder(8, 8, 0, 8));
return menuColorPane;
}
// 第一行,1个取色按钮 + 7个最近使用的颜色 // 第一行,1个取色按钮 + 7个最近使用的颜色
private JPanel getRow1Pane() { protected JPanel getRow1Pane() {
JPanel row1Pane = new JPanel(FRGUIPaneFactory.createBorderLayout()); JPanel row1Pane = new JPanel(FRGUIPaneFactory.createBorderLayout());
row1Pane.setBorder(BorderFactory.createEmptyBorder(8, 8, 0, 0)); row1Pane.setBorder(BorderFactory.createEmptyBorder(8, 8, 0, 0));
row1Pane.setPreferredSize(new Dimension(135, 24)); // 宽度为 16 * 8 + 7 row1Pane.setPreferredSize(new Dimension(135, 24)); // 宽度为 16 * 8 + 7
// 取色按钮
UIButton pickColorButton = PickColorButtonFactory.getPickColorButton(this, PickColorButtonFactory.IconType.ICON16, true);
row1Pane.add(pickColorButton, BorderLayout.WEST);
// 最近使用 // 最近使用
UsedColorPane usedColorPane = new UsedColorPane(1, 7, ColorSelectConfigManager.getInstance().getColors(),this); UsedColorPane usedColorPane = new UsedColorPane(1, 8, 1, ColorSelectConfigManager.getInstance().getColors(), this, true, true);
usedColorPane.getPane().setBorder(BorderFactory.createEmptyBorder(0, 1, 0, 8)); usedColorPane.getPane().setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 8));
row1Pane.add(usedColorPane.getPane()); row1Pane.add(usedColorPane.getPane());
return row1Pane; return row1Pane;
} }

23
designer_base/src/com/fr/design/style/color/CustomChooserPanel.java

@ -1,15 +1,7 @@
package com.fr.design.style.color; package com.fr.design.style.color;
import java.awt.BorderLayout; import java.awt.*;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Point;
import java.awt.event.*; import java.awt.event.*;
import java.awt.image.MemoryImageSource; import java.awt.image.MemoryImageSource;
import java.util.regex.Matcher; import java.util.regex.Matcher;
@ -29,6 +21,7 @@ import javax.swing.event.DocumentListener;
import javax.swing.text.BadLocationException; import javax.swing.text.BadLocationException;
import javax.swing.text.Document; import javax.swing.text.Document;
import com.fr.design.gui.ibutton.SpecialUIButton;
import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.ibutton.UIRadioButton; import com.fr.design.gui.ibutton.UIRadioButton;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
@ -709,12 +702,20 @@ class CustomChooserPanel extends AbstractColorChooserPanel implements ColorSelec
hexPanel.setLayout(new FlowLayout(FlowLayout.RIGHT, 8, 0)); hexPanel.setLayout(new FlowLayout(FlowLayout.RIGHT, 8, 0));
hexPanel.add(new UILabel("#")); hexPanel.add(new UILabel("#"));
hexPanel.add(field); hexPanel.add(field);
UIButton pickColorButton = PickColorButtonFactory.getPickColorButton(this, PickColorButtonFactory.IconType.ICON18, true);
hexPanel.add(pickColorButton);
mainPanel.add(hslAndRgbPanel, BorderLayout.CENTER); mainPanel.add(hslAndRgbPanel, BorderLayout.CENTER);
mainPanel.add(hexPanel, BorderLayout.SOUTH); mainPanel.add(hexPanel, BorderLayout.SOUTH);
JPanel rightPane = new JPanel(new BorderLayout());
SpecialUIButton pickColorButton = PickColorButtonFactory.getPickColorButton(this, PickColorButtonFactory.IconType.ICON18, true);
JPanel blankArea = new JPanel();
blankArea.setPreferredSize(new Dimension(100, 175));
rightPane.add(blankArea, BorderLayout.CENTER);
JPanel buttonPane = new JPanel(new BorderLayout());
buttonPane.add(pickColorButton, BorderLayout.WEST);
rightPane.add(buttonPane, BorderLayout.SOUTH);
container.add(rightPane);
return container; return container;
} }

11
designer_base/src/com/fr/design/style/color/NewColorSelectPane.java

@ -79,19 +79,14 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable {
JPanel centerPane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane(); JPanel centerPane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane();
this.add(centerPane, BorderLayout.CENTER); this.add(centerPane, BorderLayout.CENTER);
// 第一行,1个取色按钮 + 7个最近使用的颜色 // 第一行
JPanel row1Pane = new JPanel(FRGUIPaneFactory.createBorderLayout()); JPanel row1Pane = new JPanel(FRGUIPaneFactory.createBorderLayout());
row1Pane.setBorder(BorderFactory.createEmptyBorder(8, 8, 0, 0)); row1Pane.setBorder(BorderFactory.createEmptyBorder(8, 8, 0, 0));
row1Pane.setPreferredSize(new Dimension(135, 16)); // 宽度为 16 * 8 + 7 row1Pane.setPreferredSize(new Dimension(135, 16)); // 宽度为 16 * 8 + 7
centerPane.add(row1Pane); centerPane.add(row1Pane);
// 取色按钮
UIButton pickColorButton = PickColorButtonFactory.getPickColorButton(this, PickColorButtonFactory.IconType.ICON16);
row1Pane.add(pickColorButton, BorderLayout.WEST);
// 最近使用 // 最近使用
usedColorPane = new UsedColorPane(1, 7, ColorSelectConfigManager.getInstance().getColors(),this); usedColorPane = new UsedColorPane(1, 8, 1, ColorSelectConfigManager.getInstance().getColors(), this, true, false);
usedColorPane.getPane().setBorder(BorderFactory.createEmptyBorder(0, 1, 0, 8)); usedColorPane.getPane().setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 8));
row1Pane.add(usedColorPane.getPane()); row1Pane.add(usedColorPane.getPane());
JPanel menuColorPane1 = new JPanel(); JPanel menuColorPane1 = new JPanel();

50
designer_base/src/com/fr/design/style/color/PickColorButtonFactory.java

@ -1,8 +1,10 @@
package com.fr.design.style.color; package com.fr.design.style.color;
import com.fr.base.BaseUtils; import com.fr.base.BaseUtils;
import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ibutton.SpecialUIButton;
import javax.swing.*;
import javax.swing.plaf.ButtonUI;
import java.awt.*; import java.awt.*;
import java.awt.event.*; import java.awt.event.*;
@ -10,21 +12,29 @@ import java.awt.event.*;
* Created by plough on 2016/12/22. * Created by plough on 2016/12/22.
*/ */
public class PickColorButtonFactory { public class PickColorButtonFactory {
private static int iconSize;
private static final int SIZE_16 = 16;
private static final int SIZE_18 = 18;
private static IconType iconType;
private static Image iconImage;
public static UIButton getPickColorButton(ColorSelectable colorSelectable, IconType iconType) { public static SpecialUIButton getPickColorButton(ColorSelectable colorSelectable, IconType iconType) {
return getPickColorButton(colorSelectable, iconType, false); return getPickColorButton(colorSelectable, iconType, false);
} }
public static UIButton getPickColorButton(final ColorSelectable colorSelectable, IconType iconType, final Boolean setColorRealTime) { public static SpecialUIButton getPickColorButton(final ColorSelectable colorSelectable, IconType iconType, final boolean setColorRealTime) {
UIButton pickColorButton = new UIButton(); SpecialUIButton pickColorButton = new SpecialUIButton(new WhiteButtonUI());
PickColorButtonFactory.iconType = iconType;
if (iconType == IconType.ICON16) { if (iconType == IconType.ICON16) {
pickColorButton.setIcon(BaseUtils.readIcon("/com/fr/design/images/gui/colorPicker/colorPicker16.png")); iconImage = BaseUtils.readImage("/com/fr/design/images/gui/colorPicker/colorPicker16.png");
pickColorButton.setPreferredSize(new Dimension(16, 16)); iconSize = SIZE_16;
} else { } else {
pickColorButton.setIcon(BaseUtils.readIcon("/com/fr/design/images/gui/colorPicker/colorPicker18.png")); iconImage = BaseUtils.readImage("/com/fr/design/images/gui/colorPicker/colorPicker18.png");
pickColorButton.setPreferredSize(new Dimension(18, 18)); iconSize = SIZE_18;
pickColorButton.setBorderPainted(false);
} }
pickColorButton.setPreferredSize(new Dimension(iconSize, iconSize));
pickColorButton.setCursor(new Cursor(Cursor.HAND_CURSOR)); pickColorButton.setCursor(new Cursor(Cursor.HAND_CURSOR));
pickColorButton.addMouseListener(new MouseAdapter() { pickColorButton.addMouseListener(new MouseAdapter() {
@ -41,4 +51,28 @@ public class PickColorButtonFactory {
public enum IconType { public enum IconType {
ICON16, ICON18 ICON16, ICON18
} }
private static class WhiteButtonUI extends ButtonUI {
@Override
public void paint(Graphics g, JComponent c) {
super.paint(g, c);
Dimension size = c.getSize();
g.setColor(Color.white);
g.fillRoundRect(0, 0, size.width - 1, size.height - 1, 1, 1);
g.setColor(new Color(153, 153, 153)); // #999999
g.drawRoundRect(0, 0, size.width - 1, size.height - 1, 1, 1);
if (iconType == IconType.ICON16) {
g.drawImage(
iconImage,
(size.width - iconImage.getWidth(null)) / 2,
(size.height - iconImage.getHeight(null)) / 2,
iconImage.getWidth(null),
iconImage.getHeight(null),
null
);
} else {
g.drawImage(iconImage, 0, 0, iconSize, iconSize, null);
}
}
}
} }

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

@ -7,6 +7,7 @@ import javax.swing.BorderFactory;
import javax.swing.JPanel; import javax.swing.JPanel;
import com.fr.design.dialog.BasicPane; import com.fr.design.dialog.BasicPane;
import com.fr.design.gui.ibutton.SpecialUIButton;
public class UsedColorPane extends BasicPane{ public class UsedColorPane extends BasicPane{
@ -16,6 +17,12 @@ public class UsedColorPane extends BasicPane{
private int columns; private int columns;
// 最近使用面板行数 // 最近使用面板行数
private int rows; private int rows;
// 留白的单元格数量
private int reserveCells;
// 是否需要取色器按钮
private boolean needPickColorButton;
// 是否在取色时实时设定颜色
private boolean setColorRealTime;
// 最近使用颜色 // 最近使用颜色
private Object[] colors; private Object[] colors;
// 最近使用面板 // 最近使用面板
@ -40,16 +47,26 @@ public class UsedColorPane extends BasicPane{
* *
* @param rows * @param rows
* @param columns * @param columns
* @param reserveCells 留白的单元格个数
* @param colors 最近使用的颜色 * @param colors 最近使用的颜色
* @param needPickColorButton 是否需要加上取色器按钮
* @param setColorRealTime 取色器是否实时设定颜色
*/ */
public UsedColorPane(int rows,int columns,Object[] colors,ColorSelectable selectable){ public UsedColorPane(int rows,int columns,int reserveCells, Object[] colors, ColorSelectable selectable, boolean needPickColorButton, boolean setColorRealTime){
this.columns = columns; this.columns = columns;
this.rows = rows; this.rows = rows;
this.reserveCells = reserveCells;
this.colors = colors; this.colors = colors;
this.selectable = selectable; this.selectable = selectable;
this.needPickColorButton = needPickColorButton;
this.setColorRealTime = setColorRealTime;
initialComponents(); initialComponents();
} }
public UsedColorPane(int rows,int columns, Object[] colors,ColorSelectable selectable){
this(rows, columns, 0, colors, selectable, false, false);
}
private void initialComponents(){ private void initialComponents(){
int total = columns * rows; int total = columns * rows;
JPanel panel = new JPanel(); JPanel panel = new JPanel();
@ -57,9 +74,25 @@ public class UsedColorPane extends BasicPane{
panel.setBorder(BorderFactory.createEmptyBorder(8, 8, 0, 8)); panel.setBorder(BorderFactory.createEmptyBorder(8, 8, 0, 8));
Color[] colors = ColorSelectConfigManager.getInstance().getColors(); Color[] colors = ColorSelectConfigManager.getInstance().getColors();
int size = colors.length; int size = colors.length;
for (int i = 0; i < total; i++) {
int i = 0;
if (needPickColorButton) {
// 取色按钮
SpecialUIButton pickColorButton = PickColorButtonFactory.getPickColorButton(selectable, PickColorButtonFactory.IconType.ICON16, setColorRealTime);
panel.add(pickColorButton);
i++;
this.reserveCells += 1;
}
while (i < this.reserveCells) {
ColorCell cc = new ColorCell(DEFAULT_COLOR, selectable);
cc.setVisible(false);
panel.add(cc);
i++;
}
while (i < total) {
Color color = i < size ? colors[size-1-i]: DEFAULT_COLOR; Color color = i < size ? colors[size-1-i]: DEFAULT_COLOR;
panel.add(new ColorCell(color == null ? DEFAULT_COLOR : color, selectable)); panel.add(new ColorCell(color == null ? DEFAULT_COLOR : color, selectable));
i++;
} }
this.pane = panel; this.pane = panel;
} }
@ -72,7 +105,7 @@ public class UsedColorPane extends BasicPane{
int total = columns * rows; int total = columns * rows;
Color[] colors = ColorSelectConfigManager.getInstance().getColors(); Color[] colors = ColorSelectConfigManager.getInstance().getColors();
int size = colors.length; int size = colors.length;
for(int i=0; i<total; i++){ for(int i=this.reserveCells; i<total; i++){
ColorCell cell = (ColorCell) this.pane.getComponent(i); ColorCell cell = (ColorCell) this.pane.getComponent(i);
Color color = i < size ? colors[size-1-i]: DEFAULT_COLOR; Color color = i < size ? colors[size-1-i]: DEFAULT_COLOR;
cell.setColor(color == null ? DEFAULT_COLOR : color); cell.setColor(color == null ? DEFAULT_COLOR : color);

1
designer_base/src/com/fr/design/widget/btn/ButtonWithHotkeysDetailPane.java

@ -31,6 +31,7 @@ public abstract class ButtonWithHotkeysDetailPane<T extends Button> extends Butt
} }
private void initComponents() { private void initComponents() {
this.setLayout(FRGUIPaneFactory.createBorderLayout());
JPanel advancedPane = FRGUIPaneFactory.createTitledBorderPane(Inter.getLocText("FR-Designer_Advanced")); JPanel advancedPane = FRGUIPaneFactory.createTitledBorderPane(Inter.getLocText("FR-Designer_Advanced"));
advancedPane.setPreferredSize(new Dimension(600, 341)); advancedPane.setPreferredSize(new Dimension(600, 341));
JPanel attrPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); JPanel attrPane = FRGUIPaneFactory.createBorderLayout_S_Pane();

2
designer_base/src/com/fr/design/write/submit/CustomJobPane.java

@ -1 +1 @@
package com.fr.design.write.submit; import com.fr.data.AbstractClassJob; import com.fr.design.data.tabledata.tabledatapane.ClassNameSelectPane; import com.fr.design.beans.BasicBeanPane; import com.fr.design.formula.JavaEditorPane; import com.fr.design.gui.frpane.ObjectProperiesPane; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.itextarea.UITextArea; import com.fr.design.gui.itextfield.UITextField; import com.fr.design.layout.FRGUIPaneFactory; data.AbstractClassJob; import com.fr.design.dialog.DialogActionAdapter; data.AbstractClassJob; import com.fr.design.data.tabledata.tabledatapane.ClassNameSelectPane; import com.fr.stable.StringUtils; data.AbstractClassJob; import com.fr.design.formula.JavaEditorPane; data.AbstractClassJob; import com.fr.design.gui.ibutton.UIButton; import java.awt.*; data.AbstractClassJob; import com.fr.design.gui.itextfield.UITextField; import java.awt.event.ActionListener; data.AbstractClassJob; import com.fr.design.gui.frpane.ObjectProperiesPane; /** * Author : Shockway * Date: 13-7-29 * Time: 下午6:48 */ public abstract class CustomJobPane extends BasicBeanPane { protected UITextField classNameTextField; protected ObjectProperiesPane objectProperiesPane; public static final int DEFAULT_LENGTH = 30; data.AbstractClassJob; import com.fr.design.gui.frpane.ObjectProperiesPane; public CustomJobPane() { this.setLayout(FRGUIPaneFactory.createBorderLayout()); JPanel reportletNamePane = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(); classNameTextField = new UITextField(getLengthOfTextField()); reportletNamePane.add(classNameTextField); data.AbstractClassJob; import com.fr.design.gui.frpane.ObjectProperiesPane; UIButton browserButton = new UIButton(Inter.getLocText("Select")); browserButton.setPreferredSize(new Dimension( browserButton.getPreferredSize().width, classNameTextField.getPreferredSize().height)); data.AbstractClassJob; import com.fr.design.gui.frpane.ObjectProperiesPane; UIButton editButton = new UIButton(Inter.getLocText("Edit")); editButton.setPreferredSize(new Dimension( browserButton.getPreferredSize().width, classNameTextField.getPreferredSize().height)); data.AbstractClassJob; import com.fr.design.gui.frpane.ObjectProperiesPane; import com.fr.design.formula.JavaEditorPane; import com.fr.design.data.tabledata.tabledatapane.ClassNameSelectPane; reportletNamePane.add(editButton); data.AbstractClassJob; import com.fr.design.gui.frpane.ObjectProperiesPane; browserButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { final ClassNameSelectPane bPane = new ClassNameSelectPane(); bPane.setClassPath(classNameTextField.getText()); bPane.showWindow( SwingUtilities.getWindowAncestor(getWindowAncestor()), new DialogActionAdapter() { public void doOk() { classNameTextField.setText(bPane.getClassPath()); checkAddButtonEnable(); } }).setVisible(true); } }); editButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { final JavaEditorPane javaEditorPane = new JavaEditorPane(classNameTextField.getText(), JavaEditorPane.DEFAULT_SUBMIT_JOB); final BasicDialog dlg = javaEditorPane.showMediumWindow(SwingUtilities.getWindowAncestor(CustomJobPane.this), new DialogActionAdapter() { public void doOk() { classNameTextField.setText(javaEditorPane.getClassText()); checkAddButtonEnable(); } }); javaEditorPane.addSaveActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { dlg.doOK(); } }); dlg.setVisible(true); } }); data.AbstractClassJob; import com.fr.design.gui.frpane.ObjectProperiesPane; reportletNamePane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("ClassName"), null)); this.add(reportletNamePane, BorderLayout.NORTH); data.AbstractClassJob; import com.fr.design.gui.frpane.ObjectProperiesPane; objectProperiesPane = new ObjectProperiesPane(); objectProperiesPane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("Property"), null)); this.add(objectProperiesPane, BorderLayout.CENTER); data.AbstractClassJob; import com.fr.design.gui.frpane.ObjectProperiesPane; UITextArea area = new UITextArea(2, 1); area.setText(Inter.getLocText(new String[]{"Come_True", "Interface"}) + ":com.fr.data.SubmitJob"); JPanel dsPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); dsPane.add(area); dsPane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("Description"), null)); this.add(dsPane, BorderLayout.SOUTH); checkAddButtonEnable(); } data.AbstractClassJob; import com.fr.design.gui.frpane.ObjectProperiesPane; public int getLengthOfTextField() { import com.fr.design.layout.FRGUIPaneFactory; data.AbstractClassJob; import com.fr.design.gui.itextfield.UITextField; import com.fr.design.layout.FRGUIPaneFactory; data.AbstractClassJob; import com.fr.design.gui.frpane.ObjectProperiesPane; protected String title4PopupWindow() { return "CustomJob"; } data.AbstractClassJob; import com.fr.design.gui.frpane.ObjectProperiesPane; protected Component getWindowAncestor() { return this; } data.AbstractClassJob; import com.fr.design.gui.frpane.ObjectProperiesPane; @Override public void populateBean(Object ob) { if (ob instanceof AbstractClassJob) { AbstractClassJob cj = (AbstractClassJob) ob; data.AbstractClassJob; data.AbstractClassJob; data.AbstractClassJob; data.AbstractClassJob; import com.fr.design.data.tabledata.tabledatapane.ClassNameSelectPane; data.AbstractClassJob; import com.fr.design.beans.BasicBeanPane; } data.AbstractClassJob; import com.fr.design.gui.frpane.ObjectProperiesPane; data.AbstractClassJob; import com.fr.design.formula.JavaEditorPane; data.AbstractClassJob; import com.fr.design.gui.frpane.ObjectProperiesPane; data.AbstractClassJob; import com.fr.design.gui.ibutton.UIButton; data.AbstractClassJob; import com.fr.design.gui.itextarea.UITextArea; import com.fr.design.dialog.BasicDialog; import com.fr.design.gui.itextfield.UITextField; Empty(classNameTextField.getText())); } /** * 重置 */ public void reset() { this.classNameTextField.setText(null); this.checkAddButtonEnable(); } } package com.fr.design.write.submit; import com.fr.data.AbstractClassJob; import com.fr.design.layout.FRGUIPaneFactory; data.AbstractClassJob; data.AbstractClassJob; data.AbstractClassJob; import com.fr.design.dialog.DialogActionAdapter; data.AbstractClassJob; data.AbstractClassJob; import com.fr.design.data.tabledata.tabledatapane.ClassNameSelectPane; data.AbstractClassJob; import com.fr.stable.StringUtils; data.AbstractClassJob; data.AbstractClassJob; import com.fr.design.formula.JavaEditorPane; data.AbstractClassJob; data.AbstractClassJob; data.AbstractClassJob; import com.fr.design.gui.ibutton.UIButton; data.AbstractClassJob; import java.awt.*; data.AbstractClassJob; data.AbstractClassJob; import com.fr.design.gui.itextfield.UITextField; data.AbstractClassJob; import java.awt.event.ActionListener; data.AbstractClassJob; /** data.AbstractClassJob; * Author : Shockway data.AbstractClassJob; * Date: 13-7-29 data.AbstractClassJob; * Time: 下午6:48 data.AbstractClassJob; */ data.AbstractClassJob; public abstract class CustomJobPane extends BasicBeanPane { data.AbstractClassJob; protected UITextField classNameTextField; data.AbstractClassJob; protected ObjectProperiesPane objectProperiesPane; data.AbstractClassJob; public static final int DEFAULT_LENGTH = 30; data.AbstractClassJob; */ data.AbstractClassJob; public CustomJobPane() { data.AbstractClassJob; this.setLayout(FRGUIPaneFactory.createBorderLayout()); data.AbstractClassJob; JPanel reportletNamePane = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(); data.AbstractClassJob; classNameTextField = new UITextField(getLengthOfTextField()); data.AbstractClassJob; reportletNamePane.add(classNameTextField); data.AbstractClassJob; UIButton browserButton = new UIButton(Inter.getLocText("Select")); data.AbstractClassJob; browserButton.setPreferredSize(new Dimension( data.AbstractClassJob; browserButton.getPreferredSize().width, data.AbstractClassJob; classNameTextField.getPreferredSize().height)); data.AbstractClassJob; */ data.AbstractClassJob; UIButton editButton = new UIButton(Inter.getLocText("Edit")); data.AbstractClassJob; editButton.setPreferredSize(new Dimension( data.AbstractClassJob; browserButton.getPreferredSize().width, data.AbstractClassJob; classNameTextField.getPreferredSize().height)); data.AbstractClassJob; reportletNamePane.add(browserButton); data.AbstractClassJob; import com.fr.design.data.tabledata.tabledatapane.ClassNameSelectPane; import com.fr.design.formula.JavaEditorPane; data.AbstractClassJob; reportletNamePane.add(editButton); data.AbstractClassJob; browserButton.addActionListener(new ActionListener() { data.AbstractClassJob; public void actionPerformed(ActionEvent evt) { data.AbstractClassJob; final ClassNameSelectPane bPane = new ClassNameSelectPane(); data.AbstractClassJob; bPane.setClassPath(classNameTextField.getText()); data.AbstractClassJob; bPane.showWindow( data.AbstractClassJob; SwingUtilities.getWindowAncestor(getWindowAncestor()), data.AbstractClassJob; new DialogActionAdapter() { data.AbstractClassJob; public void doOk() { data.AbstractClassJob; classNameTextField.setText(bPane.getClassPath()); data.AbstractClassJob; checkAddButtonEnable(); data.AbstractClassJob; } data.AbstractClassJob; }).setVisible(true); data.AbstractClassJob; } data.AbstractClassJob; }); data.AbstractClassJob; editButton.addActionListener(new ActionListener() { data.AbstractClassJob; @Override data.AbstractClassJob; public void actionPerformed(ActionEvent e) { data.AbstractClassJob; final JavaEditorPane javaEditorPane = new JavaEditorPane(classNameTextField.getText(), JavaEditorPane.DEFAULT_SUBMIT_JOB); data.AbstractClassJob; final BasicDialog dlg = javaEditorPane.showMediumWindow(SwingUtilities.getWindowAncestor(CustomJobPane.this), data.AbstractClassJob; new DialogActionAdapter() { data.AbstractClassJob; public void doOk() { data.AbstractClassJob; classNameTextField.setText(javaEditorPane.getClassText()); data.AbstractClassJob; } data.AbstractClassJob; }); data.AbstractClassJob; javaEditorPane.addSaveActionListener(new ActionListener() { data.AbstractClassJob; @Override data.AbstractClassJob; public void actionPerformed(ActionEvent e) { data.AbstractClassJob; dlg.doOK(); data.AbstractClassJob; } data.AbstractClassJob; }); data.AbstractClassJob; dlg.setVisible(true); checkAddButtonEnable(); data.AbstractClassJob; } data.AbstractClassJob; }); data.AbstractClassJob; reportletNamePane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("ClassName"), null)); data.AbstractClassJob; this.add(reportletNamePane, BorderLayout.NORTH); data.AbstractClassJob; objectProperiesPane = new ObjectProperiesPane(); data.AbstractClassJob; objectProperiesPane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("Property"), null)); data.AbstractClassJob; this.add(objectProperiesPane, BorderLayout.CENTER); data.AbstractClassJob; UITextArea area = new UITextArea(2, 1); data.AbstractClassJob; area.setText(Inter.getLocText(new String[]{"Come_True", "Interface"}) + ":com.fr.data.SubmitJob"); data.AbstractClassJob; JPanel dsPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); data.AbstractClassJob; dsPane.add(area); data.AbstractClassJob; dsPane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("Description"), null)); data.AbstractClassJob; this.add(dsPane, BorderLayout.SOUTH); data.AbstractClassJob; checkAddButtonEnable(); data.AbstractClassJob; } data.AbstractClassJob; public int getLengthOfTextField() { data.AbstractClassJob; */ data.AbstractClassJob; import com.fr.design.layout.FRGUIPaneFactory; data.AbstractClassJob; data.AbstractClassJob; protected String title4PopupWindow() { data.AbstractClassJob; return "CustomJob"; data.AbstractClassJob; protected Component getWindowAncestor() { data.AbstractClassJob; return this; data.AbstractClassJob; @Override data.AbstractClassJob; public void populateBean(Object ob) { data.AbstractClassJob; if (ob instanceof AbstractClassJob) { data.AbstractClassJob; AbstractClassJob cj = (AbstractClassJob) ob; import com.fr.design.data.tabledata.tabledatapane.ClassNameSelectPane; data.AbstractClassJob; if (ob instanceof AbstractClassJob) { import com.fr.design.data.tabledata.tabledatapane.ClassNameSelectPane; data.AbstractClassJob; import com.fr.design.data.tabledata.tabledatapane.ClassNameSelectPane; import com.fr.design.data.tabledata.tabledatapane.ClassNameSelectPane; data.AbstractClassJob; if (ob instanceof AbstractClassJob) { import com.fr.design.data.tabledata.tabledatapane.ClassNameSelectPane; import com.fr.design.beans.BasicBeanPane; return this; data.AbstractClassJob; if (ob instanceof AbstractClassJob) { data.AbstractClassJob; import com.fr.design.data.tabledata.tabledatapane.ClassNameSelectPane; import com.fr.design.formula.JavaEditorPane; import com.fr.design.data.tabledata.tabledatapane.ClassNameSelectPane; import com.fr.design.gui.frpane.ObjectProperiesPane; import com.fr.design.data.tabledata.tabledatapane.ClassNameSelectPane; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.data.tabledata.tabledatapane.ClassNameSelectPane; import com.fr.design.gui.itextarea.UITextArea; AbstractClassJob cj = (AbstractClassJob) ob; this.classNameTextField.setText(cj.getClassName()); import com.fr.design.data.tabledata.tabledatapane.ClassNameSelectPane; import com.fr.design.dialog.BasicDialog; checkAddButtonEnable(); } import java.awt.event.ActionListener; import com.fr.design.gui.itextfield.UITextField; /** * 添加按钮可用 */ public void checkAddButtonEnable() { objectProperiesPane.enableAddButton(StringUtils.isNotEmpty(classNameTextField.getText())); } /** * 重置 */ public void reset() { this.classNameTextField.setText(null); this.checkAddButtonEnable(); } }

4
designer_base/src/com/fr/env/RemoteEnv.java vendored

@ -1483,6 +1483,8 @@ public class RemoteEnv implements Env {
* @throws Exception 异常 * @throws Exception 异常
*/ */
public boolean writeSvgFile(SvgProvider svgFile) throws Exception { public boolean writeSvgFile(SvgProvider svgFile) throws Exception {
testServerConnection();
HashMap<String, String> para = new HashMap<String, String>(); HashMap<String, String> para = new HashMap<String, String>();
para.put("op", "fr_remote_design"); para.put("op", "fr_remote_design");
para.put("cmd", "design_save_svg"); para.put("cmd", "design_save_svg");
@ -1534,6 +1536,8 @@ public class RemoteEnv implements Env {
*/ */
@Override @Override
public boolean writeResource(XMLFileManagerProvider mgr) throws Exception { public boolean writeResource(XMLFileManagerProvider mgr) throws Exception {
testServerConnection();
HashMap<String, String> para = new HashMap<String, String>(); HashMap<String, String> para = new HashMap<String, String>();
para.put("op", "fr_remote_design"); para.put("op", "fr_remote_design");
para.put("cmd", "design_save_resource"); para.put("cmd", "design_save_resource");

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

@ -124,7 +124,7 @@ public abstract class BaseDesigner extends ToolBarMenuDock {
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
String[] plugins = PluginCollector.getCollector().getErrorPlugins(); String[] plugins = PluginCollector.getCollector().getErrorPlugins();
if (ArrayUtils.isNotEmpty(plugins)) { if (ArrayUtils.isNotEmpty(plugins)) {
String text = StableUtils.join(plugins, ",") + Inter.getLocText("FR-Designer_Plugin_Should_Update"); 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); 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) { if (r == JOptionPane.OK_OPTION) {
WebDialog.createPluginDialog(); WebDialog.createPluginDialog();

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

@ -75,7 +75,7 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh
static { static {
GeneralContext.addPluginReadListener(new PluginReadListener() { GeneralContext.addPluginReadListener(new PluginReadListener() {
@Override @Override
public void success() { public void success(Status status) {
//重新注册designModuleFactory //重新注册designModuleFactory
DesignModuleFactory.registerExtraWidgetOptions(initWidgetOption()); DesignModuleFactory.registerExtraWidgetOptions(initWidgetOption());
} }

2
designer_chart/src/com/fr/design/chart/report/GisMapTableDataContentPane.java

@ -245,7 +245,7 @@ public class GisMapTableDataContentPane extends FurtherBasicBeanPane<GisMapTable
if(addressNameBox.getSelectedItem() != null){ if(addressNameBox.getSelectedItem() != null){
String adName = Utils.objectToString(addressNameBox.getSelectedItem()); String adName = Utils.objectToString(addressNameBox.getSelectedItem());
if(ArrayUtils.contains(ChartConstants.NONE_KEYS, adName)) { if(ArrayUtils.contains(ChartConstants.getNoneKeys(), adName)) {
definition.setAddressName(StringUtils.EMPTY); definition.setAddressName(StringUtils.EMPTY);
} else { } else {
definition.setAddressName(adName); definition.setAddressName(adName);

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

@ -226,7 +226,7 @@ public class GisMapTableDataContentPane4Chart extends FurtherBasicBeanPane<GisMa
if (addressNameBox.getSelectedItem() != null) { if (addressNameBox.getSelectedItem() != null) {
String adName = Utils.objectToString(addressNameBox.getSelectedItem()); String adName = Utils.objectToString(addressNameBox.getSelectedItem());
if (ArrayUtils.contains(ChartConstants.NONE_KEYS, adName)) { if (ArrayUtils.contains(ChartConstants.getNoneKeys(), adName)) {
definition.setAddressName(StringUtils.EMPTY); definition.setAddressName(StringUtils.EMPTY);
} else { } else {
definition.setAddressName(adName); definition.setAddressName(adName);

4
designer_chart/src/com/fr/design/chart/report/MapCubeLayerPane.java

@ -188,7 +188,7 @@ public class MapCubeLayerPane extends BasicBeanPane<String>{
while(names.hasNext()) { while(names.hasNext()) {
Object name = names.next(); Object name = names.next();
String layName = editingAttr.getLayerTo(Utils.objectToString(name)); String layName = editingAttr.getLayerTo(Utils.objectToString(name));
if(ArrayUtils.contains(ChartConstants.NONE_KEYS, layName)) {// kunsnat: 考虑切换设计器语言. if(ArrayUtils.contains(ChartConstants.getNoneKeys(), layName)) {// kunsnat: 考虑切换设计器语言.
layName = StringUtils.EMPTY; layName = StringUtils.EMPTY;
} }
list.add(new Object[]{name, layName}); list.add(new Object[]{name, layName});
@ -230,7 +230,7 @@ public class MapCubeLayerPane extends BasicBeanPane<String>{
while(names.hasNext()) { while(names.hasNext()) {
Object name = names.next(); Object name = names.next();
String layName = editingAttr.getLayerTo(Utils.objectToString(name)); String layName = editingAttr.getLayerTo(Utils.objectToString(name));
if(ArrayUtils.contains(ChartConstants.NONE_KEYS, layName)) {// kunsnat: 考虑切换设计器语言. if(ArrayUtils.contains(ChartConstants.getNoneKeys(), layName)) {// kunsnat: 考虑切换设计器语言.
layName = StringUtils.EMPTY; layName = StringUtils.EMPTY;
} }
list.add(new Object[]{name, layName}); list.add(new Object[]{name, layName});

7
designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java

@ -425,6 +425,8 @@ public class ChartTypeButtonPane extends BasicBeanPane<ChartCollection> implemen
private void deleteAButton() { private void deleteAButton() {
//先重构属性,在重构面板,否则面板在重构过程中,会重新将属性中的切换图表加到indexList中,导致面板无法删除 //先重构属性,在重构面板,否则面板在重构过程中,会重新将属性中的切换图表加到indexList中,导致面板无法删除
//记录改变前的plotID
String lastPlotID = editingCollection == null ? StringUtils.EMPTY : editingCollection.getSelectedChart().getPlot().getPlotID();
if (editingCollection != null) { if (editingCollection != null) {
int count = editingCollection.getChartCount(); int count = editingCollection.getChartCount();
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) {
@ -447,6 +449,11 @@ public class ChartTypeButtonPane extends BasicBeanPane<ChartCollection> implemen
checkoutChange(); checkoutChange();
relayoutPane(); relayoutPane();
//重构面板
if (parent != null ){
parent.reLayoutEditPane(lastPlotID, editingCollection);
}
} }
private void relayoutPane() { private void relayoutPane() {

11
designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypePane.java

@ -206,6 +206,8 @@ public class ChartTypePane extends AbstractChartAttrPane{
} }
//第一步就是重构cardNames //第一步就是重构cardNames
cardNames = ChartTypeInterfaceManager.getInstance().getTitle4PopupWindow(chartID); cardNames = ChartTypeInterfaceManager.getInstance().getTitle4PopupWindow(chartID);
//下拉框重构开始。为了防止重构是触发update
((FlexibleComboBox)jcb).setItemEvenType(ItemEventType.REACTOR);
//重构下拉框选项 //重构下拉框选项
reactorComboBox(); reactorComboBox();
//重新选择选中的下拉项 //重新选择选中的下拉项
@ -213,6 +215,8 @@ public class ChartTypePane extends AbstractChartAttrPane{
String plotID = chart.getPlot().getPlotID(); String plotID = chart.getPlot().getPlotID();
Object item = ChartTypeInterfaceManager.getInstance().getTitle4PopupWindow(chartID, plotID); Object item = ChartTypeInterfaceManager.getInstance().getTitle4PopupWindow(chartID, plotID);
jcb.setSelectedItem(item); jcb.setSelectedItem(item);
//下拉框重构结束
((FlexibleComboBox)jcb).setItemEvenType(ItemEventType.DEFAULT);
//重新选中 //重新选中
checkPlotPane(); checkPlotPane();
} }
@ -223,13 +227,10 @@ public class ChartTypePane extends AbstractChartAttrPane{
} }
private void reactorComboBox() { private void reactorComboBox() {
FlexibleComboBox fcb = (FlexibleComboBox)jcb; jcb.removeAllItems();
fcb.setItemEvenType(ItemEventType.REACTOR);
fcb.removeAllItems();
for (int i = 0; i < this.cardNames.length; i++) { for (int i = 0; i < this.cardNames.length; i++) {
fcb.addItem(cardNames[i]); jcb.addItem(cardNames[i]);
} }
fcb.setItemEvenType(ItemEventType.DEFAULT);
} }
@Override @Override

12
designer_chart/src/com/fr/design/mainframe/chart/gui/ColorSelectPaneWithOutTransparent.java

@ -19,7 +19,7 @@ public class ColorSelectPaneWithOutTransparent extends ColorSelectPane {
public void initCenterPaneChildren(JPanel centerPane) { public void initCenterPaneChildren(JPanel centerPane) {
JPanel menuColorPane1 = new JPanel(); JPanel menuColorPane1 = new JPanel();
centerPane.add(menuColorPane1); centerPane.add(menuColorPane1);
menuColorPane1.setLayout(new GridLayout(5, 8, 5, 5)); menuColorPane1.setLayout(new GridLayout(3, 8, 5, 5));
for (int i = 0; i < ChartConstants.MAP_COLOR_ARRAY.length; i++) { for (int i = 0; i < ChartConstants.MAP_COLOR_ARRAY.length; i++) {
menuColorPane1.add(new ColorCell(ChartConstants.MAP_COLOR_ARRAY[i], this)); menuColorPane1.add(new ColorCell(ChartConstants.MAP_COLOR_ARRAY[i], this));
} }
@ -30,4 +30,14 @@ public class ColorSelectPaneWithOutTransparent extends ColorSelectPane {
protected Color[] getColorArray(){ protected Color[] getColorArray(){
return ChartConstants.MAP_COLOR_ARRAY; return ChartConstants.MAP_COLOR_ARRAY;
} }
protected JPanel getMenuColorPane() {
JPanel menuColorPane = new JPanel();
menuColorPane.setLayout(new GridLayout(0, 8, 1, 1));
menuColorPane.setBorder(BorderFactory.createEmptyBorder(8, 8, 0, 8));
menuColorPane.setPreferredSize(new Dimension(205, 62));
return menuColorPane;
}
} }

44
designer_chart/src/com/fr/design/mainframe/chart/gui/UIEditLabel.java

@ -161,35 +161,47 @@ public class UIEditLabel extends JPanel implements UIObserver{
return text; return text;
} }
protected boolean appendOriginalLabel() {
return true;
}
private void stopEditing(){ private void stopEditing(){
isEditingStopped = true; isEditingStopped = true;
this.removeAll(); this.removeAll();
String text =this.showLabel.getText(); if(appendOriginalLabel()) {
text = StringUtils.cutStringEndWith(text,":"); String text = this.showLabel.getText();
text = !ComparatorUtils.equals(text, this.originalLabel) ? text = StringUtils.cutStringEndWith(text, ":");
StringUtils.perfectEnd(text, "(" + this.originalLabel + ")"): this.originalLabel; text = !ComparatorUtils.equals(text, this.originalLabel) ?
showLabel.setText(StringUtils.perfectEnd(text,":")); StringUtils.perfectEnd(text, "(" + this.originalLabel + ")") : this.originalLabel;
showLabel.setText(StringUtils.perfectEnd(text, ":"));
}
this.add(showLabel, BorderLayout.CENTER); this.add(showLabel, BorderLayout.CENTER);
this.revalidate(); this.revalidate();
this.repaint(); this.repaint();
} }
public String getText(){ public String getText(){
String text =this.showLabel.getText(); if(appendOriginalLabel()) {
text = StringUtils.cutStringEndWith(text,":"); String text = this.showLabel.getText();
return StringUtils.cutStringEndWith(text,"("+this.originalLabel+")"); text = StringUtils.cutStringEndWith(text, ":");
return StringUtils.cutStringEndWith(text, "(" + this.originalLabel + ")");
} else {
return this.showLabel.getText();
}
} }
public void setText(String text){ public void setText(String text){
if(text == null || StringUtils.isEmpty(text)){ if(appendOriginalLabel()) {
this.showLabel.setText(this.originalLabel); if (text == null || StringUtils.isEmpty(text)) {
return; this.showLabel.setText(this.originalLabel);
} return;
if(!ComparatorUtils.equals(text,originalLabel)){ }
text = StringUtils.cutStringEndWith(text, ":"); if (!ComparatorUtils.equals(text, originalLabel)) {
text = StringUtils.perfectEnd(text,"("+originalLabel+")"); text = StringUtils.cutStringEndWith(text, ":");
text = StringUtils.perfectEnd(text, "(" + originalLabel + ")");
}
text = StringUtils.perfectEnd(text, ":");
} }
text = StringUtils.perfectEnd(text,":");
this.showLabel.setText(text); this.showLabel.setText(text);
} }

2
designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/BubblePlotTableDataContentPane.java

@ -137,7 +137,7 @@ public class BubblePlotTableDataContentPane extends AbstractTableDataContentPane
Object resultY = yCombox.getSelectedItem(); Object resultY = yCombox.getSelectedItem();
Object resultSize = bubbleSize.getSelectedItem(); Object resultSize = bubbleSize.getSelectedItem();
if(resultName == null || ArrayUtils.contains(ChartConstants.NONE_KEYS, resultName)) { if(resultName == null || ArrayUtils.contains(ChartConstants.getNoneKeys(), resultName)) {
definition.setSeriesName(StringUtils.EMPTY); definition.setSeriesName(StringUtils.EMPTY);
} else { } else {
definition.setSeriesName(resultName.toString()); definition.setSeriesName(resultName.toString());

2
designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/CategoryPlotTableDataContentPane.java

@ -113,7 +113,7 @@ public class CategoryPlotTableDataContentPane extends AbstractTableDataContentPa
} }
Object categoryName = categoryCombox.getSelectedItem(); Object categoryName = categoryCombox.getSelectedItem();
if(ArrayUtils.contains(ChartConstants.NONE_KEYS, categoryName)) { if(ArrayUtils.contains(ChartConstants.getNoneKeys(), categoryName)) {
dataDefinition.setCategoryName(StringUtils.EMPTY); dataDefinition.setCategoryName(StringUtils.EMPTY);
} else { } else {
dataDefinition.setCategoryName(categoryName == null ? null : categoryName.toString()); dataDefinition.setCategoryName(categoryName == null ? null : categoryName.toString());

2
designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/StockPlotTableDataContentPane.java

@ -160,7 +160,7 @@ public class StockPlotTableDataContentPane extends AbstractTableDataContentPane
openLabel.setText(stockLabel.getOpenLabel()); openLabel.setText(stockLabel.getOpenLabel());
highLabel.setText(stockLabel.getHighLabel()); highLabel.setText(stockLabel.getHighLabel());
lowLabel.setText(stockLabel.getLowLabel()); lowLabel.setText(stockLabel.getLowLabel());
closeLabel.setText(stockLabel.getLowLabel()); closeLabel.setText(stockLabel.getCloseLabel());
combineCustomEditValue(axisBox, stock.getCateTime()); combineCustomEditValue(axisBox, stock.getCateTime());
combineCustomEditValue(volumeBox, stock.getVolumnString()); combineCustomEditValue(volumeBox, stock.getVolumnString());

2
designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/XYScatterPlotTableDataContentPane.java

@ -107,7 +107,7 @@ public class XYScatterPlotTableDataContentPane extends AbstractTableDataContentP
Object resultX = xCombox.getSelectedItem(); Object resultX = xCombox.getSelectedItem();
Object resultY = yCombox.getSelectedItem(); Object resultY = yCombox.getSelectedItem();
if(resultName == null || ArrayUtils.contains(ChartConstants.NONE_KEYS, resultName)) { if(resultName == null || ArrayUtils.contains(ChartConstants.getNoneKeys(), resultName)) {
definition.setSeriesName(StringUtils.EMPTY); definition.setSeriesName(StringUtils.EMPTY);
} else { } else {
definition.setSeriesName(resultName.toString()); definition.setSeriesName(resultName.toString());

16
designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPane.java

@ -11,6 +11,7 @@ import com.fr.base.BaseUtils;
import com.fr.base.Utils; import com.fr.base.Utils;
import com.fr.chart.base.TextAttr; import com.fr.chart.base.TextAttr;
import com.fr.design.constants.LayoutConstants; import com.fr.design.constants.LayoutConstants;
import com.fr.design.event.UIObserverListener;
import com.fr.design.gui.ibutton.UIColorButton; import com.fr.design.gui.ibutton.UIColorButton;
import com.fr.design.gui.ibutton.UIToggleButton; import com.fr.design.gui.ibutton.UIToggleButton;
import com.fr.design.gui.icombobox.UIComboBox; import com.fr.design.gui.icombobox.UIComboBox;
@ -71,6 +72,8 @@ public class ChartTextAttrPane extends BasicPane {
} }
public void populate(FRFont frFont) { public void populate(FRFont frFont) {
UIObserverListener listener = fontNameComboBox == null ? null : fontNameComboBox.getUiObserverListener();
removeAllComboBoxListener();
if (frFont == null) { if (frFont == null) {
return; return;
} }
@ -83,6 +86,19 @@ public class ChartTextAttrPane extends BasicPane {
if (fontColor != null) { if (fontColor != null) {
fontColor.setColor(frFont.getForeground()); fontColor.setColor(frFont.getForeground());
} }
//更新结束后,注册监听器
registerAllComboBoxListener(listener);
}
private void removeAllComboBoxListener() {
fontNameComboBox.removeChangeListener();
fontSizeComboBox.removeChangeListener();
}
private void registerAllComboBoxListener(UIObserverListener listener) {
fontNameComboBox.registerChangeListener(listener);
fontSizeComboBox.registerChangeListener(listener);
} }
/** /**

2
designer_form/build.dev.gradle

@ -4,7 +4,7 @@ tasks.withType(JavaCompile){
options.encoding = 'UTF-8' options.encoding = 'UTF-8'
} }
//jdk版本 //jdk版本
sourceCompatibility=1.8 sourceCompatibility=1.7
//jar包版本 //jar包版本
version='8.0' version='8.0'

13
designer_form/src/com/fr/design/designer/beans/ConnectorCreator.java

@ -6,15 +6,14 @@ import java.util.ArrayList;
import java.util.PriorityQueue; import java.util.PriorityQueue;
import com.fr.form.ui.container.WLayout; import com.fr.form.ui.container.WLayout;
import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import com.fr.form.ui.widget.BoundsWidget;
public class ConnectorCreator { public class ConnectorCreator {
public static final int UNIT = 10; public static final int UNIT = 10;
public static final int SIDE = 2; public static final int SIDE = 2;
public static final int CORNER_LOSS = 20; public static final int CORNER_LOSS = 20;
public static final int vector[][] = { { UNIT, 0 }, { -UNIT, 0 }, { 0, UNIT }, { 0, -UNIT } }; public static final int VECTOR[][] = { { UNIT, 0 }, { -UNIT, 0 }, { 0, UNIT }, { 0, -UNIT } };
private long timeOut = 200; private long timeOut = 200;
private boolean beyond; private boolean beyond;
@ -179,8 +178,8 @@ public class ConnectorCreator {
} }
void pushInto() { void pushInto() {
for (int i = 0; i < vector.length; i++) { for (int i = 0; i < VECTOR.length; i++) {
Point temp = new Point(p.x + vector[i][0], p.y + vector[i][1]); Point temp = new Point(p.x + VECTOR[i][0], p.y + VECTOR[i][1]);
if (parent != null && parent.x == temp.x && parent.y == temp.y) { if (parent != null && parent.x == temp.x && parent.y == temp.y) {
continue; continue;
} }
@ -192,8 +191,8 @@ public class ConnectorCreator {
} }
boolean reCheck() { boolean reCheck() {
for (int i = 0; i < vector.length; i++) { for (int i = 0; i < VECTOR.length; i++) {
Point temp = new Point(p.x + SIDE * vector[i][0], p.y + SIDE * vector[i][1]); Point temp = new Point(p.x + SIDE * VECTOR[i][0], p.y + SIDE * VECTOR[i][1]);
AssessedPoint ap = new AssessedPoint(temp, this, loss(temp)); AssessedPoint ap = new AssessedPoint(temp, this, loss(temp));
if (check(temp)) { if (check(temp)) {
open.add(ap); open.add(ap);

4
designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java

@ -12,7 +12,7 @@ import com.fr.design.designer.properties.FRAbsoluteLayoutPropertiesGroupModel;
import com.fr.form.ui.container.WAbsoluteLayout; import com.fr.form.ui.container.WAbsoluteLayout;
import com.fr.design.utils.ComponentUtils; import com.fr.design.utils.ComponentUtils;
import com.fr.design.utils.gui.LayoutUtils; import com.fr.design.utils.gui.LayoutUtils;
import com.fr.form.ui.container.WBodyLayoutType; import com.fr.form.ui.widget.BoundsWidget;
import com.fr.general.ComparatorUtils; import com.fr.general.ComparatorUtils;
import com.fr.general.FRLogger; import com.fr.general.FRLogger;
@ -111,7 +111,7 @@ public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter {
Rectangle curRec = new Rectangle(creatorX, creatorY, creator.getWidth(), creator.getHeight()); Rectangle curRec = new Rectangle(creatorX, creatorY, creator.getWidth(), creator.getHeight());
WAbsoluteLayout wAbsoluteLayout = (WAbsoluteLayout)topLayout.toData(); WAbsoluteLayout wAbsoluteLayout = (WAbsoluteLayout)topLayout.toData();
for (int i = 0, count = wAbsoluteLayout.getWidgetCount(); i < count; i++) { for (int i = 0, count = wAbsoluteLayout.getWidgetCount(); i < count; i++) {
WAbsoluteLayout.BoundsWidget temp = (WAbsoluteLayout.BoundsWidget) wAbsoluteLayout.getWidget(i); BoundsWidget temp = (BoundsWidget) wAbsoluteLayout.getWidget(i);
Rectangle rectangle = temp.getBounds(); Rectangle rectangle = temp.getBounds();
if (curRec.intersects(rectangle)){ if (curRec.intersects(rectangle)){
return false; return false;

296
designer_form/src/com/fr/design/designer/beans/adapters/layout/FRBodyLayoutAdapter.java

@ -2,9 +2,11 @@ package com.fr.design.designer.beans.adapters.layout;
import com.fr.design.designer.creator.XCreator; import com.fr.design.designer.creator.XCreator;
import com.fr.design.designer.creator.XLayoutContainer; import com.fr.design.designer.creator.XLayoutContainer;
import com.fr.design.designer.creator.XWParameterLayout;
import com.fr.design.designer.creator.cardlayout.XWCardMainBorderLayout; import com.fr.design.designer.creator.cardlayout.XWCardMainBorderLayout;
import com.fr.design.utils.ComponentUtils; import com.fr.design.utils.ComponentUtils;
import com.fr.form.ui.PaddingMargin; import com.fr.form.ui.PaddingMargin;
import com.fr.form.ui.container.WBorderLayout;
import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout;
import com.fr.general.ComparatorUtils; import com.fr.general.ComparatorUtils;
@ -17,7 +19,7 @@ import java.util.*;
* 所以把公共的方法挪动这边父类里来 * 所以把公共的方法挪动这边父类里来
* Created by zhouping on 2016/8/18. * Created by zhouping on 2016/8/18.
*/ */
public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter {
protected static final int COMP_TOP = 1; protected static final int COMP_TOP = 1;
protected static final int COMP_BOTTOM = 2; protected static final int COMP_BOTTOM = 2;
protected static final int COMP_LEFT = 3; protected static final int COMP_LEFT = 3;
@ -34,7 +36,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
protected static final int BORDER_PROPORTION = 10; //边界三等分或交叉区域大小取组件1/10和默认大小 protected static final int BORDER_PROPORTION = 10; //边界三等分或交叉区域大小取组件1/10和默认大小
protected int trisectAreaDirect = 0; protected int trisectAreaDirect = 0;
protected int crossPointAreaDirect = 0; private int crossPointAreaDirect = 0;
// 增加删除拉伸控件用的临时list // 增加删除拉伸控件用的临时list
protected java.util.List<Component> rightComps; protected java.util.List<Component> rightComps;
protected java.util.List<Component> leftComps; protected java.util.List<Component> leftComps;
@ -49,6 +51,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
protected int minHeight = 0; protected int minHeight = 0;
protected int actualVal = 0; // 存在间隔时,add move drag 判断对齐等都要考虑 protected int actualVal = 0; // 存在间隔时,add move drag 判断对齐等都要考虑
protected PaddingMargin margin; // 布局容器边距 protected PaddingMargin margin; // 布局容器边距
/** /**
* 在添加组件状态时当鼠标移动到某个容器上方时如果该容器有布局管理器则会调用该布局 * 在添加组件状态时当鼠标移动到某个容器上方时如果该容器有布局管理器则会调用该布局
* 管理适配器的accept来决定当前位置是否可以放置并提供特殊的标识比如红色区域标识 * 管理适配器的accept来决定当前位置是否可以放置并提供特殊的标识比如红色区域标识
@ -76,9 +79,10 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
/** /**
* 交叉点区域时能否对应位置放入组件 * 交叉点区域时能否对应位置放入组件
*
* @param comp 待放置组件 * @param comp 待放置组件
* @param x x * @param x x
* @param y y * @param y y
* @return 能否放入 * @return 能否放入
*/ */
protected boolean canAcceptWhileCrossPoint(Component comp, int x, int y) { protected boolean canAcceptWhileCrossPoint(Component comp, int x, int y) {
@ -95,7 +99,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
min = isNotDefaultArea ? min : minWidth * 2; min = isNotDefaultArea ? min : minWidth * 2;
} else if (ComparatorUtils.equals(crossPointAreaDirect, COMP_RIGHT_BOTTOM)) { } else if (ComparatorUtils.equals(crossPointAreaDirect, COMP_RIGHT_BOTTOM)) {
bottomComp = container.getRightBottomComp(cX, cY, cH, cW); bottomComp = container.getRightBottomComp(cX, cY, cH, cW);
isNotDefaultArea = (bottomComp == null) || (bottomComp.getX()+bottomComp.getWidth() != cX + cW) ; isNotDefaultArea = (bottomComp == null) || (bottomComp.getX() + bottomComp.getWidth() != cX + cW);
rightComp = container.getBottomRightComp(cX, cY, cH, cW); rightComp = container.getBottomRightComp(cX, cY, cH, cW);
minLength = isNotDefaultArea ? Math.min(cH, rightComp.getHeight()) : Math.min(cW, bottomComp.getWidth()); minLength = isNotDefaultArea ? Math.min(cH, rightComp.getHeight()) : Math.min(cW, bottomComp.getWidth());
min = isNotDefaultArea ? min : minWidth * 2; min = isNotDefaultArea ? min : minWidth * 2;
@ -105,12 +109,12 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
minLength = isNotDefaultArea ? Math.min(cW, bottomComp.getWidth()) : Math.min(cH, leftComp.getHeight()); minLength = isNotDefaultArea ? Math.min(cW, bottomComp.getWidth()) : Math.min(cH, leftComp.getHeight());
min = isNotDefaultArea ? minWidth * 2 : min; min = isNotDefaultArea ? minWidth * 2 : min;
} else if (ComparatorUtils.equals(crossPointAreaDirect, COMP_RIGHT_TOP)) { } else if (ComparatorUtils.equals(crossPointAreaDirect, COMP_RIGHT_TOP)) {
isNotDefaultArea = (rightComp == null) || (rightComp.getY() != cY) ; isNotDefaultArea = (rightComp == null) || (rightComp.getY() != cY);
topComp = container.getRightTopComp(cX, cY, cW); topComp = container.getRightTopComp(cX, cY, cW);
minLength = isNotDefaultArea ? Math.min(cW, topComp.getWidth()) : Math.min(cH, rightComp.getWidth()); minLength = isNotDefaultArea ? Math.min(cW, topComp.getWidth()) : Math.min(cH, rightComp.getWidth());
min = isNotDefaultArea ? minWidth * 2 : min ; min = isNotDefaultArea ? minWidth * 2 : min;
} else if (ComparatorUtils.equals(crossPointAreaDirect, COMP_TOP)) { } else if (ComparatorUtils.equals(crossPointAreaDirect, COMP_TOP)) {
minLength= Math.min(rightComp.getHeight(), Math.min(cH, leftComp.getHeight())); minLength = Math.min(rightComp.getHeight(), Math.min(cH, leftComp.getHeight()));
} else if (ComparatorUtils.equals(crossPointAreaDirect, COMP_BOTTOM)) { } else if (ComparatorUtils.equals(crossPointAreaDirect, COMP_BOTTOM)) {
leftComp = container.getBottomLeftComp(cX, cY, cH); leftComp = container.getBottomLeftComp(cX, cY, cH);
rightComp = container.getBottomRightComp(cX, cY, cH, cW); rightComp = container.getBottomRightComp(cX, cY, cH, cW);
@ -129,9 +133,10 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
/** /**
* 三等分区域时能否对应位置放入组件 * 三等分区域时能否对应位置放入组件
*
* @param comp 待放置组件 * @param comp 待放置组件
* @param x x * @param x x
* @param y y * @param y y
* @return 能否放入 * @return 能否放入
*/ */
protected boolean canAcceptWhileTrisection(Component comp, int x, int y) { protected boolean canAcceptWhileTrisection(Component comp, int x, int y) {
@ -142,28 +147,28 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
upMinHeight = getUpMinHeightComp(cY, x); upMinHeight = getUpMinHeightComp(cY, x);
downMinHeight = getDownMinHeightComp(comp, y); downMinHeight = getDownMinHeightComp(comp, y);
return upMinHeight == 0 ? downMinHeight >= minHeight * 2 + actualVal : (upMinHeight + downMinHeight) >= minHeight * 3 + actualVal; return upMinHeight == 0 ? downMinHeight >= minHeight * 2 + actualVal : (upMinHeight + downMinHeight) >= minHeight * 3 + actualVal;
} else if(ComparatorUtils.equals(trisectAreaDirect, COMP_BOTTOM)) { } else if (ComparatorUtils.equals(trisectAreaDirect, COMP_BOTTOM)) {
upMinHeight = getUpMinHeightComp(cY + cH + actualVal, x); upMinHeight = getUpMinHeightComp(cY + cH + actualVal, x);
if (cY + cH + DEFAULT_AREA_LENGTH>container.getHeight() - margin.getBottom()){ if (cY + cH + DEFAULT_AREA_LENGTH > container.getHeight() - margin.getBottom()) {
downMinHeight = 0; downMinHeight = 0;
} else { } else {
Component targetComp = container.getBottomComp(x, cY, cH); Component targetComp = container.getBottomComp(x, cY, cH);
downMinHeight = getDownMinHeightComp(targetComp, cY + cH + DEFAULT_AREA_LENGTH + actualVal); downMinHeight = getDownMinHeightComp(targetComp, cY + cH + DEFAULT_AREA_LENGTH + actualVal);
} }
return downMinHeight == 0 ? (upMinHeight >= minHeight * 2 + actualVal) : ((upMinHeight+downMinHeight) >= minHeight * 3 + actualVal); return downMinHeight == 0 ? (upMinHeight >= minHeight * 2 + actualVal) : ((upMinHeight + downMinHeight) >= minHeight * 3 + actualVal);
} else if(ComparatorUtils.equals(trisectAreaDirect, COMP_LEFT)) { } else if (ComparatorUtils.equals(trisectAreaDirect, COMP_LEFT)) {
rightMinWidth = getMinRightWidth(cX, 0, y); rightMinWidth = getMinRightWidth(cX, 0, y);
if(cX - DEFAULT_AREA_LENGTH < margin.getLeft()) { if (cX - DEFAULT_AREA_LENGTH < margin.getLeft()) {
leftMinWidth = 0; leftMinWidth = 0;
} else { } else {
Component targetRightComp = container.getLeftComp(cX, y); Component targetRightComp = container.getLeftComp(cX, y);
leftMinWidth = getMinLeftWidth(targetRightComp, cX - DEFAULT_AREA_LENGTH - actualVal); leftMinWidth = getMinLeftWidth(targetRightComp, cX - DEFAULT_AREA_LENGTH - actualVal);
} }
return leftMinWidth == 0 ? (rightMinWidth >= minWidth * 2 + actualVal) : ((leftMinWidth+rightMinWidth) >= minWidth * 3 + actualVal); return leftMinWidth == 0 ? (rightMinWidth >= minWidth * 2 + actualVal) : ((leftMinWidth + rightMinWidth) >= minWidth * 3 + actualVal);
} else if(ComparatorUtils.equals(trisectAreaDirect, COMP_RIGHT)) { } else if (ComparatorUtils.equals(trisectAreaDirect, COMP_RIGHT)) {
leftMinWidth = getMinLeftWidth(comp, x); leftMinWidth = getMinLeftWidth(comp, x);
rightMinWidth = getMinRightWidth(cX, cW, y); rightMinWidth = getMinRightWidth(cX, cW, y);
return rightMinWidth == 0 ? (leftMinWidth >= minWidth * 2 + actualVal) : ((leftMinWidth+rightMinWidth) >= minWidth * 3 + actualVal); return rightMinWidth == 0 ? (leftMinWidth >= minWidth * 2 + actualVal) : ((leftMinWidth + rightMinWidth) >= minWidth * 3 + actualVal);
} }
return false; return false;
} }
@ -176,16 +181,16 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
if (cY == margin.getTop()) { if (cY == margin.getTop()) {
return 0; return 0;
} }
int max=container.getWidth() - margin.getRight(); int max = container.getWidth() - margin.getRight();
int mouseX = x; int mouseX = x;
int minHeight = cY; int minHeight = cY;
int bott = 0; int bott = 0;
if (isFindRelatedComps) { if (isFindRelatedComps) {
upComps = new ArrayList<Component>(); upComps = new ArrayList<Component>();
} }
for(; mouseX<max; ){ for (; mouseX < max; ) {
Component comp = container.getTopComp(mouseX, cY); Component comp = container.getTopComp(mouseX, cY);
if(comp == null){ if (comp == null) {
break; break;
} }
bott = comp.getHeight() + comp.getY() + actualVal; bott = comp.getHeight() + comp.getY() + actualVal;
@ -197,26 +202,26 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
if (isFindRelatedComps) { if (isFindRelatedComps) {
upComps.add(comp); upComps.add(comp);
} }
} else{ } else {
break; break;
} }
} }
if(container.getTopComp(x, cY) == null){ if (container.getTopComp(x, cY) == null) {
return 0; return 0;
} }
mouseX = container.getTopComp(x, cY).getX() - DEFAULT_AREA_LENGTH - actualVal; mouseX = container.getTopComp(x, cY).getX() - DEFAULT_AREA_LENGTH - actualVal;
while(mouseX > margin.getLeft()) { while (mouseX > margin.getLeft()) {
Component comp = container.getTopComp(mouseX, cY); Component comp = container.getTopComp(mouseX, cY);
bott = comp.getHeight() + comp.getY()+actualVal; bott = comp.getHeight() + comp.getY() + actualVal;
if (bott == cY) { if (bott == cY) {
if (comp.getHeight() < minHeight) { if (comp.getHeight() < minHeight) {
minHeight = comp.getHeight(); minHeight = comp.getHeight();
} }
mouseX = comp.getX()-DEFAULT_AREA_LENGTH-actualVal; mouseX = comp.getX() - DEFAULT_AREA_LENGTH - actualVal;
if (isFindRelatedComps) { if (isFindRelatedComps) {
upComps.add(comp); upComps.add(comp);
} }
} else{ } else {
break; break;
} }
} }
@ -231,13 +236,13 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
int cX = currentcomp.getX(); int cX = currentcomp.getX();
int cY = currentcomp.getY(); int cY = currentcomp.getY();
int minHeight = currentcomp.getHeight(); int minHeight = currentcomp.getHeight();
int max=container.getWidth() - margin.getRight(); int max = container.getWidth() - margin.getRight();
if (isFindRelatedComps) { if (isFindRelatedComps) {
downComps = new ArrayList<Component>(); downComps = new ArrayList<Component>();
} }
int mouseX = cX + DEFAULT_AREA_LENGTH; int mouseX = cX + DEFAULT_AREA_LENGTH;
while (mouseX < max) { while (mouseX < max) {
Component comp = container.getComponentAt(mouseX, y); Component comp = container.getComponentAt(mouseX, y);
if (comp.getY() == cY) { if (comp.getY() == cY) {
if (comp.getHeight() < minHeight) { if (comp.getHeight() < minHeight) {
minHeight = comp.getHeight(); minHeight = comp.getHeight();
@ -246,12 +251,12 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
if (isFindRelatedComps) { if (isFindRelatedComps) {
downComps.add(comp); downComps.add(comp);
} }
}else{ } else {
break; break;
} }
} }
mouseX = cX - DEFAULT_AREA_LENGTH - actualVal; mouseX = cX - DEFAULT_AREA_LENGTH - actualVal;
while(mouseX > margin.getLeft()) { while (mouseX > margin.getLeft()) {
Component comp = container.getComponentAt(mouseX, y); Component comp = container.getComponentAt(mouseX, y);
if (comp.getY() == cY) { if (comp.getY() == cY) {
if (comp.getHeight() < minHeight) { if (comp.getHeight() < minHeight) {
@ -261,7 +266,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
if (isFindRelatedComps) { if (isFindRelatedComps) {
downComps.add(comp); downComps.add(comp);
} }
}else{ } else {
break; break;
} }
} }
@ -273,9 +278,9 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
* 判断对齐时考虑间隔 * 判断对齐时考虑间隔
*/ */
private int getMinRightWidth(int cX, int cW, int y) { private int getMinRightWidth(int cX, int cW, int y) {
int xL = cX + DEFAULT_AREA_LENGTH ; int xL = cX + DEFAULT_AREA_LENGTH;
xL = cW == 0 ? xL : (xL + cW + actualVal); xL = cW == 0 ? xL : (xL + cW + actualVal);
if (xL > container.getWidth() - margin.getRight()){ if (xL > container.getWidth() - margin.getRight()) {
return 0; return 0;
} }
// 以当前组件紧挨着右侧的组件为基准,在y轴方向查找符合条件的组件 // 以当前组件紧挨着右侧的组件为基准,在y轴方向查找符合条件的组件
@ -286,7 +291,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
rightComps = new ArrayList<Component>(); rightComps = new ArrayList<Component>();
} }
int mouseY = targetComp.getY() + DEFAULT_AREA_LENGTH; int mouseY = targetComp.getY() + DEFAULT_AREA_LENGTH;
while (mouseY<max) { while (mouseY < max) {
Component comp = container.getComponentAt(xL, mouseY); Component comp = container.getComponentAt(xL, mouseY);
if (comp.getX() == targetComp.getX()) { if (comp.getX() == targetComp.getX()) {
if (comp.getWidth() < minWidth) { if (comp.getWidth() < minWidth) {
@ -296,12 +301,12 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
if (isFindRelatedComps) { if (isFindRelatedComps) {
rightComps.add(comp); rightComps.add(comp);
} }
}else{ } else {
break; break;
} }
} }
mouseY = targetComp.getY() - DEFAULT_AREA_LENGTH - actualVal; mouseY = targetComp.getY() - DEFAULT_AREA_LENGTH - actualVal;
while(mouseY > margin.getTop()) { while (mouseY > margin.getTop()) {
Component comp = container.getComponentAt(xL, mouseY); Component comp = container.getComponentAt(xL, mouseY);
if (comp.getX() == targetComp.getX()) { if (comp.getX() == targetComp.getX()) {
if (comp.getWidth() < minWidth) { if (comp.getWidth() < minWidth) {
@ -311,7 +316,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
if (isFindRelatedComps) { if (isFindRelatedComps) {
rightComps.add(comp); rightComps.add(comp);
} }
}else{ } else {
break; break;
} }
} }
@ -329,9 +334,9 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
if (isFindRelatedComps) { if (isFindRelatedComps) {
leftComps = new ArrayList<Component>(); leftComps = new ArrayList<Component>();
} }
int rightx = 0; int rightx = 0;
int mouseY = currentComp.getY() + DEFAULT_AREA_LENGTH; int mouseY = currentComp.getY() + DEFAULT_AREA_LENGTH;
while(mouseY<max) { while (mouseY < max) {
Component comp = container.getComponentAt(x, mouseY); Component comp = container.getComponentAt(x, mouseY);
rightx = comp.getX() + comp.getWidth(); rightx = comp.getX() + comp.getWidth();
if (rightx == compRightLength) { if (rightx == compRightLength) {
@ -342,14 +347,14 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
if (isFindRelatedComps) { if (isFindRelatedComps) {
leftComps.add(comp); leftComps.add(comp);
} }
}else{ } else {
break; break;
} }
} }
mouseY = currentComp.getY() - DEFAULT_AREA_LENGTH - actualVal; mouseY = currentComp.getY() - DEFAULT_AREA_LENGTH - actualVal;
while(mouseY>margin.getTop()) { while (mouseY > margin.getTop()) {
Component comp = container.getComponentAt(x, mouseY); Component comp = container.getComponentAt(x, mouseY);
rightx = comp.getX()+comp.getWidth(); rightx = comp.getX() + comp.getWidth();
if (rightx == compRightLength) { if (rightx == compRightLength) {
if (comp.getWidth() < minWidth) { if (comp.getWidth() < minWidth) {
minWidth = comp.getWidth(); minWidth = comp.getWidth();
@ -358,7 +363,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
if (isFindRelatedComps) { if (isFindRelatedComps) {
leftComps.add(comp); leftComps.add(comp);
} }
}else{ } else {
break; break;
} }
} }
@ -367,13 +372,14 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
/** /**
* 判断是否鼠标在组件的三等分区域如果组件在布局管理器中间上下左右都可能会三等分 * 判断是否鼠标在组件的三等分区域如果组件在布局管理器中间上下左右都可能会三等分
*
* @param parentComp 鼠标所在区域的组件 * @param parentComp 鼠标所在区域的组件
* @param x 坐标x * @param x 坐标x
* @param y 坐标y * @param y 坐标y
* @return 是则返回true * @return 是则返回true
*/ */
public boolean isTrisectionArea(Component parentComp, int x, int y) { public boolean isTrisectionArea(Component parentComp, int x, int y) {
XCreator creator = (XCreator)parentComp; XCreator creator = (XCreator) parentComp;
if (container.getComponentCount() <= 1) { if (container.getComponentCount() <= 1) {
return false; return false;
} }
@ -382,23 +388,23 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
int xL = parentComp.getX(); int xL = parentComp.getX();
int yL = parentComp.getY(); int yL = parentComp.getY();
// 组件宽高的十分之一和默认值取大 // 组件宽高的十分之一和默认值取大
int minRangeWidth = Math.max(maxWidth/BORDER_PROPORTION, DEFAULT_AREA_LENGTH); int minRangeWidth = Math.max(maxWidth / BORDER_PROPORTION, DEFAULT_AREA_LENGTH);
int minRangeHeight = Math.max(maxHeight/BORDER_PROPORTION, DEFAULT_AREA_LENGTH); int minRangeHeight = Math.max(maxHeight / BORDER_PROPORTION, DEFAULT_AREA_LENGTH);
if(y < yL+minRangeHeight ) { if (y < yL + minRangeHeight) {
// 在组件上侧三等分 // 在组件上侧三等分
trisectAreaDirect = COMP_TOP; trisectAreaDirect = COMP_TOP;
} else if(y > yL + maxHeight - minRangeHeight) { } else if (y > yL + maxHeight - minRangeHeight) {
// 在组件下侧三等分 // 在组件下侧三等分
trisectAreaDirect = COMP_BOTTOM; trisectAreaDirect = COMP_BOTTOM;
} else if (x < xL + minRangeWidth) { } else if (x < xL + minRangeWidth) {
// 在组件左侧三等分 // 在组件左侧三等分
trisectAreaDirect = COMP_LEFT; trisectAreaDirect = COMP_LEFT;
} else if(x > xL + maxWidth - minRangeWidth) { } else if (x > xL + maxWidth - minRangeWidth) {
// 在组件右侧三等分 // 在组件右侧三等分
trisectAreaDirect = COMP_RIGHT; trisectAreaDirect = COMP_RIGHT;
} }
// tab布局的边界特殊处理,不进行三等分 // tab布局的边界特殊处理,不进行三等分
if(!creator.getTargetChildrenList().isEmpty()){ if (!creator.getTargetChildrenList().isEmpty()) {
return false; return false;
} }
@ -407,21 +413,22 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
/** /**
* 是否为组件交叉点区域 或者是相邻三组建中间点 * 是否为组件交叉点区域 或者是相邻三组建中间点
*
* @param currentComp 当前组件 * @param currentComp 当前组件
* @param x 坐标x * @param x 坐标x
* @param y 坐标y * @param y 坐标y
* @return 是则返回true * @return 是则返回true
*/ */
public boolean isCrossPointArea(Component currentComp, int x, int y) { public boolean isCrossPointArea(Component currentComp, int x, int y) {
// 3个及以上都会出现交叉点区域(包括边界处的) // 3个及以上都会出现交叉点区域(包括边界处的)
if(currentComp == null || container.getComponentCount() <= 2){ if (currentComp == null || container.getComponentCount() <= 2) {
return false; return false;
} }
int cX = currentComp.getX(); int cX = currentComp.getX();
int cY = currentComp.getY(); int cY = currentComp.getY();
int cW = currentComp.getWidth(); int cW = currentComp.getWidth();
int cH = currentComp.getHeight(); int cH = currentComp.getHeight();
int areaWidth = Math.max(cW / BORDER_PROPORTION ,DEFAULT_AREA_LENGTH); int areaWidth = Math.max(cW / BORDER_PROPORTION, DEFAULT_AREA_LENGTH);
int areaHeight = Math.max(cH / BORDER_PROPORTION, DEFAULT_AREA_LENGTH); int areaHeight = Math.max(cH / BORDER_PROPORTION, DEFAULT_AREA_LENGTH);
int rx = cX + cW; int rx = cX + cW;
int by = cY + cH; int by = cY + cH;
@ -432,27 +439,27 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
if (x < objX && y < objY) { if (x < objX && y < objY) {
//左上角区域 //左上角区域
crossPointAreaDirect = cY > margin.getTop() || cX > margin.getLeft() ? COMP_LEFT_TOP : 0; crossPointAreaDirect = cY > margin.getTop() || cX > margin.getLeft() ? COMP_LEFT_TOP : 0;
} else if (y < objY && x > rx - areaWidth){ } else if (y < objY && x > rx - areaWidth) {
//右上角 //右上角
crossPointAreaDirect = cY > margin.getTop() || rx < containerW ? COMP_RIGHT_TOP : 0; crossPointAreaDirect = cY > margin.getTop() || rx < containerW ? COMP_RIGHT_TOP : 0;
} else if (x < objX && y > by - areaHeight) { } else if (x < objX && y > by - areaHeight) {
//左下角 //左下角
crossPointAreaDirect = cX > margin.getLeft() || by < containerH ? COMP_LEFT_BOTTOM : 0; crossPointAreaDirect = cX > margin.getLeft() || by < containerH ? COMP_LEFT_BOTTOM : 0;
} else if (x > rx-areaWidth && y > by - areaHeight) { } else if (x > rx - areaWidth && y > by - areaHeight) {
//右下角 //右下角
crossPointAreaDirect = by < containerH || rx < containerW ? COMP_RIGHT_BOTTOM : 0; crossPointAreaDirect = by < containerH || rx < containerW ? COMP_RIGHT_BOTTOM : 0;
} else { } else {
isMiddlePosition(currentComp, x, y, areaWidth, areaHeight); isMiddlePosition(currentComp, x, y, areaWidth, areaHeight);
} }
// tab布局的边界特殊处理 // tab布局的边界特殊处理
XCreator creator = (XCreator)currentComp; XCreator creator = (XCreator) currentComp;
if(!creator.getTargetChildrenList().isEmpty()){ if (!creator.getTargetChildrenList().isEmpty()) {
return false; return false;
} }
return crossPointAreaDirect != 0; return crossPointAreaDirect != 0;
} }
private void isMiddlePosition(Component comp, int x, int y, int areaWidth , int areaHeight) { private void isMiddlePosition(Component comp, int x, int y, int areaWidth, int areaHeight) {
int cX = comp.getX(); int cX = comp.getX();
int cY = comp.getY(); int cY = comp.getY();
int cW = comp.getWidth(); int cW = comp.getWidth();
@ -479,14 +486,14 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
Component bottomComp = container.getBottomComp(cX, cY, cH); Component bottomComp = container.getBottomComp(cX, cY, cH);
if (x < (cX + areaWidth)) { if (x < (cX + areaWidth)) {
isCrosspoint = topComp != null && bottomComp != null && topComp.getX() == cX && bottomComp.getX() == cX; isCrosspoint = topComp != null && bottomComp != null && topComp.getX() == cX && bottomComp.getX() == cX;
crossPointAreaDirect = isCrosspoint ? COMP_LEFT : 0; crossPointAreaDirect = isCrosspoint ? COMP_LEFT : 0;
} else if (x > (cX + cW - areaWidth)) { } else if (x > (cX + cW - areaWidth)) {
topComp = container.getRightTopComp(cX, cY, cW); topComp = container.getRightTopComp(cX, cY, cW);
bottomComp = container.getRightBottomComp(cX, cY, cH, cW); bottomComp = container.getRightBottomComp(cX, cY, cH, cW);
if (topComp != null && bottomComp != null) { if (topComp != null && bottomComp != null) {
isCrosspoint = topComp.getX() + topComp.getWidth() == cX + cW && bottomComp.getX() + bottomComp.getWidth() == cX+cW; isCrosspoint = topComp.getX() + topComp.getWidth() == cX + cW && bottomComp.getX() + bottomComp.getWidth() == cX + cW;
} }
crossPointAreaDirect = isCrosspoint ? COMP_RIGHT : 0; crossPointAreaDirect = isCrosspoint ? COMP_RIGHT : 0;
} }
} }
} }
@ -513,15 +520,16 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
/** /**
* 平分正常情况拖入组件时按照上1/4区域下1/4区域为上下平分中左侧1/2区域中右侧1/2区域为左右平分 * 平分正常情况拖入组件时按照上1/4区域下1/4区域为上下平分中左侧1/2区域中右侧1/2区域为左右平分
*
* @param currentComp 当前位置组件 * @param currentComp 当前位置组件
* @param child 待放置组件 * @param child 待放置组件
* @param x x * @param x x
* @param y y * @param y y
*/ */
protected void fixHalve(Component currentComp, XCreator child, int x, int y) { protected void fixHalve(Component currentComp, XCreator child, int x, int y) {
XCreator creator = (XCreator)currentComp; XCreator creator = (XCreator) currentComp;
if(!creator.getTargetChildrenList().isEmpty()){ if (!creator.getTargetChildrenList().isEmpty()) {
fixHalveOfTab(creator,child,x,y); fixHalveOfTab(creator, child, x, y);
return; return;
} }
int maxWidth = currentComp.getWidth(); int maxWidth = currentComp.getWidth();
@ -536,18 +544,18 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
int finalY = yL; int finalY = yL;
int finalW = maxWidth; int finalW = maxWidth;
int finalH = maxHeight; int finalH = maxHeight;
if (isDividUp){ if (isDividUp) {
dim.width = maxWidth; dim.width = maxWidth;
dim.height = maxHeight / 2 - actualVal / 2; dim.height = maxHeight / 2 - actualVal / 2;
finalY = yL + dim.height + actualVal; finalY = yL + dim.height + actualVal;
finalH = maxHeight - dim.height - actualVal; finalH = maxHeight - dim.height - actualVal;
} else if(isDividDown){ } else if (isDividDown) {
// 若当前区域高度非偶数,那么和isDividUp时计算一致,否则永远都是上半部分小1px // 若当前区域高度非偶数,那么和isDividUp时计算一致,否则永远都是上半部分小1px
dim.height = maxHeight / 2 - actualVal / 2; dim.height = maxHeight / 2 - actualVal / 2;
dim.width = maxWidth; dim.width = maxWidth;
finalH = maxHeight - dim.height - actualVal; finalH = maxHeight - dim.height - actualVal;
yL = yL + finalH + actualVal; yL = yL + finalH + actualVal;
} else if(isDividLeft){ } else if (isDividLeft) {
dim.width = maxWidth / 2 - actualVal / 2; dim.width = maxWidth / 2 - actualVal / 2;
dim.height = maxHeight; dim.height = maxHeight;
finalX = xL + dim.width + actualVal; finalX = xL + dim.width + actualVal;
@ -571,7 +579,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
// 边界判断抄得原来的逻辑 // 边界判断抄得原来的逻辑
// tab布局的边界拖入新组件,和当前tab布局平分,这时候的actualVal组建间隔是tab里面的组建间隔 // tab布局的边界拖入新组件,和当前tab布局平分,这时候的actualVal组建间隔是tab里面的组建间隔
// 不应该在外层自适应布局添加 // 不应该在外层自适应布局添加
private void fixHalveOfTab(XCreator currentCreator, XCreator child, int x, int y){ private void fixHalveOfTab(XCreator currentCreator, XCreator child, int x, int y) {
int maxWidth = currentCreator.getWidth(); int maxWidth = currentCreator.getWidth();
int maxHeight = currentCreator.getHeight(); int maxHeight = currentCreator.getHeight();
int xL = currentCreator.getX(); int xL = currentCreator.getX();
@ -582,7 +590,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
int finalY = yL; int finalY = yL;
int finalW = maxWidth; int finalW = maxWidth;
int finalH = maxHeight; int finalH = maxHeight;
switch(position){ switch (position) {
case COMP_TOP: case COMP_TOP:
dim.width = maxWidth; dim.width = maxWidth;
dim.height = maxHeight / 2; dim.height = maxHeight / 2;
@ -592,7 +600,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
case COMP_BOTTOM: case COMP_BOTTOM:
dim.height = maxHeight / 2; dim.height = maxHeight / 2;
dim.width = maxWidth; dim.width = maxWidth;
finalH = maxHeight-dim.height; finalH = maxHeight - dim.height;
yL = yL + finalH; yL = yL + finalH;
break; break;
case COMP_LEFT: case COMP_LEFT:
@ -619,13 +627,26 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
} }
} }
private int getPositionOfFix(XCreator currentCreator,int x,int y){ private int getPositionOfFix(XCreator currentCreator, int x, int y) {
int position = 0; int position = 0;
XLayoutContainer cardLayout = ((XWCardMainBorderLayout) currentCreator).getCardPart(); XLayoutContainer cardLayout = ((XWCardMainBorderLayout) currentCreator).getCardPart();
XLayoutContainer container = (XLayoutContainer) cardLayout.getComponent(0); XLayoutContainer container = (XLayoutContainer) cardLayout.getComponent(0);
Rectangle rect = ComponentUtils.getRelativeBounds(container); Rectangle rect = ComponentUtils.getRelativeBounds(container);
/*
* 为了获取到鼠标drop位置的控件
* 我们之前已经将y值变为相对坐标值
* 由于在x轴上没有偏移所以x值一直等于相对坐标值最多差一个边界值1
* 在进行新添加的控件位置计算时
* 又通过ComponentUtils.getRelativeBounds()方法获取到了绝对坐标
* 再次计算相对坐标所以将y值重新变成绝对坐标
* */
if (currentCreator.getBackupParent().getLocation().y == WBorderLayout.DEFAULT_SIZE) {
y = y + WCardMainBorderLayout.TAB_HEIGHT + WBorderLayout.DEFAULT_SIZE;
} else {
y = y + WCardMainBorderLayout.TAB_HEIGHT;
}
int tempX = x - rect.x; int tempX = x - rect.x;
int tempY = y - rect.y + WCardMainBorderLayout.TAB_HEIGHT; int tempY = y - rect.y;
int containerX = container.getX(); int containerX = container.getX();
int containerY = container.getY(); int containerY = container.getY();
int containerWidth = container.getWidth(); int containerWidth = container.getWidth();
@ -634,13 +655,13 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
Rectangle currentXY = new Rectangle(tempX, tempY, 1, 1); Rectangle currentXY = new Rectangle(tempX, tempY, 1, 1);
// 上边缘 // 上边缘
Rectangle upEdge = new Rectangle(containerX, containerY, containerWidth, BORDER_PROPORTION); Rectangle upEdge = new Rectangle(containerX, containerY, containerWidth, BORDER_PROPORTION);
if(upEdge.intersects(currentXY)){ if (upEdge.intersects(currentXY)) {
position = COMP_TOP; position = COMP_TOP;
} }
int bottomY = containerY + containerHeight - BORDER_PROPORTION; int bottomY = containerY + containerHeight - BORDER_PROPORTION;
// 下边缘 // 下边缘
Rectangle bottomEdge = new Rectangle(containerX, bottomY, containerWidth, BORDER_PROPORTION); Rectangle bottomEdge = new Rectangle(containerX, bottomY, containerWidth, BORDER_PROPORTION);
if(bottomEdge.intersects(currentXY)){ if (bottomEdge.intersects(currentXY)) {
position = COMP_BOTTOM; position = COMP_BOTTOM;
} }
//左右边缘的高度 -10*2 是为了不和上下边缘重合 //左右边缘的高度 -10*2 是为了不和上下边缘重合
@ -648,7 +669,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
int leftY = containerY + BORDER_PROPORTION; int leftY = containerY + BORDER_PROPORTION;
// 左边缘 // 左边缘
Rectangle leftEdge = new Rectangle(containerX, leftY, BORDER_PROPORTION, verticalHeight); Rectangle leftEdge = new Rectangle(containerX, leftY, BORDER_PROPORTION, verticalHeight);
if(leftEdge.intersects(currentXY)){ if (leftEdge.intersects(currentXY)) {
position = COMP_LEFT; position = COMP_LEFT;
} }
return position; return position;
@ -658,37 +679,38 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
* 组件交叉区域进行插入时调整受到变动的其他组件,之前是交叉区域插入也按照三等分逻辑后面测试中发现有bug改为和bi一样的鼠标所在侧平分 * 组件交叉区域进行插入时调整受到变动的其他组件,之前是交叉区域插入也按照三等分逻辑后面测试中发现有bug改为和bi一样的鼠标所在侧平分
* 默认左上角右下角区域是垂直方向插入组件 * 默认左上角右下角区域是垂直方向插入组件
* 右上角和左下角是水平方向插入组件这样避免田字块时重复 * 右上角和左下角是水平方向插入组件这样避免田字块时重复
*
* @param currentComp 当前位置组件 * @param currentComp 当前位置组件
* @param child 待放置组件 * @param child 待放置组件
* @param x x * @param x x
* @param y y * @param y y
*/ */
protected void fixCrossPointArea(Component currentComp, XCreator child, int x, int y) { protected void fixCrossPointArea(Component currentComp, XCreator child, int x, int y) {
//计算前先全部初始化待调整控件所在的list //计算前先全部初始化待调整控件所在的list
initCompsList(); initCompsList();
switch(crossPointAreaDirect) { switch (crossPointAreaDirect) {
case COMP_LEFT_TOP : case COMP_LEFT_TOP:
dealCrossPointAtLeftTop(currentComp, child); dealCrossPointAtLeftTop(currentComp, child);
break; break;
case COMP_RIGHT_BOTTOM : case COMP_RIGHT_BOTTOM:
dealCrossPointAtRightBottom(currentComp, child); dealCrossPointAtRightBottom(currentComp, child);
break; break;
case COMP_LEFT_BOTTOM : case COMP_LEFT_BOTTOM:
dealCrossPointAtLeftBottom(currentComp, child); dealCrossPointAtLeftBottom(currentComp, child);
break; break;
case COMP_RIGHT_TOP : case COMP_RIGHT_TOP:
dealCrossPointAtRightTop(currentComp, child); dealCrossPointAtRightTop(currentComp, child);
break; break;
case COMP_TOP : case COMP_TOP:
dealCrossPointAtTop(currentComp, child); dealCrossPointAtTop(currentComp, child);
break; break;
case COMP_BOTTOM : case COMP_BOTTOM:
dealCrossPointAtBottom(currentComp, child); dealCrossPointAtBottom(currentComp, child);
break; break;
case COMP_LEFT : case COMP_LEFT:
dealCrossPointAtLeft(currentComp, child); dealCrossPointAtLeft(currentComp, child);
break; break;
case COMP_RIGHT : case COMP_RIGHT:
dealCrossPointAtRight(currentComp, child); dealCrossPointAtRight(currentComp, child);
break; break;
} }
@ -708,16 +730,16 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
Component topComp = container.getTopComp(cX, cY); Component topComp = container.getTopComp(cX, cY);
Component leftComp = container.getLeftComp(cX, cY); Component leftComp = container.getLeftComp(cX, cY);
//上方没有组件或者有一个x坐标不相同的组件 //上方没有组件或者有一个x坐标不相同的组件
if (topComp==null || topComp.getX()!=cX) { if (topComp == null || topComp.getX() != cX) {
minDH = cH < leftComp.getHeight() ? cH : leftComp.getHeight(); minDH = cH < leftComp.getHeight() ? cH : leftComp.getHeight();
downComps.add(leftComp); downComps.add(leftComp);
downComps.add(currentComp); downComps.add(currentComp);
int dLength = minDH / 2; int dLength = minDH / 2;
childw = leftComp.getWidth()+cW+actualVal; childw = leftComp.getWidth() + cW + actualVal;
childh = dLength-actualVal / 2; childh = dLength - actualVal / 2;
if (isCalculateChildPos) { if (isCalculateChildPos) {
childPosition = new int[]{leftComp.getX(), leftComp.getY(), childw, childh}; childPosition = new int[]{leftComp.getX(), leftComp.getY(), childw, childh};
} else{ } else {
//先设置child位置,不然leftComp坐标调整后就不对了 //先设置child位置,不然leftComp坐标调整后就不对了
child.setLocation(leftComp.getX(), leftComp.getY()); child.setLocation(leftComp.getX(), leftComp.getY());
child.setSize(childw, childh); child.setSize(childw, childh);
@ -726,7 +748,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
} else { } else {
rightComps.add(currentComp); rightComps.add(currentComp);
rightComps.add(topComp); rightComps.add(topComp);
minRW = cW<topComp.getWidth() ? cW : topComp.getWidth(); minRW = cW < topComp.getWidth() ? cW : topComp.getWidth();
int rightLength = minRW / 2; int rightLength = minRW / 2;
childw = rightLength - actualVal / 2; childw = rightLength - actualVal / 2;
childh = currentComp.getHeight() + topComp.getHeight() + actualVal; childh = currentComp.getHeight() + topComp.getHeight() + actualVal;
@ -755,12 +777,12 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
minUH = cH < rightComp.getHeight() ? cH : rightComp.getHeight(); minUH = cH < rightComp.getHeight() ? cH : rightComp.getHeight();
upComps.add(currentComp); upComps.add(currentComp);
upComps.add(rightComp); upComps.add(rightComp);
int uLength = minUH / 2 ; int uLength = minUH / 2;
calculateTopComps(uLength, child, uLength); calculateTopComps(uLength, child, uLength);
} else { } else {
leftComps.add(currentComp); leftComps.add(currentComp);
leftComps.add(bottomComp); leftComps.add(bottomComp);
minLW = cW<bottomComp.getWidth() ? cW : bottomComp.getWidth(); minLW = cW < bottomComp.getWidth() ? cW : bottomComp.getWidth();
int leftLength = minLW / 2; int leftLength = minLW / 2;
calculateLeftComps(leftLength, child, leftLength); calculateLeftComps(leftLength, child, leftLength);
} }
@ -807,7 +829,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
Component topComp = container.getRightTopComp(cX, cY, cW); Component topComp = container.getRightTopComp(cX, cY, cW);
Component rightComp = container.getRightComp(cX, cY, cW); Component rightComp = container.getRightComp(cX, cY, cW);
//右方没有组件或者有一个右侧不对齐的组件 //右方没有组件或者有一个右侧不对齐的组件
if (rightComp==null || (rightComp.getY()!=cY)) { if (rightComp == null || (rightComp.getY() != cY)) {
leftComps.add(currentComp); leftComps.add(currentComp);
leftComps.add(topComp); leftComps.add(topComp);
minLW = cW < topComp.getWidth() ? cW : topComp.getWidth(); minLW = cW < topComp.getWidth() ? cW : topComp.getWidth();
@ -840,9 +862,9 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
downComps.add(currentComp); downComps.add(currentComp);
downComps.add(rightComp); downComps.add(rightComp);
int dLength = minDH / 2; int dLength = minDH / 2;
int childw = cW+leftComp.getWidth()+rightComp.getWidth() + actualVal * 2; int childw = cW + leftComp.getWidth() + rightComp.getWidth() + actualVal * 2;
int childh = dLength - actualVal / 2; int childh = dLength - actualVal / 2;
if (isCalculateChildPos){ if (isCalculateChildPos) {
childPosition = new int[]{leftComp.getX(), leftComp.getY(), childw, childh}; childPosition = new int[]{leftComp.getX(), leftComp.getY(), childw, childh};
} else { } else {
child.setLocation(leftComp.getX(), leftComp.getY()); child.setLocation(leftComp.getX(), leftComp.getY());
@ -889,7 +911,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
int rightLength = minRW / 2; int rightLength = minRW / 2;
int childw = rightLength - actualVal / 2; int childw = rightLength - actualVal / 2;
int childh = topComp.getHeight() + currentComp.getHeight() + bottomComp.getHeight() + actualVal * 2; int childh = topComp.getHeight() + currentComp.getHeight() + bottomComp.getHeight() + actualVal * 2;
if (isCalculateChildPos){ if (isCalculateChildPos) {
childPosition = new int[]{topComp.getX(), topComp.getY(), childw, childh}; childPosition = new int[]{topComp.getX(), topComp.getY(), childw, childh};
} else { } else {
child.setLocation(topComp.getX(), topComp.getY()); child.setLocation(topComp.getX(), topComp.getY());
@ -900,8 +922,9 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
/** /**
* 三等分区域时调整相关联的组件 * 三等分区域时调整相关联的组件
* @param currentComp 鼠标所在组件 *
* @param child 待插入组件 * @param currentComp 鼠标所在组件
* @param child 待插入组件
*/ */
protected void fixTrisect(Component currentComp, XCreator child, int x, int y) { protected void fixTrisect(Component currentComp, XCreator child, int x, int y) {
int minUpH = 0, minDownH = 0, minLeftW = 0, minRightW = 0; int minUpH = 0, minDownH = 0, minLeftW = 0, minRightW = 0;
@ -940,15 +963,15 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
*/ */
private void dealTrisectAtTop(XCreator child, int minUH, int minDH) { private void dealTrisectAtTop(XCreator child, int minUH, int minDH) {
// 三等分有间隔时,实际是两侧都要减去半个间隔大小 // 三等分有间隔时,实际是两侧都要减去半个间隔大小
int averageH = (minUH+minDH - actualVal) / 3; int averageH = (minUH + minDH - actualVal) / 3;
int dLength = 0; int dLength = 0;
int uLength = 0; int uLength = 0;
if (minDH==0) { if (minDH == 0) {
dLength = 0; dLength = 0;
uLength = minUH / 2; uLength = minUH / 2;
calculateTopComps(uLength, child, uLength); calculateTopComps(uLength, child, uLength);
return; return;
} else if(minUH == 0){ } else if (minUH == 0) {
dLength = minDH / 2; dLength = minDH / 2;
int witdh = container.getWidth() - margin.getLeft() - margin.getRight(); int witdh = container.getWidth() - margin.getLeft() - margin.getRight();
if (!isCalculateChildPos) { if (!isCalculateChildPos) {
@ -956,22 +979,22 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
child.setLocation(margin.getLeft(), margin.getRight()); child.setLocation(margin.getLeft(), margin.getRight());
child.setSize(witdh, dLength - actualVal / 2); child.setSize(witdh, dLength - actualVal / 2);
} else { } else {
childPosition = new int[] {margin.getLeft(), margin.getRight(), witdh, dLength - actualVal / 2}; childPosition = new int[]{margin.getLeft(), margin.getRight(), witdh, dLength - actualVal / 2};
} }
return; return;
} else if (minUH >= minDH) { } else if (minUH >= minDH) {
minDH -= actualVal / 2; minDH -= actualVal / 2;
if ((minDH * 2 / 3) < minHeight) { if ((minDH * 2 / 3) < minHeight) {
dLength = minDH - minHeight; dLength = minDH - minHeight;
}else { } else {
dLength = minDH / 3; dLength = minDH / 3;
} }
uLength = averageH - dLength; uLength = averageH - dLength;
} else{ } else {
minUH -= actualVal / 2; minUH -= actualVal / 2;
if ((minUH * 2 / 3) < minHeight) { if ((minUH * 2 / 3) < minHeight) {
uLength = minUH - minHeight; uLength = minUH - minHeight;
}else { } else {
uLength = minUH / 3; uLength = minUH / 3;
} }
dLength = averageH - uLength; dLength = averageH - uLength;
@ -999,16 +1022,16 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
child.setLocation(margin.getLeft(), margin.getRight()); child.setLocation(margin.getLeft(), margin.getRight());
child.setSize(rightLength - actualVal / 2, height); child.setSize(rightLength - actualVal / 2, height);
} else { } else {
childPosition = new int[] {margin.getLeft(), margin.getRight(), rightLength - actualVal / 2, height}; childPosition = new int[]{margin.getLeft(), margin.getRight(), rightLength - actualVal / 2, height};
} }
return; return;
} else if(minRW == 0){ } else if (minRW == 0) {
leftLength = minLW / 2; leftLength = minLW / 2;
calculateLeftComps(leftLength, child, leftLength); calculateLeftComps(leftLength, child, leftLength);
return; return;
} else if (minRW >= minLW) { } else if (minRW >= minLW) {
minLW -= actualVal / 2; minLW -= actualVal / 2;
if(minLW * 2 / 3 < minWidth) { if (minLW * 2 / 3 < minWidth) {
leftLength = minLW - minWidth; leftLength = minLW - minWidth;
} else { } else {
leftLength = minLW / 3; leftLength = minLW / 3;
@ -1016,7 +1039,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
rightLength = averageW - leftLength; rightLength = averageW - leftLength;
} else { } else {
minRW -= actualVal / 2; minRW -= actualVal / 2;
if(minRW * 2 / 3 < minWidth) { if (minRW * 2 / 3 < minWidth) {
rightLength = minRW - minWidth; rightLength = minRW - minWidth;
} else { } else {
rightLength = minRW / 3; rightLength = minRW / 3;
@ -1033,12 +1056,12 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
private void calculateBottomComps(int length) { private void calculateBottomComps(int length) {
length += actualVal / 2; length += actualVal / 2;
for (int i = 0,num = downComps.size(); i < num; i++){ for (int i = 0, num = downComps.size(); i < num; i++) {
Component comp = downComps.get(i); Component comp = downComps.get(i);
comp.setLocation(comp.getX(), comp.getY() + length); comp.setLocation(comp.getX(), comp.getY() + length);
int offset = comp.getHeight() - length; int offset = comp.getHeight() - length;
comp.setSize(comp.getWidth(), offset); comp.setSize(comp.getWidth(), offset);
XCreator creator = (XCreator)comp; XCreator creator = (XCreator) comp;
creator.recalculateChildHeight(offset); creator.recalculateChildHeight(offset);
} }
} }
@ -1048,24 +1071,24 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
int childWidth = (upComps.size() - 1) * actualVal; int childWidth = (upComps.size() - 1) * actualVal;
int childX = container.getWidth() - margin.getLeft() - margin.getRight(); int childX = container.getWidth() - margin.getLeft() - margin.getRight();
int childY = 0; int childY = 0;
if(upComps.size() > INDEX_ZERO){ if (upComps.size() > INDEX_ZERO) {
childY = upComps.get(INDEX_ZERO).getY() + upComps.get(INDEX_ZERO).getHeight() - length; childY = upComps.get(INDEX_ZERO).getY() + upComps.get(INDEX_ZERO).getHeight() - length;
} }
for (int i = 0,num = upComps.size(); i < num; i++){ for (int i = 0, num = upComps.size(); i < num; i++) {
Component comp = upComps.get(i); Component comp = upComps.get(i);
childWidth += comp.getWidth(); childWidth += comp.getWidth();
if (comp.getX() < childX){ if (comp.getX() < childX) {
childX = comp.getX(); childX = comp.getX();
} }
if (!isCalculateChildPos) { if (!isCalculateChildPos) {
int offset = comp.getHeight() - length; int offset = comp.getHeight() - length;
comp.setSize(comp.getWidth(), offset); comp.setSize(comp.getWidth(), offset);
XCreator creator = (XCreator)comp; XCreator creator = (XCreator) comp;
creator.recalculateChildHeight(offset); creator.recalculateChildHeight(offset);
} }
} }
childY += actualVal; childY += actualVal;
averageH -= actualVal/2; averageH -= actualVal / 2;
if (isCalculateChildPos) { if (isCalculateChildPos) {
childPosition = new int[]{childX, childY, childWidth, averageH}; childPosition = new int[]{childX, childY, childWidth, averageH};
} else { } else {
@ -1081,25 +1104,25 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
} }
int childH = (leftComps.size() - 1) * actualVal; int childH = (leftComps.size() - 1) * actualVal;
int childX = 0; int childX = 0;
if(leftComps.size() > INDEX_ZERO){ if (leftComps.size() > INDEX_ZERO) {
childX = leftComps.get(INDEX_ZERO).getX() + leftComps.get(INDEX_ZERO).getWidth() - length; childX = leftComps.get(INDEX_ZERO).getX() + leftComps.get(INDEX_ZERO).getWidth() - length;
} }
int childY = container.getHeight() - margin.getBottom(); int childY = container.getHeight() - margin.getBottom();
for (int i = 0,num = leftComps.size(); i < num; i++){ for (int i = 0, num = leftComps.size(); i < num; i++) {
Component comp = leftComps.get(i); Component comp = leftComps.get(i);
childH += comp.getHeight(); childH += comp.getHeight();
if (comp.getY() < childY){ if (comp.getY() < childY) {
childY = comp.getY(); childY = comp.getY();
} }
if (!isCalculateChildPos) { if (!isCalculateChildPos) {
int offset = comp.getWidth() - length; int offset = comp.getWidth() - length;
comp.setSize(offset, comp.getHeight()); comp.setSize(offset, comp.getHeight());
XCreator creator = (XCreator)comp; XCreator creator = (XCreator) comp;
creator.recalculateChildWidth(offset); creator.recalculateChildWidth(offset);
} }
} }
childX += actualVal; childX += actualVal;
averageW -= actualVal/2; averageW -= actualVal / 2;
if (isCalculateChildPos) { if (isCalculateChildPos) {
childPosition = new int[]{childX, childY, averageW, childH}; childPosition = new int[]{childX, childY, averageW, childH};
} else { } else {
@ -1110,33 +1133,34 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{
private void calculateRightComps(int length) { private void calculateRightComps(int length) {
length += actualVal / 2; length += actualVal / 2;
for (int i=0,num=rightComps.size(); i<num; i++){ for (int i = 0, num = rightComps.size(); i < num; i++) {
Component comp = rightComps.get(i); Component comp = rightComps.get(i);
comp.setLocation(comp.getX() + length, comp.getY()); comp.setLocation(comp.getX() + length, comp.getY());
int offset = comp.getWidth() - length; int offset = comp.getWidth() - length;
comp.setSize(offset, comp.getHeight()); comp.setSize(offset, comp.getHeight());
XCreator creator = (XCreator)comp; XCreator creator = (XCreator) comp;
creator.recalculateChildWidth(offset); creator.recalculateChildWidth(offset);
} }
} }
/** /**
* 不调整只计算位置 * 不调整只计算位置
*
* @return child的位置 * @return child的位置
*/ */
public int[] getChildPosition(Component currentComp, XCreator child, int x, int y ) { public int[] getChildPosition(Component currentComp, XCreator child, int x, int y) {
if (currentComp == container) { if (currentComp == container) {
return new int[]{0, 0, container.getWidth(), container.getHeight()}; return new int[]{0, 0, container.getWidth(), container.getHeight()};
} }
this.isCalculateChildPos = true; this.isCalculateChildPos = true;
if (isCrossPointArea(currentComp, x, y)){ if (isCrossPointArea(currentComp, x, y)) {
fixCrossPointArea(currentComp, child, x, y); fixCrossPointArea(currentComp, child, x, y);
} else if (isTrisectionArea(currentComp, x, y)) { } else if (isTrisectionArea(currentComp, x, y)) {
fixTrisect(currentComp, child, x, y); fixTrisect(currentComp, child, x, y);
} else { } else {
fixHalve(currentComp, child, x, y); fixHalve(currentComp, child, x, y);
} }
if (childPosition==null) { if (childPosition == null) {
childPosition = new int[]{0, 0, 0, 0}; childPosition = new int[]{0, 0, 0, 0};
} }
this.isCalculateChildPos = false; this.isCalculateChildPos = false;

8
designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java

@ -26,9 +26,9 @@ import com.fr.design.file.HistoryTemplateListPane;
import com.fr.design.mainframe.JForm; import com.fr.design.mainframe.JForm;
import com.fr.design.utils.ComponentUtils; import com.fr.design.utils.ComponentUtils;
import com.fr.form.ui.LayoutBorderStyle; import com.fr.form.ui.LayoutBorderStyle;
import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget;
import com.fr.form.ui.container.WLayout; import com.fr.form.ui.container.WLayout;
import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout;
import com.fr.form.ui.widget.BoundsWidget;
import com.fr.general.ComparatorUtils; import com.fr.general.ComparatorUtils;
/** /**
@ -277,6 +277,10 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter {
super.clearCompsList(); super.clearCompsList();
} }
protected Rectangle getLayoutBound(XWCardMainBorderLayout mainLayout){
return mainLayout.getBounds();
}
private Rectangle adjustBackupBound(Rectangle backupBound, XWCardMainBorderLayout mainLayout) { private Rectangle adjustBackupBound(Rectangle backupBound, XWCardMainBorderLayout mainLayout) {
// 参数界面高度对纵坐标产生的影响 // 参数界面高度对纵坐标产生的影响
JForm jform = (JForm) (HistoryTemplateListPane.getInstance().getCurrentEditingTemplate()); JForm jform = (JForm) (HistoryTemplateListPane.getInstance().getCurrentEditingTemplate());
@ -284,7 +288,7 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter {
backupBound.y -= jform.getFormDesign().getParaHeight(); backupBound.y -= jform.getFormDesign().getParaHeight();
} }
Rectangle rec = mainLayout.getBounds(); Rectangle rec = getLayoutBound(mainLayout);
// XWTabLayout里面的横纵坐标收到外层XWCardMainBorderLayout的横纵坐标影响 // XWTabLayout里面的横纵坐标收到外层XWCardMainBorderLayout的横纵坐标影响
// 减掉之后可以按照它原来的逻辑执行 // 减掉之后可以按照它原来的逻辑执行
backupBound.x -= rec.x; backupBound.x -= rec.x;

114
designer_form/src/com/fr/design/designer/beans/adapters/layout/FRTabFitLayoutAdapter.java

@ -4,20 +4,23 @@
package com.fr.design.designer.beans.adapters.layout; package com.fr.design.designer.beans.adapters.layout;
import java.awt.Rectangle;
import com.fr.design.beans.GroupModel; import com.fr.design.beans.GroupModel;
import com.fr.design.designer.creator.XCreator; import com.fr.design.designer.creator.XCreator;
import com.fr.design.designer.creator.XLayoutContainer; import com.fr.design.designer.creator.XLayoutContainer;
import com.fr.design.designer.creator.XWParameterLayout;
import com.fr.design.designer.creator.XWidgetCreator; import com.fr.design.designer.creator.XWidgetCreator;
import com.fr.design.designer.creator.cardlayout.XWCardLayout; import com.fr.design.designer.creator.cardlayout.XWCardLayout;
import com.fr.design.designer.creator.cardlayout.XWCardMainBorderLayout;
import com.fr.design.designer.creator.cardlayout.XWTabFitLayout; import com.fr.design.designer.creator.cardlayout.XWTabFitLayout;
import com.fr.design.designer.properties.FRTabFitLayoutPropertiesGroupModel; import com.fr.design.designer.properties.FRTabFitLayoutPropertiesGroupModel;
import com.fr.design.utils.ComponentUtils; import com.fr.design.utils.ComponentUtils;
import com.fr.form.ui.LayoutBorderStyle; import com.fr.form.ui.LayoutBorderStyle;
import com.fr.form.ui.container.WBorderLayout;
import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout;
import com.fr.general.ComparatorUtils; import com.fr.general.ComparatorUtils;
import java.awt.*;
/** /**
* tab布局tabFit适配器 * tab布局tabFit适配器
* *
@ -25,70 +28,81 @@ import com.fr.general.ComparatorUtils;
* @date 2014-6-24 * @date 2014-6-24
*/ */
public class FRTabFitLayoutAdapter extends FRFitLayoutAdapter { public class FRTabFitLayoutAdapter extends FRFitLayoutAdapter {
//标题栏高度对tab布局内部组件的y坐标造成了偏移 //标题栏高度对tab布局内部组件的y坐标造成了偏移
private static int TAB_HEIGHT = 40; private static int TAB_HEIGHT = 40;
/** /**
* 构造函数 * 构造函数
* @param container XWTabFitLayout容器 *
*/ * @param container XWTabFitLayout容器
public FRTabFitLayoutAdapter(XLayoutContainer container) { */
super(container); public FRTabFitLayoutAdapter(XLayoutContainer container) {
} super(container);
}
/** /**
* 返回布局自身属性方便一些特有设置在layout刷新时处理 * 返回布局自身属性方便一些特有设置在layout刷新时处理
*/ */
@Override @Override
public GroupModel getLayoutProperties() { public GroupModel getLayoutProperties() {
XWTabFitLayout xfl = (XWTabFitLayout) container; XWTabFitLayout xfl = (XWTabFitLayout) container;
return new FRTabFitLayoutPropertiesGroupModel(xfl); return new FRTabFitLayoutPropertiesGroupModel(xfl);
} }
/** /**
* 组件的ComponentAdapter在添加组件时如果发现布局管理器不为空会继而调用该布局管理器的 * 组件的ComponentAdapter在添加组件时如果发现布局管理器不为空会继而调用该布局管理器的
* addComp方法来完成组件的具体添加在该方法内布局管理器可以提供额外的功能 * addComp方法来完成组件的具体添加在该方法内布局管理器可以提供额外的功能
*
* @param creator 被添加的新组件 * @param creator 被添加的新组件
* @param x 添加的位置x该位置是相对于container的 * @param x 添加的位置x该位置是相对于container的
* @param y 添加的位置y该位置是相对于container的 * @param y 添加的位置y该位置是相对于container的
* @return 是否添加成功成功返回true否则false * @return 是否添加成功成功返回true否则false
*/ */
@Override @Override
public boolean addBean(XCreator creator, int x, int y) { public boolean addBean(XCreator creator, int x, int y) {
// 经过accept判断后,container会被改变,先备份 // 经过accept判断后,container会被改变,先备份
XLayoutContainer backUpContainer = container; XLayoutContainer backUpContainer = container;
Rectangle rect = ComponentUtils.getRelativeBounds(container); Rectangle rect = ComponentUtils.getRelativeBounds(container);
int posX = x - rect.x; int posX = x - rect.x;
int posY = y - rect.y; int posY = y - rect.y;
if (!accept(creator, posX, posY)) { if (!accept(creator, posX, posY)) {
return false; return false;
} }
// posX,posY是新拖入组件相对于容器的位置,若在tab布局的边缘,则需要把新组件添加到 // posX,posY是新拖入组件相对于容器的位置,若在tab布局的边缘,则需要把新组件添加到
// 父层自适应布局中,这时候的添加位置就是tab布局所在的位置 // 父层自适应布局中,这时候的添加位置就是tab布局所在的位置
if(this.intersectsEdge(posX, posY, backUpContainer)){ if (this.intersectsEdge(posX, posY, backUpContainer)) {
if(!ComparatorUtils.equals(backUpContainer.getOuterLayout(), backUpContainer.getBackupParent())){ if (!ComparatorUtils.equals(backUpContainer.getOuterLayout(), backUpContainer.getBackupParent())) {
XWTabFitLayout tabLayout = (XWTabFitLayout)backUpContainer; XWTabFitLayout tabLayout = (XWTabFitLayout) backUpContainer;
y = adjustY(y,tabLayout); y = adjustY(y, tabLayout);
} }
addComp(creator, x, y); addComp(creator, x, y);
((XWidgetCreator) creator).recalculateChildrenSize(); ((XWidgetCreator) creator).recalculateChildrenSize();
return true; return true;
} }
// 如果不在边缘,容器为本自适应布局,增加组件的位置就是相对于容器的位置 // 如果不在边缘,容器为本自适应布局,增加组件的位置就是相对于容器的位置
addComp(creator, posX, posY); addComp(creator, posX, posY);
((XWidgetCreator) creator).recalculateChildrenSize(); ((XWidgetCreator) creator).recalculateChildrenSize();
return true; return true;
} }
// tab布局的纵坐标受到tab高度的影响,判断的上边界取得是里面XWTabFitLayout的上边界, // tab布局的纵坐标受到tab高度的影响,判断的上边界取得是里面XWTabFitLayout的上边界,
// 实际计算的时候的纵坐标用了外层的CardMainBorerLayout,需要将tab高度减掉 // 实际计算的时候的纵坐标用了外层的CardMainBorerLayout,需要将tab高度减掉
private int adjustY(int y,XWTabFitLayout tabLayout){ //将y值变为相对坐标以实现获取到鼠标drop位置的控件
XWCardLayout cardLayout = (XWCardLayout) tabLayout.getBackupParent(); //TODO 可以直接在这边将x,y都变成相对坐标,这样在后面判断拖进来的新控件放置方式的时候就不用再判断了
LayoutBorderStyle style = cardLayout.toData().getBorderStyle(); private int adjustY(int y, XWTabFitLayout tabLayout) {
if(ComparatorUtils.equals(style.getType(), LayoutBorderStyle.TITLE)){ XWCardLayout cardLayout = (XWCardLayout) tabLayout.getBackupParent();
y -= WCardMainBorderLayout.TAB_HEIGHT; LayoutBorderStyle style = cardLayout.toData().getBorderStyle();
} if (container.getLocation().y == WBorderLayout.DEFAULT_SIZE) {
return y; y = y - WBorderLayout.DEFAULT_SIZE;
}
if (ComparatorUtils.equals(style.getType(), LayoutBorderStyle.TITLE)) {
y = y - WCardMainBorderLayout.TAB_HEIGHT;
}
return y;
}
protected Rectangle getLayoutBound(XWCardMainBorderLayout mainLayout) {
return ComponentUtils.getRelativeBounds(mainLayout);
} }
} }

8
designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java

@ -11,9 +11,10 @@ import com.fr.design.designer.creator.*;
import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.FormDesigner;
import com.fr.design.mainframe.FormSelection; import com.fr.design.mainframe.FormSelection;
import com.fr.design.utils.ComponentUtils; import com.fr.design.utils.ComponentUtils;
import com.fr.form.main.Form;
import com.fr.form.ui.container.WAbsoluteLayout; import com.fr.form.ui.container.WAbsoluteLayout;
import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget;
import com.fr.form.ui.container.WParameterLayout; import com.fr.form.ui.container.WParameterLayout;
import com.fr.form.ui.widget.BoundsWidget;
/** /**
* @author richer * @author richer
@ -66,10 +67,8 @@ public abstract class AccessDirection implements Direction {
protected void sorptionPoint(Point point, Rectangle current_bounds,FormDesigner designer) { protected void sorptionPoint(Point point, Rectangle current_bounds,FormDesigner designer) {
boolean findInX = current_bounds.getWidth() <= MoveUtils.SORPTION_UNIT ? true : false; boolean findInX = current_bounds.getWidth() <= MoveUtils.SORPTION_UNIT ? true : false;
boolean findInY = current_bounds.getHeight() <= MoveUtils.SORPTION_UNIT ? true : false; boolean findInY = current_bounds.getHeight() <= MoveUtils.SORPTION_UNIT ? true : false;
WAbsoluteLayout layout =getLayout(designer); WAbsoluteLayout layout =getLayout(designer);
FormSelection selection = designer.getSelectionModel().getSelection(); FormSelection selection = designer.getSelectionModel().getSelection();
boolean isWidgetsIntersect = false; boolean isWidgetsIntersect = false;
for (int i = 0, count = layout.getWidgetCount(); i < count; i++) { for (int i = 0, count = layout.getWidgetCount(); i < count; i++) {
BoundsWidget temp = (BoundsWidget) layout.getWidget(i); BoundsWidget temp = (BoundsWidget) layout.getWidget(i);
@ -111,7 +110,10 @@ public abstract class AccessDirection implements Direction {
} }
} }
processRectangleIntersects(designer, point.x, point.y, isWidgetsIntersect); processRectangleIntersects(designer, point.x, point.y, isWidgetsIntersect);
setDesignerStateModelProperties(designer, findInX, findInY, current_bounds, point);
}
private void setDesignerStateModelProperties (FormDesigner designer, boolean findInX, boolean findInY, Rectangle current_bounds, Point point) {
designer.getStateModel().setXAbsorptionline(findInX && current_bounds.getWidth() > MoveUtils.SORPTION_UNIT ? Absorptionline.createXAbsorptionline(point.x) : null); designer.getStateModel().setXAbsorptionline(findInX && current_bounds.getWidth() > MoveUtils.SORPTION_UNIT ? Absorptionline.createXAbsorptionline(point.x) : null);
designer.getStateModel().setYAbsorptionline(findInY && current_bounds.getHeight() > MoveUtils.SORPTION_UNIT ? Absorptionline.createYAbsorptionline(point.y) : null); designer.getStateModel().setYAbsorptionline(findInY && current_bounds.getHeight() > MoveUtils.SORPTION_UNIT ? Absorptionline.createYAbsorptionline(point.y) : null);
designer.getStateModel().setEquidistantLine(null); designer.getStateModel().setEquidistantLine(null);

161
designer_form/src/com/fr/design/designer/beans/location/Inner.java

@ -9,9 +9,8 @@ import com.fr.design.mainframe.FormDesigner;
import com.fr.design.mainframe.FormSelection; import com.fr.design.mainframe.FormSelection;
import com.fr.design.utils.ComponentUtils; import com.fr.design.utils.ComponentUtils;
import com.fr.form.ui.container.WAbsoluteLayout; import com.fr.form.ui.container.WAbsoluteLayout;
import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import com.fr.form.ui.widget.BoundsWidget;
import com.fr.stable.ArrayUtils; import com.fr.stable.ArrayUtils;
import com.fr.third.com.lowagie.text.*;
import java.awt.*; import java.awt.*;
import java.awt.Rectangle; import java.awt.Rectangle;
@ -47,89 +46,97 @@ public class Inner extends AccessDirection {
return new Point(x, y); return new Point(x, y);
} }
@Override private class RectDesigner implements RectangleDesigner {
protected void sorptionPoint(Point point, Rectangle current_bounds, final FormDesigner designer) { private FormDesigner designer = null;
RectangleDesigner rd = new RectangleDesigner() {
public void setXAbsorptionline(Absorptionline line) {
designer.getStateModel().setXAbsorptionline(line);
}
public void setYAbsorptionline(Absorptionline line) {
designer.getStateModel().setYAbsorptionline(line);
}
/** public RectDesigner(FormDesigner designer) {
* 获取当前选中块的水平线数组 this.designer = designer;
* }
* @return 块的水平线数组
*
*/
public int[] getHorizontalLine(){
return ArrayUtils.EMPTY_INT_ARRAY;
}
/** public void setXAbsorptionline(Absorptionline line) {
* 获取当前选中块的垂直线数组 designer.getStateModel().setXAbsorptionline(line);
* }
* @return 块的垂直线数组 public void setYAbsorptionline(Absorptionline line) {
* designer.getStateModel().setYAbsorptionline(line);
*/ }
public int[] getVerticalLine(){
return ArrayUtils.EMPTY_INT_ARRAY;
}
public RectangleIterator createRectangleIterator() {
return getRectangleIterator(designer);
}
/** /**
* 设置designer内部组件是否重叠的标志位 * 获取当前选中块的水平线数组
* *
* @param isIntersects 是否重叠 * @return 块的水平线数组
*/ *
@Override */
public void setWidgetsIntersects(boolean isIntersects) { public int[] getHorizontalLine(){
designer.setWidgetsIntersect(isIntersects); return ArrayUtils.EMPTY_INT_ARRAY;
} }
/** /**
* 获取designer内部组件是否重叠的标志位 * 获取当前选中块的垂直线数组
* *
* @return 重叠 * @return 块的垂直线数组
*/ *
@Override */
public boolean getWidgetsIntersects() { public int[] getVerticalLine(){
return designer.isWidgetsIntersect(); return ArrayUtils.EMPTY_INT_ARRAY;
} }
public RectangleIterator createRectangleIterator() {
return getRectangleIterator(designer);
}
/** /**
* 获取designer相对屏幕的位置 * 设置designer内部组件是否重叠的标志位
* *
* @return 位置 * @param isIntersects 是否重叠
*/ */
@Override @Override
public Point getDesignerLocationOnScreen() { public void setWidgetsIntersected(boolean isIntersects) {
return designer.getLocationOnScreen(); designer.setWidgetsIntersect(isIntersects);
} }
/** /**
* 设置等距线 * 获取designer内部组件是否重叠的标志位
* *
* @param line 吸附线 * @return 重叠
*/ */
@Override @Override
public void setEquidistantLine(Absorptionline line) { public boolean isWidgetsIntersected() {
designer.getStateModel().setEquidistantLine(line); return designer.isWidgetsIntersect();
} }
@Override /**
public int getDesignerScrollHorizontalValue() { * 获取designer相对屏幕的位置
return designer.getArea().getHorizontalValue(); *
} * @return 位置
*/
@Override
public Point getDesignerLocationOnScreen() {
return designer.getLocationOnScreen();
}
@Override /**
public int getDesignerScrollVerticalValue() { * 设置等距线
return designer.getArea().getVerticalValue(); *
} * @param line 吸附线
}; */
@Override
public void setEquidistantLine(Absorptionline line) {
designer.getStateModel().setEquidistantLine(line);
}
@Override
public int getDesignerScrollHorizontalValue() {
return designer.getArea().getHorizontalValue();
}
@Override
public int getDesignerScrollVerticalValue() {
return designer.getArea().getVerticalValue();
}
}
@Override
protected void sorptionPoint(Point point, Rectangle current_bounds, final FormDesigner designer) {
RectDesigner rd = new RectDesigner(designer);
//判断当前操作的是不是参数面板,要特殊处理 //判断当前操作的是不是参数面板,要特殊处理
boolean isParameterLayout = ((XCreator)(designer.getSelectionModel().getSelection().getSelectedCreator().getParent())).acceptType(XWParameterLayout.class); boolean isParameterLayout = ((XCreator)(designer.getSelectionModel().getSelection().getSelectedCreator().getParent())).acceptType(XWParameterLayout.class);
point.setLocation(MoveUtils.sorption(point.x, point.y, current_bounds.width, current_bounds.height, rd, isParameterLayout)); point.setLocation(MoveUtils.sorption(point.x, point.y, current_bounds.width, current_bounds.height, rd, isParameterLayout));

7
designer_form/src/com/fr/design/designer/creator/XChartEditor.java

@ -85,6 +85,13 @@ public class XChartEditor extends XBorderStyleWidgetCreator {
return new CRPropertyDescriptor[] { return new CRPropertyDescriptor[] {
new CRPropertyDescriptor("widgetName", this.data.getClass()).setI18NName(Inter new CRPropertyDescriptor("widgetName", this.data.getClass()).setI18NName(Inter
.getLocText("Form-Widget_Name")), .getLocText("Form-Widget_Name")),
new CRPropertyDescriptor("visible", this.data.getClass()).setI18NName(
Inter.getLocText("FR-Designer_Widget-Visible")).setPropertyChangeListener(new PropertyChangeAdapter() {
@Override
public void propertyChange() {
makeVisible(toData().isVisible());}
}),
new CRPropertyDescriptor("borderStyle", this.data.getClass()).setEditorClass( new CRPropertyDescriptor("borderStyle", this.data.getClass()).setEditorClass(
WLayoutBorderStyleEditor.class).setI18NName( WLayoutBorderStyleEditor.class).setI18NName(
Inter.getLocText("Chart-Style_Name")).putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced") Inter.getLocText("Chart-Style_Name")).putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced")

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

Loading…
Cancel
Save