Browse Source

Merging in latest from upstream (BA/design:refs/heads/dev)

* commit '79ade6642cb9e90f9ecfb010f11821abc05edf0a':
  无JIRA任务, 冲突修正
master
yaoh.wu 8 years ago
parent
commit
c0b8ac950d
  1. 1130
      designer_base/src/com/fr/design/beans/location/MoveUtils.java
  2. 19
      designer_base/src/com/fr/design/locale/designer.properties
  3. 18
      designer_base/src/com/fr/design/locale/designer_en_US.properties
  4. 17
      designer_base/src/com/fr/design/locale/designer_ja_JP.properties
  5. 17
      designer_base/src/com/fr/design/locale/designer_ko_KR.properties
  6. 20
      designer_base/src/com/fr/design/locale/designer_zh_CN.properties
  7. 22
      designer_base/src/com/fr/design/locale/designer_zh_TW.properties
  8. 71
      designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java
  9. 698
      designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java
  10. 2385
      designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java
  11. 330
      designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java

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

File diff suppressed because it is too large Load Diff

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

@ -91,7 +91,6 @@ FR-Designer_DS-Dictionary=
FR-Designer_Data-confusion= FR-Designer_Data-confusion=
FR-Designer_Data_Type= FR-Designer_Data_Type=
FR-Designer_Double_Click_Edit_OR_Clear= FR-Designer_Double_Click_Edit_OR_Clear=
FR-Designer_Edit_Button_ToolBar=
FR-Designer_Email= FR-Designer_Email=
FR-Designer_Enabled= FR-Designer_Enabled=
FR-Designer_End-Date= FR-Designer_End-Date=
@ -101,6 +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_Fit-App=
FR-Designer_Font-Family= FR-Designer_Font-Family=
FR-Designer_Font-Size= FR-Designer_Font-Size=
@ -162,7 +162,6 @@ FR-Designer_Refresh_Parameter_In_SQL=
FR-Designer_Reg_Expressions= FR-Designer_Reg_Expressions=
FR-Designer_Reg_Max_Length= FR-Designer_Reg_Max_Length=
FR-Designer_Reg_Min_Length= FR-Designer_Reg_Min_Length=
FR-Designer_Remove_Button_ToolBar=
FR-Designer_ReportColumns-Columns= FR-Designer_ReportColumns-Columns=
FR-Designer_Return-Date= FR-Designer_Return-Date=
FR-Designer_RichText= FR-Designer_RichText=
@ -543,14 +542,14 @@ FR-Designer_Left_Display=Left
FR-Designer_About_Version=Version FR-Designer_About_Version=Version
FR-Designer_About_CopyRight=Copy Right FR-Designer_About_CopyRight=Copy Right
FR-Designer_Service_Phone=Service Phone FR-Designer_Service_Phone=Service Phone
FR-Designer_Allow_Null=Allow Null FR-Designer_Allow_Null=Allow null
FR-Designer_PageSetup_Page=Page FR-Designer_PageSetup_Page=Page
FR-Designer_Custom_Job_Description=Description FR-Designer_Custom_Job_Description=Description
FR-Designer_Property=Property FR-Designer_Property=Property
FR-Designer_ClassName=Class Name FR-Designer_ClassName=Class Name
FR-Designer_Polyblock_Edit=Polyblock Edit 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_Function_Description_Area_Text=The class must inherit 'com.fr.script.AbstractFunction'. The compiled class should be copied to\nJ2EE server '{R1}' directory.\nAdd the source code(.java file) into the same folder if need.\nExample: {R2}}
FR-Designer_PageSetup_Horizontal=Horizontal FR-Designer_PageSetup_Horizontal=Horizontal
FR-Designer_PageSetup_Vertical=Vertical FR-Designer_PageSetup_Vertical=Vertical
FR-Designer_Gradient_Direction=Gradient Direction FR-Designer_Gradient_Direction=Gradient Direction
@ -564,6 +563,10 @@ FR-Designer_Show_As_Download=Display the binary content using download link
FR-Designer_File_Name_For_Download=File Name For Download FR-Designer_File_Name_For_Download=File Name For Download
FR-Designer_No=No FR-Designer_No=No
FR-Designer_Pagination=Page Break FR-Designer_Pagination=Page Break
FR-Designer-Move_Tab_First=move to first
FR-Designer-Move_Tab_End=move to end
FR-Designer-Move_Tab_Next=move to next
FR-Designer-Move_Tab_Prev=move to previous
FR-Designer_DS_TableData=Data Set FR-Designer_DS_TableData=Data Set
FR-Designer_Parameter-Formula=Formula 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_Plugin_Should_Update_Please_Contact_Developer=Plugin version is too low, and is not compatible with current API. Please contact the developer to update.
@ -584,10 +587,4 @@ FR-Designer_Mouse_Click_Tips=
FR-Designer-Move_Tab_First=move to first FR-Designer-Move_Tab_First=move to first
FR-Designer-Move_Tab_End=move to end FR-Designer-Move_Tab_End=move to end
FR-Designer-Move_Tab_Next=move to next FR-Designer-Move_Tab_Next=move to next
FR-Designer-Move_Tab_Prev=move to previous FR-Designer-Move_Tab_Prev=move to previous
FR-Designer_AxisReversed=Axis Reversed
FR-Designer_Logarithmic=Logarithmic
FR-Designer_Chart_Log_Base=Log Base
FR-Designer_Chart_F_Radar_Axis=Chart_F_Radar_Axis
FR-Designer_Too_Large_To_Paste=too large to paste
FR-Designer_Too_Small_To_Paste=Too small to paste

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

@ -91,7 +91,6 @@ FR-Designer_DS-Dictionary=Data Dictionary
FR-Designer_Data-confusion=Data Confusion FR-Designer_Data-confusion=Data Confusion
FR-Designer_Data_Type=Data type FR-Designer_Data_Type=Data type
FR-Designer_Double_Click_Edit_OR_Clear=Double Click to Edit or Clear FR-Designer_Double_Click_Edit_OR_Clear=Double Click to Edit or Clear
FR-Designer_Edit_Button_ToolBar=Edit Button ToolBar
FR-Designer_Email=Mail FR-Designer_Email=Mail
FR-Designer_Enabled=Enabled FR-Designer_Enabled=Enabled
FR-Designer_End-Date=End Date FR-Designer_End-Date=End Date
@ -164,7 +163,6 @@ FR-Designer_Refresh_Parameter_In_SQL=Whether to refresh parameters in the SQL
FR-Designer_Reg_Expressions=Regular expressions FR-Designer_Reg_Expressions=Regular expressions
FR-Designer_Reg_Max_Length=max length FR-Designer_Reg_Max_Length=max length
FR-Designer_Reg_Min_Length=min length FR-Designer_Reg_Min_Length=min length
FR-Designer_Remove_Button_ToolBar=Remove Button ToolBar
FR-Designer_ReportColumns-Columns=Multi-columns/lines FR-Designer_ReportColumns-Columns=Multi-columns/lines
FR-Designer_Return-Date=Return Date FR-Designer_Return-Date=Return Date
FR-Designer_RichText=Insert Rich Text FR-Designer_RichText=Insert Rich Text
@ -544,14 +542,14 @@ FR-Designer_Left_Display=Left
FR-Designer_About_Version=Version FR-Designer_About_Version=Version
FR-Designer_About_CopyRight=Copy Right FR-Designer_About_CopyRight=Copy Right
FR-Designer_Service_Phone=Service Phone FR-Designer_Service_Phone=Service Phone
FR-Designer_Allow_Null=Allow Null FR-Designer_Allow_Null=Allow null
FR-Designer_PageSetup_Page=Page FR-Designer_PageSetup_Page=Page
FR-Designer_Custom_Job_Description=Description FR-Designer_Custom_Job_Description=Description
FR-Designer_Property=Property FR-Designer_Property=Property
FR-Designer_ClassName=Class Name FR-Designer_ClassName=Class Name
FR-Designer_Polyblock_Edit=Aggregation block edition 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_Function_Description_Area_Text=The class must inherit 'com.fr.script.AbstractFunction'. The compiled class should be copied to\nJ2EE server '{R1}' directory.\nAdd the source code(.java file) into the same folder if need.\nExample: {R2}}
FR-Designer_PageSetup_Horizontal=Horizontal FR-Designer_PageSetup_Horizontal=Horizontal
FR-Designer_PageSetup_Vertical=Vertical FR-Designer_PageSetup_Vertical=Vertical
FR-Designer_Gradient_Direction=Gradient Direction FR-Designer_Gradient_Direction=Gradient Direction
@ -565,6 +563,10 @@ FR-Designer_Show_As_Download=Display the binary content using download link
FR-Designer_File_Name_For_Download=File Name For Download FR-Designer_File_Name_For_Download=File Name For Download
FR-Designer_No=No FR-Designer_No=No
FR-Designer_Pagination=Page Break FR-Designer_Pagination=Page Break
FR-Designer-Move_Tab_First=move to first
FR-Designer-Move_Tab_End=move to end
FR-Designer-Move_Tab_Next=move to next
FR-Designer-Move_Tab_Prev=move to previous
FR-Designer_DS_TableData=Data Set FR-Designer_DS_TableData=Data Set
FR-Designer_Parameter-Formula=Formula 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_Plugin_Should_Update_Please_Contact_Developer=Plugin version is too low, and is not compatible with current API. Please contact the developer to update.
@ -585,10 +587,4 @@ FR-Designer_Mouse_Click_Tips=The background of the mouse to click the button, in
FR-Designer-Move_Tab_First=move to first FR-Designer-Move_Tab_First=move to first
FR-Designer-Move_Tab_End=move to end FR-Designer-Move_Tab_End=move to end
FR-Designer-Move_Tab_Next=move to next FR-Designer-Move_Tab_Next=move to next
FR-Designer-Move_Tab_Prev=move to previous FR-Designer-Move_Tab_Prev=move to previous
FR-Designer_AxisReversed=Axis in reverse order
FR-Designer_Logarithmic=Log scale
FR-Designer_Chart_Log_Base=Log Base
FR-Designer_Chart_F_Radar_Axis=Value Axis
FR-Designer_Too_Large_To_Paste=Too large to paste!
FR-Designer_Too_Small_To_Paste=Too small to paste!

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

@ -91,7 +91,6 @@ FR-Designer_DS-Dictionary=\u30C7\u30FC\u30BF\u5B57\u5178
FR-Designer_Data-confusion=\u30C7\u30FC\u30BF\u6DF7\u4EA4 FR-Designer_Data-confusion=\u30C7\u30FC\u30BF\u6DF7\u4EA4
FR-Designer_Data_Type=\u30C7\u30FC\u30BF\u30BF\u30A4\u30D7 FR-Designer_Data_Type=\u30C7\u30FC\u30BF\u30BF\u30A4\u30D7
FR-Designer_Double_Click_Edit_OR_Clear=\u30C0\u30D6\u30EB\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u7DE8\u96C6\u307E\u305F\u306F\u30AF\u30EA\u30A2\u3059\u308B FR-Designer_Double_Click_Edit_OR_Clear=\u30C0\u30D6\u30EB\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u7DE8\u96C6\u307E\u305F\u306F\u30AF\u30EA\u30A2\u3059\u308B
FR-Designer_Edit_Button_ToolBar=\u30DC\u30BF\u30F3\u306B\u3042\u308B\u30C4\u30FC\u30EB\u6B04\u7DE8\u96C6
FR-Designer_Email=\u30E1\u30FC\u30EB FR-Designer_Email=\u30E1\u30FC\u30EB
FR-Designer_Enabled=\u4F7F\u7528\u53EF\u80FD FR-Designer_Enabled=\u4F7F\u7528\u53EF\u80FD
FR-Designer_End-Date=\u7D42\u4E86\u65E5\u671F FR-Designer_End-Date=\u7D42\u4E86\u65E5\u671F
@ -163,7 +162,6 @@ FR-Designer_Refresh_Parameter_In_SQL=SQL\u4E2D\u306E\u30D1\u30E9\u30E1\u30FC\u30
FR-Designer_Reg_Expressions=\u6B63\u5247\u8868\u73FE\u5F0F FR-Designer_Reg_Expressions=\u6B63\u5247\u8868\u73FE\u5F0F
FR-Designer_Reg_Max_Length=\u6700\u5927\u9577\u3055 FR-Designer_Reg_Max_Length=\u6700\u5927\u9577\u3055
FR-Designer_Reg_Min_Length=\u6700\u5C0F\u9577\u3055 FR-Designer_Reg_Min_Length=\u6700\u5C0F\u9577\u3055
FR-Designer_Remove_Button_ToolBar=\u30DC\u30BF\u30F3\u304C\u3042\u308B\u30C4\u30FC\u30EB\u30D0\u30FC\u3092\u30EA\u30E0\u30FC\u30D6
FR-Designer_ReportColumns-Columns=\u6BB5\u7D44\u307F FR-Designer_ReportColumns-Columns=\u6BB5\u7D44\u307F
FR-Designer_Return-Date=\u65E5\u671F\u306B\u623B\u308B FR-Designer_Return-Date=\u65E5\u671F\u306B\u623B\u308B
FR-Designer_RichText=\u30EA\u30C3\u30C1\u6587\u66F8\u633F\u5165 FR-Designer_RichText=\u30EA\u30C3\u30C1\u6587\u66F8\u633F\u5165
@ -525,7 +523,7 @@ FR-Designer_Property=\u5C5E\u6027
FR-Designer_ClassName=\u985E\u540D 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_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_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}" \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{R2}
FR-Designer_PageSetup_Horizontal=\u6A2A\u65B9\u5411 FR-Designer_PageSetup_Horizontal=\u6A2A\u65B9\u5411
FR-Designer_PageSetup_Vertical=\u7E26\u65B9\u5411 FR-Designer_PageSetup_Vertical=\u7E26\u65B9\u5411
FR-Designer_Gradient_Direction=\u65B9\u5411\u3092\u5F90\u3005\u306B\u5909\u5316 FR-Designer_Gradient_Direction=\u65B9\u5411\u3092\u5F90\u3005\u306B\u5909\u5316
@ -539,6 +537,10 @@ FR-Designer_Show_As_Download=\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u30EA\u30F3\u3
FR-Designer_File_Name_For_Download=\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u30D5\u30A1\u30A4\u30EB\u540D 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_No=\u3044\u3044\u3048
FR-Designer_Pagination=\u30DA\u30FC\u30B8\u30F3\u30B0 FR-Designer_Pagination=\u30DA\u30FC\u30B8\u30F3\u30B0
FR-Designer-Move_Tab_First=
FR-Designer-Move_Tab_End=
FR-Designer-Move_Tab_Next=
FR-Designer-Move_Tab_Prev=
FR-Designer_DS_TableData=\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9 FR-Designer_DS_TableData=\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9
FR-Designer_Parameter-Formula=\u6570\u5F0F FR-Designer_Parameter-Formula=\u6570\u5F0F
FR-Designer_Background_Null= FR-Designer_Background_Null=
@ -552,11 +554,4 @@ FR-Designer_Background_Image_Select=
FR-Designer_Initial_Background_Tips= FR-Designer_Initial_Background_Tips=
FR-Designer_Mouse_Move_Tips= FR-Designer_Mouse_Move_Tips=
FR-Designer_Mouse_Click_Tips= FR-Designer_Mouse_Click_Tips=
FR-Designer-Move_Tab_First= FR-Designer_Plugin_Should_Update_Please_Contact_Developer=
FR-Designer-Move_Tab_End=
FR-Designer-Move_Tab_Next=
FR-Designer-Move_Tab_Prev=
FR-Designer_AxisReversed=\u8EF8\u9006\u914D\u5217
FR-Designer_Logarithmic=\u5BFE\u6570\u76EE\u76DB\u308A
FR-Designer_Chart_Log_Base=\u5E95\u6570
FR-Designer_Chart_F_Radar_Axis=\u5782\u76F4\u8EF8

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

@ -91,7 +91,6 @@ FR-Designer_DS-Dictionary=\uB370\uC774\uD130\uC0AC\uC804
FR-Designer_Data-confusion=\uB370\uC774\uD130\uD63C\uD569 FR-Designer_Data-confusion=\uB370\uC774\uD130\uD63C\uD569
FR-Designer_Data_Type=\uB370\uC774\uD130\uC720\uD615 FR-Designer_Data_Type=\uB370\uC774\uD130\uC720\uD615
FR-Designer_Double_Click_Edit_OR_Clear=\uB354\uBE14\uD074\uB9AD\uD558\uC5EC\uD3B8\uC9D1\uB610\uB294\uD074\uB9AC\uC5B4\uC2E4\uD589 FR-Designer_Double_Click_Edit_OR_Clear=\uB354\uBE14\uD074\uB9AD\uD558\uC5EC\uD3B8\uC9D1\uB610\uB294\uD074\uB9AC\uC5B4\uC2E4\uD589
FR-Designer_Edit_Button_ToolBar=\uD0A4\uAC00\uC788\uB294\uD234\uBC14\uD3B8\uC9D1
FR-Designer_Email=\uBA54\uC77C FR-Designer_Email=\uBA54\uC77C
FR-Designer_Enabled=\uC0AC\uC6A9\uAC00\uB2A5 FR-Designer_Enabled=\uC0AC\uC6A9\uAC00\uB2A5
FR-Designer_End-Date=\uC885\uB8CC\uB0A0\uC9DC FR-Designer_End-Date=\uC885\uB8CC\uB0A0\uC9DC
@ -163,7 +162,6 @@ FR-Designer_Refresh_Parameter_In_SQL=SQL\uC758\uB9E4\uAC1C\uBCC0\uC218\uB97C\uC0
FR-Designer_Reg_Expressions=\uC815\uADDC\uD45C\uD604\uC2DD FR-Designer_Reg_Expressions=\uC815\uADDC\uD45C\uD604\uC2DD
FR-Designer_Reg_Max_Length=\uCD5C\uB300\uAE38\uC774 FR-Designer_Reg_Max_Length=\uCD5C\uB300\uAE38\uC774
FR-Designer_Reg_Min_Length=\uCD5C\uC18C\uAE38\uC774 FR-Designer_Reg_Min_Length=\uCD5C\uC18C\uAE38\uC774
FR-Designer_Remove_Button_ToolBar=\uD0A4\uAC00\uC788\uB294\uD234\uBC14\uC81C\uAC70
FR-Designer_ReportColumns-Columns=\uC140\uB098\uB204\uAE30 FR-Designer_ReportColumns-Columns=\uC140\uB098\uB204\uAE30
FR-Designer_Return-Date=\uB0A0\uC9DC\uB3CC\uC544\uAC00\uAE30 FR-Designer_Return-Date=\uB0A0\uC9DC\uB3CC\uC544\uAC00\uAE30
FR-Designer_RichText=\uB9AC\uCE58\uD14D\uC2A4\uD2B8\uBC15\uC2A4\uC0BD\uC785 FR-Designer_RichText=\uB9AC\uCE58\uD14D\uC2A4\uD2B8\uBC15\uC2A4\uC0BD\uC785
@ -522,7 +520,7 @@ FR-Designer_ClassName=\uD074\uB798\uC2A4\uB124\uC784
FR-Designer_Template_Web_Attributes=\uD15C\uD50C\uB9BF \uC6F9 \uC18D\uC131 FR-Designer_Template_Web_Attributes=\uD15C\uD50C\uB9BF \uC6F9 \uC18D\uC131
FR-Designer_Polyblock_Edit=\uCDE8\uD569\uBE14\uB7ED\uD3B8\uC9D1 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_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}" \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: {R2}
FR-Designer_PageSetup_Horizontal=\uAC00\uB85C FR-Designer_PageSetup_Horizontal=\uAC00\uB85C
FR-Designer_PageSetup_Vertical=\uC138\uB85C FR-Designer_PageSetup_Vertical=\uC138\uB85C
FR-Designer_Gradient_Direction=\uADF8\uB77C\uB370\uC774\uC158 \uBC29\uD5A5 FR-Designer_Gradient_Direction=\uADF8\uB77C\uB370\uC774\uC158 \uBC29\uD5A5
@ -536,6 +534,10 @@ FR-Designer_Show_As_Download=\uB2E4\uC6B4\uB85C\uB4DC\uB9C1\uD06C\uB85C2\uC9C4\u
FR-Designer_File_Name_For_Download=\uB2E4\uC6B4\uB85C\uB4DC\uD30C\uC77C\uBA85 FR-Designer_File_Name_For_Download=\uB2E4\uC6B4\uB85C\uB4DC\uD30C\uC77C\uBA85
FR-Designer_No=\uC544\uB2C8\uC624 FR-Designer_No=\uC544\uB2C8\uC624
FR-Designer_Pagination=\uD398\uC774\uC9C0\uB098\uB204\uAE30 FR-Designer_Pagination=\uD398\uC774\uC9C0\uB098\uB204\uAE30
FR-Designer-Move_Tab_First=
FR-Designer-Move_Tab_End=
FR-Designer-Move_Tab_Next=
FR-Designer-Move_Tab_Prev=
FR-Designer_DS_TableData=\uB370\uC774\uD130\uC138\uD2B8 FR-Designer_DS_TableData=\uB370\uC774\uD130\uC138\uD2B8
FR-Designer_Parameter-Formula=\uC218\uC2DD FR-Designer_Parameter-Formula=\uC218\uC2DD
FR-Designer_Background_Null= FR-Designer_Background_Null=
@ -549,11 +551,4 @@ FR-Designer_Background_Image_Select=
FR-Designer_Initial_Background_Tips= FR-Designer_Initial_Background_Tips=
FR-Designer_Mouse_Move_Tips= FR-Designer_Mouse_Move_Tips=
FR-Designer_Mouse_Click_Tips= FR-Designer_Mouse_Click_Tips=
FR-Designer-Move_Tab_First= FR-Designer_Plugin_Should_Update_Please_Contact_Developer=
FR-Designer-Move_Tab_End=
FR-Designer-Move_Tab_Next=
FR-Designer-Move_Tab_Prev=
FR-Designer_AxisReversed=\uCD95\uC5ED\uC21C
FR-Designer_Logarithmic=\uB85C\uADF8\uB208\uAE08
FR-Designer_Chart_Log_Base=\uAE30\uC218
FR-Designer_Chart_F_Radar_Axis=\uAC12\uCD95

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

@ -91,7 +91,6 @@ FR-Designer_DS-Dictionary=\u6570\u636E\u5B57\u5178
FR-Designer_Data-confusion=\u6570\u636E\u6DF7\u6DC6 FR-Designer_Data-confusion=\u6570\u636E\u6DF7\u6DC6
FR-Designer_Data_Type=\u6570\u636E\u7C7B\u578B FR-Designer_Data_Type=\u6570\u636E\u7C7B\u578B
FR-Designer_Double_Click_Edit_OR_Clear=\u53CC\u51FB\u8FDB\u884C\u7F16\u8F91\u6216\u6E05\u9664 FR-Designer_Double_Click_Edit_OR_Clear=\u53CC\u51FB\u8FDB\u884C\u7F16\u8F91\u6216\u6E05\u9664
FR-Designer_Edit_Button_ToolBar=\u7F16\u8F91\u6309\u94AE\u6240\u5728\u5DE5\u5177\u680F
FR-Designer_Email=\u90AE\u4EF6 FR-Designer_Email=\u90AE\u4EF6
FR-Designer_Enabled=\u53EF\u7528 FR-Designer_Enabled=\u53EF\u7528
FR-Designer_End-Date=\u7ED3\u675F\u65E5\u671F FR-Designer_End-Date=\u7ED3\u675F\u65E5\u671F
@ -164,7 +163,6 @@ FR-Designer_Refresh_Parameter_In_SQL=\u662F\u5426\u5237\u65B0SQL\u4E2D\u7684\u53
FR-Designer_Reg_Expressions=\u6B63\u5219\u8868\u8FBE\u5F0F FR-Designer_Reg_Expressions=\u6B63\u5219\u8868\u8FBE\u5F0F
FR-Designer_Reg_Max_Length=\u6700\u5927\u957F\u5EA6 FR-Designer_Reg_Max_Length=\u6700\u5927\u957F\u5EA6
FR-Designer_Reg_Min_Length=\u6700\u5C0F\u957F\u5EA6 FR-Designer_Reg_Min_Length=\u6700\u5C0F\u957F\u5EA6
FR-Designer_Remove_Button_ToolBar=\u79FB\u9664\u6309\u94AE\u6240\u5728\u5DE5\u5177\u680F
FR-Designer_ReportColumns-Columns=\u5206\u680F FR-Designer_ReportColumns-Columns=\u5206\u680F
FR-Designer_Return-Date=\u8FD4\u56DE\u65E5\u671F FR-Designer_Return-Date=\u8FD4\u56DE\u65E5\u671F
FR-Designer_RichText=\u63D2\u5165\u5BCC\u6587\u672C FR-Designer_RichText=\u63D2\u5165\u5BCC\u6587\u672C
@ -555,7 +553,7 @@ FR-Designer_Property=\u5C5E\u6027
FR-Designer_ClassName=\u7C7B\u540D FR-Designer_ClassName=\u7C7B\u540D
FR-Designer_Polyblock_Edit=\u805A\u5408\u5757\u7F16\u8F91 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_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}" \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{R2}
FR-Designer_PageSetup_Horizontal=\u6A2A\u5411 FR-Designer_PageSetup_Horizontal=\u6A2A\u5411
FR-Designer_PageSetup_Vertical=\u7EB5\u5411 FR-Designer_PageSetup_Vertical=\u7EB5\u5411
FR-Designer_Gradient_Direction=\u6E10\u53D8\u65B9\u5411 FR-Designer_Gradient_Direction=\u6E10\u53D8\u65B9\u5411
@ -569,12 +567,16 @@ FR-Designer_Show_As_Download=\u7528\u4E0B\u8F7D\u94FE\u63A5\u663E\u793A\u4E8C\u8
FR-Designer_File_Name_For_Download=\u4E0B\u8F7D\u6587\u4EF6\u540D FR-Designer_File_Name_For_Download=\u4E0B\u8F7D\u6587\u4EF6\u540D
FR-Designer_No=\u5426 FR-Designer_No=\u5426
FR-Designer_Pagination=\u5206\u9875 FR-Designer_Pagination=\u5206\u9875
FR-Designer-Move_Tab_First=\u79FB\u52A8\u5230\u9996\u4F4D
FR-Designer-Move_Tab_End=\u79FB\u52A8\u5230\u672B\u5C3E
FR-Designer-Move_Tab_Next=\u5F80\u540E\u79FB\u52A8
FR-Designer-Move_Tab_Prev=\u5F80\u524D\u79FB\u52A8
FR-Designer_DS_TableData=\u6570\u636E\u96C6 FR-Designer_DS_TableData=\u6570\u636E\u96C6
FR-Designer_Parameter-Formula=\u516C\u5F0F 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_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_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_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 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
FR-Designer_Background_Null=\u6CA1\u6709\u80CC\u666F FR-Designer_Background_Null=\u6CA1\u6709\u80CC\u666F
FR-Designer_Background_Color=\u989C\u8272 FR-Designer_Background_Color=\u989C\u8272
FR-Designer_Background_Texture=\u7EB9\u7406 FR-Designer_Background_Texture=\u7EB9\u7406
@ -586,13 +588,3 @@ FR-Designer_Background_Image_Select=\u9009\u62E9\u56FE\u7247
FR-Designer_Initial_Background_Tips=\u6309\u94AE\u7684\u521D\u59CB\u80CC\u666F FR-Designer_Initial_Background_Tips=\u6309\u94AE\u7684\u521D\u59CB\u80CC\u666F
FR-Designer_Mouse_Move_Tips=\u9F20\u6807\u79FB\u52A8\u5230\u6309\u94AE\u4E0A\u7684\u80CC\u666F\uFF0C\u82E5\u65E0\u5219\u4E0D\u6539\u53D8\u80CC\u666F FR-Designer_Mouse_Move_Tips=\u9F20\u6807\u79FB\u52A8\u5230\u6309\u94AE\u4E0A\u7684\u80CC\u666F\uFF0C\u82E5\u65E0\u5219\u4E0D\u6539\u53D8\u80CC\u666F
FR-Designer_Mouse_Click_Tips=\u9F20\u6807\u70B9\u51FB\u6309\u94AE\u65F6\u80CC\u666F\uFF0C\u82E5\u65E0\u5219\u4E0D\u6539\u53D8\u80CC\u666F FR-Designer_Mouse_Click_Tips=\u9F20\u6807\u70B9\u51FB\u6309\u94AE\u65F6\u80CC\u666F\uFF0C\u82E5\u65E0\u5219\u4E0D\u6539\u53D8\u80CC\u666F
FR-Designer-Move_Tab_First=\u79FB\u52A8\u5230\u9996\u4F4D
FR-Designer-Move_Tab_End=\u79FB\u52A8\u5230\u672B\u5C3E
FR-Designer-Move_Tab_Next=\u5F80\u540E\u79FB\u52A8
FR-Designer-Move_Tab_Prev=\u5F80\u524D\u79FB\u52A8
FR-Designer_AxisReversed=\u8F74\u9006\u5E8F
FR-Designer_Logarithmic=\u5BF9\u6570\u523B\u5EA6
FR-Designer_Chart_Log_Base=\u5E95\u6570
FR-Designer_Chart_F_Radar_Axis=\u503C\u8F74
FR-Designer_Too_Large_To_Paste=\u7EC4\u4EF6\u5927\u5C0F\u8D85\u51FA\u8FB9\u754C\uFF0C\u65E0\u6CD5\u7C98\u8D34\uFF01
FR-Designer_Too_Small_To_Paste=\u6B64\u5904\u65E0\u6CD5\u7C98\u8D34\uFF0C\u5C0F\u4E8E\u7EC4\u4EF6\u6700\u5C0F\u9AD8\u5EA6\uFF01

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

@ -91,7 +91,6 @@ FR-Designer_DS-Dictionary=\u8CC7\u6599\u5B57\u5178
FR-Designer_Data-confusion=\u8CC7\u6599\u6DF7\u6DC6 FR-Designer_Data-confusion=\u8CC7\u6599\u6DF7\u6DC6
FR-Designer_Data_Type=\u8CC7\u6599\u985E\u578B FR-Designer_Data_Type=\u8CC7\u6599\u985E\u578B
FR-Designer_Double_Click_Edit_OR_Clear=\u96D9\u64CA\u9032\u884C\u7DE8\u8F2F\u6216\u6E05\u9664 FR-Designer_Double_Click_Edit_OR_Clear=\u96D9\u64CA\u9032\u884C\u7DE8\u8F2F\u6216\u6E05\u9664
FR-Designer_Edit_Button_ToolBar=\u7DE8\u8F2F\u6309\u9215\u6240\u5728\u5DE5\u5177\u6B04
FR-Designer_Email=\u90F5\u4EF6 FR-Designer_Email=\u90F5\u4EF6
FR-Designer_Enabled=\u53EF\u7528 FR-Designer_Enabled=\u53EF\u7528
FR-Designer_End-Date=\u7D50\u675F\u65E5\u671F FR-Designer_End-Date=\u7D50\u675F\u65E5\u671F
@ -163,7 +162,6 @@ FR-Designer_Refresh_Parameter_In_SQL=\u5728SQL\u4E2D\u91CD\u65B0\u6574\u7406\u76
FR-Designer_Reg_Expressions=\u6B63\u5247\u8868\u9054\u5F0F FR-Designer_Reg_Expressions=\u6B63\u5247\u8868\u9054\u5F0F
FR-Designer_Reg_Max_Length=\u6700\u5927\u9577\u5EA6 FR-Designer_Reg_Max_Length=\u6700\u5927\u9577\u5EA6
FR-Designer_Reg_Min_Length=\u6700\u5C0F\u9577\u5EA6 FR-Designer_Reg_Min_Length=\u6700\u5C0F\u9577\u5EA6
FR-Designer_Remove_Button_ToolBar=\u79FB\u9664\u6309\u9215\u6240\u5728\u5DE5\u5177\u6B04
FR-Designer_ReportColumns-Columns=\u5831\u8868\u6B04\u4F4D FR-Designer_ReportColumns-Columns=\u5831\u8868\u6B04\u4F4D
FR-Designer_Return-Date=\u8FD4\u56DE\u65E5\u671F FR-Designer_Return-Date=\u8FD4\u56DE\u65E5\u671F
FR-Designer_RichText= RTF FR-Designer_RichText= RTF
@ -543,7 +541,7 @@ FR-Designer_Property=\u5C6C\u6027
FR-Designer_ClassName=\u985E\u540D FR-Designer_ClassName=\u985E\u540D
FR-Designer_Polyblock_Edit=\u805A\u5408\u584A\u7DE8\u8F2F 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_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}" \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{R2}
FR-Designer_PageSetup_Horizontal=\u6A2A\u5411 FR-Designer_PageSetup_Horizontal=\u6A2A\u5411
FR-Designer_PageSetup_Vertical=\u7E31\u5411 FR-Designer_PageSetup_Vertical=\u7E31\u5411
FR-Designer_Gradient_Direction=\u6F38\u8B8A\u65B9\u5411 FR-Designer_Gradient_Direction=\u6F38\u8B8A\u65B9\u5411
@ -557,9 +555,13 @@ FR-Designer_Show_As_Download=\u7528\u4E0B\u8F09\u93C8\u63A5\u986F\u793A\u4E8C\u9
FR-Designer_File_Name_For_Download=\u4E0B\u8F09\u6A94\u6848\u540D FR-Designer_File_Name_For_Download=\u4E0B\u8F09\u6A94\u6848\u540D
FR-Designer_No=\u5426 FR-Designer_No=\u5426
FR-Designer_Pagination=\u5206\u9801 FR-Designer_Pagination=\u5206\u9801
FR-Designer-Move_Tab_First=\u79FB\u52D5\u5230\u9996\u4F4D
FR-Designer-Move_Tab_End=\u79FB\u52D5\u5230\u672B\u5C3E
FR-Designer-Move_Tab_Next=\u5F80\u5F8C\u79FB\u52D5
FR-Designer-Move_Tab_Prev=\u5F80\u524D\u79FB\u52D5
FR-Designer_DS_TableData=\u8CC7\u6599\u96C6 FR-Designer_DS_TableData=\u8CC7\u6599\u96C6
FR-Designer_Parameter-Formula=\u516C\u5F0F 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_Plugin_Should_Update_Please_Contact_Developer=\u633F\u4EF6\u7248\u672C\u904E\u4F4E\uFF0C\u5B58\u5728API\u4E0D\u76F8\u5BB9\uFF0C\u8ACB\u806F\u7CFB\u958B\u767C\u8005\u965E\u7D1A\u633F\u4EF6
FR-Designer_WidgetOrder=\u63A7\u4EF6\u9806\u5E8F FR-Designer_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_Form_Analysis_Annotation=\u6CE8\u91CB\uFF1A\u53EF\u4EE5\u901A\u904E\u8A72\u5C6C\u6027\u63A7\u5236\u8868\u55AE\u5728APP\u4E2D\u7684\u89E3\u6790\u65B9\u5F0F\u3002
FR-Designer_Mobile_Report_Analysis_Annotation=\u6CE8\u91CB\uFF1A\u53EF\u4EE5\u901A\u904E\u8A72\u5C6C\u6027\u63A7\u5236\u5831\u8868\u5728APP\u4E2D\u7684\u89E3\u6790\u65B9\u5F0F\uFF0C\u53EA\u652F\u6301\u5206\u9801\u9810\u89BD\uFF0C\u586B\u5831\u9810\u89BD\u6642\u5C6C\u6027\u7121\u6548\u3002 FR-Designer_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
@ -573,14 +575,4 @@ FR-Designer_Background_Clear=
FR-Designer_Background_Image_Select= FR-Designer_Background_Image_Select=
FR-Designer_Initial_Background_Tips= FR-Designer_Initial_Background_Tips=
FR-Designer_Mouse_Move_Tips= FR-Designer_Mouse_Move_Tips=
FR-Designer_Mouse_Click_Tips= FR-Designer_Mouse_Click_Tips=
FR-Designer-Move_Tab_First=\u79FB\u52D5\u5230\u9996\u4F4D
FR-Designer-Move_Tab_End=\u79FB\u52D5\u5230\u672B\u5C3E
FR-Designer-Move_Tab_Next=\u5F80\u5F8C\u79FB\u52D5
FR-Designer-Move_Tab_Prev=\u5F80\u524D\u79FB\u52D5
FR-Designer_AxisReversed=\u8EF8\u9006\u5E8F
FR-Designer_Logarithmic=\u5C0D\u6578\u523B\u5EA6
FR-Designer_Chart_Log_Base=\u5E95\u6578
FR-Designer_Chart_F_Radar_Axis=\u503C\u8EF8
FR-Designer_Too_Large_To_Paste=\u7D44\u4EF6\u5927\u5C0F\u8D85\u51FA\u908A\u754C\uFF0C\u7121\u6CD5\u7C98\u8CBC\uFF01
FR-Designer_Too_Small_To_Paste=\u6B64\u8655\u7121\u6CD5\u7C98\u8CBC\uFF0C\u5C0F\u65BC\u7D44\u4EF6\u6700\u5C0F\u9AD8\u5EA6\uFF01

71
designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java

@ -30,8 +30,7 @@ public class MinMaxValuePane extends JPanel {
protected UICheckBox isCustomSecUnitBox; protected UICheckBox isCustomSecUnitBox;
protected UITextField secUnitField; protected UITextField secUnitField;
public MinMaxValuePane() {
public MinMaxValuePane() {
minCheckBox = new UICheckBox(Inter.getLocText(new String[]{"Custom", "Min_Value"})); minCheckBox = new UICheckBox(Inter.getLocText(new String[]{"Custom", "Min_Value"}));
minValueField = new UITextField(6); minValueField = new UITextField(6);
maxCheckBox = new UICheckBox(Inter.getLocText(new String[]{"Custom", "Max_Value"})); maxCheckBox = new UICheckBox(Inter.getLocText(new String[]{"Custom", "Max_Value"}));
@ -40,45 +39,37 @@ public class MinMaxValuePane extends JPanel {
mainUnitField = new UITextField(6); mainUnitField = new UITextField(6);
isCustomSecUnitBox = new UICheckBox(Inter.getLocText("FR-Chart_SecondGraduationUnit")); isCustomSecUnitBox = new UICheckBox(Inter.getLocText("FR-Chart_SecondGraduationUnit"));
secUnitField = new UITextField(6); secUnitField = new UITextField(6);
double p = TableLayout.PREFERRED;
double p = TableLayout.PREFERRED; double f = TableLayout.FILL;
double f = TableLayout.FILL; double[] columnSize = { p, f };
double[] columnSize = {p, f}; double[] rowSize = { p, p, p, p};
Component[][] components = getPanelComponents(); Component[][] components = getPanelComponents();
JPanel panel = TableLayoutHelper.createTableLayoutPane(components, getRowSize(p), columnSize); JPanel panel = TableLayoutHelper.createTableLayoutPane(components ,rowSize,columnSize);
this.setLayout(new BorderLayout()); this.setLayout(new BorderLayout());
this.add(panel, BorderLayout.CENTER); this.add(panel,BorderLayout.CENTER);
addComponentListener(components);
} for(int i = 0; i < components.length; i++) {
((UICheckBox)components[i][0]).addActionListener(new ActionListener() {
protected double[] getRowSize(double p) {
return new double[]{p, p, p, p}; @Override
} public void actionPerformed(ActionEvent e) {
checkBoxUse();
public void addComponentListener(Component[][] components) { }
for (int i = 0; i < components.length; i++) { });
((UICheckBox) components[i][0]).addActionListener(new ActionListener() { ChartSwingUtils.addListener((UICheckBox)components[i][0], (UITextField)components[i][1]);
}
@Override }
public void actionPerformed(ActionEvent e) { protected Component[][] getPanelComponents() {
checkBoxUse(); return new Component[][]{
}
});
ChartSwingUtils.addListener((UICheckBox) components[i][0], (UITextField) components[i][1]);
}
}
protected Component[][] getPanelComponents() {
return new Component[][]{
new Component[]{minCheckBox, minValueField}, new Component[]{minCheckBox, minValueField},
new Component[]{maxCheckBox, maxValueField}, new Component[]{maxCheckBox, maxValueField},
new Component[]{isCustomMainUnitBox, mainUnitField}, new Component[]{isCustomMainUnitBox, mainUnitField},
new Component[]{isCustomSecUnitBox, secUnitField}, new Component[]{isCustomSecUnitBox, secUnitField},
}; };
} }
protected void checkBoxUse() { private void checkBoxUse() {
minValueField.setEnabled(minCheckBox.isSelected()); minValueField.setEnabled(minCheckBox.isSelected());
maxValueField.setEnabled(maxCheckBox.isSelected()); maxValueField.setEnabled(maxCheckBox.isSelected());
@ -109,7 +100,7 @@ public class MinMaxValuePane extends JPanel {
if(axis.getMinValue() != null) { if(axis.getMinValue() != null) {
minValueField.setText(axis.getMinValue().toString()); minValueField.setText(axis.getMinValue().toString());
} }
} }
// 最大值 // 最大值
if (axis.isCustomMaxValue()) { if (axis.isCustomMaxValue()) {
@ -117,7 +108,7 @@ public class MinMaxValuePane extends JPanel {
if(axis.getMaxValue() != null) { if(axis.getMaxValue() != null) {
maxValueField.setText(axis.getMaxValue().toString()); maxValueField.setText(axis.getMaxValue().toString());
} }
} }
// 主次刻度单位 // 主次刻度单位
if (axis.isCustomMainUnit()) { if (axis.isCustomMainUnit()) {
@ -125,7 +116,7 @@ public class MinMaxValuePane extends JPanel {
if(axis.getMainUnit() != null) { if(axis.getMainUnit() != null) {
mainUnitField.setText(axis.getMainUnit().toString()); mainUnitField.setText(axis.getMainUnit().toString());
} }
} }
if(axis.isCustomSecUnit()) { if(axis.isCustomSecUnit()) {
isCustomSecUnitBox.setSelected(true); isCustomSecUnitBox.setSelected(true);
@ -158,7 +149,7 @@ public class MinMaxValuePane extends JPanel {
updateUnit(axis); updateUnit(axis);
} }
protected void updateUnit(Axis axis) { private void updateUnit(Axis axis) {
// 主要刻度 // 主要刻度
if (isCustomMainUnitBox.isSelected()){ if (isCustomMainUnitBox.isSelected()){
String increment = mainUnitField.getText(); String increment = mainUnitField.getText();

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

@ -1,346 +1,354 @@
package com.fr.design.designer.beans.adapters.layout; package com.fr.design.designer.beans.adapters.layout;
import com.fr.design.beans.GroupModel; import java.awt.*;
import com.fr.design.designer.beans.ConstraintsGroupModel;
import com.fr.design.designer.beans.HoverPainter; import com.fr.design.beans.GroupModel;
import com.fr.design.designer.beans.painters.FRAbsoluteLayoutPainter; import com.fr.design.designer.beans.ConstraintsGroupModel;
import com.fr.design.designer.creator.*; import com.fr.design.designer.beans.HoverPainter;
import com.fr.design.designer.properties.BoundsGroupModel; import com.fr.design.designer.beans.painters.FRAbsoluteLayoutPainter;
import com.fr.design.designer.properties.FRAbsoluteLayoutPropertiesGroupModel; import com.fr.design.designer.creator.*;
import com.fr.design.utils.ComponentUtils; import com.fr.design.designer.properties.BoundsGroupModel;
import com.fr.design.utils.gui.LayoutUtils; import com.fr.design.designer.properties.FRAbsoluteLayoutPropertiesGroupModel;
import com.fr.form.ui.container.WAbsoluteLayout; import com.fr.form.ui.container.WAbsoluteLayout;
import com.fr.general.ComparatorUtils; import com.fr.design.utils.ComponentUtils;
import com.fr.general.FRLogger; import com.fr.design.utils.gui.LayoutUtils;
import com.fr.general.ComparatorUtils;
import java.awt.*; import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget;
import com.fr.general.FRLogger;
public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter {
//是不是添加到父容器上 public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter {
private boolean isAdd2ParentLayout = false; //是不是添加到父容器上
private HoverPainter painter; private boolean isAdd2ParentLayout = false;
private HoverPainter painter;
public FRAbsoluteLayoutAdapter(XLayoutContainer container) {
super(container); public FRAbsoluteLayoutAdapter(XLayoutContainer container) {
painter = new FRAbsoluteLayoutPainter(container); super(container);
initMinSize(); painter = new FRAbsoluteLayoutPainter(container);
} initMinSize();
}
private void initMinSize() {
XWAbsoluteLayout layout = (XWAbsoluteLayout) container; private void initMinSize() {
minWidth = layout.getActualMinWidth(); XWAbsoluteLayout layout = (XWAbsoluteLayout) container;
minHeight = layout.getActualMinHeight(); minWidth = layout.getActualMinWidth();
actualVal = layout.getAcualInterval(); minHeight = layout.getActualMinHeight();
margin = layout.toData().getMargin(); actualVal = layout.getAcualInterval();
} margin = layout.toData().getMargin();
}
@Override
public HoverPainter getPainter() { @Override
return painter; public HoverPainter getPainter() {
} return painter;
}
/**
* 是否能在指定位置添加组件 /**
* * 是否能在指定位置添加组件
* @param creator 组件 * @param creator 组件
* @param x 坐标x * @param x 坐标x
* @param y 坐标y * @param y 坐标y
* @return 能则返回true * @return 能则返回true
*/ */
//这个地方的逻辑非常复杂, //这个地方的逻辑非常复杂,
// 1.当前绝对布局是不可编辑且是最外层,那么其他控件添加在它周围, // 1.当前绝对布局是不可编辑且是最外层,那么其他控件添加在它周围,
// 2.当前绝对布局是不可编辑且不是最外层,那么控件不可添加,(嵌套) // 2.当前绝对布局是不可编辑且不是最外层,那么控件不可添加,(嵌套)
// 3.当前绝对布局可编辑,那么控件添加 // 3.当前绝对布局可编辑,那么控件添加
@Override @Override
public boolean accept(XCreator creator, int x, int y) { public boolean accept(XCreator creator, int x, int y) {
Component comp = container.getComponentAt(x, y); Component comp = container.getComponentAt(x, y);
//布局控件要先判断是不是可编辑 //布局控件要先判断是不是可编辑
//可以编辑,按原有逻辑判断 //可以编辑,按原有逻辑判断
//不可编辑,当成一整个控件处理 //不可编辑,当成一整个控件处理
if (comp == null) { if (comp == null){
return false; return false;
} }
//参数面板内的组件不允许拖往绝对布局中 //参数面板内的组件不允许拖往绝对布局中
if (creator.getParent() != null && ((XCreator) creator.getParent()).acceptType(XWParameterLayout.class)) { if (creator.getParent() != null && ((XCreator)creator.getParent()).acceptType(XWParameterLayout.class)){
Rectangle rec = creator.getBounds(); Rectangle rec = creator.getBounds();
rec.y = creator.getParent().getHeight() - rec.height; rec.y = creator.getParent().getHeight() - rec.height;
creator.setBounds(rec); creator.setBounds(rec);
return false; return false;
} }
//判断组件能不能拖入绝对布局 //判断下组件能不能拖入绝对布局
if (!creator.canEnterIntoAbsolutePane()) { if (!creator.canEnterIntoAbsolutePane()){
return false; return false;
} }
XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer((XCreator) comp).getTopLayout(); XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer((XCreator)comp).getTopLayout();
if (topLayout != null) { if(topLayout != null){
if (topLayout.isEditable()) { if (topLayout.isEditable()){
return topLayoutAccept(creator, x, y); return topLayoutAccept(creator, x, y, topLayout);
} }
//绝对布局嵌套,处于内层,不可编辑,不添加,topLayout只能获取到最外层可编辑的布局 //绝对布局嵌套,处于内层,不可编辑,不添加,topLayout只能获取到最外层可编辑的布局
else if (((XLayoutContainer) topLayout.getParent()).acceptType(XWAbsoluteLayout.class)) { else if (((XLayoutContainer)topLayout.getParent()).acceptType(XWAbsoluteLayout.class)) {
return false; return false;
} else { }
return acceptWidget(x, y); else {
} return acceptWidget(creator, x, y);
} else { }
FRLogger.getLogger().error("top layout is null!"); }
} else{
FRLogger.getLogger().error("top layout is null!");
return false; }
}
return false;
//topLayout假如可以编辑的话就往里面添加组件 }
private boolean topLayoutAccept(XCreator creator, int x, int y) {
//允许组件重叠,可以不判断有没有和当前控件重叠 //toplayout假如可以编辑的话就往里面添加组件
//先计算当前控件的位置 private boolean topLayoutAccept(XCreator creator, int x, int y, XLayoutContainer topLayout) {
int creatorX, creatorY; //判断有没有和当前控件重叠
if (XCreatorUtils.getParentXLayoutContainer(creator) != null) { //先计算当前控件的位置
Rectangle creatorRectangle = ComponentUtils.getRelativeBounds(creator); int creatorX, creatorY;
creatorX = creatorRectangle.x; if (XCreatorUtils.getParentXLayoutContainer(creator) != null) {
creatorY = creatorRectangle.y;
} else { Rectangle creatorRectangle = ComponentUtils.getRelativeBounds(creator);
//这边计算得到的组件其实位置是正确的, creatorX = creatorRectangle.x;
//因为传入的x和y已经加上了宽度或者高度的一半,再减去相同的宽度和高度的一半是没区别的, creatorY = creatorRectangle.y;
// 例如高度为21,那么就是+10-10; } else {
// 高度为20,那么就是+10-10; 没区别 int w = creator.getWidth() / 2;
int w = creator.getWidth() / 2; int h = creator.getHeight() / 2;
int h = creator.getHeight() / 2; creatorX = x - w;
creatorX = x - w; creatorY = y - h;
creatorY = y - h; }
} //再判断和布局中其他控件重叠
if (creatorX < 0 || creatorX + creator.getWidth() > container.getWidth()) { Rectangle curRec = new Rectangle(creatorX, creatorY, creator.getWidth(), creator.getHeight());
return false; WAbsoluteLayout wAbsoluteLayout = (WAbsoluteLayout)topLayout.toData();
} for (int i = 0, count = wAbsoluteLayout.getWidgetCount(); i < count; i++) {
if (creatorY < 0 || creatorY + creator.getHeight() > container.getHeight()) { BoundsWidget temp = (BoundsWidget) wAbsoluteLayout.getWidget(i);
return false; Rectangle rectangle = temp.getBounds();
} if (curRec.intersects(rectangle)){
return x >= 0 && y >= 0 && creator.getHeight() <= container.getHeight() return false;
&& creator.getWidth() <= container.getWidth(); }
} }
if (creatorX < 0 || creatorX + creator.getWidth() > container.getWidth()) {
/** return false;
* 判断是否鼠标在组件的三等分区域如果组件在布局管理器中间上下左右都可能会三等分 }
* if (creatorY < 0 || creatorY + creator.getHeight() > container.getHeight()){
* @param parentComp 鼠标所在区域的组件 return false;
* @param x 坐标x }
* @param y 坐标y return x >= 0 && y >= 0 && creator.getHeight() <= container.getHeight()
* @return 是则返回true && creator.getWidth() <= container.getWidth();
*/ }
public boolean isTrisectionArea(Component parentComp, int x, int y) {
XCreator creator = (XCreator) parentComp; /**
trisectAreaDirect = 0; * 判断是否鼠标在组件的三等分区域如果组件在布局管理器中间上下左右都可能会三等分
if (container.getComponentCount() <= 1) { * @param parentComp 鼠标所在区域的组件
return false; * @param x 坐标x
} * @param y 坐标y
int maxWidth = parentComp.getWidth(); * @return 是则返回true
int maxHeight = parentComp.getHeight(); */
int xL = parentComp.getX(); public boolean isTrisectionArea(Component parentComp, int x, int y) {
int yL = parentComp.getY(); XCreator creator = (XCreator)parentComp;
// 组件宽高的十分之一和默认值取大 trisectAreaDirect = 0;
int minRangeWidth = Math.max(maxWidth / BORDER_PROPORTION, DEFAULT_AREA_LENGTH); if (container.getComponentCount()<=1) {
int minRangeHeight = Math.max(maxHeight / BORDER_PROPORTION, DEFAULT_AREA_LENGTH); return false;
if (y < yL + minRangeHeight) { }
// 在组件上侧三等分 int maxWidth = parentComp.getWidth();
trisectAreaDirect = COMP_TOP; int maxHeight = parentComp.getHeight();
} else if (y > yL + maxHeight - minRangeHeight) { int xL = parentComp.getX();
// 在组件下侧三等分 int yL = parentComp.getY();
trisectAreaDirect = COMP_BOTTOM; // 组件宽高的十分之一和默认值取大
} else if (x < xL + minRangeWidth) { int minRangeWidth = Math.max(maxWidth/BORDER_PROPORTION, DEFAULT_AREA_LENGTH);
// 在组件左侧三等分 int minRangeHeight = Math.max(maxHeight/BORDER_PROPORTION, DEFAULT_AREA_LENGTH);
trisectAreaDirect = COMP_LEFT; if(y<yL+minRangeHeight ) {
} else if (x > xL + maxWidth - minRangeWidth) { // 在组件上侧三等分
// 在组件右侧三等分 trisectAreaDirect = COMP_TOP;
trisectAreaDirect = COMP_RIGHT; } else if(y>yL+maxHeight-minRangeHeight) {
} // 在组件下侧三等分
// tab布局的边界特殊处理,不进行三等分 trisectAreaDirect = COMP_BOTTOM;
if (!creator.getTargetChildrenList().isEmpty()) { } else if (x<xL+minRangeWidth) {
return false; // 在组件左侧三等分
} trisectAreaDirect = COMP_LEFT;
} else if(x>xL+maxWidth-minRangeWidth) {
return !ComparatorUtils.equals(trisectAreaDirect, 0); // 在组件右侧三等分
} trisectAreaDirect = COMP_RIGHT;
}
//当前绝对布局不可编辑,就当成一个控件,组件添加在周围 // tab布局的边界特殊处理,不进行三等分
private boolean acceptWidget(int x, int y) { if(!creator.getTargetChildrenList().isEmpty()){
isFindRelatedComps = false; return false;
//拖入组件判断时,先判断是否为交叉点区域,其次三等分区域,再次平分区域 }
Component comp = container.getComponentAt(x, y);
//如果当前处于边缘地带, 那么就把他贴到父容器上 return !ComparatorUtils.equals(trisectAreaDirect, 0);
XLayoutContainer parent = container.findNearestFit(); }
container = parent != null ? parent : container;
isAdd2ParentLayout = true; //当前绝对布局不可编辑,就当成一个控件,组件添加在周围
private boolean acceptWidget(XCreator creator, int x, int y){
int componentHeight = comp.getHeight(); isFindRelatedComps = false;
int componentWidth = comp.getWidth(); //拖入组件判断时,先判断是否为交叉点区域,其次三等分区域,再次平分区域
//上半部分高度 Component comp = container.getComponentAt(x, y);
int upHeight = (int) (componentHeight * TOP_HALF) + comp.getY(); boolean isMatchEdge = false;
//下半部分高度 //如果当前处于边缘地带, 那么就把他贴到父容器上
int downHeight = (int) (componentHeight * BOTTOM_HALF) + comp.getY(); XLayoutContainer parent = container.findNearestFit();
container = parent != null ? parent : container;
if (isCrossPointArea(comp, x, y)) { isAdd2ParentLayout = true;
return canAcceptWhileCrossPoint(comp, x, y);
} int componentHeight = comp.getHeight();
int componentWidth = comp.getWidth();
if (isTrisectionArea(comp, x, y)) { //上半部分高度
return canAcceptWhileTrisection(comp, x, y); int upHeight = (int) (componentHeight * TOP_HALF) + comp.getY();
} //下半部分高度
int downHeight = (int) (componentHeight * BOTTOM_HALF) + comp.getY();
boolean horizonValid = componentWidth >= minWidth * 2 + actualVal;
boolean verticalValid = componentHeight >= minHeight * 2 + actualVal; if (isCrossPointArea(comp, x, y)) {
return y > upHeight && y < downHeight ? horizonValid : verticalValid; return canAcceptWhileCrossPoint(comp, x, y);
} }
/** if (isTrisectionArea(comp, x, y)) {
* 组件的ComponentAdapter在添加组件时如果发现布局管理器不为空会继而调用该布局管理器的 return canAcceptWhileTrisection(comp, x, y);
* addComp方法来完成组件的具体添加在该方法内布局管理器可以提供额外的功能 }
*
* @param creator 被添加的新组件 boolean horizonValid = componentWidth >= minWidth * 2 + actualVal;
* @param x 添加的位置x该位置是相对于container的 boolean verticalValid = componentHeight >= minHeight * 2 + actualVal;
* @param y 添加的位置y该位置是相对于container的 return y > upHeight && y < downHeight ? horizonValid : verticalValid;
* @return 是否添加成功成功返回true否则false }
*/
@Override /**
public boolean addBean(XCreator creator, int x, int y) { * 组件的ComponentAdapter在添加组件时如果发现布局管理器不为空会继而调用该布局管理器的
Rectangle rect = ComponentUtils.getRelativeBounds(container); * addComp方法来完成组件的具体添加在该方法内布局管理器可以提供额外的功能
*
int posX = x + rect.x; * @param creator 被添加的新组件
int posY = y + rect.y; * @param x 添加的位置x该位置是相对于container的
if (!accept(creator, x, y)) { * @param y 添加的位置y该位置是相对于container的
return false; * @return 是否添加成功成功返回true否则false
} */
addComp(creator, posX, posY); @Override
((XWidgetCreator) creator).recalculateChildrenSize(); public boolean addBean(XCreator creator, int x, int y) {
return true; Rectangle rect = ComponentUtils.getRelativeBounds(container);
}
int posX = x + rect.x;
@Override int posY = y + rect.y;
protected void addComp(XCreator creator, int x, int y) { if (!accept(creator, x, y)) {
if (!isAdd2ParentLayout) { return false;
Rectangle r = ComponentUtils.getRelativeBounds(container); }
x = x - r.x; addComp(creator, posX, posY);
y = y - r.y; ((XWidgetCreator) creator).recalculateChildrenSize();
if (XCreatorUtils.getParentXLayoutContainer(creator) != null) { return true;
}
Rectangle creatorRectangle = ComponentUtils.getRelativeBounds(creator);
x = creatorRectangle.x - r.x; @Override
y = creatorRectangle.y - r.y; protected void addComp(XCreator creator, int x, int y) {
} else { if(!isAdd2ParentLayout) {
int w = creator.getWidth() / 2; Rectangle r = ComponentUtils.getRelativeBounds(container);
int h = creator.getHeight() / 2; x = x - r.x;
x = x - w; y = y - r.y;
y = y - h; if (XCreatorUtils.getParentXLayoutContainer(creator) != null) {
}
fix(creator, x, y); Rectangle creatorRectangle = ComponentUtils.getRelativeBounds(creator);
x = creatorRectangle.x - r.x;
if (creator.hasTitleStyle()) { y = creatorRectangle.y - r.y;
addParentCreator(creator); } else {
} else { int w = creator.getWidth() / 2;
container.add(creator, creator.toData().getWidgetName()); int h = creator.getHeight() / 2;
} x = x - w;
XWAbsoluteLayout layout = (XWAbsoluteLayout) container; y = y - h;
layout.updateBoundsWidget(creator); }
updateCreatorBackBound(); fix(creator, x, y);
LayoutUtils.layoutRootContainer(container);
} else { if (creator.hasTitleStyle()) {
fixAbsolute(creator, x, y); addParentCreator(creator);
if (creator.shouldScaleCreator() || creator.hasTitleStyle()) { } else {
addParentCreator(creator); container.add(creator, creator.toData().getWidgetName());
} else { }
container.add(creator, creator.toData().getWidgetName()); XWAbsoluteLayout layout = (XWAbsoluteLayout) container;
} layout.updateBoundsWidget(creator);
XWFitLayout layout = (XWFitLayout) container; updateCreatorBackBound();
// 更新对应的BoundsWidget LayoutUtils.layoutRootContainer(container);
layout.updateBoundsWidget(); }else{
updateCreatorBackBound(); fixAbsolute(creator, x, y);
} if (creator.shouldScaleCreator() || creator.hasTitleStyle()) {
} addParentCreator(creator);
} else {
private void updateCreatorBackBound() { container.add(creator, creator.toData().getWidgetName());
for (int i = 0, size = container.getComponentCount(); i < size; i++) { }
XCreator creator = (XCreator) container.getComponent(i); XWFitLayout layout = (XWFitLayout) container;
creator.updateChildBound(minHeight); // 更新对应的BoundsWidget
creator.setBackupBound(creator.getBounds()); layout.updateBoundsWidget();
} updateCreatorBackBound();
} }
}
private void addParentCreator(XCreator child) {
XLayoutContainer parentPanel = child.initCreatorWrapper(child.getHeight()); private void updateCreatorBackBound() {
container.add(parentPanel, child.toData().getWidgetName()); for (int i=0,size=container.getComponentCount(); i<size; i++) {
} XCreator creator = (XCreator) container.getComponent(i);
creator.updateChildBound(minHeight);
/** creator.setBackupBound(creator.getBounds());
* 新拖入组件时计算调整其他关联组件位置大小 }
* }
* @param child 新拖入的组件
* @param x 鼠标所在x坐标 private void addParentCreator(XCreator child) {
* @param y 鼠标所在y坐标 XLayoutContainer parentPanel = child.initCreatorWrapper(child.getHeight());
*/ container.add(parentPanel, child.toData().getWidgetName());
private void fixAbsolute(XCreator child, int x, int y) { }
Component parentComp = container.getComponentAt(x, y);
if (container.getComponentCount() == 0) { /**
child.setLocation(0, 0); * 新拖入组件时计算调整其他关联组件位置大小
child.setSize(parentComp.getWidth(), parentComp.getHeight()); * @param child 新拖入的组件
} else if (isCrossPointArea(parentComp, x, y)) { * @param x 鼠标所在x坐标
//交叉区域插入组件时,根据具体位置进行上下或者左右或者相邻三个组件的位置大小插入 * @param y 鼠标所在y坐标
fixCrossPointArea(parentComp, child, x, y); */
return; private void fixAbsolute(XCreator child, int x, int y) {
} else if (isTrisectionArea(parentComp, x, y)) { Component parentComp = container.getComponentAt(x, y);
// 在边界三等分区域,就不再和组件二等分了 if (container.getComponentCount()==0){
fixTrisect(parentComp, child, x, y); child.setLocation(0, 0);
return; child.setSize(parentComp.getWidth(), parentComp.getHeight());
} else { } else if(isCrossPointArea(parentComp, x, y)){
fixHalve(parentComp, child, x, y); //交叉区域插入组件时,根据具体位置进行上下或者左右或者相邻三个组件的位置大小插入
} fixCrossPointArea(parentComp, child, x, y);
} return;
} else if (isTrisectionArea(parentComp, x, y)) {
/** // 在边界三等分区域,就不再和组件二等分了
* 组件拖拽后调整大小 fixTrisect(parentComp, child, x, y);
* return;
* @param creator 组件 } else{
*/ fixHalve(parentComp, child, x, y);
@Override }
public void fix(XCreator creator) { }
WAbsoluteLayout wabs = (WAbsoluteLayout) container.toData();
fix(creator, creator.getX(), creator.getY()); /**
wabs.setBounds(creator.toData(), creator.getBounds()); * 组件拖拽后调整大小
* @param creator 组件
XWAbsoluteLayout layout = (XWAbsoluteLayout) container; */
layout.updateBoundsWidget(creator); @Override
} public void fix(XCreator creator) {
WAbsoluteLayout wabs = (WAbsoluteLayout)container.toData();
/** fix(creator,creator.getX(),creator.getY());
* 调整组件大小到合适尺寸位置 wabs.setBounds(creator.toData(),creator.getBounds());
*
* @param creator 组件 XWAbsoluteLayout layout = (XWAbsoluteLayout) container;
* @param x 坐标x layout.updateBoundsWidget(creator);
* @param y 坐标y }
*/
public void fix(XCreator creator, int x, int y) { /**
int height = creator.getHeight(); * 调整组件大小到合适尺寸位置
int width = creator.getWidth(); * @param creator 组件
if (x < 0) { * @param x 坐标x
x = container.getX(); * @param y 坐标y
} else if (x + creator.getWidth() > container.getWidth()) { */
x = container.getWidth() - width; public void fix(XCreator creator ,int x, int y) {
} int height = creator.getHeight();
int width = creator.getWidth();
if (y < 0) { if (x < 0) {
y = container.getY(); width += x;
} else if (y + creator.getHeight() > container.getHeight()) { x = 0;
y = container.getHeight() - height; } else if (x + creator.getWidth() > container.getWidth()) {
} width = container.getWidth() - x;
}
creator.setBounds(x, y, width, height);
} if (y < 0) {
height += y;
@Override y = 0;
public ConstraintsGroupModel getLayoutConstraints(XCreator creator) { } else if (y + creator.getHeight() > container.getHeight()) {
return new BoundsGroupModel((XWAbsoluteLayout) container, creator); height = container.getHeight() - y;
} }
@Override creator.setBounds(x, y, width, height);
public GroupModel getLayoutProperties() { }
XWAbsoluteLayout xwAbsoluteLayout = (XWAbsoluteLayout) container;
return new FRAbsoluteLayoutPropertiesGroupModel(xwAbsoluteLayout); @Override
} public ConstraintsGroupModel getLayoutConstraints(XCreator creator) {
return new BoundsGroupModel((XWAbsoluteLayout)container, creator);
}
@Override
public GroupModel getLayoutProperties() {
XWAbsoluteLayout xwAbsoluteLayout = (XWAbsoluteLayout) container;
return new FRAbsoluteLayoutPropertiesGroupModel(xwAbsoluteLayout);
}
} }

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

File diff suppressed because it is too large Load Diff

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

@ -10,7 +10,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.widget.BoundsWidget; import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget;
import com.fr.form.ui.container.WParameterLayout;
import java.awt.*; import java.awt.*;
@ -24,184 +25,197 @@ public abstract class AccessDirection implements Direction {
private int ymin; private int ymin;
private int xmin; private int xmin;
abstract int getCursor(); abstract int getCursor();
protected abstract Rectangle getDraggedBounds(int dx, int dy, Rectangle currentBounds, FormDesigner designer, protected abstract Rectangle getDraggedBounds(int dx, int dy, Rectangle current_bounds, FormDesigner designer,
Rectangle oldBounds); Rectangle oldbounds);
protected int[] sorption(int x, int y, Rectangle currentBounds, FormDesigner designer) { protected int[] sorption(int x, int y,Rectangle current_bounds, FormDesigner designer) {
// 自适应布局不需要吸附线,但需要对齐线,对齐线后面处理 // 自适应布局不需要吸附线,但需要对齐线,对齐线后面处理
if (!designer.hasWAbsoluteLayout()) { if (!designer.hasWAbsoluteLayout()) {
designer.getStateModel().setEquidistantLine(null); designer.getStateModel().setEquidistantLine(null);
designer.getStateModel().setXAbsorptionline(null); designer.getStateModel().setXAbsorptionline(null);
designer.getStateModel().setYAbsorptionline(null); designer.getStateModel().setYAbsorptionline(null);
return new int[]{x, y}; return new int[] { x, y };
} else { } else {
Point relativePoint = getRelativePoint(x, y, currentBounds, designer); int posy = current_bounds.y;
sorptionPoint(relativePoint, currentBounds, designer);
return new int[]{relativePoint.x, relativePoint.y}; Point relativePoint = getRelativePoint(x, y, current_bounds,designer);
} sorptionPoint(relativePoint,current_bounds, designer);
return new int[] { relativePoint.x, relativePoint.y };
} }
protected Point getRelativePoint(int x, int y, Rectangle currentBounds, FormDesigner designer) { }
if (x < 0) {
x = 0; protected Point getRelativePoint(int x, int y, Rectangle current_bounds,FormDesigner designer) {
} else if (x > designer.getRootComponent().getWidth() && designer.getSelectionModel().hasSelectionComponent()) { if (x < 0) {
x = designer.getRootComponent().getWidth(); x = 0;
} } else if (x > designer.getRootComponent().getWidth() && designer.getSelectionModel().hasSelectionComponent()) {
x = designer.getRootComponent().getWidth();
}
//参数面板可以无下限拉长 //参数面板可以无下限拉长
if (y < 0) { if (y < 0) {
y = 0; y = 0;
} else if (y > designer.getRootComponent().getHeight() + designer.getParaHeight() && designer.getSelectionModel().hasSelectionComponent() } else if (y > designer.getRootComponent().getHeight() + designer.getParaHeight() && designer.getSelectionModel().hasSelectionComponent()
&& !designer.getSelectionModel().getSelection().getSelectedCreator().acceptType(XWParameterLayout.class)) { && !designer.getSelectionModel().getSelection().getSelectedCreator().acceptType(XWParameterLayout.class)) {
y = designer.getRootComponent().getHeight() + designer.getParaHeight(); y = designer.getRootComponent().getHeight() + designer.getParaHeight();
} }
return new Point(x, y); return new Point(x, y);
} }
protected void sorptionPoint(Point point, Rectangle currentBounds, FormDesigner designer) { protected void sorptionPoint(Point point, Rectangle current_bounds,FormDesigner designer) {
boolean findInX = currentBounds.getWidth() <= MoveUtils.SORPTION_UNIT; boolean findInX = current_bounds.getWidth() <= MoveUtils.SORPTION_UNIT ? true : false;
boolean findInY = currentBounds.getHeight() <= MoveUtils.SORPTION_UNIT; 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();
for (int i = 0, count = layout.getWidgetCount(); i < count; i++) { boolean isWidgetsIntersect = false;
BoundsWidget temp = (BoundsWidget) layout.getWidget(i); for (int i = 0, count = layout.getWidgetCount(); i < count; i++) {
if (!temp.isVisible() || selection.contains(temp.getWidget())) { BoundsWidget temp = (BoundsWidget) layout.getWidget(i);
continue; if (!temp.isVisible() || selection.contains(temp.getWidget())) {
} continue;
Rectangle bounds = getWidgetRelativeBounds(temp.getBounds(), selection); }
if (!findInX) { Rectangle bounds = getWidgetRelativeBounds(temp.getBounds(), selection);
int x1 = bounds.x; if (!findInX) {
if (Math.abs(x1 - point.x) <= MoveUtils.SORPTION_UNIT) { int x1 = bounds.x;
point.x = x1; if (Math.abs(x1 - point.x) <= MoveUtils.SORPTION_UNIT) {
findInX = true; point.x = x1;
} findInX = true;
int x2 = bounds.x + bounds.width; }
if (Math.abs(x2 - point.x) <= MoveUtils.SORPTION_UNIT) { int x2 = bounds.x + bounds.width;
point.x = x2; if (Math.abs(x2 - point.x) <= MoveUtils.SORPTION_UNIT) {
findInX = true; point.x = x2;
} findInX = true;
} }
if (!findInY) { }
int y1 = bounds.y; if (!findInY) {
if (Math.abs(y1 - point.y) <= MoveUtils.SORPTION_UNIT) { int y1 = bounds.y;
point.y = y1; if (Math.abs(y1 - point.y) <= MoveUtils.SORPTION_UNIT) {
findInY = true; point.y = y1;
} findInY = true;
int y2 = bounds.y + bounds.height; }
if (Math.abs(y2 - point.y) <= MoveUtils.SORPTION_UNIT) { int y2 = bounds.y + bounds.height;
point.y = y2; if (Math.abs(y2 - point.y) <= MoveUtils.SORPTION_UNIT) {
findInY = true; point.y = y2;
} findInY = true;
}
}
if (findInX && findInY) { }
break; if (findInX && findInY) {
} break;
}
}
setDesignerStateModelProperties(designer, findInX, findInY, currentBounds, point); if (current_bounds.intersects(bounds) && !(layout instanceof WParameterLayout)){
} isWidgetsIntersect = true;
}
private void setDesignerStateModelProperties(FormDesigner designer, boolean findInX, boolean findInY, Rectangle }
currentBounds, Point point) { processRectangleIntersects(designer, point.x, point.y, isWidgetsIntersect);
designer.getStateModel().setXAbsorptionline(findInX && currentBounds.getWidth() > MoveUtils.SORPTION_UNIT ? Absorptionline.createXAbsorptionline(point.x) : null); setDesignerStateModelProperties(designer, findInX, findInY, current_bounds, point);
designer.getStateModel().setYAbsorptionline(findInY && currentBounds.getHeight() > MoveUtils.SORPTION_UNIT ? Absorptionline.createYAbsorptionline(point.y) : null); }
designer.getStateModel().setEquidistantLine(null);
} 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);
private Rectangle getWidgetRelativeBounds(Rectangle bounds, FormSelection selection) { designer.getStateModel().setYAbsorptionline(findInY && current_bounds.getHeight() > MoveUtils.SORPTION_UNIT ? Absorptionline.createYAbsorptionline(point.y) : null);
Rectangle relativeRec = new Rectangle(bounds.x, bounds.y, bounds.width, bounds.height); designer.getStateModel().setEquidistantLine(null);
XLayoutContainer parent = XCreatorUtils.getParentXLayoutContainer(selection.getSelectedCreator()); }
if (parent == null) {
return relativeRec; private Rectangle getWidgetRelativeBounds(Rectangle bounds, FormSelection selection){
} Rectangle relativeRec = new Rectangle(bounds.x, bounds.y, bounds.width, bounds.height);
Rectangle rec = ComponentUtils.getRelativeBounds(parent); XLayoutContainer parent = XCreatorUtils.getParentXLayoutContainer(selection.getSelectedCreator());
relativeRec.x += rec.x; if (parent == null) {
relativeRec.y += rec.y; return relativeRec;
return relativeRec; }
} Rectangle rec = ComponentUtils.getRelativeBounds(parent);
relativeRec.x += rec.x;
relativeRec.y += rec.y;
private WAbsoluteLayout getLayout(final FormDesigner designer) { return relativeRec;
}
private void processRectangleIntersects(FormDesigner designer, int x, int y, boolean isIntersects){
if(isIntersects){
if(designer.getLocationOnScreen() != null) {
MoveUtils.displayForbidWindow(x + designer.getLocationOnScreen().x, y + designer.getLocationOnScreen().y);
}
designer.setWidgetsIntersect(true);
}
else{
MoveUtils.hideForbidWindow();
designer.setWidgetsIntersect(false);
}
}
private WAbsoluteLayout getLayout(final FormDesigner designer){
XLayoutContainer formLayoutContainer = (XLayoutContainer) XCreatorUtils.createXCreator( XLayoutContainer formLayoutContainer = (XLayoutContainer) XCreatorUtils.createXCreator(
designer.getTarget().getContainer()); designer.getTarget().getContainer());
WAbsoluteLayout layout; WAbsoluteLayout layout;
if (formLayoutContainer.acceptType(XWBorderLayout.class)) {//看起来这边的作用应该是为了区别cpt(得到XWParameterLayout)还是frm(得到XWBorderLayout)的参数界面 if (formLayoutContainer.acceptType(XWBorderLayout.class)){//看起来这边的作用应该是为了区别cpt(得到XWParameterLayout)还是frm(得到XWBorderLayout)的参数界面
Container container = designer.getSelectionModel().getSelection().getSelectedCreator().getParent(); Container container = designer.getSelectionModel().getSelection().getSelectedCreator().getParent();
if (container instanceof XWAbsoluteLayout) { if(container instanceof XWAbsoluteLayout){
layout = ((XWAbsoluteLayout) container).toData(); layout = ((XWAbsoluteLayout)container).toData();
} else { }
layout = (WAbsoluteLayout) designer.getParaComponent().toData(); else {
} layout = (WAbsoluteLayout) designer.getParaComponent().toData();
} else { }
} else{
layout = (WAbsoluteLayout) designer.getTarget().getContainer(); layout = (WAbsoluteLayout) designer.getTarget().getContainer();
} }
return layout; return layout;
} }
/** /**
* 拖拽 * 拖拽
* * @param dx 坐标x
* @param dx 坐标x * @param dy 坐标y
* @param dy 坐标y * @param designer 设计界面
* @param designer 设计界面 */
*/ public void drag(int dx, int dy, FormDesigner designer) {
public void drag(int dx, int dy, FormDesigner designer) { Rectangle rec = getDraggedBounds(dx, dy, designer.getSelectionModel().getSelection().getRelativeBounds(), designer, designer.getSelectionModel().getSelection().getBackupBounds());
Rectangle rec = getDraggedBounds(dx, dy, designer.getSelectionModel().getSelection().getRelativeBounds(), designer, designer.getSelectionModel().getSelection().getBackupBounds());
if (rec != null) {
designer.getSelectionModel().getSelection().setSelectionBounds(rec, designer);
} else {
return;
}
//设定控件最小高度21,因每次拖曳至少移动1,防止控件高度等于21时,拖曳导致rec.y的变化使得控件不停的向上或向下移动。 //设定控件最小高度21,因每次拖曳至少移动1,防止控件高度等于21时,拖曳导致rec.y的变化使得控件不停的向上或向下移动。
if (rec.height == MINHEIGHT) { if(rec.height == MINHEIGHT){
ymin = rec.y; ymin = rec.y;
} }
if (rec.height == MINHEIGHT - 1) { if(rec.height == MINHEIGHT - 1){
ymin = ymin == rec.y ? rec.y : rec.y - 1; ymin = ymin == rec.y ? rec.y : rec.y - 1;
} }
if (rec.height < MINHEIGHT) { if(rec.height < MINHEIGHT){
rec.height = MINHEIGHT; rec.height = MINHEIGHT;
rec.y = ymin; rec.y = ymin;
} }
// 增加下宽度也设最小为21 // 增加下宽度也设最小为21
if (rec.width == MINWIDTH) { if (rec.width == MINWIDTH) {
xmin = rec.x; xmin = rec.x;
} }
if (rec.width == MINWIDTH - 1) { if(rec.width == MINWIDTH - 1){
xmin = xmin == rec.x ? rec.x : rec.x - 1; xmin = xmin == rec.x ? rec.x : rec.x - 1;
} }
if (rec.width < MINWIDTH) { if (rec.width < MINWIDTH) {
rec.width = MINWIDTH; rec.width = MINWIDTH;
rec.x = xmin; rec.x = xmin;
}
}
/**
* 更新鼠标指针形状
*
* @param formEditor 设计界面组件
*/
public void updateCursor(FormDesigner formEditor) {
// 调用位置枚举的多态方法getCursor获取鼠标形状
int type = getCursor();
if (type != formEditor.getCursor().getType()) {
// 设置当前形状
formEditor.setCursor(Cursor.getPredefinedCursor(type));
} }
} if(rec != null) {
designer.getSelectionModel().getSelection().setSelectionBounds(rec, designer);
/** }
* 生成组件备用的bound }
*
* @param formEditor 设计界面组件 /**
*/ * 更新鼠标指针形状
public void backupBounds(FormDesigner formEditor) { * @param formEditor 设计界面组件
formEditor.getSelectionModel().getSelection().backupBounds(); */
} public void updateCursor(FormDesigner formEditor) {
// 调用位置枚举的多态方法getCursor获取鼠标形状
int type = getCursor();
if (type != formEditor.getCursor().getType()) {
// 设置当前形状
formEditor.setCursor(Cursor.getPredefinedCursor(type));
}
}
/**
* 生成组件备用的bound
* @param formEditor 设计界面组件
*/
public void backupBounds(FormDesigner formEditor) {
formEditor.getSelectionModel().getSelection().backupBounds();
}
} }
Loading…
Cancel
Save