From 2c371d74c40cf79e6ab2bd308ff7067a9ee9d9c5 Mon Sep 17 00:00:00 2001 From: neil Date: Wed, 14 Dec 2016 11:32:40 +0800 Subject: [PATCH 001/343] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=EF=BC=8C=20=E4=B8=8D=E5=85=BC=E5=AE=B9=E7=9A=84API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/fun/ConnectionProvider.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/fun/ConnectionProvider.java b/designer_base/src/com/fr/design/fun/ConnectionProvider.java index c6bd2fca2..766f7d414 100644 --- a/designer_base/src/com/fr/design/fun/ConnectionProvider.java +++ b/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"; - int CURRENT_LEVEL = 1; + // 2016-12-14 1 -> 2 , 增加connection.feature方法导致不兼容. + int CURRENT_LEVEL = 2; /** * 数据连接弹出菜单的名字 From 4491ba813d030f06ad52c17d1403503d92c29372 Mon Sep 17 00:00:00 2001 From: fr_shine Date: Wed, 14 Dec 2016 11:44:41 +0800 Subject: [PATCH 002/343] =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/chart/report/GisMapTableDataContentPane.java | 2 +- .../design/chart/report/GisMapTableDataContentPane4Chart.java | 2 +- .../src/com/fr/design/chart/report/MapCubeLayerPane.java | 4 ++-- .../chart/gui/data/table/BubblePlotTableDataContentPane.java | 2 +- .../gui/data/table/CategoryPlotTableDataContentPane.java | 2 +- .../gui/data/table/XYScatterPlotTableDataContentPane.java | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/designer_chart/src/com/fr/design/chart/report/GisMapTableDataContentPane.java b/designer_chart/src/com/fr/design/chart/report/GisMapTableDataContentPane.java index 4e0443c9f..5a2f3a4b9 100644 --- a/designer_chart/src/com/fr/design/chart/report/GisMapTableDataContentPane.java +++ b/designer_chart/src/com/fr/design/chart/report/GisMapTableDataContentPane.java @@ -245,7 +245,7 @@ public class GisMapTableDataContentPane extends FurtherBasicBeanPane{ while(names.hasNext()) { Object name = names.next(); 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; } list.add(new Object[]{name, layName}); @@ -230,7 +230,7 @@ public class MapCubeLayerPane extends BasicBeanPane{ while(names.hasNext()) { Object name = names.next(); 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; } list.add(new Object[]{name, layName}); diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/BubblePlotTableDataContentPane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/BubblePlotTableDataContentPane.java index 73c5f1b18..2d404196c 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/BubblePlotTableDataContentPane.java +++ b/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 resultSize = bubbleSize.getSelectedItem(); - if(resultName == null || ArrayUtils.contains(ChartConstants.NONE_KEYS, resultName)) { + if(resultName == null || ArrayUtils.contains(ChartConstants.getNoneKeys(), resultName)) { definition.setSeriesName(StringUtils.EMPTY); } else { definition.setSeriesName(resultName.toString()); diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/CategoryPlotTableDataContentPane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/CategoryPlotTableDataContentPane.java index a8c1bc1f8..6de692f6f 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/CategoryPlotTableDataContentPane.java +++ b/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(); - if(ArrayUtils.contains(ChartConstants.NONE_KEYS, categoryName)) { + if(ArrayUtils.contains(ChartConstants.getNoneKeys(), categoryName)) { dataDefinition.setCategoryName(StringUtils.EMPTY); } else { dataDefinition.setCategoryName(categoryName == null ? null : categoryName.toString()); diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/XYScatterPlotTableDataContentPane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/XYScatterPlotTableDataContentPane.java index c27b4322c..8abb46bf5 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/XYScatterPlotTableDataContentPane.java +++ b/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 resultY = yCombox.getSelectedItem(); - if(resultName == null || ArrayUtils.contains(ChartConstants.NONE_KEYS, resultName)) { + if(resultName == null || ArrayUtils.contains(ChartConstants.getNoneKeys(), resultName)) { definition.setSeriesName(StringUtils.EMPTY); } else { definition.setSeriesName(resultName.toString()); From df55f1e33f7aaf6fe99affa4417cd18cf491ff2a Mon Sep 17 00:00:00 2001 From: plough Date: Thu, 15 Dec 2016 16:42:55 +0800 Subject: [PATCH 003/343] =?UTF-8?q?REPORT-1178=20=E8=8B=B1=E6=96=87?= =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E2=80=94=E2=80=941/23?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer/src/com/fr/design/mainframe/JWorkBook.java | 2 +- .../src/com/fr/design/locale/designer.properties | 1 + .../src/com/fr/design/locale/designer_en_US.properties | 2 ++ .../src/com/fr/design/locale/designer_ja_JP.properties | 8 ++++---- .../src/com/fr/design/locale/designer_ko_KR.properties | 5 +++-- .../src/com/fr/design/locale/designer_zh_CN.properties | 1 + .../src/com/fr/design/locale/designer_zh_TW.properties | 1 + 7 files changed, 13 insertions(+), 7 deletions(-) diff --git a/designer/src/com/fr/design/mainframe/JWorkBook.java b/designer/src/com/fr/design/mainframe/JWorkBook.java index f3722c4ac..c46f97f5d 100644 --- a/designer/src/com/fr/design/mainframe/JWorkBook.java +++ b/designer/src/com/fr/design/mainframe/JWorkBook.java @@ -463,7 +463,7 @@ public class JWorkBook extends JTemplate { */ public ShortCut[] shortCuts4Authority() { 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), }; diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 80f966919..9a0b410ee 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -488,3 +488,4 @@ FR-Designer-LayerPageReport_PageQuery= FR-Designer-LayerPageReport_Define_PageQuerySQL= FR-Designer_Event= FR-Designer_Properties= +FR-Designer_Permissions_Edition=Permissions Edition diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index f2738c38e..d1f92857a 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -487,3 +487,5 @@ FR-Designer-DS-Database_Query=DB Query FR-Designer_Is_Share_DBTableData=Shared data set FR-Designer_Event=Event FR-Designer_Properties=Properties +FR-Designer_Permissions_Edition=Permissions Edition +FR-Designer_Permission_Edition=Permissions Edition diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index 4ab48d0e6..c4166911a 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -432,7 +432,7 @@ FR-Designer_Attention=\u6CE8\u610F\u3057\u307E\u3059 FR-Designer_Forbid_Widgets_Intersects=\u7981\u6B62\u90E8\u54C1\u3092\u91CD\u306D\u3066 FR-Designer_Widget_Scaling_Mode_Fit=\u9069\u5FDC\u533A\u57DF 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-Cancel=\u30AD\u30E3\u30F3\u30BB\u30EB FR-Designer-Reuse_Manager= @@ -463,6 +463,6 @@ FR-Designer-DS-Database_Query=\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u30AF\u30A8\u FR-Designer-LayerPageReport_PageQuery=\u30DA\u30FC\u30B8\u5225\u30AF\u30A8\u30EA FR-Designer-LayerPageReport_Define_PageQuerySQL=\u5B9A\u7FA9\u30DA\u30FC\u30B8\u5225\u30AF\u30A8\u30EAsql FR-Designer_Is_Share_DBTableData=\u5171\u6709\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8 -FR-Designer_Event=\ -FR-Designer_Properties=FR-Designer_Properties=\ -\ +FR-Designer_Event= +FR-Designer_Properties= +FR-Designer_Permissions_Edition=\u6A29\u9650\u7DE8\u96C6 diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index 64bee7903..ced78b1cf 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -459,5 +459,6 @@ 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-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_Event=\ -FR-Designer_Properties=\ \ No newline at end of file +FR-Designer_Event= +FR-Designer_Properties= +FR-Designer_Permissions_Edition=\uAD8C\uD55C\uD3B8\uC9D1 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 47ab967f1..53186b075 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -491,3 +491,4 @@ FR-Designer-LayerPageReport_Define_PageQuerySQL=\u5B9A\u4E49\u5206\u9875\u67E5\u FR-Designer_Is_Share_DBTableData=\u5171\u4EAB\u6570\u636E\u96C6 FR-Designer_Event=\u4E8B\u4EF6 FR-Designer_Properties=\u5C5E\u6027 +FR-Designer_Permissions_Edition=\u6743\u9650\u7F16\u8F91 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 01a04e850..e4a2718a4 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -479,3 +479,4 @@ 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_Properties=\u5C6C\u6027 FR-Designer_Event=\u4E8B\u4EF6 +FR-Designer_Permissions_Edition=\u6B0A\u9650\u7DE8\u8F2F From 2a79bb30daf5633d856f0c7b2cf4afd591e2bb61 Mon Sep 17 00:00:00 2001 From: vito Date: Fri, 16 Dec 2016 09:59:49 +0800 Subject: [PATCH 004/343] =?UTF-8?q?REPORT-1220=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E8=A1=A8=E5=8D=95=E7=95=8C=E9=9D=A2=E7=9A=84=E5=9B=BE=E8=A1=A8?= =?UTF-8?q?=E5=92=8C=E6=8E=A7=E4=BB=B6=E6=82=AC=E6=B5=AE=E9=9D=A2=E6=9D=BF?= =?UTF-8?q?=E7=82=B9=E5=87=BB=E5=85=B6=E4=BB=96=E4=BD=8D=E7=BD=AE=E4=B8=8D?= =?UTF-8?q?=E6=B6=88=E5=A4=B1=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/FormParaWidgetPane.java | 297 +++++++++--------- 1 file changed, 147 insertions(+), 150 deletions(-) diff --git a/designer_form/src/com/fr/design/mainframe/FormParaWidgetPane.java b/designer_form/src/com/fr/design/mainframe/FormParaWidgetPane.java index cb111bb92..3423c54cd 100644 --- a/designer_form/src/com/fr/design/mainframe/FormParaWidgetPane.java +++ b/designer_form/src/com/fr/design/mainframe/FormParaWidgetPane.java @@ -18,7 +18,6 @@ import com.fr.form.ui.*; import com.fr.general.ComparatorUtils; import com.fr.general.Inter; import com.fr.stable.ArrayUtils; -import com.fr.stable.OperatingSystem; import javax.swing.*; import java.awt.*; @@ -27,14 +26,14 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; -public class FormParaWidgetPane extends JPanel{ - private static FormParaWidgetPane THIS; - private List predifinedwidgeList = new ArrayList(); +public class FormParaWidgetPane extends JPanel { + private static FormParaWidgetPane THIS; + private List predifinedwidgeList = new ArrayList(); private JWindow chartTypeWindow; private JWindow widgetTypeWindow; private WidgetOption[] widgetOptions = null; - private WidgetOption[] chartOptions = null; + private WidgetOption[] chartOptions = null; private WidgetOption[] layoutOptions = null; private int widgetButtonWidth = 22; private int widgetButtonHeight = 20; @@ -53,42 +52,42 @@ public class FormParaWidgetPane extends JPanel{ private JSeparator jSeparatorChart; private JSeparator jSeparatorLayout; - private UILabel paraLabel ; - - private FormDesigner designer; - - public static final FormParaWidgetPane getInstance(FormDesigner designer) { - if(THIS == null) { - THIS = new FormParaWidgetPane(); - } - THIS.designer = designer; - THIS.setTarget(designer); - return THIS; - } - - public FormParaWidgetPane() { - setLayout(new FlowLayout(FlowLayout.LEFT)); + private UILabel paraLabel; + + private FormDesigner designer; + + public static final FormParaWidgetPane getInstance(FormDesigner designer) { + if (THIS == null) { + THIS = new FormParaWidgetPane(); + } + THIS.designer = designer; + THIS.setTarget(designer); + return THIS; + } + + public FormParaWidgetPane() { + setLayout(new FlowLayout(FlowLayout.LEFT)); DesignerContext.getDesignerFrame().getCenterTemplateCardPane().addComponentListener(new ComponentAdapter() { public void componentResized(ComponentEvent e) { - if (FormParaWidgetPane.this.getParent() != null) { - JPanel fother = (JPanel)FormParaWidgetPane.this.getParent(); + if (FormParaWidgetPane.this.getParent() != null) { + JPanel fother = (JPanel) FormParaWidgetPane.this.getParent(); int delta_wdith = 0; - for (int i = 0; i < fother.getComponentCount() - 1; i ++) { + for (int i = 0; i < fother.getComponentCount() - 1; i++) { delta_wdith += fother.getComponent(i).getWidth(); } - - if(delta_wdith == 0){ - return; + + if (delta_wdith == 0) { + return; } - + Dimension d = fother.getSize(); - setPreferredSize(new Dimension(d.width - delta_wdith, d.height)); - LayoutUtils.layoutContainer(fother); - } + setPreferredSize(new Dimension(d.width - delta_wdith, d.height)); + LayoutUtils.layoutContainer(fother); + } } }); initFormParaComponent(); - } + } private void initFormParaComponent() { @@ -97,16 +96,16 @@ public class FormParaWidgetPane extends JPanel{ JPanel paraPane = new JPanel(new FlowLayout()); ToolBarButton paraButton = new paraButton(FormWidgetOption.PARAMETERCONTAINER); paraPane.add(paraButton); - add(createNormalCombinationPane(paraPane,Inter.getLocText("FR-Designer_Parameter"))); + add(createNormalCombinationPane(paraPane, Inter.getLocText("FR-Designer_Parameter"))); jSeparatorPara = createJSeparator(); add(jSeparatorPara); - + JPanel layoutPane = new JPanel(new FlowLayout()); - for(WidgetOption option : loadLayoutOptions()){ + for (WidgetOption option : loadLayoutOptions()) { layoutPane.add(new ToolBarButton(option)); } layoutPane.add(new ToolBarButton(FormWidgetOption.ELEMENTCASE)); - add(createNormalCombinationPane(layoutPane,Inter.getLocText("FR-Designer_Layout_Block_Blank"))); + add(createNormalCombinationPane(layoutPane, Inter.getLocText("FR-Designer_Layout_Block_Blank"))); jSeparatorLayout = createJSeparator(); add(jSeparatorLayout); @@ -114,8 +113,8 @@ public class FormParaWidgetPane extends JPanel{ int totalChartNums = loadChartOptions().length; if (totalChartNums > 0) { JPanel chartTypePane = new JPanel(new FlowLayout()); - for (int i = 0;i < commonChartNum ;i++) { - chartTypePane.add( new ToolBarButton(loadChartOptions()[i])); + for (int i = 0; i < commonChartNum; i++) { + chartTypePane.add(new ToolBarButton(loadChartOptions()[i])); } add(createChartCombinationPane(chartTypePane, Inter.getLocText("FR-Designer-Form-ToolBar_Chart"))); jSeparatorChart = createJSeparator(); @@ -123,115 +122,115 @@ public class FormParaWidgetPane extends JPanel{ } JPanel widgetPane = new JPanel(new FlowLayout()); - for (int i = 0;i < commonWidgetNum;i++) { + for (int i = 0; i < commonWidgetNum; i++) { widgetPane.add(new ToolBarButton(loadWidgetOptions()[i])); } widgetPane.add(createJSeparator(20)); loadPredefinedWidget(); - int num = Math.min(predifinedwidgeList.size(),preWidgetShowMaxNum); - for (int i = 0 ;i < num ;i++) { + int num = Math.min(predifinedwidgeList.size(), preWidgetShowMaxNum); + for (int i = 0; i < num; i++) { widgetPane.add(new ToolBarButton(predifinedwidgeList.get(i))); } add(createWidgetCombinationPane(widgetPane, Inter.getLocText("FR-Designer-Form-ToolBar_Widget"))); add(createJSeparator()); } - - private void loadPredefinedWidget() { - predifinedwidgeList.clear(); - if(designer != null) { - WidgetOption[] designerPre = designer.getDesignerMode().getPredefinedWidgetOptions(); - for(int i = 0; i < designerPre.length; i++) { - predifinedwidgeList.add(designerPre[i]); - } - } - WidgetManagerProvider mgr = WidgetManager.getProviderInstance(); - Iterator nameIt = mgr.getWidgetConfigNameIterator(); - while (nameIt.hasNext()) { - String name = nameIt.next(); - WidgetConfig widgetConfig = mgr.getWidgetConfig(name); - if (widgetConfig instanceof UserDefinedWidgetConfig) { - Widget widget = ((UserDefinedWidgetConfig) widgetConfig).getWidget(); - String widgetClassName = widget.getClass().getName(); - if (isButtonWidget(widgetClassName)) { - // ... - continue; - } - if (!XCreatorUtils.createXCreator(widget).canEnterIntoParaPane()){ + + private void loadPredefinedWidget() { + predifinedwidgeList.clear(); + if (designer != null) { + WidgetOption[] designerPre = designer.getDesignerMode().getPredefinedWidgetOptions(); + for (int i = 0; i < designerPre.length; i++) { + predifinedwidgeList.add(designerPre[i]); + } + } + WidgetManagerProvider mgr = WidgetManager.getProviderInstance(); + Iterator nameIt = mgr.getWidgetConfigNameIterator(); + while (nameIt.hasNext()) { + String name = nameIt.next(); + WidgetConfig widgetConfig = mgr.getWidgetConfig(name); + if (widgetConfig instanceof UserDefinedWidgetConfig) { + Widget widget = ((UserDefinedWidgetConfig) widgetConfig).getWidget(); + String widgetClassName = widget.getClass().getName(); + if (isButtonWidget(widgetClassName)) { + // ... + continue; + } + if (!XCreatorUtils.createXCreator(widget).canEnterIntoParaPane()) { //预定义控件工具栏这儿不显示工具栏中没有的预定义控件 continue; } - predifinedwidgeList.add(new UserDefinedWidgetOption(name)); - } - } - } + predifinedwidgeList.add(new UserDefinedWidgetOption(name)); + } + } + } private boolean isButtonWidget(String widgetClassName) { return widgetClassName.endsWith("DeleteRowButton") || widgetClassName.endsWith("AppendRowButton") || widgetClassName.endsWith("TreeNodeToogleButton"); } - private void setTarget(FormDesigner designer) { - if (designer == null) { - return; - } + private void setTarget(FormDesigner designer) { + if (designer == null) { + return; + } initFormParaComponent(); - } + } - private JPanel createNormalCombinationPane(JComponent jComponent,String typeName){ - JPanel reportPane = new JPanel(new BorderLayout(17,5)); - reportPane.add(jComponent,BorderLayout.CENTER); + private JPanel createNormalCombinationPane(JComponent jComponent, String typeName) { + JPanel reportPane = new JPanel(new BorderLayout(17, 5)); + reportPane.add(jComponent, BorderLayout.CENTER); JPanel labelPane = new JPanel(new BorderLayout()); - UILabel label = new UILabel(typeName,UILabel.CENTER); - if(ComparatorUtils.equals(Inter.getLocText("FR-Designer_Parameter"),typeName )){ + UILabel label = new UILabel(typeName, UILabel.CENTER); + if (ComparatorUtils.equals(Inter.getLocText("FR-Designer_Parameter"), typeName)) { paraLabel = label; } - labelPane.add(label,BorderLayout.CENTER); - reportPane.add(labelPane,BorderLayout.SOUTH); - reportPane.setPreferredSize(new Dimension((int)reportPane.getPreferredSize().getWidth(),(int)reportPane.getPreferredSize().getHeight())); + labelPane.add(label, BorderLayout.CENTER); + reportPane.add(labelPane, BorderLayout.SOUTH); + reportPane.setPreferredSize(new Dimension((int) reportPane.getPreferredSize().getWidth(), (int) reportPane.getPreferredSize().getHeight())); return reportPane; } - private JPanel createChartCombinationPane(JComponent jComponent,String typeName){ - JPanel chartPane = new JPanel(new BorderLayout(17,5)); + private JPanel createChartCombinationPane(JComponent jComponent, String typeName) { + JPanel chartPane = new JPanel(new BorderLayout(17, 5)); chartPane.add(jComponent, BorderLayout.CENTER); JPanel labelPane = new JPanel(new BorderLayout()); - labelPane.add(new UILabel(typeName,UILabel.CENTER),BorderLayout.CENTER); + labelPane.add(new UILabel(typeName, UILabel.CENTER), BorderLayout.CENTER); UIButton chartPopUpButton = createPopUpButton(); chartPopUpButton.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { - if(chartTypeWindow == null) { + if (chartTypeWindow == null) { JPanel componentsPara = new JPanel(new FlowLayout(FlowLayout.LEFT)); WidgetOption[] chartOptions = loadChartOptions(); for (WidgetOption chartOption : chartOptions) { - componentsPara.add( new ToolBarButton(chartOption)); + componentsPara.add(new ToolBarButton(chartOption)); } int x = commonChartNum * (widgetButtonWidth + smallGAP); - int y = (int)Math.ceil(chartOptions.length/((double)commonChartNum)) * (widgetButtonHeight + smallGAP); - componentsPara.setPreferredSize(new Dimension(x,y)); + int y = (int) Math.ceil(chartOptions.length / ((double) commonChartNum)) * (widgetButtonHeight + smallGAP); + componentsPara.setPreferredSize(new Dimension(x, y)); chartTypeWindow = new PopUpWindow(componentsPara, Inter.getLocText("FR-Designer-Form-ToolBar_Chart")); - chartTypeWindow.setLocation((int)jSeparatorLayout.getLocationOnScreen().getX() + 1, (int)jSeparatorLayout.getLocationOnScreen().getY()); + chartTypeWindow.setLocation((int) jSeparatorLayout.getLocationOnScreen().getX() + 1, (int) jSeparatorLayout.getLocationOnScreen().getY()); chartTypeWindow.setSize(chartTypeWindow.getPreferredSize()); } chartTypeWindow.setVisible(true); } }); - labelPane.add(chartPopUpButton,BorderLayout.EAST); - chartPane.add(labelPane,BorderLayout.SOUTH); + labelPane.add(chartPopUpButton, BorderLayout.EAST); + chartPane.add(labelPane, BorderLayout.SOUTH); return chartPane; } - private JPanel createWidgetCombinationPane(JComponent jComponent,String typeName){ - JPanel widgetPane = new JPanel(new BorderLayout(17,5)); - widgetPane.add(jComponent,BorderLayout.CENTER); + private JPanel createWidgetCombinationPane(JComponent jComponent, String typeName) { + JPanel widgetPane = new JPanel(new BorderLayout(17, 5)); + widgetPane.add(jComponent, BorderLayout.CENTER); JPanel labelPane = new JPanel(new BorderLayout()); - labelPane.add(new UILabel(typeName,UILabel.CENTER),BorderLayout.CENTER); + labelPane.add(new UILabel(typeName, UILabel.CENTER), BorderLayout.CENTER); UIButton chartPopUpButton = createPopUpButton(); chartPopUpButton.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { - JPanel widgetPane = new JPanel(new FlowLayout(FlowLayout.LEFT,0,0)); + JPanel widgetPane = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0)); loadPredefinedWidget(); int rowNum = calculateWidgetWindowRowNum(); JPanel westPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); @@ -239,27 +238,27 @@ public class FormParaWidgetPane extends JPanel{ westPanel.add(new ToolBarButton(o)); } int x = commonWidgetNum * (widgetButtonWidth + smallGAP); - westPanel.setPreferredSize(new Dimension(x,(int)(rowNum * westPanel.getPreferredSize().getHeight()))); + westPanel.setPreferredSize(new Dimension(x, (int) (rowNum * westPanel.getPreferredSize().getHeight()))); JPanel eastPane = new JPanel(new FlowLayout(FlowLayout.LEFT)); for (WidgetOption no : predifinedwidgeList) { eastPane.add(new ToolBarButton(no)); } int maxWidth = preWidgetShowMaxNum * (widgetButtonWidth + smallGAP); - int width = predifinedwidgeList.size() >= preWidgetShowMaxNum ? maxWidth:(int)eastPane.getPreferredSize().getWidth(); - eastPane.setPreferredSize(new Dimension(width,(int)(rowNum*eastPane.getPreferredSize().getHeight()))); + int width = predifinedwidgeList.size() >= preWidgetShowMaxNum ? maxWidth : (int) eastPane.getPreferredSize().getWidth(); + eastPane.setPreferredSize(new Dimension(width, (int) (rowNum * eastPane.getPreferredSize().getHeight()))); UIScrollPane eastScrollPane = new UIScrollPane(eastPane); eastScrollPane.setBorder(null); int maxHeight = preWidgetShowMaxRow * (widgetButtonHeight + smallGAP); - int height = predifinedwidgeList.size() >= preWidgetShowMaxNum * preWidgetShowMaxRow ? maxHeight : (int)eastPane.getPreferredSize().getHeight(); - width = predifinedwidgeList.size() >= preWidgetShowMaxNum * preWidgetShowMaxRow ? (int)eastPane.getPreferredSize().getWidth() + smallGAP + jsparatorWidth : (int)eastPane.getPreferredSize().getWidth(); - eastScrollPane.setPreferredSize(new Dimension(width,height)); + int height = predifinedwidgeList.size() >= preWidgetShowMaxNum * preWidgetShowMaxRow ? maxHeight : (int) eastPane.getPreferredSize().getHeight(); + width = predifinedwidgeList.size() >= preWidgetShowMaxNum * preWidgetShowMaxRow ? (int) eastPane.getPreferredSize().getWidth() + smallGAP + jsparatorWidth : (int) eastPane.getPreferredSize().getWidth(); + eastScrollPane.setPreferredSize(new Dimension(width, height)); widgetPane.add(westPanel); widgetPane.add(createJSeparator(height)); widgetPane.add(eastScrollPane); - widgetTypeWindow = new PopUpWindow( widgetPane, Inter.getLocText("FR-Designer-Form-ToolBar_Widget")); + widgetTypeWindow = new PopUpWindow(widgetPane, Inter.getLocText("FR-Designer-Form-ToolBar_Widget")); widgetTypeWindow.setSize(widgetTypeWindow.getPreferredSize()); if (jSeparatorChart != null) { widgetTypeWindow.setLocation((int) jSeparatorChart.getLocationOnScreen().getX() + 1, (int) jSeparatorChart.getLocationOnScreen().getY()); @@ -268,59 +267,60 @@ public class FormParaWidgetPane extends JPanel{ } }); - labelPane.add(chartPopUpButton,BorderLayout.EAST); - widgetPane.add(labelPane,BorderLayout.SOUTH); + labelPane.add(chartPopUpButton, BorderLayout.EAST); + widgetPane.add(labelPane, BorderLayout.SOUTH); return widgetPane; } - private int calculateWidgetWindowRowNum(){ + private int calculateWidgetWindowRowNum() { //向上取整 - int rowNum = (int)Math.ceil((double)predifinedwidgeList.size()/(double)preWidgetShowMaxNum); - rowNum = Math.max(rowNum,2); - rowNum = Math.min(rowNum,preWidgetShowMaxRow); + int rowNum = (int) Math.ceil((double) predifinedwidgeList.size() / (double) preWidgetShowMaxNum); + rowNum = Math.max(rowNum, 2); + rowNum = Math.min(rowNum, preWidgetShowMaxRow); return rowNum; } - private JSeparator createJSeparator(){ - JSeparator jSeparator = new JSeparator(SwingConstants.VERTICAL ); - jSeparator.setPreferredSize(new Dimension(jsparatorWidth,jsparatorHeight)); - return jSeparator; + private JSeparator createJSeparator() { + JSeparator jSeparator = new JSeparator(SwingConstants.VERTICAL); + jSeparator.setPreferredSize(new Dimension(jsparatorWidth, jsparatorHeight)); + return jSeparator; } - private JSeparator createJSeparator(double height){ - JSeparator jSeparator = new JSeparator(SwingConstants.VERTICAL ); - jSeparator.setPreferredSize(new Dimension(jsparatorWidth,(int)height)); - return jSeparator; + private JSeparator createJSeparator(double height) { + JSeparator jSeparator = new JSeparator(SwingConstants.VERTICAL); + jSeparator.setPreferredSize(new Dimension(jsparatorWidth, (int) height)); + return jSeparator; } - private UIButton createPopUpButton(){ + private UIButton createPopUpButton() { UIButton popUpButton = new UIButton(BaseUtils.readIcon("com/fr/design/images/buttonicon/arrowdown.png")); popUpButton.set4ToolbarButton(); return popUpButton; } - private UIButton createPopDownButton(){ + private UIButton createPopDownButton() { UIButton popUpButton = new UIButton(BaseUtils.readIcon("com/fr/design/images/buttonicon/arrowup.png")); popUpButton.set4ToolbarButton(); return popUpButton; } - private class paraButton extends ToolBarButton{ - public paraButton(WidgetOption no){ + private class paraButton extends ToolBarButton { + public paraButton(WidgetOption no) { super(no); this.setDisabledIcon(BaseUtils.readIcon("/com/fr/web/images/form/resources/layout_parameter2.png")); - if(designer != null){ + if (designer != null) { this.setEnabled(designer.getParaComponent() == null); } } + public void mouseDragged(MouseEvent e) { - if (designer.getParaComponent() != null){ - return; + if (designer.getParaComponent() != null) { + return; } designer.addParaComponent(); - JPanel pane =FormWidgetDetailPane.getInstance(designer); + JPanel pane = FormWidgetDetailPane.getInstance(designer); EastRegionContainerPane.getInstance().replaceDownPane(pane); this.setEnabled(false); @@ -334,7 +334,7 @@ public class FormParaWidgetPane extends JPanel{ public void setEnabled(boolean b) { super.setEnabled(b); - paraLabel.setForeground(b ? Color.BLACK : new Color(198,198,198)); + paraLabel.setForeground(b ? Color.BLACK : new Color(198, 198, 198)); } } @@ -347,8 +347,9 @@ public class FormParaWidgetPane extends JPanel{ } /** - * 响应界面改变事件 - * @param evt 事件 + * 响应界面改变事件 + * + * @param evt 事件 */ public void fireCreatorModified(DesignerEvent evt) { button.setEnabled(designer.getParaComponent() == null); @@ -356,14 +357,13 @@ public class FormParaWidgetPane extends JPanel{ } - private class PopUpWindow extends JWindow { private JPanel northPane; private String typeName; private int LineWidth = 5; private int BarWidth = 10; - public PopUpWindow(JPanel northPane,String typeName){ + public PopUpWindow(JPanel northPane, String typeName) { super(); this.northPane = northPane; this.typeName = typeName; @@ -376,17 +376,14 @@ public class FormParaWidgetPane extends JPanel{ public void eventDispatched(AWTEvent event) { if (event instanceof MouseEvent) { MouseEvent mv = (MouseEvent) event; - Point point = mv.getLocationOnScreen(); - double endX = PopUpWindow.this.getX() + northPane.getWidth() + LineWidth; - double startX = endX - BarWidth; - double startY = PopUpWindow.this.getY() + northPane.getY(); - double endY = startY + northPane.getHeight(); - boolean dragBar = startX < point.getX() && endX > point.getX() && endY > point.getY(); - if (!dragBar && mv.getClickCount() > 0 && mv.getID() != MouseEvent.MOUSE_RELEASED) { - if(!ComparatorUtils.equals(mv.getSource(), PopUpWindow.this)) { - if (!OperatingSystem.isMacOS()) { - PopUpWindow.this.setVisible(false); - } + if (mv.getClickCount() > 0) { + Point point = new Point((int) (mv.getLocationOnScreen().getX()), (int) mv.getLocationOnScreen().getY()); + // 直接contains在mac下,点击内部也会消失 + Dimension d = PopUpWindow.this.getSize(); + Point p = PopUpWindow.this.getLocation(); + Rectangle rect = new Rectangle(p, d); + if (!rect.contains(point)) { + PopUpWindow.this.setVisible(false); } } } @@ -398,9 +395,9 @@ public class FormParaWidgetPane extends JPanel{ JPanel rootPane = new EditorChoosePane(); JPanel contentPane = new JPanel(); contentPane.setLayout(new BorderLayout(17, 0)); - contentPane.add(northPane,BorderLayout.CENTER); + contentPane.add(northPane, BorderLayout.CENTER); JPanel labelPane = new JPanel(new BorderLayout()); - labelPane.add(new UILabel(typeName,UILabel.CENTER),BorderLayout.CENTER); + labelPane.add(new UILabel(typeName, UILabel.CENTER), BorderLayout.CENTER); JButton popUpButton = createPopDownButton(); popUpButton.addMouseListener(new MouseAdapter() { @Override @@ -409,8 +406,8 @@ public class FormParaWidgetPane extends JPanel{ } }); labelPane.add(popUpButton, BorderLayout.EAST); - contentPane.add(labelPane,BorderLayout.SOUTH); - rootPane.add(contentPane,BorderLayout.CENTER); + contentPane.add(labelPane, BorderLayout.SOUTH); + rootPane.add(contentPane, BorderLayout.CENTER); return rootPane; } @@ -421,31 +418,31 @@ public class FormParaWidgetPane extends JPanel{ private class EditorChoosePane extends JPanel { public EditorChoosePane() { super(); - ((FlowLayout)this.getLayout()).setVgap(1); + ((FlowLayout) this.getLayout()).setVgap(1); } @Override public void paintComponent(Graphics g) { Rectangle r = this.getBounds(); g.setColor(UIConstants.NORMAL_BACKGROUND); - g.fillRoundRect(r.x, r.y, r.width, r.height,0,0); + g.fillRoundRect(r.x, r.y, r.width, r.height, 0, 0); g.setColor(UIConstants.LINE_COLOR); - g.drawLine(r.x, r.y, r.x, r.y+r.height); - g.drawLine(r.x, r.y+r.height-1, r.x+r.width-1, r.y+r.height-1); - g.drawLine(r.x+r.width-1, r.y, r.x+r.width-1, r.y+r.height-1); + g.drawLine(r.x, r.y, r.x, r.y + r.height); + g.drawLine(r.x, r.y + r.height - 1, r.x + r.width - 1, r.y + r.height - 1); + g.drawLine(r.x + r.width - 1, r.y, r.x + r.width - 1, r.y + r.height - 1); } } private WidgetOption[] loadWidgetOptions() { if (widgetOptions == null) { - widgetOptions = (WidgetOption[])ArrayUtils.addAll(WidgetOption.getFormWidgetIntance(), ExtraDesignClassManager.getInstance().getFormWidgetOptions()); + widgetOptions = (WidgetOption[]) ArrayUtils.addAll(WidgetOption.getFormWidgetIntance(), ExtraDesignClassManager.getInstance().getFormWidgetOptions()); } return widgetOptions; } private WidgetOption[] loadLayoutOptions() { if (layoutOptions == null) { - layoutOptions = (WidgetOption[])ArrayUtils.addAll(FormWidgetOption.getFormLayoutInstance(), ExtraDesignClassManager.getInstance().getFormWidgetContainerOptions()); + layoutOptions = (WidgetOption[]) ArrayUtils.addAll(FormWidgetOption.getFormLayoutInstance(), ExtraDesignClassManager.getInstance().getFormWidgetContainerOptions()); } return layoutOptions; } From 51c7715dc123f523f4ba1822d96ff1262018960c Mon Sep 17 00:00:00 2001 From: vito Date: Fri, 16 Dec 2016 10:02:14 +0800 Subject: [PATCH 005/343] pmd --- .../src/com/fr/design/mainframe/FormParaWidgetPane.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/designer_form/src/com/fr/design/mainframe/FormParaWidgetPane.java b/designer_form/src/com/fr/design/mainframe/FormParaWidgetPane.java index 3423c54cd..58db063bc 100644 --- a/designer_form/src/com/fr/design/mainframe/FormParaWidgetPane.java +++ b/designer_form/src/com/fr/design/mainframe/FormParaWidgetPane.java @@ -45,7 +45,7 @@ public class FormParaWidgetPane extends JPanel { //预定义控件最多显示20行 private int preWidgetShowMaxRow = 20; //显示8个图表组件 - private static final int commonChartNum = 8; + private static final int COMMON_CHAR_NUM = 8; //显示10个普通控件 private int commonWidgetNum = 10; private JSeparator jSeparatorPara; @@ -113,7 +113,7 @@ public class FormParaWidgetPane extends JPanel { int totalChartNums = loadChartOptions().length; if (totalChartNums > 0) { JPanel chartTypePane = new JPanel(new FlowLayout()); - for (int i = 0; i < commonChartNum; i++) { + for (int i = 0; i < COMMON_CHAR_NUM; i++) { chartTypePane.add(new ToolBarButton(loadChartOptions()[i])); } add(createChartCombinationPane(chartTypePane, Inter.getLocText("FR-Designer-Form-ToolBar_Chart"))); @@ -206,8 +206,8 @@ public class FormParaWidgetPane extends JPanel { for (WidgetOption chartOption : chartOptions) { componentsPara.add(new ToolBarButton(chartOption)); } - int x = commonChartNum * (widgetButtonWidth + smallGAP); - int y = (int) Math.ceil(chartOptions.length / ((double) commonChartNum)) * (widgetButtonHeight + smallGAP); + int x = COMMON_CHAR_NUM * (widgetButtonWidth + smallGAP); + int y = (int) Math.ceil(chartOptions.length / ((double) COMMON_CHAR_NUM)) * (widgetButtonHeight + smallGAP); componentsPara.setPreferredSize(new Dimension(x, y)); chartTypeWindow = new PopUpWindow(componentsPara, Inter.getLocText("FR-Designer-Form-ToolBar_Chart")); chartTypeWindow.setLocation((int) jSeparatorLayout.getLocationOnScreen().getX() + 1, (int) jSeparatorLayout.getLocationOnScreen().getY()); From 96f01dc0b733ad07d973d921d26824730bffc573 Mon Sep 17 00:00:00 2001 From: vito Date: Fri, 16 Dec 2016 10:18:02 +0800 Subject: [PATCH 006/343] =?UTF-8?q?REPORT-1222=20-=20=E8=A1=A8=E5=8D=95?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=E5=9B=BE=E8=A1=A8=E6=B5=AE=E5=8A=A8=E9=9D=A2?= =?UTF-8?q?=E6=9D=BF=E4=B8=8D=E9=9A=8F=E4=B8=BB=E7=AA=97=E5=8F=A3=E5=8F=98?= =?UTF-8?q?=E5=8C=96=E4=BD=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/FormParaWidgetPane.java | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/designer_form/src/com/fr/design/mainframe/FormParaWidgetPane.java b/designer_form/src/com/fr/design/mainframe/FormParaWidgetPane.java index 58db063bc..6187bbd48 100644 --- a/designer_form/src/com/fr/design/mainframe/FormParaWidgetPane.java +++ b/designer_form/src/com/fr/design/mainframe/FormParaWidgetPane.java @@ -200,19 +200,17 @@ public class FormParaWidgetPane extends JPanel { chartPopUpButton.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { - if (chartTypeWindow == null) { - JPanel componentsPara = new JPanel(new FlowLayout(FlowLayout.LEFT)); - WidgetOption[] chartOptions = loadChartOptions(); - for (WidgetOption chartOption : chartOptions) { - componentsPara.add(new ToolBarButton(chartOption)); - } - int x = COMMON_CHAR_NUM * (widgetButtonWidth + smallGAP); - int y = (int) Math.ceil(chartOptions.length / ((double) COMMON_CHAR_NUM)) * (widgetButtonHeight + smallGAP); - componentsPara.setPreferredSize(new Dimension(x, y)); - chartTypeWindow = new PopUpWindow(componentsPara, Inter.getLocText("FR-Designer-Form-ToolBar_Chart")); - chartTypeWindow.setLocation((int) jSeparatorLayout.getLocationOnScreen().getX() + 1, (int) jSeparatorLayout.getLocationOnScreen().getY()); - chartTypeWindow.setSize(chartTypeWindow.getPreferredSize()); + JPanel componentsPara = new JPanel(new FlowLayout(FlowLayout.LEFT)); + WidgetOption[] chartOptions = loadChartOptions(); + for (WidgetOption chartOption : chartOptions) { + componentsPara.add(new ToolBarButton(chartOption)); } + int x = COMMON_CHAR_NUM * (widgetButtonWidth + smallGAP); + int y = (int) Math.ceil(chartOptions.length / ((double) COMMON_CHAR_NUM)) * (widgetButtonHeight + smallGAP); + componentsPara.setPreferredSize(new Dimension(x, y)); + chartTypeWindow = new PopUpWindow(componentsPara, Inter.getLocText("FR-Designer-Form-ToolBar_Chart")); + chartTypeWindow.setLocation((int) jSeparatorLayout.getLocationOnScreen().getX() + 1, (int) jSeparatorLayout.getLocationOnScreen().getY()); + chartTypeWindow.setSize(chartTypeWindow.getPreferredSize()); chartTypeWindow.setVisible(true); } }); From b146c1d20c2afa38e99f67a20bd46c4d3b307577 Mon Sep 17 00:00:00 2001 From: PanLi320 <854954082@qq.com> Date: Fri, 23 Dec 2016 14:51:07 +0800 Subject: [PATCH 007/343] =?UTF-8?q?REPORT-1287=20=E5=B1=9E=E6=80=A7?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E6=95=B0=E7=BB=84=E4=BB=A3=E7=A0=81=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit rt,修复了。 --- .../src/com/fr/design/designer/creator/XElementCase.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/creator/XElementCase.java b/designer_form/src/com/fr/design/designer/creator/XElementCase.java index 543762ba2..a932548cc 100644 --- a/designer_form/src/com/fr/design/designer/creator/XElementCase.java +++ b/designer_form/src/com/fr/design/designer/creator/XElementCase.java @@ -100,7 +100,7 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme .setI18NName(Inter.getLocText("Form-EC_toolbar")) .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced") }; - resolveCompatible(propertyTableEditor); + propertyTableEditor = resolveCompatible(propertyTableEditor); FormElementCaseEditorProcessor processor = ExtraDesignClassManager.getInstance().getSingle(FormElementCaseEditorProcessor.MARK_STRING); if (processor == null) { return propertyTableEditor; @@ -122,7 +122,7 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme } - private void resolveCompatible (CRPropertyDescriptor[] propertyTableEditor) { + private CRPropertyDescriptor[] resolveCompatible (CRPropertyDescriptor[] propertyTableEditor) { //这边有个插件兼容问题,之后还是要改回process才行 Set set = ExtraDesignClassManager.getInstance().getArray(AbstractFormElementCaseEditorProvider.MARK_STRING); for (FormElementCaseEditorProvider provider : set) { @@ -135,6 +135,7 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme PropertyDescriptor[] extraEditor = provider.createPropertyDescriptor(this.data.getClass(), formProvider, elementCaseEditorProvider); propertyTableEditor = (CRPropertyDescriptor[]) ArrayUtils.addAll(propertyTableEditor, extraEditor); } + return propertyTableEditor; } @Override From 1eddab8678cb6af5cf1be9afd4eb51646ff65465 Mon Sep 17 00:00:00 2001 From: frharry Date: Mon, 26 Dec 2016 09:49:11 +0800 Subject: [PATCH 008/343] add interface --- .../com/fr/design/webattr/EditToolBar.java | 22 +++++++++- .../fun/ExtraButtonToolBarProvider.java | 44 +++++++++++++++++++ .../AbstractExtraButtonToolBarProvider.java | 19 ++++++++ 3 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 designer_base/src/com/fr/design/fun/ExtraButtonToolBarProvider.java create mode 100644 designer_base/src/com/fr/design/fun/impl/AbstractExtraButtonToolBarProvider.java diff --git a/designer/src/com/fr/design/webattr/EditToolBar.java b/designer/src/com/fr/design/webattr/EditToolBar.java index 58f455870..712278f62 100644 --- a/designer/src/com/fr/design/webattr/EditToolBar.java +++ b/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.DialogActionAdapter; import com.fr.design.fun.ExportToolBarProvider; +import com.fr.design.fun.ExtraButtonToolBarProvider; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.ilable.UILabel; @@ -29,6 +30,7 @@ import com.fr.form.ui.Widget; import com.fr.form.ui.WidgetManager; import com.fr.general.Background; import com.fr.general.Inter; +import com.fr.plugin.weixin.send.SendWeixinButton; import com.fr.report.web.button.Export; import com.fr.report.web.button.PDFPrint; import com.fr.report.web.button.Print; @@ -326,7 +328,9 @@ public class EditToolBar extends BasicPane { private IconDefinePane iconPane; private UIButton button; private JavaScriptActionPane javaScriptPane; - private ExportToolBarProvider[] exportToolBarProviders; + private ExportToolBarProvider[] exportToolBarProviders; + + private ExtraButtonToolBarProvider[] extraButtonToolBarProviders; private ChangeListener changeListener = new ChangeListener() { public void stateChanged(ChangeEvent e) { @@ -386,6 +390,12 @@ public class EditToolBar extends BasicPane { centerPane.add(getCpane(), "appendcount"); centerPane.add(getSubmitPane(), "submit"); + Set extraButtonSet = ExtraDesignClassManager.getInstance().getArray(ExtraButtonToolBarProvider.XML_TAG); + extraButtonToolBarProviders = extraButtonSet.toArray(new ExtraButtonToolBarProvider[set.size()]); + for(int i=0; i Date: Mon, 26 Dec 2016 10:01:34 +0800 Subject: [PATCH 009/343] update EditToolBar --- designer/src/com/fr/design/webattr/EditToolBar.java | 1 - 1 file changed, 1 deletion(-) diff --git a/designer/src/com/fr/design/webattr/EditToolBar.java b/designer/src/com/fr/design/webattr/EditToolBar.java index 712278f62..848e768bb 100644 --- a/designer/src/com/fr/design/webattr/EditToolBar.java +++ b/designer/src/com/fr/design/webattr/EditToolBar.java @@ -30,7 +30,6 @@ import com.fr.form.ui.Widget; import com.fr.form.ui.WidgetManager; import com.fr.general.Background; import com.fr.general.Inter; -import com.fr.plugin.weixin.send.SendWeixinButton; import com.fr.report.web.button.Export; import com.fr.report.web.button.PDFPrint; import com.fr.report.web.button.Print; From 947f14e5ea0c9e2d44939fad024d35198ad8bcd6 Mon Sep 17 00:00:00 2001 From: frharry Date: Mon, 26 Dec 2016 10:05:33 +0800 Subject: [PATCH 010/343] update interface.xml_tag --- .../src/com/fr/design/fun/ExtraButtonToolBarProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/fun/ExtraButtonToolBarProvider.java b/designer_base/src/com/fr/design/fun/ExtraButtonToolBarProvider.java index 6e503b2ec..160dfa203 100644 --- a/designer_base/src/com/fr/design/fun/ExtraButtonToolBarProvider.java +++ b/designer_base/src/com/fr/design/fun/ExtraButtonToolBarProvider.java @@ -13,7 +13,7 @@ import java.awt.*; */ public interface ExtraButtonToolBarProvider extends Mutable { - String XML_TAG = "ButtonToolBarProvider"; + String XML_TAG = "ExtraButtonToolBarProvider"; int CURRENT_LEVEL = 1; From e1842c3665e2ee28a9e6f2dd5f5b0ba39b978d11 Mon Sep 17 00:00:00 2001 From: frharry Date: Mon, 26 Dec 2016 10:30:47 +0800 Subject: [PATCH 011/343] remove extraButtonPorviders --- .../src/com/fr/design/webattr/EditToolBar.java | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/designer/src/com/fr/design/webattr/EditToolBar.java b/designer/src/com/fr/design/webattr/EditToolBar.java index 848e768bb..b9ce178fa 100644 --- a/designer/src/com/fr/design/webattr/EditToolBar.java +++ b/designer/src/com/fr/design/webattr/EditToolBar.java @@ -329,8 +329,6 @@ public class EditToolBar extends BasicPane { private JavaScriptActionPane javaScriptPane; private ExportToolBarProvider[] exportToolBarProviders; - private ExtraButtonToolBarProvider[] extraButtonToolBarProviders; - private ChangeListener changeListener = new ChangeListener() { public void stateChanged(ChangeEvent e) { if (isVerify.isSelected()) { @@ -390,9 +388,8 @@ public class EditToolBar extends BasicPane { centerPane.add(getSubmitPane(), "submit"); Set extraButtonSet = ExtraDesignClassManager.getInstance().getArray(ExtraButtonToolBarProvider.XML_TAG); - extraButtonToolBarProviders = extraButtonSet.toArray(new ExtraButtonToolBarProvider[set.size()]); - for(int i=0; i extraButtonSet = ExtraDesignClassManager.getInstance().getArray(ExtraButtonToolBarProvider.XML_TAG); + for(ExtraButtonToolBarProvider provider : extraButtonSet){ + provider.populate(widget, card, centerPane); } } @@ -626,8 +624,9 @@ public class EditToolBar extends BasicPane { updateDefault(); } - for(int i=0; i extraButtonSet = ExtraDesignClassManager.getInstance().getArray(ExtraButtonToolBarProvider.XML_TAG); + for(ExtraButtonToolBarProvider provider : extraButtonSet){ + provider.update(widget); } return widget; From 1731abb03a8af5a7f78a0eef20e7d56c7ef953d1 Mon Sep 17 00:00:00 2001 From: frharry Date: Mon, 26 Dec 2016 11:17:00 +0800 Subject: [PATCH 012/343] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/webattr/EditToolBar.java | 50 +++++++++---------- .../fun/ExtraButtonToolBarProvider.java | 7 +-- 2 files changed, 27 insertions(+), 30 deletions(-) diff --git a/designer/src/com/fr/design/webattr/EditToolBar.java b/designer/src/com/fr/design/webattr/EditToolBar.java index b9ce178fa..c3ed3b150 100644 --- a/designer/src/com/fr/design/webattr/EditToolBar.java +++ b/designer/src/com/fr/design/webattr/EditToolBar.java @@ -387,10 +387,10 @@ public class EditToolBar extends BasicPane { centerPane.add(getCpane(), "appendcount"); centerPane.add(getSubmitPane(), "submit"); - Set extraButtonSet = ExtraDesignClassManager.getInstance().getArray(ExtraButtonToolBarProvider.XML_TAG); - for(ExtraButtonToolBarProvider provider : extraButtonSet){ - provider.updateCenterPane(centerPane); - } + Set extraButtonSet = ExtraDesignClassManager.getInstance().getArray(ExtraButtonToolBarProvider.XML_TAG); + for (ExtraButtonToolBarProvider provider : extraButtonSet) { + provider.updateCenterPane(centerPane); + } this.add(centerPane, BorderLayout.CENTER); } @@ -534,17 +534,17 @@ public class EditToolBar extends BasicPane { populateCustomToolBarButton(); } - Set extraButtonSet = ExtraDesignClassManager.getInstance().getArray(ExtraButtonToolBarProvider.XML_TAG); - for(ExtraButtonToolBarProvider provider : extraButtonSet){ - provider.populate(widget, card, centerPane); - } - } - + Set extraButtonSet = ExtraDesignClassManager.getInstance().getArray(ExtraButtonToolBarProvider.XML_TAG); + for (ExtraButtonToolBarProvider provider : extraButtonSet) { + provider.populate(widget, card, centerPane); + } + } + private void populateAppendColumnRow(){ card.show(centerPane, "appendcount"); count.setValue(((AppendColumnRow) widget).getCount()); } - + private void populateExport(){ card.show(centerPane, "export"); Export export = (Export) widget; @@ -560,7 +560,7 @@ public class EditToolBar extends BasicPane { } } } - + private void populateCustomToolBarButton(){ card.show(centerPane, "custom"); CustomToolBarButton customToolBarButton = (CustomToolBarButton) widget; @@ -568,7 +568,7 @@ public class EditToolBar extends BasicPane { this.javaScriptPane.populateBean(customToolBarButton.getJSImpl()); } } - + private void populateSubmit(){ card.show(centerPane, "submit"); Submit submit = ((Submit) widget); @@ -576,13 +576,13 @@ public class EditToolBar extends BasicPane { this.failSubmit.setSelected(submit.isFailVerifySubmit()); this.isCurSheet.setSelected(submit.isOnlySubmitSelect()); } - + private void populatePDFPrint(){ card.show(centerPane, "pdfprint"); PDFPrint pdfPrint = (PDFPrint) widget; this.isPopup.setSelected(pdfPrint.isPopup()); } - + private void populatePrint(){ card.show(centerPane, "print"); Print print = (Print) widget; @@ -591,7 +591,7 @@ public class EditToolBar extends BasicPane { this.flashPrint.setSelected(print.isFlashPrint()); this.serverPrint.setSelected(print.isServerPrint()); } - + private void populateDefault(){ Button button = (Button) widget; this.icon.setSelected(button.isShowIcon()); @@ -602,7 +602,7 @@ public class EditToolBar extends BasicPane { /** * 更新 - * + * * @return 对应组件 */ public Widget update() { @@ -624,28 +624,28 @@ public class EditToolBar extends BasicPane { updateDefault(); } - Set extraButtonSet = ExtraDesignClassManager.getInstance().getArray(ExtraButtonToolBarProvider.XML_TAG); - for(ExtraButtonToolBarProvider provider : extraButtonSet){ - provider.update(widget); - } + Set extraButtonSet = ExtraDesignClassManager.getInstance().getArray(ExtraButtonToolBarProvider.XML_TAG); + for (ExtraButtonToolBarProvider provider : extraButtonSet) { + provider.update(widget); + } return widget; } - + private void updateDefault(){ ((Button) widget).setShowIcon(this.icon.isSelected()); ((Button) widget).setShowText(this.text.isSelected()); ((Button) widget).setText(this.nameField.getText()); ((Button) widget).setIconName(this.iconPane.update()); } - + private void updateSubmit(){ Submit submit = ((Submit) widget); submit.setVerify(this.isVerify.isSelected()); submit.setFailVerifySubmit(this.failSubmit.isSelected()); submit.setOnlySubmitSelect(this.isCurSheet.isSelected()); } - + private void updatePrint(){ Print print = (Print) widget; print.setAppletPrint(this.appletPrint.isSelected()); @@ -653,7 +653,7 @@ public class EditToolBar extends BasicPane { print.setPDFPrint(this.pdfPrint.isSelected()); print.setServerPrint(this.serverPrint.isSelected()); } - + private void updateExport(){ Export export = (Export) widget; export.setPdfAvailable(this.pdf.isSelected()); diff --git a/designer_base/src/com/fr/design/fun/ExtraButtonToolBarProvider.java b/designer_base/src/com/fr/design/fun/ExtraButtonToolBarProvider.java index 160dfa203..09bff1f1a 100644 --- a/designer_base/src/com/fr/design/fun/ExtraButtonToolBarProvider.java +++ b/designer_base/src/com/fr/design/fun/ExtraButtonToolBarProvider.java @@ -8,7 +8,6 @@ import java.awt.*; /** * 报表工具栏设计器端拓展,用于配置按钮额外属性 - * * Created by harry on 2016-12-23. */ public interface ExtraButtonToolBarProvider extends Mutable { @@ -18,7 +17,6 @@ public interface ExtraButtonToolBarProvider extends Mutable { int CURRENT_LEVEL = 1; /** - * * 用于添加属性面板 * * @param centerPane 面板 @@ -26,11 +24,10 @@ public interface ExtraButtonToolBarProvider extends Mutable { void updateCenterPane(JPanel centerPane); /** - * * 更新界面 * - * @param widget 控件 - * @param card 卡片布局 + * @param widget 控件 + * @param card 卡片布局 * @param centerPane 面板 */ void populate(Widget widget, CardLayout card, JPanel centerPane); From 94812bbd237a643e296a77ff4ce039947be99716 Mon Sep 17 00:00:00 2001 From: frharry Date: Mon, 26 Dec 2016 14:36:56 +0800 Subject: [PATCH 013/343] =?UTF-8?q?=E8=B0=83=C3=A6=C2=95update?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer/src/com/fr/design/webattr/EditToolBar.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer/src/com/fr/design/webattr/EditToolBar.java b/designer/src/com/fr/design/webattr/EditToolBar.java index c3ed3b150..ac1295934 100644 --- a/designer/src/com/fr/design/webattr/EditToolBar.java +++ b/designer/src/com/fr/design/webattr/EditToolBar.java @@ -200,7 +200,7 @@ public class EditToolBar extends BasicPane { toolBarButton.setWidget(widget); if (widget instanceof Button) { String iconname = ((Button) widget).getIconName(); - if (!StringUtils.isBlank(iconname)) { + if (StringUtils.isNotBlank(iconname)) { Image iimage = WidgetManager.getProviderInstance().getIconManager().getIconImage(iconname); toolBarButton.setIcon(new ImageIcon(iimage)); } From c52ea2a287b4c21c4ea322643960a909210d236d Mon Sep 17 00:00:00 2001 From: kerry Date: Wed, 28 Dec 2016 14:25:09 +0800 Subject: [PATCH 014/343] =?UTF-8?q?REPORT-979=20=E6=97=A5=E6=96=87?= =?UTF-8?q?=E7=A4=BE=E5=8C=BA=EF=BC=8C=E9=A1=B6=E9=83=A8=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E6=A0=8F=E5=88=A0=E9=99=A4=E7=A4=BE=E5=8C=BA=E4=B8=80=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java b/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java index a5a3b9499..b0a9ba166 100644 --- a/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java +++ b/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java @@ -148,7 +148,7 @@ public abstract class ToolBarMenuDock { public void addCommunityMenuDef(java.util.List menuList){ Locale locale = FRContext.getLocale(); - Locale [] locales =supportCommunityLocales(); + Locale [] locales = supportCommunityLocales(); for(int i = 0; i < locales.length; i++) { if(locale.equals(locales[i])){ menuList.add(createCommunityMenuDef()); @@ -160,9 +160,8 @@ public abstract class ToolBarMenuDock { public Locale[] supportCommunityLocales() { return new Locale[]{ Locale.CHINA, - Locale.JAPAN, Locale.TAIWAN, - Locale.US, + Locale.US }; } From b6463754caec344f98f488d15ec9b22e2e2d7df6 Mon Sep 17 00:00:00 2001 From: plough Date: Wed, 28 Dec 2016 20:14:14 +0800 Subject: [PATCH 015/343] =?UTF-8?q?REPORT-1298=20=E6=8A=A5=E8=A1=A8?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E5=9B=BD=E9=99=85=E5=8C=96bug=E5=BE=85?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=EF=BC=8850=E5=A4=84=EF=BC=89=3D=E3=80=8B?= =?UTF-8?q?=E7=AC=AC69?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/webattr/ReportWebWidgetConstants.java | 6 +++--- designer_base/src/com/fr/design/locale/designer.properties | 3 +++ .../src/com/fr/design/locale/designer_en_US.properties | 3 +++ .../src/com/fr/design/locale/designer_ja_JP.properties | 5 ++++- .../src/com/fr/design/locale/designer_ko_KR.properties | 5 ++++- .../src/com/fr/design/locale/designer_zh_CN.properties | 3 +++ .../src/com/fr/design/locale/designer_zh_TW.properties | 3 +++ 7 files changed, 23 insertions(+), 5 deletions(-) diff --git a/designer/src/com/fr/design/webattr/ReportWebWidgetConstants.java b/designer/src/com/fr/design/webattr/ReportWebWidgetConstants.java index 2e01bac09..22d398d3e 100644 --- a/designer/src/com/fr/design/webattr/ReportWebWidgetConstants.java +++ b/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); // 导出成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); // 导出成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); // 导出成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); // 导出成Word diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 9a0b410ee..1b9e5506d 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -489,3 +489,6 @@ FR-Designer-LayerPageReport_Define_PageQuerySQL= FR-Designer_Event= 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 diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index d1f92857a..962855514 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -489,3 +489,6 @@ FR-Designer_Event=Event FR-Designer_Properties=Properties FR-Designer_Permissions_Edition=Permissions Edition FR-Designer_Permission_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 diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index c4166911a..ec280ecaf 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -320,7 +320,7 @@ FR-Designer_Show_Text=\u30DC\u30BF\u30F3\u540D\u524D\u3092\u8868\u793A FR-Designer_User_Defined_Event=\u30AB\u30B9\u30BF\u30DE\u30A4\u30BA\u4E8B\u4EF6 FR-Designer_Output_PDF=PDF\u30A2\u30A6\u30C8\u30D7\u30C3\u30C8 FR-Designer_Output_Word=Word\u30A2\u30A6\u30C8\u30D7\u30C3\u30C8 -FR-Designer_Image=\u30A4\u30E1\u30FC\u30B8 +FR-Designer_Image=\u753B\u50CF\uFF08PNG\uFF09 FR-Designer_Flash_Print=Flash\u30D7\u30EA\u30F3\u30C8 FR-Designer_PDF_Print=PDF\u30D7\u30EA\u30F3\u30C8 FR-Designer_Applet_Print=\u30A2\u30D7\u30EC\u30C3\u30C8\u5370\u5237 @@ -466,3 +466,6 @@ FR-Designer_Is_Share_DBTableData=\u5171\u6709\u30C7\u30FC\u30BF\u30BB\u30C3\u30C FR-Designer_Event= FR-Designer_Properties= 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 diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index ced78b1cf..99ed34dc5 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -461,4 +461,7 @@ FR-Designer-LayerPageReport_PageQuery=\uD398\uC774\uC9C0\uB098\uB204\uAE30\uCC3E FR-Designer-LayerPageReport_Define_PageQuerySQL=\uC815\uC758\uD398\uC774\uC9C0\uB098\uB204\uAE30\uCC3E\uC544\uBCF4\uAE30sql FR-Designer_Event= FR-Designer_Properties= -FR-Designer_Permissions_Edition=\uAD8C\uD55C\uD3B8\uC9D1 \ No newline at end of file +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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 53186b075..584ea5a77 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -492,3 +492,6 @@ FR-Designer_Is_Share_DBTableData=\u5171\u4EAB\u6570\u636E\u96C6 FR-Designer_Event=\u4E8B\u4EF6 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 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index e4a2718a4..c46b4f83d 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -480,3 +480,6 @@ FR-Designer_Is_Share_DBTableData=\u662F\u5426\u5171\u4EAB\u8CC7\u6599\u96C6 FR-Designer_Properties=\u5C6C\u6027 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 From d16badad3b09ef058abd6efbdde067ec7a7bd55c Mon Sep 17 00:00:00 2001 From: Fangjie Hu Date: Fri, 30 Dec 2016 11:52:10 +0800 Subject: [PATCH 016/343] =?UTF-8?q?=E4=B8=8B=E6=8B=89=E6=A1=86=E9=87=8D?= =?UTF-8?q?=E6=9E=84=E6=97=B6=EF=BC=8C=E4=B8=8D=E8=83=BD=E8=A7=A6=E5=8F=91?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=8A=A8=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/chart/gui/ChartTypePane.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypePane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypePane.java index a3a028ef8..172d040f3 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypePane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypePane.java @@ -206,6 +206,8 @@ public class ChartTypePane extends AbstractChartAttrPane{ } //第一步就是重构cardNames cardNames = ChartTypeInterfaceManager.getInstance().getTitle4PopupWindow(chartID); + //下拉框重构开始。为了防止重构是触发update + ((FlexibleComboBox)jcb).setItemEvenType(ItemEventType.REACTOR); //重构下拉框选项 reactorComboBox(); //重新选择选中的下拉项 @@ -213,6 +215,8 @@ public class ChartTypePane extends AbstractChartAttrPane{ String plotID = chart.getPlot().getPlotID(); Object item = ChartTypeInterfaceManager.getInstance().getTitle4PopupWindow(chartID, plotID); jcb.setSelectedItem(item); + //下拉框重构结束 + ((FlexibleComboBox)jcb).setItemEvenType(ItemEventType.DEFAULT); //重新选中 checkPlotPane(); } @@ -223,13 +227,10 @@ public class ChartTypePane extends AbstractChartAttrPane{ } private void reactorComboBox() { - FlexibleComboBox fcb = (FlexibleComboBox)jcb; - fcb.setItemEvenType(ItemEventType.REACTOR); - fcb.removeAllItems(); + jcb.removeAllItems(); for (int i = 0; i < this.cardNames.length; i++) { - fcb.addItem(cardNames[i]); + jcb.addItem(cardNames[i]); } - fcb.setItemEvenType(ItemEventType.DEFAULT); } @Override From a6cc41ac3084b2de6273380dabfd489815a69791 Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 30 Dec 2016 16:37:16 +0800 Subject: [PATCH 017/343] =?UTF-8?q?REPORT-1096=20=E5=8F=96=E8=89=B2?= =?UTF-8?q?=E6=9D=BF=3D=E3=80=8B=E4=BF=AE=E5=A4=8D=E4=B8=80=E4=BA=9Bbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../report/ReportBackgroundAction.java | 6 +-- .../fr/design/style/color/ColorPicker.java | 41 ++++++++++++++++--- .../design/style/color/ColorSelectDialog.java | 2 +- .../style/color/PickColorButtonFactory.java | 10 ++--- 4 files changed, 42 insertions(+), 17 deletions(-) diff --git a/designer/src/com/fr/design/actions/report/ReportBackgroundAction.java b/designer/src/com/fr/design/actions/report/ReportBackgroundAction.java index 3c3940dda..4a381d4d0 100644 --- a/designer/src/com/fr/design/actions/report/ReportBackgroundAction.java +++ b/designer/src/com/fr/design/actions/report/ReportBackgroundAction.java @@ -37,16 +37,14 @@ public class ReportBackgroundAction extends ReportComponentAction Date: Tue, 3 Jan 2017 14:50:16 +0800 Subject: [PATCH 018/343] =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=BD=93=E5=89=8D?= =?UTF-8?q?=E6=8C=89=E9=92=AE=E6=97=B6=EF=BC=8C=E4=B9=9F=E8=A6=81=E8=80=83?= =?UTF-8?q?=E8=99=91=E9=87=8D=E6=96=B0=E6=9B=B4=E6=96=B0=E9=9D=A2=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer/src/com/fr/design/mainframe/ElementCasePane.java | 2 +- .../src/com/fr/design/style/color/ColorSelectDialog.java | 2 +- .../fr/design/mainframe/chart/gui/ChartTypeButtonPane.java | 7 +++++++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/designer/src/com/fr/design/mainframe/ElementCasePane.java b/designer/src/com/fr/design/mainframe/ElementCasePane.java index dcc68ab81..edeb8fb76 100644 --- a/designer/src/com/fr/design/mainframe/ElementCasePane.java +++ b/designer/src/com/fr/design/mainframe/ElementCasePane.java @@ -851,7 +851,7 @@ public abstract class ElementCasePane extends Tar */ protected void initInputActionMap() { InputMap inputMapAncestor = this.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); - ActionMap actionMap = this.getActionMap(); + ActionMap actionMap = this.getActionMap() ; // clearReportPage old values. inputMapAncestor.clear(); actionMap.clear(); diff --git a/designer_base/src/com/fr/design/style/color/ColorSelectDialog.java b/designer_base/src/com/fr/design/style/color/ColorSelectDialog.java index a26bc10c2..11a243b6c 100644 --- a/designer_base/src/com/fr/design/style/color/ColorSelectDialog.java +++ b/designer_base/src/com/fr/design/style/color/ColorSelectDialog.java @@ -137,7 +137,7 @@ public class ColorSelectDialog extends MiddleChartDialog{ public static void showDialog(Frame owner,ColorSelectDetailPane pane,Color initialColor,ColorSelectable selectePane){ ColorTracker okListener = new ColorTracker(pane); ColorSelectDialog dialog = new ColorSelectDialog(owner,pane,initialColor,okListener,selectePane); -// dialog.setModal(true); + dialog.setModal(true); dialog.show(); } diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java index 91b6bba3c..4a18611fa 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java @@ -425,6 +425,8 @@ public class ChartTypeButtonPane extends BasicBeanPane implemen private void deleteAButton() { //先重构属性,在重构面板,否则面板在重构过程中,会重新将属性中的切换图表加到indexList中,导致面板无法删除 + //记录改变前的plotID + String lastPlotID = editingCollection == null ? StringUtils.EMPTY : editingCollection.getSelectedChart().getPlot().getPlotID(); if (editingCollection != null) { int count = editingCollection.getChartCount(); for (int i = 0; i < count; i++) { @@ -447,6 +449,11 @@ public class ChartTypeButtonPane extends BasicBeanPane implemen checkoutChange(); relayoutPane(); + + //重构面板 + if (parent != null ){ + parent.reLayoutEditPane(lastPlotID, editingCollection); + } } private void relayoutPane() { From f8a6f64b3912a1e5c17fefbe86e2b8ec5e052708 Mon Sep 17 00:00:00 2001 From: Fangjie Hu Date: Tue, 3 Jan 2017 14:53:04 +0800 Subject: [PATCH 019/343] update --- designer/src/com/fr/design/mainframe/ElementCasePane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer/src/com/fr/design/mainframe/ElementCasePane.java b/designer/src/com/fr/design/mainframe/ElementCasePane.java index edeb8fb76..dcc68ab81 100644 --- a/designer/src/com/fr/design/mainframe/ElementCasePane.java +++ b/designer/src/com/fr/design/mainframe/ElementCasePane.java @@ -851,7 +851,7 @@ public abstract class ElementCasePane extends Tar */ protected void initInputActionMap() { InputMap inputMapAncestor = this.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); - ActionMap actionMap = this.getActionMap() ; + ActionMap actionMap = this.getActionMap(); // clearReportPage old values. inputMapAncestor.clear(); actionMap.clear(); From 50f28fc95e35f3f61c61a7e03d7b205654b985ad Mon Sep 17 00:00:00 2001 From: Fangjie Hu Date: Tue, 3 Jan 2017 16:37:06 +0800 Subject: [PATCH 020/343] =?UTF-8?q?populate=E4=B9=8B=E5=89=8D=EF=BC=8C?= =?UTF-8?q?=E7=A7=BB=E9=99=A4=E6=8E=A7=E4=BB=B6=E6=9C=AC=E8=BA=AB=E7=9A=84?= =?UTF-8?q?listener?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/gui/icombobox/UIComboBox.java | 4 ++++ .../design/mainframe/chart/gui/style/ChartTextAttrPane.java | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/designer_base/src/com/fr/design/gui/icombobox/UIComboBox.java b/designer_base/src/com/fr/design/gui/icombobox/UIComboBox.java index d6d149674..4840121b8 100644 --- a/designer_base/src/com/fr/design/gui/icombobox/UIComboBox.java +++ b/designer_base/src/com/fr/design/gui/icombobox/UIComboBox.java @@ -160,6 +160,10 @@ public class UIComboBox extends JComboBox implements UIObserver, GlobalNameObser uiObserverListener = listener; } + public void removeChangeListener(){ + uiObserverListener = null; + } + /** * @return */ diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPane.java index a52fe010d..1e383dede 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPane.java @@ -71,6 +71,7 @@ public class ChartTextAttrPane extends BasicPane { } public void populate(FRFont frFont) { + removeAllComboBoxListener(); if (frFont == null) { return; } @@ -85,6 +86,11 @@ public class ChartTextAttrPane extends BasicPane { } } + private void removeAllComboBoxListener() { + fontNameComboBox.removeChangeListener(); + fontSizeComboBox.removeChangeListener(); + } + /** * 更新字 * @return 更新字 From 54bf5da257119cf2f2be2b2712f580c82d6d08f4 Mon Sep 17 00:00:00 2001 From: plough Date: Tue, 3 Jan 2017 18:42:05 +0800 Subject: [PATCH 021/343] =?UTF-8?q?REPORT-1096=20=E5=8F=96=E8=89=B2?= =?UTF-8?q?=E6=9D=BF=3D=E3=80=8B=E4=BF=AE=E5=A4=8D=E5=9C=A8=E5=AE=9E?= =?UTF-8?q?=E6=97=B6=E6=A8=A1=E5=BC=8F=E4=B8=8B=EF=BC=8C=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E5=8F=96=E6=B6=88=E9=A2=9C=E8=89=B2=E6=8B=BE=E5=8F=96=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/style/color/ColorPicker.java | 4 ++++ .../src/com/fr/design/style/color/ColorSelectBox.java | 1 + 2 files changed, 5 insertions(+) diff --git a/designer_base/src/com/fr/design/style/color/ColorPicker.java b/designer_base/src/com/fr/design/style/color/ColorPicker.java index 6fc570603..c103e8437 100644 --- a/designer_base/src/com/fr/design/style/color/ColorPicker.java +++ b/designer_base/src/com/fr/design/style/color/ColorPicker.java @@ -32,6 +32,7 @@ public class ColorPicker extends JDialog implements ActionListener private ColorSelectable colorSelectable; private Point mousePos; // 鼠标的绝对坐标 private Color colorToSet; // 暂存要设置的颜色值 + private Color initColor; // 保存初始颜色。实时模式下,如果取消取色操作,则重设为初始颜色 private Boolean setColorRealTime; // 实时设定颜色值 @@ -66,6 +67,7 @@ public class ColorPicker extends JDialog implements ActionListener // 如果要求实时变化,确保先关闭弹窗,再截屏 // 主要针对"图案"选项卡中的"前景"、"背景" if (this.setColorRealTime) { + initColor = colorSelectable.getColor(); colorSelectable.setColor(Color.WHITE); // setColor 可以关闭弹窗 try { Thread.sleep(100); // 等待弹窗关闭 @@ -114,6 +116,8 @@ public class ColorPicker extends JDialog implements ActionListener timer.stop(); if (setColor) { colorSelectable.setColor(colorToSet); + } else if (setColorRealTime) { + colorSelectable.setColor(initColor); } this.dispose(); } diff --git a/designer_base/src/com/fr/design/style/color/ColorSelectBox.java b/designer_base/src/com/fr/design/style/color/ColorSelectBox.java index f926775ee..2dd5d51c3 100644 --- a/designer_base/src/com/fr/design/style/color/ColorSelectBox.java +++ b/designer_base/src/com/fr/design/style/color/ColorSelectBox.java @@ -63,6 +63,7 @@ public class ColorSelectBox extends AbstractSelectBox implements UIObserv fireDisplayComponent(ColorBackground.getInstance(color)); } }); + colorPane.setColor(color); return colorPane; } From e596f2aca760cd2f7c700c00d603c7861aaa8571 Mon Sep 17 00:00:00 2001 From: plough Date: Tue, 3 Jan 2017 19:43:51 +0800 Subject: [PATCH 022/343] =?UTF-8?q?REPORT-1096=20=E5=8F=96=E8=89=B2?= =?UTF-8?q?=E6=9D=BF=3D=E3=80=8B=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/style/color/ColorPicker.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/designer_base/src/com/fr/design/style/color/ColorPicker.java b/designer_base/src/com/fr/design/style/color/ColorPicker.java index c103e8437..e616e08af 100644 --- a/designer_base/src/com/fr/design/style/color/ColorPicker.java +++ b/designer_base/src/com/fr/design/style/color/ColorPicker.java @@ -112,12 +112,10 @@ public class ColorPicker extends JDialog implements ActionListener validate(); // 更新所有子控件 } - public void pickComplete(Boolean setColor) { + public void pickComplete(Color color) { timer.stop(); - if (setColor) { - colorSelectable.setColor(colorToSet); - } else if (setColorRealTime) { - colorSelectable.setColor(initColor); + if (color != null) { + colorSelectable.setColor(color); } this.dispose(); } @@ -134,9 +132,9 @@ public class ColorPicker extends JDialog implements ActionListener public void mousePressed(MouseEvent e) { if (e.getButton() == e.BUTTON1) { // 左键确定 - pickComplete(true); + pickComplete(colorToSet); } else { - pickComplete(false); + pickComplete(setColorRealTime ? initColor : null); } } } From 96519eca895b24cc8a0b945c5aec98ec61197345 Mon Sep 17 00:00:00 2001 From: neil Date: Thu, 5 Jan 2017 11:20:06 +0800 Subject: [PATCH 023/343] ct --- .../widget/ui/TextFieldEditorDefinePane.java | 6 +- .../fr/design/actions/file/LocalePane.java | 62 ++++++++++++------- .../com/fr/design/locale/designer.properties | 7 ++- .../design/locale/designer_en_US.properties | 9 ++- .../design/locale/designer_ja_JP.properties | 16 ++--- .../design/locale/designer_ko_KR.properties | 10 +-- .../design/locale/designer_zh_CN.properties | 10 +-- .../design/locale/designer_zh_TW.properties | 8 ++- 8 files changed, 77 insertions(+), 51 deletions(-) diff --git a/designer/src/com/fr/design/widget/ui/TextFieldEditorDefinePane.java b/designer/src/com/fr/design/widget/ui/TextFieldEditorDefinePane.java index 1c11aad2e..c9128627c 100644 --- a/designer/src/com/fr/design/widget/ui/TextFieldEditorDefinePane.java +++ b/designer/src/com/fr/design/widget/ui/TextFieldEditorDefinePane.java @@ -61,11 +61,7 @@ public class TextFieldEditorDefinePane extends FieldEditorDefinePane regPane.getRegComboBox().addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { RegExp regExp = (RegExp) regPane.getRegComboBox().getSelectedItem(); - if (!StringUtils.isNotEmpty(regExp.toRegText())) { - getRegErrorMsgTextField().setEnabled(false); - } else { - getRegErrorMsgTextField().setEnabled(true); - } + getRegErrorMsgTextField().setEnabled(regExp.errorMessageEditable()); } }); diff --git a/designer_base/src/com/fr/design/actions/file/LocalePane.java b/designer_base/src/com/fr/design/actions/file/LocalePane.java index 3356fa70a..4dd25c504 100644 --- a/designer_base/src/com/fr/design/actions/file/LocalePane.java +++ b/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.general.*; import com.fr.stable.ArrayUtils; +import com.fr.stable.StringUtils; +import com.fr.stable.bridge.StableFactory; import com.fr.stable.project.ProjectConstants; /** @@ -51,8 +53,8 @@ public class LocalePane extends BasicPane { add(tabbedPane, BorderLayout.CENTER); predefineTableModel = new DefaultTableModel() { - public boolean isCellEditable(int col, int row) { - return false; + public boolean isCellEditable(int row, int column) { + return column == 0; } }; @@ -109,23 +111,39 @@ public class LocalePane extends BasicPane { } private void initPredefinedProperties() { - Map map = Inter.getPredefinedPackageMap(); - LocalePackage chinese = map.get(Locale.SIMPLIFIED_CHINESE); + + Map supportLocaleMap = Inter.getSupportLocaleMap(); + + String[] localeFiles = StableFactory.getLocaleFiles(); + + List sortKeys = new ArrayList(); - Set bundles = chinese.getKindsOfResourceBundle(); - for (ResourceBundle bundle : bundles) { - sortKeys.addAll(bundle.keySet()); + for (String path : localeFiles) { + ResourceBundle chineseBundle = loadResourceBundle(path, Locale.SIMPLIFIED_CHINESE); + sortKeys.addAll(chineseBundle.keySet()); } Collections.sort(sortKeys); + Map> localeResourceBundleMap = new HashMap>(); + for (Map.Entry entry : supportLocaleMap.entrySet()) { + Locale locale = entry.getKey(); + List list = new ArrayList<>(); + for (String path : localeFiles) { + ResourceBundle chineseBundle = loadResourceBundle(path, locale); + list.add(chineseBundle); + } + localeResourceBundleMap.put(locale, list); + } + Map> data = new HashMap>(); - for (Map.Entry entry : map.entrySet()) { + for (Map.Entry> entry : localeResourceBundleMap.entrySet()) { Vector column = new Vector(); + List rbs = entry.getValue(); for (String key : sortKeys) { - column.add(entry.getValue().getLocText(key)); + column.add(readText(rbs, key)); } data.put(entry.getKey(), column); } @@ -140,6 +158,19 @@ public class LocalePane extends BasicPane { } } + private String readText(List 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 { Env env = FRContext.getCurrentEnv(); 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() { Env env = FRContext.getCurrentEnv(); diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 66464c889..1b9e5506d 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -357,6 +357,7 @@ FR-Designer_KeyPoint=KeyPoint FR-Designer_loadedTreeModel=loadedTreeModel FR-Designer-Failed_to_load_the_plugin=Failed to load the plugin\uFF0Cplease update the plugin\: FR-Designer-Plugin_Please_Update_Jar= +FR-Designer-Invalid_Page_Number=Invalid Page Number FR-Designer_XMLA_Database=Database FR-Designer_XMLA_UserName=User name FR-Designer_XMLA_Password=Password @@ -487,5 +488,7 @@ FR-Designer-LayerPageReport_PageQuery= FR-Designer-LayerPageReport_Define_PageQuerySQL= FR-Designer_Event= FR-Designer_Properties= -FR-Designer_Button_OK=OK -FR-Designer_Button_Cancel=Cancel +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 diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index f97be0985..962855514 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -358,6 +358,7 @@ FR-Designer_KeyPoint=KeyPoint FR-Designer_loadedTreeModel=loadedTreeModel FR-Designer-Failed_to_load_the_plugin=Failed to load the plugin\uFF0Cplease update the plugin\: FR-Designer-Plugin_Please_Update_Jar=Please Update Jar +FR-Designer-Invalid_Page_Number=Invalid Page Number FR-Designer_XMLA_Database=DB FR-Designer_XMLA_UserName=User name FR-Designer_XMLA_Password=Password @@ -486,6 +487,8 @@ FR-Designer-DS-Database_Query=DB Query FR-Designer_Is_Share_DBTableData=Shared data set FR-Designer_Event=Event FR-Designer_Properties=Properties -FR-Designer_Properties_Mobile=MobileProperties -FR-Designer_Button_OK=OK -FR-Designer_Button_Cancel=Cancel +FR-Designer_Permissions_Edition=Permissions Edition +FR-Designer_Permission_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 diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index 0d7ee8fd1..ec280ecaf 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -320,7 +320,7 @@ FR-Designer_Show_Text=\u30DC\u30BF\u30F3\u540D\u524D\u3092\u8868\u793A FR-Designer_User_Defined_Event=\u30AB\u30B9\u30BF\u30DE\u30A4\u30BA\u4E8B\u4EF6 FR-Designer_Output_PDF=PDF\u30A2\u30A6\u30C8\u30D7\u30C3\u30C8 FR-Designer_Output_Word=Word\u30A2\u30A6\u30C8\u30D7\u30C3\u30C8 -FR-Designer_Image=\u30A4\u30E1\u30FC\u30B8 +FR-Designer_Image=\u753B\u50CF\uFF08PNG\uFF09 FR-Designer_Flash_Print=Flash\u30D7\u30EA\u30F3\u30C8 FR-Designer_PDF_Print=PDF\u30D7\u30EA\u30F3\u30C8 FR-Designer_Applet_Print=\u30A2\u30D7\u30EC\u30C3\u30C8\u5370\u5237 @@ -432,7 +432,7 @@ FR-Designer_Attention=\u6CE8\u610F\u3057\u307E\u3059 FR-Designer_Forbid_Widgets_Intersects=\u7981\u6B62\u90E8\u54C1\u3092\u91CD\u306D\u3066 FR-Designer_Widget_Scaling_Mode_Fit=\u9069\u5FDC\u533A\u57DF 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-Cancel=\u30AD\u30E3\u30F3\u30BB\u30EB FR-Designer-Reuse_Manager= @@ -463,9 +463,9 @@ FR-Designer-DS-Database_Query=\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u30AF\u30A8\u FR-Designer-LayerPageReport_PageQuery=\u30DA\u30FC\u30B8\u5225\u30AF\u30A8\u30EA FR-Designer-LayerPageReport_Define_PageQuerySQL=\u5B9A\u7FA9\u30DA\u30FC\u30B8\u5225\u30AF\u30A8\u30EAsql FR-Designer_Is_Share_DBTableData=\u5171\u6709\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8 -FR-Designer_Event=\ -FR-Designer_Properties=FR-Designer_Properties=\ -\ -FR-Designer_Button_OK=FR-Designer_Button_OK=\u78BA\u5B9A -FR-Designer_Button_Cancel=\u30AD\u30E3\u30F3\u30BB\u30EB -\ \ No newline at end of file +FR-Designer_Event= +FR-Designer_Properties= +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 diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index 553a2503c..99ed34dc5 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -459,7 +459,9 @@ 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-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_Event=\ -FR-Designer_Properties=\uFFFD -FR-Designer_Button_OK=\uD655\uC778FR-Designer_Button_Cancel=\uCDE8\uC18C -\ \ No newline at end of file +FR-Designer_Event= +FR-Designer_Properties= +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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index e0b5bef42..584ea5a77 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -358,6 +358,7 @@ FR-Designer_KeyPoint=\u5173\u952E\u8282\u70B9 FR-Designer_loadedTreeModel=\u52A0\u8F7D\u5931\u8D25,\u8BF7\u68C0\u67E5\u540E\u91CD\u8BD5 FR-Designer-Failed_to_load_the_plugin=\u65E0\u6CD5\u52A0\u8F7D\u63D2\u4EF6\uFF0C\u8BF7\u66F4\u65B0\u63D2\u4EF6\uFF1A FR-Designer-Plugin_Please_Update_Jar=\u8BF7\u66F4\u65B0Jar\u5305, \u63D2\u4EF6\u9700\u6C42\u6700\u4F4E\u7248\u672C +FR-Designer-Invalid_Page_Number=\u65E0\u6548\u9875\u7801 FR-Designer_Get-CubeGetting=\u83B7\u53D6cube FR-Designer_XMLA_Database=\u6570\u636E\u5E93 FR-Designer_XMLA_UserName=\u7528\u6237\u540D @@ -422,7 +423,7 @@ FR-Designer-Website_Url=http\://www.finereport.com/ FR-Designer-BBSLogin_Download-Unlogin-Tip=\u767B\u5F55\u540E\u624D\u80FD\u4E0B\u8F7D FR-Designer-App_ReLayout=\u624B\u673A\u91CD\u5E03\u5C40 FR-Designer_Mobile-Attr=\u79FB\u52A8\u7AEF\u5C5E\u6027 -FR-Designer_Mobile-Vertical=\u7AD6\u5C4FF +FR-Designer_Mobile-Vertical=\u7AD6\u5C4F FR-Designer_Mobile-Horizontal=\u6A2A\u5C4F FR-Designer_COMMUNITY=\u793E\u533A FR-Designer_COMMUNITY_BBS=\u5E06\u8F6F\u8BBA\u575B @@ -490,6 +491,7 @@ FR-Designer-LayerPageReport_Define_PageQuerySQL=\u5B9A\u4E49\u5206\u9875\u67E5\u FR-Designer_Is_Share_DBTableData=\u5171\u4EAB\u6570\u636E\u96C6 FR-Designer_Event=\u4E8B\u4EF6 FR-Designer_Properties=\u5C5E\u6027 -FR-Designer_Properties_Mobile=\u624B\u673A\u5C5E\u6027 -FR-Designer_Button_OK=\u786E\u5B9A -FR-Designer_Button_Cancel=\u53D6\u6D88 +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 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 3d30f49bd..c46b4f83d 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -357,6 +357,7 @@ FR-Designer_KeyPoint=\u95DC\u9375\u7BC0\u9EDE FR-Designer_loadedTreeModel=\u52A0\u8F09\u5931\u6557,\u8ACB\u6AA2\u67E5\u5F8C\u91CD\u8A66 FR-Designer-Failed_to_load_the_plugin=\u7121\u6CD5\u52A0\u8F09\u63D2\u4EF6\uFF0C\u8ACB\u66F4\u65B0\u63D2\u4EF6\uFF1A FR-Designer-Plugin_Please_Update_Jar=\u8ACB\u66F4\u65B0Jar\u5305, \u63D2\u4EF6\u9700\u6C42\u6700\u4F4E\u7248\u672C +FR-Designer-Invalid_Page_Number=\u7121\u6548\u9801\u78BC FR-Designer_Get-CubeGetting=\u7372\u53D6cube FR-Designer_XMLA_Database=\u8CC7\u6599\u5EAB FR-Designer_XMLA_UserName=\u5E33\u865F @@ -478,6 +479,7 @@ 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_Properties=\u5C6C\u6027 FR-Designer_Event=\u4E8B\u4EF6 -FR-Designer_Properties_Mobile=\u624B\u6A5F\u5C6C\u6027 -FR-Designer_Button_OK=\u78BA\u5B9A -FR-Designer_Button_Cancel=\u53D6\u6D88 \ No newline at end of file +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 From 11fb4878f357c4f46fff2fe2b10142cfd82ee0f3 Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 6 Jan 2017 10:29:22 +0800 Subject: [PATCH 024/343] =?UTF-8?q?REPORT-1417=20=E4=B8=AD=E6=96=87?= =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E5=99=A8=EF=BC=8C=E5=8F=96=E8=89=B2=E5=99=A8?= =?UTF-8?q?=E6=9B=B4=E5=A4=9A=E9=A2=9C=E8=89=B2=E4=B8=8B=E7=A1=AE=E5=AE=9A?= =?UTF-8?q?=E5=8F=96=E6=B6=88=E6=8C=89=E9=92=AE=E6=98=BE=E7=A4=BA=E4=B8=BA?= =?UTF-8?q?=E8=8B=B1=E6=96=87key=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/locale/designer.properties | 2 ++ .../src/com/fr/design/locale/designer_en_US.properties | 2 ++ .../src/com/fr/design/locale/designer_ja_JP.properties | 2 ++ .../src/com/fr/design/locale/designer_ko_KR.properties | 4 +++- .../src/com/fr/design/locale/designer_zh_CN.properties | 2 ++ .../src/com/fr/design/locale/designer_zh_TW.properties | 2 ++ 6 files changed, 13 insertions(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 1b9e5506d..b4e21619f 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -492,3 +492,5 @@ 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_Button_OK=OK +FR-Designer_Button_Cancel=Cancel diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index 962855514..7cac6d691 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -492,3 +492,5 @@ FR-Designer_Permission_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_Button_OK=OK +FR-Designer_Button_Cancel=Cancel diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index ec280ecaf..aac51bae8 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -469,3 +469,5 @@ 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_Button_OK=\u78BA\u5B9A +FR-Designer_Button_Cancel=\u30AD\u30E3\u30F3\u30BB\u30EB diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index 99ed34dc5..b19fdfc37 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -464,4 +464,6 @@ FR-Designer_Properties= 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 \ No newline at end of file +FR-Designer_Export_Excel_PageToSheet=\uD398\uC774\uC9C0\uC640 Sheet\uB098\uB204\uC5B4\uB0B4\uBCF4\uB0B4\uAE30 +FR-Designer_Button_OK=\uD655\uC778 +FR-Designer_Button_Cancel=\uCDE8\uC18C \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 584ea5a77..7f3817bce 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -495,3 +495,5 @@ 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_Button_OK=\u786E\u5B9A +FR-Designer_Button_Cancel=\u53D6\u6D88 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index c46b4f83d..0c35cd55a 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -483,3 +483,5 @@ 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_Button_OK=\u78BA\u5B9A +FR-Designer_Button_Cancel=\u53D6\u6D88 From 5cc464edb21f82e7b61bc4a4867540227ea9f1b5 Mon Sep 17 00:00:00 2001 From: PanLi320 <854954082@qq.com> Date: Fri, 6 Jan 2017 15:25:53 +0800 Subject: [PATCH 025/343] =?UTF-8?q?REPORT-576=20dev=E5=86=85=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E5=AE=8C=E5=96=84=E5=88=B0release=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit button初始化背景颜色 --- .../designer/creator/cardlayout/XCardAddButton.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardAddButton.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardAddButton.java index 0e8fb4ce4..c16d4de3f 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardAddButton.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardAddButton.java @@ -1,13 +1,12 @@ package com.fr.design.designer.creator.cardlayout; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Graphics2D; +import java.awt.*; import java.awt.event.MouseEvent; import javax.swing.Icon; import com.fr.base.BaseUtils; +import com.fr.base.background.ColorBackground; import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.ComponentAdapter; import com.fr.design.designer.beans.models.SelectionModel; @@ -147,6 +146,7 @@ public class XCardAddButton extends XButton{ CardSwitchButton titleButton = new CardSwitchButton(index,cardLayoutName); //设置标题 titleButton.setText(getTabTitleName()); + titleButton.setInitialBackground(ColorBackground.getInstance(Color.WHITE)); XCardSwitchButton showButton = new XCardSwitchButton(titleButton,dimension,cardLayout,tagLayout); titleButton.setShowButton(true); showButton.setBackupParent(tagLayout); @@ -189,4 +189,4 @@ public class XCardAddButton extends XButton{ public XLayoutContainer getTopLayout() { return this.getBackupParent().getTopLayout(); } -} \ No newline at end of file +} From 002cb45615bd59248198cc03498bf94142187187 Mon Sep 17 00:00:00 2001 From: PanLi320 <854954082@qq.com> Date: Fri, 6 Jan 2017 17:56:33 +0800 Subject: [PATCH 026/343] =?UTF-8?q?REPORT-576=20tab=20button=E8=BE=93?= =?UTF-8?q?=E5=85=A5=E6=A0=87=E9=A2=98=E5=86=85=E5=AE=B9=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=8F=98=E5=AE=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../creator/cardlayout/XCardAddButton.java | 5 +- .../creator/cardlayout/XCardSwitchButton.java | 55 +++++++++++++++++-- 2 files changed, 51 insertions(+), 9 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardAddButton.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardAddButton.java index c16d4de3f..2c6a0036b 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardAddButton.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardAddButton.java @@ -31,7 +31,7 @@ public class XCardAddButton extends XButton{ private static final int START_INDEX = 3; private static final int INDEX = 0; - + private static final int DEFAULT_BUTTON_WIDTH = 80; private static Icon ADD_ICON = BaseUtils.readIcon("/com/fr/design/form/images/add.png"); private Icon addIcon = ADD_ICON; @@ -139,8 +139,7 @@ public class XCardAddButton extends XButton{ //新增tab private void addTab(int index){ Dimension dimension = new Dimension(); - XCardSwitchButton button = (XCardSwitchButton) this.tagLayout.getComponent(INDEX); - dimension.width = button.getWidth(); + dimension.width = DEFAULT_BUTTON_WIDTH; String cardLayoutName = cardLayout.toData().getWidgetName(); CardSwitchButton titleButton = new CardSwitchButton(index,cardLayoutName); diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java index bcd38dbf2..c95b2bbd3 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java @@ -3,13 +3,11 @@ */ package com.fr.design.designer.creator.cardlayout; -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.Point; +import java.awt.*; import java.awt.event.MouseEvent; import java.awt.geom.Rectangle2D; +import java.util.HashMap; +import java.util.Map; import javax.swing.*; @@ -34,6 +32,7 @@ import com.fr.form.ui.container.cardlayout.WTabFitLayout; import com.fr.general.Background; import com.fr.general.FRFont; import com.fr.general.Inter; +import sun.font.FontDesignMetrics; /** * @@ -338,4 +337,48 @@ public class XCardSwitchButton extends XButton { return this.getBackupParent().getTopLayout(); } -} \ No newline at end of file + public void setTabsAndAdjust() { + if (this.tagLayout == null) { + return; + } + int tabLength = this.tagLayout.getComponentCount(); + Map cardWidth = new HashMap<>(); + Map cardHeight = new HashMap<>(); + for (int i = 0; i < tabLength; i++) { + XCardSwitchButton temp = (XCardSwitchButton) this.tagLayout.getComponent(i); + CardSwitchButton tempCard = (CardSwitchButton) temp.toData(); + String tempText = tempCard.getText(); + Font f = ((CardSwitchButton)this.toData()).getFont(); + FontMetrics fm = FontDesignMetrics.getMetrics(f); + cardWidth.put(i,fm.stringWidth(tempText)); + cardHeight.put(i,fm.getHeight()); + } + adjustTabs(tabLength, cardWidth, cardHeight); + } + + public void adjustTabs(int tabLength, Map width, Map height) { + int tempX = 0; + for (int i = 0; i < tabLength; i++) { + Rectangle rectangle = this.tagLayout.getComponent(i).getBounds(); + Integer cardWidth = width.get(i) + SIDE_OFFSET; + Integer cardHeight = height.get(i) + HEIGHT_OFFSET; + rectangle.setSize(cardWidth, cardHeight); + rectangle.setBounds(tempX, 0, cardWidth, cardHeight); + tempX += cardWidth; + this.tagLayout.getComponent(i).setBounds(rectangle); + Dimension dimension = new Dimension(); + dimension.setSize(cardWidth, cardHeight); + this.getContentLabel().setSize(dimension); + this.setSize(dimension); + XCardSwitchButton temp = (XCardSwitchButton) this.tagLayout.getComponent(i); + CardSwitchButton tempCard = (CardSwitchButton) temp.toData(); + tempCard.setDefaultWidth(cardWidth); + } + } + + @Override + public void doLayout() { + super.doLayout(); + setTabsAndAdjust(); + } +} From e5903dbf9d5e35d5683e6dbe4b212b04e0336f81 Mon Sep 17 00:00:00 2001 From: PanLi320 <854954082@qq.com> Date: Mon, 9 Jan 2017 11:25:12 +0800 Subject: [PATCH 027/343] =?UTF-8?q?REPORT-1438=20=E5=B1=9E=E6=80=A7?= =?UTF-8?q?=E6=8E=A7=E5=88=B6=EF=BC=8C=E4=B9=8B=E5=89=8D=E7=9B=B4=E6=8E=A5?= =?UTF-8?q?=E6=8B=BF=E7=9A=84button=E7=9A=84=E5=B1=9E=E6=80=A7=EF=BC=8C?= =?UTF-8?q?=E5=A4=9A=E4=BA=86=E4=B8=80=E4=B8=AA=E6=A0=B7=E5=BC=8F=E7=9A=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 这边条件判断取一下,留下两个默认的属性即可。 --- .../creator/cardlayout/XWTabFitLayout.java | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java index 775d4c38c..298f2877f 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java @@ -42,7 +42,8 @@ public class XWTabFitLayout extends XWFitLayout { // tab布局在拖拽导致的缩放里(含间隔时),如果拖拽宽高大于组件宽高,会导致调整的时候找不到原来的组件 // 这里先将拖拽之前的宽高先做备份 public static final Color NORMAL_GRAL = new Color(236,236,236); - public static final Color CHOOSED_GRAL = new Color(222,222,222); + private static final String WIDGET_NAME = "widgetName"; + private static final String MARGIN = "margin"; private Dimension referDim; private Background initialBackground; private Background overBackground; @@ -105,7 +106,7 @@ public class XWTabFitLayout extends XWFitLayout { public CRPropertyDescriptor[] supportedDescriptor() throws IntrospectionException { checkButonType(); CRPropertyDescriptor[] crp = ((WTabFitLayout) data).isCustomStyle() ? getisCustomStyle() : getisnotCustomStyle(); - return ArrayUtils.addAll(super.supportedDescriptor(), crp); + return ArrayUtils.addAll(defaultDescriptor(), crp); } protected CRPropertyDescriptor[] getisCustomStyle() throws IntrospectionException { @@ -195,6 +196,23 @@ public class XWTabFitLayout extends XWFitLayout { return crPropertyDescriptors[i]; } + protected CRPropertyDescriptor[] defaultDescriptor() throws IntrospectionException { + if (super.supportedDescriptor().length < 3) { + return null; + } + CRPropertyDescriptor[] crPropertyDescriptors = { + super.supportedDescriptor()[0], + super.supportedDescriptor()[2] + }; + CRPropertyDescriptor widgetName = super.supportedDescriptor()[0]; + CRPropertyDescriptor margin = super.supportedDescriptor()[2]; + if (widgetName.getName().equals(WIDGET_NAME) && margin.getName().equals(MARGIN)) { + return crPropertyDescriptors; + } else { + return null; + } + } + private void checkButonType() { if (this.xCardSwitchButton == null) { return; From 83da497124d59ceab039864866c97c99ab7ca53a Mon Sep 17 00:00:00 2001 From: PanLi320 <854954082@qq.com> Date: Mon, 9 Jan 2017 14:02:27 +0800 Subject: [PATCH 028/343] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer/creator/XLayoutContainer.java | 21 +++++++++++++++++++ .../creator/cardlayout/XWTabFitLayout.java | 15 +++---------- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/creator/XLayoutContainer.java b/designer_form/src/com/fr/design/designer/creator/XLayoutContainer.java index 47f4270a5..381b16f87 100644 --- a/designer_form/src/com/fr/design/designer/creator/XLayoutContainer.java +++ b/designer_form/src/com/fr/design/designer/creator/XLayoutContainer.java @@ -81,6 +81,27 @@ public abstract class XLayoutContainer extends XBorderStyleWidgetCreator impleme }; } + /** + * 控件名属性 + * @return + * @throws IntrospectionException + */ + public CRPropertyDescriptor createWidgetNameDescriptor() throws IntrospectionException { + return new CRPropertyDescriptor("widgetName", this.data.getClass()).setI18NName(Inter + .getLocText("FR-Designer_Form-Widget_Name")); + } + + /** + * 边距属性 + * @return + * @throws IntrospectionException + */ + public CRPropertyDescriptor createMarginDescriptor() throws IntrospectionException { + return new CRPropertyDescriptor("margin", this.data.getClass()).setEditorClass(PaddingMarginEditor.class) + .setI18NName(Inter.getLocText("FR-Designer_Layout-Padding")) + .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced"); + } + /** * 返回对应的wlayout * @return wlayout控件 diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java index 298f2877f..0c5b1d03b 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java @@ -197,20 +197,11 @@ public class XWTabFitLayout extends XWFitLayout { } protected CRPropertyDescriptor[] defaultDescriptor() throws IntrospectionException { - if (super.supportedDescriptor().length < 3) { - return null; - } CRPropertyDescriptor[] crPropertyDescriptors = { - super.supportedDescriptor()[0], - super.supportedDescriptor()[2] + super.createWidgetNameDescriptor(), + super.createMarginDescriptor() }; - CRPropertyDescriptor widgetName = super.supportedDescriptor()[0]; - CRPropertyDescriptor margin = super.supportedDescriptor()[2]; - if (widgetName.getName().equals(WIDGET_NAME) && margin.getName().equals(MARGIN)) { - return crPropertyDescriptors; - } else { - return null; - } + return crPropertyDescriptors; } private void checkButonType() { From 6d32ba0c7bc42d62fd918a3ff77892cf5d6cd557 Mon Sep 17 00:00:00 2001 From: PanLi320 <854954082@qq.com> Date: Mon, 9 Jan 2017 14:05:59 +0800 Subject: [PATCH 029/343] 1 1 --- .../fr/design/designer/creator/cardlayout/XWTabFitLayout.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java index 0c5b1d03b..75816c9bb 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java @@ -42,8 +42,6 @@ public class XWTabFitLayout extends XWFitLayout { // tab布局在拖拽导致的缩放里(含间隔时),如果拖拽宽高大于组件宽高,会导致调整的时候找不到原来的组件 // 这里先将拖拽之前的宽高先做备份 public static final Color NORMAL_GRAL = new Color(236,236,236); - private static final String WIDGET_NAME = "widgetName"; - private static final String MARGIN = "margin"; private Dimension referDim; private Background initialBackground; private Background overBackground; From d87a903c8116bf14941e8aa26555f57e4d236182 Mon Sep 17 00:00:00 2001 From: Fangjie Hu Date: Mon, 9 Jan 2017 14:08:49 +0800 Subject: [PATCH 030/343] =?UTF-8?q?=E4=B8=8B=E6=8B=89=E6=A1=86=E7=9B=91?= =?UTF-8?q?=E5=90=AC=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/gui/icombobox/UIComboBox.java | 4 ++++ .../mainframe/chart/gui/style/ChartTextAttrPane.java | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/designer_base/src/com/fr/design/gui/icombobox/UIComboBox.java b/designer_base/src/com/fr/design/gui/icombobox/UIComboBox.java index 4840121b8..350b99ead 100644 --- a/designer_base/src/com/fr/design/gui/icombobox/UIComboBox.java +++ b/designer_base/src/com/fr/design/gui/icombobox/UIComboBox.java @@ -164,6 +164,10 @@ public class UIComboBox extends JComboBox implements UIObserver, GlobalNameObser uiObserverListener = null; } + public UIObserverListener getUiObserverListener(){ + return uiObserverListener; + } + /** * @return */ diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPane.java index 1e383dede..5b1ba5aee 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPane.java +++ b/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.chart.base.TextAttr; 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.UIToggleButton; import com.fr.design.gui.icombobox.UIComboBox; @@ -71,6 +72,7 @@ public class ChartTextAttrPane extends BasicPane { } public void populate(FRFont frFont) { + UIObserverListener listener = fontNameComboBox == null ? null : fontNameComboBox.getUiObserverListener(); removeAllComboBoxListener(); if (frFont == null) { return; @@ -84,6 +86,9 @@ public class ChartTextAttrPane extends BasicPane { if (fontColor != null) { fontColor.setColor(frFont.getForeground()); } + + //更新结束后,注册监听器 + registerAllComboBoxListener(listener); } private void removeAllComboBoxListener() { @@ -91,6 +96,11 @@ public class ChartTextAttrPane extends BasicPane { fontSizeComboBox.removeChangeListener(); } + private void registerAllComboBoxListener(UIObserverListener listener) { + fontNameComboBox.registerChangeListener(listener); + fontSizeComboBox.registerChangeListener(listener); + } + /** * 更新字 * @return 更新字 From 8d9ddb0502227685c5eecd0cda291b930289c0b1 Mon Sep 17 00:00:00 2001 From: PanLi320 <854954082@qq.com> Date: Tue, 10 Jan 2017 20:13:03 +0800 Subject: [PATCH 031/343] =?UTF-8?q?REPORT-576=20tab=E4=B8=ADbutton?= =?UTF-8?q?=E5=86=85=E5=AE=B9=E8=87=AA=E5=8A=A8=E6=89=A9=E5=B1=95bug?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../creator/cardlayout/XCardSwitchButton.java | 42 +++++++++++-------- .../creator/cardlayout/XWCardLayout.java | 3 +- .../creator/cardlayout/XWCardTagLayout.java | 12 ------ .../creator/cardlayout/XWTabFitLayout.java | 13 +++++- 4 files changed, 38 insertions(+), 32 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java index c95b2bbd3..11a6a9ba1 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java @@ -6,8 +6,7 @@ package com.fr.design.designer.creator.cardlayout; import java.awt.*; import java.awt.event.MouseEvent; import java.awt.geom.Rectangle2D; -import java.util.HashMap; -import java.util.Map; +import java.util.*; import javax.swing.*; @@ -58,6 +57,9 @@ public class XCardSwitchButton extends XButton { private static final int RIGHT_OFFSET = 15; private static final int TOP_OFFSET = 25; + //这边先不计算button的高度,涉及到layout那边的整体高度,先用之前的固定高度 + private static final int DEFAULT_BUTTON_HEIGHT = 36; + // tab按钮里的字体因为按钮内部的布局看起来比正常的要小,加个调整量 private static final int FONT_SIZE_ADJUST = 2; @@ -166,7 +168,7 @@ public class XCardSwitchButton extends XButton { editingMouseListener.startEditing(this, adapter.getDesignerEditor(), adapter); } - + setTabsAndAdjust(); } //删除card,同时修改其他switchbutton和tabfit的index @@ -256,6 +258,7 @@ public class XCardSwitchButton extends XButton { public void paintComponent(Graphics g) { super.paintComponent(g); + setTabsAndAdjust(); Graphics2D g2d = (Graphics2D) g; drawBackgorund(); drawTitle(); @@ -357,22 +360,27 @@ public class XCardSwitchButton extends XButton { } public void adjustTabs(int tabLength, Map width, Map height) { + if (width == null) { + return; + } int tempX = 0; for (int i = 0; i < tabLength; i++) { - Rectangle rectangle = this.tagLayout.getComponent(i).getBounds(); - Integer cardWidth = width.get(i) + SIDE_OFFSET; - Integer cardHeight = height.get(i) + HEIGHT_OFFSET; - rectangle.setSize(cardWidth, cardHeight); - rectangle.setBounds(tempX, 0, cardWidth, cardHeight); - tempX += cardWidth; - this.tagLayout.getComponent(i).setBounds(rectangle); - Dimension dimension = new Dimension(); - dimension.setSize(cardWidth, cardHeight); - this.getContentLabel().setSize(dimension); - this.setSize(dimension); - XCardSwitchButton temp = (XCardSwitchButton) this.tagLayout.getComponent(i); - CardSwitchButton tempCard = (CardSwitchButton) temp.toData(); - tempCard.setDefaultWidth(cardWidth); + Rectangle rectangle = this.tagLayout.getComponent(i).getBounds(); + Integer cardWidth = width.get(i) + SIDE_OFFSET; + //先用这边的固定高度 + Integer cardHeight = DEFAULT_BUTTON_HEIGHT; + rectangle.setSize(cardWidth, cardHeight); + rectangle.setBounds(tempX, 0, cardWidth, cardHeight); + tempX += cardWidth; + this.tagLayout.getComponent(i).setBounds(rectangle); + Dimension dimension = new Dimension(); + dimension.setSize(cardWidth, cardHeight); + XCardSwitchButton temp = (XCardSwitchButton) this.tagLayout.getComponent(i); + UILabel label = temp.getContentLabel(); + label.setSize(dimension); + temp.setContentLabel(label); + temp.setSize(dimension); + temp.setPreferredSize(new Dimension(cardWidth, cardHeight)); } } diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java index 4f2492ee9..d008ccd52 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java @@ -198,8 +198,7 @@ public class XWCardLayout extends XLayoutContainer { firstBtn.setText(Inter.getLocText("FR-Designer_Title") + 0); firstBtn.setInitialBackground(ColorBackground.getInstance(Color.WHITE)); xTag.setCurrentCard(firstBtn); - XCardSwitchButton xFirstBtn = new XCardSwitchButton(firstBtn, new Dimension(CardSwitchButton.DEF_WIDTH, -1),this,xTag); - firstBtn.setCustomStyle(true); + XCardSwitchButton xFirstBtn = new XCardSwitchButton(firstBtn, new Dimension(CardSwitchButton.DEF_WIDTH, -1), this, xTag); xFirstBtn.setBackupParent(xTag); return xFirstBtn; diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardTagLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardTagLayout.java index e40a7ca87..82170bacc 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardTagLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardTagLayout.java @@ -163,18 +163,6 @@ public class XWCardTagLayout extends XWHorizontalBoxLayout { * void */ public void adjustComponentWidth(){ - int btnNum = this.getComponentCount(); - int tagLayoutWidth = this.getWidth(); - int allBtnWidth = btnNum * CardSwitchButton.DEF_WIDTH + btnNum; - int size = CardSwitchButton.DEF_WIDTH; - if(tagLayoutWidth - allBtnWidth < CardSwitchButton.DEF_WIDTH){ - size = (tagLayoutWidth - CardSwitchButton.DEF_WIDTH - btnNum)/btnNum; - } - WCardTagLayout layout = (WCardTagLayout)this.toData(); - for(int i=0;i Date: Wed, 11 Jan 2017 10:55:29 +0800 Subject: [PATCH 032/343] =?UTF-8?q?REPORT-576=20font=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/designer/creator/cardlayout/XCardSwitchButton.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java index 11a6a9ba1..8e93dc5a0 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java @@ -31,7 +31,6 @@ import com.fr.form.ui.container.cardlayout.WTabFitLayout; import com.fr.general.Background; import com.fr.general.FRFont; import com.fr.general.Inter; -import sun.font.FontDesignMetrics; /** * @@ -352,7 +351,7 @@ public class XCardSwitchButton extends XButton { CardSwitchButton tempCard = (CardSwitchButton) temp.toData(); String tempText = tempCard.getText(); Font f = ((CardSwitchButton)this.toData()).getFont(); - FontMetrics fm = FontDesignMetrics.getMetrics(f); + FontMetrics fm = Toolkit.getDefaultToolkit().getFontMetrics(f); cardWidth.put(i,fm.stringWidth(tempText)); cardHeight.put(i,fm.getHeight()); } From 53068a5b3608156b16088f421995bbc0eceaac91 Mon Sep 17 00:00:00 2001 From: PanLi320 <854954082@qq.com> Date: Wed, 11 Jan 2017 14:34:04 +0800 Subject: [PATCH 033/343] =?UTF-8?q?=E6=97=A0jiar=E4=BB=BB=E5=8A=A1=20?= =?UTF-8?q?=E6=97=A9=E4=B8=8A=E4=BB=A3=E7=A0=81=E6=BC=8F=E4=BC=A0=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/designer/creator/cardlayout/XCardSwitchButton.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java index 8e93dc5a0..9116b3644 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java @@ -62,6 +62,8 @@ public class XCardSwitchButton extends XButton { // tab按钮里的字体因为按钮内部的布局看起来比正常的要小,加个调整量 private static final int FONT_SIZE_ADJUST = 2; + private static final int SIDE_OFFSET = 57; + private XWCardLayout cardLayout; private XWCardTagLayout tagLayout; From 5fa2691e8da5337a289f81f81cb9bac029172519 Mon Sep 17 00:00:00 2001 From: hugh Date: Wed, 11 Jan 2017 16:07:23 +0800 Subject: [PATCH 034/343] =?UTF-8?q?=E4=B8=BA=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E5=87=BD=E6=95=B0=E8=BF=9B=E8=A1=8C=E5=88=86=E7=BB=84=E3=80=90?= =?UTF-8?q?=E4=B8=80=E6=AC=A1=E5=BC=95=E5=85=A5=E4=B8=80=E7=BB=84=E5=85=AC?= =?UTF-8?q?=E5=BC=8F=E7=94=A8=EF=BC=8C=E6=AF=94=E5=A6=82=E8=B4=A2=E5=8A=A1?= =?UTF-8?q?=E4=B8=BB=E9=A2=98=E5=85=AC=E5=BC=8F=E3=80=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/formula/AbstractFunctionGroup.java | 30 +++++++++++++++++++ .../com/fr/design/formula/FormulaPane.java | 12 +++++++- .../fr/design/formula/FunctionConstants.java | 10 ++++++- .../formula/FunctionGroupDefineProvider.java | 12 ++++++++ 4 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 designer_base/src/com/fr/design/formula/AbstractFunctionGroup.java create mode 100644 designer_base/src/com/fr/design/formula/FunctionGroupDefineProvider.java diff --git a/designer_base/src/com/fr/design/formula/AbstractFunctionGroup.java b/designer_base/src/com/fr/design/formula/AbstractFunctionGroup.java new file mode 100644 index 000000000..c8a80f809 --- /dev/null +++ b/designer_base/src/com/fr/design/formula/AbstractFunctionGroup.java @@ -0,0 +1,30 @@ +package com.fr.design.formula; + +import com.fr.stable.fun.mark.API; +import com.fr.stable.script.FunctionDef; + +@API(level = FunctionGroupDefineProvider.CURRENT_LEVEL) +public abstract class AbstractFunctionGroup implements FunctionGroupDefineProvider { + + @Override + public int currentAPILevel() { + return CURRENT_LEVEL; + } + + @Override + public String mark4Provider() { + return getClass().getName(); + } + + @Override + public NameAndDescription[] getDescriptions() { + FunctionDef[] funcs = getFunctionDefs(); + int count = funcs.length; + FunctionDefNAD[] nads = new FunctionDefNAD[count]; + for (int i = 0; i < count; i ++) { + nads[i] = new FunctionDefNAD(funcs[i]); + } + return nads; + } + +} diff --git a/designer_base/src/com/fr/design/formula/FormulaPane.java b/designer_base/src/com/fr/design/formula/FormulaPane.java index d7e3f21be..d2910fa96 100644 --- a/designer_base/src/com/fr/design/formula/FormulaPane.java +++ b/designer_base/src/com/fr/design/formula/FormulaPane.java @@ -22,8 +22,10 @@ import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.Inter; import com.fr.parser.FRLexer; import com.fr.parser.FRParser; +import com.fr.plugin.ExtraClassManager; import com.fr.stable.ProductConstants; import com.fr.stable.StringUtils; +import com.fr.stable.fun.mark.Mutable; import com.fr.stable.script.Expression; import javax.swing.*; @@ -32,10 +34,12 @@ import javax.swing.event.ListSelectionListener; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.*; + import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.Locale; +import java.util.Set; /** * 公式编辑面板 * @editor zhou @@ -581,7 +585,13 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ functionTypeListModel.addElement(FunctionConstants.ALL); functionTypeListModel.addElement(FunctionConstants.CUSTOM); functionTypeListModel.addElement(FunctionConstants.PLUGIN); - + //hugh:自定义函数分组 + Set groups = ExtraClassManager.getInstance().getArray(FunctionGroupDefineProvider.MARK_STRING); + if(!groups.isEmpty()){ + for(Mutable group : groups){ + functionTypeListModel.addElement(group); + } + } functionTypeList.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent evt) { diff --git a/designer_base/src/com/fr/design/formula/FunctionConstants.java b/designer_base/src/com/fr/design/formula/FunctionConstants.java index cfb983dd7..d33ad58e8 100644 --- a/designer_base/src/com/fr/design/formula/FunctionConstants.java +++ b/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.StableUtils; import com.fr.stable.StringUtils; +import com.fr.stable.fun.FunctionGroupDefineProvider; +import com.fr.stable.fun.mark.Mutable; import com.fr.stable.script.Function; import com.fr.stable.script.FunctionDef; @@ -96,7 +98,13 @@ public abstract class FunctionConstants { } Collections.addAll(all, PLUGIN.getDescriptions()); Collections.addAll(all, CUSTOM.getDescriptions()); - + //hugh:自定义函数分组 + Set groups = ExtraClassManager.getInstance().getArray(FunctionGroupDefineProvider.MARK_STRING); + if(!groups.isEmpty()){ + for(Mutable group : groups){ + Collections.addAll(all, ((FunctionGroup)group).getDescriptions()); + } + } java.util.Collections.sort(all, NameAndDescriptionComparator); return all.toArray(new NameAndDescription[all.size()]); diff --git a/designer_base/src/com/fr/design/formula/FunctionGroupDefineProvider.java b/designer_base/src/com/fr/design/formula/FunctionGroupDefineProvider.java new file mode 100644 index 000000000..671a07fc7 --- /dev/null +++ b/designer_base/src/com/fr/design/formula/FunctionGroupDefineProvider.java @@ -0,0 +1,12 @@ +package com.fr.design.formula; + +import com.fr.design.formula.FunctionGroup; +import com.fr.stable.fun.mark.Mutable; +import com.fr.stable.script.FunctionDef; + +public interface FunctionGroupDefineProvider extends Mutable,FunctionGroup{ + int CURRENT_LEVEL = 1; + String MARK_STRING = "FunctionGroupDefineProvider"; + + public FunctionDef[] getFunctionDefs(); +} From 29fdfce305b17460eadcaad1f52df877b4d7aca2 Mon Sep 17 00:00:00 2001 From: hugh Date: Wed, 11 Jan 2017 17:13:29 +0800 Subject: [PATCH 035/343] =?UTF-8?q?=E6=8D=A2=E4=B8=AA=E5=9C=B0=E6=96=B9?= =?UTF-8?q?=E5=86=8D=E5=BC=80~?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/formula/FunctionDefNAD.java | 2 +- .../{formula => fun}/FunctionGroupDefineProvider.java | 2 +- .../design/{formula => fun/impl}/AbstractFunctionGroup.java | 6 +++++- 3 files changed, 7 insertions(+), 3 deletions(-) rename designer_base/src/com/fr/design/{formula => fun}/FunctionGroupDefineProvider.java (91%) rename designer_base/src/com/fr/design/{formula => fun/impl}/AbstractFunctionGroup.java (79%) diff --git a/designer_base/src/com/fr/design/formula/FunctionDefNAD.java b/designer_base/src/com/fr/design/formula/FunctionDefNAD.java index c7c2177b5..715660169 100644 --- a/designer_base/src/com/fr/design/formula/FunctionDefNAD.java +++ b/designer_base/src/com/fr/design/formula/FunctionDefNAD.java @@ -6,7 +6,7 @@ import com.fr.stable.StringUtils; public class FunctionDefNAD extends AbstractNameAndDescription { private FunctionDef def; - FunctionDefNAD(FunctionDef def) { + public FunctionDefNAD(FunctionDef def) { this.def = def; } diff --git a/designer_base/src/com/fr/design/formula/FunctionGroupDefineProvider.java b/designer_base/src/com/fr/design/fun/FunctionGroupDefineProvider.java similarity index 91% rename from designer_base/src/com/fr/design/formula/FunctionGroupDefineProvider.java rename to designer_base/src/com/fr/design/fun/FunctionGroupDefineProvider.java index 671a07fc7..906a56771 100644 --- a/designer_base/src/com/fr/design/formula/FunctionGroupDefineProvider.java +++ b/designer_base/src/com/fr/design/fun/FunctionGroupDefineProvider.java @@ -1,4 +1,4 @@ -package com.fr.design.formula; +package com.fr.design.fun; import com.fr.design.formula.FunctionGroup; import com.fr.stable.fun.mark.Mutable; diff --git a/designer_base/src/com/fr/design/formula/AbstractFunctionGroup.java b/designer_base/src/com/fr/design/fun/impl/AbstractFunctionGroup.java similarity index 79% rename from designer_base/src/com/fr/design/formula/AbstractFunctionGroup.java rename to designer_base/src/com/fr/design/fun/impl/AbstractFunctionGroup.java index c8a80f809..12cfce71e 100644 --- a/designer_base/src/com/fr/design/formula/AbstractFunctionGroup.java +++ b/designer_base/src/com/fr/design/fun/impl/AbstractFunctionGroup.java @@ -1,8 +1,12 @@ -package com.fr.design.formula; +package com.fr.design.fun.impl; +import com.fr.design.formula.FunctionDefNAD; +import com.fr.design.formula.NameAndDescription; +import com.fr.design.fun.FunctionGroupDefineProvider; import com.fr.stable.fun.mark.API; import com.fr.stable.script.FunctionDef; + @API(level = FunctionGroupDefineProvider.CURRENT_LEVEL) public abstract class AbstractFunctionGroup implements FunctionGroupDefineProvider { From fe67f6ad45d301fbb22f51d5baeb6895adb3243a Mon Sep 17 00:00:00 2001 From: hugh Date: Thu, 12 Jan 2017 08:05:41 +0800 Subject: [PATCH 036/343] =?UTF-8?q?=E6=8A=8A=E5=8E=9F=E6=9D=A5=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E9=87=8D=E4=B8=8D=E7=AC=A6=E5=90=88PMD=E8=A6=81?= =?UTF-8?q?=E6=B1=82=E7=9A=84=E6=9B=B4=E6=AD=A3=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/formula/FormulaPane.java | 427 +++++++++--------- .../fr/design/formula/FunctionConstants.java | 2 +- 2 files changed, 218 insertions(+), 211 deletions(-) diff --git a/designer_base/src/com/fr/design/formula/FormulaPane.java b/designer_base/src/com/fr/design/formula/FormulaPane.java index d2910fa96..870345897 100644 --- a/designer_base/src/com/fr/design/formula/FormulaPane.java +++ b/designer_base/src/com/fr/design/formula/FormulaPane.java @@ -8,6 +8,7 @@ import com.fr.design.border.UIRoundedBorder; import com.fr.design.constants.UIConstants; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.BasicPane; +import com.fr.design.fun.FunctionGroupDefineProvider; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.ilable.UILabel; @@ -64,29 +65,16 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ public FormulaPane() { initComponents(); } - - 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)); - formulaTextArea = new RSyntaxTextArea(); - configFormulaArea(); - formulaTextArea.addKeyListener(this); - - formulaTextArea.addKeyListener(new KeyAdapter() { + + private void initFormulaTextAreaKeyListener(){ + formulaTextArea.addKeyListener(this); + formulaTextArea.addKeyListener(new KeyAdapter() { public void keyReleased(KeyEvent e) { formulaTextArea.setForeground(Color.black); 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-Design_FormulaPane_Tips"); if(text.contains(tip)) { text = text.substring(0, text.indexOf(tip)); insertPosition = 0; @@ -94,9 +82,10 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ } } }); - - formulaTextArea.addMouseListener(new MouseAdapter() { - + } + + private void initFormulaTextAreaMouseListener(){ + formulaTextArea.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { insertPosition = formulaTextArea.getCaretPosition(); @@ -119,52 +108,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 public void keyTyped(KeyEvent e) { } - @Override public void keyReleased(KeyEvent e) { } - @Override public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ENTER) { String toFind = keyWordTextField.getText(); search(toFind, false); - fixFunctionNameList(); 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-Design_FormulaPane_Search")); + searchPane.add(searchButton, BorderLayout.EAST); + tipsPane.add(searchPane, BorderLayout.NORTH); + initKeyWordTextFieldKeyListener(); tipsList = new JList(listModel); tipsList.addMouseListener(new DoubleClick()); UIScrollPane tipsScrollPane = new UIScrollPane(tipsList); tipsScrollPane.setPreferredSize(new Dimension(170, 75)); tipsScrollPane.setBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, UIConstants.ARC)); - 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")); checkValidButton.addActionListener(checkValidActionListener); @@ -173,20 +191,7 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ checkBoxPane.setPreferredSize(new Dimension(450, 30)); checkBoxandbuttonPane.add(checkBoxPane, BorderLayout.WEST); checkBoxandbuttonPane.add(checkValidButton, BorderLayout.EAST); - 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(); this.add(variableTreeAndDescriptionArea, BorderLayout.SOUTH); } @@ -257,11 +262,17 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ 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 public void keyReleased(KeyEvent e) { 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(); currentPosition = formulaTextArea.getCaretPosition(); @@ -465,7 +476,8 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ String content = formula.getContent(); if (content.trim().equals("=")) { 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-Design_FormulaPane_Tips")); this.formulaTextArea.setCaretPosition(0); ifHasBeenWriten = 0; this.listModel.removeAllElements(); @@ -552,22 +564,21 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ public VariableTreeAndDescriptionArea() { this.initComponents(); } - - private void initComponents() { - this.setLayout(new BorderLayout(4, 4)); - - // Function - JPanel functionPane = new JPanel(new BorderLayout(4, 4)); - this.add(functionPane, BorderLayout.WEST); - - - functionTypeList = new QuickList(functionTypeListModel); + + private void initFunctionTypeList(JPanel functionPane){ + functionTypeList = new QuickList(functionTypeListModel); UIScrollPane functionTypeScrollPane = new UIScrollPane(functionTypeList); functionTypeScrollPane.setBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, UIConstants.ARC)); functionTypeScrollPane.setPreferredSize(new Dimension(140, 200)); 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 public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); @@ -577,54 +588,48 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ return this; } }); - - functionTypeListModel.addElement(FunctionConstants.COMMON); - for (int i = 0; i < FunctionConstants.EMBFUNCTIONS.length; i++) { - functionTypeListModel.addElement(FunctionConstants.EMBFUNCTIONS[i]); - } - functionTypeListModel.addElement(FunctionConstants.ALL); - functionTypeListModel.addElement(FunctionConstants.CUSTOM); - functionTypeListModel.addElement(FunctionConstants.PLUGIN); - //hugh:自定义函数分组 - Set groups = ExtraClassManager.getInstance().getArray(FunctionGroupDefineProvider.MARK_STRING); - if(!groups.isEmpty()){ - for(Mutable group : groups){ - functionTypeListModel.addElement(group); - } - } - functionTypeList.addListSelectionListener(new ListSelectionListener() { - + } + + private void initTypeListSelectionListener(){ + functionTypeList.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent evt) { Object selectedValue = ((JList) evt.getSource()).getSelectedValue(); if (!(selectedValue instanceof FunctionGroup)) { return; } - NameAndDescription[] nads = ((FunctionGroup) selectedValue).getDescriptions(); functionNameModel = (DefaultListModel) functionNameList.getModel(); - functionNameModel.clear(); - for (NameAndDescription nad : nads) { functionNameModel.addElement(nad); } - if (functionNameModel.size() > 0) { functionNameList.setSelectedIndex(0); functionNameList.ensureIndexIsVisible(0); } } }); - - functionNameList = new JList(new DefaultListModel()); - UIScrollPane functionNameScrollPane = new UIScrollPane(functionNameList); - functionNameScrollPane.setPreferredSize(new Dimension(140, 200)); - functionPane.add( - this.createNamePane(Inter.getLocText("FormulaD-Function_name") + ":", functionNameScrollPane), - BorderLayout.CENTER); - functionNameScrollPane.setBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, UIConstants.ARC)); - - functionNameList.setCellRenderer(new DefaultListCellRenderer() { + } + + private void initGroupTypeModel(){ + functionTypeListModel.addElement(FunctionConstants.COMMON); + for (int i = 0; i < FunctionConstants.EMBFUNCTIONS.length; i++) { + functionTypeListModel.addElement(FunctionConstants.EMBFUNCTIONS[i]); + } + functionTypeListModel.addElement(FunctionConstants.ALL); + functionTypeListModel.addElement(FunctionConstants.CUSTOM); + functionTypeListModel.addElement(FunctionConstants.PLUGIN); + //hugh:自定义函数分组 + Set groups = ExtraClassManager.getInstance().getArray(FunctionGroupDefineProvider.MARK_STRING); + if(!groups.isEmpty()){ + for(Mutable group : groups){ + functionTypeListModel.addElement(group); + } + } + } + + private void initFunctionNameListCellRenderer(){ + functionNameList.setCellRenderer(new DefaultListCellRenderer() { @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { @@ -635,8 +640,10 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ return this; } }); - - functionNameList.addListSelectionListener(new ListSelectionListener() { + } + + private void initFunctionNameListSelectionListener(){ + functionNameList.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent evt) { Object selectedValue = functionNameList.getSelectedValue(); @@ -650,11 +657,11 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ descriptionTextArea.moveCaretPosition(0); } }); - - functionNameList.addMouseListener(new MouseAdapter() { - + } + + private void initFunctionNameListMouseListener(){ + functionNameList.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent evt) { - if (evt.getClickCount() >= 2) { Object selectedValue = functionNameList.getSelectedValue(); if (!(selectedValue instanceof NameAndDescription)) { @@ -664,7 +671,6 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ applyText(insert); } - if (SwingUtilities.isRightMouseButton(evt)) { JPopupMenu popupMenu = new JPopupMenu(); LookDetailAction lookDetailAction = new LookDetailAction(); @@ -675,24 +681,28 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ } } }); - - // 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("Variables") + ":", variablesTreePane), BorderLayout.CENTER); - variablesTree.setRootVisible(false); - variablesTree.setShowsRootHandles(true); - variablesTree.addMouseListener(applyTextMouseListener); - variablesTree.setCellRenderer(applyTreeCellRenderer); - - // Description + } + + private void initFunctionNameList(JPanel functionPane){ + functionNameList = new JList(new DefaultListModel()); + UIScrollPane functionNameScrollPane = new UIScrollPane(functionNameList); + functionNameScrollPane.setPreferredSize(new Dimension(140, 200)); + functionPane.add( + this.createNamePane(Inter.getLocText("FormulaD-Function_name") + ":", functionNameScrollPane), + BorderLayout.CENTER); + functionNameScrollPane.setBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, UIConstants.ARC)); + initFunctionNameListCellRenderer(); + initFunctionNameListSelectionListener(); + initFunctionNameListMouseListener(); + } + + private void initDescriptionTextArea(){ + // Description descriptionTextArea = new UITextArea(16, 27); UIScrollPane desScrollPane = new UIScrollPane(descriptionTextArea); desScrollPane.setBorder(null); - this.add(this.createNamePane(Inter.getLocText("Formula_Description") + ":", desScrollPane), BorderLayout.EAST); + this.add(this.createNamePane(Inter.getLocText("FR-Design_FormulaPane_Formula_Description") + ":", desScrollPane), BorderLayout.EAST); descriptionTextArea.setBackground(new Color(255, 255, 225)); descriptionTextArea.setLineWrap(true); descriptionTextArea.setWrapStyleWord(true); @@ -706,19 +716,41 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ } }); - variablesTree.addTreeSelectionListener(new TreeSelectionListener() { - - public void valueChanged(TreeSelectionEvent e) { - Object selectedValue = ((DefaultMutableTreeNode) variablesTree.getLastSelectedPathComponent()).getUserObject(); + } + + private StringBuilder getText(TextUserObject selectedValue,String path) throws IOException{ + 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) { return; } - StringBuilder desBuf = new StringBuilder(); try { - Reader desReader; String path; - Locale locale = FRContext.getLocale(); if (locale.equals(Locale.CHINA)) { path = "/com/fr/design/insert/formula/variable/cn/"; @@ -726,43 +758,42 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ path = "/com/fr/design/insert/formula/variable/en/"; } if (selectedValue instanceof TextUserObject) { - - 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(); + desBuf = getText((TextUserObject)selectedValue,path); } } catch (IOException exp) { FRContext.getLogger().error(exp.getMessage(), exp); } - descriptionTextArea.setText(desBuf.toString()); - 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-Design_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); } @@ -773,7 +804,7 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ private class LookDetailAction extends UpdateAction { public LookDetailAction() { - this.setName(Inter.getLocText("Function_Detail")); + this.setName(Inter.getLocText("FR-Design_FormulaPane_Function_Detail")); this.setMnemonic('L'); this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_file/preview.png")); } @@ -788,7 +819,7 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ BasicPane basicPane = new BasicPane() { @Override protected String title4PopupWindow() { - return Inter.getLocText("Function_Detail"); + return Inter.getLocText("FR-Design_FormulaPane_Function_Detail"); } }; basicPane.setLayout(FRGUIPaneFactory.createBorderLayout()); @@ -865,7 +896,7 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ return this; } }; - + public void populate(VariableResolver variableResolver) { // varibale tree. DefaultTreeModel variableModel = (DefaultTreeModel) variablesTree.getModel(); @@ -878,53 +909,29 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ DefaultMutableTreeNode bindCellNode = new DefaultMutableTreeNode(new TextUserObject("$$$")); rootNode.add(bindCellNode); } - - { - MutableTreeNode tableTreeNode = new TextFolderUserObject( - Inter.getLocText("FormulaD-Data_Fields"), - BaseUtils.readIcon("/com/fr/design/images/dialog/table.png"), - variableResolver.resolveColumnNames()).createMutableTreeNode(); - - rootNode.add(tableTreeNode); - } - - { - // 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()); - } - - - { - 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("FormulaD-Data_Fields"), + BaseUtils.readIcon("/com/fr/design/images/dialog/table.png"), + variableResolver.resolveColumnNames()).createMutableTreeNode()); + + // Set cutReport Variable + rootNode.add(new TextFolderUserObject(Inter.getLocText("FR-Design_FormulaPane_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"), + BaseUtils.readIcon("/com/fr/design/images/m_report/p.gif"), + variableResolver.resolveReportParameterVariables()).createMutableTreeNode()); + + rootNode.add(new TextFolderUserObject(Inter.getLocText("M_Server-Global_Parameters"), + BaseUtils.readIcon("/com/fr/design/images/dialog/parameter.gif"), + variableResolver.resolveGlobalParameterVariables()).createMutableTreeNode()); + variableModel.reload(); - // Expand for (int row = 0; row < this.variablesTree.getRowCount(); row++) { this.variablesTree.expandRow(row); @@ -1003,6 +1010,6 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ buffer.append("|"); buffer.append("\n"); } - System.out.println(buffer.toString()); + FRContext.getLogger().debug(buffer.toString()); } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/formula/FunctionConstants.java b/designer_base/src/com/fr/design/formula/FunctionConstants.java index d33ad58e8..5acb506df 100644 --- a/designer_base/src/com/fr/design/formula/FunctionConstants.java +++ b/designer_base/src/com/fr/design/formula/FunctionConstants.java @@ -1,6 +1,7 @@ package com.fr.design.formula; import com.fr.base.FRContext; +import com.fr.design.fun.FunctionGroupDefineProvider; import com.fr.file.FunctionManager; import com.fr.file.FunctionManagerProvider; import com.fr.function.*; @@ -11,7 +12,6 @@ import com.fr.stable.EncodeConstants; import com.fr.stable.OperatingSystem; import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; -import com.fr.stable.fun.FunctionGroupDefineProvider; import com.fr.stable.fun.mark.Mutable; import com.fr.stable.script.Function; import com.fr.stable.script.FunctionDef; From 9d9cbacef0bd50a56148f4b7ae28648ca1f9db31 Mon Sep 17 00:00:00 2001 From: hugh Date: Thu, 12 Jan 2017 12:35:51 +0800 Subject: [PATCH 037/343] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=9B=BD=E9=99=85?= =?UTF-8?q?=E5=8C=96=EF=BC=8C=E5=91=BD=E5=90=8D=E4=B9=8B=E7=B1=BB=E7=9A=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/formula/FormulaPane.java | 19 +++++++++---------- .../fr/design/formula/FunctionConstants.java | 3 +-- .../com/fr/design/formula/FunctionGroup.java | 4 ++++ .../fun/FunctionGroupDefineProvider.java | 12 ------------ .../fun/impl/AbstractFunctionGroup.java | 10 +++++++--- .../com/fr/design/locale/designer.properties | 6 ++++++ .../design/locale/designer_en_US.properties | 6 ++++++ .../design/locale/designer_ja_JP.properties | 6 ++++++ .../design/locale/designer_ko_KR.properties | 6 ++++++ .../design/locale/designer_zh_CN.properties | 6 ++++++ .../design/locale/designer_zh_TW.properties | 6 ++++++ 11 files changed, 57 insertions(+), 27 deletions(-) delete mode 100644 designer_base/src/com/fr/design/fun/FunctionGroupDefineProvider.java diff --git a/designer_base/src/com/fr/design/formula/FormulaPane.java b/designer_base/src/com/fr/design/formula/FormulaPane.java index 870345897..260ca917b 100644 --- a/designer_base/src/com/fr/design/formula/FormulaPane.java +++ b/designer_base/src/com/fr/design/formula/FormulaPane.java @@ -8,7 +8,6 @@ import com.fr.design.border.UIRoundedBorder; import com.fr.design.constants.UIConstants; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.BasicPane; -import com.fr.design.fun.FunctionGroupDefineProvider; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.ilable.UILabel; @@ -74,7 +73,7 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ String text = formulaTextArea.getText(); // 判断在中文输入状态是否还包含提示符 要删掉 //Tips:You_Can_Input_B1_To_Input_The_Data_Of_The_First_Row_Second_Column - String tip = "\n\n\n" + Inter.getLocText("FR-Design_FormulaPane_Tips"); + String tip = "\n\n\n" + Inter.getLocText("FR-Designer_FormulaPane_Tips"); if(text.contains(tip)) { text = text.substring(0, text.indexOf(tip)); insertPosition = 0; @@ -144,7 +143,7 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ JPanel searchPane = new JPanel(new BorderLayout(4, 4)); searchPane.add(keyWordTextField, BorderLayout.CENTER); - UIButton searchButton = new UIButton(Inter.getLocText("FR-Design_FormulaPane_Search")); + UIButton searchButton = new UIButton(Inter.getLocText("FR-Designer_FormulaPane_Search")); searchPane.add(searchButton, BorderLayout.EAST); tipsPane.add(searchPane, BorderLayout.NORTH); initKeyWordTextFieldKeyListener(); @@ -477,7 +476,7 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ if (content.trim().equals("=")) { this.formulaTextArea.setForeground(Color.gray); //Tips:You_Can_Input_B1_To_Input_The_Data_Of_The_First_Row_Second_Column - this.formulaTextArea.setText("\n\n\n" + Inter.getLocText("FR-Design_FormulaPane_Tips")); + this.formulaTextArea.setText("\n\n\n" + Inter.getLocText("FR-Designer_FormulaPane_Tips")); this.formulaTextArea.setCaretPosition(0); ifHasBeenWriten = 0; this.listModel.removeAllElements(); @@ -620,7 +619,7 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ functionTypeListModel.addElement(FunctionConstants.CUSTOM); functionTypeListModel.addElement(FunctionConstants.PLUGIN); //hugh:自定义函数分组 - Set groups = ExtraClassManager.getInstance().getArray(FunctionGroupDefineProvider.MARK_STRING); + Set groups = ExtraClassManager.getInstance().getArray(FunctionGroup.MARK_STRING); if(!groups.isEmpty()){ for(Mutable group : groups){ functionTypeListModel.addElement(group); @@ -702,7 +701,7 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ UIScrollPane desScrollPane = new UIScrollPane(descriptionTextArea); desScrollPane.setBorder(null); - this.add(this.createNamePane(Inter.getLocText("FR-Design_FormulaPane_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.setLineWrap(true); descriptionTextArea.setWrapStyleWord(true); @@ -775,7 +774,7 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ UIScrollPane variablesTreePane = new UIScrollPane(variablesTree); variablesTreePane.setBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, UIConstants.ARC)); this.add(this.createNamePane( - Inter.getLocText("FR-Design_FormulaPane_Variables") + ":", variablesTreePane), BorderLayout.CENTER); + Inter.getLocText("FR-Designer_FormulaPane_Variables") + ":", variablesTreePane), BorderLayout.CENTER); variablesTree.setRootVisible(false); variablesTree.setShowsRootHandles(true); variablesTree.addMouseListener(applyTextMouseListener); @@ -804,7 +803,7 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ private class LookDetailAction extends UpdateAction { public LookDetailAction() { - this.setName(Inter.getLocText("FR-Design_FormulaPane_Function_Detail")); + this.setName(Inter.getLocText("FR-Designer_FormulaPane_Function_Detail")); this.setMnemonic('L'); this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_file/preview.png")); } @@ -819,7 +818,7 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ BasicPane basicPane = new BasicPane() { @Override protected String title4PopupWindow() { - return Inter.getLocText("FR-Design_FormulaPane_Function_Detail"); + return Inter.getLocText("FR-Designer_FormulaPane_Function_Detail"); } }; basicPane.setLayout(FRGUIPaneFactory.createBorderLayout()); @@ -915,7 +914,7 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ variableResolver.resolveColumnNames()).createMutableTreeNode()); // Set cutReport Variable - rootNode.add(new TextFolderUserObject(Inter.getLocText("FR-Design_FormulaPane_Variables"), + rootNode.add(new TextFolderUserObject(Inter.getLocText("FR-Designer_FormulaPane_Variables"), BaseUtils.readIcon("/com/fr/design/images/dialog/variable.png"), variableResolver.resolveCurReportVariables()).createMutableTreeNode()); diff --git a/designer_base/src/com/fr/design/formula/FunctionConstants.java b/designer_base/src/com/fr/design/formula/FunctionConstants.java index 5acb506df..372409583 100644 --- a/designer_base/src/com/fr/design/formula/FunctionConstants.java +++ b/designer_base/src/com/fr/design/formula/FunctionConstants.java @@ -1,7 +1,6 @@ package com.fr.design.formula; import com.fr.base.FRContext; -import com.fr.design.fun.FunctionGroupDefineProvider; import com.fr.file.FunctionManager; import com.fr.file.FunctionManagerProvider; import com.fr.function.*; @@ -99,7 +98,7 @@ public abstract class FunctionConstants { Collections.addAll(all, PLUGIN.getDescriptions()); Collections.addAll(all, CUSTOM.getDescriptions()); //hugh:自定义函数分组 - Set groups = ExtraClassManager.getInstance().getArray(FunctionGroupDefineProvider.MARK_STRING); + Set groups = ExtraClassManager.getInstance().getArray(FunctionGroup.MARK_STRING); if(!groups.isEmpty()){ for(Mutable group : groups){ Collections.addAll(all, ((FunctionGroup)group).getDescriptions()); diff --git a/designer_base/src/com/fr/design/formula/FunctionGroup.java b/designer_base/src/com/fr/design/formula/FunctionGroup.java index 4764454ed..b2d181b12 100644 --- a/designer_base/src/com/fr/design/formula/FunctionGroup.java +++ b/designer_base/src/com/fr/design/formula/FunctionGroup.java @@ -2,6 +2,10 @@ package com.fr.design.formula; public interface FunctionGroup { + + int CURRENT_LEVEL = 1; + String MARK_STRING = "FunctionGroup"; + String getGroupName(); NameAndDescription[] getDescriptions(); } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/fun/FunctionGroupDefineProvider.java b/designer_base/src/com/fr/design/fun/FunctionGroupDefineProvider.java deleted file mode 100644 index 906a56771..000000000 --- a/designer_base/src/com/fr/design/fun/FunctionGroupDefineProvider.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.fr.design.fun; - -import com.fr.design.formula.FunctionGroup; -import com.fr.stable.fun.mark.Mutable; -import com.fr.stable.script.FunctionDef; - -public interface FunctionGroupDefineProvider extends Mutable,FunctionGroup{ - int CURRENT_LEVEL = 1; - String MARK_STRING = "FunctionGroupDefineProvider"; - - public FunctionDef[] getFunctionDefs(); -} diff --git a/designer_base/src/com/fr/design/fun/impl/AbstractFunctionGroup.java b/designer_base/src/com/fr/design/fun/impl/AbstractFunctionGroup.java index 12cfce71e..674339362 100644 --- a/designer_base/src/com/fr/design/fun/impl/AbstractFunctionGroup.java +++ b/designer_base/src/com/fr/design/fun/impl/AbstractFunctionGroup.java @@ -1,14 +1,15 @@ package com.fr.design.fun.impl; import com.fr.design.formula.FunctionDefNAD; +import com.fr.design.formula.FunctionGroup; import com.fr.design.formula.NameAndDescription; -import com.fr.design.fun.FunctionGroupDefineProvider; import com.fr.stable.fun.mark.API; +import com.fr.stable.fun.mark.Mutable; import com.fr.stable.script.FunctionDef; -@API(level = FunctionGroupDefineProvider.CURRENT_LEVEL) -public abstract class AbstractFunctionGroup implements FunctionGroupDefineProvider { +@API(level = FunctionGroup.CURRENT_LEVEL) +public abstract class AbstractFunctionGroup implements Mutable, FunctionGroup { @Override public int currentAPILevel() { @@ -31,4 +32,7 @@ public abstract class AbstractFunctionGroup implements FunctionGroupDefineProvid return nads; } + public FunctionDef[] getFunctionDefs(){ + return new FunctionDef[0]; + } } diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 9f7923265..88782f840 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -510,3 +510,9 @@ FR-Designer_Create_Tree= FR-Designer_Set_Callback_Function= FR-Designer_ConfirmDialog_Content= FR-Designer_ConfirmDialog_Title= + +FR-Designer_FormulaPane_Tips=Tips\:You_Can_Input_B1_To_Input_The_Data_Of_The_First_Row_Second_Column +FR-Designer_FormulaPane_Variables=Variables +FR-Designer_FormulaPane_Formula_Description=Formula_Description +FR-Designer_FormulaPane_Function_Detail=Function Detail +FR-Designer_FormulaPane_Search=Search \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index b21847d0e..a156ba4d4 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -510,3 +510,9 @@ FR-Designer_Create_Tree=Build Tree FR-Designer_Set_Callback_Function=Set Callback Function FR-Designer_ConfirmDialog_Content= FR-Designer_ConfirmDialog_Title= + +FR-Designer_FormulaPane_Tips=Tips\:You can input B1 to get the data in the second cell of the first row +FR-Designer_FormulaPane_Variables=Variables +FR-Designer_FormulaPane_Formula_Description=Formula Description +FR-Designer_FormulaPane_Function_Detail=Function Detail +FR-Designer_FormulaPane_Search=Search diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index 5ec06064b..e285674c8 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -489,3 +489,9 @@ FR-Designer_Create_Tree= FR-Designer_Set_Callback_Function= FR-Designer_ConfirmDialog_Content= FR-Designer_ConfirmDialog_Title= + +FR-Designer_FormulaPane_Tips=\u30D2\u30F3\u30C8\:B1\u3092\u5165\u529B +FR-Designer_FormulaPane_Variables=\u5909\u6570 +FR-Designer_FormulaPane_Formula_Description=\u516C\u5F0F\u8AAC\u660E +FR-Designer_FormulaPane_Function_Detail=\u95A2\u6570\u660E\u7D30 +FR-Designer_FormulaPane_Search=\u691C\u7D22 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index 3e27c558f..74b556358 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -484,3 +484,9 @@ FR-Designer_Create_Tree= FR-Designer_Set_Callback_Function= FR-Designer_ConfirmDialog_Content= FR-Designer_ConfirmDialog_Title= + +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_FormulaPane_Variables=\uBCC0\uC218 +FR-Designer_FormulaPane_Formula_Description=\uC218\uC2DD\uC124\uBA85 +FR-Designer_FormulaPane_Function_Detail=\uD568\uC218\uC0C1\uC138\uC0AC\uD56D +FR-Designer_FormulaPane_Search=\uAC80\uC0C9 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index d43f8746b..e45bafdd0 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -514,3 +514,9 @@ FR-Designer_Create_Tree=\u6784\u5EFA\u6811 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_Title=FineReport 8.0 + +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_FormulaPane_Variables=\u53D8\u91CF +FR-Designer_FormulaPane_Formula_Description=\u516C\u5F0F\u8BF4\u660E +FR-Designer_FormulaPane_Function_Detail=\u51FD\u6570\u660E\u7EC6 +FR-Designer_FormulaPane_Search=\u641C\u7D22 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 58868eb0d..ecb1063cc 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -502,3 +502,9 @@ FR-Designer_Create_Tree= FR-Designer_Set_Callback_Function= FR-Designer_ConfirmDialog_Content= FR-Designer_ConfirmDialog_Title= + +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_FormulaPane_Variables=\u8B8A\u91CF +FR-Designer_FormulaPane_Formula_Description=\u516C\u5F0F\u8AAA\u660E +FR-Designer_FormulaPane_Function_Detail=\u51FD\u6578\u660E\u7D30 +FR-Designer_FormulaPane_Search=\u641C\u7D22 \ No newline at end of file From bbff9a6b8384dd290fb846884fa3689c6a11dbfc Mon Sep 17 00:00:00 2001 From: lee <854954082@qq.com> Date: Thu, 12 Jan 2017 17:06:38 +0800 Subject: [PATCH 038/343] =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/locale/designer.properties | 5 ++++- .../src/com/fr/design/locale/designer_en_US.properties | 3 +++ .../src/com/fr/design/locale/designer_ja_JP.properties | 5 ++++- .../src/com/fr/design/locale/designer_ko_KR.properties | 5 ++++- .../src/com/fr/design/locale/designer_zh_CN.properties | 5 ++++- .../src/com/fr/design/locale/designer_zh_TW.properties | 5 ++++- 6 files changed, 23 insertions(+), 5 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 88782f840..fbb7111a4 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -515,4 +515,7 @@ FR-Designer_FormulaPane_Tips=Tips\:You_Can_Input_B1_To_Input_The_Data_Of_The_Fir FR-Designer_FormulaPane_Variables=Variables FR-Designer_FormulaPane_Formula_Description=Formula_Description FR-Designer_FormulaPane_Function_Detail=Function Detail -FR-Designer_FormulaPane_Search=Search \ No newline at end of file +FR-Designer_FormulaPane_Search=Search +FR-Designer_Tab_carousel= +FR-Designer_setCarousel= +FR-Designer_carouselInterval= \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index a156ba4d4..227811319 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -516,3 +516,6 @@ FR-Designer_FormulaPane_Variables=Variables FR-Designer_FormulaPane_Formula_Description=Formula Description FR-Designer_FormulaPane_Function_Detail=Function Detail FR-Designer_FormulaPane_Search=Search +FR-Designer_Tab_carousel= +FR-Designer_setCarousel= +FR-Designer_carouselInterval= \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index e285674c8..efe89b5b9 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -494,4 +494,7 @@ FR-Designer_FormulaPane_Tips=\u30D2\u30F3\u30C8\:B1\u3092\u5165\u529B FR-Designer_FormulaPane_Variables=\u5909\u6570 FR-Designer_FormulaPane_Formula_Description=\u516C\u5F0F\u8AAC\u660E FR-Designer_FormulaPane_Function_Detail=\u95A2\u6570\u660E\u7D30 -FR-Designer_FormulaPane_Search=\u691C\u7D22 \ No newline at end of file +FR-Designer_FormulaPane_Search=\u691C\u7D22 +FR-Designer_Tab_carousel= +FR-Designer_setCarousel= +FR-Designer_carouselInterval= \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index 74b556358..0d2995ab2 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -489,4 +489,7 @@ FR-Designer_FormulaPane_Tips=\uC54C\uB9BC\: B1\uC744\uC785\uB825\uD558\uC5EC\uCC FR-Designer_FormulaPane_Variables=\uBCC0\uC218 FR-Designer_FormulaPane_Formula_Description=\uC218\uC2DD\uC124\uBA85 FR-Designer_FormulaPane_Function_Detail=\uD568\uC218\uC0C1\uC138\uC0AC\uD56D -FR-Designer_FormulaPane_Search=\uAC80\uC0C9 \ No newline at end of file +FR-Designer_FormulaPane_Search=\uAC80\uC0C9 +FR-Designer_Tab_carousel= +FR-Designer_setCarousel= +FR-Designer_carouselInterval= \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index e45bafdd0..a5040a19d 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -519,4 +519,7 @@ FR-Designer_FormulaPane_Tips=\u63D0\u793A\:\u60A8\u53EF\u4EE5\u901A\u8FC7\u8F93\ FR-Designer_FormulaPane_Variables=\u53D8\u91CF FR-Designer_FormulaPane_Formula_Description=\u516C\u5F0F\u8BF4\u660E FR-Designer_FormulaPane_Function_Detail=\u51FD\u6570\u660E\u7EC6 -FR-Designer_FormulaPane_Search=\u641C\u7D22 \ No newline at end of file +FR-Designer_FormulaPane_Search=\u641C\u7D22 +FR-Designer_Tab_carousel=tab\u8F6E\u64AD +FR-Designer_setCarousel=\u5F00\u542F\u8F6E\u64AD +FR-Designer_carouselInterval=\u8F6E\u64AD\u95F4\u9694 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index ecb1063cc..acd8e773b 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -507,4 +507,7 @@ FR-Designer_FormulaPane_Tips=\u63D0\u793A\:\u60A8\u53EF\u4EE5\u901A\u904E\u8F38\ FR-Designer_FormulaPane_Variables=\u8B8A\u91CF FR-Designer_FormulaPane_Formula_Description=\u516C\u5F0F\u8AAA\u660E FR-Designer_FormulaPane_Function_Detail=\u51FD\u6578\u660E\u7D30 -FR-Designer_FormulaPane_Search=\u641C\u7D22 \ No newline at end of file +FR-Designer_FormulaPane_Search=\u641C\u7D22 +FR-Designer_Tab_carousel= +FR-Designer_setCarousel= +FR-Designer_carouselInterval= \ No newline at end of file From 3e336de89112134b56027d55542717a26f04e6a2 Mon Sep 17 00:00:00 2001 From: lee <854954082@qq.com> Date: Thu, 12 Jan 2017 17:16:24 +0800 Subject: [PATCH 039/343] 1 1 --- .../creator/cardlayout/XCardAddButton.java | 3 +- .../creator/cardlayout/XCardSwitchButton.java | 3 +- .../creator/cardlayout/XWCardLayout.java | 90 ++++++++++++++----- 3 files changed, 73 insertions(+), 23 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardAddButton.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardAddButton.java index 2c6a0036b..caf259f3e 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardAddButton.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardAddButton.java @@ -146,7 +146,8 @@ public class XCardAddButton extends XButton{ //设置标题 titleButton.setText(getTabTitleName()); titleButton.setInitialBackground(ColorBackground.getInstance(Color.WHITE)); - XCardSwitchButton showButton = new XCardSwitchButton(titleButton,dimension,cardLayout,tagLayout); + XCardSwitchButton showButton = new XCardSwitchButton(titleButton, dimension, cardLayout, tagLayout); + titleButton.setCustomStyle(true); titleButton.setShowButton(true); showButton.setBackupParent(tagLayout); diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java index 9116b3644..f7e610483 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java @@ -11,6 +11,7 @@ import java.util.*; import javax.swing.*; import com.fr.base.BaseUtils; +import com.fr.base.GraphHelper; import com.fr.base.background.ColorBackground; import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.ComponentAdapter; @@ -353,7 +354,7 @@ public class XCardSwitchButton extends XButton { CardSwitchButton tempCard = (CardSwitchButton) temp.toData(); String tempText = tempCard.getText(); Font f = ((CardSwitchButton)this.toData()).getFont(); - FontMetrics fm = Toolkit.getDefaultToolkit().getFontMetrics(f); + FontMetrics fm = GraphHelper.getFontMetrics(f); cardWidth.put(i,fm.stringWidth(tempText)); cardHeight.put(i,fm.getHeight()); } diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java index d008ccd52..d98e6a35b 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java @@ -6,13 +6,16 @@ package com.fr.design.designer.creator.cardlayout; import com.fr.base.background.ColorBackground; import com.fr.design.designer.beans.LayoutAdapter; import com.fr.design.designer.beans.adapters.layout.FRCardLayoutAdapter; +import com.fr.design.designer.beans.events.DesignerEvent; import com.fr.design.designer.beans.models.SelectionModel; import com.fr.design.designer.creator.*; import com.fr.design.form.layout.FRCardLayout; import com.fr.design.form.util.XCreatorConstants; import com.fr.design.mainframe.FormDesigner; +import com.fr.design.mainframe.WidgetPropertyPane; +import com.fr.design.mainframe.widget.editors.BooleanEditor; import com.fr.design.mainframe.widget.editors.CardTagWLayoutBorderStyleEditor; -import com.fr.design.mainframe.widget.renderer.LayoutBorderStyleRenderer; +import com.fr.design.mainframe.widget.editors.DoubleEditor; import com.fr.form.ui.*; import com.fr.form.ui.container.WBorderLayout; import com.fr.form.ui.container.WCardLayout; @@ -22,6 +25,7 @@ import com.fr.form.ui.container.cardlayout.WCardTagLayout; import com.fr.form.ui.container.cardlayout.WCardTitleLayout; import com.fr.general.ComparatorUtils; import com.fr.general.Inter; +import com.fr.stable.ArrayUtils; import com.fr.stable.Constants; import com.fr.stable.core.PropertyChangeAdapter; @@ -39,6 +43,8 @@ public class XWCardLayout extends XLayoutContainer { private CardLayout cardLayout; private boolean initFlag = true; private static final int NORTH = 0; + private FormDesigner designer; + //默认蓝色标题背景 private static final Color TITLE_COLOR = new Color(51, 132, 240); @@ -197,6 +203,7 @@ public class XWCardLayout extends XLayoutContainer { CardSwitchButton firstBtn = new CardSwitchButton(widgetName); firstBtn.setText(Inter.getLocText("FR-Designer_Title") + 0); firstBtn.setInitialBackground(ColorBackground.getInstance(Color.WHITE)); + firstBtn.setCustomStyle(true); xTag.setCurrentCard(firstBtn); XCardSwitchButton xFirstBtn = new XCardSwitchButton(firstBtn, new Dimension(CardSwitchButton.DEF_WIDTH, -1), this, xTag); xFirstBtn.setBackupParent(xTag); @@ -271,27 +278,68 @@ public class XWCardLayout extends XLayoutContainer { * @throws IntrospectionException */ public CRPropertyDescriptor[] supportedDescriptor() throws IntrospectionException { - return new CRPropertyDescriptor[] { - new CRPropertyDescriptor("widgetName", this.data.getClass()).setI18NName(Inter - .getLocText("FR-Designer_Form-Widget_Name")).setPropertyChangeListener(new PropertyChangeAdapter(){ - - @Override - public void propertyChange(){ - WCardLayout cardLayout = toData(); - changeRalateSwitchCardname(cardLayout.getWidgetName()); - } - }), - new CRPropertyDescriptor("borderStyle", this.data.getClass()).setEditorClass( - CardTagWLayoutBorderStyleEditor.class).setI18NName( - Inter.getLocText("FR-Engine_Style")).putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced") - .setPropertyChangeListener(new PropertyChangeAdapter() { + CRPropertyDescriptor[] crp = ((WCardLayout) data).isCarousel() ? getisCarousel() : getisnotCarousel(); + return ArrayUtils.addAll(getDefaultDescriptor(), crp); + } + + public CRPropertyDescriptor[] getisCarousel() throws IntrospectionException { + return new CRPropertyDescriptor[] { + new CRPropertyDescriptor("carousel", this.data.getClass()) + .setEditorClass(BooleanEditor.class) + .setI18NName(Inter.getLocText("FR-Designer_setCarousel")) + .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "FR-Designer_Tab_carousel") + .setPropertyChangeListener(new PropertyChangeAdapter() { + @Override + public void propertyChange() { + designer = WidgetPropertyPane.getInstance().getEditingFormDesigner(); + designer.getEditListenerTable().fireCreatorModified(DesignerEvent.CREATOR_EDITED); + } + }), + new CRPropertyDescriptor("carouselInterval", this.data.getClass()) + .setEditorClass(DoubleEditor.class) + .setI18NName(Inter.getLocText("FR-Designer_carouselInterval")) + .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "FR-Designer_Tab_carousel") + }; + } + + public CRPropertyDescriptor[] getisnotCarousel() throws IntrospectionException { + return new CRPropertyDescriptor[] { + new CRPropertyDescriptor("carousel", this.data.getClass()) + .setEditorClass(BooleanEditor.class) + .setI18NName(Inter.getLocText("FR-Designer_setCarousel")) + .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "FR-Designer_Tab_carousel") + .setPropertyChangeListener(new PropertyChangeAdapter() { + @Override + public void propertyChange() { + designer = WidgetPropertyPane.getInstance().getEditingFormDesigner(); + designer.getEditListenerTable().fireCreatorModified(DesignerEvent.CREATOR_EDITED); + } + }) + }; + } + + public CRPropertyDescriptor[] getDefaultDescriptor() throws IntrospectionException { + return new CRPropertyDescriptor[] { + new CRPropertyDescriptor("widgetName", this.data.getClass()).setI18NName(Inter + .getLocText("FR-Designer_Form-Widget_Name")).setPropertyChangeListener(new PropertyChangeAdapter(){ + + @Override + public void propertyChange(){ + WCardLayout cardLayout = toData(); + changeRalateSwitchCardname(cardLayout.getWidgetName()); + } + }), + new CRPropertyDescriptor("borderStyle", this.data.getClass()).setEditorClass( + CardTagWLayoutBorderStyleEditor.class).setI18NName( + Inter.getLocText("FR-Engine_Style")).putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced") + .setPropertyChangeListener(new PropertyChangeAdapter() { - @Override - public void propertyChange() { - initStyle(); - } - }), - }; + @Override + public void propertyChange() { + initStyle(); + } + }) + }; } //初始化样式 From 49e88c6ced05c9f6853550e5ef9da6179189a7fd Mon Sep 17 00:00:00 2001 From: lee <854954082@qq.com> Date: Fri, 13 Jan 2017 15:03:50 +0800 Subject: [PATCH 040/343] =?UTF-8?q?REPORT-576=20=E5=AD=97=E4=BD=93?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E5=8A=9F=E8=83=BD=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../creator/cardlayout/XCardSwitchButton.java | 26 ++++++++++++++++--- .../creator/cardlayout/XWTabFitLayout.java | 9 +++++++ 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java index f7e610483..fdfaaa0dc 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java @@ -12,6 +12,7 @@ import javax.swing.*; import com.fr.base.BaseUtils; import com.fr.base.GraphHelper; +import com.fr.base.ScreenResolution; import com.fr.base.background.ColorBackground; import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.ComponentAdapter; @@ -70,7 +71,7 @@ public class XCardSwitchButton extends XButton { private Background selectBackground; private boolean isCustomStyle; - + private UILabel label; private Icon closeIcon = MOUSE_COLSE; @@ -106,6 +107,14 @@ public class XCardSwitchButton extends XButton { this.selectBackground = selectBackground; } + public UILabel getLabel() { + return label; + } + + public void setLabel(UILabel label) { + this.label = label; + } + public XCardSwitchButton(CardSwitchButton widget, Dimension initSize) { super(widget, initSize); } @@ -161,7 +170,8 @@ public class XCardSwitchButton extends XButton { // 切换到当前tab按钮对应的tabFitLayout XWTabFitLayout tabFitLayout = (XWTabFitLayout) cardLayout.getComponent(index); - tabFitLayout.setxCardSwitchButton(this); + XCardSwitchButton xCardSwitchButton = (XCardSwitchButton) this.tagLayout.getComponent(index); + tabFitLayout.setxCardSwitchButton(xCardSwitchButton); selectionModel.setSelectedCreator(tabFitLayout); if (editingMouseListener.stopEditing()) { @@ -307,7 +317,7 @@ public class XCardSwitchButton extends XButton { // 标题部分 WidgetTitle title = style.getTitle(); - FRFont font = title.getFrFont(); + FRFont font = button.getFont(); FRFont newFont = FRFont.getInstance(font.getName(),font.getStyle(),font.getSize() + FONT_SIZE_ADJUST); UILabel label = this.getContentLabel(); label.setFont(newFont); @@ -377,9 +387,13 @@ public class XCardSwitchButton extends XButton { this.tagLayout.getComponent(i).setBounds(rectangle); Dimension dimension = new Dimension(); dimension.setSize(cardWidth, cardHeight); + CardSwitchButton cardSwitchButton = (CardSwitchButton) temp.toData(); + FRFont frFont = cardSwitchButton.getFont(); XCardSwitchButton temp = (XCardSwitchButton) this.tagLayout.getComponent(i); UILabel label = temp.getContentLabel(); label.setSize(dimension); + label.setFont(frFont.applyResolutionNP(ScreenResolution.getScreenResolution())); + label.setForeground(frFont.getForeground()); temp.setContentLabel(label); temp.setSize(dimension); temp.setPreferredSize(new Dimension(cardWidth, cardHeight)); @@ -391,4 +405,10 @@ public class XCardSwitchButton extends XButton { super.doLayout(); setTabsAndAdjust(); } + + @Override + protected void initXCreatorProperties() { + super.initXCreatorProperties(); + label = this.getContentLabel(); + } } diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java index d772e3b45..e9d7b58c3 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java @@ -5,6 +5,7 @@ import java.beans.IntrospectionException; import javax.swing.border.Border; +import com.fr.base.ScreenResolution; import com.fr.base.background.ColorBackground; import com.fr.design.designer.beans.LayoutAdapter; import com.fr.design.designer.beans.adapters.layout.FRTabFitLayoutAdapter; @@ -15,6 +16,7 @@ import com.fr.design.designer.creator.XLayoutContainer; import com.fr.design.designer.creator.XWFitLayout; import com.fr.design.form.util.XCreatorConstants; import com.fr.design.fun.WidgetPropertyUIProvider; +import com.fr.design.gui.ilable.UILabel; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.FormHierarchyTreePane; import com.fr.design.mainframe.widget.editors.ButtonTypeEditor; @@ -164,6 +166,13 @@ public class XWTabFitLayout extends XWFitLayout { new PropertyChangeAdapter() { @Override public void propertyChange() { + font = ((WTabFitLayout) data).getFont(); + CardSwitchButton cardSwitchButton = (CardSwitchButton) xCardSwitchButton.toData(); + cardSwitchButton.setFont(font); + UILabel uiLabel = xCardSwitchButton.getLabel(); + uiLabel.setFont(font.applyResolutionNP(ScreenResolution.getScreenResolution())); + uiLabel.setForeground(font.getForeground()); + xCardSwitchButton.setLabel(uiLabel); } }), }; From 406c5e7d1b1e3dde18c605c3f0abfd0f79537c60 Mon Sep 17 00:00:00 2001 From: hugh Date: Sat, 14 Jan 2017 10:59:03 +0800 Subject: [PATCH 041/343] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=EF=BC=8C=E5=88=86=E7=A6=BB=E5=8E=9F=E6=9D=A5=E7=9A=84=E6=96=B9?= =?UTF-8?q?=E6=B3=95=EF=BC=8C=E5=8D=95=E7=8B=AC=E6=88=90=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=EF=BC=8C=E4=B8=BA=E4=BA=86=E6=96=B9=E4=BE=BF=E7=AE=97=E5=AD=90?= =?UTF-8?q?=E7=94=9F=E6=88=90=E6=97=B6=E8=8E=B7=E5=8F=96=E5=88=86=E7=BB=84?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E9=87=8C=E9=9D=A2=E7=9A=84=E5=87=BD=E6=95=B0?= =?UTF-8?q?=E3=80=82=E6=B2=A1=E6=9C=89=E5=8A=A8FinctionGroup=E8=BF=99?= =?UTF-8?q?=E4=B8=AA=E6=8E=A5=E5=8F=A3=EF=BC=8C=E5=9B=A0=E4=B8=BA=E5=8A=A8?= =?UTF-8?q?=E8=BF=99=E9=87=8C=E7=89=B5=E6=89=AF=E5=A4=AA=E5=B9=BF=E4=BA=86?= =?UTF-8?q?=EF=BC=8C=E5=8D=95=E7=8B=AC=E5=81=9A=E4=B8=80=E4=B8=AA=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E4=B8=93=E8=81=8C=E8=8E=B7=E5=8F=96=E5=85=AC=E5=BC=8F?= =?UTF-8?q?=E5=B0=B1=E5=A5=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/formula/FormulaPane.java | 3 ++- .../src/com/fr/design/formula/FunctionConstants.java | 3 ++- .../src/com/fr/design/formula/FunctionGroup.java | 4 ---- .../src/com/fr/design/fun/impl/AbstractFunctionGroup.java | 8 +++++--- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/designer_base/src/com/fr/design/formula/FormulaPane.java b/designer_base/src/com/fr/design/formula/FormulaPane.java index 260ca917b..e33a9414d 100644 --- a/designer_base/src/com/fr/design/formula/FormulaPane.java +++ b/designer_base/src/com/fr/design/formula/FormulaPane.java @@ -23,6 +23,7 @@ import com.fr.general.Inter; import com.fr.parser.FRLexer; import com.fr.parser.FRParser; import com.fr.plugin.ExtraClassManager; +import com.fr.script.FunctionDefContainer; import com.fr.stable.ProductConstants; import com.fr.stable.StringUtils; import com.fr.stable.fun.mark.Mutable; @@ -619,7 +620,7 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ functionTypeListModel.addElement(FunctionConstants.CUSTOM); functionTypeListModel.addElement(FunctionConstants.PLUGIN); //hugh:自定义函数分组 - Set groups = ExtraClassManager.getInstance().getArray(FunctionGroup.MARK_STRING); + Set groups = ExtraClassManager.getInstance().getArray(FunctionDefContainer.MARK_STRING); if(!groups.isEmpty()){ for(Mutable group : groups){ functionTypeListModel.addElement(group); diff --git a/designer_base/src/com/fr/design/formula/FunctionConstants.java b/designer_base/src/com/fr/design/formula/FunctionConstants.java index 372409583..1194418e7 100644 --- a/designer_base/src/com/fr/design/formula/FunctionConstants.java +++ b/designer_base/src/com/fr/design/formula/FunctionConstants.java @@ -7,6 +7,7 @@ import com.fr.function.*; import com.fr.general.ComparatorUtils; import com.fr.general.Inter; import com.fr.plugin.ExtraClassManager; +import com.fr.script.FunctionDefContainer; import com.fr.stable.EncodeConstants; import com.fr.stable.OperatingSystem; import com.fr.stable.StableUtils; @@ -98,7 +99,7 @@ public abstract class FunctionConstants { Collections.addAll(all, PLUGIN.getDescriptions()); Collections.addAll(all, CUSTOM.getDescriptions()); //hugh:自定义函数分组 - Set groups = ExtraClassManager.getInstance().getArray(FunctionGroup.MARK_STRING); + Set groups = ExtraClassManager.getInstance().getArray(FunctionDefContainer.MARK_STRING); if(!groups.isEmpty()){ for(Mutable group : groups){ Collections.addAll(all, ((FunctionGroup)group).getDescriptions()); diff --git a/designer_base/src/com/fr/design/formula/FunctionGroup.java b/designer_base/src/com/fr/design/formula/FunctionGroup.java index b2d181b12..4764454ed 100644 --- a/designer_base/src/com/fr/design/formula/FunctionGroup.java +++ b/designer_base/src/com/fr/design/formula/FunctionGroup.java @@ -2,10 +2,6 @@ package com.fr.design.formula; public interface FunctionGroup { - - int CURRENT_LEVEL = 1; - String MARK_STRING = "FunctionGroup"; - String getGroupName(); NameAndDescription[] getDescriptions(); } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/fun/impl/AbstractFunctionGroup.java b/designer_base/src/com/fr/design/fun/impl/AbstractFunctionGroup.java index 674339362..bd6a0c636 100644 --- a/designer_base/src/com/fr/design/fun/impl/AbstractFunctionGroup.java +++ b/designer_base/src/com/fr/design/fun/impl/AbstractFunctionGroup.java @@ -3,17 +3,18 @@ package com.fr.design.fun.impl; import com.fr.design.formula.FunctionDefNAD; import com.fr.design.formula.FunctionGroup; import com.fr.design.formula.NameAndDescription; +import com.fr.script.FunctionDefContainer; import com.fr.stable.fun.mark.API; import com.fr.stable.fun.mark.Mutable; import com.fr.stable.script.FunctionDef; -@API(level = FunctionGroup.CURRENT_LEVEL) -public abstract class AbstractFunctionGroup implements Mutable, FunctionGroup { +@API(level = FunctionDefContainer.CURRENT_LEVEL) +public abstract class AbstractFunctionGroup implements Mutable, FunctionGroup,FunctionDefContainer { @Override public int currentAPILevel() { - return CURRENT_LEVEL; + return FunctionDefContainer.CURRENT_LEVEL; } @Override @@ -32,6 +33,7 @@ public abstract class AbstractFunctionGroup implements Mutable, FunctionGroup { return nads; } + @Override public FunctionDef[] getFunctionDefs(){ return new FunctionDef[0]; } From dcb837a7218faa05742542619248fdaa2ead8060 Mon Sep 17 00:00:00 2001 From: hugh Date: Sat, 14 Jan 2017 13:51:34 +0800 Subject: [PATCH 042/343] =?UTF-8?q?=E4=B9=8B=E5=89=8D=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=BC=80=E5=BE=97=E6=9C=89=E9=97=AE=E9=A2=98=EF=BC=8C=E9=83=A8?= =?UTF-8?q?=E7=BD=B2=E6=97=B6=E7=AE=97=E5=AD=90=E5=88=9D=E5=A7=8B=E5=8C=96?= =?UTF-8?q?=E4=BC=9A=E5=87=BA=E9=94=99=E3=80=90=E8=AF=BB=E4=B8=8D=E5=88=B0?= =?UTF-8?q?=E5=87=BD=E6=95=B0=EF=BC=8C=E5=9B=A0=E4=B8=BA=E4=BE=9D=E8=B5=96?= =?UTF-8?q?=E4=B8=AD=E6=9C=89designer=E7=9A=84=E7=B1=BB=E3=80=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/formula/FormulaPane.java | 13 ++---- .../fr/design/formula/FunctionConstants.java | 43 ++++++++++++++++++- .../fun/impl/AbstractFunctionGroup.java | 40 ----------------- 3 files changed, 45 insertions(+), 51 deletions(-) delete mode 100644 designer_base/src/com/fr/design/fun/impl/AbstractFunctionGroup.java diff --git a/designer_base/src/com/fr/design/formula/FormulaPane.java b/designer_base/src/com/fr/design/formula/FormulaPane.java index e33a9414d..9aec1972a 100644 --- a/designer_base/src/com/fr/design/formula/FormulaPane.java +++ b/designer_base/src/com/fr/design/formula/FormulaPane.java @@ -22,11 +22,8 @@ import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.Inter; import com.fr.parser.FRLexer; import com.fr.parser.FRParser; -import com.fr.plugin.ExtraClassManager; -import com.fr.script.FunctionDefContainer; import com.fr.stable.ProductConstants; import com.fr.stable.StringUtils; -import com.fr.stable.fun.mark.Mutable; import com.fr.stable.script.Expression; import javax.swing.*; @@ -619,13 +616,9 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ functionTypeListModel.addElement(FunctionConstants.ALL); functionTypeListModel.addElement(FunctionConstants.CUSTOM); functionTypeListModel.addElement(FunctionConstants.PLUGIN); - //hugh:自定义函数分组 - Set groups = ExtraClassManager.getInstance().getArray(FunctionDefContainer.MARK_STRING); - if(!groups.isEmpty()){ - for(Mutable group : groups){ - functionTypeListModel.addElement(group); - } - } + + //hugh: 从函数分组插件中添加分组 + FunctionConstants.addFunctionGroupFromPlugins(functionTypeListModel); } private void initFunctionNameListCellRenderer(){ diff --git a/designer_base/src/com/fr/design/formula/FunctionConstants.java b/designer_base/src/com/fr/design/formula/FunctionConstants.java index 1194418e7..0575f8950 100644 --- a/designer_base/src/com/fr/design/formula/FunctionConstants.java +++ b/designer_base/src/com/fr/design/formula/FunctionConstants.java @@ -7,11 +7,11 @@ import com.fr.function.*; import com.fr.general.ComparatorUtils; import com.fr.general.Inter; import com.fr.plugin.ExtraClassManager; -import com.fr.script.FunctionDefContainer; import com.fr.stable.EncodeConstants; import com.fr.stable.OperatingSystem; import com.fr.stable.StableUtils; 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.FunctionDef; @@ -25,8 +25,49 @@ import java.util.*; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; +import javax.swing.DefaultListModel; + public abstract class FunctionConstants { + + /** + * 将函数分组插件中的函数添加到对应的列表中 + * @param listModel + */ + public static void addFunctionGroupFromPlugins(DefaultListModel listModel){ + //hugh:自定义函数分组 + Set 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() { @Override public String getGroupName() { diff --git a/designer_base/src/com/fr/design/fun/impl/AbstractFunctionGroup.java b/designer_base/src/com/fr/design/fun/impl/AbstractFunctionGroup.java deleted file mode 100644 index bd6a0c636..000000000 --- a/designer_base/src/com/fr/design/fun/impl/AbstractFunctionGroup.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.fr.design.fun.impl; - -import com.fr.design.formula.FunctionDefNAD; -import com.fr.design.formula.FunctionGroup; -import com.fr.design.formula.NameAndDescription; -import com.fr.script.FunctionDefContainer; -import com.fr.stable.fun.mark.API; -import com.fr.stable.fun.mark.Mutable; -import com.fr.stable.script.FunctionDef; - - -@API(level = FunctionDefContainer.CURRENT_LEVEL) -public abstract class AbstractFunctionGroup implements Mutable, FunctionGroup,FunctionDefContainer { - - @Override - public int currentAPILevel() { - return FunctionDefContainer.CURRENT_LEVEL; - } - - @Override - public String mark4Provider() { - return getClass().getName(); - } - - @Override - public NameAndDescription[] getDescriptions() { - FunctionDef[] funcs = getFunctionDefs(); - int count = funcs.length; - FunctionDefNAD[] nads = new FunctionDefNAD[count]; - for (int i = 0; i < count; i ++) { - nads[i] = new FunctionDefNAD(funcs[i]); - } - return nads; - } - - @Override - public FunctionDef[] getFunctionDefs(){ - return new FunctionDef[0]; - } -} From 6a8b12b3b109de89384b1b5de118bfb7e9d1525d Mon Sep 17 00:00:00 2001 From: hugh Date: Sat, 14 Jan 2017 13:57:15 +0800 Subject: [PATCH 043/343] =?UTF-8?q?=E9=81=97=E6=BC=8F=E4=BA=86=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E5=9C=B0=E6=96=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/formula/FunctionConstants.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/designer_base/src/com/fr/design/formula/FunctionConstants.java b/designer_base/src/com/fr/design/formula/FunctionConstants.java index 0575f8950..8a0675897 100644 --- a/designer_base/src/com/fr/design/formula/FunctionConstants.java +++ b/designer_base/src/com/fr/design/formula/FunctionConstants.java @@ -140,10 +140,10 @@ public abstract class FunctionConstants { Collections.addAll(all, PLUGIN.getDescriptions()); Collections.addAll(all, CUSTOM.getDescriptions()); //hugh:自定义函数分组 - Set groups = ExtraClassManager.getInstance().getArray(FunctionDefContainer.MARK_STRING); - if(!groups.isEmpty()){ - for(Mutable group : groups){ - Collections.addAll(all, ((FunctionGroup)group).getDescriptions()); + Set 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); From 2c50ee981b85daf7483d335720996447448b0466 Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 16 Jan 2017 10:43:17 +0800 Subject: [PATCH 044/343] =?UTF-8?q?REPORT-1390=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E4=B8=AD=EF=BC=8C=E5=9C=A8=E9=80=89=E4=B8=AD=E2=80=9C?= =?UTF-8?q?=E6=82=AC=E6=B5=AE=E5=85=83=E7=B4=A0=E2=80=9D=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E9=9A=90=E8=97=8F=E5=8F=B3=E4=BE=A7=E7=9A=84=E2=80=9C=E5=8D=95?= =?UTF-8?q?=E5=85=83=E6=A0=BC=E5=B1=9E=E6=80=A7=E8=A1=A8=E2=80=9D=E9=9D=A2?= =?UTF-8?q?=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/CellElementPropertyPane.java | 13 ++++++++++++- .../src/com/fr/grid/selection/CellSelection.java | 6 ++++++ .../src/com/fr/grid/selection/FloatSelection.java | 6 ++++++ designer/src/com/fr/grid/selection/Selection.java | 2 ++ 4 files changed, 26 insertions(+), 1 deletion(-) diff --git a/designer/src/com/fr/design/mainframe/CellElementPropertyPane.java b/designer/src/com/fr/design/mainframe/CellElementPropertyPane.java index fa602c8bd..d68bd7757 100644 --- a/designer/src/com/fr/design/mainframe/CellElementPropertyPane.java +++ b/designer/src/com/fr/design/mainframe/CellElementPropertyPane.java @@ -102,12 +102,23 @@ public class CellElementPropertyPane extends DockingView { 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) { TemplateElementCase elementCase = ePane.getEditingElementCase(); if (elementCase == null) { return; } - cellElementEditPane.populate(ePane); + ePane.getSelection().populatePropertyPane(ePane); } @Override diff --git a/designer/src/com/fr/grid/selection/CellSelection.java b/designer/src/com/fr/grid/selection/CellSelection.java index c08f87088..458d9fd29 100644 --- a/designer/src/com/fr/grid/selection/CellSelection.java +++ b/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.gui.imenu.UIMenu; 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.Clear; import com.fr.design.mainframe.JTemplate; @@ -684,4 +685,9 @@ public class CellSelection extends Selection { editor.populate(tc); return editor; } + + @Override + public void populatePropertyPane(ElementCasePane ePane) { + CellElementPropertyPane.getInstance().reInit(ePane); + } } \ No newline at end of file diff --git a/designer/src/com/fr/grid/selection/FloatSelection.java b/designer/src/com/fr/grid/selection/FloatSelection.java index 0c1b1fcb0..5f0be878c 100644 --- a/designer/src/com/fr/grid/selection/FloatSelection.java +++ b/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.FloatElementsClip; import com.fr.design.designer.TargetComponent; +import com.fr.design.mainframe.CellElementPropertyPane; import com.fr.general.ComparatorUtils; import com.fr.general.Inter; import com.fr.design.mainframe.ElementCasePane; @@ -230,4 +231,9 @@ public class FloatSelection extends Selection { editor.populate(tc); return editor; } + + @Override + public void populatePropertyPane(ElementCasePane ePane) { + CellElementPropertyPane.getInstance().removeAll(); + } } \ No newline at end of file diff --git a/designer/src/com/fr/grid/selection/Selection.java b/designer/src/com/fr/grid/selection/Selection.java index e7466b365..c12dda83b 100644 --- a/designer/src/com/fr/grid/selection/Selection.java +++ b/designer/src/com/fr/grid/selection/Selection.java @@ -87,6 +87,8 @@ public abstract class Selection implements FCloneable, Serializable , Selectable // //////////////////////////Just4CellSelection/////////////////////////////// public abstract boolean containsColumnRow(ColumnRow cr); + + public abstract void populatePropertyPane(ElementCasePane ePane); @Override From 2dad275f38b868bab361a6ff18b51ad0b7344ea9 Mon Sep 17 00:00:00 2001 From: lee <854954082@qq.com> Date: Mon, 16 Jan 2017 21:26:26 +0800 Subject: [PATCH 045/343] =?UTF-8?q?REPORT-1808=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E5=86=85tab=20bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1.嵌套情况下,删除不起效果。 2.删除最后一个没有提示。 3.字体自定义之后再设置默认,字体没有变回来。 --- .../designer/creator/cardlayout/XCardSwitchButton.java | 10 +++++++++- .../designer/creator/cardlayout/XWTabFitLayout.java | 10 +++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java index fdfaaa0dc..27954b20b 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java @@ -251,7 +251,9 @@ public class XCardSwitchButton extends XButton { Point position = button.getLocation(); int width = button.getWidth(); int height = button.getHeight(); - + + ey = ey % DEFAULT_BUTTON_HEIGHT; + // 鼠标进入按钮右侧删除图标区域 double recX = position.getX() + (width - RIGHT_OFFSET); double recY = position.getY() + (height - TOP_OFFSET); @@ -337,6 +339,12 @@ public class XCardSwitchButton extends XButton { //删除tab布局 private void deleteTabLayout(SelectionModel selectionModel,FormDesigner designer){ + String titleName = this.getContentLabel().getText(); + int value = JOptionPane.showConfirmDialog(null, Inter.getLocText("FR-Designer_ConfirmDialog_Content") + "“" + titleName + "”", + Inter.getLocText("FR-Designer_ConfirmDialog_Title"),JOptionPane.YES_NO_OPTION); + if (value != JOptionPane.OK_OPTION) { + return; + } XLayoutContainer mainLayout = this.cardLayout.getBackupParent(); if(mainLayout != null){ selectionModel.setSelectedCreator(mainLayout); diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java index e9d7b58c3..7276df53d 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java @@ -45,6 +45,9 @@ public class XWTabFitLayout extends XWFitLayout { // tab布局在拖拽导致的缩放里(含间隔时),如果拖拽宽高大于组件宽高,会导致调整的时候找不到原来的组件 // 这里先将拖拽之前的宽高先做备份 private static final Color NORMAL_GRAL = new Color(236,236,236); + private static final String DEFAULT_FONT_NAME = "SimSun"; + public final static Font DEFAULTFT = new Font("Song_TypeFace",0,12); + public final static FRFont DEFAULT_FRFT = FRFont.getInstance(DEFAULT_FONT_NAME, 0, 9); private Dimension referDim; private Background initialBackground; private Background overBackground; @@ -229,16 +232,21 @@ public class XWTabFitLayout extends XWFitLayout { boolean isStyle = ((WTabFitLayout) data).isCustomStyle(); Background bg; bg = ColorBackground.getInstance(NORMAL_GRAL); + CardSwitchButton cardSwitchButton = (CardSwitchButton) this.xCardSwitchButton.toData(); if (!isStyle) { this.xCardSwitchButton.setCustomStyle(false); this.xCardSwitchButton.setSelectBackground(bg); + this.xCardSwitchButton.getLabel().setFont(DEFAULTFT); + cardSwitchButton.setFont(DEFAULT_FRFT); } else { - CardSwitchButton cardSwitchButton = (CardSwitchButton) this.xCardSwitchButton.toData(); Background initialBackground = cardSwitchButton.getInitialBackground(); bg = initialBackground == null ? bg : initialBackground; this.xCardSwitchButton.setSelectBackground(bg); this.xCardSwitchButton.setCustomStyle(true); cardSwitchButton.setCustomStyle(true); + if (font != null) { + cardSwitchButton.setFont(font); + } } } From 001aab092b24f24154103d2b6d54e5ccc53f9c4a Mon Sep 17 00:00:00 2001 From: lee <854954082@qq.com> Date: Tue, 17 Jan 2017 09:58:45 +0800 Subject: [PATCH 046/343] 1 1 --- .../design/designer/creator/cardlayout/XCardSwitchButton.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java index 27954b20b..8ade2b368 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java @@ -395,9 +395,9 @@ public class XCardSwitchButton extends XButton { this.tagLayout.getComponent(i).setBounds(rectangle); Dimension dimension = new Dimension(); dimension.setSize(cardWidth, cardHeight); + XCardSwitchButton temp = (XCardSwitchButton) this.tagLayout.getComponent(i); CardSwitchButton cardSwitchButton = (CardSwitchButton) temp.toData(); FRFont frFont = cardSwitchButton.getFont(); - XCardSwitchButton temp = (XCardSwitchButton) this.tagLayout.getComponent(i); UILabel label = temp.getContentLabel(); label.setSize(dimension); label.setFont(frFont.applyResolutionNP(ScreenResolution.getScreenResolution())); From 3b5c88284205dfe01a381e182fb4ba357914b846 Mon Sep 17 00:00:00 2001 From: lee <854954082@qq.com> Date: Tue, 17 Jan 2017 12:52:32 +0800 Subject: [PATCH 047/343] =?UTF-8?q?REPORT-1808=20font=E7=A9=BA=E5=80=BC?= =?UTF-8?q?=E5=88=A4=E6=96=AD=E7=BB=99=E4=BA=88=E9=BB=98=E8=AE=A4=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer/creator/cardlayout/XCardSwitchButton.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java index 8ade2b368..6bc1de727 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java @@ -47,6 +47,7 @@ public class XCardSwitchButton extends XButton { //设置的图片类型 private static final String COLORBACKGROUNDTYPE = "ColorBackground"; private static final String DEFAULTTYPE = "default"; + private static final String DEFAULT_FONT_NAME = "SimSun"; //默认颜色 public static final Color NORMAL_GRAL = new Color(236,236,236); @@ -65,6 +66,7 @@ public class XCardSwitchButton extends XButton { private static final int FONT_SIZE_ADJUST = 2; private static final int SIDE_OFFSET = 57; + private static final int FONT_SIZE = 9; private XWCardLayout cardLayout; private XWCardTagLayout tagLayout; @@ -320,6 +322,9 @@ public class XCardSwitchButton extends XButton { // 标题部分 WidgetTitle title = style.getTitle(); FRFont font = button.getFont(); + if (font == null) { + font = FRFont.getInstance(DEFAULT_FONT_NAME, 0, FONT_SIZE); + } FRFont newFont = FRFont.getInstance(font.getName(),font.getStyle(),font.getSize() + FONT_SIZE_ADJUST); UILabel label = this.getContentLabel(); label.setFont(newFont); @@ -398,6 +403,9 @@ public class XCardSwitchButton extends XButton { XCardSwitchButton temp = (XCardSwitchButton) this.tagLayout.getComponent(i); CardSwitchButton cardSwitchButton = (CardSwitchButton) temp.toData(); FRFont frFont = cardSwitchButton.getFont(); + if (frFont == null) { + frFont = FRFont.getInstance(DEFAULT_FONT_NAME, 0, FONT_SIZE); + } UILabel label = temp.getContentLabel(); label.setSize(dimension); label.setFont(frFont.applyResolutionNP(ScreenResolution.getScreenResolution())); From a2a7a6bd155c5bd97ac181cc37b4e603affde8d7 Mon Sep 17 00:00:00 2001 From: lee <854954082@qq.com> Date: Tue, 17 Jan 2017 16:17:04 +0800 Subject: [PATCH 048/343] =?UTF-8?q?REPORT-1808=20=E5=AD=97=E4=BD=93?= =?UTF-8?q?=EF=BC=8C=E8=83=8C=E6=99=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1.字体设置之后的控件的宽度,导致设计器端的显示异常。 2.背景设置恢复默认之后,后台的属性设置为空。 --- .../design/designer/creator/cardlayout/XCardSwitchButton.java | 2 +- .../fr/design/designer/creator/cardlayout/XWTabFitLayout.java | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java index 6bc1de727..6c55ee045 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java @@ -376,7 +376,7 @@ public class XCardSwitchButton extends XButton { XCardSwitchButton temp = (XCardSwitchButton) this.tagLayout.getComponent(i); CardSwitchButton tempCard = (CardSwitchButton) temp.toData(); String tempText = tempCard.getText(); - Font f = ((CardSwitchButton)this.toData()).getFont(); + Font f = tempCard.getFont(); FontMetrics fm = GraphHelper.getFontMetrics(f); cardWidth.put(i,fm.stringWidth(tempText)); cardHeight.put(i,fm.getHeight()); diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java index 7276df53d..ccdf7dd07 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java @@ -237,6 +237,9 @@ public class XWTabFitLayout extends XWFitLayout { this.xCardSwitchButton.setCustomStyle(false); this.xCardSwitchButton.setSelectBackground(bg); this.xCardSwitchButton.getLabel().setFont(DEFAULTFT); + cardSwitchButton.setInitialBackground(null); + cardSwitchButton.setClickBackground(null); + cardSwitchButton.setOverBackground(null); cardSwitchButton.setFont(DEFAULT_FRFT); } else { Background initialBackground = cardSwitchButton.getInitialBackground(); From 142246013efe8a985b87c0853beca84b0d3548a7 Mon Sep 17 00:00:00 2001 From: lonord Date: Wed, 18 Jan 2017 09:47:29 +0800 Subject: [PATCH 049/343] =?UTF-8?q?com.dr.data.SubmitJob=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E6=8F=90=E7=A4=BA=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/write/submit/CustomJobPane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/write/submit/CustomJobPane.java b/designer_base/src/com/fr/design/write/submit/CustomJobPane.java index 454610217..9f42b58bb 100644 --- a/designer_base/src/com/fr/design/write/submit/CustomJobPane.java +++ b/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; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.DialogActionAdapter; import com.fr.general.Inter; import com.fr.stable.StringUtils; import com.fr.design.utils.gui.GUICoreUtils; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /** * 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; public CustomJobPane() { this.setLayout(FRGUIPaneFactory.createBorderLayout()); JPanel reportletNamePane = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(); classNameTextField = new UITextField(getLengthOfTextField()); reportletNamePane.add(classNameTextField); UIButton browserButton = new UIButton(Inter.getLocText("Select")); browserButton.setPreferredSize(new Dimension( browserButton.getPreferredSize().width, classNameTextField.getPreferredSize().height)); UIButton editButton = new UIButton(Inter.getLocText("Edit")); editButton.setPreferredSize(new Dimension( browserButton.getPreferredSize().width, classNameTextField.getPreferredSize().height)); reportletNamePane.add(browserButton); reportletNamePane.add(editButton); 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); } }); reportletNamePane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("ClassName"), null)); this.add(reportletNamePane, BorderLayout.NORTH); objectProperiesPane = new ObjectProperiesPane(); objectProperiesPane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("Property"), null)); this.add(objectProperiesPane, BorderLayout.CENTER); 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(); } public int getLengthOfTextField() { return DEFAULT_LENGTH; } protected String title4PopupWindow() { return "CustomJob"; } protected Component getWindowAncestor() { return this; } @Override public void populateBean(Object ob) { if (ob instanceof AbstractClassJob) { AbstractClassJob cj = (AbstractClassJob) ob; this.classNameTextField.setText(cj.getClassName()); this.objectProperiesPane.populateBean(cj.getPropertyMap()); checkAddButtonEnable(); } } /** * 添加按钮可用 */ public void checkAddButtonEnable() { objectProperiesPane.enableAddButton(!StringUtils.isEmpty(classNameTextField.getText())); } /** * 重置 */ public void reset() { this.classNameTextField.setText(null); this.checkAddButtonEnable(); } } \ No newline at end of file +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; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.DialogActionAdapter; import com.fr.general.Inter; import com.fr.stable.StringUtils; import com.fr.design.utils.gui.GUICoreUtils; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /** * 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; public CustomJobPane() { this.setLayout(FRGUIPaneFactory.createBorderLayout()); JPanel reportletNamePane = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(); classNameTextField = new UITextField(getLengthOfTextField()); reportletNamePane.add(classNameTextField); UIButton browserButton = new UIButton(Inter.getLocText("Select")); browserButton.setPreferredSize(new Dimension( browserButton.getPreferredSize().width, classNameTextField.getPreferredSize().height)); UIButton editButton = new UIButton(Inter.getLocText("Edit")); editButton.setPreferredSize(new Dimension( browserButton.getPreferredSize().width, classNameTextField.getPreferredSize().height)); reportletNamePane.add(browserButton); reportletNamePane.add(editButton); 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); } }); reportletNamePane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("ClassName"), null)); this.add(reportletNamePane, BorderLayout.NORTH); objectProperiesPane = new ObjectProperiesPane(); objectProperiesPane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("Property"), null)); this.add(objectProperiesPane, BorderLayout.CENTER); UITextArea area = new UITextArea(2, 1); area.setText(Inter.getLocText(new String[]{"Come_True", "Interface"}) + ":com.fr.data.AbstractSubmitTask"); JPanel dsPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); dsPane.add(area); dsPane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("Description"), null)); this.add(dsPane, BorderLayout.SOUTH); checkAddButtonEnable(); } public int getLengthOfTextField() { return DEFAULT_LENGTH; } protected String title4PopupWindow() { return "CustomJob"; } protected Component getWindowAncestor() { return this; } @Override public void populateBean(Object ob) { if (ob instanceof AbstractClassJob) { AbstractClassJob cj = (AbstractClassJob) ob; this.classNameTextField.setText(cj.getClassName()); this.objectProperiesPane.populateBean(cj.getPropertyMap()); checkAddButtonEnable(); } } /** * 添加按钮可用 */ public void checkAddButtonEnable() { objectProperiesPane.enableAddButton(!StringUtils.isEmpty(classNameTextField.getText())); } /** * 重置 */ public void reset() { this.classNameTextField.setText(null); this.checkAddButtonEnable(); } } \ No newline at end of file From f3d25158fe985fcedc452a740e55d8898c86cc74 Mon Sep 17 00:00:00 2001 From: lonord Date: Wed, 18 Jan 2017 10:07:32 +0800 Subject: [PATCH 050/343] pmd --- designer_base/src/com/fr/design/write/submit/CustomJobPane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/write/submit/CustomJobPane.java b/designer_base/src/com/fr/design/write/submit/CustomJobPane.java index 9f42b58bb..342e6f82f 100644 --- a/designer_base/src/com/fr/design/write/submit/CustomJobPane.java +++ b/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; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.DialogActionAdapter; import com.fr.general.Inter; import com.fr.stable.StringUtils; import com.fr.design.utils.gui.GUICoreUtils; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /** * 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; public CustomJobPane() { this.setLayout(FRGUIPaneFactory.createBorderLayout()); JPanel reportletNamePane = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(); classNameTextField = new UITextField(getLengthOfTextField()); reportletNamePane.add(classNameTextField); UIButton browserButton = new UIButton(Inter.getLocText("Select")); browserButton.setPreferredSize(new Dimension( browserButton.getPreferredSize().width, classNameTextField.getPreferredSize().height)); UIButton editButton = new UIButton(Inter.getLocText("Edit")); editButton.setPreferredSize(new Dimension( browserButton.getPreferredSize().width, classNameTextField.getPreferredSize().height)); reportletNamePane.add(browserButton); reportletNamePane.add(editButton); 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); } }); reportletNamePane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("ClassName"), null)); this.add(reportletNamePane, BorderLayout.NORTH); objectProperiesPane = new ObjectProperiesPane(); objectProperiesPane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("Property"), null)); this.add(objectProperiesPane, BorderLayout.CENTER); UITextArea area = new UITextArea(2, 1); area.setText(Inter.getLocText(new String[]{"Come_True", "Interface"}) + ":com.fr.data.AbstractSubmitTask"); JPanel dsPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); dsPane.add(area); dsPane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("Description"), null)); this.add(dsPane, BorderLayout.SOUTH); checkAddButtonEnable(); } public int getLengthOfTextField() { return DEFAULT_LENGTH; } protected String title4PopupWindow() { return "CustomJob"; } protected Component getWindowAncestor() { return this; } @Override public void populateBean(Object ob) { if (ob instanceof AbstractClassJob) { AbstractClassJob cj = (AbstractClassJob) ob; this.classNameTextField.setText(cj.getClassName()); this.objectProperiesPane.populateBean(cj.getPropertyMap()); checkAddButtonEnable(); } } /** * 添加按钮可用 */ public void checkAddButtonEnable() { objectProperiesPane.enableAddButton(!StringUtils.isEmpty(classNameTextField.getText())); } /** * 重置 */ public void reset() { this.classNameTextField.setText(null); this.checkAddButtonEnable(); } } \ No newline at end of file +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; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.DialogActionAdapter; import com.fr.general.Inter; import com.fr.stable.StringUtils; import com.fr.design.utils.gui.GUICoreUtils; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /** * 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; public CustomJobPane() { this.setLayout(FRGUIPaneFactory.createBorderLayout()); JPanel reportletNamePane = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(); classNameTextField = new UITextField(getLengthOfTextField()); reportletNamePane.add(classNameTextField); UIButton browserButton = new UIButton(Inter.getLocText("Designer-Select")); browserButton.setPreferredSize(new Dimension( browserButton.getPreferredSize().width, classNameTextField.getPreferredSize().height)); UIButton editButton = new UIButton(Inter.getLocText("Designer-Edit")); editButton.setPreferredSize(new Dimension( browserButton.getPreferredSize().width, classNameTextField.getPreferredSize().height)); reportletNamePane.add(browserButton); reportletNamePane.add(editButton); 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); } }); reportletNamePane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("Designer-ClassName"), null)); this.add(reportletNamePane, BorderLayout.NORTH); objectProperiesPane = new ObjectProperiesPane(); objectProperiesPane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("Designer-Property"), null)); this.add(objectProperiesPane, BorderLayout.CENTER); UITextArea area = new UITextArea(2, 1); area.setText(Inter.getLocText(new String[]{"Come_True", "Interface"}) + ":com.fr.data.AbstractSubmitTask"); JPanel dsPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); dsPane.add(area); dsPane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("Designer-Description"), null)); this.add(dsPane, BorderLayout.SOUTH); checkAddButtonEnable(); } public int getLengthOfTextField() { return DEFAULT_LENGTH; } protected String title4PopupWindow() { return "CustomJob"; } protected Component getWindowAncestor() { return this; } @Override public void populateBean(Object ob) { if (ob instanceof AbstractClassJob) { AbstractClassJob cj = (AbstractClassJob) ob; this.classNameTextField.setText(cj.getClassName()); this.objectProperiesPane.populateBean(cj.getPropertyMap()); checkAddButtonEnable(); } } /** * 添加按钮可用 */ public void checkAddButtonEnable() { objectProperiesPane.enableAddButton(StringUtils.isNotEmpty(classNameTextField.getText())); } /** * 重置 */ public void reset() { this.classNameTextField.setText(null); this.checkAddButtonEnable(); } } \ No newline at end of file From cdb7de829520a8bfa2cbb2a1c3c6398b4e553f22 Mon Sep 17 00:00:00 2001 From: lonord Date: Wed, 18 Jan 2017 11:12:47 +0800 Subject: [PATCH 051/343] =?UTF-8?q?pmd=E7=9A=84=E5=9B=BD=E9=99=85=E5=8C=96?= =?UTF-8?q?=E5=AD=97=E7=AC=A6=E4=B8=B2=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/locale/designer.properties | 8 +++++++- .../src/com/fr/design/locale/designer_en_US.properties | 8 +++++++- .../src/com/fr/design/locale/designer_ja_JP.properties | 8 +++++++- .../src/com/fr/design/locale/designer_ko_KR.properties | 8 +++++++- .../src/com/fr/design/locale/designer_zh_CN.properties | 8 +++++++- .../src/com/fr/design/locale/designer_zh_TW.properties | 8 +++++++- .../src/com/fr/design/write/submit/CustomJobPane.java | 2 +- 7 files changed, 43 insertions(+), 7 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index fbb7111a4..1c4173c68 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -518,4 +518,10 @@ FR-Designer_FormulaPane_Function_Detail=Function Detail FR-Designer_FormulaPane_Search=Search FR-Designer_Tab_carousel= FR-Designer_setCarousel= -FR-Designer_carouselInterval= \ No newline at end of file +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 diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index 227811319..d0dbe5b3a 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -518,4 +518,10 @@ FR-Designer_FormulaPane_Function_Detail=Function Detail FR-Designer_FormulaPane_Search=Search FR-Designer_Tab_carousel= FR-Designer_setCarousel= -FR-Designer_carouselInterval= \ No newline at end of file +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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index efe89b5b9..8a71eb390 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -497,4 +497,10 @@ FR-Designer_FormulaPane_Function_Detail=\u95A2\u6570\u660E\u7D30 FR-Designer_FormulaPane_Search=\u691C\u7D22 FR-Designer_Tab_carousel= FR-Designer_setCarousel= -FR-Designer_carouselInterval= \ No newline at end of file +FR-Designer_carouselInterval= + +FR-Designer_ClassName_panel=\u985E\u540D +FR-Designer_Description_panel=\u8A18\u8FF0 +FR-Designer_Edit_panel=\u7DE8\u96C6 +FR-Designer_Property_panel=\u5C5E\u6027 +FR-Designer_Select_panel=\u9078\u629E \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index 0d2995ab2..be6576cc9 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -492,4 +492,10 @@ FR-Designer_FormulaPane_Function_Detail=\uD568\uC218\uC0C1\uC138\uC0AC\uD56D FR-Designer_FormulaPane_Search=\uAC80\uC0C9 FR-Designer_Tab_carousel= FR-Designer_setCarousel= -FR-Designer_carouselInterval= \ No newline at end of file +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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index a5040a19d..4a67bea21 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -522,4 +522,10 @@ FR-Designer_FormulaPane_Function_Detail=\u51FD\u6570\u660E\u7EC6 FR-Designer_FormulaPane_Search=\u641C\u7D22 FR-Designer_Tab_carousel=tab\u8F6E\u64AD FR-Designer_setCarousel=\u5F00\u542F\u8F6E\u64AD -FR-Designer_carouselInterval=\u8F6E\u64AD\u95F4\u9694 \ No newline at end of file +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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index acd8e773b..96135a825 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -510,4 +510,10 @@ FR-Designer_FormulaPane_Function_Detail=\u51FD\u6578\u660E\u7D30 FR-Designer_FormulaPane_Search=\u641C\u7D22 FR-Designer_Tab_carousel= FR-Designer_setCarousel= -FR-Designer_carouselInterval= \ No newline at end of file +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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/write/submit/CustomJobPane.java b/designer_base/src/com/fr/design/write/submit/CustomJobPane.java index 342e6f82f..d986a8bee 100644 --- a/designer_base/src/com/fr/design/write/submit/CustomJobPane.java +++ b/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; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.DialogActionAdapter; import com.fr.general.Inter; import com.fr.stable.StringUtils; import com.fr.design.utils.gui.GUICoreUtils; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /** * 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; public CustomJobPane() { this.setLayout(FRGUIPaneFactory.createBorderLayout()); JPanel reportletNamePane = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(); classNameTextField = new UITextField(getLengthOfTextField()); reportletNamePane.add(classNameTextField); UIButton browserButton = new UIButton(Inter.getLocText("Designer-Select")); browserButton.setPreferredSize(new Dimension( browserButton.getPreferredSize().width, classNameTextField.getPreferredSize().height)); UIButton editButton = new UIButton(Inter.getLocText("Designer-Edit")); editButton.setPreferredSize(new Dimension( browserButton.getPreferredSize().width, classNameTextField.getPreferredSize().height)); reportletNamePane.add(browserButton); reportletNamePane.add(editButton); 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); } }); reportletNamePane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("Designer-ClassName"), null)); this.add(reportletNamePane, BorderLayout.NORTH); objectProperiesPane = new ObjectProperiesPane(); objectProperiesPane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("Designer-Property"), null)); this.add(objectProperiesPane, BorderLayout.CENTER); UITextArea area = new UITextArea(2, 1); area.setText(Inter.getLocText(new String[]{"Come_True", "Interface"}) + ":com.fr.data.AbstractSubmitTask"); JPanel dsPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); dsPane.add(area); dsPane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("Designer-Description"), null)); this.add(dsPane, BorderLayout.SOUTH); checkAddButtonEnable(); } public int getLengthOfTextField() { return DEFAULT_LENGTH; } protected String title4PopupWindow() { return "CustomJob"; } protected Component getWindowAncestor() { return this; } @Override public void populateBean(Object ob) { if (ob instanceof AbstractClassJob) { AbstractClassJob cj = (AbstractClassJob) ob; this.classNameTextField.setText(cj.getClassName()); this.objectProperiesPane.populateBean(cj.getPropertyMap()); checkAddButtonEnable(); } } /** * 添加按钮可用 */ public void checkAddButtonEnable() { objectProperiesPane.enableAddButton(StringUtils.isNotEmpty(classNameTextField.getText())); } /** * 重置 */ public void reset() { this.classNameTextField.setText(null); this.checkAddButtonEnable(); } } \ No newline at end of file +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; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.DialogActionAdapter; import com.fr.general.Inter; import com.fr.stable.StringUtils; import com.fr.design.utils.gui.GUICoreUtils; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /** * 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; public CustomJobPane() { this.setLayout(FRGUIPaneFactory.createBorderLayout()); JPanel reportletNamePane = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(); classNameTextField = new UITextField(getLengthOfTextField()); reportletNamePane.add(classNameTextField); UIButton browserButton = new UIButton(Inter.getLocText("FR-Designer_Select_panel")); browserButton.setPreferredSize(new Dimension( browserButton.getPreferredSize().width, classNameTextField.getPreferredSize().height)); UIButton editButton = new UIButton(Inter.getLocText("FR-Designer_Edit_panel")); editButton.setPreferredSize(new Dimension( browserButton.getPreferredSize().width, classNameTextField.getPreferredSize().height)); reportletNamePane.add(browserButton); reportletNamePane.add(editButton); 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); } }); reportletNamePane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("FR-Designer_ClassName_panel"), null)); this.add(reportletNamePane, BorderLayout.NORTH); objectProperiesPane = new ObjectProperiesPane(); objectProperiesPane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("FR-Designer_Property_panel"), null)); this.add(objectProperiesPane, BorderLayout.CENTER); UITextArea area = new UITextArea(2, 1); area.setText(Inter.getLocText(new String[]{"Come_True", "Interface"}) + ":com.fr.data.AbstractSubmitTask"); JPanel dsPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); dsPane.add(area); dsPane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("FR-Designer_Description_panel"), null)); this.add(dsPane, BorderLayout.SOUTH); checkAddButtonEnable(); } public int getLengthOfTextField() { return DEFAULT_LENGTH; } protected String title4PopupWindow() { return "CustomJob"; } protected Component getWindowAncestor() { return this; } @Override public void populateBean(Object ob) { if (ob instanceof AbstractClassJob) { AbstractClassJob cj = (AbstractClassJob) ob; this.classNameTextField.setText(cj.getClassName()); this.objectProperiesPane.populateBean(cj.getPropertyMap()); checkAddButtonEnable(); } } /** * 添加按钮可用 */ public void checkAddButtonEnable() { objectProperiesPane.enableAddButton(StringUtils.isNotEmpty(classNameTextField.getText())); } /** * 重置 */ public void reset() { this.classNameTextField.setText(null); this.checkAddButtonEnable(); } } \ No newline at end of file From 6404579f1774d061a678dba07dd407a105419241 Mon Sep 17 00:00:00 2001 From: zhouping Date: Sun, 22 Jan 2017 13:02:46 +0800 Subject: [PATCH 052/343] =?UTF-8?q?REPORT-1814=20=E8=A1=A8=E5=8D=95tab?= =?UTF-8?q?=E5=9D=97=E7=9A=84=E9=A1=B5=E7=AD=BE=E6=8B=96=E5=8A=A8=E6=96=B0?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=20bugfix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer/creator/cardlayout/XWTabFitLayout.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java index ccdf7dd07..9b4ef50fb 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java @@ -250,6 +250,16 @@ public class XWTabFitLayout extends XWFitLayout { if (font != null) { cardSwitchButton.setFont(font); } + if (this.initialBackground != null){ + this.xCardSwitchButton.setSelectBackground(this.initialBackground); + cardSwitchButton.setInitialBackground(this.initialBackground); + } + if (this.overBackground != null){ + cardSwitchButton.setOverBackground(this.overBackground); + } + if (this.clickBackground != null) { + cardSwitchButton.setClickBackground(this.clickBackground); + } } } From 61cba0e483efdba37db33f37cf85218b90553c32 Mon Sep 17 00:00:00 2001 From: unknown <李晓丽> Date: Sun, 22 Jan 2017 14:54:04 +0800 Subject: [PATCH 053/343] xxx --- .../src/com/fr/design/locale/designer_en_US.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index d0dbe5b3a..98d1a96d8 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -518,7 +518,7 @@ FR-Designer_FormulaPane_Function_Detail=Function Detail FR-Designer_FormulaPane_Search=Search FR-Designer_Tab_carousel= FR-Designer_setCarousel= -FR-Designer_carouselInterval= +FR-Designer_carouselInterval=Interval FR-Designer_ClassName_panel=Class Name FR-Designer_Description_panel=Description From 6e41745aa9a23b9c996f314ae01ed3cb4bee73f2 Mon Sep 17 00:00:00 2001 From: unknown <李晓丽> Date: Sun, 22 Jan 2017 15:31:35 +0800 Subject: [PATCH 054/343] =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E7=BF=BB?= =?UTF-8?q?=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/locale/designer_en_US.properties | 64 +++++++++---------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index 98d1a96d8..93bdf4c7b 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -413,12 +413,12 @@ FR-Designer_Unit_PT=Pound FR-Designer-Write_Auto_Stash=auto stash FR-Designer_Printer_Native_Button=Native Print 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_Error=Error FR-Designer_formDesignerModule=Form Designer 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_Mobile-Attr=Mobile Attr FR-Designer_Mobile-Vertical=Vertical Screen @@ -432,42 +432,42 @@ FR-Designer_COMMUNITY_NEED=need FR-Designer_COMMUNITY_BUG=bug report FR-Designer_COMMUNITY_SIGN=sign FR-Designer_COMMUNITY_QUESTIONS=questions -FR-Designer_Mobile-Zoom=zoom +FR-Designer_Mobile-Zoom=Zoom 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-Cancel=Cancel FR-Designer_Write-Save-Formula=Preserve formula when fill FR-Designer_Export-Save-Formula=Preserve formula when export -FR-Designer_Form-Fit-Tip=Fit Plugin -FR-Designer_Form-Frozen-Tip=When Use Form Frozen, Suggest Install -FR-Designer_Form-Forzen-Speed=To Speed UP. -FR-Designer_Attention=attention -FR-Designer_Forbid_Widgets_Intersects=Forbid Widgets Intersects +FR-Designer_Form-Fit-Tip=Adaptive plug-in +FR-Designer_Form-Frozen-Tip=When use Frozen, suggest install +FR-Designer_Form-Forzen-Speed=, use bidirectional and horizontal adaption to improve the speed. +FR-Designer_Attention=Attention +FR-Designer_Forbid_Widgets_Intersects=Forbid component overlap FR-Designer_Widget_Scaling_Mode_Fit=Area-Fit FR-Designer_Widget_Scaling_Mode_Fixed=Area-Fixed -FR-Designer-Widget_Area_Scaling=Widget Area Scaling -FR-Designer-Widget_Scaling_Mode=Widget Scaling Mode +FR-Designer-Widget_Area_Scaling=Component area scaling +FR-Designer-Widget_Scaling_Mode=Scaling mode FR-Designer-QQLogin-Determine=Determine FR-Designer-QQLogin-Cancel=Cancel -FR-Designer-Reuse_Manager=Reuse Manager -FR-Designer_TableData-Default-Para=Default Para -FR-Designer_Layout_Block_Absolute=Absolute Layout Block -FR-Designer_Layout_Block_Tab=TabLayout -FR-Designer_Layout_Block_Blank=Blank Block -FR-Designer_Attr_Layout=layout -FR-Designer_Attr_Layout_Type=layout type -FR-Designer_Attr_Bidirectional_Adaptive=Bidirectional Adaptive -FR-Designer-Selected_Widget=selected widget -FR-Designer_LocalWidget=local widget -FR-Designer_AllCategories=all categories -FR-Designer_Download_Template=download template -FR-Designer_Install_Template=install template -FR-Designer_Delete_Template=delete template -FR-Designer_Mobile-Refresh=refresh -FR-Designer_Mobile-ToolBar=toolbar +FR-Designer-Reuse_Manager=Component management +FR-Designer_TableData-Default-Para=Default parameter +FR-Designer_Layout_Block_Absolute=Absolute layout block +FR-Designer_Layout_Block_Tab=Tab block +FR-Designer_Layout_Block_Blank=Blank block +FR-Designer_Attr_Layout=Layout +FR-Designer_Attr_Layout_Type=Layout type +FR-Designer_Attr_Bidirectional_Adaptive=Bidirectional adaptive +FR-Designer-Selected_Widget=Selected widget +FR-Designer_LocalWidget=Local component library +FR-Designer_AllCategories=All categories +FR-Designer_Download_Template=Download components +FR-Designer_Install_Template=Install components +FR-Designer_Delete_Template=Delete components +FR-Designer_Mobile-Refresh=Refresh +FR-Designer_Mobile-ToolBar=Toolbar 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_Language_Change_Successful=New language setting will be enabled when designer is restarted FR-Designer_Template_Web_Attributes=Web Attributes @@ -508,16 +508,16 @@ FR-Designer_Form_Basic_Properties=Basic Property FR-Designer_DS_Dictionary=Data Dictionary FR-Designer_Create_Tree=Build Tree FR-Designer_Set_Callback_Function=Set Callback Function -FR-Designer_ConfirmDialog_Content= -FR-Designer_ConfirmDialog_Title= +FR-Designer_ConfirmDialog_Content=Confirm to delete Tab Control +FR-Designer_ConfirmDialog_Title=FineReport 8.0 FR-Designer_FormulaPane_Tips=Tips\:You can input B1 to get the data in the second cell of the first row FR-Designer_FormulaPane_Variables=Variables FR-Designer_FormulaPane_Formula_Description=Formula Description FR-Designer_FormulaPane_Function_Detail=Function Detail FR-Designer_FormulaPane_Search=Search -FR-Designer_Tab_carousel= -FR-Designer_setCarousel= +FR-Designer_Tab_carousel=Tab carousel +FR-Designer_setCarousel=Start FR-Designer_carouselInterval=Interval FR-Designer_ClassName_panel=Class Name From de903cf9a2fdae8cfd60f54fe64033e75fc631eb Mon Sep 17 00:00:00 2001 From: zhouping Date: Sun, 22 Jan 2017 21:52:46 +0800 Subject: [PATCH 055/343] =?UTF-8?q?REPORT-1814=20=E8=A1=A8=E5=8D=95tab?= =?UTF-8?q?=E5=9D=97=E7=9A=84=E6=94=B9=E8=89=AFbug=20=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=B1=8F=E8=94=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer/creator/cardlayout/XWCardLayout.java | 11 ----------- .../designer/creator/cardlayout/XWTabFitLayout.java | 11 ----------- 2 files changed, 22 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java index d98e6a35b..d4206b1c3 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java @@ -270,17 +270,6 @@ public class XWCardLayout extends XLayoutContainer { public boolean hasTitleStyle() { return true; } - - - /** - * 得到属性名 - * @return 属性名 - * @throws IntrospectionException - */ - public CRPropertyDescriptor[] supportedDescriptor() throws IntrospectionException { - CRPropertyDescriptor[] crp = ((WCardLayout) data).isCarousel() ? getisCarousel() : getisnotCarousel(); - return ArrayUtils.addAll(getDefaultDescriptor(), crp); - } public CRPropertyDescriptor[] getisCarousel() throws IntrospectionException { return new CRPropertyDescriptor[] { diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java index 9b4ef50fb..6bbc48a5e 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java @@ -111,17 +111,6 @@ public class XWTabFitLayout extends XWFitLayout { public XWTabFitLayout(WTabFitLayout widget, Dimension initSize) { super(widget, initSize); } - - /** - * 得到属性名 - * @return 属性名 - * @throws IntrospectionException - */ - public CRPropertyDescriptor[] supportedDescriptor() throws IntrospectionException { - checkButonType(); - CRPropertyDescriptor[] crp = ((WTabFitLayout) data).isCustomStyle() ? getisCustomStyle() : getisnotCustomStyle(); - return ArrayUtils.addAll(defaultDescriptor(), crp); - } protected CRPropertyDescriptor[] getisCustomStyle() throws IntrospectionException { return new CRPropertyDescriptor[]{ From 12fc6d4f866748cfe4c5b4a59661f58a9bbe4a2a Mon Sep 17 00:00:00 2001 From: zhouping Date: Mon, 23 Jan 2017 10:32:13 +0800 Subject: [PATCH 056/343] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1=20tab?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=B1=8F=E8=94=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer/creator/cardlayout/XWCardLayout.java | 10 ++++++++++ .../designer/creator/cardlayout/XWTabFitLayout.java | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java index d4206b1c3..876eaa34e 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java @@ -271,6 +271,16 @@ public class XWCardLayout extends XLayoutContainer { return true; } + /** + * 得到属性名 + * @return 属性名 + * @throws IntrospectionException + */ + public CRPropertyDescriptor[] supportedDescriptor() throws IntrospectionException { + CRPropertyDescriptor[] crp = null; + return ArrayUtils.addAll(getDefaultDescriptor(), crp); + } + public CRPropertyDescriptor[] getisCarousel() throws IntrospectionException { return new CRPropertyDescriptor[] { new CRPropertyDescriptor("carousel", this.data.getClass()) diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java index 6bbc48a5e..db6070178 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java @@ -112,6 +112,16 @@ public class XWTabFitLayout extends XWFitLayout { super(widget, initSize); } + /** + * 得到属性名 + * @return 属性名 + * @throws IntrospectionException + */ + public CRPropertyDescriptor[] supportedDescriptor() throws IntrospectionException { + CRPropertyDescriptor[] crp = null; + return ArrayUtils.addAll(defaultDescriptor(), crp); + } + protected CRPropertyDescriptor[] getisCustomStyle() throws IntrospectionException { return new CRPropertyDescriptor[]{ //标题样式 From faabc89c88bd8f7d818d9b27fbeee22c2a3d585d Mon Sep 17 00:00:00 2001 From: wanling wang Date: Mon, 23 Jan 2017 11:32:01 +0800 Subject: [PATCH 057/343] =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E7=BF=BB?= =?UTF-8?q?=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 + .../design/locale/designer_ja_JP.properties | 72 +++++++++---------- 2 files changed, 36 insertions(+), 38 deletions(-) diff --git a/.gitignore b/.gitignore index ec8c85a73..a9c6c2320 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ designer_base/bin designer_chart/bin designer_form/bin *.iml + + diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index 8a71eb390..a6ccf3d32 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -375,7 +375,7 @@ FR-Designer-Plugin_Expire_Dialog_Text=\u30D7\u30E9\u30B0\u30A4\u30F3\u306F\u3001 FR-Designer-Plugin_Finerest_Addon=\u5E06\u8EDF\u5FDC\u7528\u30BB\u30F3\u30BF\u30FC FR-Designer_Performance_First=\u6027\u80FD\u512A\u5148 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_Advanced=\u9AD8\u7D1A FR-Designer_Oracle=\u3059\u3079\u3066\u306E\u30C6\u30FC\u30D6\u30EB @@ -435,20 +435,20 @@ 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-QQLogin-Determine=\u6C7A\u5B9A\u3057\u307E\u3059 FR-Designer-QQLogin-Cancel=\u30AD\u30E3\u30F3\u30BB\u30EB -FR-Designer-Reuse_Manager= -FR-Designer_Layout_Block_Absolute= -FR-Designer_Layout_Block_Tab= -FR-Designer_Layout_Block_Blank= -FR-Designer_Attr_Layout= -FR-Designer_Attr_Layout_Type= -FR-Designer_Attr_Bidirectional_Adaptive= -FR-Designer_Download_Template= +FR-Designer-Reuse_Manager=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8 +FR-Designer_Layout_Block_Absolute=\u7D76\u5BFE\u30EC\u30A4\u30A2\u30A6\u30C8\u30D6\u30ED\u30C3\u30AF +FR-Designer_Layout_Block_Tab=Tab\u30D6\u30ED\u30C3\u30AF +FR-Designer_Layout_Block_Blank=\u7A7A\u767D\u30D6\u30ED\u30C3\u30AF +FR-Designer_Attr_Layout=\u30EC\u30A4\u30A2\u30A6\u30C8 +FR-Designer_Attr_Layout_Type=\u30EC\u30A4\u30A2\u30A6\u30C8\u65B9\u5F0F +FR-Designer_Attr_Bidirectional_Adaptive=\u53CC\u65B9\u5411\u81EA\u5DF1\u8ABF\u6574 +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_Mobile-Refresh= -FR-Designer_Mobile-ToolBar= +FR-Designer_Mobile-Refresh=\u66F4\u65B0 +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_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_Basic=\u57FA\u672C FR-Designer_Printers(Server)=\u30D7\u30EA\u30F3\u30BF\u30FC(\u30B5\u30FC\u30D0) @@ -463,42 +463,38 @@ FR-Designer-DS-Database_Query=\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u30AF\u30A8\u FR-Designer-LayerPageReport_PageQuery=\u30DA\u30FC\u30B8\u5225\u30AF\u30A8\u30EA FR-Designer-LayerPageReport_Define_PageQuerySQL=\u5B9A\u7FA9\u30DA\u30FC\u30B8\u5225\u30AF\u30A8\u30EAsql FR-Designer_Is_Share_DBTableData=\u5171\u6709\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8 -FR-Designer_Event=\ -FR-Designer_Properties=FR-Designer_Properties=\ -\ +FR-Designer_Event=\u30A4\u30D9\u30F3\u30C8 +FR-Designer_Properties=\u30D7\u30ED\u30D1\u30C6\u30A3 FR-Designer_Export_failed=\u5C0E\u51FA\u306B\u5931\u6557\u3057\u307E\u3057\u305F FR-Designer_Exported_successfully=\u5C0E\u51FA\u6210\u529F 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_Button_Cancel=\u30AD\u30E3\u30F3\u30BB\u30EB -\uFFFD -FR-Designer_JavaScript= -FR-Designer_JavaScript_Form_Submit= -FR-Designer_JavaScript_Commit_to_Database= -FR-Designer_JavaScript_Custom= -FR-Designer_RWA_Submit= -FR-Designer_Event_Name= -FR-Designer_Event_Type= -FR-Designer_Event_Name_Type= -FR-Designer_JavaScript_Set= -FR-Designer_Attribute= -FR-Designer_Form_Editing_Listeners= -FR-Designer_Form_Basic_Properties= -FR-Designer_DS_Dictionary= -FR-Designer_Create_Tree= -FR-Designer_Set_Callback_Function= -FR-Designer_ConfirmDialog_Content= -FR-Designer_ConfirmDialog_Title= - +FR-Designer_JavaScript=JavaScript +FR-Designer_JavaScript_Form_Submit=\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u66F8\u304D\u8FBC\u307F +FR-Designer_JavaScript_Commit_to_Database=DB\u306B\u66F8\u304D\u8FBC\u307F +FR-Designer_JavaScript_Custom=\u30AB\u30B9\u30BF\u30E0 +FR-Designer_RWA_Submit=\u66F8\u304D\u8FBC\u307F +FR-Designer_Event_Name=\u30A4\u30D9\u30F3\u30C8\u540D +FR-Designer_Event_Type=\u30A4\u30D9\u30F3\u30C8\u30BF\u30A4\u30D7 +FR-Designer_Event_Name_Type=\u30A4\u30D9\u30F3\u30C8\u540D\u3068\u30BF\u30A4\u30D7 +FR-Designer_JavaScript_Set=JS\u8A2D\u5B9A +FR-Designer_Attribute=\u30D7\u30ED\u30D1\u30C6\u30A3 +FR-Designer_Form_Editing_Listeners=\u30A4\u30D9\u30F3\u30C8\u7DE8\u96C6 +FR-Designer_Form_Basic_Properties=\u57FA\u672C\u30D7\u30ED\u30D1\u30C6\u30A3 +FR-Designer_DS_Dictionary=\u30C7\u30FC\u30BF\u8F9E\u66F8 +FR-Designer_Create_Tree=\u30C4\u30EA\u30FC\u69CB\u7BC9 +FR-Designer_Set_Callback_Function=\u30B3\u30FC\u30EB\u30D0\u30C3\u30AF\u95A2\u6570\u8A2D\u5B9A +FR-Designer_ConfirmDialog_Content=tab\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u3092\u524A\u9664\u3057\u307E\u3059\u304B +FR-Designer_ConfirmDialog_Title=FineReport 8.0 FR-Designer_FormulaPane_Tips=\u30D2\u30F3\u30C8\:B1\u3092\u5165\u529B FR-Designer_FormulaPane_Variables=\u5909\u6570 FR-Designer_FormulaPane_Formula_Description=\u516C\u5F0F\u8AAC\u660E FR-Designer_FormulaPane_Function_Detail=\u95A2\u6570\u660E\u7D30 FR-Designer_FormulaPane_Search=\u691C\u7D22 -FR-Designer_Tab_carousel= -FR-Designer_setCarousel= -FR-Designer_carouselInterval= - +FR-Designer_Tab_carousel=tab\u30AB\u30EB\u30FC\u30BB\u30EB +FR-Designer_setCarousel=\u30AB\u30EB\u30FC\u30BB\u30EB\u30AA\u30F3 +FR-Designer_carouselInterval=\u30AB\u30EB\u30FC\u30BB\u30EB\u9593\u9694 FR-Designer_ClassName_panel=\u985E\u540D FR-Designer_Description_panel=\u8A18\u8FF0 FR-Designer_Edit_panel=\u7DE8\u96C6 From 34e1c9c95b11694e3cfe86c620e6477bc85c807e Mon Sep 17 00:00:00 2001 From: neil Date: Mon, 23 Jan 2017 14:04:36 +0800 Subject: [PATCH 058/343] ct --- .../com/fr/design/locale/designer.properties | 43 ++--------- .../design/locale/designer_en_US.properties | 45 ++---------- .../design/locale/designer_ja_JP.properties | 73 ++++++------------- .../design/locale/designer_ko_KR.properties | 50 +++---------- .../design/locale/designer_zh_CN.properties | 44 ++--------- .../design/locale/designer_zh_TW.properties | 44 ++--------- 6 files changed, 56 insertions(+), 243 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 1c4173c68..b4e21619f 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -100,7 +100,7 @@ FR-Designer_FS_Close_Other_Templates= FR-Designer_File= FR-Designer_Filter_Conditions= FR-Designer_Finish-Modify-Share= -FR-Designer_Fit= +FR-Designer_Fit-App= FR-Designer_Font-Family= FR-Designer_Font-Size= 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-Failed_to_load_the_plugin=Failed to load the plugin\uFF0Cplease update the plugin\: FR-Designer-Plugin_Please_Update_Jar= +FR-Designer-Invalid_Page_Number=Invalid Page Number FR-Designer_XMLA_Database=Database FR-Designer_XMLA_UserName=User name FR-Designer_XMLA_Password=Password @@ -487,41 +488,9 @@ FR-Designer-LayerPageReport_PageQuery= FR-Designer-LayerPageReport_Define_PageQuerySQL= FR-Designer_Event= FR-Designer_Properties= -FR-Designer_Export_failed=Export failed -FR-Designer_Exported_successfully=Exported successfully -FR-Designer_Exporting=Exporting -FR-Designer_Export-PDF=PDF +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_Button_OK=OK FR-Designer_Button_Cancel=Cancel -FR-Designer_JavaScript= -FR-Designer_JavaScript_Form_Submit= -FR-Designer_JavaScript_Commit_to_Database= -FR-Designer_JavaScript_Custom= -FR-Designer_RWA_Submit= -FR-Designer_Event_Name= -FR-Designer_Event_Type= -FR-Designer_Event_Name_Type= -FR-Designer_JavaScript_Set= -FR-Designer_Attribute= -FR-Designer_Form_Editing_Listeners= -FR-Designer_Form_Basic_Properties= -FR-Designer_DS_Dictionary= -FR-Designer_Create_Tree= -FR-Designer_Set_Callback_Function= -FR-Designer_ConfirmDialog_Content= -FR-Designer_ConfirmDialog_Title= - -FR-Designer_FormulaPane_Tips=Tips\:You_Can_Input_B1_To_Input_The_Data_Of_The_First_Row_Second_Column -FR-Designer_FormulaPane_Variables=Variables -FR-Designer_FormulaPane_Formula_Description=Formula_Description -FR-Designer_FormulaPane_Function_Detail=Function Detail -FR-Designer_FormulaPane_Search=Search -FR-Designer_Tab_carousel= -FR-Designer_setCarousel= -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 diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index 98d1a96d8..7cac6d691 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -100,7 +100,7 @@ FR-Designer_FS_Close_Other_Templates=Close other templates FR-Designer_File=file FR-Designer_Filter_Conditions=Filter condition FR-Designer_Finish-Modify-Share=Finish Modification And Share -FR-Designer_Fit=self-adaption +FR-Designer_Fit-App=App self-adaption FR-Designer_Font-Family=Font name FR-Designer_Font-Size=Font size FR-Designer_Forbid_Drag_into_Adapt_Pane=Form body cannot be dragged into the object @@ -358,6 +358,7 @@ FR-Designer_KeyPoint=KeyPoint FR-Designer_loadedTreeModel=loadedTreeModel FR-Designer-Failed_to_load_the_plugin=Failed to load the plugin\uFF0Cplease update the plugin\: FR-Designer-Plugin_Please_Update_Jar=Please Update Jar +FR-Designer-Invalid_Page_Number=Invalid Page Number FR-Designer_XMLA_Database=DB FR-Designer_XMLA_UserName=User name FR-Designer_XMLA_Password=Password @@ -486,42 +487,10 @@ FR-Designer-DS-Database_Query=DB Query FR-Designer_Is_Share_DBTableData=Shared data set FR-Designer_Event=Event FR-Designer_Properties=Properties -FR-Designer_Export_failed=Export failed -FR-Designer_Exported_successfully=Exported successfully -FR-Designer_Exporting=Exporting -FR-Designer_Export-PDF=PDF -FR-Designer_Properties_Mobile=MobileProperties +FR-Designer_Permissions_Edition=Permissions Edition +FR-Designer_Permission_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_Button_OK=OK FR-Designer_Button_Cancel=Cancel -FR-Designer_JavaScript=JavaScript -FR-Designer_JavaScript_Form_Submit=Form Submit -FR-Designer_JavaScript_Commit_to_Database=Commit to DB -FR-Designer_JavaScript_Custom=Custom -FR-Designer_RWA_Submit=Submit -FR-Designer_Event_Name=Event Name -FR-Designer_Event_Type=Event Type -FR-Designer_Event_Name_Type=Event Name and Type -FR-Designer_JavaScript_Set=JavaScript Set -FR-Designer_Attribute=Attribute -FR-Designer_Form_Editing_Listeners=Event editing -FR-Designer_Form_Basic_Properties=Basic Property -FR-Designer_DS_Dictionary=Data Dictionary -FR-Designer_Create_Tree=Build Tree -FR-Designer_Set_Callback_Function=Set Callback Function -FR-Designer_ConfirmDialog_Content= -FR-Designer_ConfirmDialog_Title= - -FR-Designer_FormulaPane_Tips=Tips\:You can input B1 to get the data in the second cell of the first row -FR-Designer_FormulaPane_Variables=Variables -FR-Designer_FormulaPane_Formula_Description=Formula Description -FR-Designer_FormulaPane_Function_Detail=Function Detail -FR-Designer_FormulaPane_Search=Search -FR-Designer_Tab_carousel= -FR-Designer_setCarousel= -FR-Designer_carouselInterval=Interval - -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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index a6ccf3d32..aac51bae8 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -100,7 +100,7 @@ FR-Designer_FS_Close_Other_Templates=\u305D\u306E\u4ED6\u30C6\u30F3\u30D7\u30EC\ FR-Designer_File=\u30D5\u30A1\u30A4\u30EB 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_Fit=\u81EA\u9069\u5FDC +FR-Designer_Fit-App=App\u81EA\u9069\u5FDC FR-Designer_Font-Family=\u30D5\u30A9\u30F3\u30C8\u540D\u79F0 FR-Designer_Font-Size=\u30D5\u30A9\u30F3\u30C8\u5927\u5C0F FR-Designer_Forbid_Drag_into_Adapt_Pane=\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306F\u30D5\u30A9\u30FC\u30E0\u672C\u6587\u3092\u30C9\u30E9\u30C3\u30B0\u3059\u308B\u3053\u3068\u306F\u8A31\u3055\u308C\u306A\u3044 @@ -320,7 +320,7 @@ FR-Designer_Show_Text=\u30DC\u30BF\u30F3\u540D\u524D\u3092\u8868\u793A FR-Designer_User_Defined_Event=\u30AB\u30B9\u30BF\u30DE\u30A4\u30BA\u4E8B\u4EF6 FR-Designer_Output_PDF=PDF\u30A2\u30A6\u30C8\u30D7\u30C3\u30C8 FR-Designer_Output_Word=Word\u30A2\u30A6\u30C8\u30D7\u30C3\u30C8 -FR-Designer_Image=\u30A4\u30E1\u30FC\u30B8 +FR-Designer_Image=\u753B\u50CF\uFF08PNG\uFF09 FR-Designer_Flash_Print=Flash\u30D7\u30EA\u30F3\u30C8 FR-Designer_PDF_Print=PDF\u30D7\u30EA\u30F3\u30C8 FR-Designer_Applet_Print=\u30A2\u30D7\u30EC\u30C3\u30C8\u5370\u5237 @@ -375,7 +375,7 @@ FR-Designer-Plugin_Expire_Dialog_Text=\u30D7\u30E9\u30B0\u30A4\u30F3\u306F\u3001 FR-Designer-Plugin_Finerest_Addon=\u5E06\u8EDF\u5FDC\u7528\u30BB\u30F3\u30BF\u30FC FR-Designer_Performance_First=\u6027\u80FD\u512A\u5148 FR-Designer_Total_N_Grade=\u5168\u90E8\u3067\:${N}\u5C64 -FR-Designer_time(s)=\u56DE +FR-Designer_time(s)= FR-Designer_General=\u5E38\u7528 FR-Designer_Advanced=\u9AD8\u7D1A FR-Designer_Oracle=\u3059\u3079\u3066\u306E\u30C6\u30FC\u30D6\u30EB @@ -432,23 +432,23 @@ FR-Designer_Attention=\u6CE8\u610F\u3057\u307E\u3059 FR-Designer_Forbid_Widgets_Intersects=\u7981\u6B62\u90E8\u54C1\u3092\u91CD\u306D\u3066 FR-Designer_Widget_Scaling_Mode_Fit=\u9069\u5FDC\u533A\u57DF 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-Cancel=\u30AD\u30E3\u30F3\u30BB\u30EB -FR-Designer-Reuse_Manager=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8 -FR-Designer_Layout_Block_Absolute=\u7D76\u5BFE\u30EC\u30A4\u30A2\u30A6\u30C8\u30D6\u30ED\u30C3\u30AF -FR-Designer_Layout_Block_Tab=Tab\u30D6\u30ED\u30C3\u30AF -FR-Designer_Layout_Block_Blank=\u7A7A\u767D\u30D6\u30ED\u30C3\u30AF -FR-Designer_Attr_Layout=\u30EC\u30A4\u30A2\u30A6\u30C8 -FR-Designer_Attr_Layout_Type=\u30EC\u30A4\u30A2\u30A6\u30C8\u65B9\u5F0F -FR-Designer_Attr_Bidirectional_Adaptive=\u53CC\u65B9\u5411\u81EA\u5DF1\u8ABF\u6574 -FR-Designer_Download_Template=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u3092\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9 +FR-Designer-Reuse_Manager= +FR-Designer_Layout_Block_Absolute= +FR-Designer_Layout_Block_Tab= +FR-Designer_Layout_Block_Blank= +FR-Designer_Attr_Layout= +FR-Designer_Attr_Layout_Type= +FR-Designer_Attr_Bidirectional_Adaptive= +FR-Designer_Download_Template= FR-Designer-Widget_Scaling_Mode=\u30B9\u30B1\u30FC\u30EA\u30F3\u30B0\u8AD6\u7406 -FR-Designer_Mobile-Refresh=\u66F4\u65B0 -FR-Designer_Mobile-ToolBar=\u30C4\u30FC\u30EB\u30D0\u30FC +FR-Designer_Mobile-Refresh= +FR-Designer_Mobile-ToolBar= 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_Language_Change_Successful=\u65B0\u3057\u3044\u8A00\u8A9E\u306F\u518D\u8D77\u52D5\u5F8C\u306B\u4F7F\u7528\u3055\u308C\u307E\u3059\u3002 +FR-Designer_Language_Change_Successful= FR-Designer_Template_Web_Attributes= FR-Designer_Basic=\u57FA\u672C FR-Designer_Printers(Server)=\u30D7\u30EA\u30F3\u30BF\u30FC(\u30B5\u30FC\u30D0) @@ -463,40 +463,11 @@ FR-Designer-DS-Database_Query=\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u30AF\u30A8\u FR-Designer-LayerPageReport_PageQuery=\u30DA\u30FC\u30B8\u5225\u30AF\u30A8\u30EA FR-Designer-LayerPageReport_Define_PageQuerySQL=\u5B9A\u7FA9\u30DA\u30FC\u30B8\u5225\u30AF\u30A8\u30EAsql FR-Designer_Is_Share_DBTableData=\u5171\u6709\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8 -FR-Designer_Event=\u30A4\u30D9\u30F3\u30C8 -FR-Designer_Properties=\u30D7\u30ED\u30D1\u30C6\u30A3 -FR-Designer_Export_failed=\u5C0E\u51FA\u306B\u5931\u6557\u3057\u307E\u3057\u305F -FR-Designer_Exported_successfully=\u5C0E\u51FA\u6210\u529F -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_Event= +FR-Designer_Properties= +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_Button_OK=\u78BA\u5B9A FR-Designer_Button_Cancel=\u30AD\u30E3\u30F3\u30BB\u30EB -FR-Designer_JavaScript=JavaScript -FR-Designer_JavaScript_Form_Submit=\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u66F8\u304D\u8FBC\u307F -FR-Designer_JavaScript_Commit_to_Database=DB\u306B\u66F8\u304D\u8FBC\u307F -FR-Designer_JavaScript_Custom=\u30AB\u30B9\u30BF\u30E0 -FR-Designer_RWA_Submit=\u66F8\u304D\u8FBC\u307F -FR-Designer_Event_Name=\u30A4\u30D9\u30F3\u30C8\u540D -FR-Designer_Event_Type=\u30A4\u30D9\u30F3\u30C8\u30BF\u30A4\u30D7 -FR-Designer_Event_Name_Type=\u30A4\u30D9\u30F3\u30C8\u540D\u3068\u30BF\u30A4\u30D7 -FR-Designer_JavaScript_Set=JS\u8A2D\u5B9A -FR-Designer_Attribute=\u30D7\u30ED\u30D1\u30C6\u30A3 -FR-Designer_Form_Editing_Listeners=\u30A4\u30D9\u30F3\u30C8\u7DE8\u96C6 -FR-Designer_Form_Basic_Properties=\u57FA\u672C\u30D7\u30ED\u30D1\u30C6\u30A3 -FR-Designer_DS_Dictionary=\u30C7\u30FC\u30BF\u8F9E\u66F8 -FR-Designer_Create_Tree=\u30C4\u30EA\u30FC\u69CB\u7BC9 -FR-Designer_Set_Callback_Function=\u30B3\u30FC\u30EB\u30D0\u30C3\u30AF\u95A2\u6570\u8A2D\u5B9A -FR-Designer_ConfirmDialog_Content=tab\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u3092\u524A\u9664\u3057\u307E\u3059\u304B -FR-Designer_ConfirmDialog_Title=FineReport 8.0 -FR-Designer_FormulaPane_Tips=\u30D2\u30F3\u30C8\:B1\u3092\u5165\u529B -FR-Designer_FormulaPane_Variables=\u5909\u6570 -FR-Designer_FormulaPane_Formula_Description=\u516C\u5F0F\u8AAC\u660E -FR-Designer_FormulaPane_Function_Detail=\u95A2\u6570\u660E\u7D30 -FR-Designer_FormulaPane_Search=\u691C\u7D22 -FR-Designer_Tab_carousel=tab\u30AB\u30EB\u30FC\u30BB\u30EB -FR-Designer_setCarousel=\u30AB\u30EB\u30FC\u30BB\u30EB\u30AA\u30F3 -FR-Designer_carouselInterval=\u30AB\u30EB\u30FC\u30BB\u30EB\u9593\u9694 -FR-Designer_ClassName_panel=\u985E\u540D -FR-Designer_Description_panel=\u8A18\u8FF0 -FR-Designer_Edit_panel=\u7DE8\u96C6 -FR-Designer_Property_panel=\u5C5E\u6027 -FR-Designer_Select_panel=\u9078\u629E \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index be6576cc9..b19fdfc37 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -100,7 +100,7 @@ FR-Designer_FS_Close_Other_Templates=\uAE30\uD0C0\uD15C\uD50C\uB9BF\uB2EB\uAE30 FR-Designer_File=\uD30C\uC77C FR-Designer_Filter_Conditions=\uD544\uD130\uC870\uAC74 FR-Designer_Finish-Modify-Share=\uC218\uC815\uC644\uB8CC\uBC0F\uACF5\uC720 -FR-Designer_Fit=\uC790\uAE30\uC801\uC751 +FR-Designer_Fit-App=App\uC790\uAE30\uC801\uC751 FR-Designer_Font-Family=\uAE00\uAF34\uBA85\uCE6D FR-Designer_Font-Size=\uAE00\uAF34\uD06C\uAE30 FR-Designer_Forbid_Drag_into_Adapt_Pane=\uD574\uB2F9\uAC1D\uCCB4\uB294\uD3FC\uD14C\uC774\uBE14\uBC14\uB514\uB4DC\uB798\uADF8\uB97C\uD5C8\uC6A9\uD558\uC9C0\uC54A\uC2B5\uB2C8\uB2E4. @@ -459,43 +459,11 @@ 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-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_Event=\ -FR-Designer_Properties=\uFFFD -FR-Designer_Export_failed=\uB0B4\uBCF4\uB0B4\uAE30\uC2E4\uD328 -FR-Designer_Exported_successfully=\uB0B4\uBCF4\uB0B4\uAE30\uC131\uACF5 -FR-Designer_Exporting=\uB0B4\uBCF4\uB0B4\uAE30\uC911 -FR-Designer_Export-PDF=PDF\uC11C\uC2DDFR-Designer_Properties=\uFFFD -FR-Designer_Button_OK=\uD655\uC778FR-Designer_Button_Cancel=\uCDE8\uC18C -\uFFFD -FR-Designer_JavaScript= -FR-Designer_JavaScript_Form_Submit= -FR-Designer_JavaScript_Commit_to_Database= -FR-Designer_JavaScript_Custom= -FR-Designer_RWA_Submit= -FR-Designer_Event_Name= -FR-Designer_Event_Type= -FR-Designer_Event_Name_Type= -FR-Designer_JavaScript_Set= -FR-Designer_Attribute= -FR-Designer_Form_Editing_Listeners= -FR-Designer_Form_Basic_Properties= -FR-Designer_DS_Dictionary= -FR-Designer_Create_Tree= -FR-Designer_Set_Callback_Function= -FR-Designer_ConfirmDialog_Content= -FR-Designer_ConfirmDialog_Title= - -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_FormulaPane_Variables=\uBCC0\uC218 -FR-Designer_FormulaPane_Formula_Description=\uC218\uC2DD\uC124\uBA85 -FR-Designer_FormulaPane_Function_Detail=\uD568\uC218\uC0C1\uC138\uC0AC\uD56D -FR-Designer_FormulaPane_Search=\uAC80\uC0C9 -FR-Designer_Tab_carousel= -FR-Designer_setCarousel= -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 \ No newline at end of file +FR-Designer_Event= +FR-Designer_Properties= +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_Button_OK=\uD655\uC778 +FR-Designer_Button_Cancel=\uCDE8\uC18C \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 4a67bea21..7f3817bce 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -100,7 +100,7 @@ FR-Designer_FS_Close_Other_Templates=\u5173\u95ED\u5176\u4ED6\u6A21\u677F FR-Designer_File=\u6587\u4EF6 FR-Designer_Filter_Conditions=\u8FC7\u6EE4\u6761\u4EF6 FR-Designer_Finish-Modify-Share=\u5B8C\u6210\u4FEE\u6539\u5E76\u5206\u4EAB -FR-Designer_Fit=\u81EA\u9002\u5E94 +FR-Designer_Fit-App=App\u81EA\u9002\u5E94 FR-Designer_Font-Family=\u5B57\u4F53\u540D\u79F0 FR-Designer_Font-Size=\u5B57\u4F53\u5927\u5C0F FR-Designer_Forbid_Drag_into_Adapt_Pane=\u8BE5\u5BF9\u8C61\u4E0D\u5141\u8BB8\u62D6\u5165\u8868\u5355\u4E3B\u4F53 @@ -358,6 +358,7 @@ FR-Designer_KeyPoint=\u5173\u952E\u8282\u70B9 FR-Designer_loadedTreeModel=\u52A0\u8F7D\u5931\u8D25,\u8BF7\u68C0\u67E5\u540E\u91CD\u8BD5 FR-Designer-Failed_to_load_the_plugin=\u65E0\u6CD5\u52A0\u8F7D\u63D2\u4EF6\uFF0C\u8BF7\u66F4\u65B0\u63D2\u4EF6\uFF1A FR-Designer-Plugin_Please_Update_Jar=\u8BF7\u66F4\u65B0Jar\u5305, \u63D2\u4EF6\u9700\u6C42\u6700\u4F4E\u7248\u672C +FR-Designer-Invalid_Page_Number=\u65E0\u6548\u9875\u7801 FR-Designer_Get-CubeGetting=\u83B7\u53D6cube FR-Designer_XMLA_Database=\u6570\u636E\u5E93 FR-Designer_XMLA_UserName=\u7528\u6237\u540D @@ -490,42 +491,9 @@ FR-Designer-LayerPageReport_Define_PageQuerySQL=\u5B9A\u4E49\u5206\u9875\u67E5\u FR-Designer_Is_Share_DBTableData=\u5171\u4EAB\u6570\u636E\u96C6 FR-Designer_Event=\u4E8B\u4EF6 FR-Designer_Properties=\u5C5E\u6027 -FR-Designer_Export_failed=\u5BFC\u51FA\u5931\u8D25 -FR-Designer_Exported_successfully=\u5BFC\u51FA\u6210\u529F -FR-Designer_Exporting=\u6B63\u5728\u5BFC\u51FA -FR-Designer_Export-PDF=PDF\u683C\u5F0F -FR-Designer_Properties_Mobile=\u624B\u673A\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_Button_OK=\u786E\u5B9A FR-Designer_Button_Cancel=\u53D6\u6D88 -FR-Designer_JavaScript=JavaScript\u811A\u672C -FR-Designer_JavaScript_Form_Submit=\u8868\u5355\u63D0\u4EA4 -FR-Designer_JavaScript_Commit_to_Database=\u63D0\u4EA4\u5165\u5E93 -FR-Designer_JavaScript_Custom=\u81EA\u5B9A\u4E49 -FR-Designer_RWA_Submit=\u63D0\u4EA4 -FR-Designer_Event_Name=\u4E8B\u4EF6\u540D -FR-Designer_Event_Type=\u4E8B\u4EF6\u7C7B\u578B -FR-Designer_Event_Name_Type=\u4E8B\u4EF6\u540D\u5B57\u548C\u7C7B\u578B -FR-Designer_JavaScript_Set=JS\u8BBE\u7F6E -FR-Designer_Attribute=\u5C5E\u6027 -FR-Designer_Form_Editing_Listeners=\u4E8B\u4EF6\u7F16\u8F91 -FR-Designer_Form_Basic_Properties=\u57FA\u672C\u5C5E\u6027 -FR-Designer_DS_Dictionary=\u6570\u636E\u5B57\u5178 -FR-Designer_Create_Tree=\u6784\u5EFA\u6811 -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_Title=FineReport 8.0 - -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_FormulaPane_Variables=\u53D8\u91CF -FR-Designer_FormulaPane_Formula_Description=\u516C\u5F0F\u8BF4\u660E -FR-Designer_FormulaPane_Function_Detail=\u51FD\u6570\u660E\u7EC6 -FR-Designer_FormulaPane_Search=\u641C\u7D22 -FR-Designer_Tab_carousel=tab\u8F6E\u64AD -FR-Designer_setCarousel=\u5F00\u542F\u8F6E\u64AD -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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 96135a825..0c35cd55a 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -100,7 +100,7 @@ FR-Designer_FS_Close_Other_Templates=\u95DC\u9589\u5176\u4ED6\u7BC4\u672C FR-Designer_File=\u6A94\u6848 FR-Designer_Filter_Conditions=\u904E\u6FFE\u689D\u4EF6 FR-Designer_Finish-Modify-Share=\u5B8C\u6210\u4FEE\u6539\u4E26\u5206\u4EAB -FR-Designer_Fit=\u81EA\u9069\u61C9 +FR-Designer_Fit-App=App\u81EA\u9069\u61C9 FR-Designer_Font-Family=\u5B57\u9AD4\u540D\u7A31 FR-Designer_Font-Size=\u5B57\u9AD4\u5927\u5C0F FR-Designer_Forbid_Drag_into_Adapt_Pane=\u8A72\u5C0D\u8C61\u4E0D\u5141\u8A31\u62D6\u5165\u8868\u55AE\u4E3B\u9AD4 @@ -357,6 +357,7 @@ FR-Designer_KeyPoint=\u95DC\u9375\u7BC0\u9EDE FR-Designer_loadedTreeModel=\u52A0\u8F09\u5931\u6557,\u8ACB\u6AA2\u67E5\u5F8C\u91CD\u8A66 FR-Designer-Failed_to_load_the_plugin=\u7121\u6CD5\u52A0\u8F09\u63D2\u4EF6\uFF0C\u8ACB\u66F4\u65B0\u63D2\u4EF6\uFF1A FR-Designer-Plugin_Please_Update_Jar=\u8ACB\u66F4\u65B0Jar\u5305, \u63D2\u4EF6\u9700\u6C42\u6700\u4F4E\u7248\u672C +FR-Designer-Invalid_Page_Number=\u7121\u6548\u9801\u78BC FR-Designer_Get-CubeGetting=\u7372\u53D6cube FR-Designer_XMLA_Database=\u8CC7\u6599\u5EAB FR-Designer_XMLA_UserName=\u5E33\u865F @@ -478,42 +479,9 @@ 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_Properties=\u5C6C\u6027 FR-Designer_Event=\u4E8B\u4EF6 -FR-Designer_Export_failed=\u532F\u51FA\u5931\u6557 -FR-Designer_Exported_successfully=\u532F\u51FA\u6210\u529F -FR-Designer_Exporting=\u6B63\u5728\u532F\u51FA... -FR-Designer_Export-PDF=PDF\u683C\u5F0F -FR-Designer_Properties_Mobile=\u624B\u6A5F\u5C6C\u6027 +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_Button_OK=\u78BA\u5B9A FR-Designer_Button_Cancel=\u53D6\u6D88 -FR-Designer_JavaScript= -FR-Designer_JavaScript_Form_Submit= -FR-Designer_JavaScript_Commit_to_Database= -FR-Designer_JavaScript_Custom= -FR-Designer_RWA_Submit= -FR-Designer_Event_Name= -FR-Designer_Event_Type= -FR-Designer_Event_Name_Type= -FR-Designer_JavaScript_Set= -FR-Designer_Attribute= -FR-Designer_Form_Editing_Listeners= -FR-Designer_Form_Basic_Properties= -FR-Designer_DS_Dictionary= -FR-Designer_Create_Tree= -FR-Designer_Set_Callback_Function= -FR-Designer_ConfirmDialog_Content= -FR-Designer_ConfirmDialog_Title= - -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_FormulaPane_Variables=\u8B8A\u91CF -FR-Designer_FormulaPane_Formula_Description=\u516C\u5F0F\u8AAA\u660E -FR-Designer_FormulaPane_Function_Detail=\u51FD\u6578\u660E\u7D30 -FR-Designer_FormulaPane_Search=\u641C\u7D22 -FR-Designer_Tab_carousel= -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 \ No newline at end of file From 2169ef5cf934e5fbd589eb5780cb30aff2502f43 Mon Sep 17 00:00:00 2001 From: neil Date: Mon, 23 Jan 2017 14:30:19 +0800 Subject: [PATCH 059/343] ct --- .../com/fr/design/style/color/ColorPicker.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/designer_base/src/com/fr/design/style/color/ColorPicker.java b/designer_base/src/com/fr/design/style/color/ColorPicker.java index 8807e1f40..e616e08af 100644 --- a/designer_base/src/com/fr/design/style/color/ColorPicker.java +++ b/designer_base/src/com/fr/design/style/color/ColorPicker.java @@ -32,6 +32,7 @@ public class ColorPicker extends JDialog implements ActionListener private ColorSelectable colorSelectable; private Point mousePos; // 鼠标的绝对坐标 private Color colorToSet; // 暂存要设置的颜色值 + private Color initColor; // 保存初始颜色。实时模式下,如果取消取色操作,则重设为初始颜色 private Boolean setColorRealTime; // 实时设定颜色值 @@ -66,6 +67,7 @@ public class ColorPicker extends JDialog implements ActionListener // 如果要求实时变化,确保先关闭弹窗,再截屏 // 主要针对"图案"选项卡中的"前景"、"背景" if (this.setColorRealTime) { + initColor = colorSelectable.getColor(); colorSelectable.setColor(Color.WHITE); // setColor 可以关闭弹窗 try { Thread.sleep(100); // 等待弹窗关闭 @@ -110,10 +112,10 @@ public class ColorPicker extends JDialog implements ActionListener validate(); // 更新所有子控件 } - public void pickComplete(boolean setColor) { + public void pickComplete(Color color) { timer.stop(); - if (setColor) { - colorSelectable.setColor(colorToSet); + if (color != null) { + colorSelectable.setColor(color); } this.dispose(); } @@ -127,8 +129,13 @@ public class ColorPicker extends JDialog implements ActionListener private class MouseFunctions extends MouseAdapter { - public void mousePressed(MouseEvent e) { - pickComplete(e.getButton() == e.BUTTON1); // 左键确定 + public void mousePressed(MouseEvent e) + { + if (e.getButton() == e.BUTTON1) { // 左键确定 + pickComplete(colorToSet); + } else { + pickComplete(setColorRealTime ? initColor : null); + } } } } From fb6e4806564957f5cedc93a83d37c76d93f92f5f Mon Sep 17 00:00:00 2001 From: neil Date: Mon, 23 Jan 2017 15:54:44 +0800 Subject: [PATCH 060/343] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=EF=BC=8C=20=E5=86=B2=E7=AA=81=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/locale/designer.properties | 36 ++++++++++++++++++ .../design/locale/designer_en_US.properties | 37 +++++++++++++++++++ .../design/locale/designer_ja_JP.properties | 30 +++++++++++++++ .../design/locale/designer_ko_KR.properties | 34 ++++++++++++++++- .../design/locale/designer_zh_CN.properties | 32 ++++++++++++++++ .../design/locale/designer_zh_TW.properties | 32 ++++++++++++++++ .../fr/design/style/color/ColorPicker.java | 24 +++++------- 7 files changed, 210 insertions(+), 15 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index b4e21619f..40a88a249 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -492,5 +492,41 @@ 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_Exported_successfully=Exported successfully +FR-Designer_Exporting=Exporting +FR-Designer_Export-PDF=PDF FR-Designer_Button_OK=OK FR-Designer_Button_Cancel=Cancel +FR-Designer_JavaScript= +FR-Designer_JavaScript_Form_Submit= +FR-Designer_JavaScript_Commit_to_Database= +FR-Designer_JavaScript_Custom= +FR-Designer_RWA_Submit= +FR-Designer_Event_Name= +FR-Designer_Event_Type= +FR-Designer_Event_Name_Type= +FR-Designer_JavaScript_Set= +FR-Designer_Attribute= +FR-Designer_Form_Editing_Listeners= +FR-Designer_Form_Basic_Properties= +FR-Designer_DS_Dictionary= +FR-Designer_Create_Tree= +FR-Designer_Set_Callback_Function= +FR-Designer_ConfirmDialog_Content= +FR-Designer_ConfirmDialog_Title= + +FR-Designer_FormulaPane_Tips=Tips\:You_Can_Input_B1_To_Input_The_Data_Of_The_First_Row_Second_Column +FR-Designer_FormulaPane_Variables=Variables +FR-Designer_FormulaPane_Formula_Description=Formula_Description +FR-Designer_FormulaPane_Function_Detail=Function Detail +FR-Designer_FormulaPane_Search=Search +FR-Designer_Tab_carousel= +FR-Designer_setCarousel= +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 diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index 7cac6d691..b427e4501 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -492,5 +492,42 @@ FR-Designer_Permission_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_Exported_successfully=Exported successfully +FR-Designer_Exporting=Exporting +FR-Designer_Export-PDF=PDF +FR-Designer_Properties_Mobile=MobileProperties FR-Designer_Button_OK=OK FR-Designer_Button_Cancel=Cancel +FR-Designer_JavaScript=JavaScript +FR-Designer_JavaScript_Form_Submit=Form Submit +FR-Designer_JavaScript_Commit_to_Database=Commit to DB +FR-Designer_JavaScript_Custom=Custom +FR-Designer_RWA_Submit=Submit +FR-Designer_Event_Name=Event Name +FR-Designer_Event_Type=Event Type +FR-Designer_Event_Name_Type=Event Name and Type +FR-Designer_JavaScript_Set=JavaScript Set +FR-Designer_Attribute=Attribute +FR-Designer_Form_Editing_Listeners=Event editing +FR-Designer_Form_Basic_Properties=Basic Property +FR-Designer_DS_Dictionary=Data Dictionary +FR-Designer_Create_Tree=Build Tree +FR-Designer_Set_Callback_Function=Set Callback Function +FR-Designer_ConfirmDialog_Content= +FR-Designer_ConfirmDialog_Title= + +FR-Designer_FormulaPane_Tips=Tips\:You can input B1 to get the data in the second cell of the first row +FR-Designer_FormulaPane_Variables=Variables +FR-Designer_FormulaPane_Formula_Description=Formula Description +FR-Designer_FormulaPane_Function_Detail=Function Detail +FR-Designer_FormulaPane_Search=Search +FR-Designer_Tab_carousel= +FR-Designer_setCarousel= +FR-Designer_carouselInterval=Interval + +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 diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index aac51bae8..2ab4f557a 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -471,3 +471,33 @@ 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_Button_OK=\u78BA\u5B9A FR-Designer_Button_Cancel=\u30AD\u30E3\u30F3\u30BB\u30EB +FR-Designer_JavaScript=JavaScript +FR-Designer_JavaScript_Form_Submit=\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u66F8\u304D\u8FBC\u307F +FR-Designer_JavaScript_Commit_to_Database=DB\u306B\u66F8\u304D\u8FBC\u307F +FR-Designer_JavaScript_Custom=\u30AB\u30B9\u30BF\u30E0 +FR-Designer_RWA_Submit=\u66F8\u304D\u8FBC\u307F +FR-Designer_Event_Name=\u30A4\u30D9\u30F3\u30C8\u540D +FR-Designer_Event_Type=\u30A4\u30D9\u30F3\u30C8\u30BF\u30A4\u30D7 +FR-Designer_Event_Name_Type=\u30A4\u30D9\u30F3\u30C8\u540D\u3068\u30BF\u30A4\u30D7 +FR-Designer_JavaScript_Set=JS\u8A2D\u5B9A +FR-Designer_Attribute=\u30D7\u30ED\u30D1\u30C6\u30A3 +FR-Designer_Form_Editing_Listeners=\u30A4\u30D9\u30F3\u30C8\u7DE8\u96C6 +FR-Designer_Form_Basic_Properties=\u57FA\u672C\u30D7\u30ED\u30D1\u30C6\u30A3 +FR-Designer_DS_Dictionary=\u30C7\u30FC\u30BF\u8F9E\u66F8 +FR-Designer_Create_Tree=\u30C4\u30EA\u30FC\u69CB\u7BC9 +FR-Designer_Set_Callback_Function=\u30B3\u30FC\u30EB\u30D0\u30C3\u30AF\u95A2\u6570\u8A2D\u5B9A +FR-Designer_ConfirmDialog_Content=tab\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u3092\u524A\u9664\u3057\u307E\u3059\u304B +FR-Designer_ConfirmDialog_Title=FineReport 8.0 +FR-Designer_FormulaPane_Tips=\u30D2\u30F3\u30C8\:B1\u3092\u5165\u529B +FR-Designer_FormulaPane_Variables=\u5909\u6570 +FR-Designer_FormulaPane_Formula_Description=\u516C\u5F0F\u8AAC\u660E +FR-Designer_FormulaPane_Function_Detail=\u95A2\u6570\u660E\u7D30 +FR-Designer_FormulaPane_Search=\u691C\u7D22 +FR-Designer_Tab_carousel=tab\u30AB\u30EB\u30FC\u30BB\u30EB +FR-Designer_setCarousel=\u30AB\u30EB\u30FC\u30BB\u30EB\u30AA\u30F3 +FR-Designer_carouselInterval=\u30AB\u30EB\u30FC\u30BB\u30EB\u9593\u9694 +FR-Designer_ClassName_panel=\u985E\u540D +FR-Designer_Description_panel=\u8A18\u8FF0 +FR-Designer_Edit_panel=\u7DE8\u96C6 +FR-Designer_Property_panel=\u5C5E\u6027 +FR-Designer_Select_panel=\u9078\u629E diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index b19fdfc37..87d64367c 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -466,4 +466,36 @@ FR-Designer_Export_Excel_Page=\uD398\uC774\uC9C0\uB098\uB204\uAE30\uC5B4\uB0B4\u 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_Button_OK=\uD655\uC778 -FR-Designer_Button_Cancel=\uCDE8\uC18C \ No newline at end of file +FR-Designer_Button_Cancel=\uCDE8\uC18C +FR-Designer_JavaScript= +FR-Designer_JavaScript_Form_Submit= +FR-Designer_JavaScript_Commit_to_Database= +FR-Designer_JavaScript_Custom= +FR-Designer_RWA_Submit= +FR-Designer_Event_Name= +FR-Designer_Event_Type= +FR-Designer_Event_Name_Type= +FR-Designer_JavaScript_Set= +FR-Designer_Attribute= +FR-Designer_Form_Editing_Listeners= +FR-Designer_Form_Basic_Properties= +FR-Designer_DS_Dictionary= +FR-Designer_Create_Tree= +FR-Designer_Set_Callback_Function= +FR-Designer_ConfirmDialog_Content= +FR-Designer_ConfirmDialog_Title= + +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_FormulaPane_Variables=\uBCC0\uC218 +FR-Designer_FormulaPane_Formula_Description=\uC218\uC2DD\uC124\uBA85 +FR-Designer_FormulaPane_Function_Detail=\uD568\uC218\uC0C1\uC138\uC0AC\uD56D +FR-Designer_FormulaPane_Search=\uAC80\uC0C9 +FR-Designer_Tab_carousel= +FR-Designer_setCarousel= +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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 7f3817bce..343588778 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -497,3 +497,35 @@ FR-Designer_Export_Excel_Simple=\u539F\u6837\u5BFC\u51FA FR-Designer_Export_Excel_PageToSheet=\u5206\u9875\u5206Sheet\u5BFC\u51FA FR-Designer_Button_OK=\u786E\u5B9A FR-Designer_Button_Cancel=\u53D6\u6D88 +FR-Designer_JavaScript=JavaScript\u811A\u672C +FR-Designer_JavaScript_Form_Submit=\u8868\u5355\u63D0\u4EA4 +FR-Designer_JavaScript_Commit_to_Database=\u63D0\u4EA4\u5165\u5E93 +FR-Designer_JavaScript_Custom=\u81EA\u5B9A\u4E49 +FR-Designer_RWA_Submit=\u63D0\u4EA4 +FR-Designer_Event_Name=\u4E8B\u4EF6\u540D +FR-Designer_Event_Type=\u4E8B\u4EF6\u7C7B\u578B +FR-Designer_Event_Name_Type=\u4E8B\u4EF6\u540D\u5B57\u548C\u7C7B\u578B +FR-Designer_JavaScript_Set=JS\u8BBE\u7F6E +FR-Designer_Attribute=\u5C5E\u6027 +FR-Designer_Form_Editing_Listeners=\u4E8B\u4EF6\u7F16\u8F91 +FR-Designer_Form_Basic_Properties=\u57FA\u672C\u5C5E\u6027 +FR-Designer_DS_Dictionary=\u6570\u636E\u5B57\u5178 +FR-Designer_Create_Tree=\u6784\u5EFA\u6811 +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_Title=FineReport 8.0 + +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_FormulaPane_Variables=\u53D8\u91CF +FR-Designer_FormulaPane_Formula_Description=\u516C\u5F0F\u8BF4\u660E +FR-Designer_FormulaPane_Function_Detail=\u51FD\u6570\u660E\u7EC6 +FR-Designer_FormulaPane_Search=\u641C\u7D22 +FR-Designer_Tab_carousel=tab\u8F6E\u64AD +FR-Designer_setCarousel=\u5F00\u542F\u8F6E\u64AD +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 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 0c35cd55a..5d1145a2f 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -485,3 +485,35 @@ FR-Designer_Export_Excel_Simple=\u539F\u6A23\u532F\u51FA FR-Designer_Export_Excel_PageToSheet=\u5206\u9801\u5206Sheet\u532F\u51FA FR-Designer_Button_OK=\u78BA\u5B9A FR-Designer_Button_Cancel=\u53D6\u6D88 +FR-Designer_JavaScript= +FR-Designer_JavaScript_Form_Submit= +FR-Designer_JavaScript_Commit_to_Database= +FR-Designer_JavaScript_Custom= +FR-Designer_RWA_Submit= +FR-Designer_Event_Name= +FR-Designer_Event_Type= +FR-Designer_Event_Name_Type= +FR-Designer_JavaScript_Set= +FR-Designer_Attribute= +FR-Designer_Form_Editing_Listeners= +FR-Designer_Form_Basic_Properties= +FR-Designer_DS_Dictionary= +FR-Designer_Create_Tree= +FR-Designer_Set_Callback_Function= +FR-Designer_ConfirmDialog_Content= +FR-Designer_ConfirmDialog_Title= + +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_FormulaPane_Variables=\u8B8A\u91CF +FR-Designer_FormulaPane_Formula_Description=\u516C\u5F0F\u8AAA\u660E +FR-Designer_FormulaPane_Function_Detail=\u51FD\u6578\u660E\u7D30 +FR-Designer_FormulaPane_Search=\u641C\u7D22 +FR-Designer_Tab_carousel= +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 diff --git a/designer_base/src/com/fr/design/style/color/ColorPicker.java b/designer_base/src/com/fr/design/style/color/ColorPicker.java index e616e08af..e91968675 100644 --- a/designer_base/src/com/fr/design/style/color/ColorPicker.java +++ b/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.general.FRLogger; +import javax.swing.*; 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.image.BufferedImage; -import javax.swing.*; /** * 取色框 @@ -32,7 +35,6 @@ public class ColorPicker extends JDialog implements ActionListener private ColorSelectable colorSelectable; private Point mousePos; // 鼠标的绝对坐标 private Color colorToSet; // 暂存要设置的颜色值 - private Color initColor; // 保存初始颜色。实时模式下,如果取消取色操作,则重设为初始颜色 private Boolean setColorRealTime; // 实时设定颜色值 @@ -67,7 +69,6 @@ public class ColorPicker extends JDialog implements ActionListener // 如果要求实时变化,确保先关闭弹窗,再截屏 // 主要针对"图案"选项卡中的"前景"、"背景" if (this.setColorRealTime) { - initColor = colorSelectable.getColor(); colorSelectable.setColor(Color.WHITE); // setColor 可以关闭弹窗 try { Thread.sleep(100); // 等待弹窗关闭 @@ -112,10 +113,10 @@ public class ColorPicker extends JDialog implements ActionListener validate(); // 更新所有子控件 } - public void pickComplete(Color color) { + public void pickComplete(boolean setColor) { timer.stop(); - if (color != null) { - colorSelectable.setColor(color); + if (setColor) { + colorSelectable.setColor(colorToSet); } this.dispose(); } @@ -129,13 +130,8 @@ public class ColorPicker extends JDialog implements ActionListener private class MouseFunctions extends MouseAdapter { - public void mousePressed(MouseEvent e) - { - if (e.getButton() == e.BUTTON1) { // 左键确定 - pickComplete(colorToSet); - } else { - pickComplete(setColorRealTime ? initColor : null); - } + public void mousePressed(MouseEvent e) { + pickComplete(e.getButton() == e.BUTTON1); // 左键确定 } } } From 925a72e781b76bbd1413e85893e88a5aa18bc016 Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 23 Jan 2017 17:37:04 +0800 Subject: [PATCH 061/343] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E3=80=82=E5=9B=BD=E9=99=85=E5=8C=96key?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/locale/designer.properties | 16 ++++++++++++ .../design/locale/designer_en_US.properties | 20 ++++++++++++-- .../design/locale/designer_ja_JP.properties | 17 +++++++++++- .../design/locale/designer_ko_KR.properties | 26 +++++++++++++++---- .../design/locale/designer_zh_CN.properties | 18 ++++++++++++- .../design/locale/designer_zh_TW.properties | 18 ++++++++++++- 6 files changed, 105 insertions(+), 10 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 1c4173c68..52708104d 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -525,3 +525,19 @@ 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 diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index 98d1a96d8..82f3d81b1 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -181,7 +181,7 @@ FR-Designer_Support_QQ=Support online FR-Designer_Swatch=Swatch FR-Designer_Tab_title=Tab title 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_Title=Title FR-Designer_Total=Total @@ -524,4 +524,20 @@ 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 \ No newline at end of file +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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index a6ccf3d32..42ccf96e8 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -499,4 +499,19 @@ FR-Designer_ClassName_panel=\u985E\u540D FR-Designer_Description_panel=\u8A18\u8FF0 FR-Designer_Edit_panel=\u7DE8\u96C6 FR-Designer_Property_panel=\u5C5E\u6027 -FR-Designer_Select_panel=\u9078\u629E \ No newline at end of file +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 diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index be6576cc9..7fb438f1e 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -459,14 +459,14 @@ 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-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_Event=\ +FR-Designer_Event= FR-Designer_Properties=\uFFFD FR-Designer_Export_failed=\uB0B4\uBCF4\uB0B4\uAE30\uC2E4\uD328 FR-Designer_Exported_successfully=\uB0B4\uBCF4\uB0B4\uAE30\uC131\uACF5 FR-Designer_Exporting=\uB0B4\uBCF4\uB0B4\uAE30\uC911 -FR-Designer_Export-PDF=PDF\uC11C\uC2DDFR-Designer_Properties=\uFFFD -FR-Designer_Button_OK=\uD655\uC778FR-Designer_Button_Cancel=\uCDE8\uC18C -\uFFFD +FR-Designer_Export-PDF=PDF\uC11C\uC2DD +FR-Designer_Button_OK=\uD655\uC778 +FR-Designer_Button_Cancel=\uCDE8\uC18C FR-Designer_JavaScript= FR-Designer_JavaScript_Form_Submit= FR-Designer_JavaScript_Commit_to_Database= @@ -498,4 +498,20 @@ 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 \ No newline at end of file +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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 4a67bea21..58f3c744a 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -528,4 +528,20 @@ 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 \ No newline at end of file +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 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 96135a825..f2c6e259a 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -516,4 +516,20 @@ 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 \ No newline at end of file +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 \ No newline at end of file From f9853011d43869ed6eca3e8c4a9c97b5ff3875d3 Mon Sep 17 00:00:00 2001 From: unknown <李晓丽> Date: Tue, 24 Jan 2017 10:13:00 +0800 Subject: [PATCH 062/343] =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E7=BF=BB?= =?UTF-8?q?=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/locale/designer_zh_TW.properties | 52 +++++++++---------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 96135a825..dc90ecb45 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -451,12 +451,12 @@ FR-Designer-QQLogin-Determine=\u78BA\u5B9A FR-Designer-QQLogin-Cancel=\u53D6\u6D88 FR-Designer-Reuse_Manager=\u7D44\u4EF6\u7BA1\u7406 FR-Designer_TableData-Default-Para=\u6578\u64DA\u96C6\u9ED8\u8A8D\u53C3\u6578 -FR-Designer_Layout_Block_Absolute= -FR-Designer_Layout_Block_Tab= -FR-Designer_Layout_Block_Blank= -FR-Designer_Attr_Layout= -FR-Designer_Attr_Layout_Type= -FR-Designer_Attr_Bidirectional_Adaptive= +FR-Designer_Layout_Block_Absolute=\u7D55\u5C0D\u756B\u5E03\u584A +FR-Designer_Layout_Block_Tab=Tab\u584A +FR-Designer_Layout_Block_Blank=\u7A7A\u767D\u584A +FR-Designer_Attr_Layout=\u4F48\u5C40 +FR-Designer_Attr_Layout_Type=\u4F48\u5C40\u65B9\u5F0F +FR-Designer_Attr_Bidirectional_Adaptive=\u96D9\u5411\u81EA\u9069\u61C9 FR-Designer_Mobile-Refresh=\u5237\u65B0 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 @@ -485,32 +485,32 @@ FR-Designer_Export-PDF=PDF\u683C\u5F0F FR-Designer_Properties_Mobile=\u624B\u6A5F\u5C6C\u6027 FR-Designer_Button_OK=\u78BA\u5B9A FR-Designer_Button_Cancel=\u53D6\u6D88 -FR-Designer_JavaScript= -FR-Designer_JavaScript_Form_Submit= -FR-Designer_JavaScript_Commit_to_Database= -FR-Designer_JavaScript_Custom= -FR-Designer_RWA_Submit= -FR-Designer_Event_Name= -FR-Designer_Event_Type= -FR-Designer_Event_Name_Type= -FR-Designer_JavaScript_Set= -FR-Designer_Attribute= -FR-Designer_Form_Editing_Listeners= -FR-Designer_Form_Basic_Properties= -FR-Designer_DS_Dictionary= -FR-Designer_Create_Tree= -FR-Designer_Set_Callback_Function= -FR-Designer_ConfirmDialog_Content= -FR-Designer_ConfirmDialog_Title= +FR-Designer_JavaScript=JavaScript\u8173\u672C +FR-Designer_JavaScript_Form_Submit=\u8868\u55AE\u63D0\u4EA4 +FR-Designer_JavaScript_Commit_to_Database=\u63D0\u4EA4\u5165\u5EAB +FR-Designer_JavaScript_Custom=\u81EA\u5B9A\u7FA9 +FR-Designer_RWA_Submit=\u63D0\u4EA4 +FR-Designer_Event_Name=\u4E8B\u4EF6\u540D +FR-Designer_Event_Type=\u4E8B\u4EF6\u985E\u578B +FR-Designer_Event_Name_Type=\u4E8B\u4EF6\u540D\u5B57\u548C\u985E\u578B +FR-Designer_JavaScript_Set=JS\u8A2D\u7F6E +FR-Designer_Attribute=\u5C6C\u6027 +FR-Designer_Form_Editing_Listeners=\u4E8B\u4EF6\u7DE8\u8F2F +FR-Designer_Form_Basic_Properties=\u57FA\u672C\u5C6C\u6027 +FR-Designer_DS_Dictionary=\u6578\u64DA\u5B57\u5178 +FR-Designer_Create_Tree=\u69CB\u5EFA\u6A39 +FR-Designer_Set_Callback_Function=\u8A2D\u7F6E\u56DE\u8ABF\u51FD\u6578 +FR-Designer_ConfirmDialog_Content=\u662F\u5426\u78BA\u5B9A\u522A\u9664TAB\u63A7\u4EF6 +FR-Designer_ConfirmDialog_Title=FineReport 8.0 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_FormulaPane_Variables=\u8B8A\u91CF FR-Designer_FormulaPane_Formula_Description=\u516C\u5F0F\u8AAA\u660E FR-Designer_FormulaPane_Function_Detail=\u51FD\u6578\u660E\u7D30 FR-Designer_FormulaPane_Search=\u641C\u7D22 -FR-Designer_Tab_carousel= -FR-Designer_setCarousel= -FR-Designer_carouselInterval= +FR-Designer_Tab_carousel=Tab\u8F2A\u64AD +FR-Designer_setCarousel=\u958B\u555F\u8F2A\u64AD +FR-Designer_carouselInterval=\u8F2A\u64AD\u9593\u9694 FR-Designer_ClassName_panel=\u985E\u540D FR-Designer_Description_panel=\u63CF\u8FF0 From ef6af3b33eaf8cfa818499f9ad3ae3275adbd271 Mon Sep 17 00:00:00 2001 From: wanling wang Date: Tue, 7 Feb 2017 13:50:54 +0800 Subject: [PATCH 063/343] =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 ++ .../design/locale/designer_ja_JP.properties | 20 +++++++++---------- .../design/locale/designer_ko_KR.properties | 4 ++-- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/.gitignore b/.gitignore index a9c6c2320..57a3eb00a 100644 --- a/.gitignore +++ b/.gitignore @@ -3,5 +3,7 @@ designer_base/bin designer_chart/bin designer_form/bin *.iml +designer_base/src/com/fr/design/locale/.idea/ + diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index a6ccf3d32..8b0473c52 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -222,7 +222,7 @@ FR-Designer-StyleAlignment_Style_Indentation=\u30A4\u30F3\u30C7\u30F3\u30C8 FR-Designer-StyleAlignment_Style_Spacing=\u9593\u9694\u8DDD\u96E2 FR-Designer-StyleAlignment_Style_Alignment=\u63C3\u3048 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-Collect_Information_free=\u7121\u6599 FR-Designer-Collect_Information_Description=\u8A18\u8FF0 @@ -369,7 +369,7 @@ FR-Designer_LiteCondition_ConditionB-OR=\u30AA\u30A2(OR) FR-Designer_LiteCondition_Common_Condition=\u666E\u901A\u6761\u4EF6 FR-Designer_LiteCondition_Formula_Condition=\u516C\u5F0F\u6761\u4EF6 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_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 @@ -407,10 +407,10 @@ FR-Designer_Current_Preview_Rows=\u73FE\u5728\u306E\u30D7\u30EC\u30D3\u30E5\u30F FR-Designer_Data=\u30C7\u30FC\u30BF FR-Designer_Error=\u30A8\u30E9\u30FC FR-Designer-Website_Url=http\://www.finereport.com/jp -FR-Designer_formDesignerModule= -FR-Designer-BBSLogin_Login-Title= -FR-Designer_Get-CubeGetting= -FR-Designer-BBSLogin_Download-Unlogin-Tip= +FR-Designer_formDesignerModule=\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u30C7\u30B6\u30A4\u30CA\u30FC +FR-Designer-BBSLogin_Login-Title=BBS\u30ED\u30B0\u30A4\u30F3 +FR-Designer_Get-CubeGetting=cube\u53D6\u5F97 +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_Mobile-Attr=\u30E2\u30D0\u30A4\u30EB\u7AEF\u672B\u5C5E\u6027 FR-Designer_Mobile-Vertical=\u7E26 @@ -449,19 +449,19 @@ 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_Add_all=\u3059\u3079\u3066\u8FFD\u52A0 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_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_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_Browser_Background=\u30D6\u30E9\u30A6\u30B6\u80CC\u666F FR-Designer_Import_Css=Css\u5F15\u7528 FR-Designer_Import_JavaScript=JavaScript\u5F15\u7528 FR-Designer-Datasource-Param_DES=  "${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
 select * from table where id\=${abc}\u3002
 select * from table where id\='${abc}'\u3002(\u3082\u3057id\u306F\u6587\u5B57\u5217\u306A\u3089)\uFFFD 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_Define_PageQuerySQL=\u5B9A\u7FA9\u30DA\u30FC\u30B8\u5225\u30AF\u30A8\u30EAsql +FR-Designer-LayerPageReport_PageQuery=\u6539\u30DA\u30FC\u30B8\u691C\u7D22 +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_Event=\u30A4\u30D9\u30F3\u30C8 FR-Designer_Properties=\u30D7\u30ED\u30D1\u30C6\u30A3 diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index be6576cc9..ec4facc2f 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -445,7 +445,6 @@ FR-Designer_WLayout-Absolute-ToolTips=\uC790\uC720\uC2DD\uB808\uC774\uC544\uC6C3 FR-Designer_Add_all=\uBAA8\uB450\uCD94\uAC00 FR-Designer_Reset= FR-Designer_Language_Change_Successful= -FR-Designer_Template_Web_Attributes= FR-Designer_Basic=\uAE30\uBCF8 FR-Designer_Printers(Server)=\uD504\uB9B0\uD130(\uC11C\uBC84) FR-Designer_Pagination_Setting=\uD398\uC774\uC9C0\uB098\uB204\uAE30\uBBF8\uB9AC\uBCF4\uAE30\uC124\uC815 @@ -498,4 +497,5 @@ 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 \ No newline at end of file +FR-Designer_Select_panel=\uC120\uD0DD +FR-Designer_Template_Web_Attributes=\uD15C\uD50C\uB9BF \uC6F9 \uC18D\uC131 \ No newline at end of file From 66337fa78c347b88fabfa74f40e28c7dcc6f121e Mon Sep 17 00:00:00 2001 From: unknown <李晓丽> Date: Wed, 8 Feb 2017 09:53:31 +0800 Subject: [PATCH 064/343] =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E7=BF=BB?= =?UTF-8?q?=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer/designer.iml | 9 +++++---- .../fr/design/locale/designer_en_US.properties | 16 ++++++++-------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/designer/designer.iml b/designer/designer.iml index 661dcd939..eca9d8fcd 100644 --- a/designer/designer.iml +++ b/designer/designer.iml @@ -1,13 +1,14 @@ - - + + - + - + + \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index 93bdf4c7b..8d2ef4a74 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/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_Cell=cell FR-Designer_Chart_Cell=Chart Hyperlink-Link Cell -FR-Designer_Chart_Float=Chart Hyperlink-Floating Elements -FR-Designer_Chart_Float_chart=Chart Hyperlink-Floating-window Chart +FR-Designer_Chart_Float=Chart Hyperlink-Floating Element +FR-Designer_Chart_Float_chart=Chart Hyperlink-Floating Chart 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_Close=close @@ -118,7 +118,7 @@ FR-Designer_Get-CubeGetting cube= FR-Designer_Help=Help FR-Designer_Hide=Hide 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_Icon=Icon FR-Designer_Index=index @@ -126,7 +126,7 @@ FR-Designer_Input_Rule=Input Rule FR-Designer_Language_Default=Default FR-Designer_Layout=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_Length=Length FR-Designer_Loading_Data=Loading Data @@ -173,12 +173,12 @@ FR-Designer_Search=Search FR-Designer_Set=Set FR-Designer_Share-Template=Share Template FR-Designer_Simple_general=Simple custom query -FR-Designer_Song_TypeFace=song typeface +FR-Designer_Song_TypeFace=Song typeface FR-Designer_Start-Date=Start Date FR-Designer_Subscript=Subscript FR-Designer_Superscript=Superscript FR-Designer_Support_QQ=Support online -FR-Designer_Swatch=Swatch +FR-Designer_Swatch=Sample FR-Designer_Tab_title=Tab title FR-Designer_TableData=Data set FR-Designer_Thank_guest=Special Thanks @@ -190,8 +190,8 @@ FR-Designer_Underline=Underline FR-Designer_Used=Recently Used FR-Designer_User-defined-MDX=Custom MDX query FR-Designer_SampleText=SampleText SampleText -FR-Designer_Vertical-LeftToRight=Vertical Text (Left to Right) -FR-Designer_Vertical-RightToLeft=Vertical Text (Right To Left) +FR-Designer_Vertical-LeftToRight=Vertical Text (left to right) +FR-Designer_Vertical-RightToLeft=Vertical Text (right to left) FR-Designer_VerticalBoxLayout=Vertical Box Layout 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. From 4d0ed853926ce47b094ac413a0d4d0c1e152c340 Mon Sep 17 00:00:00 2001 From: yaohwu Date: Wed, 8 Feb 2017 16:07:19 +0800 Subject: [PATCH 065/343] REPORT-934 --- .../style/color/ColorSelectConfigManager.java | 228 ++++++++++++++---- .../ColorSelectConfigManagerProvider.java | 16 ++ 2 files changed, 198 insertions(+), 46 deletions(-) create mode 100644 designer_base/src/com/fr/design/style/color/ColorSelectConfigManagerProvider.java diff --git a/designer_base/src/com/fr/design/style/color/ColorSelectConfigManager.java b/designer_base/src/com/fr/design/style/color/ColorSelectConfigManager.java index 4d20c1207..941ce35fd 100644 --- a/designer_base/src/com/fr/design/style/color/ColorSelectConfigManager.java +++ b/designer_base/src/com/fr/design/style/color/ColorSelectConfigManager.java @@ -1,56 +1,192 @@ 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.util.ArrayList; import java.util.List; +import java.io.InputStream; /** * 最近使用颜色 - * @author focus * + * @author focus */ -public class ColorSelectConfigManager{ - - // 最近使用的颜色个数 - private int colorNums = 20; - // 最近使用颜色 - private List colors; - - private static ColorSelectConfigManager colorSelectConfigManager = null; - - public Color[] getColors() { - if(colors == null){ - colors = new ArrayList(); - } - return colors.toArray(new Color[colors.size()]); - } - - public int getColorNum() { - return colorNums; - } - 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); - } -} \ No newline at end of file +public class ColorSelectConfigManager extends XMLFileManager implements ColorSelectConfigManagerProvider { + + // 最近使用的颜色个数 + private int colorNums = 20; + + private static ColorSelectConfigManagerProvider configManager = null; + private static ColorSelectConfigManager colorSelectConfigManager = null; + private boolean init = true; + // 最近使用颜色 + private List colors = new ArrayList(); + private static final String RECENT_COLOR_TAG = "RecentColors"; + private static final String COLOR_TAG = "Color"; + + static { + GeneralContext.addEnvChangedListener(new EnvChangedListener() { + public void envChanged() { + ColorSelectConfigManager.envChanged(); + } + }); + } + + private static void envChanged() { + configManager = null; + } + + public Color[] getColors() { + + //初次打开软件时从xml文件中获取历史颜色信息 + if (init) { + ColorSelectConfigManagerProvider manager = colorSelectConfigManager.getProviderInstance(); + this.colors = manager.getColorsFromFile(); + init = false; + } + if (colors == null) { + colors = new ArrayList(); + } + return colors.toArray(new Color[colors.size()]); + } + + public int getColorNum() { + return colorNums; + } + + 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 getColorsFromFile() { + return this.colors; + } + + public void setColorsToFile(List colors) { + this.colors = colors; + } +} diff --git a/designer_base/src/com/fr/design/style/color/ColorSelectConfigManagerProvider.java b/designer_base/src/com/fr/design/style/color/ColorSelectConfigManagerProvider.java new file mode 100644 index 000000000..ea9783bb7 --- /dev/null +++ b/designer_base/src/com/fr/design/style/color/ColorSelectConfigManagerProvider.java @@ -0,0 +1,16 @@ +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 { + + public List getColorsFromFile(); + public void setColorsToFile(List colors); +} From 9cfcb195cc95f764cc611924d2b46f18ddacc147 Mon Sep 17 00:00:00 2001 From: plough Date: Thu, 9 Feb 2017 11:36:40 +0800 Subject: [PATCH 066/343] =?UTF-8?q?REPORT-1178=20=E8=8B=B1=E6=96=87?= =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E2=80=94=E2=80=9416/23?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/actions/help/AboutPane.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/designer_base/src/com/fr/design/actions/help/AboutPane.java b/designer_base/src/com/fr/design/actions/help/AboutPane.java index 7f00b5d7c..c16f2047b 100644 --- a/designer_base/src/com/fr/design/actions/help/AboutPane.java +++ b/designer_base/src/com/fr/design/actions/help/AboutPane.java @@ -69,7 +69,7 @@ public class AboutPane extends JPanel { })); // 英文去掉服务电话和 QQ - if (FRContext.getLocale() == Locale.ENGLISH || FRContext.getLocale() == Locale.US || FRContext.getLocale() == Locale.UK){ + if (FRContext.getLocale().equals(Locale.US)){ // do nothing } else { if(ComparatorUtils.equals(ProductConstants.APP_NAME,FINEREPORT)){ @@ -80,7 +80,15 @@ public class AboutPane extends JPanel { contentPane.add(boxCenterAlignmentPane); } - BoxCenterAligmentPane actionLabel = getURLActionLabel(SiteCenter.getInstance().acquireUrlByKind("website", ProductConstants.WEBSITE_URL)); + String locale; // SiteCenter 取值的 key 后缀 + if (FRContext.getLocale().equals(Locale.US)) { + locale = ".en"; + } else if (FRContext.getLocale().equals(Locale.JAPAN)) { + locale = ".jp"; + } else { + locale = ""; + } + BoxCenterAligmentPane actionLabel = getURLActionLabel(SiteCenter.getInstance().acquireUrlByKind("website" + locale, ProductConstants.WEBSITE_URL)); BoxCenterAligmentPane emailLabel = getEmailActionLabel(SiteCenter.getInstance().acquireUrlByKind("register.email", ProductConstants.SUPPORT_EMAIL)); contentPane.add(actionLabel); @@ -111,7 +119,7 @@ public class AboutPane extends JPanel { private String getCopyRight(){ 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() { From 2e62dc556c80bb6fcf2ec088abf14be3a7ede8b0 Mon Sep 17 00:00:00 2001 From: plough Date: Thu, 9 Feb 2017 14:32:41 +0800 Subject: [PATCH 067/343] =?UTF-8?q?REPORT-1178=20=E8=8B=B1=E6=96=87?= =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E2=80=94=E2=80=9417/23=EF=BC=8C?= =?UTF-8?q?=E6=96=B0=E5=A2=9Ekey?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/locale/designer.properties | 3 ++- .../src/com/fr/design/locale/designer_en_US.properties | 1 + .../src/com/fr/design/locale/designer_ja_JP.properties | 1 + .../src/com/fr/design/locale/designer_ko_KR.properties | 3 ++- .../src/com/fr/design/locale/designer_zh_CN.properties | 1 + .../src/com/fr/design/locale/designer_zh_TW.properties | 1 + .../src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java | 2 +- 7 files changed, 9 insertions(+), 3 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 3f809fb4a..b9c58818b 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -538,4 +538,5 @@ 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 \ No newline at end of file +FR-Designer_ClassName=Class Name +FR-Designer_Polyblock_Edit=Polyblock Edit \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index 30db869a2..aa19aa02f 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -539,3 +539,4 @@ 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 diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index ba6114955..162e582a2 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -518,3 +518,4 @@ 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 diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index 9d540cd01..7a4649c42 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -512,4 +512,5 @@ 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 \ No newline at end of file +FR-Designer_ClassName=\uD074\uB798\uC2A4\uB124\uC784 +FR-Designer_Polyblock_Edit=\uCDE8\uD569\uBE14\uB7ED\uD3B8\uC9D1 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 54f0ac177..f446d90e7 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -543,4 +543,5 @@ 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 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 271150729..35a9c5574 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -531,3 +531,4 @@ 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 diff --git a/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java b/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java index 411337066..8c6006870 100644 --- a/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java +++ b/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java @@ -400,7 +400,7 @@ public abstract class ToolBarMenuDock { return toolBar; } else { - return polyToolBar(Inter.getLocText(new String[]{"Polybolck", "Edit"})); + return polyToolBar(Inter.getLocText("FR-Designer_Polyblock_Edit")); } } From a0e072b585a6064f9678005fa1a0a893ed6c4e45 Mon Sep 17 00:00:00 2001 From: plough Date: Thu, 9 Feb 2017 14:56:45 +0800 Subject: [PATCH 068/343] =?UTF-8?q?REPORT-1178=20=E8=8B=B1=E6=96=87?= =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E2=80=94=E2=80=9419/23?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/present/dict/TableDataDictPane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/present/dict/TableDataDictPane.java b/designer_base/src/com/fr/design/present/dict/TableDataDictPane.java index 149118894..414abedac 100644 --- a/designer_base/src/com/fr/design/present/dict/TableDataDictPane.java +++ b/designer_base/src/com/fr/design/present/dict/TableDataDictPane.java @@ -95,7 +95,7 @@ public class TableDataDictPane extends FurtherBasicBeanPane Component[][] components = new Component[][]{ - new Component[]{new UILabel(" " + Inter.getLocText("DS-TableData") + ":", UILabel.RIGHT), firstLine}, + new Component[]{new UILabel(" " + Inter.getLocText("FR-Engine_DS-TableData") + ":", UILabel.RIGHT), firstLine}, new Component[]{new UILabel(Inter.getLocText("Actual_Value") + ":", UILabel.RIGHT), keyColumnPane}, new Component[]{new UILabel(Inter.getLocText("Display_Value") + ":", UILabel.RIGHT), valueDictPane} }; From 2f82bc4768acf7f50c0c321b5b85b0f3dba06469 Mon Sep 17 00:00:00 2001 From: plough Date: Thu, 9 Feb 2017 16:20:40 +0800 Subject: [PATCH 069/343] =?UTF-8?q?REPORT-1178=20=E8=8B=B1=E6=96=87?= =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E2=80=94=E2=80=9420/23?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cell/settingpane/CellOtherSetPane.java | 12 +++++-- .../fr/design/gui/ibutton/UIButtonGroup.java | 33 +++++++++++++------ 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/designer/src/com/fr/design/mainframe/cell/settingpane/CellOtherSetPane.java b/designer/src/com/fr/design/mainframe/cell/settingpane/CellOtherSetPane.java index ffeaae0d9..cee3ac401 100644 --- a/designer/src/com/fr/design/mainframe/cell/settingpane/CellOtherSetPane.java +++ b/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.event.ItemEvent; import java.awt.event.ItemListener; +import java.util.Locale; +import com.fr.base.FRContext; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.gui.ilable.UILabel; @@ -123,8 +125,14 @@ public class CellOtherSetPane extends AbstractCellAttrPane { String[] AjustRowTypes = new String[]{ Inter.getLocText("No"), Inter.getLocText("Utils-Row_Height"), Inter.getLocText("Utils-Column_Width"), Inter.getLocText("Default")}; autoshrik = new UIButtonGroup(AjustRowTypes); - autoshrik.setTwoLine(); - autoshrik.setLayout(new GridLayout(2, 2, 1, 1)); + if (FRContext.getLocale().equals(Locale.US)) { + // 英文显示不全,故每行一个按钮 + 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")); printAndExportContent = new UICheckBox(Inter.getLocText("CellWrite-Print_Content")); diff --git a/designer_base/src/com/fr/design/gui/ibutton/UIButtonGroup.java b/designer_base/src/com/fr/design/gui/ibutton/UIButtonGroup.java index 8a266a2a1..636f72858 100644 --- a/designer_base/src/com/fr/design/gui/ibutton/UIButtonGroup.java +++ b/designer_base/src/com/fr/design/gui/ibutton/UIButtonGroup.java @@ -28,6 +28,7 @@ import com.fr.design.utils.gui.GUICoreUtils; public class UIButtonGroup extends JPanel implements GlobalNameObserver { private boolean isTwoLine = false; + private boolean isFourLine = false; private static final long serialVersionUID = 1L; protected List labelButtonList; protected int selectedIndex = -1; @@ -176,6 +177,10 @@ public class UIButtonGroup extends JPanel implements GlobalNameObserver { this.isTwoLine = true; } + public void setFourLine() { + this.isFourLine = true; + } + /** * paintComponent * @@ -201,32 +206,40 @@ public class UIButtonGroup extends JPanel implements GlobalNameObserver { } Graphics2D g2d = (Graphics2D) g; g2d.setColor(UIConstants.LINE_COLOR); - if (!isTwoLine) { + if (isTwoLine) { 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; - int height = labelButtonList.get(i).getHeight(); + int height = labelButtonList.get(i).getHeight() * 2 + 1; 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.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); } else { int width = 0; - int upCount = (labelButtonList.size() - 1) / 2 + 1; - for (int i = 0; i < upCount - 1; i++) { + for (int i = 0; i < labelButtonList.size() - 1; i++) { 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); } - width += labelButtonList.get(upCount).getWidth() + 1; + width += labelButtonList.get(labelButtonList.size() - 1).getWidth() + 1; + g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 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); } From 05292f2e1a6fb65d01cf48a7c7ae646ce60519e1 Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 10 Feb 2017 09:46:13 +0800 Subject: [PATCH 070/343] =?UTF-8?q?REPORT-1178=20=E8=8B=B1=E6=96=87?= =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E2=80=94=E2=80=9421/23=EF=BC=8C?= =?UTF-8?q?=E6=96=B0=E5=A2=9Ekey?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/formula/FunctionManagerPane.java | 5 +---- designer_base/src/com/fr/design/locale/designer.properties | 3 ++- .../src/com/fr/design/locale/designer_en_US.properties | 1 + .../src/com/fr/design/locale/designer_ja_JP.properties | 1 + .../src/com/fr/design/locale/designer_ko_KR.properties | 3 ++- .../src/com/fr/design/locale/designer_zh_CN.properties | 1 + .../src/com/fr/design/locale/designer_zh_TW.properties | 1 + 7 files changed, 9 insertions(+), 6 deletions(-) diff --git a/designer_base/src/com/fr/design/formula/FunctionManagerPane.java b/designer_base/src/com/fr/design/formula/FunctionManagerPane.java index 3fffe594e..eb75dabe1 100644 --- a/designer_base/src/com/fr/design/formula/FunctionManagerPane.java +++ b/designer_base/src/com/fr/design/formula/FunctionManagerPane.java @@ -159,10 +159,7 @@ public class FunctionManagerPane extends BasicPane { descriptionArea.setWrapStyleWord(true); descriptionArea.setLineWrap(true); 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"}, - new String[]{" \"com.fr.script.AbstractFunction\".", "\n", " \"" + File.separator + "WEB-INF" + File.separator + "classes\"", - ",", ".\n", ":" + FRContext.getCurrentEnv().getPath() + File.separator + "classes"})); + descriptionArea.setText(Inter.getLocText("FR-Designer_Function_Description_Area_Text", File.separator, File.separator, FRContext.getCurrentEnv().getPath() + File.separator)); JPanel descriptionPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); //Description Pane this.add(descriptionPane, BorderLayout.SOUTH); descriptionPane.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4)); diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index b9c58818b..562025b90 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -539,4 +539,5 @@ 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 \ No newline at end of file +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} \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index aa19aa02f..b8e06c809 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -540,3 +540,4 @@ 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 diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index 162e582a2..a65d15c12 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -519,3 +519,4 @@ 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 diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index 7a4649c42..4df4b5a3f 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -513,4 +513,5 @@ 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_Polyblock_Edit=\uCDE8\uD569\uBE14\uB7ED\uD3B8\uC9D1 \ No newline at end of file +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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index f446d90e7..404bf0b10 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -544,4 +544,5 @@ 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 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 35a9c5574..88b14bd3a 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -532,3 +532,4 @@ 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 From d74bbdd501e182f1a22a81c9b3eff1c04f4363bb Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 10 Feb 2017 10:44:33 +0800 Subject: [PATCH 071/343] =?UTF-8?q?REPORT-1178=20=E8=8B=B1=E6=96=87?= =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E2=80=94=E2=80=9422/23=EF=BC=8C?= =?UTF-8?q?=E6=96=B0=E5=A2=9Ekey?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/locale/designer.properties | 4 +++- .../src/com/fr/design/locale/designer_en_US.properties | 2 ++ .../src/com/fr/design/locale/designer_ja_JP.properties | 2 ++ .../src/com/fr/design/locale/designer_ko_KR.properties | 4 +++- .../src/com/fr/design/locale/designer_zh_CN.properties | 2 ++ .../src/com/fr/design/locale/designer_zh_TW.properties | 2 ++ .../style/background/gradient/GradientBackgroundPane.java | 4 ++-- 7 files changed, 16 insertions(+), 4 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 562025b90..8815e4b03 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -540,4 +540,6 @@ 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} \ No newline at end of file +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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index b8e06c809..0e7a873f0 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -541,3 +541,5 @@ 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 diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index a65d15c12..7c332c617 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -520,3 +520,5 @@ 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 diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index 4df4b5a3f..9736b112f 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -514,4 +514,6 @@ FR-Designer_Custom_Job_Description=\uC124\uBA85 FR-Designer_Property=\uC18D\uC131 FR-Designer_ClassName=\uD074\uB798\uC2A4\uB124\uC784 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 \ No newline at end of file +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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 404bf0b10..56cd24ad8 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -545,4 +545,6 @@ 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 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 88b14bd3a..7f863d345 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -533,3 +533,5 @@ 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 diff --git a/designer_base/src/com/fr/design/style/background/gradient/GradientBackgroundPane.java b/designer_base/src/com/fr/design/style/background/gradient/GradientBackgroundPane.java index 9ab11eb14..e08c1a7a4 100644 --- a/designer_base/src/com/fr/design/style/background/gradient/GradientBackgroundPane.java +++ b/designer_base/src/com/fr/design/style/background/gradient/GradientBackgroundPane.java @@ -55,12 +55,12 @@ public class GradientBackgroundPane extends BackgroundDetailPane { centerPane.add(innercenterPane); innercenterPane.add(new UILabel(Inter.getLocText("Gradient-Direction") + ":")); - left2right = new UIRadioButton(Inter.getLocText("PageSetup-Landscape")); + left2right = new UIRadioButton(Inter.getLocText("FR-Designer_PageSetup_Horizontal")); innercenterPane.add(left2right); left2right.setSelected(true); left2right.addActionListener(reviewListener); - top2bottom = new UIRadioButton(Inter.getLocText("PageSetup-Portrait")); + top2bottom = new UIRadioButton(Inter.getLocText("FR-Designer_PageSetup_Vertical")); innercenterPane.add(top2bottom); top2bottom.addActionListener(reviewListener); From d3cda65cde9d35e5cc78b618fbe10d3369e50d4f Mon Sep 17 00:00:00 2001 From: yaohwu Date: Fri, 10 Feb 2017 10:47:32 +0800 Subject: [PATCH 072/343] REPORT-1227 --- designer_base/src/com/fr/design/roleAuthority/RoleTree.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/roleAuthority/RoleTree.java b/designer_base/src/com/fr/design/roleAuthority/RoleTree.java index 3ee627987..344e69b22 100644 --- a/designer_base/src/com/fr/design/roleAuthority/RoleTree.java +++ b/designer_base/src/com/fr/design/roleAuthority/RoleTree.java @@ -1 +1 @@ -package com.fr.design.roleAuthority; import com.fr.general.NameObject; import com.fr.design.constants.UIConstants; import com.fr.design.beans.BasicBeanPane; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.gui.itree.refreshabletree.ExpandMutableTreeNode; import com.fr.design.gui.itree.refreshabletree.UserObjectRefreshJTree; import com.fr.design.mainframe.AuthorityPropertyPane; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.EastRegionContainerPane; import com.fr.general.ComparatorUtils; import com.fr.general.Inter; import javax.swing.*; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.*; import java.awt.*; import java.util.Enumeration; /** * Author : daisy * Date: 13-8-30 * Time: 下午3:32 */ public class RoleTree extends UserObjectRefreshJTree { private static final long serialVersionUID = 2L; private String roleName = null; public RoleTree() { super(); this.setCellRenderer(roleTreeRenderer); this.setEnabled(true); this.setEditable(true); this.setRowHeight(20); this.setDigIn(true); this.removeMouseListener(treeMouseListener); this.addTreeSelectionListener(new TreeSelectionListener() { public void valueChanged(TreeSelectionEvent e) { doWithValueChanged(e); } }); } public boolean isCheckBoxVisible(TreePath path) { return true; } /** * 更新UI */ public void updateUI() { super.updateUI(); setUI(new UIRoleTreeUI()); } protected void doWithValueChanged(TreeSelectionEvent e) { if (e.getNewLeadSelectionPath() != null) { if (e.getNewLeadSelectionPath().getLastPathComponent().toString() != Inter.getLocText("Role")) { roleName = e.getNewLeadSelectionPath().getLastPathComponent().toString(); setTabRoleName(roleName); refreshRoleTree(roleName); refreshElementAndAuthorityPane(); HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().judgeSheetAuthority(roleName); } } } protected void setTabRoleName(String roleName) { } /** * 刷新角色树 * * @param selectedRole 角色 */ public void refreshRoleTree(String selectedRole) { if (EastRegionContainerPane.getInstance().getUpPane() instanceof AuthorityPropertyPane) { AuthorityPropertyPane authorityPropertyPane = (AuthorityPropertyPane) EastRegionContainerPane.getInstance().getUpPane(); authorityPropertyPane.populate(); EastRegionContainerPane.getInstance().replaceUpPane(authorityPropertyPane); } } public void setSelectedRole(String selectedRole, TreePath parent) { ExpandMutableTreeNode node = (ExpandMutableTreeNode) parent.getLastPathComponent(); if (node.children() != null && node.getChildCount() >= 0) { for (Enumeration e = node.children(); e.hasMoreElements(); ) { ExpandMutableTreeNode n = (ExpandMutableTreeNode) e.nextElement(); Object userObj = n.getUserObject(); String chilld = null; if (userObj instanceof String) { chilld = (String) userObj; } else if (userObj instanceof NameObject) { NameObject nameObject = (NameObject) userObj; chilld = nameObject.getName(); } if (ComparatorUtils.equals(chilld, selectedRole)) { this.setSelectionPath(parent.pathByAddingChild(n)); return; } else { setSelectedRole(selectedRole, parent.pathByAddingChild(n)); } } } } private void refreshElementAndAuthorityPane() { JComponent authorityToolBar = DesignerContext.getDesignerFrame().getToolbarComponent(); if (authorityToolBar instanceof BasicBeanPane) { //说明是工具栏的 ((BasicBeanPane) authorityToolBar).populateAuthority(); } HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().repaint(); } public String getSelectedRoleName() { return roleName; } public void setSelectedRoleName(String name) { roleName = name; } private DefaultTreeCellRenderer roleTreeRenderer = new DefaultTreeCellRenderer() { private static final long serialVersionUID = 2L; public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); ExpandMutableTreeNode treeNode = (ExpandMutableTreeNode) value; Object userObj = treeNode.getUserObject(); if (userObj instanceof String) { // p:这个是column field. this.setIcon(null); this.setText((String) userObj); } else if (userObj instanceof NameObject) { NameObject nameObject = (NameObject) userObj; this.setText(nameObject.getName()); this.setIcon(null); } // 这里新建一个Label作为render是因为JTree在动态刷新的时候,节点上render画布的的宽度不会变,会使得一部分比较长的数据显示为"..." this.setBackgroundNonSelectionColor(UIConstants.NORMAL_BACKGROUND); this.setForeground(UIConstants.FONT_COLOR); this.setBackgroundSelectionColor(UIConstants.FLESH_BLUE); return this; } }; /* * p:获得选中的NameObject = name + role. */ public NameObject getSelectedNameObject() { TreePath selectedTreePath = this.getSelectionPath(); if (selectedTreePath == null) { return null; } ExpandMutableTreeNode selectedTreeNode = (ExpandMutableTreeNode) selectedTreePath.getLastPathComponent(); Object selectedUserObject = selectedTreeNode.getUserObject(); return new NameObject(selectedUserObject.toString(), ""); } /** * p:添加一个NameObject节点 * @param no 需要添加的节点 */ public void addNameObject(NameObject no) { if (no == null) { return; } DefaultTreeModel treeModel = (DefaultTreeModel) this.getModel(); // 新建一个放着NameObject的newChildTreeNode,加到Root下面 ExpandMutableTreeNode root = (ExpandMutableTreeNode) treeModel.getRoot(); ExpandMutableTreeNode newChildTreeNode = new ExpandMutableTreeNode(no); root.add(newChildTreeNode); newChildTreeNode.add(new ExpandMutableTreeNode()); treeModel.reload(root); } /** * 刷新树节点 */ public void refreshTreeNode() { DefaultTreeModel treeModel = (DefaultTreeModel) this.getModel(); ExpandMutableTreeNode root = (ExpandMutableTreeNode) treeModel.getRoot(); if (interceptRefresh(root)) { return; } ExpandMutableTreeNode[] new_nodes = loadChildTreeNodes(root); java.util.List childTreeNodeList = new java.util.ArrayList(); for (int i = 0, len = root.getChildCount(); i < len; i++) { if (root.getChildAt(i) instanceof ExpandMutableTreeNode) { childTreeNodeList.add((ExpandMutableTreeNode) root.getChildAt(i)); } else { childTreeNodeList.add((DefaultMutableTreeNode) root.getChildAt(i)); } } root.removeAllChildren(); for (int ci = 0; ci < new_nodes.length; ci++) { Object cUserObject = new_nodes[ci].getUserObject(); for (int ni = 0, nlen = childTreeNodeList.size(); ni < nlen; ni++) { ExpandMutableTreeNode cTreeNode = (ExpandMutableTreeNode) childTreeNodeList.get(ni); if (ComparatorUtils.equals(cTreeNode.getUserObject(), cUserObject)) { new_nodes[ci].setExpanded(cTreeNode.isExpanded()); if (cTreeNode.getFirstChild() instanceof ExpandMutableTreeNode && cTreeNode.isExpanded()) { checkChildNodes(cTreeNode, new_nodes[ci]); } break; } } root.add(new_nodes[ci]); } } protected void checkChildNodes(ExpandMutableTreeNode oldNode, ExpandMutableTreeNode newNode) { for (int i = 0; i < oldNode.getChildCount(); i++) { ExpandMutableTreeNode oldChild = (ExpandMutableTreeNode) oldNode.getChildAt(i); for (int j = 0; j < newNode.getChildCount(); j++) { ExpandMutableTreeNode newChild = (ExpandMutableTreeNode) newNode.getChildAt(j); ExpandMutableTreeNode[] nodes = RoleTree.this.loadChildTreeNodes(newChild); for (int k = 0; k < nodes.length; k++) { newChild.add(nodes[k]); } if (newChild.getChildCount() > 1 && ((ExpandMutableTreeNode) newChild.getFirstChild()).getUserObject() == PENDING) { newChild.remove(0); } if (ComparatorUtils.equals(oldChild.getUserObject(), newChild.getUserObject())) { newChild.setExpanded(oldChild.isExpanded()); } } } } public NameObject getRealSelectedNameObject() { TreePath selectedTreePath = this.getSelectionPath(); if (selectedTreePath == null) { return null; } ExpandMutableTreeNode selectedTreeNode = (ExpandMutableTreeNode) selectedTreePath.getLastPathComponent(); Object selectedUserObject = selectedTreeNode.getUserObject(); if (selectedUserObject instanceof NameObject) { return (NameObject) selectedUserObject; } selectedTreeNode = (ExpandMutableTreeNode) selectedTreeNode.getParent(); selectedUserObject = selectedTreeNode.getUserObject(); if (selectedUserObject instanceof NameObject) { return (NameObject) selectedUserObject; } return null; } } \ No newline at end of file +package com.fr.design.roleAuthority; import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.itree.checkboxtree.CheckBoxTree; import com.fr.design.gui.itree.checkboxtree.CheckBoxTreeSelectionModel; import com.fr.general.NameObject; import com.fr.design.constants.UIConstants; import com.fr.design.beans.BasicBeanPane; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.gui.itree.refreshabletree.ExpandMutableTreeNode; import com.fr.design.gui.itree.refreshabletree.UserObjectRefreshJTree; import com.fr.design.mainframe.AuthorityPropertyPane; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.EastRegionContainerPane; import com.fr.general.ComparatorUtils; import com.fr.general.Inter; import javax.swing.*; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.*; import java.awt.*; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.Enumeration; /** * Author : daisy * Time: 下午3:32 * Date: 13-8-30 */ public class RoleTree extends UserObjectRefreshJTree { private static final long serialVersionUID = 2L; private String roleName = null; public RoleTree() { super(); this.setCellRenderer(roleTreeRenderer); this.setEnabled(true); this.setEditable(true); this.setRowHeight(20); this.setDigIn(true); Handler handler = createHandlerForRoleTree(); this.replaceMouseListener(this, handler, 0); this.replaceKeyListener(this, handler, 0); this.addTreeSelectionListener(handler); // this.removeMouseListener(treeMouseListener); // this.addTreeSelectionListener(new TreeSelectionListener() { // public void valueChanged(TreeSelectionEvent e) { // doWithValueChanged(e); // } // }); } public boolean isCheckBoxVisible(TreePath path) { return true; } /** * Creates the mouse listener and key listener used by RoleTree. * * @return the Handler. * @author yaohwu */ protected Handler createHandlerForRoleTree() { return new Handler(this); } protected static class Handler implements MouseListener, KeyListener, TreeSelectionListener { protected RoleTree _tree; int _hotspot = new UICheckBox().getPreferredSize().width; private int _toggleCount = -1; public Handler(RoleTree tree) { _tree = tree; } protected TreePath getTreePathForMouseEvent(MouseEvent e) { if (!SwingUtilities.isLeftMouseButton(e)) { return null; } if (!_tree.isCheckBoxEnabled()) { return null; } TreePath path = _tree.getPathForLocation(e.getX(), e.getY()); if (path == null) return null; if (true || clicksInCheckBox(e, path)) { return path; } else { return null; } } protected boolean clicksInCheckBox(MouseEvent e, TreePath path) { if (!_tree.isCheckBoxVisible(path)) { return false; } else { Rectangle bounds = _tree.getPathBounds(path); if (_tree.getComponentOrientation().isLeftToRight()) { return e.getX() < bounds.x + _hotspot; } else { return e.getX() > bounds.x + bounds.width - _hotspot; } } } private TreePath preventToggleEvent(MouseEvent e) { TreePath pathForMouseEvent = getTreePathForMouseEvent(e); if (pathForMouseEvent != null) { int toggleCount = _tree.getToggleClickCount(); if (toggleCount != -1) { _toggleCount = toggleCount; _tree.setToggleClickCount(-1); } } return pathForMouseEvent; } public void mouseClicked(MouseEvent e) { preventToggleEvent(e); } public void mousePressed(MouseEvent e) { TreePath path = preventToggleEvent(e); if (path != null) { toggleSelection(path); e.consume(); } } public void mouseReleased(MouseEvent e) { TreePath path = preventToggleEvent(e); if (path != null) { e.consume(); } if (_toggleCount != -1) { _tree.setToggleClickCount(_toggleCount); } } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void keyPressed(KeyEvent e) { if (e.isConsumed()) { return; } if (!_tree.isCheckBoxEnabled()) { return; } if (e.getModifiers() == 0 && e.getKeyChar() == KeyEvent.VK_SPACE) toggleSelections(); } public void keyTyped(KeyEvent e) { } public void keyReleased(KeyEvent e) { } public void valueChanged(TreeSelectionEvent e) { _tree.treeDidChange(); _tree.doWithValueChanged(e); } private void toggleSelection(TreePath path) { if (!_tree.isEnabled() || !_tree.isCheckBoxEnabled(path)) { return; } CheckBoxTreeSelectionModel selectionModel = _tree.getCheckBoxTreeSelectionModel(); boolean selected = selectionModel.isPathSelected(path, selectionModel.isDigIn()); selectionModel.removeTreeSelectionListener(this); try { if (!selectionModel.isSingleEventMode()) { selectionModel.setBatchMode(true); } if (selected) selectionModel.removeSelectionPath(path); else selectionModel.addSelectionPath(path); } finally { if (!selectionModel.isSingleEventMode()) { selectionModel.setBatchMode(false); } selectionModel.addTreeSelectionListener(this); _tree.treeDidChange(); _tree.doWithValueChanged(path); } } protected void toggleSelections() { TreePath[] treePaths = _tree.getSelectionPaths(); if (treePaths == null) { return; } for (int i = 0, length = treePaths.length; i < length; i++) { TreePath tmpTreePath = treePaths[i]; toggleSelection(tmpTreePath); } // for (TreePath treePath : treePaths) { // toggleSelection(treePath); // } } } /** * 更新UI */ public void updateUI() { super.updateUI(); setUI(new UIRoleTreeUI()); } protected void doWithValueChanged(TreeSelectionEvent e) { if (e.getNewLeadSelectionPath() != null) { if (!e.getNewLeadSelectionPath().getLastPathComponent().toString().equals(Inter.getLocText("Role"))) { roleName = e.getNewLeadSelectionPath().getLastPathComponent().toString(); setTabRoleName(roleName); refreshRoleTree(roleName); refreshElementAndAuthorityPane(); HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().judgeSheetAuthority(roleName); } } } protected void doWithValueChanged(TreePath treepath) { if (treepath != null && !treepath.getLastPathComponent().toString().equals(Inter.getLocText("Role"))) { roleName = treepath.getLastPathComponent().toString(); setTabRoleName(roleName); refreshRoleTree(roleName); refreshElementAndAuthorityPane(); HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().judgeSheetAuthority(roleName); } } protected void setTabRoleName(String roleName) { } /** * 刷新角色树 * * @param selectedRole 角色 */ public void refreshRoleTree(String selectedRole) { if (EastRegionContainerPane.getInstance().getUpPane() instanceof AuthorityPropertyPane) { AuthorityPropertyPane authorityPropertyPane = (AuthorityPropertyPane) EastRegionContainerPane.getInstance().getUpPane(); authorityPropertyPane.populate(); EastRegionContainerPane.getInstance().replaceUpPane(authorityPropertyPane); } } public void setSelectedRole(String selectedRole, TreePath parent) { ExpandMutableTreeNode node = (ExpandMutableTreeNode) parent.getLastPathComponent(); if (node.children() != null && node.getChildCount() >= 0) { for (Enumeration e = node.children(); e.hasMoreElements(); ) { ExpandMutableTreeNode n = (ExpandMutableTreeNode) e.nextElement(); Object userObj = n.getUserObject(); String chilld = null; if (userObj instanceof String) { chilld = (String) userObj; } else if (userObj instanceof NameObject) { NameObject nameObject = (NameObject) userObj; chilld = nameObject.getName(); } if (ComparatorUtils.equals(chilld, selectedRole)) { this.setSelectionPath(parent.pathByAddingChild(n)); return; } else { setSelectedRole(selectedRole, parent.pathByAddingChild(n)); } } } } private void refreshElementAndAuthorityPane() { JComponent authorityToolBar = DesignerContext.getDesignerFrame().getToolbarComponent(); if (authorityToolBar instanceof BasicBeanPane) { //说明是工具栏的 ((BasicBeanPane) authorityToolBar).populateAuthority(); } HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().repaint(); } public String getSelectedRoleName() { return roleName; } public void setSelectedRoleName(String name) { roleName = name; } private DefaultTreeCellRenderer roleTreeRenderer = new DefaultTreeCellRenderer() { private static final long serialVersionUID = 2L; public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); ExpandMutableTreeNode treeNode = (ExpandMutableTreeNode) value; Object userObj = treeNode.getUserObject(); if (userObj instanceof String) { // p:这个是column field. this.setIcon(null); this.setText((String) userObj); } else if (userObj instanceof NameObject) { NameObject nameObject = (NameObject) userObj; this.setText(nameObject.getName()); this.setIcon(null); } // 这里新建一个Label作为render是因为JTree在动态刷新的时候,节点上render画布的的宽度不会变,会使得一部分比较长的数据显示为"..." this.setBackgroundNonSelectionColor(UIConstants.NORMAL_BACKGROUND); this.setForeground(UIConstants.FONT_COLOR); this.setBackgroundSelectionColor(UIConstants.FLESH_BLUE); return this; } }; /** * 去除不需要的鼠标监听器 * * @param component * @param l * @param index * @author yaohwu */ private void replaceMouseListener(Component component, MouseListener l, int index) { component.removeMouseListener(treeMouseListener); MouseListener[] listeners = component.getMouseListeners(); for (int i = 0, length = listeners.length; i < length; i++) { component.removeMouseListener(listeners[i]); } // for (MouseListener listener : listeners) { // component.removeMouseListener(listener); // } for (int i = 0; i < listeners.length; i++) { MouseListener listener = listeners[i]; if (index == i) { component.addMouseListener(l); } if (listener instanceof CheckBoxTree.Handler) { continue; } component.addMouseListener(listener); } // index is too large, add to the end. if (index > listeners.length - 1) { component.addMouseListener(l); } } /** * 去除一些不需要的键盘监听器 * * @param component * @param l * @param index * @author yaohwu */ private void replaceKeyListener(Component component, KeyListener l, int index) { KeyListener[] listeners = component.getKeyListeners(); for (int i = 0, length = listeners.length; i < length; i++) { component.removeKeyListener(listeners[i]); } // for (MouseListener listener : listeners) { // component.removeMouseListener(listener); // } for (int i = 0; i < listeners.length; i++) { KeyListener listener = listeners[i]; if (index == i) { component.addKeyListener(l); } if (listener instanceof CheckBoxTree.Handler) { continue; } component.addKeyListener(listener); } // index is too large, add to the end. if (index > listeners.length - 1) { component.addKeyListener(l); } } /* * p:获得选中的NameObject = name + role. */ public NameObject getSelectedNameObject() { TreePath selectedTreePath = this.getSelectionPath(); if (selectedTreePath == null) { return null; } ExpandMutableTreeNode selectedTreeNode = (ExpandMutableTreeNode) selectedTreePath.getLastPathComponent(); Object selectedUserObject = selectedTreeNode.getUserObject(); return new NameObject(selectedUserObject.toString(), ""); } /** * p:添加一个NameObject节点 * * @param no 需要添加的节点 */ public void addNameObject(NameObject no) { if (no == null) { return; } DefaultTreeModel treeModel = (DefaultTreeModel) this.getModel(); // 新建一个放着NameObject的newChildTreeNode,加到Root下面 ExpandMutableTreeNode root = (ExpandMutableTreeNode) treeModel.getRoot(); ExpandMutableTreeNode newChildTreeNode = new ExpandMutableTreeNode(no); root.add(newChildTreeNode); newChildTreeNode.add(new ExpandMutableTreeNode()); treeModel.reload(root); } /** * 刷新树节点 */ public void refreshTreeNode() { DefaultTreeModel treeModel = (DefaultTreeModel) this.getModel(); ExpandMutableTreeNode root = (ExpandMutableTreeNode) treeModel.getRoot(); if (interceptRefresh(root)) { return; } ExpandMutableTreeNode[] new_nodes = loadChildTreeNodes(root); java.util.List childTreeNodeList = new java.util.ArrayList(); for (int i = 0, len = root.getChildCount(); i < len; i++) { if (root.getChildAt(i) instanceof ExpandMutableTreeNode) { childTreeNodeList.add((ExpandMutableTreeNode) root.getChildAt(i)); } else { childTreeNodeList.add((DefaultMutableTreeNode) root.getChildAt(i)); } } root.removeAllChildren(); for (int ci = 0; ci < new_nodes.length; ci++) { Object cUserObject = new_nodes[ci].getUserObject(); for (int ni = 0, nlen = childTreeNodeList.size(); ni < nlen; ni++) { ExpandMutableTreeNode cTreeNode = (ExpandMutableTreeNode) childTreeNodeList.get(ni); if (ComparatorUtils.equals(cTreeNode.getUserObject(), cUserObject)) { new_nodes[ci].setExpanded(cTreeNode.isExpanded()); if (cTreeNode.getFirstChild() instanceof ExpandMutableTreeNode && cTreeNode.isExpanded()) { checkChildNodes(cTreeNode, new_nodes[ci]); } break; } } root.add(new_nodes[ci]); } } protected void checkChildNodes(ExpandMutableTreeNode oldNode, ExpandMutableTreeNode newNode) { for (int i = 0; i < oldNode.getChildCount(); i++) { ExpandMutableTreeNode oldChild = (ExpandMutableTreeNode) oldNode.getChildAt(i); for (int j = 0; j < newNode.getChildCount(); j++) { ExpandMutableTreeNode newChild = (ExpandMutableTreeNode) newNode.getChildAt(j); ExpandMutableTreeNode[] nodes = RoleTree.this.loadChildTreeNodes(newChild); for (int k = 0; k < nodes.length; k++) { newChild.add(nodes[k]); } if (newChild.getChildCount() > 1 && ((ExpandMutableTreeNode) newChild.getFirstChild()).getUserObject() == PENDING) { newChild.remove(0); } if (ComparatorUtils.equals(oldChild.getUserObject(), newChild.getUserObject())) { newChild.setExpanded(oldChild.isExpanded()); } } } } public NameObject getRealSelectedNameObject() { TreePath selectedTreePath = this.getSelectionPath(); if (selectedTreePath == null) { return null; } ExpandMutableTreeNode selectedTreeNode = (ExpandMutableTreeNode) selectedTreePath.getLastPathComponent(); Object selectedUserObject = selectedTreeNode.getUserObject(); if (selectedUserObject instanceof NameObject) { return (NameObject) selectedUserObject; } selectedTreeNode = (ExpandMutableTreeNode) selectedTreeNode.getParent(); selectedUserObject = selectedTreeNode.getUserObject(); if (selectedUserObject instanceof NameObject) { return (NameObject) selectedUserObject; } return null; } } \ No newline at end of file From 5eef84ba7445ecc5c8d7c14f1873e39141aba32a Mon Sep 17 00:00:00 2001 From: yaohwu Date: Fri, 10 Feb 2017 11:23:37 +0800 Subject: [PATCH 073/343] =?UTF-8?q?=E6=97=A0jira=E4=BB=BB=E5=8A=A1=20?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/roleAuthority/RoleTree.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/roleAuthority/RoleTree.java b/designer_base/src/com/fr/design/roleAuthority/RoleTree.java index 344e69b22..e51c703df 100644 --- a/designer_base/src/com/fr/design/roleAuthority/RoleTree.java +++ b/designer_base/src/com/fr/design/roleAuthority/RoleTree.java @@ -1 +1 @@ -package com.fr.design.roleAuthority; import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.itree.checkboxtree.CheckBoxTree; import com.fr.design.gui.itree.checkboxtree.CheckBoxTreeSelectionModel; import com.fr.general.NameObject; import com.fr.design.constants.UIConstants; import com.fr.design.beans.BasicBeanPane; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.gui.itree.refreshabletree.ExpandMutableTreeNode; import com.fr.design.gui.itree.refreshabletree.UserObjectRefreshJTree; import com.fr.design.mainframe.AuthorityPropertyPane; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.EastRegionContainerPane; import com.fr.general.ComparatorUtils; import com.fr.general.Inter; import javax.swing.*; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.*; import java.awt.*; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.Enumeration; /** * Author : daisy * Time: 下午3:32 * Date: 13-8-30 */ public class RoleTree extends UserObjectRefreshJTree { private static final long serialVersionUID = 2L; private String roleName = null; public RoleTree() { super(); this.setCellRenderer(roleTreeRenderer); this.setEnabled(true); this.setEditable(true); this.setRowHeight(20); this.setDigIn(true); Handler handler = createHandlerForRoleTree(); this.replaceMouseListener(this, handler, 0); this.replaceKeyListener(this, handler, 0); this.addTreeSelectionListener(handler); // this.removeMouseListener(treeMouseListener); // this.addTreeSelectionListener(new TreeSelectionListener() { // public void valueChanged(TreeSelectionEvent e) { // doWithValueChanged(e); // } // }); } public boolean isCheckBoxVisible(TreePath path) { return true; } /** * Creates the mouse listener and key listener used by RoleTree. * * @return the Handler. * @author yaohwu */ protected Handler createHandlerForRoleTree() { return new Handler(this); } protected static class Handler implements MouseListener, KeyListener, TreeSelectionListener { protected RoleTree _tree; int _hotspot = new UICheckBox().getPreferredSize().width; private int _toggleCount = -1; public Handler(RoleTree tree) { _tree = tree; } protected TreePath getTreePathForMouseEvent(MouseEvent e) { if (!SwingUtilities.isLeftMouseButton(e)) { return null; } if (!_tree.isCheckBoxEnabled()) { return null; } TreePath path = _tree.getPathForLocation(e.getX(), e.getY()); if (path == null) return null; if (true || clicksInCheckBox(e, path)) { return path; } else { return null; } } protected boolean clicksInCheckBox(MouseEvent e, TreePath path) { if (!_tree.isCheckBoxVisible(path)) { return false; } else { Rectangle bounds = _tree.getPathBounds(path); if (_tree.getComponentOrientation().isLeftToRight()) { return e.getX() < bounds.x + _hotspot; } else { return e.getX() > bounds.x + bounds.width - _hotspot; } } } private TreePath preventToggleEvent(MouseEvent e) { TreePath pathForMouseEvent = getTreePathForMouseEvent(e); if (pathForMouseEvent != null) { int toggleCount = _tree.getToggleClickCount(); if (toggleCount != -1) { _toggleCount = toggleCount; _tree.setToggleClickCount(-1); } } return pathForMouseEvent; } public void mouseClicked(MouseEvent e) { preventToggleEvent(e); } public void mousePressed(MouseEvent e) { TreePath path = preventToggleEvent(e); if (path != null) { toggleSelection(path); e.consume(); } } public void mouseReleased(MouseEvent e) { TreePath path = preventToggleEvent(e); if (path != null) { e.consume(); } if (_toggleCount != -1) { _tree.setToggleClickCount(_toggleCount); } } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void keyPressed(KeyEvent e) { if (e.isConsumed()) { return; } if (!_tree.isCheckBoxEnabled()) { return; } if (e.getModifiers() == 0 && e.getKeyChar() == KeyEvent.VK_SPACE) toggleSelections(); } public void keyTyped(KeyEvent e) { } public void keyReleased(KeyEvent e) { } public void valueChanged(TreeSelectionEvent e) { _tree.treeDidChange(); _tree.doWithValueChanged(e); } private void toggleSelection(TreePath path) { if (!_tree.isEnabled() || !_tree.isCheckBoxEnabled(path)) { return; } CheckBoxTreeSelectionModel selectionModel = _tree.getCheckBoxTreeSelectionModel(); boolean selected = selectionModel.isPathSelected(path, selectionModel.isDigIn()); selectionModel.removeTreeSelectionListener(this); try { if (!selectionModel.isSingleEventMode()) { selectionModel.setBatchMode(true); } if (selected) selectionModel.removeSelectionPath(path); else selectionModel.addSelectionPath(path); } finally { if (!selectionModel.isSingleEventMode()) { selectionModel.setBatchMode(false); } selectionModel.addTreeSelectionListener(this); _tree.treeDidChange(); _tree.doWithValueChanged(path); } } protected void toggleSelections() { TreePath[] treePaths = _tree.getSelectionPaths(); if (treePaths == null) { return; } for (int i = 0, length = treePaths.length; i < length; i++) { TreePath tmpTreePath = treePaths[i]; toggleSelection(tmpTreePath); } // for (TreePath treePath : treePaths) { // toggleSelection(treePath); // } } } /** * 更新UI */ public void updateUI() { super.updateUI(); setUI(new UIRoleTreeUI()); } protected void doWithValueChanged(TreeSelectionEvent e) { if (e.getNewLeadSelectionPath() != null) { if (!e.getNewLeadSelectionPath().getLastPathComponent().toString().equals(Inter.getLocText("Role"))) { roleName = e.getNewLeadSelectionPath().getLastPathComponent().toString(); setTabRoleName(roleName); refreshRoleTree(roleName); refreshElementAndAuthorityPane(); HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().judgeSheetAuthority(roleName); } } } protected void doWithValueChanged(TreePath treepath) { if (treepath != null && !treepath.getLastPathComponent().toString().equals(Inter.getLocText("Role"))) { roleName = treepath.getLastPathComponent().toString(); setTabRoleName(roleName); refreshRoleTree(roleName); refreshElementAndAuthorityPane(); HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().judgeSheetAuthority(roleName); } } protected void setTabRoleName(String roleName) { } /** * 刷新角色树 * * @param selectedRole 角色 */ public void refreshRoleTree(String selectedRole) { if (EastRegionContainerPane.getInstance().getUpPane() instanceof AuthorityPropertyPane) { AuthorityPropertyPane authorityPropertyPane = (AuthorityPropertyPane) EastRegionContainerPane.getInstance().getUpPane(); authorityPropertyPane.populate(); EastRegionContainerPane.getInstance().replaceUpPane(authorityPropertyPane); } } public void setSelectedRole(String selectedRole, TreePath parent) { ExpandMutableTreeNode node = (ExpandMutableTreeNode) parent.getLastPathComponent(); if (node.children() != null && node.getChildCount() >= 0) { for (Enumeration e = node.children(); e.hasMoreElements(); ) { ExpandMutableTreeNode n = (ExpandMutableTreeNode) e.nextElement(); Object userObj = n.getUserObject(); String chilld = null; if (userObj instanceof String) { chilld = (String) userObj; } else if (userObj instanceof NameObject) { NameObject nameObject = (NameObject) userObj; chilld = nameObject.getName(); } if (ComparatorUtils.equals(chilld, selectedRole)) { this.setSelectionPath(parent.pathByAddingChild(n)); return; } else { setSelectedRole(selectedRole, parent.pathByAddingChild(n)); } } } } private void refreshElementAndAuthorityPane() { JComponent authorityToolBar = DesignerContext.getDesignerFrame().getToolbarComponent(); if (authorityToolBar instanceof BasicBeanPane) { //说明是工具栏的 ((BasicBeanPane) authorityToolBar).populateAuthority(); } HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().repaint(); } public String getSelectedRoleName() { return roleName; } public void setSelectedRoleName(String name) { roleName = name; } private DefaultTreeCellRenderer roleTreeRenderer = new DefaultTreeCellRenderer() { private static final long serialVersionUID = 2L; public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); ExpandMutableTreeNode treeNode = (ExpandMutableTreeNode) value; Object userObj = treeNode.getUserObject(); if (userObj instanceof String) { // p:这个是column field. this.setIcon(null); this.setText((String) userObj); } else if (userObj instanceof NameObject) { NameObject nameObject = (NameObject) userObj; this.setText(nameObject.getName()); this.setIcon(null); } // 这里新建一个Label作为render是因为JTree在动态刷新的时候,节点上render画布的的宽度不会变,会使得一部分比较长的数据显示为"..." this.setBackgroundNonSelectionColor(UIConstants.NORMAL_BACKGROUND); this.setForeground(UIConstants.FONT_COLOR); this.setBackgroundSelectionColor(UIConstants.FLESH_BLUE); return this; } }; /** * 去除不需要的鼠标监听器 * * @param component * @param l * @param index * @author yaohwu */ private void replaceMouseListener(Component component, MouseListener l, int index) { component.removeMouseListener(treeMouseListener); MouseListener[] listeners = component.getMouseListeners(); for (int i = 0, length = listeners.length; i < length; i++) { component.removeMouseListener(listeners[i]); } // for (MouseListener listener : listeners) { // component.removeMouseListener(listener); // } for (int i = 0; i < listeners.length; i++) { MouseListener listener = listeners[i]; if (index == i) { component.addMouseListener(l); } if (listener instanceof CheckBoxTree.Handler) { continue; } component.addMouseListener(listener); } // index is too large, add to the end. if (index > listeners.length - 1) { component.addMouseListener(l); } } /** * 去除一些不需要的键盘监听器 * * @param component * @param l * @param index * @author yaohwu */ private void replaceKeyListener(Component component, KeyListener l, int index) { KeyListener[] listeners = component.getKeyListeners(); for (int i = 0, length = listeners.length; i < length; i++) { component.removeKeyListener(listeners[i]); } // for (MouseListener listener : listeners) { // component.removeMouseListener(listener); // } for (int i = 0; i < listeners.length; i++) { KeyListener listener = listeners[i]; if (index == i) { component.addKeyListener(l); } if (listener instanceof CheckBoxTree.Handler) { continue; } component.addKeyListener(listener); } // index is too large, add to the end. if (index > listeners.length - 1) { component.addKeyListener(l); } } /* * p:获得选中的NameObject = name + role. */ public NameObject getSelectedNameObject() { TreePath selectedTreePath = this.getSelectionPath(); if (selectedTreePath == null) { return null; } ExpandMutableTreeNode selectedTreeNode = (ExpandMutableTreeNode) selectedTreePath.getLastPathComponent(); Object selectedUserObject = selectedTreeNode.getUserObject(); return new NameObject(selectedUserObject.toString(), ""); } /** * p:添加一个NameObject节点 * * @param no 需要添加的节点 */ public void addNameObject(NameObject no) { if (no == null) { return; } DefaultTreeModel treeModel = (DefaultTreeModel) this.getModel(); // 新建一个放着NameObject的newChildTreeNode,加到Root下面 ExpandMutableTreeNode root = (ExpandMutableTreeNode) treeModel.getRoot(); ExpandMutableTreeNode newChildTreeNode = new ExpandMutableTreeNode(no); root.add(newChildTreeNode); newChildTreeNode.add(new ExpandMutableTreeNode()); treeModel.reload(root); } /** * 刷新树节点 */ public void refreshTreeNode() { DefaultTreeModel treeModel = (DefaultTreeModel) this.getModel(); ExpandMutableTreeNode root = (ExpandMutableTreeNode) treeModel.getRoot(); if (interceptRefresh(root)) { return; } ExpandMutableTreeNode[] new_nodes = loadChildTreeNodes(root); java.util.List childTreeNodeList = new java.util.ArrayList(); for (int i = 0, len = root.getChildCount(); i < len; i++) { if (root.getChildAt(i) instanceof ExpandMutableTreeNode) { childTreeNodeList.add((ExpandMutableTreeNode) root.getChildAt(i)); } else { childTreeNodeList.add((DefaultMutableTreeNode) root.getChildAt(i)); } } root.removeAllChildren(); for (int ci = 0; ci < new_nodes.length; ci++) { Object cUserObject = new_nodes[ci].getUserObject(); for (int ni = 0, nlen = childTreeNodeList.size(); ni < nlen; ni++) { ExpandMutableTreeNode cTreeNode = (ExpandMutableTreeNode) childTreeNodeList.get(ni); if (ComparatorUtils.equals(cTreeNode.getUserObject(), cUserObject)) { new_nodes[ci].setExpanded(cTreeNode.isExpanded()); if (cTreeNode.getFirstChild() instanceof ExpandMutableTreeNode && cTreeNode.isExpanded()) { checkChildNodes(cTreeNode, new_nodes[ci]); } break; } } root.add(new_nodes[ci]); } } protected void checkChildNodes(ExpandMutableTreeNode oldNode, ExpandMutableTreeNode newNode) { for (int i = 0; i < oldNode.getChildCount(); i++) { ExpandMutableTreeNode oldChild = (ExpandMutableTreeNode) oldNode.getChildAt(i); for (int j = 0; j < newNode.getChildCount(); j++) { ExpandMutableTreeNode newChild = (ExpandMutableTreeNode) newNode.getChildAt(j); ExpandMutableTreeNode[] nodes = RoleTree.this.loadChildTreeNodes(newChild); for (int k = 0; k < nodes.length; k++) { newChild.add(nodes[k]); } if (newChild.getChildCount() > 1 && ((ExpandMutableTreeNode) newChild.getFirstChild()).getUserObject() == PENDING) { newChild.remove(0); } if (ComparatorUtils.equals(oldChild.getUserObject(), newChild.getUserObject())) { newChild.setExpanded(oldChild.isExpanded()); } } } } public NameObject getRealSelectedNameObject() { TreePath selectedTreePath = this.getSelectionPath(); if (selectedTreePath == null) { return null; } ExpandMutableTreeNode selectedTreeNode = (ExpandMutableTreeNode) selectedTreePath.getLastPathComponent(); Object selectedUserObject = selectedTreeNode.getUserObject(); if (selectedUserObject instanceof NameObject) { return (NameObject) selectedUserObject; } selectedTreeNode = (ExpandMutableTreeNode) selectedTreeNode.getParent(); selectedUserObject = selectedTreeNode.getUserObject(); if (selectedUserObject instanceof NameObject) { return (NameObject) selectedUserObject; } return null; } } \ No newline at end of file +package com.fr.design.roleAuthority; import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.itree.checkboxtree.CheckBoxTree; import com.fr.design.gui.itree.checkboxtree.CheckBoxTreeSelectionModel; import com.fr.general.NameObject; import com.fr.design.constants.UIConstants; import com.fr.design.beans.BasicBeanPane; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.gui.itree.refreshabletree.ExpandMutableTreeNode; import com.fr.design.gui.itree.refreshabletree.UserObjectRefreshJTree; import com.fr.design.mainframe.AuthorityPropertyPane; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.EastRegionContainerPane; import com.fr.general.ComparatorUtils; import com.fr.general.Inter; import javax.swing.SwingUtilities; import javax.swing.JTree; import javax.swing.JComponent; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeCellRenderer; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreePath; import java.awt.Component; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; /** * Author : daisy * Time: 下午3:32 * Date: 13-8-30 */ public class RoleTree extends UserObjectRefreshJTree { private static final long serialVersionUID = 2L; private String roleName = null; public RoleTree() { super(); this.setCellRenderer(roleTreeRenderer); this.setEnabled(true); this.setEditable(true); this.setRowHeight(20); this.setDigIn(true); Handler handler = createHandlerForRoleTree(); this.replaceMouseListener(this, handler, 0); this.replaceKeyListener(this, handler, 0); this.addTreeSelectionListener(handler); // this.removeMouseListener(treeMouseListener); // this.addTreeSelectionListener(new TreeSelectionListener() { // public void valueChanged(TreeSelectionEvent e) { // doWithValueChanged(e); // } // }); } public boolean isCheckBoxVisible(TreePath path) { return true; } /** * Creates the mouse listener and key listener used by RoleTree. * * @return the Handler. */ protected Handler createHandlerForRoleTree() { return new Handler(this); } protected static class Handler implements MouseListener, KeyListener, TreeSelectionListener { protected RoleTree _tree; int _hotspot = new UICheckBox().getPreferredSize().width; private int _toggleCount = -1; public Handler(RoleTree tree) { _tree = tree; } protected TreePath getTreePathForMouseEvent(MouseEvent e) { if (!SwingUtilities.isLeftMouseButton(e)) { return null; } if (!_tree.isCheckBoxEnabled()) { return null; } TreePath path = _tree.getPathForLocation(e.getX(), e.getY()); if (path == null) { return null; } // if (clicksInCheckBox(e, path)) { return path; // } else { // return null; // } } // protected boolean clicksInCheckBox(MouseEvent e, TreePath path) { // if (!_tree.isCheckBoxVisible(path)) { // return false; // } else { // Rectangle bounds = _tree.getPathBounds(path); // if (_tree.getComponentOrientation().isLeftToRight()) { // return e.getX() < bounds.x + _hotspot; // } else { // return e.getX() > bounds.x + bounds.width - _hotspot; // } // } // } private TreePath preventToggleEvent(MouseEvent e) { TreePath pathForMouseEvent = getTreePathForMouseEvent(e); if (pathForMouseEvent != null) { int toggleCount = _tree.getToggleClickCount(); if (toggleCount != -1) { _toggleCount = toggleCount; _tree.setToggleClickCount(-1); } } return pathForMouseEvent; } public void mouseClicked(MouseEvent e) { preventToggleEvent(e); } public void mousePressed(MouseEvent e) { TreePath path = preventToggleEvent(e); if (path != null) { toggleSelection(path); e.consume(); } } public void mouseReleased(MouseEvent e) { TreePath path = preventToggleEvent(e); if (path != null) { e.consume(); } if (_toggleCount != -1) { _tree.setToggleClickCount(_toggleCount); } } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void keyPressed(KeyEvent e) { if (e.isConsumed()) { return; } if (!_tree.isCheckBoxEnabled()) { return; } if (e.getModifiers() == 0 && e.getKeyChar() == KeyEvent.VK_SPACE) { toggleSelections(); } } public void keyTyped(KeyEvent e) { } public void keyReleased(KeyEvent e) { } public void valueChanged(TreeSelectionEvent e) { _tree.treeDidChange(); _tree.doWithValueChanged(e); } private void toggleSelection(TreePath path) { if (!_tree.isEnabled() || !_tree.isCheckBoxEnabled(path)) { return; } CheckBoxTreeSelectionModel selectionModel = _tree.getCheckBoxTreeSelectionModel(); boolean selected = selectionModel.isPathSelected(path, selectionModel.isDigIn()); selectionModel.removeTreeSelectionListener(this); try { if (!selectionModel.isSingleEventMode()) { selectionModel.setBatchMode(true); } if (selected) selectionModel.removeSelectionPath(path); else selectionModel.addSelectionPath(path); } finally { if (!selectionModel.isSingleEventMode()) { selectionModel.setBatchMode(false); } selectionModel.addTreeSelectionListener(this); _tree.treeDidChange(); _tree.doWithValueChanged(path); } } protected void toggleSelections() { TreePath[] treePaths = _tree.getSelectionPaths(); if (treePaths == null) { return; } for (int i = 0, length = treePaths.length; i < length; i++) { TreePath tmpTreePath = treePaths[i]; toggleSelection(tmpTreePath); } // for (TreePath treePath : treePaths) { // toggleSelection(treePath); // } } } /** * 更新UI */ public void updateUI() { super.updateUI(); setUI(new UIRoleTreeUI()); } /** * @param e 选中事件 */ protected void doWithValueChanged(TreeSelectionEvent e) { if (e.getNewLeadSelectionPath() != null) { if (!e.getNewLeadSelectionPath().getLastPathComponent().toString().equals(Inter.getLocText("Role"))) { roleName = e.getNewLeadSelectionPath().getLastPathComponent().toString(); setTabRoleName(roleName); refreshRoleTree(roleName); refreshElementAndAuthorityPane(); HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().judgeSheetAuthority(roleName); } } } /** * @param treepath 所选的节点路径 */ protected void doWithValueChanged(TreePath treepath) { if (treepath != null && !treepath.getLastPathComponent().toString().equals(Inter.getLocText("Role"))) { roleName = treepath.getLastPathComponent().toString(); setTabRoleName(roleName); refreshRoleTree(roleName); refreshElementAndAuthorityPane(); HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().judgeSheetAuthority(roleName); } } protected void setTabRoleName(String roleName) { } /** * 刷新角色树 * * @param selectedRole 角色 */ public void refreshRoleTree(String selectedRole) { if (EastRegionContainerPane.getInstance().getUpPane() instanceof AuthorityPropertyPane) { AuthorityPropertyPane authorityPropertyPane = (AuthorityPropertyPane) EastRegionContainerPane.getInstance().getUpPane(); authorityPropertyPane.populate(); EastRegionContainerPane.getInstance().replaceUpPane(authorityPropertyPane); } } public void setSelectedRole(String selectedRole, TreePath parent) { ExpandMutableTreeNode node = (ExpandMutableTreeNode) parent.getLastPathComponent(); if (node.children() != null && node.getChildCount() >= 0) { for (Enumeration e = node.children(); e.hasMoreElements(); ) { ExpandMutableTreeNode n = (ExpandMutableTreeNode) e.nextElement(); Object userObj = n.getUserObject(); String chilld = null; if (userObj instanceof String) { chilld = (String) userObj; } else if (userObj instanceof NameObject) { NameObject nameObject = (NameObject) userObj; chilld = nameObject.getName(); } if (ComparatorUtils.equals(chilld, selectedRole)) { this.setSelectionPath(parent.pathByAddingChild(n)); return; } else { setSelectedRole(selectedRole, parent.pathByAddingChild(n)); } } } } private void refreshElementAndAuthorityPane() { JComponent authorityToolBar = DesignerContext.getDesignerFrame().getToolbarComponent(); if (authorityToolBar instanceof BasicBeanPane) { //说明是工具栏的 ((BasicBeanPane) authorityToolBar).populateAuthority(); } HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().repaint(); } public String getSelectedRoleName() { return roleName; } public void setSelectedRoleName(String name) { roleName = name; } private DefaultTreeCellRenderer roleTreeRenderer = new DefaultTreeCellRenderer() { private static final long serialVersionUID = 2L; public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); ExpandMutableTreeNode treeNode = (ExpandMutableTreeNode) value; Object userObj = treeNode.getUserObject(); if (userObj instanceof String) { // p:这个是column field. this.setIcon(null); this.setText((String) userObj); } else if (userObj instanceof NameObject) { NameObject nameObject = (NameObject) userObj; this.setText(nameObject.getName()); this.setIcon(null); } // 这里新建一个Label作为render是因为JTree在动态刷新的时候,节点上render画布的的宽度不会变,会使得一部分比较长的数据显示为"..." this.setBackgroundNonSelectionColor(UIConstants.NORMAL_BACKGROUND); this.setForeground(UIConstants.FONT_COLOR); this.setBackgroundSelectionColor(UIConstants.FLESH_BLUE); return this; } }; /** * 去除不需要的鼠标监听器 * * @param component 组件 * @param l 所需的鼠标监听器 * @param index 插入的索引 */ private void replaceMouseListener(Component component, MouseListener l, int index) { component.removeMouseListener(treeMouseListener); MouseListener[] listeners = component.getMouseListeners(); for (int i = 0, length = listeners.length; i < length; i++) { component.removeMouseListener(listeners[i]); } // for (MouseListener listener : listeners) { // component.removeMouseListener(listener); // } for (int i = 0; i < listeners.length; i++) { MouseListener listener = listeners[i]; if (index == i) { component.addMouseListener(l); } if (listener instanceof CheckBoxTree.Handler) { continue; } component.addMouseListener(listener); } // index is too large, add to the end. if (index > listeners.length - 1) { component.addMouseListener(l); } } /** * 去除一些不需要的键盘监听器 * * @param component 组件 * @param l 所需的键盘监听器 * @param index 插入的索引 */ private void replaceKeyListener(Component component, KeyListener l, int index) { KeyListener[] listeners = component.getKeyListeners(); for (int i = 0, length = listeners.length; i < length; i++) { component.removeKeyListener(listeners[i]); } // for (MouseListener listener : listeners) { // component.removeMouseListener(listener); // } for (int i = 0; i < listeners.length; i++) { KeyListener listener = listeners[i]; if (index == i) { component.addKeyListener(l); } if (listener instanceof CheckBoxTree.Handler) { continue; } component.addKeyListener(listener); } // index is too large, add to the end. if (index > listeners.length - 1) { component.addKeyListener(l); } } /* * p:获得选中的NameObject = name + role. */ public NameObject getSelectedNameObject() { TreePath selectedTreePath = this.getSelectionPath(); if (selectedTreePath == null) { return null; } ExpandMutableTreeNode selectedTreeNode = (ExpandMutableTreeNode) selectedTreePath.getLastPathComponent(); Object selectedUserObject = selectedTreeNode.getUserObject(); return new NameObject(selectedUserObject.toString(), ""); } /** * p:添加一个NameObject节点 * * @param no 需要添加的节点 */ public void addNameObject(NameObject no) { if (no == null) { return; } DefaultTreeModel treeModel = (DefaultTreeModel) this.getModel(); // 新建一个放着NameObject的newChildTreeNode,加到Root下面 ExpandMutableTreeNode root = (ExpandMutableTreeNode) treeModel.getRoot(); ExpandMutableTreeNode newChildTreeNode = new ExpandMutableTreeNode(no); root.add(newChildTreeNode); newChildTreeNode.add(new ExpandMutableTreeNode()); treeModel.reload(root); } /** * 刷新树节点 */ public void refreshTreeNode() { DefaultTreeModel treeModel = (DefaultTreeModel) this.getModel(); ExpandMutableTreeNode root = (ExpandMutableTreeNode) treeModel.getRoot(); if (interceptRefresh(root)) { return; } ExpandMutableTreeNode[] new_nodes = loadChildTreeNodes(root); List childTreeNodeList = new ArrayList(); for (int i = 0, len = root.getChildCount(); i < len; i++) { if (root.getChildAt(i) instanceof ExpandMutableTreeNode) { childTreeNodeList.add((ExpandMutableTreeNode) root.getChildAt(i)); } else { childTreeNodeList.add((DefaultMutableTreeNode) root.getChildAt(i)); } } root.removeAllChildren(); for (int ci = 0; ci < new_nodes.length; ci++) { Object cUserObject = new_nodes[ci].getUserObject(); for (int ni = 0, nlen = childTreeNodeList.size(); ni < nlen; ni++) { ExpandMutableTreeNode cTreeNode = (ExpandMutableTreeNode) childTreeNodeList.get(ni); if (ComparatorUtils.equals(cTreeNode.getUserObject(), cUserObject)) { new_nodes[ci].setExpanded(cTreeNode.isExpanded()); if (cTreeNode.getFirstChild() instanceof ExpandMutableTreeNode && cTreeNode.isExpanded()) { checkChildNodes(cTreeNode, new_nodes[ci]); } break; } } root.add(new_nodes[ci]); } } protected void checkChildNodes(ExpandMutableTreeNode oldNode, ExpandMutableTreeNode newNode) { for (int i = 0; i < oldNode.getChildCount(); i++) { ExpandMutableTreeNode oldChild = (ExpandMutableTreeNode) oldNode.getChildAt(i); for (int j = 0; j < newNode.getChildCount(); j++) { ExpandMutableTreeNode newChild = (ExpandMutableTreeNode) newNode.getChildAt(j); ExpandMutableTreeNode[] nodes = RoleTree.this.loadChildTreeNodes(newChild); for (int k = 0; k < nodes.length; k++) { newChild.add(nodes[k]); } if (newChild.getChildCount() > 1 && ((ExpandMutableTreeNode) newChild.getFirstChild()).getUserObject() == PENDING) { newChild.remove(0); } if (ComparatorUtils.equals(oldChild.getUserObject(), newChild.getUserObject())) { newChild.setExpanded(oldChild.isExpanded()); } } } } public NameObject getRealSelectedNameObject() { TreePath selectedTreePath = this.getSelectionPath(); if (selectedTreePath == null) { return null; } ExpandMutableTreeNode selectedTreeNode = (ExpandMutableTreeNode) selectedTreePath.getLastPathComponent(); Object selectedUserObject = selectedTreeNode.getUserObject(); if (selectedUserObject instanceof NameObject) { return (NameObject) selectedUserObject; } selectedTreeNode = (ExpandMutableTreeNode) selectedTreeNode.getParent(); selectedUserObject = selectedTreeNode.getUserObject(); if (selectedUserObject instanceof NameObject) { return (NameObject) selectedUserObject; } return null; } } \ No newline at end of file From b0d98eaf8ca0f4eb06eaf14773494006c3a1e97d Mon Sep 17 00:00:00 2001 From: zhouping Date: Fri, 10 Feb 2017 12:11:47 +0800 Subject: [PATCH 074/343] =?UTF-8?q?REPORT-1814=20=E8=A1=A8=E5=8D=95tab?= =?UTF-8?q?=E5=9D=97=E7=9A=84=E6=94=B9=E8=89=AFbug=20tab=E4=BA=A4=E4=BA=92?= =?UTF-8?q?=E6=94=B9=E8=89=AF=EF=BC=8C=E9=A1=B5=E7=AD=BE=E5=8F=AF=E4=BB=A5?= =?UTF-8?q?=E7=A7=BB=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/locale/designer.properties | 6 +- .../design/locale/designer_en_US.properties | 4 + .../design/locale/designer_ja_JP.properties | 4 + .../design/locale/designer_ko_KR.properties | 6 +- .../design/locale/designer_zh_CN.properties | 4 + .../design/locale/designer_zh_TW.properties | 4 + .../cardlayout/TabMoveCustomAction.java | 32 ++++++++ .../creator/cardlayout/TabMoveEndAction.java | 66 ++++++++++++++++ .../cardlayout/TabMoveFirstAction.java | 65 ++++++++++++++++ .../creator/cardlayout/TabMoveNextAction.java | 64 +++++++++++++++ .../creator/cardlayout/TabMovePrevAction.java | 64 +++++++++++++++ .../creator/cardlayout/XCardAddButton.java | 8 +- .../creator/cardlayout/XCardSwitchButton.java | 78 ++++++++++++------- .../creator/cardlayout/XWCardLayout.java | 14 ++-- .../creator/cardlayout/XWCardTagLayout.java | 14 ++++ .../mainframe/EditingMouseListener.java | 3 - 16 files changed, 395 insertions(+), 41 deletions(-) create mode 100644 designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveCustomAction.java create mode 100644 designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveEndAction.java create mode 100644 designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveFirstAction.java create mode 100644 designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveNextAction.java create mode 100644 designer_form/src/com/fr/design/designer/creator/cardlayout/TabMovePrevAction.java diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 3f809fb4a..cee4fc345 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -538,4 +538,8 @@ 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 \ No newline at end of file +FR-Designer_ClassName=Class Name +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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index 30db869a2..c06215bc6 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -539,3 +539,7 @@ FR-Designer_PageSetup_Page=Page FR-Designer_Custom_Job_Description=Description FR-Designer_Property=Property FR-Designer_ClassName=Class Name +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 diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index ba6114955..c2fb91f25 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -518,3 +518,7 @@ 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-Move_Tab_First= +FR-Designer-Move_Tab_End= +FR-Designer-Move_Tab_Next= +FR-Designer-Move_Tab_Prev= diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index 9d540cd01..03d1a11f4 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -512,4 +512,8 @@ 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 \ No newline at end of file +FR-Designer_ClassName=\uD074\uB798\uC2A4\uB124\uC784 +FR-Designer-Move_Tab_First= +FR-Designer-Move_Tab_End= +FR-Designer-Move_Tab_Next= +FR-Designer-Move_Tab_Prev= \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 54f0ac177..6fdea224d 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -543,4 +543,8 @@ 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-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 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 271150729..c47170e57 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -531,3 +531,7 @@ 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-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 diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveCustomAction.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveCustomAction.java new file mode 100644 index 000000000..93a62287e --- /dev/null +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveCustomAction.java @@ -0,0 +1,32 @@ +package com.fr.design.designer.creator.cardlayout; + +import com.fr.base.BaseUtils; +import com.fr.design.designer.beans.actions.FormUndoableAction; +import com.fr.design.mainframe.FormDesigner; + +/** + * Created by zhouping on 2017/2/9. + */ +public class TabMoveCustomAction extends FormUndoableAction { + private XCardSwitchButton xCardSwitchButton; + + public TabMoveCustomAction(FormDesigner t, XCardSwitchButton xCardSwitchButton) { + super(t); + this.setName(""); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/control/refresh.png")); + this.xCardSwitchButton = xCardSwitchButton; + } + + @Override + public boolean executeActionReturnUndoRecordNeeded() { + return false; + } + + public XCardSwitchButton getxCardSwitchButton() { + return xCardSwitchButton; + } + + public void setxCardSwitchButton(XCardSwitchButton xCardSwitchButton) { + this.xCardSwitchButton = xCardSwitchButton; + } +} diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveEndAction.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveEndAction.java new file mode 100644 index 000000000..ae101dbe4 --- /dev/null +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveEndAction.java @@ -0,0 +1,66 @@ +package com.fr.design.designer.creator.cardlayout; + +import com.fr.base.BaseUtils; +import com.fr.design.designer.beans.actions.FormUndoableAction; +import com.fr.design.mainframe.FormDesigner; +import com.fr.form.ui.CardSwitchButton; +import com.fr.form.ui.container.cardlayout.WTabFitLayout; +import com.fr.general.FRLogger; +import com.fr.general.Inter; + +/** + * Created by zhouping on 2017/2/9. + */ +public class TabMoveEndAction extends FormUndoableAction { + private XCardSwitchButton xCardSwitchButton; + + public TabMoveEndAction(FormDesigner t, XCardSwitchButton xCardSwitchButton) { + super(t); + this.setName(Inter.getLocText("FR-Designer-Move_Tab_End")); + this.setSmallIcon(BaseUtils.readIcon("com/fr/design/images/control/rightright.png")); + this.xCardSwitchButton = xCardSwitchButton; + } + + @Override + public boolean executeActionReturnUndoRecordNeeded() { + XWCardTagLayout xwCardTagLayout = xCardSwitchButton.getTagLayout(); + XWCardLayout xwCardLayout = xCardSwitchButton.getCardLayout(); + CardSwitchButton currentButton = (CardSwitchButton) xCardSwitchButton.toData(); + try { + int currentIndex = currentButton.getIndex(); + int maxIndex = xwCardTagLayout.getComponentCount(); + XWTabFitLayout xCurrentTab = (XWTabFitLayout) xwCardLayout.getXCreator(currentIndex); + WTabFitLayout currentTab = (WTabFitLayout) xCurrentTab.toData(); + xwCardTagLayout.setSwitchingTab(true); + //修改当前tab往后所有tab的索引号 + for (int i = currentIndex + 1; i < maxIndex; i++) { + CardSwitchButton tempBtn = (CardSwitchButton) xwCardTagLayout.getXCreator(i).toData(); + tempBtn.setIndex(i - 1); + WTabFitLayout tempTab = (WTabFitLayout) xwCardLayout.getXCreator(i).toData(); + tempTab.setIndex(i - 1); + tempTab.setTabNameIndex(i - 1); + } + xwCardTagLayout.remove(xCardSwitchButton); + xwCardTagLayout.add(xCardSwitchButton); + xwCardLayout.remove(xCurrentTab); + xwCardLayout.add(xCurrentTab); + currentButton.setIndex(maxIndex - 1); + currentTab.setIndex(maxIndex - 1); + currentTab.setTabNameIndex(maxIndex - 1); + xwCardTagLayout.setSwitchingTab(false); + }catch (Exception e){ + xwCardTagLayout.setSwitchingTab(false); + FRLogger.getLogger().error(e.getMessage()); + return false; + } + return true; + } + + public XCardSwitchButton getxCardSwitchButton() { + return xCardSwitchButton; + } + + public void setxCardSwitchButton(XCardSwitchButton xCardSwitchButton) { + this.xCardSwitchButton = xCardSwitchButton; + } +} diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveFirstAction.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveFirstAction.java new file mode 100644 index 000000000..0d6047636 --- /dev/null +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveFirstAction.java @@ -0,0 +1,65 @@ +package com.fr.design.designer.creator.cardlayout; + +import com.fr.base.BaseUtils; +import com.fr.design.designer.beans.actions.FormUndoableAction; +import com.fr.design.mainframe.FormDesigner; +import com.fr.form.ui.CardSwitchButton; +import com.fr.form.ui.container.cardlayout.WTabFitLayout; +import com.fr.general.FRLogger; +import com.fr.general.Inter; + +/** + * Created by zhouping on 2017/2/9. + */ +public class TabMoveFirstAction extends FormUndoableAction { + private XCardSwitchButton xCardSwitchButton; + + public TabMoveFirstAction(FormDesigner t, XCardSwitchButton xCardSwitchButton) { + super(t); + this.setName(Inter.getLocText("FR-Designer-Move_Tab_First")); + this.setSmallIcon(BaseUtils.readIcon("com/fr/design/images/control/leftleft.png")); + this.xCardSwitchButton = xCardSwitchButton; + } + + @Override + public boolean executeActionReturnUndoRecordNeeded() { + XWCardTagLayout xwCardTagLayout = xCardSwitchButton.getTagLayout(); + XWCardLayout xwCardLayout = xCardSwitchButton.getCardLayout(); + CardSwitchButton currentButton = (CardSwitchButton) xCardSwitchButton.toData(); + try { + int currentIndex = currentButton.getIndex(); + XWTabFitLayout xCurrentTab = (XWTabFitLayout) xwCardLayout.getXCreator(currentIndex); + WTabFitLayout currentTab = (WTabFitLayout) xCurrentTab.toData(); + xwCardTagLayout.setSwitchingTab(true); + //修改当前tab往前所有tab的索引号 + for (int i = currentIndex - 1; i >= 0; i--) { + CardSwitchButton tempBtn = (CardSwitchButton) xwCardTagLayout.getXCreator(i).toData(); + tempBtn.setIndex(i + 1); + WTabFitLayout tempTab = (WTabFitLayout) xwCardLayout.getXCreator(i).toData(); + tempTab.setIndex(i + 1); + tempTab.setTabNameIndex(i + 1); + } + xwCardTagLayout.remove(xCardSwitchButton); + xwCardTagLayout.add(xCardSwitchButton, 0); + xwCardLayout.remove(xCurrentTab); + xwCardLayout.add(xCurrentTab, 0); + currentButton.setIndex(0); + currentTab.setIndex(0); + currentTab.setTabNameIndex(0); + xwCardTagLayout.setSwitchingTab(false); + }catch (Exception e){ + xwCardTagLayout.setSwitchingTab(false); + FRLogger.getLogger().error(e.getMessage()); + return false; + } + return true; + } + + public XCardSwitchButton getxCardSwitchButton() { + return xCardSwitchButton; + } + + public void setxCardSwitchButton(XCardSwitchButton xCardSwitchButton) { + this.xCardSwitchButton = xCardSwitchButton; + } +} diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveNextAction.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveNextAction.java new file mode 100644 index 000000000..15bfa7337 --- /dev/null +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveNextAction.java @@ -0,0 +1,64 @@ +package com.fr.design.designer.creator.cardlayout; + +import com.fr.base.BaseUtils; +import com.fr.design.designer.beans.actions.FormUndoableAction; +import com.fr.design.mainframe.FormDesigner; +import com.fr.form.ui.CardSwitchButton; +import com.fr.form.ui.container.cardlayout.WTabFitLayout; +import com.fr.general.FRLogger; +import com.fr.general.Inter; + +/** + * Created by zhouping on 2017/2/9. + */ +public class TabMoveNextAction extends FormUndoableAction { + private XCardSwitchButton xCardSwitchButton; + + public TabMoveNextAction(FormDesigner t, XCardSwitchButton xCardSwitchButton) { + super(t); + this.setName(Inter.getLocText("FR-Designer-Move_Tab_Next")); + this.setSmallIcon(BaseUtils.readIcon("com/fr/design/images/control/right.png")); + this.xCardSwitchButton = xCardSwitchButton; + } + + @Override + public boolean executeActionReturnUndoRecordNeeded() { + XWCardTagLayout xwCardTagLayout = xCardSwitchButton.getTagLayout(); + XWCardLayout xwCardLayout = xCardSwitchButton.getCardLayout(); + CardSwitchButton currentButton = (CardSwitchButton) xCardSwitchButton.toData(); + try { + int currentIndex = currentButton.getIndex(); + XWTabFitLayout xCurrentTab = (XWTabFitLayout) xwCardLayout.getXCreator(currentIndex); + WTabFitLayout currentTab = (WTabFitLayout) xCurrentTab.toData(); + xwCardTagLayout.setSwitchingTab(true); + //修改下一个tab的索引号 + CardSwitchButton nextBtn = (CardSwitchButton) xwCardTagLayout.getXCreator(currentIndex + 1).toData(); + nextBtn.setIndex(currentIndex); + WTabFitLayout nextTab = (WTabFitLayout) xwCardLayout.getXCreator(currentIndex + 1).toData(); + nextTab.setIndex(currentIndex); + nextTab.setTabNameIndex(currentIndex); + + xwCardTagLayout.remove(xCardSwitchButton); + xwCardTagLayout.add(xCardSwitchButton, currentIndex + 1); + xwCardLayout.remove(xCurrentTab); + xwCardLayout.add(xCurrentTab, currentIndex + 1); + currentButton.setIndex(currentIndex + 1); + currentTab.setIndex(currentIndex + 1); + currentTab.setTabNameIndex(currentIndex + 1); + xwCardTagLayout.setSwitchingTab(false); + }catch (Exception e){ + xwCardTagLayout.setSwitchingTab(false); + FRLogger.getLogger().error(e.getMessage()); + return false; + } + return true; + } + + public XCardSwitchButton getxCardSwitchButton() { + return xCardSwitchButton; + } + + public void setxCardSwitchButton(XCardSwitchButton xCardSwitchButton) { + this.xCardSwitchButton = xCardSwitchButton; + } +} diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMovePrevAction.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMovePrevAction.java new file mode 100644 index 000000000..cac70db82 --- /dev/null +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMovePrevAction.java @@ -0,0 +1,64 @@ +package com.fr.design.designer.creator.cardlayout; + +import com.fr.base.BaseUtils; +import com.fr.design.designer.beans.actions.FormUndoableAction; +import com.fr.design.mainframe.FormDesigner; +import com.fr.form.ui.CardSwitchButton; +import com.fr.form.ui.container.cardlayout.WTabFitLayout; +import com.fr.general.FRLogger; +import com.fr.general.Inter; + +/** + * Created by zhouping on 2017/2/9. + */ +public class TabMovePrevAction extends FormUndoableAction { + private XCardSwitchButton xCardSwitchButton; + + public TabMovePrevAction(FormDesigner t, XCardSwitchButton xCardSwitchButton) { + super(t); + this.setName(Inter.getLocText("FR-Designer-Move_Tab_Prev")); + this.setSmallIcon(BaseUtils.readIcon("com/fr/design/images/control/left.png")); + this.xCardSwitchButton = xCardSwitchButton; + } + + @Override + public boolean executeActionReturnUndoRecordNeeded() { + XWCardTagLayout xwCardTagLayout = xCardSwitchButton.getTagLayout(); + XWCardLayout xwCardLayout = xCardSwitchButton.getCardLayout(); + CardSwitchButton currentButton = (CardSwitchButton) xCardSwitchButton.toData(); + try { + int currentIndex = currentButton.getIndex(); + XWTabFitLayout xCurrentTab = (XWTabFitLayout) xwCardLayout.getXCreator(currentIndex); + WTabFitLayout currentTab = (WTabFitLayout) xCurrentTab.toData(); + xwCardTagLayout.setSwitchingTab(true); + //修改上一个tab的索引号 + CardSwitchButton prevBtn = (CardSwitchButton) xwCardTagLayout.getXCreator(currentIndex - 1).toData(); + prevBtn.setIndex(currentIndex); + WTabFitLayout prevTab = (WTabFitLayout) xwCardLayout.getXCreator(currentIndex - 1).toData(); + prevTab.setIndex(currentIndex); + prevTab.setTabNameIndex(currentIndex); + + xwCardTagLayout.remove(xCardSwitchButton); + xwCardTagLayout.add(xCardSwitchButton, currentIndex - 1); + xwCardLayout.remove(xCurrentTab); + xwCardLayout.add(xCurrentTab, currentIndex - 1); + currentButton.setIndex(currentIndex - 1); + currentTab.setIndex(currentIndex - 1); + currentTab.setTabNameIndex(currentIndex - 1); + xwCardTagLayout.setSwitchingTab(false); + }catch (Exception e){ + xwCardTagLayout.setSwitchingTab(false); + FRLogger.getLogger().error(e.getMessage()); + return false; + } + return true; + } + + public XCardSwitchButton getxCardSwitchButton() { + return xCardSwitchButton; + } + + public void setxCardSwitchButton(XCardSwitchButton xCardSwitchButton) { + this.xCardSwitchButton = xCardSwitchButton; + } +} diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardAddButton.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardAddButton.java index fa4c1d4a9..85e26e877 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardAddButton.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardAddButton.java @@ -89,12 +89,12 @@ public class XCardAddButton extends XButton{ // addbutton对应的XWCardLayout和XWCardTagLayout暂未存入到xml中,重新打开之后先根据父子层获取 if(cardLayout == null && tagLayout ==null ){ - initRalateLayout(); + initRelateLayout(); } int index = cardLayout.toData().getWidgetCount(); //添加新的tab,并将原来的设为未选中状态 - setTabUnselectd(); + setTabUnselected(); addTab(index); this.tagLayout.adjustComponentWidth(); @@ -110,7 +110,7 @@ public class XCardAddButton extends XButton{ LayoutUtils.layoutRootContainer(designer.getRootComponent()); } - private void initRalateLayout(){ + private void initRelateLayout(){ XWCardTitleLayout titleLayout = (XWCardTitleLayout)this.getBackupParent(); this.tagLayout = titleLayout.getTagPart(); @@ -129,7 +129,7 @@ public class XCardAddButton extends XButton{ } //将原来的tab页设置为未选中状态 - private void setTabUnselectd(){ + private void setTabUnselected(){ for(int i=0;i Date: Fri, 10 Feb 2017 12:53:17 +0800 Subject: [PATCH 075/343] =?UTF-8?q?REPORT-1814=20=E8=A1=A8=E5=8D=95tab?= =?UTF-8?q?=E5=9D=97=E7=9A=84=E6=94=B9=E8=89=AFbug=20pmd?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/EditingMouseListener.java | 126 +++++++++--------- 1 file changed, 66 insertions(+), 60 deletions(-) diff --git a/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java b/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java index f88abfaa4..f1f61b2b2 100644 --- a/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java +++ b/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java @@ -187,45 +187,48 @@ public class EditingMouseListener extends MouseInputAdapter { designer.selectComponents(e); } if (stateModel.isDragging()) { - // 当前鼠标所在的组件 - XCreator hoveredComponent = designer.getComponentAt(e.getX(), e.getY()); - if(designer.isWidgetsIntersect() && dragBackupBounds != null && hoveredComponent != null){ - XCreator selectionXCreator = designer.getSelectionModel().getSelection().getSelectedCreator(); - if(selectionXCreator != null){ - selectionXCreator.setBounds(dragBackupBounds.x, dragBackupBounds.y, dragBackupBounds.width, dragBackupBounds.height); - MoveUtils.hideForbidWindow(); - } - } - dragBackupBounds = null; - // 拉伸时鼠标拖动过快,导致所在组件获取会为空 - if (hoveredComponent == null && e.getY() < 0) { - // bug63538 - // 不是拖动过快导致的,而是纵坐标为负值导致的,这时参照横坐标为负值时的做法,取边界位置的组件,为鼠标所在点的组件 - // 如果直接return,界面上已经进行了拖拽不能恢复 - hoveredComponent = designer.getComponentAt(0, 0); - } - // 获取该组件所在的焦点容器 - XLayoutContainer container = XCreatorUtils.getHotspotContainer(hoveredComponent); - - if (container != null) { - boolean formSubmit2Adapt = !selectionModel.getSelection().getSelectedCreator().canEnterIntoAdaptPane() - && container.acceptType(XWFitLayout.class); - if ( !formSubmit2Adapt) { - // 如果是处于拖拽状态,则释放组件 - stateModel.releaseDragging(e); - } else { - selectionModel.deleteSelection(); - designer.setPainter(null); - } - cancelPromptWidgetForbidEnter(); - } - + mouseDraggingRelease(e); } } lastPressEvent = null; last_creator = null; } + private void mouseDraggingRelease(MouseEvent e) { + // 当前鼠标所在的组件 + XCreator hoveredComponent = designer.getComponentAt(e.getX(), e.getY()); + if(designer.isWidgetsIntersect() && dragBackupBounds != null && hoveredComponent != null){ + XCreator selectionXCreator = designer.getSelectionModel().getSelection().getSelectedCreator(); + if(selectionXCreator != null){ + selectionXCreator.setBounds(dragBackupBounds.x, dragBackupBounds.y, dragBackupBounds.width, dragBackupBounds.height); + MoveUtils.hideForbidWindow(); + } + } + dragBackupBounds = null; + // 拉伸时鼠标拖动过快,导致所在组件获取会为空 + if (hoveredComponent == null && e.getY() < 0) { + // bug63538 + // 不是拖动过快导致的,而是纵坐标为负值导致的,这时参照横坐标为负值时的做法,取边界位置的组件,为鼠标所在点的组件 + // 如果直接return,界面上已经进行了拖拽不能恢复 + hoveredComponent = designer.getComponentAt(0, 0); + } + // 获取该组件所在的焦点容器 + XLayoutContainer container = XCreatorUtils.getHotspotContainer(hoveredComponent); + + if (container != null) { + boolean formSubmit2Adapt = !selectionModel.getSelection().getSelectedCreator().canEnterIntoAdaptPane() + && container.acceptType(XWFitLayout.class); + if ( !formSubmit2Adapt) { + // 如果是处于拖拽状态,则释放组件 + stateModel.releaseDragging(e); + } else { + selectionModel.deleteSelection(); + designer.setPainter(null); + } + cancelPromptWidgetForbidEnter(); + } + } + /** * 激活上下文菜单,待完善 * 6.56暂时不支持右键 bugid 8777 @@ -286,33 +289,7 @@ public class EditingMouseListener extends MouseInputAdapter { } if (component.isReport()) { - xElementCase = (XElementCase)component; - UIButton button = (UIButton)xElementCase.getCoverPane().getComponent(0); - if(designer.getCursor().getType() ==Cursor.HAND_CURSOR) { - designer.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); - } // component.getParent() 是报表块所在的XWTitleLayout - int minX = button.getX() + getParentPositionX(component, 0) - designer.getArea().getHorizontalValue(); - int minY = button.getY() + getParentPositionY(component, 0) - designer.getArea().getVerticalValue(); - if (e.getX() + GAP - xElementCase.getInsets().left > minX && e.getX() - GAP - xElementCase.getInsets().left < minX + button.getWidth()) { - if (e.getY() + GAP - xElementCase.getInsets().top > minY && e.getY() - GAP - xElementCase.getInsets().top < minY + button.getHeight()) { - designer.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); - } - } - xElementCase.setHelpBtnOnFocus(false); - if (xElementCase.getCoverPane().getComponentCount() > 1) { - JComponent button1 = (JComponent) xElementCase.getCoverPane().getComponent(1); - int minX1 = button1.getX() + getParentPositionX(component, 0) - designer.getArea().getHorizontalValue(); - int minY1 = button1.getY() + getParentPositionY(component, 0) - designer.getArea().getVerticalValue(); - if (e.getX() + GAP - xElementCase.getInsets().left > minX1 && e.getX() - GAP - xElementCase.getInsets().left < minX1 + button1.getWidth()) { - if (e.getY() + GAP - xElementCase.getInsets().top > minY1 && e.getY() - GAP - xElementCase.getInsets().top < minY1 + button1.getHeight()) { - designer.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); - xElementCase.setHelpBtnOnFocus(true); - } - } - } - xElementCase.displayCoverPane(true); - xElementCase.setDirections(Direction.TOP_BOTTOM_LEFT_RIGHT); - + elementCaseMouseMoved(e, component); designer.repaint(); return; } @@ -322,6 +299,35 @@ public class EditingMouseListener extends MouseInputAdapter { designer.repaint(); } + private void elementCaseMouseMoved(MouseEvent e, XCreator component) { + xElementCase = (XElementCase)component; + UIButton button = (UIButton)xElementCase.getCoverPane().getComponent(0); + if(designer.getCursor().getType() == Cursor.HAND_CURSOR) { + designer.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + } // component.getParent() 是报表块所在的XWTitleLayout + int minX = button.getX() + getParentPositionX(component, 0) - designer.getArea().getHorizontalValue(); + int minY = button.getY() + getParentPositionY(component, 0) - designer.getArea().getVerticalValue(); + if (e.getX() + GAP - xElementCase.getInsets().left > minX && e.getX() - GAP - xElementCase.getInsets().left < minX + button.getWidth()) { + if (e.getY() + GAP - xElementCase.getInsets().top > minY && e.getY() - GAP - xElementCase.getInsets().top < minY + button.getHeight()) { + designer.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + } + } + xElementCase.setHelpBtnOnFocus(false); + if (xElementCase.getCoverPane().getComponentCount() > 1) { + JComponent button1 = (JComponent) xElementCase.getCoverPane().getComponent(1); + int minX1 = button1.getX() + getParentPositionX(component, 0) - designer.getArea().getHorizontalValue(); + int minY1 = button1.getY() + getParentPositionY(component, 0) - designer.getArea().getVerticalValue(); + if (e.getX() + GAP - xElementCase.getInsets().left > minX1 && e.getX() - GAP - xElementCase.getInsets().left < minX1 + button1.getWidth()) { + if (e.getY() + GAP - xElementCase.getInsets().top > minY1 && e.getY() - GAP - xElementCase.getInsets().top < minY1 + button1.getHeight()) { + designer.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + xElementCase.setHelpBtnOnFocus(true); + } + } + } + xElementCase.displayCoverPane(true); + xElementCase.setDirections(Direction.TOP_BOTTOM_LEFT_RIGHT); + } + private void setCoverPaneNotDisplay(MouseEvent e, boolean isLinkedHelpDialog) { if (xElementCase != null) { int x = getParentPositionX(xElementCase, 0) - designer.getArea().getHorizontalValue(); From 0128e4ea40d474f3dae5555fa5c5c8a59b31488c Mon Sep 17 00:00:00 2001 From: yaohwu Date: Fri, 10 Feb 2017 13:35:58 +0800 Subject: [PATCH 076/343] =?UTF-8?q?=E6=97=A0jira=E4=BB=BB=E5=8A=A1=20?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/locale/designer.properties | 3 ++- designer_base/src/com/fr/design/roleAuthority/RoleTree.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 3f809fb4a..338dfd1b9 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -538,4 +538,5 @@ 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 \ No newline at end of file +FR-Designer_ClassName=Class Name +FR-Designer_Role=Role \ No newline at end of file diff --git a/designer_base/src/com/fr/design/roleAuthority/RoleTree.java b/designer_base/src/com/fr/design/roleAuthority/RoleTree.java index e51c703df..1af8c1caa 100644 --- a/designer_base/src/com/fr/design/roleAuthority/RoleTree.java +++ b/designer_base/src/com/fr/design/roleAuthority/RoleTree.java @@ -1 +1 @@ -package com.fr.design.roleAuthority; import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.itree.checkboxtree.CheckBoxTree; import com.fr.design.gui.itree.checkboxtree.CheckBoxTreeSelectionModel; import com.fr.general.NameObject; import com.fr.design.constants.UIConstants; import com.fr.design.beans.BasicBeanPane; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.gui.itree.refreshabletree.ExpandMutableTreeNode; import com.fr.design.gui.itree.refreshabletree.UserObjectRefreshJTree; import com.fr.design.mainframe.AuthorityPropertyPane; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.EastRegionContainerPane; import com.fr.general.ComparatorUtils; import com.fr.general.Inter; import javax.swing.SwingUtilities; import javax.swing.JTree; import javax.swing.JComponent; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeCellRenderer; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreePath; import java.awt.Component; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; /** * Author : daisy * Time: 下午3:32 * Date: 13-8-30 */ public class RoleTree extends UserObjectRefreshJTree { private static final long serialVersionUID = 2L; private String roleName = null; public RoleTree() { super(); this.setCellRenderer(roleTreeRenderer); this.setEnabled(true); this.setEditable(true); this.setRowHeight(20); this.setDigIn(true); Handler handler = createHandlerForRoleTree(); this.replaceMouseListener(this, handler, 0); this.replaceKeyListener(this, handler, 0); this.addTreeSelectionListener(handler); // this.removeMouseListener(treeMouseListener); // this.addTreeSelectionListener(new TreeSelectionListener() { // public void valueChanged(TreeSelectionEvent e) { // doWithValueChanged(e); // } // }); } public boolean isCheckBoxVisible(TreePath path) { return true; } /** * Creates the mouse listener and key listener used by RoleTree. * * @return the Handler. */ protected Handler createHandlerForRoleTree() { return new Handler(this); } protected static class Handler implements MouseListener, KeyListener, TreeSelectionListener { protected RoleTree _tree; int _hotspot = new UICheckBox().getPreferredSize().width; private int _toggleCount = -1; public Handler(RoleTree tree) { _tree = tree; } protected TreePath getTreePathForMouseEvent(MouseEvent e) { if (!SwingUtilities.isLeftMouseButton(e)) { return null; } if (!_tree.isCheckBoxEnabled()) { return null; } TreePath path = _tree.getPathForLocation(e.getX(), e.getY()); if (path == null) { return null; } // if (clicksInCheckBox(e, path)) { return path; // } else { // return null; // } } // protected boolean clicksInCheckBox(MouseEvent e, TreePath path) { // if (!_tree.isCheckBoxVisible(path)) { // return false; // } else { // Rectangle bounds = _tree.getPathBounds(path); // if (_tree.getComponentOrientation().isLeftToRight()) { // return e.getX() < bounds.x + _hotspot; // } else { // return e.getX() > bounds.x + bounds.width - _hotspot; // } // } // } private TreePath preventToggleEvent(MouseEvent e) { TreePath pathForMouseEvent = getTreePathForMouseEvent(e); if (pathForMouseEvent != null) { int toggleCount = _tree.getToggleClickCount(); if (toggleCount != -1) { _toggleCount = toggleCount; _tree.setToggleClickCount(-1); } } return pathForMouseEvent; } public void mouseClicked(MouseEvent e) { preventToggleEvent(e); } public void mousePressed(MouseEvent e) { TreePath path = preventToggleEvent(e); if (path != null) { toggleSelection(path); e.consume(); } } public void mouseReleased(MouseEvent e) { TreePath path = preventToggleEvent(e); if (path != null) { e.consume(); } if (_toggleCount != -1) { _tree.setToggleClickCount(_toggleCount); } } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void keyPressed(KeyEvent e) { if (e.isConsumed()) { return; } if (!_tree.isCheckBoxEnabled()) { return; } if (e.getModifiers() == 0 && e.getKeyChar() == KeyEvent.VK_SPACE) { toggleSelections(); } } public void keyTyped(KeyEvent e) { } public void keyReleased(KeyEvent e) { } public void valueChanged(TreeSelectionEvent e) { _tree.treeDidChange(); _tree.doWithValueChanged(e); } private void toggleSelection(TreePath path) { if (!_tree.isEnabled() || !_tree.isCheckBoxEnabled(path)) { return; } CheckBoxTreeSelectionModel selectionModel = _tree.getCheckBoxTreeSelectionModel(); boolean selected = selectionModel.isPathSelected(path, selectionModel.isDigIn()); selectionModel.removeTreeSelectionListener(this); try { if (!selectionModel.isSingleEventMode()) { selectionModel.setBatchMode(true); } if (selected) selectionModel.removeSelectionPath(path); else selectionModel.addSelectionPath(path); } finally { if (!selectionModel.isSingleEventMode()) { selectionModel.setBatchMode(false); } selectionModel.addTreeSelectionListener(this); _tree.treeDidChange(); _tree.doWithValueChanged(path); } } protected void toggleSelections() { TreePath[] treePaths = _tree.getSelectionPaths(); if (treePaths == null) { return; } for (int i = 0, length = treePaths.length; i < length; i++) { TreePath tmpTreePath = treePaths[i]; toggleSelection(tmpTreePath); } // for (TreePath treePath : treePaths) { // toggleSelection(treePath); // } } } /** * 更新UI */ public void updateUI() { super.updateUI(); setUI(new UIRoleTreeUI()); } /** * @param e 选中事件 */ protected void doWithValueChanged(TreeSelectionEvent e) { if (e.getNewLeadSelectionPath() != null) { if (!e.getNewLeadSelectionPath().getLastPathComponent().toString().equals(Inter.getLocText("Role"))) { roleName = e.getNewLeadSelectionPath().getLastPathComponent().toString(); setTabRoleName(roleName); refreshRoleTree(roleName); refreshElementAndAuthorityPane(); HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().judgeSheetAuthority(roleName); } } } /** * @param treepath 所选的节点路径 */ protected void doWithValueChanged(TreePath treepath) { if (treepath != null && !treepath.getLastPathComponent().toString().equals(Inter.getLocText("Role"))) { roleName = treepath.getLastPathComponent().toString(); setTabRoleName(roleName); refreshRoleTree(roleName); refreshElementAndAuthorityPane(); HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().judgeSheetAuthority(roleName); } } protected void setTabRoleName(String roleName) { } /** * 刷新角色树 * * @param selectedRole 角色 */ public void refreshRoleTree(String selectedRole) { if (EastRegionContainerPane.getInstance().getUpPane() instanceof AuthorityPropertyPane) { AuthorityPropertyPane authorityPropertyPane = (AuthorityPropertyPane) EastRegionContainerPane.getInstance().getUpPane(); authorityPropertyPane.populate(); EastRegionContainerPane.getInstance().replaceUpPane(authorityPropertyPane); } } public void setSelectedRole(String selectedRole, TreePath parent) { ExpandMutableTreeNode node = (ExpandMutableTreeNode) parent.getLastPathComponent(); if (node.children() != null && node.getChildCount() >= 0) { for (Enumeration e = node.children(); e.hasMoreElements(); ) { ExpandMutableTreeNode n = (ExpandMutableTreeNode) e.nextElement(); Object userObj = n.getUserObject(); String chilld = null; if (userObj instanceof String) { chilld = (String) userObj; } else if (userObj instanceof NameObject) { NameObject nameObject = (NameObject) userObj; chilld = nameObject.getName(); } if (ComparatorUtils.equals(chilld, selectedRole)) { this.setSelectionPath(parent.pathByAddingChild(n)); return; } else { setSelectedRole(selectedRole, parent.pathByAddingChild(n)); } } } } private void refreshElementAndAuthorityPane() { JComponent authorityToolBar = DesignerContext.getDesignerFrame().getToolbarComponent(); if (authorityToolBar instanceof BasicBeanPane) { //说明是工具栏的 ((BasicBeanPane) authorityToolBar).populateAuthority(); } HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().repaint(); } public String getSelectedRoleName() { return roleName; } public void setSelectedRoleName(String name) { roleName = name; } private DefaultTreeCellRenderer roleTreeRenderer = new DefaultTreeCellRenderer() { private static final long serialVersionUID = 2L; public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); ExpandMutableTreeNode treeNode = (ExpandMutableTreeNode) value; Object userObj = treeNode.getUserObject(); if (userObj instanceof String) { // p:这个是column field. this.setIcon(null); this.setText((String) userObj); } else if (userObj instanceof NameObject) { NameObject nameObject = (NameObject) userObj; this.setText(nameObject.getName()); this.setIcon(null); } // 这里新建一个Label作为render是因为JTree在动态刷新的时候,节点上render画布的的宽度不会变,会使得一部分比较长的数据显示为"..." this.setBackgroundNonSelectionColor(UIConstants.NORMAL_BACKGROUND); this.setForeground(UIConstants.FONT_COLOR); this.setBackgroundSelectionColor(UIConstants.FLESH_BLUE); return this; } }; /** * 去除不需要的鼠标监听器 * * @param component 组件 * @param l 所需的鼠标监听器 * @param index 插入的索引 */ private void replaceMouseListener(Component component, MouseListener l, int index) { component.removeMouseListener(treeMouseListener); MouseListener[] listeners = component.getMouseListeners(); for (int i = 0, length = listeners.length; i < length; i++) { component.removeMouseListener(listeners[i]); } // for (MouseListener listener : listeners) { // component.removeMouseListener(listener); // } for (int i = 0; i < listeners.length; i++) { MouseListener listener = listeners[i]; if (index == i) { component.addMouseListener(l); } if (listener instanceof CheckBoxTree.Handler) { continue; } component.addMouseListener(listener); } // index is too large, add to the end. if (index > listeners.length - 1) { component.addMouseListener(l); } } /** * 去除一些不需要的键盘监听器 * * @param component 组件 * @param l 所需的键盘监听器 * @param index 插入的索引 */ private void replaceKeyListener(Component component, KeyListener l, int index) { KeyListener[] listeners = component.getKeyListeners(); for (int i = 0, length = listeners.length; i < length; i++) { component.removeKeyListener(listeners[i]); } // for (MouseListener listener : listeners) { // component.removeMouseListener(listener); // } for (int i = 0; i < listeners.length; i++) { KeyListener listener = listeners[i]; if (index == i) { component.addKeyListener(l); } if (listener instanceof CheckBoxTree.Handler) { continue; } component.addKeyListener(listener); } // index is too large, add to the end. if (index > listeners.length - 1) { component.addKeyListener(l); } } /* * p:获得选中的NameObject = name + role. */ public NameObject getSelectedNameObject() { TreePath selectedTreePath = this.getSelectionPath(); if (selectedTreePath == null) { return null; } ExpandMutableTreeNode selectedTreeNode = (ExpandMutableTreeNode) selectedTreePath.getLastPathComponent(); Object selectedUserObject = selectedTreeNode.getUserObject(); return new NameObject(selectedUserObject.toString(), ""); } /** * p:添加一个NameObject节点 * * @param no 需要添加的节点 */ public void addNameObject(NameObject no) { if (no == null) { return; } DefaultTreeModel treeModel = (DefaultTreeModel) this.getModel(); // 新建一个放着NameObject的newChildTreeNode,加到Root下面 ExpandMutableTreeNode root = (ExpandMutableTreeNode) treeModel.getRoot(); ExpandMutableTreeNode newChildTreeNode = new ExpandMutableTreeNode(no); root.add(newChildTreeNode); newChildTreeNode.add(new ExpandMutableTreeNode()); treeModel.reload(root); } /** * 刷新树节点 */ public void refreshTreeNode() { DefaultTreeModel treeModel = (DefaultTreeModel) this.getModel(); ExpandMutableTreeNode root = (ExpandMutableTreeNode) treeModel.getRoot(); if (interceptRefresh(root)) { return; } ExpandMutableTreeNode[] new_nodes = loadChildTreeNodes(root); List childTreeNodeList = new ArrayList(); for (int i = 0, len = root.getChildCount(); i < len; i++) { if (root.getChildAt(i) instanceof ExpandMutableTreeNode) { childTreeNodeList.add((ExpandMutableTreeNode) root.getChildAt(i)); } else { childTreeNodeList.add((DefaultMutableTreeNode) root.getChildAt(i)); } } root.removeAllChildren(); for (int ci = 0; ci < new_nodes.length; ci++) { Object cUserObject = new_nodes[ci].getUserObject(); for (int ni = 0, nlen = childTreeNodeList.size(); ni < nlen; ni++) { ExpandMutableTreeNode cTreeNode = (ExpandMutableTreeNode) childTreeNodeList.get(ni); if (ComparatorUtils.equals(cTreeNode.getUserObject(), cUserObject)) { new_nodes[ci].setExpanded(cTreeNode.isExpanded()); if (cTreeNode.getFirstChild() instanceof ExpandMutableTreeNode && cTreeNode.isExpanded()) { checkChildNodes(cTreeNode, new_nodes[ci]); } break; } } root.add(new_nodes[ci]); } } protected void checkChildNodes(ExpandMutableTreeNode oldNode, ExpandMutableTreeNode newNode) { for (int i = 0; i < oldNode.getChildCount(); i++) { ExpandMutableTreeNode oldChild = (ExpandMutableTreeNode) oldNode.getChildAt(i); for (int j = 0; j < newNode.getChildCount(); j++) { ExpandMutableTreeNode newChild = (ExpandMutableTreeNode) newNode.getChildAt(j); ExpandMutableTreeNode[] nodes = RoleTree.this.loadChildTreeNodes(newChild); for (int k = 0; k < nodes.length; k++) { newChild.add(nodes[k]); } if (newChild.getChildCount() > 1 && ((ExpandMutableTreeNode) newChild.getFirstChild()).getUserObject() == PENDING) { newChild.remove(0); } if (ComparatorUtils.equals(oldChild.getUserObject(), newChild.getUserObject())) { newChild.setExpanded(oldChild.isExpanded()); } } } } public NameObject getRealSelectedNameObject() { TreePath selectedTreePath = this.getSelectionPath(); if (selectedTreePath == null) { return null; } ExpandMutableTreeNode selectedTreeNode = (ExpandMutableTreeNode) selectedTreePath.getLastPathComponent(); Object selectedUserObject = selectedTreeNode.getUserObject(); if (selectedUserObject instanceof NameObject) { return (NameObject) selectedUserObject; } selectedTreeNode = (ExpandMutableTreeNode) selectedTreeNode.getParent(); selectedUserObject = selectedTreeNode.getUserObject(); if (selectedUserObject instanceof NameObject) { return (NameObject) selectedUserObject; } return null; } } \ No newline at end of file +package com.fr.design.roleAuthority; import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.itree.checkboxtree.CheckBoxTree; import com.fr.design.gui.itree.checkboxtree.CheckBoxTreeSelectionModel; import com.fr.general.NameObject; import com.fr.design.constants.UIConstants; import com.fr.design.beans.BasicBeanPane; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.gui.itree.refreshabletree.ExpandMutableTreeNode; import com.fr.design.gui.itree.refreshabletree.UserObjectRefreshJTree; import com.fr.design.mainframe.AuthorityPropertyPane; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.EastRegionContainerPane; import com.fr.general.ComparatorUtils; import com.fr.general.Inter; import javax.swing.SwingUtilities; import javax.swing.JTree; import javax.swing.JComponent; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeCellRenderer; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreePath; import java.awt.Component; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; /** * Author : daisy * Time: 下午3:32 * Date: 13-8-30 */ public class RoleTree extends UserObjectRefreshJTree { private static final long serialVersionUID = 2L; private String roleName = null; public RoleTree() { super(); this.setCellRenderer(roleTreeRenderer); this.setEnabled(true); this.setEditable(true); this.setRowHeight(20); this.setDigIn(true); Handler handler = createHandlerForRoleTree(); this.replaceMouseListener(this, handler, 0); this.replaceKeyListener(this, handler, 0); this.addTreeSelectionListener(handler); // this.removeMouseListener(treeMouseListener); // this.addTreeSelectionListener(new TreeSelectionListener() { // public void valueChanged(TreeSelectionEvent e) { // doWithValueChanged(e); // } // }); } public boolean isCheckBoxVisible(TreePath path) { return true; } /** * Creates the mouse listener and key listener used by RoleTree. * * @return the Handler. */ protected Handler createHandlerForRoleTree() { return new Handler(this); } protected static class Handler implements MouseListener, KeyListener, TreeSelectionListener { protected RoleTree _tree; int _hotspot = new UICheckBox().getPreferredSize().width; private int _toggleCount = -1; public Handler(RoleTree tree) { _tree = tree; } protected TreePath getTreePathForMouseEvent(MouseEvent e) { if (!SwingUtilities.isLeftMouseButton(e)) { return null; } if (!_tree.isCheckBoxEnabled()) { return null; } TreePath path = _tree.getPathForLocation(e.getX(), e.getY()); if (path == null) { return null; } // if (clicksInCheckBox(e, path)) { return path; // } else { // return null; // } } // protected boolean clicksInCheckBox(MouseEvent e, TreePath path) { // if (!_tree.isCheckBoxVisible(path)) { // return false; // } else { // Rectangle bounds = _tree.getPathBounds(path); // if (_tree.getComponentOrientation().isLeftToRight()) { // return e.getX() < bounds.x + _hotspot; // } else { // return e.getX() > bounds.x + bounds.width - _hotspot; // } // } // } private TreePath preventToggleEvent(MouseEvent e) { TreePath pathForMouseEvent = getTreePathForMouseEvent(e); if (pathForMouseEvent != null) { int toggleCount = _tree.getToggleClickCount(); if (toggleCount != -1) { _toggleCount = toggleCount; _tree.setToggleClickCount(-1); } } return pathForMouseEvent; } public void mouseClicked(MouseEvent e) { preventToggleEvent(e); } public void mousePressed(MouseEvent e) { TreePath path = preventToggleEvent(e); if (path != null) { toggleSelection(path); e.consume(); } } public void mouseReleased(MouseEvent e) { TreePath path = preventToggleEvent(e); if (path != null) { e.consume(); } if (_toggleCount != -1) { _tree.setToggleClickCount(_toggleCount); } } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void keyPressed(KeyEvent e) { if (e.isConsumed()) { return; } if (!_tree.isCheckBoxEnabled()) { return; } if (e.getModifiers() == 0 && e.getKeyChar() == KeyEvent.VK_SPACE) { toggleSelections(); } } public void keyTyped(KeyEvent e) { } public void keyReleased(KeyEvent e) { } public void valueChanged(TreeSelectionEvent e) { _tree.treeDidChange(); _tree.doWithValueChanged(e); } private void toggleSelection(TreePath path) { if (!_tree.isEnabled() || !_tree.isCheckBoxEnabled(path)) { return; } CheckBoxTreeSelectionModel selectionModel = _tree.getCheckBoxTreeSelectionModel(); boolean selected = selectionModel.isPathSelected(path, selectionModel.isDigIn()); selectionModel.removeTreeSelectionListener(this); try { if (!selectionModel.isSingleEventMode()) { selectionModel.setBatchMode(true); } if (selected) selectionModel.removeSelectionPath(path); else selectionModel.addSelectionPath(path); } finally { if (!selectionModel.isSingleEventMode()) { selectionModel.setBatchMode(false); } selectionModel.addTreeSelectionListener(this); _tree.treeDidChange(); _tree.doWithValueChanged(path); } } protected void toggleSelections() { TreePath[] treePaths = _tree.getSelectionPaths(); if (treePaths == null) { return; } for (int i = 0, length = treePaths.length; i < length; i++) { TreePath tmpTreePath = treePaths[i]; toggleSelection(tmpTreePath); } // for (TreePath treePath : treePaths) { // toggleSelection(treePath); // } } } /** * 更新UI */ public void updateUI() { super.updateUI(); setUI(new UIRoleTreeUI()); } /** * @param e 选中事件 */ protected void doWithValueChanged(TreeSelectionEvent e) { if (e.getNewLeadSelectionPath() != null) { if (!e.getNewLeadSelectionPath().getLastPathComponent().toString().equals(Inter.getLocText("FR-Designer_Role"))) { roleName = e.getNewLeadSelectionPath().getLastPathComponent().toString(); setTabRoleName(roleName); refreshRoleTree(roleName); refreshElementAndAuthorityPane(); HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().judgeSheetAuthority(roleName); } } } /** * @param treepath 所选的节点路径 */ protected void doWithValueChanged(TreePath treepath) { if (treepath != null && !treepath.getLastPathComponent().toString().equals(Inter.getLocText("FR-Designer_Role"))) { roleName = treepath.getLastPathComponent().toString(); setTabRoleName(roleName); refreshRoleTree(roleName); refreshElementAndAuthorityPane(); HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().judgeSheetAuthority(roleName); } } protected void setTabRoleName(String roleName) { } /** * 刷新角色树 * * @param selectedRole 角色 */ public void refreshRoleTree(String selectedRole) { if (EastRegionContainerPane.getInstance().getUpPane() instanceof AuthorityPropertyPane) { AuthorityPropertyPane authorityPropertyPane = (AuthorityPropertyPane) EastRegionContainerPane.getInstance().getUpPane(); authorityPropertyPane.populate(); EastRegionContainerPane.getInstance().replaceUpPane(authorityPropertyPane); } } public void setSelectedRole(String selectedRole, TreePath parent) { ExpandMutableTreeNode node = (ExpandMutableTreeNode) parent.getLastPathComponent(); if (node.children() != null && node.getChildCount() >= 0) { for (Enumeration e = node.children(); e.hasMoreElements(); ) { ExpandMutableTreeNode n = (ExpandMutableTreeNode) e.nextElement(); Object userObj = n.getUserObject(); String chilld = null; if (userObj instanceof String) { chilld = (String) userObj; } else if (userObj instanceof NameObject) { NameObject nameObject = (NameObject) userObj; chilld = nameObject.getName(); } if (ComparatorUtils.equals(chilld, selectedRole)) { this.setSelectionPath(parent.pathByAddingChild(n)); return; } else { setSelectedRole(selectedRole, parent.pathByAddingChild(n)); } } } } private void refreshElementAndAuthorityPane() { JComponent authorityToolBar = DesignerContext.getDesignerFrame().getToolbarComponent(); if (authorityToolBar instanceof BasicBeanPane) { //说明是工具栏的 ((BasicBeanPane) authorityToolBar).populateAuthority(); } HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().repaint(); } public String getSelectedRoleName() { return roleName; } public void setSelectedRoleName(String name) { roleName = name; } private DefaultTreeCellRenderer roleTreeRenderer = new DefaultTreeCellRenderer() { private static final long serialVersionUID = 2L; public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); ExpandMutableTreeNode treeNode = (ExpandMutableTreeNode) value; Object userObj = treeNode.getUserObject(); if (userObj instanceof String) { // p:这个是column field. this.setIcon(null); this.setText((String) userObj); } else if (userObj instanceof NameObject) { NameObject nameObject = (NameObject) userObj; this.setText(nameObject.getName()); this.setIcon(null); } // 这里新建一个Label作为render是因为JTree在动态刷新的时候,节点上render画布的的宽度不会变,会使得一部分比较长的数据显示为"..." this.setBackgroundNonSelectionColor(UIConstants.NORMAL_BACKGROUND); this.setForeground(UIConstants.FONT_COLOR); this.setBackgroundSelectionColor(UIConstants.FLESH_BLUE); return this; } }; /** * 去除不需要的鼠标监听器 * * @param component 组件 * @param l 所需的鼠标监听器 * @param index 插入的索引 */ private void replaceMouseListener(Component component, MouseListener l, int index) { component.removeMouseListener(treeMouseListener); MouseListener[] listeners = component.getMouseListeners(); for (int i = 0, length = listeners.length; i < length; i++) { component.removeMouseListener(listeners[i]); } // for (MouseListener listener : listeners) { // component.removeMouseListener(listener); // } for (int i = 0; i < listeners.length; i++) { MouseListener listener = listeners[i]; if (index == i) { component.addMouseListener(l); } if (listener instanceof CheckBoxTree.Handler) { continue; } component.addMouseListener(listener); } // index is too large, add to the end. if (index > listeners.length - 1) { component.addMouseListener(l); } } /** * 去除一些不需要的键盘监听器 * * @param component 组件 * @param l 所需的键盘监听器 * @param index 插入的索引 */ private void replaceKeyListener(Component component, KeyListener l, int index) { KeyListener[] listeners = component.getKeyListeners(); for (int i = 0, length = listeners.length; i < length; i++) { component.removeKeyListener(listeners[i]); } // for (MouseListener listener : listeners) { // component.removeMouseListener(listener); // } for (int i = 0; i < listeners.length; i++) { KeyListener listener = listeners[i]; if (index == i) { component.addKeyListener(l); } if (listener instanceof CheckBoxTree.Handler) { continue; } component.addKeyListener(listener); } // index is too large, add to the end. if (index > listeners.length - 1) { component.addKeyListener(l); } } /* * p:获得选中的NameObject = name + role. */ public NameObject getSelectedNameObject() { TreePath selectedTreePath = this.getSelectionPath(); if (selectedTreePath == null) { return null; } ExpandMutableTreeNode selectedTreeNode = (ExpandMutableTreeNode) selectedTreePath.getLastPathComponent(); Object selectedUserObject = selectedTreeNode.getUserObject(); return new NameObject(selectedUserObject.toString(), ""); } /** * p:添加一个NameObject节点 * * @param no 需要添加的节点 */ public void addNameObject(NameObject no) { if (no == null) { return; } DefaultTreeModel treeModel = (DefaultTreeModel) this.getModel(); // 新建一个放着NameObject的newChildTreeNode,加到Root下面 ExpandMutableTreeNode root = (ExpandMutableTreeNode) treeModel.getRoot(); ExpandMutableTreeNode newChildTreeNode = new ExpandMutableTreeNode(no); root.add(newChildTreeNode); newChildTreeNode.add(new ExpandMutableTreeNode()); treeModel.reload(root); } /** * 刷新树节点 */ public void refreshTreeNode() { DefaultTreeModel treeModel = (DefaultTreeModel) this.getModel(); ExpandMutableTreeNode root = (ExpandMutableTreeNode) treeModel.getRoot(); if (interceptRefresh(root)) { return; } ExpandMutableTreeNode[] new_nodes = loadChildTreeNodes(root); List childTreeNodeList = new ArrayList(); for (int i = 0, len = root.getChildCount(); i < len; i++) { if (root.getChildAt(i) instanceof ExpandMutableTreeNode) { childTreeNodeList.add((ExpandMutableTreeNode) root.getChildAt(i)); } else { childTreeNodeList.add((DefaultMutableTreeNode) root.getChildAt(i)); } } root.removeAllChildren(); for (int ci = 0; ci < new_nodes.length; ci++) { Object cUserObject = new_nodes[ci].getUserObject(); for (int ni = 0, nlen = childTreeNodeList.size(); ni < nlen; ni++) { ExpandMutableTreeNode cTreeNode = (ExpandMutableTreeNode) childTreeNodeList.get(ni); if (ComparatorUtils.equals(cTreeNode.getUserObject(), cUserObject)) { new_nodes[ci].setExpanded(cTreeNode.isExpanded()); if (cTreeNode.getFirstChild() instanceof ExpandMutableTreeNode && cTreeNode.isExpanded()) { checkChildNodes(cTreeNode, new_nodes[ci]); } break; } } root.add(new_nodes[ci]); } } protected void checkChildNodes(ExpandMutableTreeNode oldNode, ExpandMutableTreeNode newNode) { for (int i = 0; i < oldNode.getChildCount(); i++) { ExpandMutableTreeNode oldChild = (ExpandMutableTreeNode) oldNode.getChildAt(i); for (int j = 0; j < newNode.getChildCount(); j++) { ExpandMutableTreeNode newChild = (ExpandMutableTreeNode) newNode.getChildAt(j); ExpandMutableTreeNode[] nodes = RoleTree.this.loadChildTreeNodes(newChild); for (int k = 0; k < nodes.length; k++) { newChild.add(nodes[k]); } if (newChild.getChildCount() > 1 && ((ExpandMutableTreeNode) newChild.getFirstChild()).getUserObject() == PENDING) { newChild.remove(0); } if (ComparatorUtils.equals(oldChild.getUserObject(), newChild.getUserObject())) { newChild.setExpanded(oldChild.isExpanded()); } } } } public NameObject getRealSelectedNameObject() { TreePath selectedTreePath = this.getSelectionPath(); if (selectedTreePath == null) { return null; } ExpandMutableTreeNode selectedTreeNode = (ExpandMutableTreeNode) selectedTreePath.getLastPathComponent(); Object selectedUserObject = selectedTreeNode.getUserObject(); if (selectedUserObject instanceof NameObject) { return (NameObject) selectedUserObject; } selectedTreeNode = (ExpandMutableTreeNode) selectedTreeNode.getParent(); selectedUserObject = selectedTreeNode.getUserObject(); if (selectedUserObject instanceof NameObject) { return (NameObject) selectedUserObject; } return null; } } \ No newline at end of file From f2a4d487491aecd6abf64e7296e3caa4f4943810 Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 10 Feb 2017 13:53:15 +0800 Subject: [PATCH 077/343] =?UTF-8?q?REPORT-1178=20=E8=8B=B1=E6=96=87?= =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E2=80=94=E2=80=9423/23?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/actions/help/TutorialAction.java | 15 ++++++++++++--- .../design/mainframe/toolbar/ToolBarMenuDock.java | 3 ++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/designer_base/src/com/fr/design/actions/help/TutorialAction.java b/designer_base/src/com/fr/design/actions/help/TutorialAction.java index b23835945..c62ad0026 100644 --- a/designer_base/src/com/fr/design/actions/help/TutorialAction.java +++ b/designer_base/src/com/fr/design/actions/help/TutorialAction.java @@ -60,17 +60,26 @@ public class TutorialAction extends UpdateAction { */ public void actionPerformed(ActionEvent evt) { Locale locale = FRContext.getLocale(); - if (ComparatorUtils.equals(locale, Locale.CHINA) || ComparatorUtils.equals(locale, Locale.TAIWAN)){ - HttpClient client = new HttpClient(SiteCenter.getInstance().acquireUrlByKind("help")); + String helpKey = ""; + + if (ComparatorUtils.equals(locale, Locale.CHINA) || ComparatorUtils.equals(locale, Locale.TAIWAN)) { + helpKey = "help"; + } else if (ComparatorUtils.equals(locale, Locale.US)) { + helpKey = "help.en"; + } + + if (!helpKey.isEmpty()) { + HttpClient client = new HttpClient(SiteCenter.getInstance().acquireUrlByKind(helpKey)); if(client.getResponseCode() != -1) { try { - Desktop.getDesktop().browse(new URI(SiteCenter.getInstance().acquireUrlByKind("help"))); + Desktop.getDesktop().browse(new URI(SiteCenter.getInstance().acquireUrlByKind(helpKey))); return; } catch (Exception e) { //出了异常的话, 依然打开本地教程 } } } + if (OperatingSystem.isMacOS()) { nativeExcuteMacInstallHomePrograms("helptutorial.app"); } diff --git a/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java b/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java index 8c6006870..7fcea5d1e 100644 --- a/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java +++ b/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java @@ -312,9 +312,10 @@ public abstract class ToolBarMenuDock { public ShortCut[] createHelpShortCuts() { java.util.List shortCuts = new ArrayList(); shortCuts.add(new WebDemoAction()); - // 英文,把 video 的链接放到 Help 下面 + // 英文,把 video 和帮助文档放到 Help 下面 if (FRContext.getLocale().equals(Locale.US)) { shortCuts.add(new VideoAction()); + shortCuts.add(new TutorialAction()); } shortCuts.add(SeparatorDef.DEFAULT); //shortCuts.add(new TutorialAction()); From 0d4e8bb5d16d7e145270007f3a1d7ba9ce9b7121 Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 10 Feb 2017 16:01:13 +0800 Subject: [PATCH 078/343] =?UTF-8?q?=E5=A4=84=E7=90=86=20PMD=20=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cell/settingpane/CellOtherSetPane.java | 40 +++++++++---------- .../com/fr/design/locale/designer.properties | 13 +++++- .../design/locale/designer_en_US.properties | 11 +++++ .../design/locale/designer_ja_JP.properties | 11 +++++ .../design/locale/designer_ko_KR.properties | 13 +++++- .../design/locale/designer_zh_CN.properties | 11 +++++ .../design/locale/designer_zh_TW.properties | 11 +++++ .../present/dict/TableDataDictPane.java | 8 ++-- .../gradient/GradientBackgroundPane.java | 4 +- 9 files changed, 94 insertions(+), 28 deletions(-) diff --git a/designer/src/com/fr/design/mainframe/cell/settingpane/CellOtherSetPane.java b/designer/src/com/fr/design/mainframe/cell/settingpane/CellOtherSetPane.java index cee3ac401..0e45a1e97 100644 --- a/designer/src/com/fr/design/mainframe/cell/settingpane/CellOtherSetPane.java +++ b/designer/src/com/fr/design/mainframe/cell/settingpane/CellOtherSetPane.java @@ -78,23 +78,23 @@ public class CellOtherSetPane extends AbstractCellAttrPane { double p = TableLayout.PREFERRED; double[] rowSize1 = {p, p, p, p, p, p, p}; 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); Component[][] components1 = new Component[][]{ 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[]{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[]{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); double[] rowSize2 = {p, p, p, p, p, p}; double[] columnSize2 = {p, f}; Component[][] components2 = new Component[][]{ 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[]{pageBeforeColumnCheckBox, pageAfterColumnCheckBox}, new Component[]{canBreakOnPaginateCheckBox, null}, @@ -123,7 +123,7 @@ public class CellOtherSetPane extends AbstractCellAttrPane { private JPanel createNormal() { 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); if (FRContext.getLocale().equals(Locale.US)) { // 英文显示不全,故每行一个按钮 @@ -138,13 +138,13 @@ public class CellOtherSetPane extends AbstractCellAttrPane { printAndExportContent = new UICheckBox(Inter.getLocText("CellWrite-Print_Content")); 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"), - Inter.getLocText("ShowAsDownload")}); + showContent = new UIComboBox(new String[]{Inter.getLocText("FR-Designer_DEFAULT"), Inter.getLocText("CellWrite-Show_As_Image"), Inter.getLocText("CellWrite-Show_As_HTML"), + Inter.getLocText("FR-Designer_Show_As_Download")}); final CardLayout fileNameLayout = new CardLayout(); final JPanel fileNamePane = new JPanel(fileNameLayout); 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(); tooltipTextField = new UITextField(); @@ -194,13 +194,13 @@ public class CellOtherSetPane extends AbstractCellAttrPane { } private void initAllNames() { - autoshrik.setGlobalName(Inter.getLocText("Auto_Adjust_Size")); - previewCellContent.setGlobalName(Inter.getLocText("Preview")); + autoshrik.setGlobalName(Inter.getLocText("FR-Designer_Auto_Adjust_Size")); + previewCellContent.setGlobalName(Inter.getLocText("FR-Designer_Preview")); printAndExportContent.setGlobalName(Inter.getLocText("CellWrite-Preview_Cell_Content")); printAndExportBackground.setGlobalName(Inter.getLocText("CellWrite-Print_Background")); - showContent.setGlobalName(Inter.getLocText("Show_Content")); - fileNameTextField.setGlobalName(Inter.getLocText("Show_Content")); - tooltipTextField.setGlobalName(Inter.getLocText("CellWrite-ToolTip")); + showContent.setGlobalName(Inter.getLocText("FR-Designer_Show_Content")); + fileNameTextField.setGlobalName(Inter.getLocText("FR-Designer_Show_Content")); + tooltipTextField.setGlobalName(Inter.getLocText("FR-Designer_CellWrite_ToolTip")); pageBeforeRowCheckBox.setGlobalName(Inter.getLocText("CellWrite-Page_Before_Row")); pageAfterRowCheckBox.setGlobalName(Inter.getLocText("CellWrite-Page_After_Row")); pageBeforeColumnCheckBox.setGlobalName(Inter.getLocText("CellWrite-Page_Before_Column")); @@ -232,10 +232,10 @@ public class CellOtherSetPane extends AbstractCellAttrPane { } else if (cellGUIAttr.isShowAsHTML()) { showContent.setSelectedItem(Inter.getLocText("CellWrite-Show_As_HTML")); } else if (cellGUIAttr.isShowAsDownload()) { - showContent.setSelectedItem(Inter.getLocText("ShowAsDownload")); + showContent.setSelectedItem(Inter.getLocText("FR-Designer_Show_As_Download")); fileNameTextField.setText(cellGUIAttr.getFileName()); } else { - showContent.setSelectedItem(Inter.getLocText("Default")); + showContent.setSelectedItem(Inter.getLocText("FR-Designer_DEFAULT")); } tooltipTextField.setText(cellGUIAttr.getTooltipText()); CellPageAttr cellPageAttr = cellElement.getCellPageAttr(); // 分页 @@ -280,11 +280,11 @@ public class CellOtherSetPane extends AbstractCellAttrPane { 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()); } - if (ComparatorUtils.equals(getGlobalName(), Inter.getLocText("Preview"))) { + if (ComparatorUtils.equals(getGlobalName(), Inter.getLocText("FR-Designer_Preview"))) { cellGUIAttr.setPreviewContent(previewCellContent.isSelected()); } @@ -296,7 +296,7 @@ public class CellOtherSetPane extends AbstractCellAttrPane { 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.setShowAsImage(showContent.getSelectedIndex() == 1); cellGUIAttr.setShowAsHTML(showContent.getSelectedIndex() == 2); @@ -308,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) { cellGUIAttr.setTooltipText(fieldName); } else { diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 8815e4b03..c0070f71f 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -542,4 +542,15 @@ 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 \ No newline at end of file +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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index 0e7a873f0..8f2bae350 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -543,3 +543,14 @@ 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 diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index 7c332c617..1cbfc8e5d 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -522,3 +522,14 @@ FR-Designer_Polyblock_Edit=\u30A2\u30B0\u30EA\u30B2\u30FC\u30B7\u30E7\u30F3\u30D 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 diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index 9736b112f..23afd4037 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -516,4 +516,15 @@ FR-Designer_ClassName=\uD074\uB798\uC2A4\uB124\uC784 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 \ No newline at end of file +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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 56cd24ad8..e00290c7c 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -547,4 +547,15 @@ 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 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 7f863d345..011819a9c 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -535,3 +535,14 @@ 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 diff --git a/designer_base/src/com/fr/design/present/dict/TableDataDictPane.java b/designer_base/src/com/fr/design/present/dict/TableDataDictPane.java index 414abedac..8edea3c58 100644 --- a/designer_base/src/com/fr/design/present/dict/TableDataDictPane.java +++ b/designer_base/src/com/fr/design/present/dict/TableDataDictPane.java @@ -77,7 +77,7 @@ public class TableDataDictPane extends FurtherBasicBeanPane } }); keyColumnPane = ValueEditorPaneFactory.createValueEditorPane(new Editor[]{new ColumnNameEditor(), new ColumnIndexEditor()}); - FormulaEditor formulaEditor = new FormulaEditor(Inter.getLocText("Parameter-Formula")); + FormulaEditor formulaEditor = new FormulaEditor(Inter.getLocText("FR-Engine_Parameter-Formula")); formulaEditor.setEnabled(true); valueDictPane = ValueEditorPaneFactory.createValueEditorPane(new Editor[]{new ColumnNameEditor(), new ColumnIndexEditor(), formulaEditor}); } @@ -96,8 +96,8 @@ public class TableDataDictPane extends FurtherBasicBeanPane Component[][] components = new Component[][]{ new Component[]{new UILabel(" " + Inter.getLocText("FR-Engine_DS-TableData") + ":", UILabel.RIGHT), firstLine}, - new Component[]{new UILabel(Inter.getLocText("Actual_Value") + ":", UILabel.RIGHT), keyColumnPane}, - new Component[]{new UILabel(Inter.getLocText("Display_Value") + ":", UILabel.RIGHT), valueDictPane} + new Component[]{new UILabel(Inter.getLocText("FR-Designer_Actual_Value") + ":", UILabel.RIGHT), keyColumnPane}, + new Component[]{new UILabel(Inter.getLocText("FR-Designer_Display_Value") + ":", UILabel.RIGHT), valueDictPane} }; JPanel panel = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); @@ -158,7 +158,7 @@ public class TableDataDictPane extends FurtherBasicBeanPane columnIndexEditor1.addItemListener(itemListener); keyColumnPane.setEditors(new Editor[]{columnNameEditor1, columnIndexEditor1}, columnNames[0]); - FormulaEditor formulaEditor = new FormulaEditor(Inter.getLocText("Parameter-Formula")); + FormulaEditor formulaEditor = new FormulaEditor(Inter.getLocText("FR-Engine_Parameter-Formula")); formulaEditor.setEnabled(true); formulaEditor.addChangeListener(new ChangeListener() { diff --git a/designer_base/src/com/fr/design/style/background/gradient/GradientBackgroundPane.java b/designer_base/src/com/fr/design/style/background/gradient/GradientBackgroundPane.java index e08c1a7a4..ee0cd3385 100644 --- a/designer_base/src/com/fr/design/style/background/gradient/GradientBackgroundPane.java +++ b/designer_base/src/com/fr/design/style/background/gradient/GradientBackgroundPane.java @@ -43,7 +43,7 @@ public class GradientBackgroundPane extends BackgroundDetailPane { JPanel blankJp = new JPanel(); gradientBar = new GradientBar(4, 254); 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); gradientPanel.add(jl, BorderLayout.NORTH); gradientPanel.add(blankJp, BorderLayout.SOUTH); @@ -53,7 +53,7 @@ public class GradientBackgroundPane extends BackgroundDetailPane { JPanel innercenterPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); centerPane.add(new UILabel(" ")); 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("FR-Designer_PageSetup_Horizontal")); innercenterPane.add(left2right); From 30ac27a51159d48b70911586b496c37722f4fe39 Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 10 Feb 2017 16:13:09 +0800 Subject: [PATCH 079/343] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E3=80=82=E5=9B=BD=E9=99=85=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/locale/designer.properties | 16 ++++++++++++++++ .../fr/design/locale/designer_en_US.properties | 18 +++++++++++++++++- .../fr/design/locale/designer_ja_JP.properties | 16 ++++++++++++++++ .../fr/design/locale/designer_ko_KR.properties | 18 +++++++++++++++++- .../fr/design/locale/designer_zh_CN.properties | 16 ++++++++++++++++ .../fr/design/locale/designer_zh_TW.properties | 18 +++++++++++++++++- 6 files changed, 99 insertions(+), 3 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 52708104d..117824597 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -541,3 +541,19 @@ 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 diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index 82f3d81b1..3553d15bd 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -540,4 +540,20 @@ 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 \ No newline at end of file +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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index 42ccf96e8..3d51f49e3 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -515,3 +515,19 @@ 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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index 7fb438f1e..0f83bb9cd 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -514,4 +514,20 @@ 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 \ No newline at end of file +FR-Designer_ClassName=\uD074\uB798\uC2A4\uB124\uC784 + +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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 58f3c744a..849c4c691 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -545,3 +545,19 @@ 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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index f2c6e259a..85e2f58bb 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -532,4 +532,20 @@ 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 \ No newline at end of file +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 \ No newline at end of file From e91765d4046665442b2006eab3e8513d0dc1d8ec Mon Sep 17 00:00:00 2001 From: fr_shine Date: Fri, 10 Feb 2017 16:58:04 +0800 Subject: [PATCH 080/343] =?UTF-8?q?=E8=82=A1=E4=BB=B7=E5=9B=BE=E5=B1=9E?= =?UTF-8?q?=E6=80=A7=E9=85=8D=E7=BD=AE=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chart/gui/data/table/StockPlotTableDataContentPane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/StockPlotTableDataContentPane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/StockPlotTableDataContentPane.java index fa9489794..b2928d3a8 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/StockPlotTableDataContentPane.java +++ b/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()); highLabel.setText(stockLabel.getHighLabel()); lowLabel.setText(stockLabel.getLowLabel()); - closeLabel.setText(stockLabel.getLowLabel()); + closeLabel.setText(stockLabel.getCloseLabel()); combineCustomEditValue(axisBox, stock.getCateTime()); combineCustomEditValue(volumeBox, stock.getVolumnString()); From ef938eb4f355e9f70d4a71e622be07b95995aef4 Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 10 Feb 2017 17:11:30 +0800 Subject: [PATCH 081/343] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer/designer.iml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/designer/designer.iml b/designer/designer.iml index 661dcd939..eca9d8fcd 100644 --- a/designer/designer.iml +++ b/designer/designer.iml @@ -1,13 +1,14 @@ - - + + - + - + + \ No newline at end of file From b61dc6bad05370fe9f1f886423fa3dc5aa0bc2f6 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Mon, 13 Feb 2017 10:20:07 +0800 Subject: [PATCH 082/343] =?UTF-8?q?=E6=97=A0jira=E4=BB=BB=E5=8A=A1=20?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/style/color/ColorSelectConfigManager.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/designer_base/src/com/fr/design/style/color/ColorSelectConfigManager.java b/designer_base/src/com/fr/design/style/color/ColorSelectConfigManager.java index 941ce35fd..af3d7df81 100644 --- a/designer_base/src/com/fr/design/style/color/ColorSelectConfigManager.java +++ b/designer_base/src/com/fr/design/style/color/ColorSelectConfigManager.java @@ -53,7 +53,7 @@ public class ColorSelectConfigManager extends XMLFileManager implements ColorSel //初次打开软件时从xml文件中获取历史颜色信息 if (init) { - ColorSelectConfigManagerProvider manager = colorSelectConfigManager.getProviderInstance(); + ColorSelectConfigManagerProvider manager = ColorSelectConfigManager.getProviderInstance(); this.colors = manager.getColorsFromFile(); init = false; } @@ -93,7 +93,7 @@ public class ColorSelectConfigManager extends XMLFileManager implements ColorSel /*@author yaohwu*/ //将历史颜色信息保存到xml文件中去 - ColorSelectConfigManagerProvider manager = colorSelectConfigManager.getProviderInstance(); + ColorSelectConfigManagerProvider manager = ColorSelectConfigManager.getProviderInstance(); if (colors != null && !colors.isEmpty()) { manager.setColorsToFile(colors); } From d38c4fdc1da30b1867bb4d4e472b332e1153bb5c Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Mon, 13 Feb 2017 10:36:50 +0800 Subject: [PATCH 083/343] =?UTF-8?q?=E6=97=A0jira=E4=BB=BB=E5=8A=A1=20?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/style/color/ColorSelectConfigManagerProvider.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/designer_base/src/com/fr/design/style/color/ColorSelectConfigManagerProvider.java b/designer_base/src/com/fr/design/style/color/ColorSelectConfigManagerProvider.java index ea9783bb7..f9b2ec988 100644 --- a/designer_base/src/com/fr/design/style/color/ColorSelectConfigManagerProvider.java +++ b/designer_base/src/com/fr/design/style/color/ColorSelectConfigManagerProvider.java @@ -11,6 +11,7 @@ import java.util.List; */ public interface ColorSelectConfigManagerProvider extends RemoteXMLFileManagerProvider { - public List getColorsFromFile(); - public void setColorsToFile(List colors); + List getColorsFromFile(); + + void setColorsToFile(List colors); } From 23b833b9d5735501d812b83012126eee807126d8 Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 13 Feb 2017 10:49:08 +0800 Subject: [PATCH 084/343] =?UTF-8?q?=E8=B0=83=E6=95=B4=20SiteCenter=20?= =?UTF-8?q?=E5=8F=96=E5=80=BC=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/actions/help/AboutPane.java | 12 ++---------- .../fr/design/actions/help/TutorialAction.java | 15 ++++----------- 2 files changed, 6 insertions(+), 21 deletions(-) diff --git a/designer_base/src/com/fr/design/actions/help/AboutPane.java b/designer_base/src/com/fr/design/actions/help/AboutPane.java index c16f2047b..5ee395f80 100644 --- a/designer_base/src/com/fr/design/actions/help/AboutPane.java +++ b/designer_base/src/com/fr/design/actions/help/AboutPane.java @@ -80,16 +80,8 @@ public class AboutPane extends JPanel { contentPane.add(boxCenterAlignmentPane); } - String locale; // SiteCenter 取值的 key 后缀 - if (FRContext.getLocale().equals(Locale.US)) { - locale = ".en"; - } else if (FRContext.getLocale().equals(Locale.JAPAN)) { - locale = ".jp"; - } else { - locale = ""; - } - BoxCenterAligmentPane actionLabel = getURLActionLabel(SiteCenter.getInstance().acquireUrlByKind("website" + locale, ProductConstants.WEBSITE_URL)); - BoxCenterAligmentPane emailLabel = getEmailActionLabel(SiteCenter.getInstance().acquireUrlByKind("register.email", ProductConstants.SUPPORT_EMAIL)); + BoxCenterAligmentPane actionLabel = getURLActionLabel(SiteCenter.getInstance().acquireUrlByKind("website." + FRContext.getLocale(), ProductConstants.WEBSITE_URL)); + BoxCenterAligmentPane emailLabel = getEmailActionLabel(SiteCenter.getInstance().acquireUrlByKind("support.email", ProductConstants.SUPPORT_EMAIL)); contentPane.add(actionLabel); contentPane.add(emailLabel); diff --git a/designer_base/src/com/fr/design/actions/help/TutorialAction.java b/designer_base/src/com/fr/design/actions/help/TutorialAction.java index c62ad0026..8ae2b2962 100644 --- a/designer_base/src/com/fr/design/actions/help/TutorialAction.java +++ b/designer_base/src/com/fr/design/actions/help/TutorialAction.java @@ -59,20 +59,13 @@ public class TutorialAction extends UpdateAction { * @param evt 事件 */ public void actionPerformed(ActionEvent evt) { - Locale locale = FRContext.getLocale(); - String helpKey = ""; + String helpURL = SiteCenter.getInstance().acquireUrlByKind("help." + FRContext.getLocale()); - if (ComparatorUtils.equals(locale, Locale.CHINA) || ComparatorUtils.equals(locale, Locale.TAIWAN)) { - helpKey = "help"; - } else if (ComparatorUtils.equals(locale, Locale.US)) { - helpKey = "help.en"; - } - - if (!helpKey.isEmpty()) { - HttpClient client = new HttpClient(SiteCenter.getInstance().acquireUrlByKind(helpKey)); + if (helpURL != null) { + HttpClient client = new HttpClient(helpURL); if(client.getResponseCode() != -1) { try { - Desktop.getDesktop().browse(new URI(SiteCenter.getInstance().acquireUrlByKind(helpKey))); + Desktop.getDesktop().browse(new URI(helpURL)); return; } catch (Exception e) { //出了异常的话, 依然打开本地教程 From 8da78dc6297ac99ae535da57d0d7754ec23a8721 Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 13 Feb 2017 14:59:54 +0800 Subject: [PATCH 085/343] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=EF=BC=8C=E6=96=B0=E5=A2=9Ekey?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/locale/designer.properties | 1 + .../src/com/fr/design/locale/designer_en_US.properties | 1 + .../src/com/fr/design/locale/designer_ja_JP.properties | 1 + .../src/com/fr/design/locale/designer_ko_KR.properties | 1 + .../src/com/fr/design/locale/designer_zh_CN.properties | 1 + .../src/com/fr/design/locale/designer_zh_TW.properties | 1 + .../src/com/fr/design/present/dict/TableDataDictPane.java | 2 +- 7 files changed, 7 insertions(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index bec749760..9380fddb0 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -558,3 +558,4 @@ 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 diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index e003b6e42..cbcac747f 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -558,3 +558,4 @@ 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 diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index b39bcfca0..6470f8957 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -537,3 +537,4 @@ 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 diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index 849d7e6e1..37be51e56 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -532,3 +532,4 @@ 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 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 50fdab60c..2f5549d9d 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -562,4 +562,5 @@ 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 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index c88c665a4..c78ba8f15 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -550,3 +550,4 @@ 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 diff --git a/designer_base/src/com/fr/design/present/dict/TableDataDictPane.java b/designer_base/src/com/fr/design/present/dict/TableDataDictPane.java index 8edea3c58..c51fe8b4a 100644 --- a/designer_base/src/com/fr/design/present/dict/TableDataDictPane.java +++ b/designer_base/src/com/fr/design/present/dict/TableDataDictPane.java @@ -95,7 +95,7 @@ public class TableDataDictPane extends FurtherBasicBeanPane Component[][] components = new Component[][]{ - new Component[]{new UILabel(" " + Inter.getLocText("FR-Engine_DS-TableData") + ":", UILabel.RIGHT), firstLine}, + new Component[]{new UILabel(" " + Inter.getLocText("FR-Designer_DS_TableData") + ":", UILabel.RIGHT), firstLine}, new Component[]{new UILabel(Inter.getLocText("FR-Designer_Actual_Value") + ":", UILabel.RIGHT), keyColumnPane}, new Component[]{new UILabel(Inter.getLocText("FR-Designer_Display_Value") + ":", UILabel.RIGHT), valueDictPane} }; From e779d331b78b56bae7e8f859063865564b530df6 Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 13 Feb 2017 15:14:31 +0800 Subject: [PATCH 086/343] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=EF=BC=8C=E6=96=B0=E5=A2=9Ekey?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/locale/designer.properties | 1 + .../src/com/fr/design/locale/designer_en_US.properties | 1 + .../src/com/fr/design/locale/designer_ja_JP.properties | 1 + .../src/com/fr/design/locale/designer_ko_KR.properties | 1 + .../src/com/fr/design/locale/designer_zh_CN.properties | 1 + .../src/com/fr/design/locale/designer_zh_TW.properties | 1 + .../src/com/fr/design/present/dict/TableDataDictPane.java | 4 ++-- 7 files changed, 8 insertions(+), 2 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 0e76f04d1..e646fce49 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -560,3 +560,4 @@ FR-Designer-Move_Tab_End=move to end FR-Designer-Move_Tab_Next=move to next FR-Designer-Move_Tab_Prev=move to previous FR-Designer_DS_TableData=Data Set +FR-Designer_Parameter-Formula=Formula diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index cbcac747f..c8d6e2416 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -559,3 +559,4 @@ FR-Designer-Move_Tab_End=move to end FR-Designer-Move_Tab_Next=move to next FR-Designer-Move_Tab_Prev=move to previous FR-Designer_DS_TableData=Data Set +FR-Designer_Parameter-Formula=Formula diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index 6470f8957..7f8e213d3 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -538,3 +538,4 @@ 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_Parameter-Formula=\u6570\u5F0F diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index 37be51e56..dd21783e5 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -533,3 +533,4 @@ 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_Parameter-Formula=\uC218\uC2DD diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 2f5549d9d..19dc89f05 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -563,4 +563,5 @@ 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_Parameter-Formula=\u516C\u5F0F diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index c78ba8f15..7ef1c87c0 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -551,3 +551,4 @@ 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_Parameter-Formula=\u516C\u5F0F diff --git a/designer_base/src/com/fr/design/present/dict/TableDataDictPane.java b/designer_base/src/com/fr/design/present/dict/TableDataDictPane.java index c51fe8b4a..4e454ee9b 100644 --- a/designer_base/src/com/fr/design/present/dict/TableDataDictPane.java +++ b/designer_base/src/com/fr/design/present/dict/TableDataDictPane.java @@ -77,7 +77,7 @@ public class TableDataDictPane extends FurtherBasicBeanPane } }); keyColumnPane = ValueEditorPaneFactory.createValueEditorPane(new Editor[]{new ColumnNameEditor(), new ColumnIndexEditor()}); - FormulaEditor formulaEditor = new FormulaEditor(Inter.getLocText("FR-Engine_Parameter-Formula")); + FormulaEditor formulaEditor = new FormulaEditor(Inter.getLocText("FR-Designer_Parameter-Formula")); formulaEditor.setEnabled(true); valueDictPane = ValueEditorPaneFactory.createValueEditorPane(new Editor[]{new ColumnNameEditor(), new ColumnIndexEditor(), formulaEditor}); } @@ -158,7 +158,7 @@ public class TableDataDictPane extends FurtherBasicBeanPane columnIndexEditor1.addItemListener(itemListener); keyColumnPane.setEditors(new Editor[]{columnNameEditor1, columnIndexEditor1}, columnNames[0]); - FormulaEditor formulaEditor = new FormulaEditor(Inter.getLocText("FR-Engine_Parameter-Formula")); + FormulaEditor formulaEditor = new FormulaEditor(Inter.getLocText("FR-Designer_Parameter-Formula")); formulaEditor.setEnabled(true); formulaEditor.addChangeListener(new ChangeListener() { From 8466a90f383291fa84a75284215552e476f44d22 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Mon, 13 Feb 2017 15:37:37 +0800 Subject: [PATCH 087/343] =?UTF-8?q?=E6=97=A0jira=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=EF=BC=8C=E6=B7=BB=E5=8A=A0=E4=B9=8B=E5=89=8D=E6=BC=8F=E5=8A=A0?= =?UTF-8?q?=E7=9A=84=E5=9B=BD=E9=99=85=E5=8C=96key?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/locale/designer_en_US.properties | 1 + .../src/com/fr/design/locale/designer_ja_JP.properties | 1 + .../src/com/fr/design/locale/designer_ko_KR.properties | 3 ++- .../src/com/fr/design/locale/designer_zh_CN.properties | 2 +- .../src/com/fr/design/locale/designer_zh_TW.properties | 1 + 5 files changed, 6 insertions(+), 2 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index c06215bc6..c9d2bb942 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -543,3 +543,4 @@ 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_Role=Role \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index c2fb91f25..e3675b6b2 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -522,3 +522,4 @@ FR-Designer-Move_Tab_First= FR-Designer-Move_Tab_End= FR-Designer-Move_Tab_Next= FR-Designer-Move_Tab_Prev= +FR-Designer_Role= \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index 03d1a11f4..83f25ec30 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -516,4 +516,5 @@ FR-Designer_ClassName=\uD074\uB798\uC2A4\uB124\uC784 FR-Designer-Move_Tab_First= FR-Designer-Move_Tab_End= FR-Designer-Move_Tab_Next= -FR-Designer-Move_Tab_Prev= \ No newline at end of file +FR-Designer-Move_Tab_Prev= +FR-Designer_Role= \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 6fdea224d..38e407ce9 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -547,4 +547,4 @@ 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_Role=\u89D2\u8272 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index c47170e57..23159357c 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -535,3 +535,4 @@ 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_Role= \ No newline at end of file From 28317954b67b74739ef2dea1375071a0f5b6651c Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 13 Feb 2017 15:50:35 +0800 Subject: [PATCH 088/343] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E3=80=82=E6=96=B0=E5=A2=9E=E5=9B=BD=E9=99=85=E5=8C=96key?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/locale/designer.properties | 2 ++ .../src/com/fr/design/locale/designer_en_US.properties | 4 +++- .../src/com/fr/design/locale/designer_ja_JP.properties | 4 +++- .../src/com/fr/design/locale/designer_ko_KR.properties | 2 ++ .../src/com/fr/design/locale/designer_zh_CN.properties | 4 +++- .../src/com/fr/design/locale/designer_zh_TW.properties | 4 +++- 6 files changed, 16 insertions(+), 4 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 117824597..eb1d6a7df 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -557,3 +557,5 @@ 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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index 6bf08eab6..e5f89932f 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -556,4 +556,6 @@ 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 \ No newline at end of file +FR-Designer_Pagination=Page Break +FR-Designer_DS_TableData=Data Set +FR-Designer_Parameter-Formula=Formula \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index 91ab6618a..9b6ce1989 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -530,4 +530,6 @@ 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 \ No newline at end of file +FR-Designer_Pagination=\u30DA\u30FC\u30B8\u30F3\u30B0 +FR-Designer_DS_TableData=\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9 +FR-Designer_Parameter-Formula=\u6570\u5F0F diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index b1c5df2d6..22f6dd541 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -532,3 +532,5 @@ 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_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 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 849c4c691..b5a5106ce 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -560,4 +560,6 @@ 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 \ No newline at end of file +FR-Designer_Pagination=\u5206\u9875 +FR-Designer_DS_TableData=\u6570\u636E\u96C6 +FR-Designer_Parameter-Formula=\u516C\u5F0F diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 3f1c33051..369939567 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -548,4 +548,6 @@ 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 \ No newline at end of file +FR-Designer_Pagination=\u5206\u9801 +FR-Designer_DS_TableData=\u8CC7\u6599\u96C6 +FR-Designer_Parameter-Formula=\u516C\u5F0F From c34133b1c7e5bffac8d5c2d95d64c874e2003c27 Mon Sep 17 00:00:00 2001 From: juhaoyu <2335173323@qq.com> Date: Mon, 13 Feb 2017 17:34:28 +0800 Subject: [PATCH 089/343] =?UTF-8?q?=E6=8F=90=E7=A4=BA=E5=8D=87=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/fun/HyperlinkProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/fun/HyperlinkProvider.java b/designer_base/src/com/fr/design/fun/HyperlinkProvider.java index e6eccc882..9f0a53cfa 100644 --- a/designer_base/src/com/fr/design/fun/HyperlinkProvider.java +++ b/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 { String XML_TAG = "HyperlinkProvider"; - int CURRENT_LEVEL = 1; + int CURRENT_LEVEL = 2; /** From c6a96cc457ee95cf1cb21519677571047c425589 Mon Sep 17 00:00:00 2001 From: juhaoyu <2335173323@qq.com> Date: Mon, 13 Feb 2017 20:09:50 +0800 Subject: [PATCH 090/343] =?UTF-8?q?=E6=8F=90=E7=A4=BA=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=8D=87=E7=BA=A7=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/fun/HyperlinkProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/fun/HyperlinkProvider.java b/designer_base/src/com/fr/design/fun/HyperlinkProvider.java index e6eccc882..9f0a53cfa 100644 --- a/designer_base/src/com/fr/design/fun/HyperlinkProvider.java +++ b/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 { String XML_TAG = "HyperlinkProvider"; - int CURRENT_LEVEL = 1; + int CURRENT_LEVEL = 2; /** From 30aaf866f768cf46b1d02038fe9c0dca5544e0f9 Mon Sep 17 00:00:00 2001 From: plough Date: Tue, 14 Feb 2017 10:42:17 +0800 Subject: [PATCH 091/343] =?UTF-8?q?REPORT-1266=20=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=8D=87=E7=BA=A7=E6=8F=90=E7=A4=BA,=20?= =?UTF-8?q?=E6=94=B9=E6=88=90"=E6=8F=92=E4=BB=B6=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E8=BF=87=E4=BD=8E,=20=E5=AD=98=E5=9C=A8API=E4=B8=8D=E5=85=BC?= =?UTF-8?q?=E5=AE=B9,=20=E8=AF=B7=E8=81=94=E7=B3=BB=E5=BC=80=E5=8F=91?= =?UTF-8?q?=E8=80=85=E5=8D=87=E7=BA=A7=E6=8F=92=E4=BB=B6"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/locale/designer.properties | 1 + .../src/com/fr/design/locale/designer_en_US.properties | 1 + .../src/com/fr/design/locale/designer_ja_JP.properties | 1 + .../src/com/fr/design/locale/designer_ko_KR.properties | 1 + .../src/com/fr/design/locale/designer_zh_CN.properties | 1 + .../src/com/fr/design/locale/designer_zh_TW.properties | 1 + designer_base/src/com/fr/start/BaseDesigner.java | 2 +- 7 files changed, 7 insertions(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index e646fce49..536366287 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -561,3 +561,4 @@ FR-Designer-Move_Tab_Next=move to next FR-Designer-Move_Tab_Prev=move to previous FR-Designer_DS_TableData=Data Set FR-Designer_Parameter-Formula=Formula +FR-Designer_Plugin_Should_Update_Please_Contact_Developer=Plugin version is too low, and is not compatible with current API. Please contact the developer to update. diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index c8d6e2416..1ca764319 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -560,3 +560,4 @@ FR-Designer-Move_Tab_Next=move to next FR-Designer-Move_Tab_Prev=move to previous FR-Designer_DS_TableData=Data Set FR-Designer_Parameter-Formula=Formula +FR-Designer_Plugin_Should_Update_Please_Contact_Developer=Plugin version is too low, and is not compatible with current API. Please contact the developer to update. diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index 7f8e213d3..4255c9bf2 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -539,3 +539,4 @@ FR-Designer-Move_Tab_Next= FR-Designer-Move_Tab_Prev= FR-Designer_DS_TableData=\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9 FR-Designer_Parameter-Formula=\u6570\u5F0F +FR-Designer_Plugin_Should_Update_Please_Contact_Developer= diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index dd21783e5..fca78cef6 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -534,3 +534,4 @@ FR-Designer-Move_Tab_Next= FR-Designer-Move_Tab_Prev= FR-Designer_DS_TableData=\uB370\uC774\uD130\uC138\uD2B8 FR-Designer_Parameter-Formula=\uC218\uC2DD +FR-Designer_Plugin_Should_Update_Please_Contact_Developer= diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 19dc89f05..239d25bb7 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -564,4 +564,5 @@ 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_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 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 7ef1c87c0..32ba1063e 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -552,3 +552,4 @@ 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_Parameter-Formula=\u516C\u5F0F +FR-Designer_Plugin_Should_Update_Please_Contact_Developer=\u633F\u4EF6\u7248\u672C\u904E\u4F4E\uFF0C\u5B58\u5728API\u4E0D\u76F8\u5BB9\uFF0C\u8ACB\u806F\u7CFB\u958B\u767C\u8005\u965E\u7D1A\u633F\u4EF6 diff --git a/designer_base/src/com/fr/start/BaseDesigner.java b/designer_base/src/com/fr/start/BaseDesigner.java index 016ad604d..0e036c534 100644 --- a/designer_base/src/com/fr/start/BaseDesigner.java +++ b/designer_base/src/com/fr/start/BaseDesigner.java @@ -124,7 +124,7 @@ public abstract class BaseDesigner extends ToolBarMenuDock { public void actionPerformed(ActionEvent e) { String[] plugins = PluginCollector.getCollector().getErrorPlugins(); 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); if (r == JOptionPane.OK_OPTION) { WebDialog.createPluginDialog(); From ccb995b9a955ac0b2bfcb5ab9688d18f11a9f44c Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Tue, 14 Feb 2017 11:40:37 +0800 Subject: [PATCH 092/343] REPORT-637 --- .../fr/design/widget/CellWidgetCardPane.java | 129 ++++++++++-------- .../com/fr/design/locale/designer.properties | 4 +- 2 files changed, 71 insertions(+), 62 deletions(-) diff --git a/designer/src/com/fr/design/widget/CellWidgetCardPane.java b/designer/src/com/fr/design/widget/CellWidgetCardPane.java index 5d4cf74a5..8ba9d3235 100644 --- a/designer/src/com/fr/design/widget/CellWidgetCardPane.java +++ b/designer/src/com/fr/design/widget/CellWidgetCardPane.java @@ -20,24 +20,28 @@ import java.awt.*; * carl :单独弄出来 */ public class CellWidgetCardPane extends BasicPane { - // 当前的编辑器属性定义面板 + //当前的编辑器属性定义面板 private DataModify currentEditorDefinePane; - + //属性配置切换面板 private JTabbedPane tabbedPane; - private BasicWidgetPropertySettingPane widgetPropertyPane; - private JPanel attriPane; - private JPanel cardPane; - private CardLayout card; - private JPanel presPane; - private JPanel cardPaneForPresent; - private CardLayout cardForPresent; + //通用属性容器 + private JPanel attriTabPane; + 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) { this.initComponents(pane); @@ -47,26 +51,26 @@ public class CellWidgetCardPane extends BasicPane { this.setLayout(FRGUIPaneFactory.createBorderLayout()); tabbedPane = new UITabbedPane(); this.add(tabbedPane, BorderLayout.CENTER); - attriPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); - formPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); - eventTabPane = new WidgetEventPane(pane); - formPane.add(eventTabPane, BorderLayout.CENTER); - tabbedPane.add(Inter.getLocText("FR-Designer_Attribute"), attriPane); - tabbedPane.add(Inter.getLocText("FR-Designer_Form_Editing_Listeners"), formPane); + attriTabPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + eventTabPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + eventPane = new WidgetEventPane(pane); + eventTabPane.add(eventPane, BorderLayout.CENTER); + tabbedPane.add(Inter.getLocText("FR-Designer_Attribute"), attriTabPane); + tabbedPane.add(Inter.getLocText("FR-Designer_Form_Editing_Listeners"), eventTabPane); - presPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); - cardPaneForPresent = FRGUIPaneFactory.createCardLayout_S_Pane(); - presPane.add(cardPaneForPresent, BorderLayout.CENTER); - cardForPresent = new CardLayout(); - cardPaneForPresent.setLayout(cardForPresent); + dictTabPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + dictCardPane = FRGUIPaneFactory.createCardLayout_S_Pane(); + dictTabPane.add(dictCardPane, BorderLayout.CENTER); + dictCardLayout = new CardLayout(); + dictCardPane.setLayout(dictCardLayout); - cardPaneForTreeSetting = FRGUIPaneFactory.createBorderLayout_L_Pane(); + treeTabPane = FRGUIPaneFactory.createBorderLayout_L_Pane(); widgetPropertyPane = new BasicWidgetPropertySettingPane(); - attriPane.add(widgetPropertyPane, BorderLayout.NORTH); - cardPane = FRGUIPaneFactory.createCardLayout_S_Pane(); - attriPane.add(cardPane, BorderLayout.CENTER); - card = (CardLayout) cardPane.getLayout(); + attriTabPane.add(widgetPropertyPane, BorderLayout.NORTH); + attriCardPane = FRGUIPaneFactory.createCardLayout_S_Pane(); + attriTabPane.add(attriCardPane, BorderLayout.CENTER); + attriCardLayout = (CardLayout) attriCardPane.getLayout(); this.setPreferredSize(new Dimension(600, 450)); } @@ -84,49 +88,53 @@ public class CellWidgetCardPane extends BasicPane { this.tabbedPane.setEnabled(true); } - attriPane.remove(widgetPropertyPane); + attriTabPane.remove(widgetPropertyPane); widgetPropertyPane = new BasicWidgetPropertySettingPane(); JPanel northPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); northPane.setBorder(BorderFactory.createEmptyBorder(5, 8, 0, 8)); JPanel basic = FRGUIPaneFactory.createTitledBorderPane(Inter.getLocText("FR-Designer_Form_Basic_Properties")); northPane.add(basic); basic.add(widgetPropertyPane); - attriPane.add(northPane, BorderLayout.NORTH); + attriTabPane.add(northPane, BorderLayout.NORTH); WidgetDefinePaneFactory.RN rn = WidgetDefinePaneFactory.createWidgetDefinePane(cellWidget, new Operator() { @Override public void did(DataCreatorUI ui, String cardName) { if (ui == null) { - addPresPane(false); - addTreeSettingPane(false); + removeDictAttriPane(); + removeTreeAttriPane(); } if (ui instanceof DictionaryPane) { + removeDictAttriPane(); + removeTreeAttriPane(); showDictPane(ui, cardName); } else if (ui instanceof TreeSettingPane) { + removeDictAttriPane(); + removeTreeAttriPane(); showTreePane(ui); } } }); DataModify definePane = rn.getDefinePane(); - cardPane.add(definePane.toSwingComponent(), rn.getCardName()); - card.show(cardPane, rn.getCardName()); + attriCardPane.add(definePane.toSwingComponent(), rn.getCardName()); + attriCardLayout.show(attriCardPane, rn.getCardName()); currentEditorDefinePane = definePane; - eventTabPane.populate(cellWidget); + eventPane.populate(cellWidget); widgetPropertyPane.populate(cellWidget); tabbedPane.setSelectedIndex(0); } private void showDictPane(DataCreatorUI ui, String cardName) { - cardPaneForPresent.removeAll(); - cardPaneForPresent.add(ui.toSwingComponent(), cardName); - cardForPresent.show(cardPaneForPresent, cardName); - addPresPane(true); + dictCardPane.removeAll(); + dictCardPane.add(ui.toSwingComponent(), cardName); + dictCardLayout.show(dictCardPane, cardName); + addDictAttriPane(); } private void showTreePane(DataCreatorUI ui) { - cardPaneForTreeSetting.removeAll(); - cardPaneForTreeSetting.add(ui.toSwingComponent()); - addTreeSettingPane(true); + treeTabPane.removeAll(); + treeTabPane.add(ui.toSwingComponent()); + addTreeAttriPane(); } public Widget update() { @@ -139,7 +147,7 @@ public class CellWidgetCardPane extends BasicPane { } widgetPropertyPane.update(widget); - Listener[] listener = eventTabPane == null ? new Listener[0] : eventTabPane.updateListeners(); + Listener[] listener = eventPane == null ? new Listener[0] : eventPane.updateListeners(); widget.clearListeners(); for (Listener l : listener) { widget.addListener(l); @@ -155,25 +163,26 @@ public class CellWidgetCardPane extends BasicPane { */ public void checkValid() throws Exception { currentEditorDefinePane.checkValid(); - eventTabPane.checkValid(); + eventPane.checkValid(); } - //:jackie 如果选择的项有形态,则将形态面板加入tab面板 - private void addPresPane(boolean add) { - if (add) { - tabbedPane.add(this.presPane, 1); - tabbedPane.setTitleAt(1, Inter.getLocText("FR-Designer_DS_Dictionary")); - } else { - tabbedPane.remove(presPane); - } + + private void addDictAttriPane() { + tabbedPane.add(this.dictTabPane, 1); + tabbedPane.setTitleAt(1, Inter.getLocText("FR-Designer_DS_Dictionary")); } - private void addTreeSettingPane(boolean add) { - if (add) { - tabbedPane.add(this.cardPaneForTreeSetting, 1); - tabbedPane.setTitleAt(1, Inter.getLocText("FR-Designer_Create_Tree")); - } else { - tabbedPane.remove(this.cardPaneForTreeSetting); - } + private void addTreeAttriPane() { + tabbedPane.add(this.treeTabPane, 1); + tabbedPane.setTitleAt(1, Inter.getLocText("FR-Designer_Create_Tree")); + } + + private void removeDictAttriPane() { + tabbedPane.remove(this.dictTabPane); } -} \ No newline at end of file + + private void removeTreeAttriPane() { + tabbedPane.remove(this.treeTabPane); + } + +} diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index e646fce49..508070d24 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -505,8 +505,8 @@ FR-Designer_JavaScript_Set= FR-Designer_Attribute= FR-Designer_Form_Editing_Listeners= FR-Designer_Form_Basic_Properties= -FR-Designer_DS_Dictionary= -FR-Designer_Create_Tree= +FR-Designer_DS_Dictionary=Data Dictionary +FR-Designer_Create_Tree=Build Tree FR-Designer_Set_Callback_Function= FR-Designer_ConfirmDialog_Content= FR-Designer_ConfirmDialog_Title= From 05b6fd9f8561e8b29dcdf0614fc1f1f9769e91e4 Mon Sep 17 00:00:00 2001 From: zhouping Date: Wed, 15 Feb 2017 12:46:15 +0800 Subject: [PATCH 093/343] =?UTF-8?q?REPORT-1940=20=E8=A1=A8=E5=8D=95?= =?UTF-8?q?=E4=BB=8E=E7=BB=9D=E5=AF=B9=E5=B8=83=E5=B1=80=E5=88=87=E6=8D=A2?= =?UTF-8?q?=E5=88=B0=E8=87=AA=E9=80=82=E5=BA=94=EF=BC=8C=E9=A2=84=E8=A7=88?= =?UTF-8?q?=E7=A9=BA=E7=99=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../properties/FRAbsoluteBodyLayoutPropertiesGroupModel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_form/src/com/fr/design/designer/properties/FRAbsoluteBodyLayoutPropertiesGroupModel.java b/designer_form/src/com/fr/design/designer/properties/FRAbsoluteBodyLayoutPropertiesGroupModel.java index b290bcccf..f864a6dd5 100644 --- a/designer_form/src/com/fr/design/designer/properties/FRAbsoluteBodyLayoutPropertiesGroupModel.java +++ b/designer_form/src/com/fr/design/designer/properties/FRAbsoluteBodyLayoutPropertiesGroupModel.java @@ -182,7 +182,7 @@ public class FRAbsoluteBodyLayoutPropertiesGroupModel extends FRAbsoluteLayoutPr private void moveComponents2FitLayout(XWFitLayout xwFitLayout) { int eachRowCount = 4; Component[] components = xwFitLayout.getComponents(); - if (components.length <= 1){ + if (components.length == 0){ xwFitLayout.updateBoundsWidget(); return; } From 4f599cdfa6c618e88f51b18a73b6e8bcf0941a78 Mon Sep 17 00:00:00 2001 From: zhouping Date: Wed, 15 Feb 2017 12:54:24 +0800 Subject: [PATCH 094/343] =?UTF-8?q?REPORT-1940=20=E8=A1=A8=E5=8D=95?= =?UTF-8?q?=E4=BB=8E=E7=BB=9D=E5=AF=B9=E5=B8=83=E5=B1=80=E5=88=87=E6=8D=A2?= =?UTF-8?q?=E5=88=B0=E8=87=AA=E9=80=82=E5=BA=94=EF=BC=8C=E9=A2=84=E8=A7=88?= =?UTF-8?q?=E7=A9=BA=E7=99=BD=20pmd?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...AbsoluteBodyLayoutPropertiesGroupModel.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/properties/FRAbsoluteBodyLayoutPropertiesGroupModel.java b/designer_form/src/com/fr/design/designer/properties/FRAbsoluteBodyLayoutPropertiesGroupModel.java index f864a6dd5..eb4b31154 100644 --- a/designer_form/src/com/fr/design/designer/properties/FRAbsoluteBodyLayoutPropertiesGroupModel.java +++ b/designer_form/src/com/fr/design/designer/properties/FRAbsoluteBodyLayoutPropertiesGroupModel.java @@ -26,8 +26,11 @@ import java.util.Comparator; public class FRAbsoluteBodyLayoutPropertiesGroupModel extends FRAbsoluteLayoutPropertiesGroupModel { private LayoutTypeEditor layoutTypeEditor; private LayoutTypeRenderer layoutTypeRenderer; + //默认body是0,自适应布局;1,绝对布局. private WBodyLayoutType layoutType = WBodyLayoutType.ABSOLUTE; + private static final int EACH_ROW_COUNT = 4; + public FRAbsoluteBodyLayoutPropertiesGroupModel(XWAbsoluteBodyLayout xwAbsoluteBodyLayout) { super(xwAbsoluteBodyLayout); } @@ -180,7 +183,6 @@ public class FRAbsoluteBodyLayoutPropertiesGroupModel extends FRAbsoluteLayoutPr // 把绝对布局中的元素按规则移动到自适应布局中 // 规则:各元素按顺序放置,其中每行最多4个元素,超出则换行,各元素均分body的高度和宽度 private void moveComponents2FitLayout(XWFitLayout xwFitLayout) { - int eachRowCount = 4; Component[] components = xwFitLayout.getComponents(); if (components.length == 0){ xwFitLayout.updateBoundsWidget(); @@ -191,17 +193,17 @@ public class FRAbsoluteBodyLayoutPropertiesGroupModel extends FRAbsoluteLayoutPr int leftMargin = xwFitLayout.toData().getMargin().getLeft(); int topMargin = xwFitLayout.toData().getMargin().getTop(); xwFitLayout.toData().setCompInterval(0); - int row = (components.length / eachRowCount) + (components.length % eachRowCount == 0 ? 0 : 1); + int row = (components.length / EACH_ROW_COUNT) + (components.length % EACH_ROW_COUNT == 0 ? 0 : 1); //最后一行的列数不定 - int column = components.length % eachRowCount == 0 ? eachRowCount : components.length % eachRowCount; - int componentWidth = layoutWidth / eachRowCount; + int column = components.length % EACH_ROW_COUNT == 0 ? EACH_ROW_COUNT : components.length % EACH_ROW_COUNT; + int componentWidth = layoutWidth / EACH_ROW_COUNT; int componentHeight = layoutHeight / row; for(int i = 0;i < row - 1;i++){ - for(int j = 0;j < eachRowCount;j++){ - components[eachRowCount * i + j].setBounds( + for(int j = 0;j < EACH_ROW_COUNT;j++){ + components[EACH_ROW_COUNT * i + j].setBounds( leftMargin + componentWidth * j, topMargin + componentHeight * i, - j == eachRowCount - 1 ? layoutWidth - componentWidth * (eachRowCount - 1) : componentWidth, + j == EACH_ROW_COUNT - 1 ? layoutWidth - componentWidth * (EACH_ROW_COUNT - 1) : componentWidth, componentHeight ); } @@ -210,7 +212,7 @@ public class FRAbsoluteBodyLayoutPropertiesGroupModel extends FRAbsoluteLayoutPr int lastRowWidth = layoutWidth / column; int lastRowHeight = layoutHeight - componentHeight * (row - 1); for (int i = 0;i < column;i++) { - components[eachRowCount * (row - 1) + i].setBounds( + components[EACH_ROW_COUNT * (row - 1) + i].setBounds( leftMargin + lastRowWidth * i, topMargin + componentHeight * (row - 1), i == column - 1 ? layoutWidth - lastRowWidth * (column - 1) : lastRowWidth, From 6bdcfc81df10256e22bc9911a05f3b416467b393 Mon Sep 17 00:00:00 2001 From: fr_shine Date: Thu, 16 Feb 2017 11:59:53 +0800 Subject: [PATCH 095/343] =?UTF-8?q?=E5=8D=95=E5=85=83=E6=A0=BC=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E7=B3=BB=E5=88=97=E5=80=BC=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../report/AbstractReportDataContentPane.java | 17 +++++++++++++++++ .../CategoryPlotReportDataContentPane.java | 15 --------------- .../report/PiePlotReportDataContentPane.java | 15 --------------- 3 files changed, 17 insertions(+), 30 deletions(-) diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/data/report/AbstractReportDataContentPane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/data/report/AbstractReportDataContentPane.java index 4ff643522..768ecb7e8 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/data/report/AbstractReportDataContentPane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/data/report/AbstractReportDataContentPane.java @@ -3,6 +3,8 @@ package com.fr.design.mainframe.chart.gui.data.report; import com.fr.base.Formula; import com.fr.base.Utils; import com.fr.chart.chartattr.ChartCollection; +import com.fr.chart.chartdata.NormalReportDataDefinition; +import com.fr.chart.chartdata.SeriesDefinition; import com.fr.design.beans.BasicBeanPane; import com.fr.design.constants.UIConstants; import com.fr.design.event.UIObserverListener; @@ -16,6 +18,7 @@ import com.fr.stable.StableUtils; import javax.swing.*; import javax.swing.event.ChangeEvent; import java.awt.*; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -95,6 +98,20 @@ public abstract class AbstractReportDataContentPane extends BasicBeanPane Date: Thu, 16 Feb 2017 14:28:49 +0800 Subject: [PATCH 096/343] pmd --- .../chart/gui/data/report/PiePlotReportDataContentPane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/data/report/PiePlotReportDataContentPane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/data/report/PiePlotReportDataContentPane.java index f94160a74..3c8d6a48e 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/data/report/PiePlotReportDataContentPane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/data/report/PiePlotReportDataContentPane.java @@ -24,7 +24,7 @@ public class PiePlotReportDataContentPane extends AbstractReportDataContentPane public PiePlotReportDataContentPane(ChartDataPane parent) { initEveryPane(); - this.add(new BoldFontTextLabel(Inter.getLocText("Data_Filter")), "0,4,2,4"); + this.add(new BoldFontTextLabel(Inter.getLocText("FR-Chart-Data_Filter")), "0,4,2,4"); this.add(filterPane = new ChartDataFilterPane(new PiePlot(), parent), "0,6,2,4"); } From 1c69242ce3916691e19dbb630903d6661ed0f241 Mon Sep 17 00:00:00 2001 From: plough Date: Thu, 16 Feb 2017 15:46:06 +0800 Subject: [PATCH 097/343] =?UTF-8?q?REPORT-1182=20=E5=AE=89=E8=A3=85?= =?UTF-8?q?=E5=90=8E=E4=BC=9A=E5=9C=A8=E5=B7=A5=E5=85=B7=E6=A0=8F=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E6=A1=86=E4=B8=AD=E5=8A=A0=E4=B8=80=E6=9D=A1=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E7=9A=84=E6=8F=92=E4=BB=B6=EF=BC=8C=E5=9C=A8=E8=BF=9C?= =?UTF-8?q?=E7=A8=8B=E8=AE=BE=E8=AE=A1=E9=87=8D=E5=90=AF=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=99=A8=E6=97=B6=E6=9C=AA=E9=87=8D=E6=96=B0=E8=BF=9E=E6=8E=A5?= =?UTF-8?q?=E8=BF=9C=E7=A8=8B=E7=9B=AE=E5=BD=95=EF=BC=8C=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E6=97=B6=E4=BC=9A=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/env/RemoteEnv.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/designer_base/src/com/fr/env/RemoteEnv.java b/designer_base/src/com/fr/env/RemoteEnv.java index a0bdc0e13..4284b2155 100644 --- a/designer_base/src/com/fr/env/RemoteEnv.java +++ b/designer_base/src/com/fr/env/RemoteEnv.java @@ -1483,6 +1483,8 @@ public class RemoteEnv implements Env { * @throws Exception 异常 */ public boolean writeSvgFile(SvgProvider svgFile) throws Exception { + testServerConnection(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "design_save_svg"); @@ -1534,6 +1536,8 @@ public class RemoteEnv implements Env { */ @Override public boolean writeResource(XMLFileManagerProvider mgr) throws Exception { + testServerConnection(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "design_save_resource"); From 95532609161c441ef57685609c527b73fda782cf Mon Sep 17 00:00:00 2001 From: zhouping Date: Thu, 16 Feb 2017 16:19:41 +0800 Subject: [PATCH 098/343] =?UTF-8?q?REPORT-1814=20=E8=A1=A8=E5=8D=95tab?= =?UTF-8?q?=E5=9D=97=E7=9A=84=E6=94=B9=E8=89=AFbug=20=E8=BD=AE=E6=92=ADbug?= =?UTF-8?q?=E4=BB=A5=E5=8F=8A=E9=A1=B5=E7=AD=BE=E6=8B=96=E5=8A=A8=E7=9A=84?= =?UTF-8?q?bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/locale/designer_en_US.properties | 6 +++--- .../creator/cardlayout/TabMoveEndAction.java | 2 ++ .../cardlayout/TabMoveFirstAction.java | 2 ++ .../creator/cardlayout/TabMoveNextAction.java | 2 ++ .../creator/cardlayout/TabMovePrevAction.java | 2 ++ .../creator/cardlayout/XWCardLayout.java | 4 ++-- ...bsoluteBodyLayoutPropertiesGroupModel.java | 20 ++++++++++--------- .../mainframe/EditingMouseListener.java | 5 +++++ 8 files changed, 29 insertions(+), 14 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index 24c7a87c7..a871d47aa 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -525,9 +525,9 @@ FR-Designer_Background_Gradient_Color=Gradient Color FR-Designer_Background_Image=Image FR-Designer_Background_Clear=Clear FR-Designer_Background_Image_Select=Select Picture -FR-Designer_Tab_carousel= -FR-Designer_setCarousel= -FR-Designer_carouselInterval= +FR-Designer_Tab_carousel=tab carousel +FR-Designer_setCarousel=set carousel +FR-Designer_carouselInterval=interval FR-Designer_Initial_Background_Tips=Initial background of the button FR-Designer_Mouse_Move_Tips=Move the mouse to the button on the background, in the absence of not changing the background FR-Designer_Mouse_Click_Tips=The background of the mouse to click the button, in the absence of not changing the background diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveEndAction.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveEndAction.java index ae101dbe4..b2a5214c4 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveEndAction.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveEndAction.java @@ -47,6 +47,8 @@ public class TabMoveEndAction extends FormUndoableAction { currentButton.setIndex(maxIndex - 1); currentTab.setIndex(maxIndex - 1); currentTab.setTabNameIndex(maxIndex - 1); + xwCardLayout.toData().setShowIndex(maxIndex - 1); + xwCardLayout.showCard(); xwCardTagLayout.setSwitchingTab(false); }catch (Exception e){ xwCardTagLayout.setSwitchingTab(false); diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveFirstAction.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveFirstAction.java index 0d6047636..c9034d04b 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveFirstAction.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveFirstAction.java @@ -46,6 +46,8 @@ public class TabMoveFirstAction extends FormUndoableAction { currentButton.setIndex(0); currentTab.setIndex(0); currentTab.setTabNameIndex(0); + xwCardLayout.toData().setShowIndex(0); + xwCardLayout.showCard(); xwCardTagLayout.setSwitchingTab(false); }catch (Exception e){ xwCardTagLayout.setSwitchingTab(false); diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveNextAction.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveNextAction.java index 15bfa7337..e7806a7ae 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveNextAction.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveNextAction.java @@ -45,6 +45,8 @@ public class TabMoveNextAction extends FormUndoableAction { currentButton.setIndex(currentIndex + 1); currentTab.setIndex(currentIndex + 1); currentTab.setTabNameIndex(currentIndex + 1); + xwCardLayout.toData().setShowIndex(currentIndex + 1); + xwCardLayout.showCard(); xwCardTagLayout.setSwitchingTab(false); }catch (Exception e){ xwCardTagLayout.setSwitchingTab(false); diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMovePrevAction.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMovePrevAction.java index cac70db82..e92852c6c 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMovePrevAction.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMovePrevAction.java @@ -45,6 +45,8 @@ public class TabMovePrevAction extends FormUndoableAction { currentButton.setIndex(currentIndex - 1); currentTab.setIndex(currentIndex - 1); currentTab.setTabNameIndex(currentIndex - 1); + xwCardLayout.toData().setShowIndex(currentIndex - 1); + xwCardLayout.showCard(); xwCardTagLayout.setSwitchingTab(false); }catch (Exception e){ xwCardTagLayout.setSwitchingTab(false); diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java index 32a7134ad..7597a4579 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java @@ -295,9 +295,9 @@ public class XWCardLayout extends XLayoutContainer { * 判断当前tab组件是不是嵌套的 * @return 嵌套与否 */ - private boolean isNested(){ + private boolean isNested() { XLayoutContainer xLayoutContainer = this.getBackupParent().getBackupParent(); - return xLayoutContainer != null && xLayoutContainer.acceptType(XWTabFitLayout.class); + return xLayoutContainer == null || xLayoutContainer.acceptType(XWTabFitLayout.class); } public CRPropertyDescriptor[] getisCarousel() throws IntrospectionException { diff --git a/designer_form/src/com/fr/design/designer/properties/FRAbsoluteBodyLayoutPropertiesGroupModel.java b/designer_form/src/com/fr/design/designer/properties/FRAbsoluteBodyLayoutPropertiesGroupModel.java index b290bcccf..eb4b31154 100644 --- a/designer_form/src/com/fr/design/designer/properties/FRAbsoluteBodyLayoutPropertiesGroupModel.java +++ b/designer_form/src/com/fr/design/designer/properties/FRAbsoluteBodyLayoutPropertiesGroupModel.java @@ -26,8 +26,11 @@ import java.util.Comparator; public class FRAbsoluteBodyLayoutPropertiesGroupModel extends FRAbsoluteLayoutPropertiesGroupModel { private LayoutTypeEditor layoutTypeEditor; private LayoutTypeRenderer layoutTypeRenderer; + //默认body是0,自适应布局;1,绝对布局. private WBodyLayoutType layoutType = WBodyLayoutType.ABSOLUTE; + private static final int EACH_ROW_COUNT = 4; + public FRAbsoluteBodyLayoutPropertiesGroupModel(XWAbsoluteBodyLayout xwAbsoluteBodyLayout) { super(xwAbsoluteBodyLayout); } @@ -180,9 +183,8 @@ public class FRAbsoluteBodyLayoutPropertiesGroupModel extends FRAbsoluteLayoutPr // 把绝对布局中的元素按规则移动到自适应布局中 // 规则:各元素按顺序放置,其中每行最多4个元素,超出则换行,各元素均分body的高度和宽度 private void moveComponents2FitLayout(XWFitLayout xwFitLayout) { - int eachRowCount = 4; Component[] components = xwFitLayout.getComponents(); - if (components.length <= 1){ + if (components.length == 0){ xwFitLayout.updateBoundsWidget(); return; } @@ -191,17 +193,17 @@ public class FRAbsoluteBodyLayoutPropertiesGroupModel extends FRAbsoluteLayoutPr int leftMargin = xwFitLayout.toData().getMargin().getLeft(); int topMargin = xwFitLayout.toData().getMargin().getTop(); xwFitLayout.toData().setCompInterval(0); - int row = (components.length / eachRowCount) + (components.length % eachRowCount == 0 ? 0 : 1); + int row = (components.length / EACH_ROW_COUNT) + (components.length % EACH_ROW_COUNT == 0 ? 0 : 1); //最后一行的列数不定 - int column = components.length % eachRowCount == 0 ? eachRowCount : components.length % eachRowCount; - int componentWidth = layoutWidth / eachRowCount; + int column = components.length % EACH_ROW_COUNT == 0 ? EACH_ROW_COUNT : components.length % EACH_ROW_COUNT; + int componentWidth = layoutWidth / EACH_ROW_COUNT; int componentHeight = layoutHeight / row; for(int i = 0;i < row - 1;i++){ - for(int j = 0;j < eachRowCount;j++){ - components[eachRowCount * i + j].setBounds( + for(int j = 0;j < EACH_ROW_COUNT;j++){ + components[EACH_ROW_COUNT * i + j].setBounds( leftMargin + componentWidth * j, topMargin + componentHeight * i, - j == eachRowCount - 1 ? layoutWidth - componentWidth * (eachRowCount - 1) : componentWidth, + j == EACH_ROW_COUNT - 1 ? layoutWidth - componentWidth * (EACH_ROW_COUNT - 1) : componentWidth, componentHeight ); } @@ -210,7 +212,7 @@ public class FRAbsoluteBodyLayoutPropertiesGroupModel extends FRAbsoluteLayoutPr int lastRowWidth = layoutWidth / column; int lastRowHeight = layoutHeight - componentHeight * (row - 1); for (int i = 0;i < column;i++) { - components[eachRowCount * (row - 1) + i].setBounds( + components[EACH_ROW_COUNT * (row - 1) + i].setBounds( leftMargin + lastRowWidth * i, topMargin + componentHeight * (row - 1), i == column - 1 ? layoutWidth - lastRowWidth * (column - 1) : lastRowWidth, diff --git a/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java b/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java index f1f61b2b2..88dc9268f 100644 --- a/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java +++ b/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java @@ -11,6 +11,7 @@ import com.fr.design.designer.beans.location.Location; import com.fr.design.designer.beans.models.SelectionModel; import com.fr.design.designer.beans.models.StateModel; import com.fr.design.designer.creator.*; +import com.fr.design.designer.creator.cardlayout.XCardSwitchButton; import com.fr.design.form.util.XCreatorConstants; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.xpane.ToolTipEditor; @@ -519,6 +520,10 @@ public class EditingMouseListener extends MouseInputAdapter { public void mouseClicked(MouseEvent e) { XCreator creator = designer.getComponentAt(e); + if (e.getButton() != MouseEvent.BUTTON1 && !creator.acceptType(XCardSwitchButton.class)) { + return; + } + creator = processTopLayoutMouseClick(creator); if(creator != null){ From d6b22c772d202e1beb0e1f440bead7e92b40c48f Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Thu, 16 Feb 2017 19:24:41 +0800 Subject: [PATCH 099/343] REPORT-1899 --- .../adapters/layout/FRBodyLayoutAdapter.java | 298 ++++++++++-------- .../layout/FRTabFitLayoutAdapter.java | 120 +++---- 2 files changed, 227 insertions(+), 191 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRBodyLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRBodyLayoutAdapter.java index 313c08b02..dc1fb7d36 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRBodyLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRBodyLayoutAdapter.java @@ -2,6 +2,7 @@ package com.fr.design.designer.beans.adapters.layout; import com.fr.design.designer.creator.XCreator; 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.utils.ComponentUtils; import com.fr.form.ui.PaddingMargin; @@ -17,7 +18,7 @@ import java.util.*; * 所以把公共的方法挪动这边父类里来 * 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_BOTTOM = 2; protected static final int COMP_LEFT = 3; @@ -49,6 +50,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{ protected int minHeight = 0; protected int actualVal = 0; // 存在间隔时,add move drag 判断对齐等都要考虑 protected PaddingMargin margin; // 布局容器边距 + /** * 在添加组件状态时,当鼠标移动到某个容器上方时,如果该容器有布局管理器,则会调用该布局 * 管理适配器的accept来决定当前位置是否可以放置,并提供特殊的标识,比如红色区域标识。比 @@ -76,9 +78,10 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{ /** * 交叉点区域时,能否对应位置放入组件 + * * @param comp 待放置组件 - * @param x x - * @param y y + * @param x x + * @param y y * @return 能否放入 */ protected boolean canAcceptWhileCrossPoint(Component comp, int x, int y) { @@ -95,7 +98,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{ min = isNotDefaultArea ? min : minWidth * 2; } else if (ComparatorUtils.equals(crossPointAreaDirect, COMP_RIGHT_BOTTOM)) { 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); minLength = isNotDefaultArea ? Math.min(cH, rightComp.getHeight()) : Math.min(cW, bottomComp.getWidth()); min = isNotDefaultArea ? min : minWidth * 2; @@ -105,12 +108,12 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{ minLength = isNotDefaultArea ? Math.min(cW, bottomComp.getWidth()) : Math.min(cH, leftComp.getHeight()); min = isNotDefaultArea ? minWidth * 2 : min; } 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); 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)) { - 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)) { leftComp = container.getBottomLeftComp(cX, cY, cH); rightComp = container.getBottomRightComp(cX, cY, cH, cW); @@ -129,9 +132,10 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{ /** * 三等分区域时,能否对应位置放入组件 + * * @param comp 待放置组件 - * @param x x - * @param y y + * @param x x + * @param y y * @return 能否放入 */ protected boolean canAcceptWhileTrisection(Component comp, int x, int y) { @@ -142,28 +146,28 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{ upMinHeight = getUpMinHeightComp(cY, x); downMinHeight = getDownMinHeightComp(comp, y); 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); - if (cY + cH + DEFAULT_AREA_LENGTH>container.getHeight() - margin.getBottom()){ + if (cY + cH + DEFAULT_AREA_LENGTH > container.getHeight() - margin.getBottom()) { downMinHeight = 0; } else { Component targetComp = container.getBottomComp(x, cY, cH); downMinHeight = getDownMinHeightComp(targetComp, cY + cH + DEFAULT_AREA_LENGTH + actualVal); } - return downMinHeight == 0 ? (upMinHeight >= minHeight * 2 + actualVal) : ((upMinHeight+downMinHeight) >= minHeight * 3 + actualVal); - } else if(ComparatorUtils.equals(trisectAreaDirect, COMP_LEFT)) { - rightMinWidth = getMinRightWidth(cX, 0, y); - if(cX - DEFAULT_AREA_LENGTH < margin.getLeft()) { + return downMinHeight == 0 ? (upMinHeight >= minHeight * 2 + actualVal) : ((upMinHeight + downMinHeight) >= minHeight * 3 + actualVal); + } else if (ComparatorUtils.equals(trisectAreaDirect, COMP_LEFT)) { + rightMinWidth = getMinRightWidth(cX, 0, y); + if (cX - DEFAULT_AREA_LENGTH < margin.getLeft()) { leftMinWidth = 0; } else { Component targetRightComp = container.getLeftComp(cX, y); leftMinWidth = getMinLeftWidth(targetRightComp, cX - DEFAULT_AREA_LENGTH - actualVal); } - return leftMinWidth == 0 ? (rightMinWidth >= minWidth * 2 + actualVal) : ((leftMinWidth+rightMinWidth) >= minWidth * 3 + actualVal); - } else if(ComparatorUtils.equals(trisectAreaDirect, COMP_RIGHT)) { + return leftMinWidth == 0 ? (rightMinWidth >= minWidth * 2 + actualVal) : ((leftMinWidth + rightMinWidth) >= minWidth * 3 + actualVal); + } else if (ComparatorUtils.equals(trisectAreaDirect, COMP_RIGHT)) { leftMinWidth = getMinLeftWidth(comp, x); 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; } @@ -176,16 +180,16 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{ if (cY == margin.getTop()) { return 0; } - int max=container.getWidth() - margin.getRight(); + int max = container.getWidth() - margin.getRight(); int mouseX = x; int minHeight = cY; int bott = 0; if (isFindRelatedComps) { upComps = new ArrayList(); } - for(; mouseX margin.getLeft()) { + while (mouseX > margin.getLeft()) { Component comp = container.getTopComp(mouseX, cY); - bott = comp.getHeight() + comp.getY()+actualVal; + bott = comp.getHeight() + comp.getY() + actualVal; if (bott == cY) { if (comp.getHeight() < minHeight) { minHeight = comp.getHeight(); } - mouseX = comp.getX()-DEFAULT_AREA_LENGTH-actualVal; + mouseX = comp.getX() - DEFAULT_AREA_LENGTH - actualVal; if (isFindRelatedComps) { upComps.add(comp); } - } else{ + } else { break; } } @@ -231,13 +235,13 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{ int cX = currentcomp.getX(); int cY = currentcomp.getY(); int minHeight = currentcomp.getHeight(); - int max=container.getWidth() - margin.getRight(); + int max = container.getWidth() - margin.getRight(); if (isFindRelatedComps) { downComps = new ArrayList(); } int mouseX = cX + DEFAULT_AREA_LENGTH; while (mouseX < max) { - Component comp = container.getComponentAt(mouseX, y); + Component comp = container.getComponentAt(mouseX, y); if (comp.getY() == cY) { if (comp.getHeight() < minHeight) { minHeight = comp.getHeight(); @@ -246,12 +250,12 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{ if (isFindRelatedComps) { downComps.add(comp); } - }else{ + } else { break; } } mouseX = cX - DEFAULT_AREA_LENGTH - actualVal; - while(mouseX > margin.getLeft()) { + while (mouseX > margin.getLeft()) { Component comp = container.getComponentAt(mouseX, y); if (comp.getY() == cY) { if (comp.getHeight() < minHeight) { @@ -261,7 +265,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{ if (isFindRelatedComps) { downComps.add(comp); } - }else{ + } else { break; } } @@ -273,9 +277,9 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{ * 判断对齐时考虑间隔 */ 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); - if (xL > container.getWidth() - margin.getRight()){ + if (xL > container.getWidth() - margin.getRight()) { return 0; } // 以当前组件紧挨着右侧的组件为基准,在y轴方向查找符合条件的组件 @@ -286,7 +290,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{ rightComps = new ArrayList(); } int mouseY = targetComp.getY() + DEFAULT_AREA_LENGTH; - while (mouseY margin.getTop()) { + while (mouseY > margin.getTop()) { Component comp = container.getComponentAt(xL, mouseY); if (comp.getX() == targetComp.getX()) { if (comp.getWidth() < minWidth) { @@ -311,7 +315,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{ if (isFindRelatedComps) { rightComps.add(comp); } - }else{ + } else { break; } } @@ -329,9 +333,9 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{ if (isFindRelatedComps) { leftComps = new ArrayList(); } - int rightx = 0; + int rightx = 0; int mouseY = currentComp.getY() + DEFAULT_AREA_LENGTH; - while(mouseYmargin.getTop()) { + while (mouseY > margin.getTop()) { Component comp = container.getComponentAt(x, mouseY); - rightx = comp.getX()+comp.getWidth(); + rightx = comp.getX() + comp.getWidth(); if (rightx == compRightLength) { if (comp.getWidth() < minWidth) { minWidth = comp.getWidth(); @@ -358,7 +362,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{ if (isFindRelatedComps) { leftComps.add(comp); } - }else{ + } else { break; } } @@ -367,13 +371,14 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{ /** * 判断是否鼠标在组件的三等分区域,如果组件在布局管理器中间,上下左右都可能会三等分 + * * @param parentComp 鼠标所在区域的组件 - * @param x 坐标x - * @param y 坐标y + * @param x 坐标x + * @param y 坐标y * @return 是则返回true */ public boolean isTrisectionArea(Component parentComp, int x, int y) { - XCreator creator = (XCreator)parentComp; + XCreator creator = (XCreator) parentComp; if (container.getComponentCount() <= 1) { return false; } @@ -382,23 +387,23 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{ int xL = parentComp.getX(); int yL = parentComp.getY(); // 组件宽高的十分之一和默认值取大 - int minRangeWidth = Math.max(maxWidth/BORDER_PROPORTION, DEFAULT_AREA_LENGTH); - int minRangeHeight = Math.max(maxHeight/BORDER_PROPORTION, DEFAULT_AREA_LENGTH); - if(y < yL+minRangeHeight ) { + int minRangeWidth = Math.max(maxWidth / BORDER_PROPORTION, DEFAULT_AREA_LENGTH); + int minRangeHeight = Math.max(maxHeight / BORDER_PROPORTION, DEFAULT_AREA_LENGTH); + if (y < yL + minRangeHeight) { // 在组件上侧三等分 trisectAreaDirect = COMP_TOP; - } else if(y > yL + maxHeight - minRangeHeight) { + } else if (y > yL + maxHeight - minRangeHeight) { // 在组件下侧三等分 trisectAreaDirect = COMP_BOTTOM; } else if (x < xL + minRangeWidth) { // 在组件左侧三等分 trisectAreaDirect = COMP_LEFT; - } else if(x > xL + maxWidth - minRangeWidth) { + } else if (x > xL + maxWidth - minRangeWidth) { // 在组件右侧三等分 trisectAreaDirect = COMP_RIGHT; } // tab布局的边界特殊处理,不进行三等分 - if(!creator.getTargetChildrenList().isEmpty()){ + if (!creator.getTargetChildrenList().isEmpty()) { return false; } @@ -407,21 +412,22 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{ /** * 是否为组件交叉点区域 或者是相邻三组建中间点 + * * @param currentComp 当前组件 - * @param x 坐标x - * @param y 坐标y + * @param x 坐标x + * @param y 坐标y * @return 是则返回true */ public boolean isCrossPointArea(Component currentComp, int x, int y) { // 3个及以上都会出现交叉点区域(包括边界处的) - if(currentComp == null || container.getComponentCount() <= 2){ + if (currentComp == null || container.getComponentCount() <= 2) { return false; } int cX = currentComp.getX(); int cY = currentComp.getY(); int cW = currentComp.getWidth(); 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 rx = cX + cW; int by = cY + cH; @@ -432,27 +438,27 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{ if (x < objX && y < objY) { //左上角区域 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; } else if (x < objX && y > by - areaHeight) { //左下角 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; } else { isMiddlePosition(currentComp, x, y, areaWidth, areaHeight); } // tab布局的边界特殊处理 - XCreator creator = (XCreator)currentComp; - if(!creator.getTargetChildrenList().isEmpty()){ + XCreator creator = (XCreator) currentComp; + if (!creator.getTargetChildrenList().isEmpty()) { return false; } 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 cY = comp.getY(); int cW = comp.getWidth(); @@ -479,14 +485,14 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{ Component bottomComp = container.getBottomComp(cX, cY, cH); if (x < (cX + areaWidth)) { 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)) { topComp = container.getRightTopComp(cX, cY, cW); bottomComp = container.getRightBottomComp(cX, cY, cH, cW); 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 +519,16 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{ /** * 平分,正常情况拖入组件时,按照上1/4区域、下1/4区域为上下平分,中左侧1/2区域、中右侧1/2区域为左右平分 + * * @param currentComp 当前位置组件 - * @param child 待放置组件 - * @param x x - * @param y y + * @param child 待放置组件 + * @param x x + * @param y y */ protected void fixHalve(Component currentComp, XCreator child, int x, int y) { - XCreator creator = (XCreator)currentComp; - if(!creator.getTargetChildrenList().isEmpty()){ - fixHalveOfTab(creator,child,x,y); + XCreator creator = (XCreator) currentComp; + if (!creator.getTargetChildrenList().isEmpty()) { + fixHalveOfTab(creator, child, x, y); return; } int maxWidth = currentComp.getWidth(); @@ -536,18 +543,18 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{ int finalY = yL; int finalW = maxWidth; int finalH = maxHeight; - if (isDividUp){ + if (isDividUp) { dim.width = maxWidth; dim.height = maxHeight / 2 - actualVal / 2; finalY = yL + dim.height + actualVal; finalH = maxHeight - dim.height - actualVal; - } else if(isDividDown){ + } else if (isDividDown) { // 若当前区域高度非偶数,那么和isDividUp时计算一致,否则永远都是上半部分小1px dim.height = maxHeight / 2 - actualVal / 2; dim.width = maxWidth; finalH = maxHeight - dim.height - actualVal; yL = yL + finalH + actualVal; - } else if(isDividLeft){ + } else if (isDividLeft) { dim.width = maxWidth / 2 - actualVal / 2; dim.height = maxHeight; finalX = xL + dim.width + actualVal; @@ -571,7 +578,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{ // 边界判断抄得原来的逻辑 // 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 maxHeight = currentCreator.getHeight(); int xL = currentCreator.getX(); @@ -582,7 +589,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{ int finalY = yL; int finalW = maxWidth; int finalH = maxHeight; - switch(position){ + switch (position) { case COMP_TOP: dim.width = maxWidth; dim.height = maxHeight / 2; @@ -592,7 +599,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{ case COMP_BOTTOM: dim.height = maxHeight / 2; dim.width = maxWidth; - finalH = maxHeight-dim.height; + finalH = maxHeight - dim.height; yL = yL + finalH; break; case COMP_LEFT: @@ -619,13 +626,31 @@ 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; XLayoutContainer cardLayout = ((XWCardMainBorderLayout) currentCreator).getCardPart(); + XLayoutContainer container = (XLayoutContainer) cardLayout.getComponent(0); Rectangle rect = ComponentUtils.getRelativeBounds(container); + + /* + * 为了获取到鼠标drop位置的控件, + * 我们之前已经将y值变为相对坐标值; + * 由于在x轴上没有偏移,所以x值一直等于相对坐标值,最多差一个边界值1。 + * 在进行新添加的控件位置计算时, + * 又通过ComponentUtils.getRelativeBounds()方法获取到了绝对坐标, + * 再次计算相对坐标,所以将y值重新变成绝对坐标。 + * */ + if (currentCreator.getParent().getParent().getComponent(0) instanceof XWParameterLayout) { + int high = currentCreator.getParent().getParent().getComponent(0).getHeight(); + y = y + WCardMainBorderLayout.TAB_HEIGHT + high; + + } else { + y = y + WCardMainBorderLayout.TAB_HEIGHT; + } + int tempX = x - rect.x; - int tempY = y - rect.y + WCardMainBorderLayout.TAB_HEIGHT; + int tempY = y - rect.y; int containerX = container.getX(); int containerY = container.getY(); int containerWidth = container.getWidth(); @@ -634,13 +659,13 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{ Rectangle currentXY = new Rectangle(tempX, tempY, 1, 1); // 上边缘 Rectangle upEdge = new Rectangle(containerX, containerY, containerWidth, BORDER_PROPORTION); - if(upEdge.intersects(currentXY)){ + if (upEdge.intersects(currentXY)) { position = COMP_TOP; } int bottomY = containerY + containerHeight - BORDER_PROPORTION; // 下边缘 Rectangle bottomEdge = new Rectangle(containerX, bottomY, containerWidth, BORDER_PROPORTION); - if(bottomEdge.intersects(currentXY)){ + if (bottomEdge.intersects(currentXY)) { position = COMP_BOTTOM; } //左右边缘的高度 -10*2 是为了不和上下边缘重合 @@ -648,7 +673,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{ int leftY = containerY + BORDER_PROPORTION; // 左边缘 Rectangle leftEdge = new Rectangle(containerX, leftY, BORDER_PROPORTION, verticalHeight); - if(leftEdge.intersects(currentXY)){ + if (leftEdge.intersects(currentXY)) { position = COMP_LEFT; } return position; @@ -658,37 +683,38 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{ * 组件交叉区域进行插入时,调整受到变动的其他组件,之前是交叉区域插入也按照三等分逻辑,后面测试中发现有bug,改为和bi一样的鼠标所在侧平分 * 默认左上角、右下角区域是垂直方向插入组件 * 右上角和左下角是水平方向插入组件,这样避免田字块时重复 + * * @param currentComp 当前位置组件 - * @param child 待放置组件 - * @param x x - * @param y y + * @param child 待放置组件 + * @param x x + * @param y y */ protected void fixCrossPointArea(Component currentComp, XCreator child, int x, int y) { //计算前先全部初始化待调整控件所在的list initCompsList(); - switch(crossPointAreaDirect) { - case COMP_LEFT_TOP : + switch (crossPointAreaDirect) { + case COMP_LEFT_TOP: dealCrossPointAtLeftTop(currentComp, child); break; - case COMP_RIGHT_BOTTOM : + case COMP_RIGHT_BOTTOM: dealCrossPointAtRightBottom(currentComp, child); break; - case COMP_LEFT_BOTTOM : + case COMP_LEFT_BOTTOM: dealCrossPointAtLeftBottom(currentComp, child); break; - case COMP_RIGHT_TOP : + case COMP_RIGHT_TOP: dealCrossPointAtRightTop(currentComp, child); break; - case COMP_TOP : + case COMP_TOP: dealCrossPointAtTop(currentComp, child); break; - case COMP_BOTTOM : + case COMP_BOTTOM: dealCrossPointAtBottom(currentComp, child); break; - case COMP_LEFT : + case COMP_LEFT: dealCrossPointAtLeft(currentComp, child); break; - case COMP_RIGHT : + case COMP_RIGHT: dealCrossPointAtRight(currentComp, child); break; } @@ -708,16 +734,16 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{ Component topComp = container.getTopComp(cX, cY); Component leftComp = container.getLeftComp(cX, cY); //上方没有组件或者有一个x坐标不相同的组件 - if (topComp==null || topComp.getX()!=cX) { + if (topComp == null || topComp.getX() != cX) { minDH = cH < leftComp.getHeight() ? cH : leftComp.getHeight(); downComps.add(leftComp); downComps.add(currentComp); int dLength = minDH / 2; - childw = leftComp.getWidth()+cW+actualVal; - childh = dLength-actualVal / 2; + childw = leftComp.getWidth() + cW + actualVal; + childh = dLength - actualVal / 2; if (isCalculateChildPos) { childPosition = new int[]{leftComp.getX(), leftComp.getY(), childw, childh}; - } else{ + } else { //先设置child位置,不然leftComp坐标调整后就不对了 child.setLocation(leftComp.getX(), leftComp.getY()); child.setSize(childw, childh); @@ -726,7 +752,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{ } else { rightComps.add(currentComp); rightComps.add(topComp); - minRW = cW= minDH) { minDH -= actualVal / 2; if ((minDH * 2 / 3) < minHeight) { dLength = minDH - minHeight; - }else { + } else { dLength = minDH / 3; } uLength = averageH - dLength; - } else{ + } else { minUH -= actualVal / 2; if ((minUH * 2 / 3) < minHeight) { uLength = minUH - minHeight; - }else { + } else { uLength = minUH / 3; } dLength = averageH - uLength; @@ -999,16 +1026,16 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{ child.setLocation(margin.getLeft(), margin.getRight()); child.setSize(rightLength - actualVal / 2, height); } else { - childPosition = new int[] {margin.getLeft(), margin.getRight(), rightLength - actualVal / 2, height}; + childPosition = new int[]{margin.getLeft(), margin.getRight(), rightLength - actualVal / 2, height}; } return; - } else if(minRW == 0){ + } else if (minRW == 0) { leftLength = minLW / 2; calculateLeftComps(leftLength, child, leftLength); return; } else if (minRW >= minLW) { minLW -= actualVal / 2; - if(minLW * 2 / 3 < minWidth) { + if (minLW * 2 / 3 < minWidth) { leftLength = minLW - minWidth; } else { leftLength = minLW / 3; @@ -1016,7 +1043,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{ rightLength = averageW - leftLength; } else { minRW -= actualVal / 2; - if(minRW * 2 / 3 < minWidth) { + if (minRW * 2 / 3 < minWidth) { rightLength = minRW - minWidth; } else { rightLength = minRW / 3; @@ -1033,12 +1060,12 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{ private void calculateBottomComps(int length) { 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); comp.setLocation(comp.getX(), comp.getY() + length); int offset = comp.getHeight() - length; comp.setSize(comp.getWidth(), offset); - XCreator creator = (XCreator)comp; + XCreator creator = (XCreator) comp; creator.recalculateChildHeight(offset); } } @@ -1048,24 +1075,24 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{ int childWidth = (upComps.size() - 1) * actualVal; int childX = container.getWidth() - margin.getLeft() - margin.getRight(); 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; } - 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); childWidth += comp.getWidth(); - if (comp.getX() < childX){ + if (comp.getX() < childX) { childX = comp.getX(); } if (!isCalculateChildPos) { int offset = comp.getHeight() - length; comp.setSize(comp.getWidth(), offset); - XCreator creator = (XCreator)comp; + XCreator creator = (XCreator) comp; creator.recalculateChildHeight(offset); } } childY += actualVal; - averageH -= actualVal/2; + averageH -= actualVal / 2; if (isCalculateChildPos) { childPosition = new int[]{childX, childY, childWidth, averageH}; } else { @@ -1081,25 +1108,25 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{ } int childH = (leftComps.size() - 1) * actualVal; 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; } 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); childH += comp.getHeight(); - if (comp.getY() < childY){ + if (comp.getY() < childY) { childY = comp.getY(); } if (!isCalculateChildPos) { int offset = comp.getWidth() - length; comp.setSize(offset, comp.getHeight()); - XCreator creator = (XCreator)comp; + XCreator creator = (XCreator) comp; creator.recalculateChildWidth(offset); } } childX += actualVal; - averageW -= actualVal/2; + averageW -= actualVal / 2; if (isCalculateChildPos) { childPosition = new int[]{childX, childY, averageW, childH}; } else { @@ -1110,33 +1137,34 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter{ private void calculateRightComps(int length) { length += actualVal / 2; - for (int i=0,num=rightComps.size(); i Date: Fri, 17 Feb 2017 10:12:29 +0800 Subject: [PATCH 100/343] =?UTF-8?q?REPORT-1898=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E5=8D=95=E5=85=83=E6=A0=BC=E5=B1=9E=E6=80=A7=E8=A1=A8?= =?UTF-8?q?-=E5=85=B6=E4=BB=96=E5=B1=9E=E6=80=A7=20=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E5=86=85=E5=AE=B9=E4=B8=BA=E4=B8=8B=E8=BD=BD?= =?UTF-8?q?=E9=93=BE=E6=8E=A5=E6=98=BE=E7=A4=BA=E4=BA=8C=E8=BF=9B=E5=88=B6?= =?UTF-8?q?=E7=9A=84=E6=97=B6=E5=80=99,=E4=B8=8B=E9=9D=A2=E7=9A=84?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=90=8D=E8=BE=93=E5=85=A5=E6=A1=86=E8=BE=93?= =?UTF-8?q?=E5=85=A5=E4=B8=80=E4=B8=AA=E5=AD=97=E7=AC=A6=E5=B0=B1=E5=A4=B1?= =?UTF-8?q?=E7=84=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mainframe/CellElementPropertyPane.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/designer/src/com/fr/design/mainframe/CellElementPropertyPane.java b/designer/src/com/fr/design/mainframe/CellElementPropertyPane.java index d68bd7757..69a68f451 100644 --- a/designer/src/com/fr/design/mainframe/CellElementPropertyPane.java +++ b/designer/src/com/fr/design/mainframe/CellElementPropertyPane.java @@ -108,8 +108,10 @@ public class CellElementPropertyPane extends DockingView { } public void reInit(ElementCasePane ePane) { - this.add(titlePane, BorderLayout.NORTH); - this.add(cellElementEditPane, BorderLayout.CENTER); + if (titlePane.getParent() == null) { // 如果处于隐藏状态,则让其显示 + this.add(titlePane, BorderLayout.NORTH); + this.add(cellElementEditPane, BorderLayout.CENTER); + } cellElementEditPane.populate(ePane); } From cba9fa9a4d0f1ce033ddc6db48a82b992e1fb3be Mon Sep 17 00:00:00 2001 From: fanglei <294531121> Date: Fri, 17 Feb 2017 10:16:19 +0800 Subject: [PATCH 101/343] =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E5=99=A8=E6=96=B9?= =?UTF-8?q?=E9=9D=A2=E5=AE=9E=E7=8E=B0=E4=BA=86=E6=8E=A7=E4=BB=B6=E9=A1=BA?= =?UTF-8?q?=E5=BA=8F=E5=B1=9E=E6=80=A7=E8=A1=A8=201.=E5=B0=86MobileBodyWid?= =?UTF-8?q?getTable=E6=9B=B4=E5=90=8D=E4=B8=BAMobileWidgetTable=202.?= =?UTF-8?q?=E9=87=8D=E5=86=99MobieWidgetTable=E5=92=8CMobileParaWidgetTabl?= =?UTF-8?q?e=E7=9A=84=E6=8B=96=E5=8A=A8=E9=80=BB=E8=BE=91=203.=E5=B0=86Bod?= =?UTF-8?q?yAppRelayout=E4=BB=8Edesigner=5Fform\src\com\fr\design\designer?= =?UTF-8?q?\properties=E7=A7=BB=E5=8A=A8=E5=88=B0designer=5Fform\src\com\f?= =?UTF-8?q?r\design\designer\properties\mobile=204.=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E6=96=87=E4=BB=B6=205.=E6=95=B4?= =?UTF-8?q?=E7=90=86WidgetPropertyPane=E7=9A=84=E4=BB=A3=E7=A0=81=E7=BB=93?= =?UTF-8?q?=E6=9E=84=E5=B9=B6=E4=B8=94=E5=8A=A0=E4=BB=A5=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=86=97=E4=BD=99=E4=BB=A3=E7=A0=81=206.?= =?UTF-8?q?=E7=94=B1=E4=BA=8E=E5=BC=95=E6=93=8E=E4=BB=A3=E7=A0=81=E4=B8=AD?= =?UTF-8?q?BoundsWidget=E4=BD=8D=E7=BD=AE=E5=8F=98=E5=8A=A8=EF=BC=8C?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=86=97=E4=BD=99=E7=9A=84import=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=EF=BC=8C=E4=BF=AE=E6=94=B9import=20BoundsWidget?= =?UTF-8?q?=E6=96=B0=E4=BD=8D=E7=BD=AE=E7=9A=84=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gui/itable/AbstractPropertyTable.java | 61 ++- .../fr/design/gui/itable/PropertyGroup.java | 22 +- .../com/fr/design/locale/designer.properties | 3 +- .../design/locale/designer_en_US.properties | 3 +- .../design/locale/designer_zh_CN.properties | 3 +- .../design/locale/designer_zh_TW.properties | 3 +- .../designer/beans/ConnectorCreator.java | 3 +- .../layout/FRAbsoluteLayoutAdapter.java | 4 +- .../adapters/layout/FRFitLayoutAdapter.java | 2 +- .../beans/location/AccessDirection.java | 2 +- .../design/designer/beans/location/Inner.java | 3 +- .../designer/creator/XWAbsoluteLayout.java | 16 +- .../design/designer/creator/XWFitLayout.java | 2 +- .../designer/creator/XWScaleLayout.java | 2 +- .../designer/creator/XWTitleLayout.java | 2 +- .../cardlayout/XWCardMainBorderLayout.java | 2 +- .../creator/cardlayout/XWTabFitLayout.java | 2 +- .../{ => mobile}/BodyAppRelayoutTable.java | 16 +- .../mobile/BodyMobilePropertyUI.java | 1 - .../fr/design/mainframe/ConnectorHelper.java | 2 +- .../mainframe/MobileBodyWidgetTable.java | 267 ---------- .../mainframe/MobileParaWidgetTable.java | 431 ++++++++++++++++ .../design/mainframe/MobileWidgetTable.java | 460 +++++++++--------- .../design/mainframe/WidgetPropertyPane.java | 269 ++++++---- 24 files changed, 911 insertions(+), 670 deletions(-) rename designer_form/src/com/fr/design/designer/properties/{ => mobile}/BodyAppRelayoutTable.java (89%) delete mode 100644 designer_form/src/com/fr/design/mainframe/MobileBodyWidgetTable.java create mode 100644 designer_form/src/com/fr/design/mainframe/MobileParaWidgetTable.java diff --git a/designer_base/src/com/fr/design/gui/itable/AbstractPropertyTable.java b/designer_base/src/com/fr/design/gui/itable/AbstractPropertyTable.java index 02a6f547b..6d36c31bd 100644 --- a/designer_base/src/com/fr/design/gui/itable/AbstractPropertyTable.java +++ b/designer_base/src/com/fr/design/gui/itable/AbstractPropertyTable.java @@ -26,7 +26,7 @@ import com.fr.general.Inter; */ public abstract class AbstractPropertyTable extends JTable { - // 属性分组 + // // 所有数据组, 把数据分组,一个可折叠的项里面的所有行 为一组 protected ArrayList groups; protected TableModel default_table_model; // 属性表被选中的行加一个浅蓝色的背景 @@ -35,23 +35,34 @@ public abstract class AbstractPropertyTable extends JTable { public static final int PROPERTY_TABLE_ROW_HEIGHT = 22; public AbstractPropertyTable() { - this.setRowHeight(PROPERTY_TABLE_ROW_HEIGHT); + this.setTableProperties(); + this.initPopup(); + default_table_model = new DefaultTableModel(); + this.setModel(default_table_model); + } + + /** + * 设置表格属性 + */ + private void setTableProperties() { JTableHeader header = getTableHeader(); header.setReorderingAllowed(false); header.setPreferredSize(new Dimension(0, PROPERTY_TABLE_ROW_HEIGHT)); header.setDefaultRenderer(new HeaderRenderer()); + this.setRowHeight(PROPERTY_TABLE_ROW_HEIGHT); this.setGridColor(new Color(212, 208, 200)); this.setSelectionBackground(PROPERTY_SELECTION_BACKGROUND); this.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); this.setColumnSelectionAllowed(false); this.setRowSelectionAllowed(true); this.setFillsViewportHeight(true); - this.initPopup(); - default_table_model = new DefaultTableModel(); - this.setModel(default_table_model); this.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); } + /** + * 在这个函数里面初始化表格数据再repaint + * @param source + */ public abstract void initPropertyGroups(Object source); public void fireValueChanged(Object old_value, boolean success, Object newValue) { @@ -64,24 +75,26 @@ public abstract class AbstractPropertyTable extends JTable { @Override public TableCellRenderer getCellRenderer(int row, int column) { + //如果数据组不为空 if (groups != null) { Point pIndex = getGroupIndex(row); if (pIndex == null){ return super.getCellRenderer(row, column); } + //拿出当前行所在的那个属性组 PropertyGroup group = groups.get(pIndex.x); + //如果是标题行 if (pIndex.y == 0) { - if (column == 0) { - return group.getFirstRenderer(); - } else { - return group.getSecondRenderer(); - } + //采用group中定义好的标题行渲染器 + return group.getRenderer(); } else { + //如果是非标题行第一列,采用默认渲染器 if (column == 0) { return super.getCellRenderer(row, column); } else { TableCellRenderer renderer = group.getModel().getRenderer(pIndex.y - 1); if (renderer instanceof Component) { + //如果这个渲染器是继承自Component,根据当前行列是否可编辑决定该控件是否可用 ((Component) renderer).setEnabled(isCellEditable(row, column)); } return renderer; @@ -115,6 +128,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) { int count = 0; for (int i = 0; i < groups.size(); i++) { @@ -135,6 +154,10 @@ public abstract class AbstractPropertyTable extends JTable { this.addMouseListener(new MouseAdapter() { + /** + * 如果点到标题行就要触发折叠事件 + * @param e + */ @Override public void mouseClicked(MouseEvent e) { if (!e.isPopupTrigger() && groups != null) { @@ -148,6 +171,11 @@ public abstract class AbstractPropertyTable extends JTable { } } + /** + * 这个mousePressed和上面的mouseClicked唯一不同的地方是单双击和e.getX() < 10 的判断 + * 这个意思应该就是说点到图标(加号减号),立即触发折叠效果,否则点其他处要双击才能触发 + * @param e + */ @Override public void mousePressed(MouseEvent e) { if (!e.isPopupTrigger() && groups != null) { @@ -163,16 +191,27 @@ public abstract class AbstractPropertyTable extends JTable { }); } + /** + * 切换属性组折叠属性true/false + * @param groupIndex + */ private void toggleCollapse(int groupIndex) { PropertyGroup group = groups.get(groupIndex); group.setCollapsed(!group.isCollapsed()); + //这里获取表格的父控件是为了当表格被折叠了后,装表格的父控件也要相应的重新布局一下 + //比如折叠之后表格行数应该比原来的少,占用父容器空间应该小点,不重新布局父容器,表格大小不会改变 Container parent = AbstractPropertyTable.this.getParent(); if (parent != null) { - parent.doLayout(); +// parent.doLayout(); // 这里还是用revalidate吧。。daLayout有时候会失效不知道为什么 + parent.revalidate(); } repaint(); } + /** + * BeanTableModel类,提供表格数据 + * 它的所有数据来源均来自PropertyGroup中的AbstractPropertyGroupModel中的descriptor + */ public class BeanTableModel extends AbstractTableModel { @Override diff --git a/designer_base/src/com/fr/design/gui/itable/PropertyGroup.java b/designer_base/src/com/fr/design/gui/itable/PropertyGroup.java index f66288e39..0e6426ac1 100644 --- a/designer_base/src/com/fr/design/gui/itable/PropertyGroup.java +++ b/designer_base/src/com/fr/design/gui/itable/PropertyGroup.java @@ -4,18 +4,19 @@ import javax.swing.table.TableCellRenderer; import com.fr.design.beans.GroupModel; +/** + * PropertyGroup类描述了属性表中一个属性分组 + */ public class PropertyGroup { - private GroupModel model; - private String name; - private boolean collapsed; - private GroupRenderer renderer1; - private GroupRenderer renderer2; + private GroupModel model; // 描述这个属性组中的数据model + private String name; // 这组属性的标题名称 + private boolean collapsed; // 这组属性是否折叠 + private GroupRenderer renderer; // 属性标题渲染器 public PropertyGroup(GroupModel model) { this(model.getGroupName(), model, false); - renderer1 = new GroupRenderer(); - renderer2 = new GroupRenderer(); + renderer = new GroupRenderer(); } public PropertyGroup(String name, GroupModel model, boolean collapsed) { @@ -48,11 +49,8 @@ public class PropertyGroup { this.collapsed = collapsed; } - public TableCellRenderer getFirstRenderer() { - return renderer1; + public TableCellRenderer getRenderer() { + return renderer; } - public TableCellRenderer getSecondRenderer() { - return renderer2; - } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 41f3c8cdd..2140d8518 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -520,4 +520,5 @@ FR-Designer_Background_Clear= FR-Designer_Background_Image_Select= FR-Designer_Tab_carousel= FR-Designer_setCarousel= -FR-Designer_carouselInterval= \ No newline at end of file +FR-Designer_carouselInterval= +FR-Designer_WidgetOrder= \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index 334e01ca8..7067d9932 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -520,4 +520,5 @@ FR-Designer_Background_Clear=Clear FR-Designer_Background_Image_Select=Select Picture FR-Designer_Tab_carousel= FR-Designer_setCarousel= -FR-Designer_carouselInterval= \ No newline at end of file +FR-Designer_carouselInterval= +FR-Designer_WidgetOrder=Widget Order \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 10c53380d..b86e381ba 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -524,4 +524,5 @@ FR-Designer_Background_Clear=\u6E05\u9664 FR-Designer_Background_Image_Select=\u9009\u62E9\u56FE\u7247 FR-Designer_Tab_carousel=tab\u8F6E\u64AD FR-Designer_setCarousel=\u5F00\u542F\u8F6E\u64AD -FR-Designer_carouselInterval=\u8F6E\u64AD\u95F4\u9694 \ No newline at end of file +FR-Designer_carouselInterval=\u8F6E\u64AD\u95F4\u9694 +FR-Designer_WidgetOrder=\u63A7\u4EF6\u987A\u5E8F \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 96cb4260a..795ae6987 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -512,4 +512,5 @@ FR-Designer_Background_Clear= FR-Designer_Background_Image_Select= FR-Designer_Tab_carousel= FR-Designer_setCarousel= -FR-Designer_carouselInterval= \ No newline at end of file +FR-Designer_carouselInterval= +FR-Designer_WidgetOrder=\u63A7\u4EF6\u9806\u5E8F \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/ConnectorCreator.java b/designer_form/src/com/fr/design/designer/beans/ConnectorCreator.java index 2bfc0bf3f..70a5d71f2 100644 --- a/designer_form/src/com/fr/design/designer/beans/ConnectorCreator.java +++ b/designer_form/src/com/fr/design/designer/beans/ConnectorCreator.java @@ -6,8 +6,7 @@ import java.util.ArrayList; import java.util.PriorityQueue; 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 { diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java index 3d53eab01..140204e75 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java +++ b/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.design.utils.ComponentUtils; 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.FRLogger; @@ -111,7 +111,7 @@ public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { Rectangle curRec = new Rectangle(creatorX, creatorY, creator.getWidth(), creator.getHeight()); WAbsoluteLayout wAbsoluteLayout = (WAbsoluteLayout)topLayout.toData(); 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(); if (curRec.intersects(rectangle)){ return false; diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java index 25b079caf..0cfd0c714 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java +++ b/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.utils.ComponentUtils; 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.cardlayout.WCardMainBorderLayout; +import com.fr.form.ui.widget.BoundsWidget; import com.fr.general.ComparatorUtils; /** diff --git a/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java b/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java index a9d700770..aa9125e5d 100644 --- a/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java +++ b/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java @@ -12,8 +12,8 @@ import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.FormSelection; import com.fr.design.utils.ComponentUtils; 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.widget.BoundsWidget; /** * @author richer diff --git a/designer_form/src/com/fr/design/designer/beans/location/Inner.java b/designer_form/src/com/fr/design/designer/beans/location/Inner.java index c54796a0a..3abe94730 100644 --- a/designer_form/src/com/fr/design/designer/beans/location/Inner.java +++ b/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.utils.ComponentUtils; 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.third.com.lowagie.text.*; import java.awt.*; import java.awt.Rectangle; diff --git a/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java b/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java index 06ae6fa78..4ed1b6549 100644 --- a/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java @@ -8,39 +8,25 @@ import java.awt.event.ContainerEvent; import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; import java.beans.IntrospectionException; -import java.util.ArrayList; import java.util.HashMap; import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.ComponentAdapter; import com.fr.design.designer.beans.LayoutAdapter; -import com.fr.design.designer.beans.adapters.layout.AbsoluteLayoutAdapter; import com.fr.design.designer.beans.adapters.layout.FRAbsoluteLayoutAdapter; import com.fr.design.designer.beans.location.Direction; import com.fr.design.designer.beans.models.SelectionModel; -import com.fr.design.designer.creator.cardlayout.XWTabFitLayout; import com.fr.design.form.layout.FRAbsoluteLayout; -import com.fr.design.form.util.XCreatorConstants; -import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.icon.IconPathConstants; import com.fr.design.mainframe.*; -import com.fr.design.mainframe.widget.editors.PaddingMarginEditor; -import com.fr.design.mainframe.widget.editors.WLayoutBorderStyleEditor; -import com.fr.design.mainframe.widget.renderer.LayoutBorderStyleRenderer; -import com.fr.design.mainframe.widget.renderer.PaddingMarginCellRenderer; import com.fr.form.ui.Connector; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WAbsoluteLayout; -import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; -import com.fr.form.ui.container.WFitLayout; import com.fr.form.ui.container.WLayout; +import com.fr.form.ui.widget.BoundsWidget; import com.fr.general.FRScreen; import com.fr.general.IOUtils; import com.fr.general.Inter; -import com.fr.stable.core.PropertyChangeAdapter; -import org.eclipse.swt.internal.gdip.Rect; - -import javax.swing.*; /** * @author richer diff --git a/designer_form/src/com/fr/design/designer/creator/XWFitLayout.java b/designer_form/src/com/fr/design/designer/creator/XWFitLayout.java index 483b08fe5..340ec9cd1 100644 --- a/designer_form/src/com/fr/design/designer/creator/XWFitLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/XWFitLayout.java @@ -20,10 +20,10 @@ import com.fr.design.mainframe.FormArea; import com.fr.design.utils.gui.LayoutUtils; import com.fr.form.ui.PaddingMargin; import com.fr.form.ui.Widget; -import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import com.fr.form.ui.container.WBodyLayoutType; import com.fr.form.ui.container.WFitLayout; import com.fr.form.ui.container.WLayout; +import com.fr.form.ui.widget.BoundsWidget; import com.fr.general.FRScreen; import com.fr.general.Inter; import com.fr.stable.ArrayUtils; diff --git a/designer_form/src/com/fr/design/designer/creator/XWScaleLayout.java b/designer_form/src/com/fr/design/designer/creator/XWScaleLayout.java index 46683401b..8dad2c7f0 100644 --- a/designer_form/src/com/fr/design/designer/creator/XWScaleLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/XWScaleLayout.java @@ -11,8 +11,8 @@ import com.fr.design.designer.beans.LayoutAdapter; import com.fr.design.designer.beans.adapters.layout.FRScaleLayoutAdapter; import com.fr.design.form.layout.FRScaleLayout; import com.fr.form.ui.Widget; -import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import com.fr.form.ui.container.WScaleLayout; +import com.fr.form.ui.widget.BoundsWidget; /** * 自适应布局中添加组件时,部分控件如数字文本下拉等需要保持控件默认高度21, 用此容器来实现 diff --git a/designer_form/src/com/fr/design/designer/creator/XWTitleLayout.java b/designer_form/src/com/fr/design/designer/creator/XWTitleLayout.java index c0f45c888..0e1a293bd 100644 --- a/designer_form/src/com/fr/design/designer/creator/XWTitleLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/XWTitleLayout.java @@ -10,8 +10,8 @@ import com.fr.design.fun.WidgetPropertyUIProvider; import com.fr.form.ui.Label; import com.fr.form.ui.Widget; import com.fr.form.ui.WidgetTitle; -import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import com.fr.form.ui.container.WTitleLayout; +import com.fr.form.ui.widget.BoundsWidget; import com.fr.general.ComparatorUtils; import java.awt.*; diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java index 42a45c53c..08f5765b9 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java @@ -18,8 +18,8 @@ import com.fr.design.icon.IconPathConstants; import com.fr.design.mainframe.EditingMouseListener; import com.fr.design.mainframe.FormDesigner; import com.fr.form.ui.container.WBorderLayout; -import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; +import com.fr.form.ui.widget.BoundsWidget; import com.fr.general.IOUtils; import com.fr.general.Inter; diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java index d772e3b45..a1fafb007 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java @@ -23,9 +23,9 @@ import com.fr.design.mainframe.widget.editors.ImgBackgroundEditor; import com.fr.design.mainframe.widget.renderer.FontCellRenderer; import com.fr.design.utils.gui.LayoutUtils; import com.fr.form.ui.CardSwitchButton; -import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import com.fr.form.ui.container.cardlayout.WCardTagLayout; import com.fr.form.ui.container.cardlayout.WTabFitLayout; +import com.fr.form.ui.widget.BoundsWidget; import com.fr.general.Background; import com.fr.general.FRFont; import com.fr.general.Inter; diff --git a/designer_form/src/com/fr/design/designer/properties/BodyAppRelayoutTable.java b/designer_form/src/com/fr/design/designer/properties/mobile/BodyAppRelayoutTable.java similarity index 89% rename from designer_form/src/com/fr/design/designer/properties/BodyAppRelayoutTable.java rename to designer_form/src/com/fr/design/designer/properties/mobile/BodyAppRelayoutTable.java index 36bde25d8..fb0cc93b4 100644 --- a/designer_form/src/com/fr/design/designer/properties/BodyAppRelayoutTable.java +++ b/designer_form/src/com/fr/design/designer/properties/mobile/BodyAppRelayoutTable.java @@ -1,9 +1,9 @@ -package com.fr.design.designer.properties; +package com.fr.design.designer.properties.mobile; +import java.awt.*; import java.awt.event.MouseEvent; import java.beans.IntrospectionException; import java.util.ArrayList; -import javax.swing.table.TableModel; import com.fr.base.FRContext; import com.fr.design.designer.beans.events.DesignerEvent; @@ -17,7 +17,9 @@ import com.fr.design.mainframe.WidgetPropertyPane; import com.fr.design.mainframe.widget.editors.InChangeBooleanEditor; import com.fr.general.Inter; - +/** + * 将body的控件列表中再加入手机重布局选项 + */ public class BodyAppRelayoutTable extends AbstractPropertyTable { private XCreator xCreator; @@ -31,7 +33,6 @@ public class BodyAppRelayoutTable extends AbstractPropertyTable { CRPropertyDescriptor[] propertyTableEditor = { new CRPropertyDescriptor("appRelayout", this.xCreator.toData().getClass()).setEditorClass(InChangeBooleanEditor.class) .setI18NName(Inter.getLocText("FR-Designer-App_ReLayout")) - .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, Inter.getLocText("FR-Designer-Layout_Adaptive_Layout")) }; return propertyTableEditor; } @@ -43,6 +44,7 @@ public class BodyAppRelayoutTable extends AbstractPropertyTable { public void initPropertyGroups(Object source) { this.designer = WidgetPropertyPane.getInstance().getEditingFormDesigner(); + this.setFillsViewportHeight(false); groups = new ArrayList(); CRPropertyDescriptor[] propertyTableEditor = null; @@ -55,8 +57,7 @@ public class BodyAppRelayoutTable extends AbstractPropertyTable { groups.add(new PropertyGroup(new ReportAppPropertyGroupModel(Inter.getLocText("FR-Designer_Properties_Mobile"), xCreator, propertyTableEditor, designer))); - TableModel model = new BeanTableModel(); - setModel(model); + setModel(new BeanTableModel()); this.repaint(); } @@ -78,8 +79,9 @@ public class BodyAppRelayoutTable extends AbstractPropertyTable { } /** - * 待说明 + * 触发控件编辑事件 */ + @Override public void firePropertyEdit() { designer.getEditListenerTable().fireCreatorModified(DesignerEvent.CREATOR_EDITED); } diff --git a/designer_form/src/com/fr/design/designer/properties/mobile/BodyMobilePropertyUI.java b/designer_form/src/com/fr/design/designer/properties/mobile/BodyMobilePropertyUI.java index 70b80bc99..a3a1e5086 100644 --- a/designer_form/src/com/fr/design/designer/properties/mobile/BodyMobilePropertyUI.java +++ b/designer_form/src/com/fr/design/designer/properties/mobile/BodyMobilePropertyUI.java @@ -3,7 +3,6 @@ package com.fr.design.designer.properties.mobile; import com.fr.design.designer.creator.XCreator; import com.fr.design.designer.creator.XWAbsoluteBodyLayout; import com.fr.design.designer.creator.XWFitLayout; -import com.fr.design.designer.properties.BodyAppRelayoutTable; import com.fr.design.fun.impl.AbstractWidgetPropertyUIProvider; import com.fr.design.gui.itable.AbstractPropertyTable; import com.fr.general.Inter; diff --git a/designer_form/src/com/fr/design/mainframe/ConnectorHelper.java b/designer_form/src/com/fr/design/mainframe/ConnectorHelper.java index e592a48c9..f2b68043d 100644 --- a/designer_form/src/com/fr/design/mainframe/ConnectorHelper.java +++ b/designer_form/src/com/fr/design/mainframe/ConnectorHelper.java @@ -7,12 +7,12 @@ import java.awt.Rectangle; import java.awt.event.MouseEvent; import java.util.ArrayList; +import com.fr.form.ui.widget.BoundsWidget; import com.fr.stable.Constants; import com.fr.base.GraphHelper; import com.fr.design.designer.beans.ConnectorCreator; import com.fr.design.designer.creator.XWAbsoluteLayout; import com.fr.form.ui.Connector; -import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; public class ConnectorHelper { //这个类是用来画连接线的,暂时用不到 diff --git a/designer_form/src/com/fr/design/mainframe/MobileBodyWidgetTable.java b/designer_form/src/com/fr/design/mainframe/MobileBodyWidgetTable.java deleted file mode 100644 index 90e2316a6..000000000 --- a/designer_form/src/com/fr/design/mainframe/MobileBodyWidgetTable.java +++ /dev/null @@ -1,267 +0,0 @@ -package com.fr.design.mainframe; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Cursor; -import java.awt.Dimension; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.util.ArrayList; - -import javax.swing.BorderFactory; -import javax.swing.JLabel; -import javax.swing.JTable; -import javax.swing.ListSelectionModel; -import javax.swing.table.DefaultTableCellRenderer; -import javax.swing.table.DefaultTableModel; -import javax.swing.table.JTableHeader; -import javax.swing.table.TableModel; - -import com.fr.design.designer.creator.XCreator; -import com.fr.design.designer.creator.XLayoutContainer; -import com.fr.design.gui.ilable.UILabel; -import com.fr.design.gui.itable.HeaderRenderer; -import com.fr.form.ui.Widget; -import com.fr.form.ui.container.WFitLayout; -import com.fr.general.ComparatorUtils; -import com.fr.general.Inter; -import com.fr.stable.StringUtils; - -/** - * Created with IntelliJ IDEA. - * User: zx - * Date: 14-9-15 - * Time: 下午4:52 - */ -public class MobileBodyWidgetTable extends JTable { - - private FormDesigner designer; - protected TableModel defaultmodel; - private String[][] cellData; - private String[] headers = {Inter.getLocText("Form-Widget_Name")}; - public static final int WIDGET_TABLE_ROW_HEIGHT = 22; - private UILabel moveComponent = new UILabel(); - private int selectedRow = -1; - private int GAP = 10; - private boolean draging = false; - - - public MobileBodyWidgetTable(FormDesigner designer) { - this.designer = designer; - cellData = getData(); - this.setRowHeight(WIDGET_TABLE_ROW_HEIGHT); - JTableHeader header = getTableHeader(); - header.setReorderingAllowed(false); - header.setPreferredSize(new Dimension(0, WIDGET_TABLE_ROW_HEIGHT)); - HeaderRenderer headerRenderer = new HeaderRenderer(); - headerRenderer.setHorizontalAlignment(JLabel.CENTER); - header.setDefaultRenderer(headerRenderer); - this.setGridColor(new Color(212, 208, 200)); - this.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - this.setColumnSelectionAllowed(false); - this.setRowSelectionAllowed(false); - this.setFillsViewportHeight(true); - defaultmodel = new BeanTableModel(); - this.setModel(defaultmodel); - this.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); - this.repaint(); - this.setDefaultRenderer(Object.class,new MobileWidgetTableCellRenderer()); - refresh(); - this.addMouseListener(mouseAdapter); - this.addMouseMotionListener(mouseAdapter); - add(moveComponent); - } - - private MouseAdapter mouseAdapter = new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - if(getSelectedRow() != -1){ - String widgetName = cellData[getSelectedRow()][0]; - if (StringUtils.isNotEmpty(widgetName)){ - XLayoutContainer root = getEditingDesigner().getRootComponent(); - int count = root.getXCreatorCount(); - for (int i = 0;i < count ;i++){ - XCreator xCreator = root.getXCreator(i).getEditingChildCreator(); - Widget widget = xCreator.toData(); - if (ComparatorUtils.equals(widgetName, widget.getWidgetName())) { - getEditingDesigner().getSelectionModel().setSelectedCreator(xCreator); - setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); - selectedRow = getSelectedRow(); - } - } - } - } - } - public void mouseExited(MouseEvent e) { - draging = false; - moveComponent.setVisible(false); - setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); - } - - @Override - public void mouseMoved(MouseEvent e) { - int overRow = 0; - for (int i = 0;i < getRowCount();i++) { - if (e.getY() > i * WIDGET_TABLE_ROW_HEIGHT && e.getY() <= (i + 1) * WIDGET_TABLE_ROW_HEIGHT){ - overRow = i; - } - } - if (overRow == getSelectedRow()) { - setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); - } else { - setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); - } - } - - @Override - public void mouseDragged(MouseEvent e) { - int width = getColumnModel().getColumn(0).getWidth(); - if (getCursor().getType() == Cursor.MOVE_CURSOR){ - draging = true; - //下面这句话太重要了,拖拽过程中选中的不变 - getInstance().setRowSelectionInterval(selectedRow,selectedRow); - moveComponent.setText(getValueAt(getSelectedRow(), getSelectedColumn()).toString()); - moveComponent.setLocation(0, e.getY() - GAP); - moveComponent.setPreferredSize(new Dimension(width, WIDGET_TABLE_ROW_HEIGHT)); - moveComponent.setSize(new Dimension(width, WIDGET_TABLE_ROW_HEIGHT)); - moveComponent.setVisible(true); - moveComponent.setForeground(Color.lightGray); - moveComponent.setBorder(BorderFactory.createLineBorder(Color.lightGray)); - } - } - @Override - public void mouseReleased(MouseEvent e) { - if(!draging){ - return; - } - draging = false; - moveComponent.setVisible(false); - int toIndex = e.getY() < GAP ? 0 : (int)Math.rint((e.getY() - GAP)/WIDGET_TABLE_ROW_HEIGHT) + 1; - ((WFitLayout) designer.getRootComponent().toData()).adjustOrder(getSelectedRow(), toIndex); - getInstance().setRowSelectionInterval(0,getRowCount() - 1); - refresh(); - getInstance().repaint(); - designer.fireTargetModified(); - } - }; - - public MobileBodyWidgetTable getInstance(){ - return this; - } - - public FormDesigner getEditingDesigner(){ - return designer; - } - - /** - * 刷新 - */ - public void refresh(){ - XCreator creator = designer.getSelectionModel().getSelection().getSelectedCreator(); - cellData = getData(); - if(creator != null){ - String widgetName =creator.toData().getWidgetName(); - int row = -1; - for (int i =0; i < cellData.length;i++){ - if(ComparatorUtils.equals(widgetName, cellData[i][0])){ - row = i; - break; - } - } - selectedRow = row; - changeSelection(row,0,false,false); - if(row == -1){ - this.clearSelection(); - } - } - } - - private String[][] getData(){ - if(designer.isFormParaDesigner()){ - return new String[0][0]; - } - XLayoutContainer paraContainer = designer.getRootComponent(); - if(paraContainer == null || !paraContainer.acceptType(WFitLayout.class)){ - return new String[0][0]; - } - - WFitLayout fitLayout = (WFitLayout) (paraContainer.toData()); - ArrayList strings = fitLayout.getMobileWidgetList(); - String[][] widgetName = new String[strings.size()][2]; - for(int i = 0;i < strings.size();i++){ - widgetName[i][0] = strings.get(i); - } - return widgetName; - } - - private class MobileWidgetTableCellRenderer extends DefaultTableCellRenderer { - public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, - boolean hasFocus, int row, int column) { - if (getCursor().getType() == Cursor.MOVE_CURSOR){ - if(selectedRow > -1 && selectedRow < getRowCount()){ - //拖拽过程中选中的不变 - getInstance().setRowSelectionInterval(selectedRow,selectedRow); - } - } - super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); - return this; - } - - } - - public class BeanTableModel extends DefaultTableModel { - public BeanTableModel() { - super(cellData,headers); - } - - @Override - public int getRowCount() { - return cellData.length; - } - - @Override - public int getColumnCount() { - return 1; - } - - - @Override - public Object getValueAt(int row, int column) { - if (row >= getRowCount() || column >= getColumnCount()) { - return null; - } - - return cellData[row][0]; - } - - @Override - public String getColumnName(int column) { - return headers[0]; - } - - - @Override - public void setValueAt(Object aValue, int row, int column) { - if (row >= getRowCount() || column >= getColumnCount()) { - return; - } - if (aValue == null) { - cellData[row] = null; - return; - } - cellData[row][0] = aValue.toString(); - } - - /** - * 是否可编辑 - * @param row 行号 - * @param column 列号 - * @return 是否可编辑 - */ - public boolean isCellEditable(int row, int column) { - return false; - } - - } - -} \ No newline at end of file diff --git a/designer_form/src/com/fr/design/mainframe/MobileParaWidgetTable.java b/designer_form/src/com/fr/design/mainframe/MobileParaWidgetTable.java new file mode 100644 index 000000000..9d670db2c --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/MobileParaWidgetTable.java @@ -0,0 +1,431 @@ +package com.fr.design.mainframe; + + +import java.awt.BasicStroke; +import java.awt.Color; +import java.awt.Component; +import java.awt.Cursor; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.RenderingHints; +import java.awt.event.FocusAdapter; +import java.awt.event.FocusEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.geom.RoundRectangle2D; +import java.util.EventObject; + +import javax.swing.AbstractCellEditor; +import javax.swing.BorderFactory; +import javax.swing.JTable; +import javax.swing.ListSelectionModel; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import javax.swing.table.DefaultTableCellRenderer; +import javax.swing.table.DefaultTableModel; +import javax.swing.table.JTableHeader; +import javax.swing.table.TableCellEditor; +import javax.swing.table.TableColumn; +import javax.swing.table.TableModel; + +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.itable.GroupRenderer; +import com.fr.design.gui.itable.HeaderRenderer; +import com.fr.design.gui.itextfield.UITextField; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XLayoutContainer; +import com.fr.design.designer.creator.XWParameterLayout; +import com.fr.form.ui.Label; +import com.fr.form.ui.Widget; +import com.fr.form.ui.container.WParameterLayout; +import com.fr.general.ComparatorUtils; +import com.fr.general.Inter; +import com.fr.stable.StringUtils; + +/** + * MobileParaWidgetTable主要显示参数面板容器的控件列表,与MobileWidgetTable的区别就是该表多了UITextField这一列 + * Created with IntelliJ IDEA. + * User: zx + * Date: 14-7-9 + * Time: 上午11:26 + * Modified by fanglei during 2017/1/22 - 2017/2/ + */ +class MobileParaWidgetTable extends JTable { + + private FormDesigner designer; + private String[][] cellData ; + private String[] headers = {Inter.getLocText("FR-Utils_Label"), Inter.getLocText("Form-Widget_Name")}; + private static final int WIDGET_TABLE_ROW_HEIGHT = 22; + private static final int UITEXTFIELD_WIDTH = 40; + private UILabel moveComponent = new UILabel(); // 作为拖动时候随鼠标移动的那个半透明控件 + private int selectedRow = -1; + private int selectedColumn = -1; + private int GAP = 11; + private boolean draging = false; + + MobileParaWidgetTable(FormDesigner designer) { + this.designer = designer; + this.cellData = getData(); + this.setTableProperties(); + this.setDefaultEditor(Object.class, new MobileCellEditor()); + TableModel defaultModel = new BeanTableModel(); + this.setModel(defaultModel); + this.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); + TableColumn tc = this.getColumn(this.getColumnName(0)); + tc.setPreferredWidth(UITEXTFIELD_WIDTH); + this.repaint(); + this.setDefaultRenderer(Object.class,new MobileWidgetTableCellRenderer()); + refreshData(); + this.addMouseListener(mouseAdapter); + this.addMouseMotionListener(mouseAdapter); + add(moveComponent); + } + + /** + * 设置表格属性 + */ + private void setTableProperties() { + JTableHeader header = getTableHeader(); + header.setReorderingAllowed(false); + header.setPreferredSize(new Dimension(0, WIDGET_TABLE_ROW_HEIGHT)); + header.setDefaultRenderer(new HeaderRenderer()); + + this.setRowHeight(WIDGET_TABLE_ROW_HEIGHT); + this.setGridColor(new Color(212, 208, 200)); + this.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + this.setColumnSelectionAllowed(false); + this.setRowSelectionAllowed(false); + this.setFillsViewportHeight(true); + } + + private MouseAdapter mouseAdapter = new MouseAdapter() { + /** + * 鼠标按下时处理的事件(设置当前选中的行列) + * @param e + */ + @Override + public void mousePressed(MouseEvent e) { + getInstance().setCellSelected(); + } + + /** + * 鼠标放开时处理的事件(如果是正在拖动则执行换位操作,重新绘制属性表,如果不是则什么也不做) + * @param e + */ + @Override + public void mouseReleased(MouseEvent e) { + if(!draging){ + return; + } + draging = false; + moveComponent.setVisible(false); + int toIndex = e.getY() < GAP ? 0 : (int)Math.rint((e.getY() - GAP)/WIDGET_TABLE_ROW_HEIGHT) + 1; + //当鼠标放开时,将选中的容器调整至新的顺序 + ((WParameterLayout) designer.getParaComponent().toData()).adjustOrder(selectedRow, toIndex); + //拿取排序后表格数据,然后重绘表格 + getInstance().refreshData(); + getInstance().repaint(); + designer.fireTargetModified(); + getInstance().setCellSelected(); + } + + /** + * 设置鼠标在属性表区域移动时候的事件 + * @param e + */ + @Override + public void mouseMoved(MouseEvent e) { + int overColumn = e.getX() < getColumnModel().getColumn(0).getWidth() ? 0 : 1; // 判断当前鼠标在哪一列 + int overRow = -1; + for (int i = 0;i < getRowCount();i++) { + if (e.getY() > i * WIDGET_TABLE_ROW_HEIGHT && e.getY() <= (i + 1) * WIDGET_TABLE_ROW_HEIGHT) { + overRow = i; //判断当前鼠标在哪一行 + } + } + //如果鼠标移动到当前选中的行列上面的时候,并且不能在第一列 + if (overRow == selectedRow && overColumn == selectedColumn && overColumn !=0) { + //把当前选中的那一列行的光标改成(除了第一列)移动样式MOVE_CURSOR + setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); + } else { + setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + } + } + + /** + * 鼠标拖动事件(如果鼠标当前是MOVE_CURSOR状态则执行开始拖动的代码, + * 绘制一个moveComponent来跟随鼠标移动) + * @param e + */ + @Override + public void mouseDragged(MouseEvent e) { + int width = getColumnModel().getColumn(1).getWidth(); + //如果点击选中的是第二列,就可以拖动 + if (selectedColumn == 1){ + setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); + draging = true; + moveComponent.setText(getValueAt(selectedRow, selectedColumn).toString()); + moveComponent.setLocation(getColumnModel().getColumn(0).getWidth(), e.getY() - GAP); + moveComponent.setSize(new Dimension(width, WIDGET_TABLE_ROW_HEIGHT)); + moveComponent.setVisible(true); + moveComponent.setForeground(Color.lightGray); + moveComponent.setBorder(BorderFactory.createLineBorder(Color.lightGray)); + } + } + + /** + * 设置鼠标单击时处理的事件(单击第二列的控件列表进入控件属性表) + * @param e + */ + @Override + public void mouseClicked(MouseEvent e) { + if(getSelectedRow() != -1 && getSelectedColumn() == 1){ + String widgetName = cellData[getSelectedRow()][getSelectedColumn()]; + if (StringUtils.isNotEmpty(widgetName)){ + int count = getEditingDesigner().getParaComponent().getComponentCount(); + for (int i = 0; i < count; i++){ + XCreator xCreator = (XCreator)getEditingDesigner().getParaComponent().getComponent(i); + Widget widget = xCreator.toData(); + if (!widget.acceptType(Label.class) && ComparatorUtils.equals(widgetName,widget.getWidgetName())) { + //设置选中的component,这句代码控制点击之后跳转到相应component属性表 + getEditingDesigner().getSelectionModel().setSelectedCreator(xCreator); + } + } + } + } + } + + /** + * 鼠标离开属性表区域事件 + * @param e + */ + @Override + public void mouseExited(MouseEvent e) { + draging = false; + moveComponent.setVisible(false); + setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + } + }; + + public MobileParaWidgetTable getInstance(){ + return this; + } + + private FormDesigner getEditingDesigner(){ + return designer; + } + + /** + * 设置当前get到的行列的单元格为选中状态 + */ + private void setCellSelected() { + selectedRow = getSelectedRow(); + selectedColumn = getSelectedColumn(); + if (selectedRow != -1) { + this.setRowSelectionInterval(selectedRow, selectedRow); + } + if (selectedColumn != -1) { + this.setColumnSelectionInterval(selectedColumn, selectedColumn); + } + } + + /** + * 重新get排序后的数据 + */ + public void refreshData(){ + cellData = getData(); + } + + /** + * 获取参数面板的控件列表 + * + * @return String[][] 二维数组,[0][0]widgetTag, [0][1]widgetName + */ + private String[][] getData(){ + XLayoutContainer paraContainer = designer.getParaComponent(); + if(paraContainer == null || !paraContainer.acceptType(XWParameterLayout.class)){ + return new String[0][0]; + } + + WParameterLayout para = (WParameterLayout) (paraContainer.toData()); + return para.getWidgetNameTag(); // TODO 从这个函数开始看,可以看到后台如何决定拖动后的控件顺序的 + } + + /** + * 自定义的tableRender类 + */ + private class MobileWidgetTableCellRenderer extends DefaultTableCellRenderer{ + @Override + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, + boolean hasFocus, int row, int column) { + super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); + if (column == 0){ + UITextField uiTableTextField; + if (getSelectedColumn() == column && getSelectedRow() == row){ + uiTableTextField = new UITableTextField(value.toString()); + } else { + uiTableTextField = new UITextField(value.toString()); + } + return uiTableTextField; + } + return this; + } + + } + + /** + * 自定义的tableEditor类 + */ + private class MobileCellEditor extends AbstractCellEditor implements TableCellEditor { + UITableTextField uiTableTextField; + MobileCellEditor(){ + uiTableTextField = new UITableTextField(); + uiTableTextField.addFocusListener(new FocusAdapter() { + @Override + public void focusLost(FocusEvent evt) { + stopCellEditing(); + designer.fireTargetModified(); + } + }); + uiTableTextField.getDocument().addDocumentListener(new DocumentListener() { + @Override + public void insertUpdate(DocumentEvent e) { + firePropertyChange(); + } + + @Override + public void removeUpdate(DocumentEvent e) { + firePropertyChange(); + } + + @Override + public void changedUpdate(DocumentEvent e) { + firePropertyChange(); + } + }); + } + + /** + * cell改变,相应的nametag改变 + */ + private void firePropertyChange(){ + ((WParameterLayout) designer.getParaComponent().toData()).add2NameTagMap(uiTableTextField.getText(), + cellData[getSelectedRow()][1]); + } + + @Override + public Object getCellEditorValue(){ + return uiTableTextField.getText(); + } + + /** + * 双击以编辑, 表示只有双击的情况下才可以编辑 + */ + @Override + public boolean isCellEditable(EventObject anEvent) { + return !(anEvent instanceof MouseEvent) || ((MouseEvent) anEvent).getClickCount() >= 2; + } + + @Override + public Component getTableCellEditorComponent( JTable table,Object value, + boolean isSelected,int row,int column){ + uiTableTextField.setText(value.toString()); + return uiTableTextField; + } + } + + /** + * BeanTableModel类继承DefaultTableModel类,指定了表格的表头和内容 + */ + private class BeanTableModel extends DefaultTableModel { + BeanTableModel() { + super(cellData, headers); + } + + @Override + public int getRowCount() { + return cellData.length; + } + + @Override + public int getColumnCount() { + return headers.length; + } + + + @Override + public Object getValueAt(int row, int column) { + if (row >= getRowCount() || column >= getColumnCount()) { + return null; + } + Object[] rowValue = cellData[row]; + if (column > -1 && column < rowValue.length) { + return cellData[row][column]; + } + return null; + } + + @Override + public String getColumnName(int column) { + if (column == 0) { + return headers[0]; + } else { + return headers[1]; + } + } + + + @Override + public void setValueAt(Object aValue, int row, int column) { + if (row >= getRowCount() || column >= getColumnCount()) { + return; + } + if (aValue == null) { + cellData[row][column] = null; + return; + } + cellData[row][column] = aValue.toString(); + } + + /** + * 是否可编辑 控件标签列可以编辑,控件名不可编辑 + * @param row 行号 + * @param column 列号 + * @return 是否可编辑 + */ + public boolean isCellEditable(int row, int column) { + if(column ==1){ + return false; + } + return true; + } + + } + + /** + * 继承自JTextField类,重写了编辑框的样式 + */ + private class UITableTextField extends UITextField { + public UITableTextField(){ + super(); + } + + public UITableTextField(String string){ + super(string); + } + + protected void paintBorder(Graphics g) { + Graphics2D g2d = (Graphics2D) g; + g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + if (this.isFocusOwner()) { + g2d.setStroke(new BasicStroke(1.5f)); + } else { + g2d.setStroke(new BasicStroke(1f)); + } + RoundRectangle2D.Double rect = new RoundRectangle2D.Double(0, 0, this.getWidth() - 2, this.getHeight() - 2, 4, 4); + g2d.setColor(Color.orange); + g2d.draw(rect); + } + + } +} \ No newline at end of file diff --git a/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java b/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java index fb8f5fc86..a692e3766 100644 --- a/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java +++ b/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java @@ -1,167 +1,208 @@ package com.fr.design.mainframe; - -import java.awt.BasicStroke; -import java.awt.Color; -import java.awt.Component; -import java.awt.Cursor; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.RenderingHints; -import java.awt.event.FocusAdapter; -import java.awt.event.FocusEvent; +import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; -import java.awt.geom.RoundRectangle2D; -import java.util.EventObject; +import java.util.ArrayList; -import javax.swing.AbstractCellEditor; import javax.swing.BorderFactory; +import javax.swing.JLabel; import javax.swing.JTable; import javax.swing.ListSelectionModel; -import javax.swing.event.DocumentEvent; -import javax.swing.event.DocumentListener; -import javax.swing.table.DefaultTableCellRenderer; -import javax.swing.table.DefaultTableModel; -import javax.swing.table.JTableHeader; -import javax.swing.table.TableCellEditor; -import javax.swing.table.TableColumn; -import javax.swing.table.TableModel; +import javax.swing.table.*; +import com.fr.design.designer.creator.XCreator; import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.itable.GroupRenderer; import com.fr.design.gui.itable.HeaderRenderer; -import com.fr.design.gui.itextfield.UITextField; -import com.fr.design.designer.creator.XCreator; -import com.fr.design.designer.creator.XLayoutContainer; -import com.fr.design.designer.creator.XWParameterLayout; -import com.fr.form.ui.Label; import com.fr.form.ui.Widget; -import com.fr.form.ui.container.WParameterLayout; +import com.fr.form.ui.container.*; +import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; +import com.fr.form.ui.container.cardlayout.WCardTitleLayout; import com.fr.general.ComparatorUtils; import com.fr.general.Inter; import com.fr.stable.StringUtils; /** + * MobileWidgetTable类主要显示各种容器的控件列表(body,tab,绝对布局快,不包括参数面板) * Created with IntelliJ IDEA. * User: zx - * Date: 14-7-9 - * Time: 上午11:26 + * Date: 14-9-15 + * Time: 下午4:52 + * Modified by fanglei at 2017/01/23 */ public class MobileWidgetTable extends JTable { private FormDesigner designer; - protected TableModel defaultmodel; - private String[][] cellData ; - private String[] headers = {Inter.getLocText("FR-Utils_Label"),Inter.getLocText("Form-Widget_Name")}; - public static final int WIDGET_TABLE_ROW_HEIGHT = 22; - private UILabel moveComponent = new UILabel(); + private String[][] cellData; + private String[] headers = {Inter.getLocText("Form-Widget_Name")}; + private static final int WIDGET_TABLE_ROW_HEIGHT = 22; + private UILabel moveComponent = new UILabel(); // 作为拖动时候随鼠标移动的那个半透明控件 private int selectedRow = -1; - private int GAP = 10; + private int GAP = 11; private boolean draging = false; + private boolean collapsed = false; // 控件列表是否折叠 + + @Override + public TableCellRenderer getCellRenderer(int row, int column) { + //第一行渲染成为标题的样子 + if (row == 0) { + return new GroupRenderer(); + } + return super.getCellRenderer(row, column); + } + public MobileWidgetTable(FormDesigner designer) { this.designer = designer; - this.cellData = getData(); - this.setRowHeight(WIDGET_TABLE_ROW_HEIGHT); + cellData = getData(); + this.setTableProperties(); + TableModel defaultModel = new BeanTableModel(); + this.setModel(defaultModel); + this.repaint(); + this.setDefaultRenderer(Object.class,new DefaultTableCellRenderer()); + refreshData(); + this.addMouseListener(mouseAdapter); + this.addMouseMotionListener(mouseAdapter); + add(moveComponent); + } + + /** + * 设置表格属性 + */ + private void setTableProperties() { JTableHeader header = getTableHeader(); header.setReorderingAllowed(false); - header.setPreferredSize(new Dimension(0, WIDGET_TABLE_ROW_HEIGHT)); - header.setDefaultRenderer(new HeaderRenderer()); + header.setPreferredSize(new Dimension(0, 0)); // 隐藏表头 + GroupRenderer headerRenderer = new GroupRenderer(); + headerRenderer.setPreferredSize(new Dimension(0, 0)); //这行代码隐藏表头。因为要实现折叠效果,表头不好监听事件 + headerRenderer.setHorizontalAlignment(JLabel.LEFT); + header.setDefaultRenderer(headerRenderer); + + this.setRowHeight(WIDGET_TABLE_ROW_HEIGHT); this.setGridColor(new Color(212, 208, 200)); this.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); this.setColumnSelectionAllowed(false); this.setRowSelectionAllowed(false); - this.setFillsViewportHeight(true); - this.setDefaultEditor(Object.class,new MobileCellEditor()); - defaultmodel = new BeanTableModel(); - this.setModel(defaultmodel); + this.setFillsViewportHeight(false); this.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); - TableColumn tc = this.getColumn(this.getColumnName(0)); - tc.setPreferredWidth(30); - this.repaint(); - this.setDefaultRenderer(Object.class,new MobileWidgetTableCellRenderer()); - refresh(); - this.addMouseListener(mouseAdapter); - this.addMouseMotionListener(mouseAdapter); - add(moveComponent); } private MouseAdapter mouseAdapter = new MouseAdapter() { + /** + * 鼠标按下时处理的事件(设置当前选中的行列) + * @param e + */ @Override - public void mouseClicked(MouseEvent e) { - if(getSelectedRow() != -1 && getSelectedColumn() == 1){ - String widgetName = cellData[getSelectedRow()][getSelectedColumn()]; - if (StringUtils.isNotEmpty(widgetName)){ - int count = getEditingDesigner().getParaComponent().getComponentCount(); - for (int i = 0;i < count ;i++){ - XCreator xCreator = (XCreator)getEditingDesigner().getParaComponent().getComponent(i); - Widget widget = xCreator.toData(); - if (!widget.acceptType(Label.class) && ComparatorUtils.equals(widgetName,widget.getWidgetName())) { - getEditingDesigner().getSelectionModel().setSelectedCreator(xCreator); - setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); - selectedRow = getSelectedRow(); - } - } - } - } + public void mousePressed(MouseEvent e) { + getInstance().setCellSelected(); + if (selectedRow == 0 && !e.isPopupTrigger() && e.getClickCount() == 1 && e.getX() < 10){ // 如果是点击在第一行 + toggleCollapse(); + } + } + + /** + * 鼠标放开时处理的事件(如果是正在拖动则执行换位操作,重新绘制属性表,如果不是则什么也不做) + * 所谓的换行就是简单的重新拿到一次表格数据然后重新绘制表格 + * @param e + */ + @Override + public void mouseReleased(MouseEvent e) { + if(!draging){ + return; } - public void mouseExited(MouseEvent e) { draging = false; moveComponent.setVisible(false); - setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + int toIndex = e.getY() < GAP ? 0 : (int)Math.rint((e.getY() - GAP)/WIDGET_TABLE_ROW_HEIGHT) + 1; + //当鼠标放开时,将选中的容器调整至新的顺序 + ((WLayout)designer.getSelectionModel().getSelection().getSelectedCreator().toData()).adjustOrder(selectedRow - 1, toIndex - 1); + //拿取排序后表格数据,然后重绘表格 + getInstance().refreshData(); + getInstance().repaint(); + designer.fireTargetModified(); + getInstance().setCellSelected(); } + /** + * 设置鼠标在属性表区域移动时候的事件 + * @param e + */ @Override public void mouseMoved(MouseEvent e) { - int overColumn = e.getX() < getColumnModel().getColumn(0).getWidth() ? 0 : 1; - int overRow = -1; + int overRow = 0; for (int i = 0;i < getRowCount();i++) { if (e.getY() > i * WIDGET_TABLE_ROW_HEIGHT && e.getY() <= (i + 1) * WIDGET_TABLE_ROW_HEIGHT){ - overRow = i; + overRow = i; //判断鼠标在哪一行 } } - if (overRow == getSelectedRow() && overColumn == getSelectedColumn() && overColumn !=0) { + //如果鼠标移动到当前选中的行上面的时候 + if (overRow == selectedRow && selectedRow > 0) { + //把当前选中的那一行的光标改成(除了第一列)移动样式MOVE_CURSOR setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); } else { setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); } } - @Override + /** + * 鼠标拖动事件(如果鼠标当前是MOVE_CURSOR状态则执行开始拖动的代码, + * 绘制一个moveComponent来跟随鼠标移动) + * @param e + */ + @Override public void mouseDragged(MouseEvent e) { - if (e.getX() < getColumnModel().getColumn(0).getWidth()) { - draging = false; - moveComponent.setVisible(false); - setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); - } - int width = getColumnModel().getColumn(1).getWidth(); - if (getCursor().getType() == Cursor.MOVE_CURSOR){ - draging = true; - //下面这句话太重要了,拖拽过程中选中的不变 - getInstance().setRowSelectionInterval(selectedRow,selectedRow); - moveComponent.setText(getValueAt(getSelectedRow(), getSelectedColumn()).toString()); - moveComponent.setLocation(getColumnModel().getColumn(0).getWidth(), e.getY() - GAP); - moveComponent.setPreferredSize(new Dimension(width, WIDGET_TABLE_ROW_HEIGHT)); - moveComponent.setSize(new Dimension(width, WIDGET_TABLE_ROW_HEIGHT)); - moveComponent.setVisible(true); - moveComponent.setForeground(Color.lightGray); - moveComponent.setBorder(BorderFactory.createLineBorder(Color.lightGray)); - } + int width = getColumnModel().getColumn(0).getWidth(); + //如果当前选中的行的范围是合理的话,就可以拖动 + if (selectedRow < getRowCount() && selectedRow > 0){ + setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); + draging = true; + moveComponent.setText(getValueAt(selectedRow,0).toString()); + moveComponent.setLocation(0, e.getY() - GAP); + moveComponent.setSize(new Dimension(width, WIDGET_TABLE_ROW_HEIGHT)); + moveComponent.setVisible(true); + moveComponent.setForeground(Color.lightGray); + moveComponent.setBorder(BorderFactory.createLineBorder(Color.lightGray)); + } } + + /** + * 设置鼠标单击时处理的事件(单击控件列表进入控件属性表) + * @param e + */ @Override - public void mouseReleased(MouseEvent e) { - if(!draging){ - return; + public void mouseClicked(MouseEvent e) { + if(selectedRow > 0){ + //当前点击的控件的名字 + String widgetName = cellData[selectedRow][0]; + if (StringUtils.isNotEmpty(widgetName)){ + //当前选择的容器 + XCreator selectedContainer = designer.getSelectionModel().getSelection().getSelectedCreator(); + WLayout selectedWidget = (WLayout)selectedContainer.toData(); + //当前选择的容器中的控件数量 + int count = selectedWidget.getWidgetCount(); + for (int i = 0;i < count ;i++){ + XCreator xCreator = (XCreator) selectedContainer.getComponent(i); + Widget widget = xCreator.toData(); + if (ComparatorUtils.equals(widgetName, widget.getWidgetName())) { + getEditingDesigner().getSelectionModel().setSelectedCreator(xCreator); + } + } + } + } else if (selectedRow == 0){ // 如果是点击在第一行 + if (!e.isPopupTrigger() && e.getClickCount() > 1) { + toggleCollapse(); + } } + } + + /** + * 鼠标离开属性表区域事件 + * @param e + */ + public void mouseExited(MouseEvent e) { draging = false; moveComponent.setVisible(false); - int toIndex = e.getY() < GAP ? 0 : (int)Math.rint((e.getY() - GAP)/WIDGET_TABLE_ROW_HEIGHT) + 1; - ((WParameterLayout) designer.getParaComponent().toData()).adjustOrder(getSelectedRow(), toIndex); - getInstance().setRowSelectionInterval(0,getRowCount() - 1); - refresh(); - getInstance().repaint(); - designer.fireTargetModified(); + setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); } }; @@ -170,130 +211,90 @@ public class MobileWidgetTable extends JTable { } public FormDesigner getEditingDesigner(){ - return designer; + return designer; } /** - * 刷新 + * 设置当前get到的行列的单元格为选中状态 */ - public void refresh(){ - XCreator creator = designer.getSelectionModel().getSelection().getSelectedCreator(); - cellData = getData(); - if(creator != null){ - String widgetName =creator.toData().getWidgetName(); - int row = -1; - int column = -1; - for (int i =0; i < cellData.length;i++){ - if(ComparatorUtils.equals(widgetName, cellData[i][0])){ - row = i; - column = 0; - break; - } - if(ComparatorUtils.equals(widgetName, cellData[i][1])){ - row = i; - column = 1; - break; - } - } - selectedRow = row; - changeSelection(row,column,false,false); - if(row == -1){ - this.clearSelection(); - } + private void setCellSelected() { + selectedRow = getSelectedRow(); + if (selectedRow != -1) { + this.setRowSelectionInterval(selectedRow, selectedRow); + this.setColumnSelectionInterval(0, 0); } } - private String[][] getData(){ - XLayoutContainer paraContainer = designer.getParaComponent(); - if(paraContainer == null || !paraContainer.acceptType(XWParameterLayout.class)){ - return new String[0][0]; - } - - WParameterLayout para = (WParameterLayout) (paraContainer.toData()); - return para.getWidgetNameTag(); - } - - private class MobileWidgetTableCellRenderer extends DefaultTableCellRenderer{ - public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, - boolean hasFocus, int row, int column) { - if (getCursor().getType() == Cursor.MOVE_CURSOR){ - if(selectedRow > -1 && selectedRow < getRowCount()){ - //拖拽过程中选中的不变 - getInstance().setRowSelectionInterval(selectedRow,selectedRow); - } - } - super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); - if (column == 0){ - UITextField uiTableTextField; - if (getSelectedColumn() == column && getSelectedRow() == row){ - uiTableTextField = new UITableTextField(value.toString()); - } else { - uiTableTextField = new UITextField(value.toString()); - } - return uiTableTextField; - } - return this; + /** + * 切换属性组折叠属性true/false + */ + private void toggleCollapse() { + this.setCollapsed(!this.isCollapsed()); + //这里获取表格的父控件是为了当表格被折叠了后,装表格的父控件也要相应的重新布局一下 + //比如折叠之后表格行数应该比原来的少,占用父容器空间应该小点,不重新布局父容器,表格大小不会改变 + Container parent = MobileWidgetTable.this.getParent(); + if (parent != null) { + parent.revalidate(); } - + repaint(); } - private class MobileCellEditor extends AbstractCellEditor implements TableCellEditor { - UITableTextField uiTableTextField; - MobileCellEditor(){ - uiTableTextField = new UITableTextField(); - uiTableTextField.addFocusListener(new FocusAdapter() { - @Override - public void focusLost(FocusEvent evt) { - stopCellEditing(); - designer.fireTargetModified(); - } - }); - uiTableTextField.getDocument().addDocumentListener(new DocumentListener() { - @Override - public void insertUpdate(DocumentEvent e) { - firePropertyChange(); - } - @Override - public void removeUpdate(DocumentEvent e) { - firePropertyChange(); - } + /** + * 重新get排序后的数据 + */ + public void refreshData(){ + cellData = getData(); + } - @Override - public void changedUpdate(DocumentEvent e) { - firePropertyChange(); - } - }); + /** + * 获取选中控件的控件列表 + * + * @return String[][] 二维数组,[0][0]widgetName + */ + private String[][] getData(){ + if(designer.isFormParaDesigner()){ + return new String[0][0]; } - /** - * cell改变,相应的nametag改变 - */ - public void firePropertyChange(){ - ((WParameterLayout) designer.getParaComponent().toData()).add2NameTagMap(uiTableTextField.getText(), - cellData[getSelectedRow()][1]); - } + //选择的控件 + Widget selectedModel = designer.getSelectionModel().getSelection().getSelectedCreator().toData(); - public Object getCellEditorValue(){ - return uiTableTextField.getText(); + if(selectedModel == null){ + return new String[0][0]; } - /* - * 双击以编辑 - */ - public boolean isCellEditable(EventObject anEvent) { - if (anEvent instanceof MouseEvent) { - return ((MouseEvent)anEvent).getClickCount() >= 2; + // 选择的控件有两种类型,一种是WLayout,代表容器,一种是Widget,代表控件 + if (selectedModel.acceptType(WLayout.class)) { + //WCardLayout里面并不是控件,而仍然是容器TabFitLayout,故要向下获取控件 + //WCardTitlelLayout是XWCardLayout的标题容器,里面同样不是控件,不能获取MobileList + //WTitleLayout是标题容器,比如图表的标题,里面是图表控件和Label标题控件,但是不需要获取MobileList + if (selectedModel.acceptType(WCardLayout.class) || selectedModel.acceptType(WCardTitleLayout.class) + || selectedModel.acceptType(WTitleLayout.class) || selectedModel.acceptType(WCardMainBorderLayout.class)) { + return new String[0][0]; + } + ArrayList strings = ((WLayout)selectedModel).getMobileWidgetList(); + String[][] widgetName = new String[strings.size() + 1][1]; + widgetName[0][0] = Inter.getLocText("FR-Designer_WidgetOrder"); + for (int i = 0; i < strings.size(); i++) { + widgetName[i + 1][0] = strings.get(i); } - return true; + return widgetName; + } else { + return new String[0][0]; } + } - public Component getTableCellEditorComponent( JTable table,Object value, - boolean isSelected,int row,int column){ - uiTableTextField.setText(value.toString()); - return uiTableTextField; - } + public boolean isCollapsed() { + return collapsed; } + public void setCollapsed(boolean collapsed) { + this.collapsed = collapsed; + } + + /** + * 自定义的tableEditor类 + */ public class BeanTableModel extends DefaultTableModel { public BeanTableModel() { super(cellData,headers); @@ -301,12 +302,15 @@ public class MobileWidgetTable extends JTable { @Override public int getRowCount() { + if (isCollapsed()) { + return 1; + } return cellData.length; } @Override public int getColumnCount() { - return 2; + return 1; } @@ -315,20 +319,16 @@ public class MobileWidgetTable extends JTable { if (row >= getRowCount() || column >= getColumnCount()) { return null; } - Object[] rowValue = cellData[row]; - if (column > -1 && column < rowValue.length) { - return cellData[row][column]; + if (row == 0) { + return (isCollapsed()? "+" : "-") + cellData[row][0]; } - return null; + + return cellData[row][0]; } @Override public String getColumnName(int column) { - if (column == 0) { - return headers[0]; - } else { - return headers[1]; - } + return headers[0]; } @@ -338,10 +338,10 @@ public class MobileWidgetTable extends JTable { return; } if (aValue == null) { - cellData[row][column] = null; + cellData[row] = null; return; } - cellData[row][column] = aValue.toString(); + cellData[row][0] = aValue.toString(); } /** @@ -351,35 +351,9 @@ public class MobileWidgetTable extends JTable { * @return 是否可编辑 */ public boolean isCellEditable(int row, int column) { - if(column ==1){ return false; - } - return true; } } - private class UITableTextField extends UITextField { - public UITableTextField(){ - super(); - } - - public UITableTextField(String string){ - super(string); - } - - protected void paintBorder(Graphics g) { - Graphics2D g2d = (Graphics2D) g; - g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - if (this.isFocusOwner()) { - g2d.setStroke(new BasicStroke(1.5f)); - } else { - g2d.setStroke(new BasicStroke(1f)); - } - RoundRectangle2D.Double rect = new RoundRectangle2D.Double(0, 0, this.getWidth() - 2, this.getHeight() - 2, 4, 4); - g2d.setColor(Color.orange); - g2d.draw(rect); - } - - } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java b/designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java index a5ec30471..23242e399 100644 --- a/designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java +++ b/designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java @@ -13,39 +13,41 @@ import com.fr.design.designer.properties.WidgetPropertyTable; import com.fr.design.fun.WidgetPropertyUIProvider; import com.fr.design.gui.frpane.UITabbedPane; import com.fr.design.gui.icontainer.UIScrollPane; -import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itable.AbstractPropertyTable; import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.form.ui.Widget; import com.fr.general.Inter; import com.fr.stable.ArrayUtils; import javax.swing.*; import javax.swing.border.LineBorder; +import javax.swing.table.JTableHeader; import java.awt.*; import java.util.ArrayList; import java.util.List; import java.util.Set; /** - * 控件属性表Docking + * 控件属性表绘制 + * Modified by fanglei */ public class WidgetPropertyPane extends FormDockView implements BaseWidgetPropertyPane { - private WidgetPropertyTable propertyTable; - private EventPropertyTable eventTable; - private List widgetPropertyTables; - private FormDesigner designer; - private JPanel wsp; - private MobileWidgetTable mobileWidgetTable; - private MobileBodyWidgetTable mobileBodyWidgetTable; - private UIScrollPane downPanel; - private JPanel centerPane; - private CardLayout cardLayout; - public static final String PARA = "para"; - public static final String BODY = "body"; - public static final int NODE_LENGTH = 2; - public boolean isrefresh = true; - + private WidgetPropertyTable propertyTable; // 控件的属性表 + private EventPropertyTable eventTable; // 控件的事件表 + private List widgetPropertyTables; // 这个变量应该是保存控件拓展的属性tab + private FormDesigner designer; // 当前designer + private UIScrollPane psp; // 用来装载属性表table的容器 + private UIScrollPane esp; //用来装载事件table的容器 + private JPanel wsp; // 装载移动端tab的容器,包括移动端属性表和控件拓展的移动端属性表 + private MobileParaWidgetTable mobileParaWidgetTable; // 参数面板的移动端属性tab(和body的移动端属性tab区别是没有标签名column) + private MobileWidgetTable mobileWidgetTable; // body的移动端属性tab + private UIScrollPane downPanel; // 这个滚动容器是用于装载centerPane的 + private JPanel centerPane; // 此centerPane采用的是cardLayout布局,装载着mobileWidgetTable和mobileBodyWidgetTable + private CardLayout cardLayout; // 卡片布局,选中参数面板时显示mobileWidgetTable,选中body时显示mobileBodyWidgetTable + private JTableHeader header;//把表头单独get出来作为一个组件 + private static final String PARA = "para"; + private static final String BODY = "body"; public static WidgetPropertyPane getInstance() { if (HOLDER.singleton == null) { @@ -68,37 +70,6 @@ public class WidgetPropertyPane extends FormDockView implements BaseWidgetProper setLayout(FRGUIPaneFactory.createBorderLayout()); } - public class mobileWidgetDesignerAdapter implements DesignerEditListener { - - public mobileWidgetDesignerAdapter() { - } - - /** - * 响应界面改变事件 - * @param evt 事件 - */ - public void fireCreatorModified(DesignerEvent evt) { - if (evt.getCreatorEventID() == DesignerEvent.CREATOR_RESIZED - || evt.getCreatorEventID() == DesignerEvent.CREATOR_EDITED - || evt.getCreatorEventID() == DesignerEvent.CREATOR_SELECTED - || evt.getCreatorEventID() == DesignerEvent.CREATOR_ADDED) { - int value = downPanel.getVerticalScrollBar().getValue(); - if(hasSelectParaPane(getEditingFormDesigner())){ - cardLayout.show(centerPane,PARA); - mobileWidgetTable.refresh(); - } else { - cardLayout.show(centerPane,BODY); - mobileBodyWidgetTable.refresh(); - } - //出现滚动条 - downPanel.doLayout(); - //控件列表选中某组件,触发表单中选中控件,选中事件又触发列表刷新,滚动条回到0 - //此处设置滚动条值为刷新前 - downPanel.getVerticalScrollBar().setValue(value); - } - } - } - @Override public String getViewTitle() { return Inter.getLocText("Form-Widget_Property_Table"); @@ -110,6 +81,9 @@ public class WidgetPropertyPane extends FormDockView implements BaseWidgetProper } @Override + /** + * 绘制属性表tab + */ public void refreshDockingView() { designer = this.getEditingFormDesigner(); removeAll(); @@ -118,66 +92,149 @@ public class WidgetPropertyPane extends FormDockView implements BaseWidgetProper return; } widgetPropertyTables = new ArrayList(); + + //依次创建属性表、事件表、移动端表,再将它们整合到TabPane中去 + this.createPropertyTable(); + this.createEventTable(); + this.createMobileWidgetTable(); + this.createTabPane(); + + this.initTables(); + } + + /** + * 初始化属性表,事件表,移动端拓展的属性表 + */ + private void initTables() { + propertyTable.initPropertyGroups(null); + eventTable.refresh(); + for (AbstractPropertyTable propertyTable : widgetPropertyTables) { + propertyTable.initPropertyGroups(designer); + } + } + + /** + * 创建属性表table + */ + private void createPropertyTable() { propertyTable = new WidgetPropertyTable(designer); designer.addDesignerEditListener(new WidgetPropertyDesignerAdapter(propertyTable)); propertyTable.setBorder(null); - UIScrollPane psp = new UIScrollPane(propertyTable); + psp = new UIScrollPane(propertyTable); // 用来装载属性表table psp.setBorder(null); + } + + /** + * 创建事件表(事件选项卡不是JTable) + */ + private void createEventTable() { eventTable = new EventPropertyTable(designer); designer.addDesignerEditListener(new EventPropertyDesignerAdapter(eventTable)); eventTable.setBorder(null); - UIScrollPane esp = new UIScrollPane(eventTable); + esp = new UIScrollPane(eventTable); //用来装载事件table esp.setBorder(null); - wsp = FRGUIPaneFactory.createBorderLayout_S_Pane(); + } + + /** + * 创建移动端控件列表 + */ + private void createMobileWidgetTable() { + //加上表头后,这里不再使用borderLayout布局,而采用BoxLayout布局 + wsp = FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane(); wsp.setBorder(null); + mobileParaWidgetTable = new MobileParaWidgetTable(designer); mobileWidgetTable = new MobileWidgetTable(designer); - mobileBodyWidgetTable = new MobileBodyWidgetTable(designer); designer.addDesignerEditListener(new mobileWidgetDesignerAdapter()); centerPane = FRGUIPaneFactory.createCardLayout_S_Pane(); cardLayout = (CardLayout) centerPane.getLayout(); - centerPane.add(mobileWidgetTable,PARA); - centerPane.add(mobileBodyWidgetTable,BODY); + centerPane.add(mobileParaWidgetTable, PARA);// 采用卡片布局的容器必须指定卡片名字,如果没有卡片名字 + // 就会出现:Exception in thread "main" java.lang.IllegalArgumentException: + // cannot add to layout: constraint must be a string + // 第二个参数代表卡片的名字。后来show方法调用时通过名字找到要显示的卡片 + centerPane.add(mobileWidgetTable, BODY); //这两句代码,是把JTable放到一个JPanel中去了,表头不会显示, + //只有放到JScrollPanel中去表头才能正常显示,这就是MobileWidgetTable中定义了表头却没有显示的原因! + //解决方案:MobileWidgetTable实在无法直接放到JScrollPanel中去的时候,应该把表头get出来单独作为一个组件显示 + if(hasSelectParaPane(designer)){ cardLayout.show(centerPane,PARA); + header = mobileParaWidgetTable.getTableHeader(); } else { cardLayout.show(centerPane,BODY); + header = mobileWidgetTable.getTableHeader(); } downPanel = new UIScrollPane(centerPane); - downPanel.setBorder(new LineBorder(Color.gray)); - wsp.add(downPanel,BorderLayout.CENTER); + downPanel.setBorder(new LineBorder(Color.GRAY)); - UITabbedPane tabbedPane = new UITabbedPane(); - initTabPane(psp, esp, tabbedPane); + //获取拓展移动端属性tab WidgetPropertyUIProvider[] widgetAttrProviders = getExtraPropertyUIProviders(); + addWidgetAttr(widgetAttrProviders); + } + + /** + * 将属性表,事件表,移动端控件列表整合到TabPane里面去 + */ + private void createTabPane() { + UITabbedPane tabbedPane = new UITabbedPane(); // tab选项卡容器 + initTabPane(tabbedPane); add(tabbedPane, BorderLayout.CENTER); - propertyTable.initPropertyGroups(null); - eventTable.refresh(); - for (AbstractPropertyTable propertyTable : widgetPropertyTables) { - propertyTable.initPropertyGroups(designer); + } + + /** + * 获取当前控件扩展的属性tab + * 来源有两个: + * 1, 各个控件从各自的Xcreator里扩展(例如手机重布局的tab就是从Xcreator中扩展的); + * 2, 所有的控件从插件里扩展. + * + * @return 扩展的tab + */ + private WidgetPropertyUIProvider[] getExtraPropertyUIProviders() { + FormSelection selection = designer.getSelectionModel().getSelection(); + WidgetPropertyUIProvider[] embeddedPropertyUIProviders = null; + if (selection != null && selection.getSelectedCreator() != null) { + embeddedPropertyUIProviders = selection.getSelectedCreator().getWidgetPropertyUIProviders(); } - isrefresh = false; + Set set = ExtraDesignClassManager.getInstance().getArray(WidgetPropertyUIProvider.XML_TAG); + return ArrayUtils.addAll(embeddedPropertyUIProviders, set.toArray(new WidgetPropertyUIProvider[set.size()])); } + /** + * 判断是将拓展的tab放入属性表还是将原来的tab放入属性表 + * @param widgetAttrProviders 拓展的tab + */ private void addWidgetAttr(WidgetPropertyUIProvider[] widgetAttrProviders) { - if (widgetAttrProviders.length == 0) { - UILabel upLabel = new UILabel(Inter.getLocText("FR-Widget_Mobile_Table"), SwingConstants.CENTER); - upLabel.setBorder(BorderFactory.createEmptyBorder(6,0,6,0)); - wsp.add(upLabel, BorderLayout.NORTH); + if (widgetAttrProviders.length == 0) { // 判断有没有拓展的tab,没有就使用原来的 + wsp.add(header); + wsp.add(downPanel); } else { for (WidgetPropertyUIProvider widgetAttrProvider : widgetAttrProviders) { AbstractPropertyTable propertyTable = widgetAttrProvider.createWidgetAttrTable(); widgetPropertyTables.add(propertyTable); designer.addDesignerEditListener(new WidgetPropertyDesignerAdapter(propertyTable)); - UIScrollPane uiScrollPane = new UIScrollPane(propertyTable); - uiScrollPane.setBorder(null); + UIScrollPane uiScrollPane = new UIScrollPane(getExtraBodyTable(propertyTable)); wsp.add(uiScrollPane); - } } } - private void initTabPane(UIScrollPane psp, UIScrollPane esp, UITabbedPane tabbedPane) { + /** + * 如果是body的拓展属性表,那么要额外加上一张控件顺序表 + * @return + */ + private Component getExtraBodyTable(AbstractPropertyTable abstractPropertyTable) { + Widget selection = designer.getSelectionModel().getSelection().getSelectedCreator().toData(); + if (selection.getWidgetName().equals("body")) { + JPanel jPanel = FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane(); + jPanel.add(abstractPropertyTable); + MobileWidgetTable mobileWidgetTable = new MobileWidgetTable(designer); + jPanel.add(mobileWidgetTable.getTableHeader()); + jPanel.add(mobileWidgetTable); + return jPanel; + } + return abstractPropertyTable; + } + + private void initTabPane(UITabbedPane tabbedPane) { tabbedPane.setOpaque(true); tabbedPane.setBorder(null); tabbedPane.setTabPlacement(SwingConstants.BOTTOM); @@ -201,31 +258,12 @@ public class WidgetPropertyPane extends FormDockView implements BaseWidgetProper return xCreator.acceptType(XWParameterLayout.class) || container.acceptType(XWParameterLayout.class); } - /** - * 获取当前控件扩展的属性tab - * 来源有两个: - * 1, 各个控件从各自的Xcreator里扩展; - * 2, 所有的控件从插件里扩展. - * - * @return 扩展的tab - */ - private WidgetPropertyUIProvider[] getExtraPropertyUIProviders() { - FormSelection selection = designer.getSelectionModel().getSelection(); - WidgetPropertyUIProvider[] embeddedPropertyUIProviders = null; - if (selection != null && selection.getSelectedCreator() != null) { - embeddedPropertyUIProviders = selection.getSelectedCreator().getWidgetPropertyUIProviders(); - } - Set set = ExtraDesignClassManager.getInstance().getArray(WidgetPropertyUIProvider.XML_TAG); - WidgetPropertyUIProvider[] widgetAttrProviders = ArrayUtils.addAll(embeddedPropertyUIProviders, set.toArray(new WidgetPropertyUIProvider[set.size()])); - return widgetAttrProviders; - } - public void setEditingFormDesigner(BaseFormDesigner editor) { FormDesigner fd = (FormDesigner) editor; super.setEditingFormDesigner(fd); } - public void clearDockingView() { + private void clearDockingView() { propertyTable = null; eventTable = null; if (widgetPropertyTables != null) { @@ -236,10 +274,13 @@ public class WidgetPropertyPane extends FormDockView implements BaseWidgetProper this.add(psp, BorderLayout.CENTER); } - public class WidgetPropertyDesignerAdapter implements DesignerEditListener { + /** + * 属性表监听界面事件(编辑,删除,选中,改变大小) + */ + private class WidgetPropertyDesignerAdapter implements DesignerEditListener { AbstractPropertyTable propertyTable; - public WidgetPropertyDesignerAdapter(AbstractPropertyTable propertyTable) { + WidgetPropertyDesignerAdapter(AbstractPropertyTable propertyTable) { this.propertyTable = propertyTable; } @@ -260,17 +301,19 @@ public class WidgetPropertyPane extends FormDockView implements BaseWidgetProper } } - public class EventPropertyDesignerAdapter implements DesignerEditListener { + /** + * 事件表监听界面事件(编辑,选中) + */ + private class EventPropertyDesignerAdapter implements DesignerEditListener { EventPropertyTable propertyTable; - public EventPropertyDesignerAdapter(EventPropertyTable eventTable) { + EventPropertyDesignerAdapter(EventPropertyTable eventTable) { this.propertyTable = eventTable; } @Override public void fireCreatorModified(DesignerEvent evt) { if (evt.getCreatorEventID() == DesignerEvent.CREATOR_EDITED - || evt.getCreatorEventID() == DesignerEvent.CREATOR_EDITED || evt.getCreatorEventID() == DesignerEvent.CREATOR_SELECTED) { propertyTable.refresh(); } @@ -282,6 +325,40 @@ public class WidgetPropertyPane extends FormDockView implements BaseWidgetProper } } + /** + * 移动端属性表监听界面事件(改变大小,编辑,选中,增加控件) + */ + private class mobileWidgetDesignerAdapter implements DesignerEditListener { + + mobileWidgetDesignerAdapter() { + } + + /** + * 响应界面改变事件 + * @param evt 事件 + */ + public void fireCreatorModified(DesignerEvent evt) { + if (evt.getCreatorEventID() == DesignerEvent.CREATOR_RESIZED + || evt.getCreatorEventID() == DesignerEvent.CREATOR_EDITED + || evt.getCreatorEventID() == DesignerEvent.CREATOR_SELECTED + || evt.getCreatorEventID() == DesignerEvent.CREATOR_ADDED) { + int value = downPanel.getVerticalScrollBar().getValue(); + if(hasSelectParaPane(getEditingFormDesigner())){ + cardLayout.show(centerPane,PARA); + mobileParaWidgetTable.refreshData(); + } else { + cardLayout.show(centerPane,BODY); + mobileWidgetTable.refreshData(); + } + //出现滚动条 + downPanel.doLayout(); + //控件列表选中某组件,触发表单中选中控件,选中事件又触发列表刷新,滚动条回到0 + //此处设置滚动条值为刷新前 + downPanel.getVerticalScrollBar().setValue(value); + } + } + } + @Override public Location preferredLocation() { return Location.WEST_BELOW; From 37bf96ab161e77804543edc99e24271e17146be9 Mon Sep 17 00:00:00 2001 From: fanglei <294531121> Date: Fri, 17 Feb 2017 10:43:49 +0800 Subject: [PATCH 102/343] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/locale/designer.properties | 1 + designer_base/src/com/fr/design/locale/designer_en_US.properties | 1 + designer_base/src/com/fr/design/locale/designer_zh_CN.properties | 1 + designer_base/src/com/fr/design/locale/designer_zh_TW.properties | 1 + 4 files changed, 4 insertions(+) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index ab71e8be8..157c12525 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -562,3 +562,4 @@ FR-Designer-Move_Tab_Prev=move to previous FR-Designer_DS_TableData=Data Set FR-Designer_Parameter-Formula=Formula FR-Designer_Plugin_Should_Update_Please_Contact_Developer=Plugin version is too low, and is not compatible with current API. Please contact the developer to update. +FR-Designer_WidgetOrder=Widget Order diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index 24c7a87c7..9735aa3d2 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -562,3 +562,4 @@ FR-Designer_Role=Role 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 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index f448c6f62..7255d42bf 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -566,3 +566,4 @@ FR-Designer_Role=\u89D2\u8272 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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 0b150c205..96c6d0d88 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -554,3 +554,4 @@ FR-Designer_Role= FR-Designer_DS_TableData=\u8CC7\u6599\u96C6 FR-Designer_Parameter-Formula=\u516C\u5F0F FR-Designer_Plugin_Should_Update_Please_Contact_Developer=\u633F\u4EF6\u7248\u672C\u904E\u4F4E\uFF0C\u5B58\u5728API\u4E0D\u76F8\u5BB9\uFF0C\u8ACB\u806F\u7CFB\u958B\u767C\u8005\u965E\u7D1A\u633F\u4EF6 +FR-Designer_WidgetOrder=\u63A7\u4EF6\u9806\u5E8F \ No newline at end of file From 7f9f64f09e12e559ff1d713a992c41bede861b69 Mon Sep 17 00:00:00 2001 From: fanglei <294531121> Date: Fri, 17 Feb 2017 11:54:36 +0800 Subject: [PATCH 103/343] =?UTF-8?q?=E6=B6=88=E9=99=A4PMD=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hanlder/BottomCornerMouseHanlder.java | 2 +- .../fr/design/beans/location/MoveUtils.java | 2 +- .../gui/itable/AbstractPropertyTable.java | 3 +- .../designer/beans/ConnectorCreator.java | 10 +- .../beans/location/AccessDirection.java | 6 +- .../design/designer/beans/location/Inner.java | 164 ++++++++++-------- .../cardlayout/XWCardMainBorderLayout.java | 2 +- .../fr/design/mainframe/ConnectorHelper.java | 5 +- .../design/mainframe/MobileWidgetTable.java | 9 +- 9 files changed, 109 insertions(+), 94 deletions(-) diff --git a/designer/src/com/fr/poly/hanlder/BottomCornerMouseHanlder.java b/designer/src/com/fr/poly/hanlder/BottomCornerMouseHanlder.java index 729562740..e42835abb 100644 --- a/designer/src/com/fr/poly/hanlder/BottomCornerMouseHanlder.java +++ b/designer/src/com/fr/poly/hanlder/BottomCornerMouseHanlder.java @@ -170,7 +170,7 @@ public class BottomCornerMouseHanlder extends MouseInputAdapter { * @return 重叠 */ @Override - public boolean getWidgetsIntersects() { + public boolean isWidgetsIntersects() { return false; } diff --git a/designer_base/src/com/fr/design/beans/location/MoveUtils.java b/designer_base/src/com/fr/design/beans/location/MoveUtils.java index f796768a6..fcd4f90ee 100644 --- a/designer_base/src/com/fr/design/beans/location/MoveUtils.java +++ b/designer_base/src/com/fr/design/beans/location/MoveUtils.java @@ -83,7 +83,7 @@ public class MoveUtils { * 获取designer内部组件是否重叠的标志位 * @return 重叠 */ - boolean getWidgetsIntersects(); + boolean isWidgetsIntersects(); //TODO 消除PMD检查错误,把getWidgetsIntersects改成isWidgetsIntersects /** * 获取designer相对屏幕的位置 diff --git a/designer_base/src/com/fr/design/gui/itable/AbstractPropertyTable.java b/designer_base/src/com/fr/design/gui/itable/AbstractPropertyTable.java index 6d36c31bd..96c9a5c1e 100644 --- a/designer_base/src/com/fr/design/gui/itable/AbstractPropertyTable.java +++ b/designer_base/src/com/fr/design/gui/itable/AbstractPropertyTable.java @@ -33,6 +33,7 @@ public abstract class AbstractPropertyTable extends JTable { public static final Color PROPERTY_SELECTION_BACKGROUND = new Color(153, 204, 255); // 属性表的行高 public static final int PROPERTY_TABLE_ROW_HEIGHT = 22; + private static final int PROPERTY_ICON_WIDTH = 10; public AbstractPropertyTable() { this.setTableProperties(); @@ -182,7 +183,7 @@ public abstract class AbstractPropertyTable extends JTable { int row = AbstractPropertyTable.super.rowAtPoint(e.getPoint()); if (row != -1) { 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); } } diff --git a/designer_form/src/com/fr/design/designer/beans/ConnectorCreator.java b/designer_form/src/com/fr/design/designer/beans/ConnectorCreator.java index 70a5d71f2..350235d45 100644 --- a/designer_form/src/com/fr/design/designer/beans/ConnectorCreator.java +++ b/designer_form/src/com/fr/design/designer/beans/ConnectorCreator.java @@ -13,7 +13,7 @@ public class ConnectorCreator { public static final int UNIT = 10; public static final int SIDE = 2; 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 boolean beyond; @@ -178,8 +178,8 @@ public class ConnectorCreator { } void pushInto() { - for (int i = 0; i < vector.length; i++) { - Point temp = new Point(p.x + vector[i][0], p.y + vector[i][1]); + for (int i = 0; i < VECTOR.length; i++) { + 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) { continue; } @@ -191,8 +191,8 @@ public class ConnectorCreator { } boolean reCheck() { - for (int i = 0; i < vector.length; i++) { - Point temp = new Point(p.x + SIDE * vector[i][0], p.y + SIDE * vector[i][1]); + for (int i = 0; i < VECTOR.length; i++) { + Point temp = new Point(p.x + SIDE * VECTOR[i][0], p.y + SIDE * VECTOR[i][1]); AssessedPoint ap = new AssessedPoint(temp, this, loss(temp)); if (check(temp)) { open.add(ap); diff --git a/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java b/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java index aa9125e5d..a2a57c4ff 100644 --- a/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java +++ b/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java @@ -11,6 +11,7 @@ import com.fr.design.designer.creator.*; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.FormSelection; 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.WParameterLayout; import com.fr.form.ui.widget.BoundsWidget; @@ -66,10 +67,8 @@ public abstract class AccessDirection implements Direction { protected void sorptionPoint(Point point, Rectangle current_bounds,FormDesigner designer) { boolean findInX = current_bounds.getWidth() <= MoveUtils.SORPTION_UNIT ? true : false; boolean findInY = current_bounds.getHeight() <= MoveUtils.SORPTION_UNIT ? true : false; - WAbsoluteLayout layout =getLayout(designer); FormSelection selection = designer.getSelectionModel().getSelection(); - boolean isWidgetsIntersect = false; for (int i = 0, count = layout.getWidgetCount(); i < count; i++) { BoundsWidget temp = (BoundsWidget) layout.getWidget(i); @@ -111,7 +110,10 @@ public abstract class AccessDirection implements Direction { } } 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().setYAbsorptionline(findInY && current_bounds.getHeight() > MoveUtils.SORPTION_UNIT ? Absorptionline.createYAbsorptionline(point.y) : null); designer.getStateModel().setEquidistantLine(null); diff --git a/designer_form/src/com/fr/design/designer/beans/location/Inner.java b/designer_form/src/com/fr/design/designer/beans/location/Inner.java index 3abe94730..5c3c38844 100644 --- a/designer_form/src/com/fr/design/designer/beans/location/Inner.java +++ b/designer_form/src/com/fr/design/designer/beans/location/Inner.java @@ -46,89 +46,99 @@ public class Inner extends AccessDirection { return new Point(x, y); } - @Override - protected void sorptionPoint(Point point, Rectangle current_bounds, final FormDesigner designer) { - RectangleDesigner rd = new RectangleDesigner() { - public void setXAbsorptionline(Absorptionline line) { - designer.getStateModel().setXAbsorptionline(line); - } - public void setYAbsorptionline(Absorptionline line) { - designer.getStateModel().setYAbsorptionline(line); - } - - /** - * 获取当前选中块的水平线数组 - * - * @return 块的水平线数组 - * - */ - public int[] getHorizontalLine(){ - return ArrayUtils.EMPTY_INT_ARRAY; - } - - /** - * 获取当前选中块的垂直线数组 - * - * @return 块的垂直线数组 - * - */ - public int[] getVerticalLine(){ - return ArrayUtils.EMPTY_INT_ARRAY; - } - public RectangleIterator createRectangleIterator() { - return getRectangleIterator(designer); - } + //TODO 原先这个类是通过一个new一个匿名类继承RectangleDesigner接口实现的,但是报了方法超过50行的PMD错误 + //TODO 暂时就先这样命名,请原作者看到后重新命名 + private class RectangleDesigner1 implements RectangleDesigner { + private FormDesigner designer = null; - /** - * 设置designer内部组件是否重叠的标志位 - * - * @param isIntersects 是否重叠 - */ - @Override - public void setWidgetsIntersects(boolean isIntersects) { - designer.setWidgetsIntersect(isIntersects); - } + public RectangleDesigner1(FormDesigner designer) { + this.designer = designer; + } - /** - * 获取designer内部组件是否重叠的标志位 - * - * @return 重叠 - */ - @Override - public boolean getWidgetsIntersects() { - return designer.isWidgetsIntersect(); - } + public void setXAbsorptionline(Absorptionline line) { + designer.getStateModel().setXAbsorptionline(line); + } + public void setYAbsorptionline(Absorptionline line) { + designer.getStateModel().setYAbsorptionline(line); + } - /** - * 获取designer相对屏幕的位置 - * - * @return 位置 - */ - @Override - public Point getDesignerLocationOnScreen() { - return designer.getLocationOnScreen(); - } + /** + * 获取当前选中块的水平线数组 + * + * @return 块的水平线数组 + * + */ + public int[] getHorizontalLine(){ + return ArrayUtils.EMPTY_INT_ARRAY; + } - /** - * 设置等距线 - * - * @param line 吸附线 - */ - @Override - public void setEquidistantLine(Absorptionline line) { - designer.getStateModel().setEquidistantLine(line); - } + /** + * 获取当前选中块的垂直线数组 + * + * @return 块的垂直线数组 + * + */ + public int[] getVerticalLine(){ + return ArrayUtils.EMPTY_INT_ARRAY; + } + public RectangleIterator createRectangleIterator() { + return getRectangleIterator(designer); + } - @Override - public int getDesignerScrollHorizontalValue() { - return designer.getArea().getHorizontalValue(); - } + /** + * 设置designer内部组件是否重叠的标志位 + * + * @param isIntersects 是否重叠 + */ + @Override + public void setWidgetsIntersects(boolean isIntersects) { + designer.setWidgetsIntersect(isIntersects); + } - @Override - public int getDesignerScrollVerticalValue() { - return designer.getArea().getVerticalValue(); - } - }; + /** + * 获取designer内部组件是否重叠的标志位 + * + * @return 重叠 + */ + @Override + public boolean isWidgetsIntersects() { + return designer.isWidgetsIntersect(); + } + + /** + * 获取designer相对屏幕的位置 + * + * @return 位置 + */ + @Override + public Point getDesignerLocationOnScreen() { + return designer.getLocationOnScreen(); + } + + /** + * 设置等距线 + * + * @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) { + RectangleDesigner1 rd = new RectangleDesigner1(designer); //判断当前操作的是不是参数面板,要特殊处理 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)); diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java index 08f5765b9..9b778f850 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java @@ -231,7 +231,7 @@ public class XWCardMainBorderLayout extends XWBorderLayout{ ); g2d.setColor(Color.BLACK); //画编辑文字 - g2d.drawString(Inter.getLocText("Edit"), x + w / 2 - 2, y + h / 2 + 5); + g2d.drawString(Inter.getLocText("FR-Designer_Edit"), x + w / 2 - 2, y + h / 2 + 5); } } diff --git a/designer_form/src/com/fr/design/mainframe/ConnectorHelper.java b/designer_form/src/com/fr/design/mainframe/ConnectorHelper.java index f2b68043d..0c4bdd2be 100644 --- a/designer_form/src/com/fr/design/mainframe/ConnectorHelper.java +++ b/designer_form/src/com/fr/design/mainframe/ConnectorHelper.java @@ -19,6 +19,8 @@ public class ConnectorHelper { public static final int NEAR = 5; private static double ratio = 0.5; + // TODO 为了消除魔术数错误,我不清楚这个15代表什么,先这样命名了,原作者看到了请改一下 + private final static int magicNumber1 = 15; private ArrayList drawingPoint; private FormDesigner designer; private boolean drawing; @@ -67,7 +69,6 @@ public class ConnectorHelper { ConnectorCreator cc = new ConnectorCreator(designer.getTarget().getContainer(), new Point(startPoint), new Point(endPoint)); ArrayList p = cc.createPointList(); long e = System.currentTimeMillis(); - System.out.println("useTime:" + (e - s)); return p; } @@ -87,7 +88,7 @@ public class ConnectorHelper { public void createDefalutLine() { if (drawingPoint != null && drawingPoint.size() > 1 - && ConnectorCreator.getMinimumDistance(drawingPoint.get(0), drawingPoint.get(drawingPoint.size() - 1)) > 15) { + && ConnectorCreator.getMinimumDistance(drawingPoint.get(0), drawingPoint.get(drawingPoint.size() - 1)) > magicNumber1) { ((XWAbsoluteLayout) designer.getRootComponent()).addConnector(new Connector().addAll(drawingPoint)); } drawingPoint = null; diff --git a/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java b/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java index a692e3766..9b589b09b 100644 --- a/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java +++ b/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java @@ -96,7 +96,7 @@ public class MobileWidgetTable extends JTable { @Override public void mousePressed(MouseEvent e) { getInstance().setCellSelected(); - if (selectedRow == 0 && !e.isPopupTrigger() && e.getClickCount() == 1 && e.getX() < 10){ // 如果是点击在第一行 + if (selectedRow == 0 && !e.isPopupTrigger() && e.getClickCount() == 1 && e.getX() < WIDGET_TABLE_ROW_HEIGHT / 2){ // 如果是点击在第一行 toggleCollapse(); } } @@ -268,9 +268,10 @@ public class MobileWidgetTable extends JTable { //WCardLayout里面并不是控件,而仍然是容器TabFitLayout,故要向下获取控件 //WCardTitlelLayout是XWCardLayout的标题容器,里面同样不是控件,不能获取MobileList //WTitleLayout是标题容器,比如图表的标题,里面是图表控件和Label标题控件,但是不需要获取MobileList - if (selectedModel.acceptType(WCardLayout.class) || selectedModel.acceptType(WCardTitleLayout.class) - || selectedModel.acceptType(WTitleLayout.class) || selectedModel.acceptType(WCardMainBorderLayout.class)) { - return new String[0][0]; + if (selectedModel.acceptType(WCardLayout.class) || selectedModel.acceptType(WCardTitleLayout.class)) { + if (selectedModel.acceptType(WTitleLayout.class) || selectedModel.acceptType(WCardMainBorderLayout.class)) { + return new String[0][0]; + } } ArrayList strings = ((WLayout)selectedModel).getMobileWidgetList(); String[][] widgetName = new String[strings.size() + 1][1]; From 821ef73086172840c2e4f5f0a64d9c599b6ecd9a Mon Sep 17 00:00:00 2001 From: fanglei <294531121> Date: Fri, 17 Feb 2017 12:00:37 +0800 Subject: [PATCH 104/343] =?UTF-8?q?=E6=B6=88=E9=99=A4PMD=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/beans/location/MoveUtils.java | 5 +++-- .../src/com/fr/design/mainframe/ConnectorHelper.java | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/designer_base/src/com/fr/design/beans/location/MoveUtils.java b/designer_base/src/com/fr/design/beans/location/MoveUtils.java index fcd4f90ee..1e110358c 100644 --- a/designer_base/src/com/fr/design/beans/location/MoveUtils.java +++ b/designer_base/src/com/fr/design/beans/location/MoveUtils.java @@ -16,6 +16,7 @@ import java.util.ArrayList; public class MoveUtils { public static final int SORPTION_UNIT = 5; + private static final int EQUIDISTANTLINE_UNIT = 4; public static WidgetForbidWindow widgetForbidWindow = new WidgetForbidWindow(); @@ -479,10 +480,10 @@ public class MoveUtils { } 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 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(equidistantLines1[direction] != null && equidistantLines1[direction].getDistance() > equidistantLines.get(count).getDistance() diff --git a/designer_form/src/com/fr/design/mainframe/ConnectorHelper.java b/designer_form/src/com/fr/design/mainframe/ConnectorHelper.java index 0c4bdd2be..b4d897281 100644 --- a/designer_form/src/com/fr/design/mainframe/ConnectorHelper.java +++ b/designer_form/src/com/fr/design/mainframe/ConnectorHelper.java @@ -20,7 +20,7 @@ public class ConnectorHelper { public static final int NEAR = 5; private static double ratio = 0.5; // TODO 为了消除魔术数错误,我不清楚这个15代表什么,先这样命名了,原作者看到了请改一下 - private final static int magicNumber1 = 15; + private final static int MAGICNUMBER = 15; private ArrayList drawingPoint; private FormDesigner designer; private boolean drawing; @@ -88,7 +88,7 @@ public class ConnectorHelper { public void createDefalutLine() { if (drawingPoint != null && drawingPoint.size() > 1 - && ConnectorCreator.getMinimumDistance(drawingPoint.get(0), drawingPoint.get(drawingPoint.size() - 1)) > magicNumber1) { + && ConnectorCreator.getMinimumDistance(drawingPoint.get(0), drawingPoint.get(drawingPoint.size() - 1)) > MAGICNUMBER) { ((XWAbsoluteLayout) designer.getRootComponent()).addConnector(new Connector().addAll(drawingPoint)); } drawingPoint = null; From 4abace6d53aa2a50138f44b20351cc4cb68b33bc Mon Sep 17 00:00:00 2001 From: zhouping Date: Fri, 17 Feb 2017 14:17:25 +0800 Subject: [PATCH 105/343] =?UTF-8?q?REPORT-1814=20=E8=A1=A8=E5=8D=95tab?= =?UTF-8?q?=E5=9D=97=E7=9A=84=E6=94=B9=E8=89=AFbug=20=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E8=B4=A8=E9=87=8F=EF=BC=8C=E6=8A=BD=E5=87=BA=E7=88=B6=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../creator/cardlayout/TabMoveAction.java | 80 +++++++++++++++++++ .../cardlayout/TabMoveCustomAction.java | 23 +----- .../creator/cardlayout/TabMoveEndAction.java | 64 ++++----------- .../cardlayout/TabMoveFirstAction.java | 61 ++++---------- .../creator/cardlayout/TabMoveNextAction.java | 60 ++++---------- .../creator/cardlayout/TabMovePrevAction.java | 60 ++++---------- 6 files changed, 143 insertions(+), 205 deletions(-) create mode 100644 designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveAction.java diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveAction.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveAction.java new file mode 100644 index 000000000..354846d91 --- /dev/null +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveAction.java @@ -0,0 +1,80 @@ +package com.fr.design.designer.creator.cardlayout; + +import com.fr.design.designer.beans.actions.FormUndoableAction; +import com.fr.design.mainframe.FormDesigner; +import com.fr.form.ui.CardSwitchButton; +import com.fr.form.ui.container.cardlayout.WTabFitLayout; +import com.fr.general.FRLogger; + +/** + * Created by zhouping on 2017/2/17. + */ +public class TabMoveAction extends FormUndoableAction { + private XCardSwitchButton xCardSwitchButton; + + public TabMoveAction(FormDesigner t, XCardSwitchButton xCardSwitchButton) { + super(t); + this.xCardSwitchButton = xCardSwitchButton; + } + + @Override + public boolean executeActionReturnUndoRecordNeeded() { + XCardSwitchButton xCardSwitchButton = getxCardSwitchButton(); + XWCardTagLayout xwCardTagLayout = xCardSwitchButton.getTagLayout(); + XWCardLayout xwCardLayout = xCardSwitchButton.getCardLayout(); + CardSwitchButton currentButton = (CardSwitchButton) xCardSwitchButton.toData(); + try { + int currentIndex = currentButton.getIndex(); + int maxIndex = xwCardTagLayout.getComponentCount(); + XWTabFitLayout xCurrentTab = (XWTabFitLayout) xwCardLayout.getXCreator(currentIndex); + WTabFitLayout currentTab = (WTabFitLayout) xCurrentTab.toData(); + xwCardTagLayout.setSwitchingTab(true); + + changeTabIndex(xwCardTagLayout, xwCardLayout, currentIndex, maxIndex); + + moveTabAction(xwCardTagLayout, currentButton, xCurrentTab, currentTab); + + xwCardTagLayout.setSwitchingTab(false); + }catch (Exception e){ + xwCardTagLayout.setSwitchingTab(false); + FRLogger.getLogger().error(e.getMessage()); + return false; + } + return true; + } + + private void moveTabAction(XWCardTagLayout xwCardTagLayout, CardSwitchButton currentButton, XWTabFitLayout xCurrentTab, WTabFitLayout currentTab) { + int move2Index = getTabMoveIndex(currentButton); + XWCardLayout xwCardLayout = xCardSwitchButton.getCardLayout(); + xwCardTagLayout.remove(xCardSwitchButton); + xwCardTagLayout.add(xCardSwitchButton, move2Index); + xwCardLayout.remove(xCurrentTab); + xwCardLayout.add(xCurrentTab, move2Index); + currentButton.setIndex(move2Index); + currentTab.setIndex(move2Index); + currentTab.setTabNameIndex(move2Index); + xwCardLayout.toData().setShowIndex(move2Index); + xwCardLayout.showCard(); + } + + //改变Tab的索引号 + protected void changeTabIndex(XWCardTagLayout xwCardTagLayout, XWCardLayout xwCardLayout, int currentIndex, int maxIndex) { + } + + /** + * 获取tab移动的目的索引:首位,末尾,下一个,上一个 + * @param currentButton 当前按钮 + * @return 索引 + */ + protected int getTabMoveIndex(CardSwitchButton currentButton) { + return currentButton.getIndex(); + } + + public XCardSwitchButton getxCardSwitchButton() { + return xCardSwitchButton; + } + + public void setxCardSwitchButton(XCardSwitchButton xCardSwitchButton) { + this.xCardSwitchButton = xCardSwitchButton; + } +} diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveCustomAction.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveCustomAction.java index 93a62287e..8930c686c 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveCustomAction.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveCustomAction.java @@ -1,32 +1,17 @@ package com.fr.design.designer.creator.cardlayout; -import com.fr.base.BaseUtils; -import com.fr.design.designer.beans.actions.FormUndoableAction; import com.fr.design.mainframe.FormDesigner; +import com.fr.general.IOUtils; /** * Created by zhouping on 2017/2/9. */ -public class TabMoveCustomAction extends FormUndoableAction { - private XCardSwitchButton xCardSwitchButton; +public class TabMoveCustomAction extends TabMoveAction { public TabMoveCustomAction(FormDesigner t, XCardSwitchButton xCardSwitchButton) { - super(t); + super(t, xCardSwitchButton); this.setName(""); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/control/refresh.png")); - this.xCardSwitchButton = xCardSwitchButton; + this.setSmallIcon(IOUtils.readIcon("/com/fr/design/images/control/refresh.png")); } - @Override - public boolean executeActionReturnUndoRecordNeeded() { - return false; - } - - public XCardSwitchButton getxCardSwitchButton() { - return xCardSwitchButton; - } - - public void setxCardSwitchButton(XCardSwitchButton xCardSwitchButton) { - this.xCardSwitchButton = xCardSwitchButton; - } } diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveEndAction.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveEndAction.java index b2a5214c4..5da5dd1c7 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveEndAction.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveEndAction.java @@ -1,68 +1,36 @@ package com.fr.design.designer.creator.cardlayout; -import com.fr.base.BaseUtils; -import com.fr.design.designer.beans.actions.FormUndoableAction; import com.fr.design.mainframe.FormDesigner; import com.fr.form.ui.CardSwitchButton; import com.fr.form.ui.container.cardlayout.WTabFitLayout; -import com.fr.general.FRLogger; +import com.fr.general.IOUtils; import com.fr.general.Inter; /** * Created by zhouping on 2017/2/9. */ -public class TabMoveEndAction extends FormUndoableAction { - private XCardSwitchButton xCardSwitchButton; +public class TabMoveEndAction extends TabMoveAction { public TabMoveEndAction(FormDesigner t, XCardSwitchButton xCardSwitchButton) { - super(t); + super(t, xCardSwitchButton); this.setName(Inter.getLocText("FR-Designer-Move_Tab_End")); - this.setSmallIcon(BaseUtils.readIcon("com/fr/design/images/control/rightright.png")); - this.xCardSwitchButton = xCardSwitchButton; + this.setSmallIcon(IOUtils.readIcon("com/fr/design/images/control/rightright.png")); } - @Override - public boolean executeActionReturnUndoRecordNeeded() { - XWCardTagLayout xwCardTagLayout = xCardSwitchButton.getTagLayout(); - XWCardLayout xwCardLayout = xCardSwitchButton.getCardLayout(); - CardSwitchButton currentButton = (CardSwitchButton) xCardSwitchButton.toData(); - try { - int currentIndex = currentButton.getIndex(); - int maxIndex = xwCardTagLayout.getComponentCount(); - XWTabFitLayout xCurrentTab = (XWTabFitLayout) xwCardLayout.getXCreator(currentIndex); - WTabFitLayout currentTab = (WTabFitLayout) xCurrentTab.toData(); - xwCardTagLayout.setSwitchingTab(true); - //修改当前tab往后所有tab的索引号 - for (int i = currentIndex + 1; i < maxIndex; i++) { - CardSwitchButton tempBtn = (CardSwitchButton) xwCardTagLayout.getXCreator(i).toData(); - tempBtn.setIndex(i - 1); - WTabFitLayout tempTab = (WTabFitLayout) xwCardLayout.getXCreator(i).toData(); - tempTab.setIndex(i - 1); - tempTab.setTabNameIndex(i - 1); - } - xwCardTagLayout.remove(xCardSwitchButton); - xwCardTagLayout.add(xCardSwitchButton); - xwCardLayout.remove(xCurrentTab); - xwCardLayout.add(xCurrentTab); - currentButton.setIndex(maxIndex - 1); - currentTab.setIndex(maxIndex - 1); - currentTab.setTabNameIndex(maxIndex - 1); - xwCardLayout.toData().setShowIndex(maxIndex - 1); - xwCardLayout.showCard(); - xwCardTagLayout.setSwitchingTab(false); - }catch (Exception e){ - xwCardTagLayout.setSwitchingTab(false); - FRLogger.getLogger().error(e.getMessage()); - return false; + //改变Tab的索引号 + protected void changeTabIndex(XWCardTagLayout xwCardTagLayout, XWCardLayout xwCardLayout, int currentIndex, int maxIndex) { + //修改当前tab往后所有tab的索引号 + for (int i = currentIndex + 1; i < maxIndex; i++) { + CardSwitchButton tempBtn = (CardSwitchButton) xwCardTagLayout.getXCreator(i).toData(); + tempBtn.setIndex(i - 1); + WTabFitLayout tempTab = (WTabFitLayout) xwCardLayout.getXCreator(i).toData(); + tempTab.setIndex(i - 1); + tempTab.setTabNameIndex(i - 1); } - return true; - } - - public XCardSwitchButton getxCardSwitchButton() { - return xCardSwitchButton; } - public void setxCardSwitchButton(XCardSwitchButton xCardSwitchButton) { - this.xCardSwitchButton = xCardSwitchButton; + @Override + protected int getTabMoveIndex(CardSwitchButton btn) { + return getxCardSwitchButton().getTagLayout().getComponentCount() - 1; } } diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveFirstAction.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveFirstAction.java index c9034d04b..26195b946 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveFirstAction.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveFirstAction.java @@ -1,67 +1,36 @@ package com.fr.design.designer.creator.cardlayout; -import com.fr.base.BaseUtils; -import com.fr.design.designer.beans.actions.FormUndoableAction; import com.fr.design.mainframe.FormDesigner; import com.fr.form.ui.CardSwitchButton; import com.fr.form.ui.container.cardlayout.WTabFitLayout; -import com.fr.general.FRLogger; +import com.fr.general.IOUtils; import com.fr.general.Inter; /** * Created by zhouping on 2017/2/9. */ -public class TabMoveFirstAction extends FormUndoableAction { - private XCardSwitchButton xCardSwitchButton; +public class TabMoveFirstAction extends TabMoveAction { public TabMoveFirstAction(FormDesigner t, XCardSwitchButton xCardSwitchButton) { - super(t); + super(t, xCardSwitchButton); this.setName(Inter.getLocText("FR-Designer-Move_Tab_First")); - this.setSmallIcon(BaseUtils.readIcon("com/fr/design/images/control/leftleft.png")); - this.xCardSwitchButton = xCardSwitchButton; + this.setSmallIcon(IOUtils.readIcon("com/fr/design/images/control/leftleft.png")); } @Override - public boolean executeActionReturnUndoRecordNeeded() { - XWCardTagLayout xwCardTagLayout = xCardSwitchButton.getTagLayout(); - XWCardLayout xwCardLayout = xCardSwitchButton.getCardLayout(); - CardSwitchButton currentButton = (CardSwitchButton) xCardSwitchButton.toData(); - try { - int currentIndex = currentButton.getIndex(); - XWTabFitLayout xCurrentTab = (XWTabFitLayout) xwCardLayout.getXCreator(currentIndex); - WTabFitLayout currentTab = (WTabFitLayout) xCurrentTab.toData(); - xwCardTagLayout.setSwitchingTab(true); - //修改当前tab往前所有tab的索引号 - for (int i = currentIndex - 1; i >= 0; i--) { - CardSwitchButton tempBtn = (CardSwitchButton) xwCardTagLayout.getXCreator(i).toData(); - tempBtn.setIndex(i + 1); - WTabFitLayout tempTab = (WTabFitLayout) xwCardLayout.getXCreator(i).toData(); - tempTab.setIndex(i + 1); - tempTab.setTabNameIndex(i + 1); - } - xwCardTagLayout.remove(xCardSwitchButton); - xwCardTagLayout.add(xCardSwitchButton, 0); - xwCardLayout.remove(xCurrentTab); - xwCardLayout.add(xCurrentTab, 0); - currentButton.setIndex(0); - currentTab.setIndex(0); - currentTab.setTabNameIndex(0); - xwCardLayout.toData().setShowIndex(0); - xwCardLayout.showCard(); - xwCardTagLayout.setSwitchingTab(false); - }catch (Exception e){ - xwCardTagLayout.setSwitchingTab(false); - FRLogger.getLogger().error(e.getMessage()); - return false; + protected void changeTabIndex(XWCardTagLayout xwCardTagLayout, XWCardLayout xwCardLayout, int currentIndex, int maxIndex) { + //修改当前tab往前所有tab的索引号 + for (int i = currentIndex - 1; i >= 0; i--) { + CardSwitchButton tempBtn = (CardSwitchButton) xwCardTagLayout.getXCreator(i).toData(); + tempBtn.setIndex(i + 1); + WTabFitLayout tempTab = (WTabFitLayout) xwCardLayout.getXCreator(i).toData(); + tempTab.setIndex(i + 1); + tempTab.setTabNameIndex(i + 1); } - return true; } - public XCardSwitchButton getxCardSwitchButton() { - return xCardSwitchButton; - } - - public void setxCardSwitchButton(XCardSwitchButton xCardSwitchButton) { - this.xCardSwitchButton = xCardSwitchButton; + @Override + protected int getTabMoveIndex(CardSwitchButton btn) { + return 0; } } diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveNextAction.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveNextAction.java index e7806a7ae..10e796abc 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveNextAction.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveNextAction.java @@ -1,66 +1,34 @@ package com.fr.design.designer.creator.cardlayout; -import com.fr.base.BaseUtils; -import com.fr.design.designer.beans.actions.FormUndoableAction; import com.fr.design.mainframe.FormDesigner; import com.fr.form.ui.CardSwitchButton; import com.fr.form.ui.container.cardlayout.WTabFitLayout; -import com.fr.general.FRLogger; +import com.fr.general.IOUtils; import com.fr.general.Inter; /** * Created by zhouping on 2017/2/9. */ -public class TabMoveNextAction extends FormUndoableAction { - private XCardSwitchButton xCardSwitchButton; +public class TabMoveNextAction extends TabMoveAction { public TabMoveNextAction(FormDesigner t, XCardSwitchButton xCardSwitchButton) { - super(t); + super(t, xCardSwitchButton); this.setName(Inter.getLocText("FR-Designer-Move_Tab_Next")); - this.setSmallIcon(BaseUtils.readIcon("com/fr/design/images/control/right.png")); - this.xCardSwitchButton = xCardSwitchButton; + this.setSmallIcon(IOUtils.readIcon("com/fr/design/images/control/right.png")); } @Override - public boolean executeActionReturnUndoRecordNeeded() { - XWCardTagLayout xwCardTagLayout = xCardSwitchButton.getTagLayout(); - XWCardLayout xwCardLayout = xCardSwitchButton.getCardLayout(); - CardSwitchButton currentButton = (CardSwitchButton) xCardSwitchButton.toData(); - try { - int currentIndex = currentButton.getIndex(); - XWTabFitLayout xCurrentTab = (XWTabFitLayout) xwCardLayout.getXCreator(currentIndex); - WTabFitLayout currentTab = (WTabFitLayout) xCurrentTab.toData(); - xwCardTagLayout.setSwitchingTab(true); - //修改下一个tab的索引号 - CardSwitchButton nextBtn = (CardSwitchButton) xwCardTagLayout.getXCreator(currentIndex + 1).toData(); - nextBtn.setIndex(currentIndex); - WTabFitLayout nextTab = (WTabFitLayout) xwCardLayout.getXCreator(currentIndex + 1).toData(); - nextTab.setIndex(currentIndex); - nextTab.setTabNameIndex(currentIndex); - - xwCardTagLayout.remove(xCardSwitchButton); - xwCardTagLayout.add(xCardSwitchButton, currentIndex + 1); - xwCardLayout.remove(xCurrentTab); - xwCardLayout.add(xCurrentTab, currentIndex + 1); - currentButton.setIndex(currentIndex + 1); - currentTab.setIndex(currentIndex + 1); - currentTab.setTabNameIndex(currentIndex + 1); - xwCardLayout.toData().setShowIndex(currentIndex + 1); - xwCardLayout.showCard(); - xwCardTagLayout.setSwitchingTab(false); - }catch (Exception e){ - xwCardTagLayout.setSwitchingTab(false); - FRLogger.getLogger().error(e.getMessage()); - return false; - } - return true; - } - - public XCardSwitchButton getxCardSwitchButton() { - return xCardSwitchButton; + protected void changeTabIndex(XWCardTagLayout xwCardTagLayout, XWCardLayout xwCardLayout, int currentIndex, int maxIndex) { + //修改下一个tab的索引号 + CardSwitchButton nextBtn = (CardSwitchButton) xwCardTagLayout.getXCreator(currentIndex + 1).toData(); + nextBtn.setIndex(currentIndex); + WTabFitLayout nextTab = (WTabFitLayout) xwCardLayout.getXCreator(currentIndex + 1).toData(); + nextTab.setIndex(currentIndex); + nextTab.setTabNameIndex(currentIndex); } - public void setxCardSwitchButton(XCardSwitchButton xCardSwitchButton) { - this.xCardSwitchButton = xCardSwitchButton; + @Override + protected int getTabMoveIndex(CardSwitchButton currentButton) { + return currentButton.getIndex() + 1; } } diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMovePrevAction.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMovePrevAction.java index e92852c6c..859a27eea 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMovePrevAction.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMovePrevAction.java @@ -1,66 +1,34 @@ package com.fr.design.designer.creator.cardlayout; -import com.fr.base.BaseUtils; -import com.fr.design.designer.beans.actions.FormUndoableAction; import com.fr.design.mainframe.FormDesigner; import com.fr.form.ui.CardSwitchButton; import com.fr.form.ui.container.cardlayout.WTabFitLayout; -import com.fr.general.FRLogger; +import com.fr.general.IOUtils; import com.fr.general.Inter; /** * Created by zhouping on 2017/2/9. */ -public class TabMovePrevAction extends FormUndoableAction { - private XCardSwitchButton xCardSwitchButton; +public class TabMovePrevAction extends TabMoveAction { public TabMovePrevAction(FormDesigner t, XCardSwitchButton xCardSwitchButton) { - super(t); + super(t, xCardSwitchButton); this.setName(Inter.getLocText("FR-Designer-Move_Tab_Prev")); - this.setSmallIcon(BaseUtils.readIcon("com/fr/design/images/control/left.png")); - this.xCardSwitchButton = xCardSwitchButton; + this.setSmallIcon(IOUtils.readIcon("com/fr/design/images/control/left.png")); } @Override - public boolean executeActionReturnUndoRecordNeeded() { - XWCardTagLayout xwCardTagLayout = xCardSwitchButton.getTagLayout(); - XWCardLayout xwCardLayout = xCardSwitchButton.getCardLayout(); - CardSwitchButton currentButton = (CardSwitchButton) xCardSwitchButton.toData(); - try { - int currentIndex = currentButton.getIndex(); - XWTabFitLayout xCurrentTab = (XWTabFitLayout) xwCardLayout.getXCreator(currentIndex); - WTabFitLayout currentTab = (WTabFitLayout) xCurrentTab.toData(); - xwCardTagLayout.setSwitchingTab(true); - //修改上一个tab的索引号 - CardSwitchButton prevBtn = (CardSwitchButton) xwCardTagLayout.getXCreator(currentIndex - 1).toData(); - prevBtn.setIndex(currentIndex); - WTabFitLayout prevTab = (WTabFitLayout) xwCardLayout.getXCreator(currentIndex - 1).toData(); - prevTab.setIndex(currentIndex); - prevTab.setTabNameIndex(currentIndex); - - xwCardTagLayout.remove(xCardSwitchButton); - xwCardTagLayout.add(xCardSwitchButton, currentIndex - 1); - xwCardLayout.remove(xCurrentTab); - xwCardLayout.add(xCurrentTab, currentIndex - 1); - currentButton.setIndex(currentIndex - 1); - currentTab.setIndex(currentIndex - 1); - currentTab.setTabNameIndex(currentIndex - 1); - xwCardLayout.toData().setShowIndex(currentIndex - 1); - xwCardLayout.showCard(); - xwCardTagLayout.setSwitchingTab(false); - }catch (Exception e){ - xwCardTagLayout.setSwitchingTab(false); - FRLogger.getLogger().error(e.getMessage()); - return false; - } - return true; - } - - public XCardSwitchButton getxCardSwitchButton() { - return xCardSwitchButton; + protected void changeTabIndex(XWCardTagLayout xwCardTagLayout, XWCardLayout xwCardLayout, int currentIndex, int maxIndex) { + //修改上一个tab的索引号 + CardSwitchButton prevBtn = (CardSwitchButton) xwCardTagLayout.getXCreator(currentIndex - 1).toData(); + prevBtn.setIndex(currentIndex); + WTabFitLayout prevTab = (WTabFitLayout) xwCardLayout.getXCreator(currentIndex - 1).toData(); + prevTab.setIndex(currentIndex); + prevTab.setTabNameIndex(currentIndex); } - public void setxCardSwitchButton(XCardSwitchButton xCardSwitchButton) { - this.xCardSwitchButton = xCardSwitchButton; + @Override + protected int getTabMoveIndex(CardSwitchButton currentButton) { + return currentButton.getIndex() - 1; } } From 5aeaf116985970713264c1c8528632a7dd919606 Mon Sep 17 00:00:00 2001 From: zhouping Date: Fri, 17 Feb 2017 18:01:28 +0800 Subject: [PATCH 106/343] =?UTF-8?q?REPORT-1838=20frm=E9=87=8C=E5=A4=9A?= =?UTF-8?q?=E5=B1=82tab=E7=9A=84=E6=83=85=E5=86=B5=E4=B8=8B=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E6=8A=A5=E8=A1=A8=E5=9D=97=E5=A4=A7=E5=B0=8F=E6=9C=89?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../beans/adapters/layout/FRFitLayoutAdapter.java | 6 +++++- .../beans/adapters/layout/FRTabFitLayoutAdapter.java | 9 +++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java index 25b079caf..d8243a24b 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java @@ -277,6 +277,10 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { super.clearCompsList(); } + protected Rectangle getLayoutBound(XWCardMainBorderLayout mainLayout){ + return mainLayout.getBounds(); + } + private Rectangle adjustBackupBound(Rectangle backupBound, XWCardMainBorderLayout mainLayout) { // 参数界面高度对纵坐标产生的影响 JForm jform = (JForm) (HistoryTemplateListPane.getInstance().getCurrentEditingTemplate()); @@ -284,7 +288,7 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { backupBound.y -= jform.getFormDesign().getParaHeight(); } - Rectangle rec = mainLayout.getBounds(); + Rectangle rec = getLayoutBound(mainLayout); // XWTabLayout里面的横纵坐标收到外层XWCardMainBorderLayout的横纵坐标影响 // 减掉之后可以按照它原来的逻辑执行 backupBound.x -= rec.x; diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRTabFitLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRTabFitLayoutAdapter.java index 8c67a44ab..bd85fc83b 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRTabFitLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRTabFitLayoutAdapter.java @@ -4,13 +4,12 @@ package com.fr.design.designer.beans.adapters.layout; -import java.awt.Rectangle; - import com.fr.design.beans.GroupModel; import com.fr.design.designer.creator.XCreator; import com.fr.design.designer.creator.XLayoutContainer; import com.fr.design.designer.creator.XWidgetCreator; 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.properties.FRTabFitLayoutPropertiesGroupModel; import com.fr.design.utils.ComponentUtils; @@ -18,6 +17,8 @@ import com.fr.form.ui.LayoutBorderStyle; import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; import com.fr.general.ComparatorUtils; +import java.awt.*; + /** * tab布局tabFit适配器 * @@ -91,4 +92,8 @@ public class FRTabFitLayoutAdapter extends FRFitLayoutAdapter { } return y; } + + protected Rectangle getLayoutBound(XWCardMainBorderLayout mainLayout){ + return ComponentUtils.getRelativeBounds(mainLayout); + } } \ No newline at end of file From a295e13b280b3f97f879b74f4abc39ac0b32bb3f Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 20 Feb 2017 10:07:39 +0800 Subject: [PATCH 107/343] =?UTF-8?q?REPORT-1967=20=E5=9B=BD=E9=99=85?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/locale/designer_en_US.properties | 6 ++++++ .../src/com/fr/design/locale/designer_ja_JP.properties | 8 +++++++- .../src/com/fr/design/locale/designer_ko_KR.properties | 10 ++++++---- .../src/com/fr/design/locale/designer_zh_CN.properties | 6 ++++++ .../src/com/fr/design/locale/designer_zh_TW.properties | 6 ++++++ 5 files changed, 31 insertions(+), 5 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index e5f89932f..26d5bc85f 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -100,6 +100,7 @@ FR-Designer_FS_Close_Other_Templates=Close other templates FR-Designer_File=file FR-Designer_Filter_Conditions=Filter condition FR-Designer_Finish-Modify-Share=Finish Modification And Share +FR-Designer_Fit-App=App self-adaption FR-Designer_Fit=self-adaption FR-Designer_Font-Family=Font name FR-Designer_Font-Size=Font size @@ -358,6 +359,7 @@ FR-Designer_KeyPoint=KeyPoint FR-Designer_loadedTreeModel=loadedTreeModel FR-Designer-Failed_to_load_the_plugin=Failed to load the plugin\uFF0Cplease update the plugin\: FR-Designer-Plugin_Please_Update_Jar=Please Update Jar +FR-Designer-Invalid_Page_Number=Invalid Page Number FR-Designer_XMLA_Database=DB FR-Designer_XMLA_UserName=User name FR-Designer_XMLA_Password=Password @@ -486,6 +488,10 @@ FR-Designer-DS-Database_Query=DB Query FR-Designer_Is_Share_DBTableData=Shared data set FR-Designer_Event=Event 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_Exported_successfully=Exported successfully FR-Designer_Exporting=Exporting diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index 9b6ce1989..d86d0a164 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/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_Filter_Conditions=\u9078\u5225\u6761\u4EF6 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_Font-Family=\u30D5\u30A9\u30F3\u30C8\u540D\u79F0 FR-Designer_Font-Size=\u30D5\u30A9\u30F3\u30C8\u5927\u5C0F @@ -465,10 +466,15 @@ FR-Designer-LayerPageReport_Define_PageQuerySQL=\u6539\u30DA\u30FC\u30B8\u691C\u FR-Designer_Is_Share_DBTableData=\u5171\u6709\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8 FR-Designer_Event=\u30A4\u30D9\u30F3\u30C8 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_Exported_successfully=\u5C0E\u51FA\u6210\u529F 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_JavaScript=JavaScript FR-Designer_JavaScript_Form_Submit=\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u66F8\u304D\u8FBC\u307F diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index 22f6dd541..dfb5ec78f 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/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_Filter_Conditions=\uD544\uD130\uC870\uAC74 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_Font-Family=\uAE00\uAF34\uBA85\uCE6D FR-Designer_Font-Size=\uAE00\uAF34\uD06C\uAE30 @@ -445,6 +446,7 @@ FR-Designer_WLayout-Absolute-ToolTips=\uC790\uC720\uC2DD\uB808\uC774\uC544\uC6C3 FR-Designer_Add_all=\uBAA8\uB450\uCD94\uAC00 FR-Designer_Reset= FR-Designer_Language_Change_Successful= +FR-Designer_Template_Web_Attributes= FR-Designer_Basic=\uAE30\uBCF8 FR-Designer_Printers(Server)=\uD504\uB9B0\uD130(\uC11C\uBC84) FR-Designer_Pagination_Setting=\uD398\uC774\uC9C0\uB098\uB204\uAE30\uBBF8\uB9AC\uBCF4\uAE30\uC124\uC815 @@ -459,6 +461,10 @@ 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_Define_PageQuerySQL=\uC815\uC758\uD398\uC774\uC9C0\uB098\uB204\uAE30\uCC3E\uC544\uBCF4\uAE30sql 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_Export_failed=\uB0B4\uBCF4\uB0B4\uAE30\uC2E4\uD328 FR-Designer_Exported_successfully=\uB0B4\uBCF4\uB0B4\uAE30\uC131\uACF5 @@ -483,7 +489,6 @@ FR-Designer_Create_Tree= FR-Designer_Set_Callback_Function= FR-Designer_ConfirmDialog_Content= FR-Designer_ConfirmDialog_Title= - 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_FormulaPane_Variables=\uBCC0\uC218 FR-Designer_FormulaPane_Formula_Description=\uC218\uC2DD\uC124\uBA85 @@ -492,14 +497,11 @@ FR-Designer_FormulaPane_Search=\uAC80\uC0C9 FR-Designer_Tab_carousel= FR-Designer_setCarousel= 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 -<<<<<<< HEAD - 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 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index b5a5106ce..367884033 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/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_Filter_Conditions=\u8FC7\u6EE4\u6761\u4EF6 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_Font-Family=\u5B57\u4F53\u540D\u79F0 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-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-Invalid_Page_Number=\u65E0\u6548\u9875\u7801 FR-Designer_Get-CubeGetting=\u83B7\u53D6cube FR-Designer_XMLA_Database=\u6570\u636E\u5E93 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_Event=\u4E8B\u4EF6 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_Exported_successfully=\u5BFC\u51FA\u6210\u529F FR-Designer_Exporting=\u6B63\u5728\u5BFC\u51FA diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 369939567..95aba53ff 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/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_Filter_Conditions=\u904E\u6FFE\u689D\u4EF6 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_Font-Family=\u5B57\u9AD4\u540D\u7A31 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-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-Invalid_Page_Number=\u7121\u6548\u9801\u78BC FR-Designer_Get-CubeGetting=\u7372\u53D6cube FR-Designer_XMLA_Database=\u8CC7\u6599\u5EAB FR-Designer_XMLA_UserName=\u5E33\u865F @@ -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_Properties=\u5C6C\u6027 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_Exported_successfully=\u532F\u51FA\u6210\u529F FR-Designer_Exporting=\u6B63\u5728\u532F\u51FA... From 8ad66164ccc4bd039ff8d8276586ab9566cb1e0e Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 20 Feb 2017 10:23:11 +0800 Subject: [PATCH 108/343] =?UTF-8?q?REPORT-1967=20=E5=9B=BD=E9=99=85?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/locale/designer.properties | 8 +++++++- .../src/com/fr/design/locale/designer_en_US.properties | 6 ++++++ .../src/com/fr/design/locale/designer_ja_JP.properties | 8 +++++++- .../src/com/fr/design/locale/designer_ko_KR.properties | 10 ++++++---- .../src/com/fr/design/locale/designer_zh_CN.properties | 6 ++++++ .../src/com/fr/design/locale/designer_zh_TW.properties | 6 ++++++ 6 files changed, 38 insertions(+), 6 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index eb1d6a7df..66da25604 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -101,6 +101,7 @@ FR-Designer_File= FR-Designer_Filter_Conditions= FR-Designer_Finish-Modify-Share= FR-Designer_Fit= +FR-Designer_Fit-App= FR-Designer_Font-Family= FR-Designer_Font-Size= FR-Designer_Forbid_Drag_into_Adapt_Pane=Forbid Drag into Para Pane @@ -357,6 +358,7 @@ FR-Designer_KeyPoint=KeyPoint FR-Designer_loadedTreeModel=loadedTreeModel FR-Designer-Failed_to_load_the_plugin=Failed to load the plugin\uFF0Cplease update the plugin\: FR-Designer-Plugin_Please_Update_Jar= +FR-Designer-Invalid_Page_Number=Invalid Page Number FR-Designer_XMLA_Database=Database FR-Designer_XMLA_UserName=User name FR-Designer_XMLA_Password=Password @@ -487,6 +489,10 @@ FR-Designer-LayerPageReport_PageQuery= FR-Designer-LayerPageReport_Define_PageQuerySQL= FR-Designer_Event= 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_Exported_successfully=Exported successfully FR-Designer_Exporting=Exporting @@ -558,4 +564,4 @@ 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 \ No newline at end of file +FR-Designer_Parameter-Formula=Formula diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index e5f89932f..26d5bc85f 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -100,6 +100,7 @@ FR-Designer_FS_Close_Other_Templates=Close other templates FR-Designer_File=file FR-Designer_Filter_Conditions=Filter condition FR-Designer_Finish-Modify-Share=Finish Modification And Share +FR-Designer_Fit-App=App self-adaption FR-Designer_Fit=self-adaption FR-Designer_Font-Family=Font name FR-Designer_Font-Size=Font size @@ -358,6 +359,7 @@ FR-Designer_KeyPoint=KeyPoint FR-Designer_loadedTreeModel=loadedTreeModel FR-Designer-Failed_to_load_the_plugin=Failed to load the plugin\uFF0Cplease update the plugin\: FR-Designer-Plugin_Please_Update_Jar=Please Update Jar +FR-Designer-Invalid_Page_Number=Invalid Page Number FR-Designer_XMLA_Database=DB FR-Designer_XMLA_UserName=User name FR-Designer_XMLA_Password=Password @@ -486,6 +488,10 @@ FR-Designer-DS-Database_Query=DB Query FR-Designer_Is_Share_DBTableData=Shared data set FR-Designer_Event=Event 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_Exported_successfully=Exported successfully FR-Designer_Exporting=Exporting diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index 9b6ce1989..d86d0a164 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/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_Filter_Conditions=\u9078\u5225\u6761\u4EF6 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_Font-Family=\u30D5\u30A9\u30F3\u30C8\u540D\u79F0 FR-Designer_Font-Size=\u30D5\u30A9\u30F3\u30C8\u5927\u5C0F @@ -465,10 +466,15 @@ FR-Designer-LayerPageReport_Define_PageQuerySQL=\u6539\u30DA\u30FC\u30B8\u691C\u FR-Designer_Is_Share_DBTableData=\u5171\u6709\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8 FR-Designer_Event=\u30A4\u30D9\u30F3\u30C8 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_Exported_successfully=\u5C0E\u51FA\u6210\u529F 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_JavaScript=JavaScript FR-Designer_JavaScript_Form_Submit=\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u66F8\u304D\u8FBC\u307F diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index 22f6dd541..dfb5ec78f 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/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_Filter_Conditions=\uD544\uD130\uC870\uAC74 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_Font-Family=\uAE00\uAF34\uBA85\uCE6D FR-Designer_Font-Size=\uAE00\uAF34\uD06C\uAE30 @@ -445,6 +446,7 @@ FR-Designer_WLayout-Absolute-ToolTips=\uC790\uC720\uC2DD\uB808\uC774\uC544\uC6C3 FR-Designer_Add_all=\uBAA8\uB450\uCD94\uAC00 FR-Designer_Reset= FR-Designer_Language_Change_Successful= +FR-Designer_Template_Web_Attributes= FR-Designer_Basic=\uAE30\uBCF8 FR-Designer_Printers(Server)=\uD504\uB9B0\uD130(\uC11C\uBC84) FR-Designer_Pagination_Setting=\uD398\uC774\uC9C0\uB098\uB204\uAE30\uBBF8\uB9AC\uBCF4\uAE30\uC124\uC815 @@ -459,6 +461,10 @@ 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_Define_PageQuerySQL=\uC815\uC758\uD398\uC774\uC9C0\uB098\uB204\uAE30\uCC3E\uC544\uBCF4\uAE30sql 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_Export_failed=\uB0B4\uBCF4\uB0B4\uAE30\uC2E4\uD328 FR-Designer_Exported_successfully=\uB0B4\uBCF4\uB0B4\uAE30\uC131\uACF5 @@ -483,7 +489,6 @@ FR-Designer_Create_Tree= FR-Designer_Set_Callback_Function= FR-Designer_ConfirmDialog_Content= FR-Designer_ConfirmDialog_Title= - 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_FormulaPane_Variables=\uBCC0\uC218 FR-Designer_FormulaPane_Formula_Description=\uC218\uC2DD\uC124\uBA85 @@ -492,14 +497,11 @@ FR-Designer_FormulaPane_Search=\uAC80\uC0C9 FR-Designer_Tab_carousel= FR-Designer_setCarousel= 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 -<<<<<<< HEAD - 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 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index b5a5106ce..367884033 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/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_Filter_Conditions=\u8FC7\u6EE4\u6761\u4EF6 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_Font-Family=\u5B57\u4F53\u540D\u79F0 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-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-Invalid_Page_Number=\u65E0\u6548\u9875\u7801 FR-Designer_Get-CubeGetting=\u83B7\u53D6cube FR-Designer_XMLA_Database=\u6570\u636E\u5E93 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_Event=\u4E8B\u4EF6 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_Exported_successfully=\u5BFC\u51FA\u6210\u529F FR-Designer_Exporting=\u6B63\u5728\u5BFC\u51FA diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 369939567..95aba53ff 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/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_Filter_Conditions=\u904E\u6FFE\u689D\u4EF6 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_Font-Family=\u5B57\u9AD4\u540D\u7A31 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-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-Invalid_Page_Number=\u7121\u6548\u9801\u78BC FR-Designer_Get-CubeGetting=\u7372\u53D6cube FR-Designer_XMLA_Database=\u8CC7\u6599\u5EAB FR-Designer_XMLA_UserName=\u5E33\u865F @@ -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_Properties=\u5C6C\u6027 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_Exported_successfully=\u532F\u51FA\u6210\u529F FR-Designer_Exporting=\u6B63\u5728\u532F\u51FA... From ae2dac569b3109713ff901449c50d5f66d419256 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Mon, 20 Feb 2017 11:00:44 +0800 Subject: [PATCH 109/343] =?UTF-8?q?=E6=97=A0jira=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=EF=BC=8C=E5=B1=9E=E6=80=A7=E4=BF=AE=E6=94=B9=E4=B8=BA=E7=A7=81?= =?UTF-8?q?=E6=9C=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapters/layout/FRBodyLayoutAdapter.java | 42 +++++++++---------- 1 file changed, 19 insertions(+), 23 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRBodyLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRBodyLayoutAdapter.java index dc1fb7d36..e189c607f 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRBodyLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRBodyLayoutAdapter.java @@ -19,37 +19,37 @@ import java.util.*; * Created by zhouping on 2016/8/18. */ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter { - protected static final int COMP_TOP = 1; - protected static final int COMP_BOTTOM = 2; - protected static final int COMP_LEFT = 3; - protected static final int COMP_RIGHT = 4; + private static final int COMP_TOP = 1; + private static final int COMP_BOTTOM = 2; + private static final int COMP_LEFT = 3; + private static final int COMP_RIGHT = 4; private static final int COMP_LEFT_TOP = 5; private static final int COMP_LEFT_BOTTOM = 6; private static final int COMP_RIGHT_TOP = 7; private static final int COMP_RIGHT_BOTTOM = 8; private static final int INDEX_ZERO = 0; - protected static final double TOP_HALF = 0.25; - protected static final double BOTTOM_HALF = 0.75; - protected static final int DEFAULT_AREA_LENGTH = 5; //判断交叉区域范围的默认长度 - protected static final int BORDER_PROPORTION = 10; //边界三等分或交叉区域大小取组件1/10和默认大小 + private static final double TOP_HALF = 0.25; + private static final double BOTTOM_HALF = 0.75; + private static final int DEFAULT_AREA_LENGTH = 5; //判断交叉区域范围的默认长度 + private static final int BORDER_PROPORTION = 10; //边界三等分或交叉区域大小取组件1/10和默认大小 - protected int trisectAreaDirect = 0; - protected int crossPointAreaDirect = 0; + private int trisectAreaDirect = 0; + private int crossPointAreaDirect = 0; // 增加删除拉伸控件用的临时list - protected java.util.List rightComps; - protected java.util.List leftComps; - protected java.util.List downComps; - protected java.util.List upComps; + private java.util.List rightComps; + private java.util.List leftComps; + private java.util.List downComps; + private java.util.List upComps; // 三等分时计算对应侧的组件 - protected boolean isFindRelatedComps = false; + private boolean isFindRelatedComps = false; // 渲染时只计算对应的bounds而不调整 private boolean isCalculateChildPos = false; private int[] childPosition = null; //painter用的位置 - protected int minWidth = 0; // 最小尺寸,由于屏幕百分比里不同,显示的最小大小也不同 - protected int minHeight = 0; - protected int actualVal = 0; // 存在间隔时,add move drag 判断对齐等都要考虑 - protected PaddingMargin margin; // 布局容器边距 + private int minWidth = 0; // 最小尺寸,由于屏幕百分比里不同,显示的最小大小也不同 + private int minHeight = 0; + private int actualVal = 0; // 存在间隔时,add move drag 判断对齐等都要考虑 + private PaddingMargin margin; // 布局容器边距 /** * 在添加组件状态时,当鼠标移动到某个容器上方时,如果该容器有布局管理器,则会调用该布局 @@ -629,10 +629,8 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter { private int getPositionOfFix(XCreator currentCreator, int x, int y) { int position = 0; XLayoutContainer cardLayout = ((XWCardMainBorderLayout) currentCreator).getCardPart(); - XLayoutContainer container = (XLayoutContainer) cardLayout.getComponent(0); Rectangle rect = ComponentUtils.getRelativeBounds(container); - /* * 为了获取到鼠标drop位置的控件, * 我们之前已经将y值变为相对坐标值; @@ -644,11 +642,9 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter { if (currentCreator.getParent().getParent().getComponent(0) instanceof XWParameterLayout) { int high = currentCreator.getParent().getParent().getComponent(0).getHeight(); y = y + WCardMainBorderLayout.TAB_HEIGHT + high; - } else { y = y + WCardMainBorderLayout.TAB_HEIGHT; } - int tempX = x - rect.x; int tempY = y - rect.y; int containerX = container.getX(); From 58ad4ecbf0d1fa8379ae2e4ba71b05f0e3f50666 Mon Sep 17 00:00:00 2001 From: fanglei <294531121> Date: Mon, 20 Feb 2017 11:20:01 +0800 Subject: [PATCH 110/343] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E5=87=A0=E4=B8=AA?= =?UTF-8?q?=E4=B8=8D=E8=A7=84=E8=8C=83=E7=9A=84=E5=9C=B0=E6=96=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../poly/hanlder/BottomCornerMouseHanlder.java | 2 +- .../com/fr/design/beans/location/MoveUtils.java | 2 +- .../gui/itable/AbstractPropertyTable.java | 17 +++++++---------- .../com/fr/design/gui/itable/PropertyGroup.java | 14 ++++++++++---- .../design/designer/beans/location/Inner.java | 10 ++++------ .../fr/design/mainframe/ConnectorHelper.java | 5 ++--- .../design/mainframe/MobileParaWidgetTable.java | 3 --- .../fr/design/mainframe/MobileWidgetTable.java | 3 --- 8 files changed, 25 insertions(+), 31 deletions(-) diff --git a/designer/src/com/fr/poly/hanlder/BottomCornerMouseHanlder.java b/designer/src/com/fr/poly/hanlder/BottomCornerMouseHanlder.java index e42835abb..1a895cbfe 100644 --- a/designer/src/com/fr/poly/hanlder/BottomCornerMouseHanlder.java +++ b/designer/src/com/fr/poly/hanlder/BottomCornerMouseHanlder.java @@ -170,7 +170,7 @@ public class BottomCornerMouseHanlder extends MouseInputAdapter { * @return 重叠 */ @Override - public boolean isWidgetsIntersects() { + public boolean isWidgetsIntersected() { return false; } diff --git a/designer_base/src/com/fr/design/beans/location/MoveUtils.java b/designer_base/src/com/fr/design/beans/location/MoveUtils.java index 1e110358c..853e37026 100644 --- a/designer_base/src/com/fr/design/beans/location/MoveUtils.java +++ b/designer_base/src/com/fr/design/beans/location/MoveUtils.java @@ -84,7 +84,7 @@ public class MoveUtils { * 获取designer内部组件是否重叠的标志位 * @return 重叠 */ - boolean isWidgetsIntersects(); //TODO 消除PMD检查错误,把getWidgetsIntersects改成isWidgetsIntersects + boolean isWidgetsIntersected(); /** * 获取designer相对屏幕的位置 diff --git a/designer_base/src/com/fr/design/gui/itable/AbstractPropertyTable.java b/designer_base/src/com/fr/design/gui/itable/AbstractPropertyTable.java index 96c9a5c1e..340b55450 100644 --- a/designer_base/src/com/fr/design/gui/itable/AbstractPropertyTable.java +++ b/designer_base/src/com/fr/design/gui/itable/AbstractPropertyTable.java @@ -28,23 +28,17 @@ public abstract class AbstractPropertyTable extends JTable { // // 所有数据组, 把数据分组,一个可折叠的项里面的所有行 为一组 protected ArrayList groups; - protected TableModel default_table_model; // 属性表被选中的行加一个浅蓝色的背景 public static final Color PROPERTY_SELECTION_BACKGROUND = new Color(153, 204, 255); // 属性表的行高 public static final int PROPERTY_TABLE_ROW_HEIGHT = 22; - private static final int PROPERTY_ICON_WIDTH = 10; public AbstractPropertyTable() { this.setTableProperties(); this.initPopup(); - default_table_model = new DefaultTableModel(); - this.setModel(default_table_model); + this.setModel(new DefaultTableModel()); } - /** - * 设置表格属性 - */ private void setTableProperties() { JTableHeader header = getTableHeader(); header.setReorderingAllowed(false); @@ -86,8 +80,11 @@ public abstract class AbstractPropertyTable extends JTable { PropertyGroup group = groups.get(pIndex.x); //如果是标题行 if (pIndex.y == 0) { - //采用group中定义好的标题行渲染器 - return group.getRenderer(); + if (column == 0) { + return group.getFirstRenderer(); + } else { + return group.getSecondRenderer(); + } } else { //如果是非标题行第一列,采用默认渲染器 if (column == 0) { @@ -183,7 +180,7 @@ public abstract class AbstractPropertyTable extends JTable { int row = AbstractPropertyTable.super.rowAtPoint(e.getPoint()); if (row != -1) { Point pIndex = getGroupIndex(row); - if (pIndex.y == 0 && e.getClickCount() == 1 && e.getX() < PROPERTY_ICON_WIDTH) { + if (pIndex.y == 0 && e.getClickCount() == 1 && e.getX() < 10) { toggleCollapse(pIndex.x); } } diff --git a/designer_base/src/com/fr/design/gui/itable/PropertyGroup.java b/designer_base/src/com/fr/design/gui/itable/PropertyGroup.java index 0e6426ac1..c863c882d 100644 --- a/designer_base/src/com/fr/design/gui/itable/PropertyGroup.java +++ b/designer_base/src/com/fr/design/gui/itable/PropertyGroup.java @@ -12,11 +12,13 @@ public class PropertyGroup { private GroupModel model; // 描述这个属性组中的数据model private String name; // 这组属性的标题名称 private boolean collapsed; // 这组属性是否折叠 - private GroupRenderer renderer; // 属性标题渲染器 + private GroupRenderer renderer1; + private GroupRenderer renderer2; public PropertyGroup(GroupModel model) { this(model.getGroupName(), model, false); - renderer = new GroupRenderer(); + renderer1 = new GroupRenderer(); + renderer2 = new GroupRenderer(); } public PropertyGroup(String name, GroupModel model, boolean collapsed) { @@ -49,8 +51,12 @@ public class PropertyGroup { this.collapsed = collapsed; } - public TableCellRenderer getRenderer() { - return renderer; + public TableCellRenderer getFirstRenderer() { + return renderer1; + } + + public TableCellRenderer getSecondRenderer() { + return renderer2; } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/location/Inner.java b/designer_form/src/com/fr/design/designer/beans/location/Inner.java index 5c3c38844..d400a064c 100644 --- a/designer_form/src/com/fr/design/designer/beans/location/Inner.java +++ b/designer_form/src/com/fr/design/designer/beans/location/Inner.java @@ -46,12 +46,10 @@ public class Inner extends AccessDirection { return new Point(x, y); } - //TODO 原先这个类是通过一个new一个匿名类继承RectangleDesigner接口实现的,但是报了方法超过50行的PMD错误 - //TODO 暂时就先这样命名,请原作者看到后重新命名 - private class RectangleDesigner1 implements RectangleDesigner { + private class RectDesigner implements RectangleDesigner { private FormDesigner designer = null; - public RectangleDesigner1(FormDesigner designer) { + public RectDesigner(FormDesigner designer) { this.designer = designer; } @@ -101,7 +99,7 @@ public class Inner extends AccessDirection { * @return 重叠 */ @Override - public boolean isWidgetsIntersects() { + public boolean isWidgetsIntersected() { return designer.isWidgetsIntersect(); } @@ -138,7 +136,7 @@ public class Inner extends AccessDirection { @Override protected void sorptionPoint(Point point, Rectangle current_bounds, final FormDesigner designer) { - RectangleDesigner1 rd = new RectangleDesigner1(designer); + RectDesigner rd = new RectDesigner(designer); //判断当前操作的是不是参数面板,要特殊处理 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)); diff --git a/designer_form/src/com/fr/design/mainframe/ConnectorHelper.java b/designer_form/src/com/fr/design/mainframe/ConnectorHelper.java index b4d897281..2bc38699e 100644 --- a/designer_form/src/com/fr/design/mainframe/ConnectorHelper.java +++ b/designer_form/src/com/fr/design/mainframe/ConnectorHelper.java @@ -19,8 +19,7 @@ public class ConnectorHelper { public static final int NEAR = 5; private static double ratio = 0.5; - // TODO 为了消除魔术数错误,我不清楚这个15代表什么,先这样命名了,原作者看到了请改一下 - private final static int MAGICNUMBER = 15; + private final static int ADSORPTION = 15; // 吸附距离 private ArrayList drawingPoint; private FormDesigner designer; private boolean drawing; @@ -88,7 +87,7 @@ public class ConnectorHelper { public void createDefalutLine() { if (drawingPoint != null && drawingPoint.size() > 1 - && ConnectorCreator.getMinimumDistance(drawingPoint.get(0), drawingPoint.get(drawingPoint.size() - 1)) > MAGICNUMBER) { + && ConnectorCreator.getMinimumDistance(drawingPoint.get(0), drawingPoint.get(drawingPoint.size() - 1)) > ADSORPTION) { ((XWAbsoluteLayout) designer.getRootComponent()).addConnector(new Connector().addAll(drawingPoint)); } drawingPoint = null; diff --git a/designer_form/src/com/fr/design/mainframe/MobileParaWidgetTable.java b/designer_form/src/com/fr/design/mainframe/MobileParaWidgetTable.java index 9d670db2c..67f47f951 100644 --- a/designer_form/src/com/fr/design/mainframe/MobileParaWidgetTable.java +++ b/designer_form/src/com/fr/design/mainframe/MobileParaWidgetTable.java @@ -82,9 +82,6 @@ class MobileParaWidgetTable extends JTable { add(moveComponent); } - /** - * 设置表格属性 - */ private void setTableProperties() { JTableHeader header = getTableHeader(); header.setReorderingAllowed(false); diff --git a/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java b/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java index 9b589b09b..bb7ba9918 100644 --- a/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java +++ b/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java @@ -67,9 +67,6 @@ public class MobileWidgetTable extends JTable { add(moveComponent); } - /** - * 设置表格属性 - */ private void setTableProperties() { JTableHeader header = getTableHeader(); header.setReorderingAllowed(false); From 3b3481f7685cf32f84681902559ae16cbd47c251 Mon Sep 17 00:00:00 2001 From: zhouping Date: Mon, 20 Feb 2017 11:20:01 +0800 Subject: [PATCH 111/343] =?UTF-8?q?REPORT-1814=20=E8=A1=A8=E5=8D=95tab?= =?UTF-8?q?=E5=9D=97=E7=9A=84=E6=94=B9=E8=89=AFbug=20=E5=B5=8C=E5=A5=97?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer/creator/cardlayout/XWCardLayout.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java index 7597a4579..8a7db6059 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java @@ -296,8 +296,14 @@ public class XWCardLayout extends XLayoutContainer { * @return 嵌套与否 */ private boolean isNested() { - XLayoutContainer xLayoutContainer = this.getBackupParent().getBackupParent(); - return xLayoutContainer == null || xLayoutContainer.acceptType(XWTabFitLayout.class); + XCreator xCreator = (XCreator)this.getBackupParent().getParent(); + while (xCreator != null) { + if (xCreator.acceptType(XWCardMainBorderLayout.class)) { + return true; + } + xCreator = (XCreator) xCreator.getParent(); + } + return false; } public CRPropertyDescriptor[] getisCarousel() throws IntrospectionException { From 0403b6e3cc2a049424e6c28c7f95d354693e3f1c Mon Sep 17 00:00:00 2001 From: fanglei <294531121> Date: Mon, 20 Feb 2017 11:31:06 +0800 Subject: [PATCH 112/343] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E5=B0=8F=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/gui/itable/AbstractPropertyTable.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/gui/itable/AbstractPropertyTable.java b/designer_base/src/com/fr/design/gui/itable/AbstractPropertyTable.java index 340b55450..36e9cc17d 100644 --- a/designer_base/src/com/fr/design/gui/itable/AbstractPropertyTable.java +++ b/designer_base/src/com/fr/design/gui/itable/AbstractPropertyTable.java @@ -32,6 +32,7 @@ public abstract class AbstractPropertyTable extends JTable { public static final Color PROPERTY_SELECTION_BACKGROUND = new Color(153, 204, 255); // 属性表的行高 public static final int PROPERTY_TABLE_ROW_HEIGHT = 22; + private static final int PROPERTY_ICON_WIDTH = 10; public AbstractPropertyTable() { this.setTableProperties(); @@ -180,7 +181,7 @@ public abstract class AbstractPropertyTable extends JTable { int row = AbstractPropertyTable.super.rowAtPoint(e.getPoint()); if (row != -1) { 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); } } From bb99b03e2b30c2cd433662fb29076e24f526bf5c Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Mon, 20 Feb 2017 14:06:08 +0800 Subject: [PATCH 113/343] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=EF=BC=8C=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapters/layout/FRBodyLayoutAdapter.java | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRBodyLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRBodyLayoutAdapter.java index e189c607f..8db19d9fb 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRBodyLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRBodyLayoutAdapter.java @@ -19,37 +19,37 @@ import java.util.*; * Created by zhouping on 2016/8/18. */ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter { - private static final int COMP_TOP = 1; - private static final int COMP_BOTTOM = 2; - private static final int COMP_LEFT = 3; - private static final int COMP_RIGHT = 4; + protected static final int COMP_TOP = 1; + protected static final int COMP_BOTTOM = 2; + protected static final int COMP_LEFT = 3; + protected static final int COMP_RIGHT = 4; private static final int COMP_LEFT_TOP = 5; private static final int COMP_LEFT_BOTTOM = 6; private static final int COMP_RIGHT_TOP = 7; private static final int COMP_RIGHT_BOTTOM = 8; private static final int INDEX_ZERO = 0; - private static final double TOP_HALF = 0.25; - private static final double BOTTOM_HALF = 0.75; - private static final int DEFAULT_AREA_LENGTH = 5; //判断交叉区域范围的默认长度 - private static final int BORDER_PROPORTION = 10; //边界三等分或交叉区域大小取组件1/10和默认大小 + protected static final double TOP_HALF = 0.25; + protected static final double BOTTOM_HALF = 0.75; + protected static final int DEFAULT_AREA_LENGTH = 5; //判断交叉区域范围的默认长度 + protected static final int BORDER_PROPORTION = 10; //边界三等分或交叉区域大小取组件1/10和默认大小 - private int trisectAreaDirect = 0; + protected int trisectAreaDirect = 0; private int crossPointAreaDirect = 0; // 增加删除拉伸控件用的临时list - private java.util.List rightComps; - private java.util.List leftComps; - private java.util.List downComps; - private java.util.List upComps; + protected java.util.List rightComps; + protected java.util.List leftComps; + protected java.util.List downComps; + protected java.util.List upComps; // 三等分时计算对应侧的组件 - private boolean isFindRelatedComps = false; + protected boolean isFindRelatedComps = false; // 渲染时只计算对应的bounds而不调整 private boolean isCalculateChildPos = false; private int[] childPosition = null; //painter用的位置 - private int minWidth = 0; // 最小尺寸,由于屏幕百分比里不同,显示的最小大小也不同 - private int minHeight = 0; - private int actualVal = 0; // 存在间隔时,add move drag 判断对齐等都要考虑 - private PaddingMargin margin; // 布局容器边距 + protected int minWidth = 0; // 最小尺寸,由于屏幕百分比里不同,显示的最小大小也不同 + protected int minHeight = 0; + protected int actualVal = 0; // 存在间隔时,add move drag 判断对齐等都要考虑 + protected PaddingMargin margin; // 布局容器边距 /** * 在添加组件状态时,当鼠标移动到某个容器上方时,如果该容器有布局管理器,则会调用该布局 From f91cec5562e296c8450ca3c2c712ea0efb2b13c7 Mon Sep 17 00:00:00 2001 From: fanglei <294531121> Date: Mon, 20 Feb 2017 14:20:03 +0800 Subject: [PATCH 114/343] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E8=A7=84=E8=8C=83=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/poly/hanlder/BottomCornerMouseHanlder.java | 2 +- .../src/com/fr/design/beans/location/MoveUtils.java | 6 +++--- .../src/com/fr/design/designer/beans/location/Inner.java | 2 +- .../src/com/fr/design/mainframe/WidgetPropertyPane.java | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/designer/src/com/fr/poly/hanlder/BottomCornerMouseHanlder.java b/designer/src/com/fr/poly/hanlder/BottomCornerMouseHanlder.java index 1a895cbfe..3f063e21d 100644 --- a/designer/src/com/fr/poly/hanlder/BottomCornerMouseHanlder.java +++ b/designer/src/com/fr/poly/hanlder/BottomCornerMouseHanlder.java @@ -161,7 +161,7 @@ public class BottomCornerMouseHanlder extends MouseInputAdapter { * @param isIntersects 是否重叠 */ @Override - public void setWidgetsIntersects(boolean isIntersects) { + public void setWidgetsIntersected(boolean isIntersects) { } /** diff --git a/designer_base/src/com/fr/design/beans/location/MoveUtils.java b/designer_base/src/com/fr/design/beans/location/MoveUtils.java index 853e37026..d89848446 100644 --- a/designer_base/src/com/fr/design/beans/location/MoveUtils.java +++ b/designer_base/src/com/fr/design/beans/location/MoveUtils.java @@ -78,7 +78,7 @@ public class MoveUtils { * 设置designer内部组件是否重叠的标志位 * @param isIntersects 是否重叠 */ - void setWidgetsIntersects(boolean isIntersects); + void setWidgetsIntersected(boolean isIntersects); /** * 获取designer内部组件是否重叠的标志位 @@ -358,10 +358,10 @@ public class MoveUtils { if(designer.getDesignerLocationOnScreen() != null) { displayForbidWindow(x + designer.getDesignerLocationOnScreen().x, y + designer.getDesignerLocationOnScreen().y); } - designer.setWidgetsIntersects(true); + designer.setWidgetsIntersected(true); } else{ - designer.setWidgetsIntersects(false); + designer.setWidgetsIntersected(false); hideForbidWindow(); } } diff --git a/designer_form/src/com/fr/design/designer/beans/location/Inner.java b/designer_form/src/com/fr/design/designer/beans/location/Inner.java index d400a064c..4f475adf0 100644 --- a/designer_form/src/com/fr/design/designer/beans/location/Inner.java +++ b/designer_form/src/com/fr/design/designer/beans/location/Inner.java @@ -89,7 +89,7 @@ public class Inner extends AccessDirection { * @param isIntersects 是否重叠 */ @Override - public void setWidgetsIntersects(boolean isIntersects) { + public void setWidgetsIntersected(boolean isIntersects) { designer.setWidgetsIntersect(isIntersects); } diff --git a/designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java b/designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java index 23242e399..33736ac0a 100644 --- a/designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java +++ b/designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java @@ -33,6 +33,8 @@ import java.util.Set; */ public class WidgetPropertyPane extends FormDockView implements BaseWidgetPropertyPane { + private static final String PARA = "para"; + private static final String BODY = "body"; private WidgetPropertyTable propertyTable; // 控件的属性表 private EventPropertyTable eventTable; // 控件的事件表 private List widgetPropertyTables; // 这个变量应该是保存控件拓展的属性tab @@ -46,8 +48,6 @@ public class WidgetPropertyPane extends FormDockView implements BaseWidgetProper private JPanel centerPane; // 此centerPane采用的是cardLayout布局,装载着mobileWidgetTable和mobileBodyWidgetTable private CardLayout cardLayout; // 卡片布局,选中参数面板时显示mobileWidgetTable,选中body时显示mobileBodyWidgetTable private JTableHeader header;//把表头单独get出来作为一个组件 - private static final String PARA = "para"; - private static final String BODY = "body"; public static WidgetPropertyPane getInstance() { if (HOLDER.singleton == null) { From 1b93011d988b18c6878a3373e56f4582b83ae2d6 Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 20 Feb 2017 14:44:50 +0800 Subject: [PATCH 115/343] =?UTF-8?q?REPORT-1178=20=E8=8B=B1=E6=96=87?= =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E2=80=94=E2=80=9411/23?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/widget/ui/FieldEditorDefinePane.java | 4 ++-- designer_base/src/com/fr/design/locale/designer.properties | 2 +- .../src/com/fr/design/locale/designer_en_US.properties | 2 +- .../src/com/fr/design/locale/designer_ja_JP.properties | 2 +- .../src/com/fr/design/locale/designer_ko_KR.properties | 2 +- .../src/com/fr/design/locale/designer_zh_CN.properties | 2 +- .../src/com/fr/design/locale/designer_zh_TW.properties | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/designer/src/com/fr/design/widget/ui/FieldEditorDefinePane.java b/designer/src/com/fr/design/widget/ui/FieldEditorDefinePane.java index 34c355f51..bb3565c82 100644 --- a/designer/src/com/fr/design/widget/ui/FieldEditorDefinePane.java +++ b/designer/src/com/fr/design/widget/ui/FieldEditorDefinePane.java @@ -20,7 +20,7 @@ import com.fr.form.ui.FieldEditor; import com.fr.general.Inter; public abstract class FieldEditorDefinePane extends AbstractDataModify { - private static final int ALLOW_BLANK_CHECK_BOX_WIDTH = GraphHelper.getLocTextWidth("FR-Designer_Allow_Blank") + 30; + 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; // richer:错误信息,是所有控件共有的属性,所以放到这里来 @@ -39,7 +39,7 @@ public abstract class FieldEditorDefinePane extends Abstr initRegErrorMsgTextField(); //JPanel firstPanel = FRGUIPaneFactory.createBorderLayout_M_Pane(); - allowBlankCheckBox = new UICheckBox(Inter.getLocText("FR-Designer_Allow_Blank")); + 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() { diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index ab71e8be8..4077af520 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -534,7 +534,7 @@ FR-Designer_Mouse_Click_Tips= 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_Allow_Null=Allow null FR-Designer_PageSetup_Page=Page FR-Designer_Custom_Job_Description=Description FR-Designer_Property=Property diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index 24c7a87c7..ff68a3afc 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -534,7 +534,7 @@ FR-Designer_Mouse_Click_Tips=The background of the mouse to click the button, in 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_Allow_Null=Allow null FR-Designer_PageSetup_Page=Page FR-Designer_Custom_Job_Description=Description FR-Designer_Property=Property diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index 84559cf36..a780c302c 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -513,7 +513,7 @@ FR-Designer_Mouse_Click_Tips= 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_Allow_Null=\u7A7A\u6B04\u3042\u308A FR-Designer_PageSetup_Page=\u30DA\u30FC\u30B8 FR-Designer_Custom_Job_Description=\u8A18\u8FF0 FR-Designer_Property=\u5C5E\u6027 diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index f80d8ab0b..0f18d5ba4 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -508,7 +508,7 @@ FR-Designer_Mouse_Click_Tips= 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_Allow_Null=\uBE48\uCE78\uD5C8\uC6A9 FR-Designer_PageSetup_Page=\uC6F9\uD398\uC774\uC9C0 FR-Designer_Custom_Job_Description=\uC124\uBA85 FR-Designer_Property=\uC18D\uC131 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index f448c6f62..2d28fd796 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -538,7 +538,7 @@ FR-Designer_Mouse_Click_Tips=\u9F20\u6807\u70B9\u51FB\u6309\u94AE\u65F6\u80CC\u6 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_Allow_Null=\u5141\u8BB8\u4E3A\u7A7A FR-Designer_PageSetup_Page=\u9875\u9762 FR-Designer_Custom_Job_Description=\u63CF\u8FF0 FR-Designer_Property=\u5C5E\u6027 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 0b150c205..9312cbadf 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -526,7 +526,7 @@ FR-Designer_Mouse_Click_Tips= 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_Allow_Null=\u5141\u8A31\u70BA\u7A7A\u767D FR-Designer_PageSetup_Page=\u9801\u9762 FR-Designer_Custom_Job_Description=\u63CF\u8FF0 FR-Designer_Property=\u5C6C\u6027 From 5cd24d91f81d1b6984382605c318d71de3ca3177 Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 20 Feb 2017 16:32:52 +0800 Subject: [PATCH 116/343] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E3=80=82=E4=BF=AE=E5=A4=8DWindows=E4=B8=8B=E5=87=BD=E6=95=B0?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=99=A8=E6=97=A0=E6=B3=95=E6=89=93=E5=BC=80?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/formula/FunctionManagerPane.java | 10 +++++++++- .../src/com/fr/design/locale/designer.properties | 2 +- .../src/com/fr/design/locale/designer_en_US.properties | 2 +- .../src/com/fr/design/locale/designer_ja_JP.properties | 2 +- .../src/com/fr/design/locale/designer_ko_KR.properties | 2 +- .../src/com/fr/design/locale/designer_zh_CN.properties | 2 +- .../src/com/fr/design/locale/designer_zh_TW.properties | 2 +- 7 files changed, 15 insertions(+), 7 deletions(-) diff --git a/designer_base/src/com/fr/design/formula/FunctionManagerPane.java b/designer_base/src/com/fr/design/formula/FunctionManagerPane.java index eb75dabe1..844deb959 100644 --- a/designer_base/src/com/fr/design/formula/FunctionManagerPane.java +++ b/designer_base/src/com/fr/design/formula/FunctionManagerPane.java @@ -159,7 +159,11 @@ public class FunctionManagerPane extends BasicPane { descriptionArea.setWrapStyleWord(true); descriptionArea.setLineWrap(true); northPane.add(descriptionArea); - descriptionArea.setText(Inter.getLocText("FR-Designer_Function_Description_Area_Text", File.separator, File.separator, FRContext.getCurrentEnv().getPath() + File.separator)); + + String path1 = getEscapePath(File.separator + "WEB-INF" + File.separator + "classes"); + String path2 = getEscapePath(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 this.add(descriptionPane, BorderLayout.SOUTH); descriptionPane.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4)); @@ -167,6 +171,10 @@ public class FunctionManagerPane extends BasicPane { this.descriptionTextArea = new UITextArea(6, 24); descriptionPane.add(new JScrollPane(this.descriptionTextArea), BorderLayout.CENTER); } + + private String getEscapePath(String path) { + return path.replace("\\", "\\\\"); + } private ActionListener createEditorButtonActionListener() { return new ActionListener() { diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 4077af520..feea088a8 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -540,7 +540,7 @@ 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_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_Vertical=Vertical FR-Designer_Gradient_Direction=Gradient Direction diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index 8f5c3549e..c0204008d 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -540,7 +540,7 @@ 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_Function_Description_Area_Text=The class must inherit 'com.fr.script.AbstractFunction'. The compiled class files 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_Vertical=Vertical FR-Designer_Gradient_Direction=Gradient Direction diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index a780c302c..0ef9ce10c 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -519,7 +519,7 @@ 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_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_Vertical=\u7E26\u65B9\u5411 FR-Designer_Gradient_Direction=\u65B9\u5411\u3092\u5F90\u3005\u306B\u5909\u5316 diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index 0f18d5ba4..5bc3966dc 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -514,7 +514,7 @@ FR-Designer_Custom_Job_Description=\uC124\uBA85 FR-Designer_Property=\uC18D\uC131 FR-Designer_ClassName=\uD074\uB798\uC2A4\uB124\uC784 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_Vertical=\uC138\uB85C FR-Designer_Gradient_Direction=\uADF8\uB77C\uB370\uC774\uC158 \uBC29\uD5A5 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 2d28fd796..669c1ea1f 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -544,7 +544,7 @@ 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_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_Vertical=\u7EB5\u5411 FR-Designer_Gradient_Direction=\u6E10\u53D8\u65B9\u5411 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 9312cbadf..43ca7268d 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -532,7 +532,7 @@ 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_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_Vertical=\u7E31\u5411 FR-Designer_Gradient_Direction=\u6F38\u8B8A\u65B9\u5411 From db82e654e1f3273685bc2b36f8f2960832776057 Mon Sep 17 00:00:00 2001 From: zhouping Date: Mon, 20 Feb 2017 17:03:00 +0800 Subject: [PATCH 117/343] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1=20local?= =?UTF-8?q?e=E5=90=8C=E6=AD=A5=E5=88=B0release?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/locale/designer.properties | 4 ++++ .../src/com/fr/design/locale/designer_en_US.properties | 4 ++++ .../src/com/fr/design/locale/designer_ja_JP.properties | 4 ++++ .../src/com/fr/design/locale/designer_ko_KR.properties | 4 ++++ .../src/com/fr/design/locale/designer_zh_CN.properties | 4 ++++ .../src/com/fr/design/locale/designer_zh_TW.properties | 4 ++++ 6 files changed, 24 insertions(+) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 66da25604..74cf1b7ca 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -563,5 +563,9 @@ FR-Designer_Show_As_Download=Display the binary content using download link FR-Designer_File_Name_For_Download=File Name For Download FR-Designer_No=No FR-Designer_Pagination=Page Break +FR-Designer-Move_Tab_First=move to first +FR-Designer-Move_Tab_End=move to end +FR-Designer-Move_Tab_Next=move to next +FR-Designer-Move_Tab_Prev=move to previous FR-Designer_DS_TableData=Data Set FR-Designer_Parameter-Formula=Formula diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index 26d5bc85f..e7e2edf39 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -563,5 +563,9 @@ FR-Designer_Show_As_Download=Display the binary content using download link FR-Designer_File_Name_For_Download=File Name For Download FR-Designer_No=No FR-Designer_Pagination=Page Break +FR-Designer-Move_Tab_First=move to first +FR-Designer-Move_Tab_End=move to end +FR-Designer-Move_Tab_Next=move to next +FR-Designer-Move_Tab_Prev=move to previous FR-Designer_DS_TableData=Data Set FR-Designer_Parameter-Formula=Formula \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index d86d0a164..ac1c1fd03 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -537,5 +537,9 @@ 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_No=\u3044\u3044\u3048 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_Parameter-Formula=\u6570\u5F0F diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index dfb5ec78f..b1ea00e38 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -534,5 +534,9 @@ 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_No=\uC544\uB2C8\uC624 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_Parameter-Formula=\uC218\uC2DD diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 367884033..6b923d280 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -567,5 +567,9 @@ 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_No=\u5426 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_Parameter-Formula=\u516C\u5F0F diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 95aba53ff..078c6f43f 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -555,5 +555,9 @@ 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_No=\u5426 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_Parameter-Formula=\u516C\u5F0F From 65af3e399909db9c33aef20a76c1ef25fe545a05 Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 20 Feb 2017 17:15:10 +0800 Subject: [PATCH 118/343] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=EF=BC=8C=E5=9B=BD=E9=99=85=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/locale/designer.properties | 5 +++-- .../src/com/fr/design/locale/designer_en_US.properties | 7 ++++--- .../src/com/fr/design/locale/designer_ja_JP.properties | 5 +++-- .../src/com/fr/design/locale/designer_ko_KR.properties | 5 +++-- .../src/com/fr/design/locale/designer_zh_CN.properties | 5 +++-- .../src/com/fr/design/locale/designer_zh_TW.properties | 5 +++-- 6 files changed, 19 insertions(+), 13 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 66da25604..8d4dbfebb 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -542,14 +542,14 @@ 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_Allow_Null=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=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_Vertical=Vertical FR-Designer_Gradient_Direction=Gradient Direction @@ -565,3 +565,4 @@ 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. diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index 26d5bc85f..a7549e571 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -542,14 +542,14 @@ 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_Allow_Null=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_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_Vertical=Vertical FR-Designer_Gradient_Direction=Gradient Direction @@ -564,4 +564,5 @@ 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 \ No newline at end of file +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. diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index d86d0a164..f4dd405e5 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -516,14 +516,14 @@ 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_Allow_Null=\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_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_Vertical=\u7E26\u65B9\u5411 FR-Designer_Gradient_Direction=\u65B9\u5411\u3092\u5F90\u3005\u306B\u5909\u5316 @@ -539,3 +539,4 @@ 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 +FR-Designer_Plugin_Should_Update_Please_Contact_Developer= diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index dfb5ec78f..73b2e5031 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -512,7 +512,7 @@ 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_Allow_Null=\uBE48\uCE78\uD5C8\uC6A9 FR-Designer_PageSetup_Page=\uC6F9\uD398\uC774\uC9C0 FR-Designer_Custom_Job_Description=\uC124\uBA85 FR-Designer_Property=\uC18D\uC131 @@ -520,7 +520,7 @@ 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_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_Vertical=\uC138\uB85C FR-Designer_Gradient_Direction=\uADF8\uB77C\uB370\uC774\uC158 \uBC29\uD5A5 @@ -536,3 +536,4 @@ 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 +FR-Designer_Plugin_Should_Update_Please_Contact_Developer= diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 367884033..079842610 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -546,14 +546,14 @@ 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_Allow_Null=\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_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_Vertical=\u7EB5\u5411 FR-Designer_Gradient_Direction=\u6E10\u53D8\u65B9\u5411 @@ -569,3 +569,4 @@ 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 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 95aba53ff..47b15c800 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -534,14 +534,14 @@ 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_Allow_Null=\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_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_Vertical=\u7E31\u5411 FR-Designer_Gradient_Direction=\u6F38\u8B8A\u65B9\u5411 @@ -557,3 +557,4 @@ 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=\u633F\u4EF6\u7248\u672C\u904E\u4F4E\uFF0C\u5B58\u5728API\u4E0D\u76F8\u5BB9\uFF0C\u8ACB\u806F\u7CFB\u958B\u767C\u8005\u965E\u7D1A\u633F\u4EF6 From 941ae3463c9fbb55d8bad845ef79986f9e93c8e4 Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 20 Feb 2017 19:32:05 +0800 Subject: [PATCH 119/343] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/formula/FunctionManagerPane.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/designer_base/src/com/fr/design/formula/FunctionManagerPane.java b/designer_base/src/com/fr/design/formula/FunctionManagerPane.java index 844deb959..001bd5626 100644 --- a/designer_base/src/com/fr/design/formula/FunctionManagerPane.java +++ b/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.NameObject; import com.fr.stable.Nameable; +import com.fr.stable.ProductConstants; import com.fr.stable.project.ProjectConstants; import com.fr.stable.script.FunctionDef; @@ -160,8 +161,8 @@ public class FunctionManagerPane extends BasicPane { descriptionArea.setLineWrap(true); northPane.add(descriptionArea); - String path1 = getEscapePath(File.separator + "WEB-INF" + File.separator + "classes"); - String path2 = getEscapePath(FRContext.getCurrentEnv().getPath() + File.separator + "classes"); + String path1 = getEscapePath(File.separator + ProjectConstants.WEBINF_NAME + File.separator + ProjectConstants.CLASSES_NAME); + String path2 = getEscapePath(FRContext.getCurrentEnv().getPath() + File.separator + ProjectConstants.CLASSES_NAME); descriptionArea.setText(Inter.getLocText("FR-Designer_Function_Description_Area_Text", path1, path2)); JPanel descriptionPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); //Description Pane From ba719cab5edcfb234825a2ba11b119c9b3d3f3ba Mon Sep 17 00:00:00 2001 From: neil Date: Mon, 20 Feb 2017 19:52:21 +0800 Subject: [PATCH 120/343] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=EF=BC=8C=20designer=E6=89=93=E5=8C=85=E7=94=A81.7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_form/build.dev.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_form/build.dev.gradle b/designer_form/build.dev.gradle index 20dc49a33..ae16b033e 100644 --- a/designer_form/build.dev.gradle +++ b/designer_form/build.dev.gradle @@ -4,7 +4,7 @@ tasks.withType(JavaCompile){ options.encoding = 'UTF-8' } //指定构建的jdk版本 -sourceCompatibility=1.8 +sourceCompatibility=1.7 //指定生成的jar包版本 version='8.0' From f9e6d148c7b8bda391bb54dbbcaedc01eb0bb084 Mon Sep 17 00:00:00 2001 From: fanglei <294531121> Date: Tue, 21 Feb 2017 14:53:05 +0800 Subject: [PATCH 121/343] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E5=B0=8F=E9=94=99=E8=AF=AF=EF=BC=8CWLayout->WSortLayout?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/MobileParaWidgetTable.java | 2 +- .../design/mainframe/MobileWidgetTable.java | 22 ++++++------------- 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/designer_form/src/com/fr/design/mainframe/MobileParaWidgetTable.java b/designer_form/src/com/fr/design/mainframe/MobileParaWidgetTable.java index 67f47f951..a39d3d94a 100644 --- a/designer_form/src/com/fr/design/mainframe/MobileParaWidgetTable.java +++ b/designer_form/src/com/fr/design/mainframe/MobileParaWidgetTable.java @@ -245,7 +245,7 @@ class MobileParaWidgetTable extends JTable { } WParameterLayout para = (WParameterLayout) (paraContainer.toData()); - return para.getWidgetNameTag(); // TODO 从这个函数开始看,可以看到后台如何决定拖动后的控件顺序的 + return para.getWidgetNameTag(); } /** diff --git a/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java b/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java index bb7ba9918..5044b4f8d 100644 --- a/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java +++ b/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java @@ -3,7 +3,7 @@ package com.fr.design.mainframe; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; -import java.util.ArrayList; +import java.util.List; import javax.swing.BorderFactory; import javax.swing.JLabel; @@ -14,11 +14,8 @@ import javax.swing.table.*; import com.fr.design.designer.creator.XCreator; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itable.GroupRenderer; -import com.fr.design.gui.itable.HeaderRenderer; import com.fr.form.ui.Widget; import com.fr.form.ui.container.*; -import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; -import com.fr.form.ui.container.cardlayout.WCardTitleLayout; import com.fr.general.ComparatorUtils; import com.fr.general.Inter; import com.fr.stable.StringUtils; @@ -67,6 +64,9 @@ public class MobileWidgetTable extends JTable { add(moveComponent); } + /** + * 设置表格属性 + */ private void setTableProperties() { JTableHeader header = getTableHeader(); header.setReorderingAllowed(false); @@ -112,7 +112,7 @@ public class MobileWidgetTable extends JTable { moveComponent.setVisible(false); int toIndex = e.getY() < GAP ? 0 : (int)Math.rint((e.getY() - GAP)/WIDGET_TABLE_ROW_HEIGHT) + 1; //当鼠标放开时,将选中的容器调整至新的顺序 - ((WLayout)designer.getSelectionModel().getSelection().getSelectedCreator().toData()).adjustOrder(selectedRow - 1, toIndex - 1); + ((WSortLayout)designer.getSelectionModel().getSelection().getSelectedCreator().toData()).adjustOrder(selectedRow - 1, toIndex - 1); //拿取排序后表格数据,然后重绘表格 getInstance().refreshData(); getInstance().repaint(); @@ -261,16 +261,8 @@ public class MobileWidgetTable extends JTable { } // 选择的控件有两种类型,一种是WLayout,代表容器,一种是Widget,代表控件 - if (selectedModel.acceptType(WLayout.class)) { - //WCardLayout里面并不是控件,而仍然是容器TabFitLayout,故要向下获取控件 - //WCardTitlelLayout是XWCardLayout的标题容器,里面同样不是控件,不能获取MobileList - //WTitleLayout是标题容器,比如图表的标题,里面是图表控件和Label标题控件,但是不需要获取MobileList - if (selectedModel.acceptType(WCardLayout.class) || selectedModel.acceptType(WCardTitleLayout.class)) { - if (selectedModel.acceptType(WTitleLayout.class) || selectedModel.acceptType(WCardMainBorderLayout.class)) { - return new String[0][0]; - } - } - ArrayList strings = ((WLayout)selectedModel).getMobileWidgetList(); + if (selectedModel.acceptType(WSortLayout.class)) { + List strings = ((WSortLayout)selectedModel).getMobileWidgetList(); String[][] widgetName = new String[strings.size() + 1][1]; widgetName[0][0] = Inter.getLocText("FR-Designer_WidgetOrder"); for (int i = 0; i < strings.size(); i++) { From 8ec71ac73598f1e90ae55bec10a1965901254078 Mon Sep 17 00:00:00 2001 From: fanglei <294531121> Date: Tue, 21 Feb 2017 14:55:50 +0800 Subject: [PATCH 122/343] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/mainframe/MobileWidgetTable.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java b/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java index 5044b4f8d..7893ddf18 100644 --- a/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java +++ b/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java @@ -64,9 +64,6 @@ public class MobileWidgetTable extends JTable { add(moveComponent); } - /** - * 设置表格属性 - */ private void setTableProperties() { JTableHeader header = getTableHeader(); header.setReorderingAllowed(false); From 3ddef78aecfd87679785c06434f6f7b2f80f3420 Mon Sep 17 00:00:00 2001 From: fanglei <294531121> Date: Tue, 21 Feb 2017 15:15:28 +0800 Subject: [PATCH 123/343] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E5=87=BD=E6=95=B0=E5=91=BD=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/mainframe/MobileWidgetTable.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java b/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java index 7893ddf18..683d46455 100644 --- a/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java +++ b/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java @@ -259,7 +259,7 @@ public class MobileWidgetTable extends JTable { // 选择的控件有两种类型,一种是WLayout,代表容器,一种是Widget,代表控件 if (selectedModel.acceptType(WSortLayout.class)) { - List strings = ((WSortLayout)selectedModel).getMobileWidgetList(); + List strings = ((WSortLayout)selectedModel).getOrderedMobileWidgetList(); String[][] widgetName = new String[strings.size() + 1][1]; widgetName[0][0] = Inter.getLocText("FR-Designer_WidgetOrder"); for (int i = 0; i < strings.size(); i++) { From c7ad29b02f7fa10c4ee6422f11f8fb54adfbabef Mon Sep 17 00:00:00 2001 From: fanglei <294531121> Date: Tue, 21 Feb 2017 15:26:46 +0800 Subject: [PATCH 124/343] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E5=91=BD=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/mainframe/MobileWidgetTable.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java b/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java index 683d46455..e3c655c05 100644 --- a/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java +++ b/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java @@ -259,11 +259,11 @@ public class MobileWidgetTable extends JTable { // 选择的控件有两种类型,一种是WLayout,代表容器,一种是Widget,代表控件 if (selectedModel.acceptType(WSortLayout.class)) { - List strings = ((WSortLayout)selectedModel).getOrderedMobileWidgetList(); - String[][] widgetName = new String[strings.size() + 1][1]; + List mobileWidgetLists = ((WSortLayout)selectedModel).getOrderedMobileWidgetList(); + String[][] widgetName = new String[mobileWidgetLists.size() + 1][1]; widgetName[0][0] = Inter.getLocText("FR-Designer_WidgetOrder"); - for (int i = 0; i < strings.size(); i++) { - widgetName[i + 1][0] = strings.get(i); + for (int i = 0; i < mobileWidgetLists.size(); i++) { + widgetName[i + 1][0] = mobileWidgetLists.get(i); } return widgetName; } else { From 53f31b794e9832b914ba2f6373de8991c323b7ae Mon Sep 17 00:00:00 2001 From: fanglei <294531121> Date: Tue, 21 Feb 2017 15:27:39 +0800 Subject: [PATCH 125/343] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=91=BD=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/mainframe/MobileWidgetTable.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java b/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java index e3c655c05..f79eca1a9 100644 --- a/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java +++ b/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java @@ -259,11 +259,11 @@ public class MobileWidgetTable extends JTable { // 选择的控件有两种类型,一种是WLayout,代表容器,一种是Widget,代表控件 if (selectedModel.acceptType(WSortLayout.class)) { - List mobileWidgetLists = ((WSortLayout)selectedModel).getOrderedMobileWidgetList(); - String[][] widgetName = new String[mobileWidgetLists.size() + 1][1]; + List mobileWidgetList = ((WSortLayout)selectedModel).getOrderedMobileWidgetList(); + String[][] widgetName = new String[mobileWidgetList.size() + 1][1]; widgetName[0][0] = Inter.getLocText("FR-Designer_WidgetOrder"); - for (int i = 0; i < mobileWidgetLists.size(); i++) { - widgetName[i + 1][0] = mobileWidgetLists.get(i); + for (int i = 0; i < mobileWidgetList.size(); i++) { + widgetName[i + 1][0] = mobileWidgetList.get(i); } return widgetName; } else { From 23b20520b8171d1ccae70c5fd7bb931f7bc6b6dc Mon Sep 17 00:00:00 2001 From: zack Date: Tue, 21 Feb 2017 17:06:19 +0800 Subject: [PATCH 126/343] =?UTF-8?q?report-1343=20ftp=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E6=BC=8F=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/gui/controlpane/JListControlPane.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/designer_base/src/com/fr/design/gui/controlpane/JListControlPane.java b/designer_base/src/com/fr/design/gui/controlpane/JListControlPane.java index dd91b7824..52802921a 100644 --- a/designer_base/src/com/fr/design/gui/controlpane/JListControlPane.java +++ b/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 protected ShortCut4JControlPane addItemShortCut() { ShortCut addItemShortCut; @@ -832,6 +836,7 @@ public abstract class JListControlPane extends JControlPane { cardPane.add(updatePanes[i], String.valueOf(i)); } card.show(cardPane, String.valueOf(i)); + doBeforePopulate(el, ob2Populate); updatePanes[i].populateBean(ob2Populate); doWhenPopulate(updatePanes[i]); break; From 8691ee6d2f0d3a93179936fe1a4341bb322b2a14 Mon Sep 17 00:00:00 2001 From: juhaoyu <2335173323@qq.com> Date: Wed, 22 Feb 2017 10:02:25 +0800 Subject: [PATCH 127/343] =?UTF-8?q?=E5=85=B6=E4=BB=96=E5=85=BC=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mainframe/DesignerFrameFileDealerPane.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/designer_base/src/com/fr/design/mainframe/DesignerFrameFileDealerPane.java b/designer_base/src/com/fr/design/mainframe/DesignerFrameFileDealerPane.java index 9355a3348..352fc1564 100644 --- a/designer_base/src/com/fr/design/mainframe/DesignerFrameFileDealerPane.java +++ b/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.GeneralContext; import com.fr.general.Inter; +import com.fr.plugin.proxy.PluginProxyCompatibleUtils; import com.fr.stable.CoreConstants; import com.fr.stable.StableUtils; import com.fr.stable.project.ProjectConstants; @@ -131,6 +132,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt } toolbarDef.addShortCut(delFileAction); Set extraShortCuts = ExtraDesignClassManager.getInstance().getArray(ShortCut.TEMPLATE_TREE); + extraShortCuts = PluginProxyCompatibleUtils.toOriObjectHashSet(extraShortCuts); for (ShortCut shortCut : extraShortCuts){ toolbarDef.addShortCut(shortCut); } From 19b23f813e2fe6409f5784844da3a1436d9d3099 Mon Sep 17 00:00:00 2001 From: neil Date: Wed, 22 Feb 2017 17:04:16 +0800 Subject: [PATCH 128/343] ct --- .../fr/design/write/submit/CustomJobPane.java | 2 +- .../creator/cardlayout/XCardAddButton.java | 14 ++-- .../creator/cardlayout/XCardSwitchButton.java | 80 ++++++++++++------- .../creator/cardlayout/XWCardLayout.java | 38 +++++++-- .../creator/cardlayout/XWTabFitLayout.java | 12 ++- 5 files changed, 101 insertions(+), 45 deletions(-) diff --git a/designer_base/src/com/fr/design/write/submit/CustomJobPane.java b/designer_base/src/com/fr/design/write/submit/CustomJobPane.java index d986a8bee..d9368d87d 100644 --- a/designer_base/src/com/fr/design/write/submit/CustomJobPane.java +++ b/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; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.DialogActionAdapter; import com.fr.general.Inter; import com.fr.stable.StringUtils; import com.fr.design.utils.gui.GUICoreUtils; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /** * 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; public CustomJobPane() { this.setLayout(FRGUIPaneFactory.createBorderLayout()); JPanel reportletNamePane = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(); classNameTextField = new UITextField(getLengthOfTextField()); reportletNamePane.add(classNameTextField); UIButton browserButton = new UIButton(Inter.getLocText("FR-Designer_Select_panel")); browserButton.setPreferredSize(new Dimension( browserButton.getPreferredSize().width, classNameTextField.getPreferredSize().height)); UIButton editButton = new UIButton(Inter.getLocText("FR-Designer_Edit_panel")); editButton.setPreferredSize(new Dimension( browserButton.getPreferredSize().width, classNameTextField.getPreferredSize().height)); reportletNamePane.add(browserButton); reportletNamePane.add(editButton); 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); } }); reportletNamePane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("FR-Designer_ClassName_panel"), null)); this.add(reportletNamePane, BorderLayout.NORTH); objectProperiesPane = new ObjectProperiesPane(); objectProperiesPane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("FR-Designer_Property_panel"), null)); this.add(objectProperiesPane, BorderLayout.CENTER); UITextArea area = new UITextArea(2, 1); area.setText(Inter.getLocText(new String[]{"Come_True", "Interface"}) + ":com.fr.data.AbstractSubmitTask"); JPanel dsPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); dsPane.add(area); dsPane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("FR-Designer_Description_panel"), null)); this.add(dsPane, BorderLayout.SOUTH); checkAddButtonEnable(); } public int getLengthOfTextField() { return DEFAULT_LENGTH; } protected String title4PopupWindow() { return "CustomJob"; } protected Component getWindowAncestor() { return this; } @Override public void populateBean(Object ob) { if (ob instanceof AbstractClassJob) { AbstractClassJob cj = (AbstractClassJob) ob; this.classNameTextField.setText(cj.getClassName()); this.objectProperiesPane.populateBean(cj.getPropertyMap()); checkAddButtonEnable(); } } /** * 添加按钮可用 */ public void checkAddButtonEnable() { objectProperiesPane.enableAddButton(StringUtils.isNotEmpty(classNameTextField.getText())); } /** * 重置 */ public void reset() { this.classNameTextField.setText(null); this.checkAddButtonEnable(); } } \ No newline at end of file +package com.fr.design.write.submit; import com.fr.base.GraphHelper; 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; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.DialogActionAdapter; import com.fr.general.Inter; import com.fr.stable.StringUtils; import com.fr.design.utils.gui.GUICoreUtils; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /** * 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; public CustomJobPane() { this.setLayout(FRGUIPaneFactory.createBorderLayout()); JPanel reportletNamePane = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(); classNameTextField = new UITextField(getLengthOfTextField()); reportletNamePane.add(classNameTextField); UIButton browserButton = new UIButton(Inter.getLocText("FR-Designer_Select")); browserButton.setPreferredSize(new Dimension( GraphHelper.getLocTextWidth("FR-Designer_Select") + 20, classNameTextField.getPreferredSize().height)); UIButton editButton = new UIButton(Inter.getLocText("FR-Designer_Edit")); editButton.setPreferredSize(new Dimension( GraphHelper.getLocTextWidth("FR-Designer_Edit") + 20, classNameTextField.getPreferredSize().height)); reportletNamePane.add(browserButton); reportletNamePane.add(editButton); 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); } }); reportletNamePane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("FR-Designer_ClassName"), null)); this.add(reportletNamePane, BorderLayout.NORTH); objectProperiesPane = new ObjectProperiesPane(); objectProperiesPane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("FR-Designer_Property"), null)); this.add(objectProperiesPane, BorderLayout.CENTER); 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("FR-Designer_Custom_Job_Description"), null)); this.add(dsPane, BorderLayout.SOUTH); checkAddButtonEnable(); } public int getLengthOfTextField() { return DEFAULT_LENGTH; } protected String title4PopupWindow() { return "CustomJob"; } protected Component getWindowAncestor() { return this; } @Override public void populateBean(Object ob) { if (ob instanceof AbstractClassJob) { AbstractClassJob cj = (AbstractClassJob) ob; this.classNameTextField.setText(cj.getClassName()); this.objectProperiesPane.populateBean(cj.getPropertyMap()); checkAddButtonEnable(); } } /** * 添加按钮可用 */ public void checkAddButtonEnable() { objectProperiesPane.enableAddButton(StringUtils.isNotEmpty(classNameTextField.getText())); } /** * 重置 */ public void reset() { this.classNameTextField.setText(null); this.checkAddButtonEnable(); } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardAddButton.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardAddButton.java index caf259f3e..85e26e877 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardAddButton.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardAddButton.java @@ -33,6 +33,7 @@ public class XCardAddButton extends XButton{ private static final int INDEX = 0; private static final int DEFAULT_BUTTON_WIDTH = 80; + private static Icon ADD_ICON = BaseUtils.readIcon("/com/fr/design/form/images/add.png"); private Icon addIcon = ADD_ICON; @@ -88,12 +89,12 @@ public class XCardAddButton extends XButton{ // addbutton对应的XWCardLayout和XWCardTagLayout暂未存入到xml中,重新打开之后先根据父子层获取 if(cardLayout == null && tagLayout ==null ){ - initRalateLayout(); + initRelateLayout(); } int index = cardLayout.toData().getWidgetCount(); //添加新的tab,并将原来的设为未选中状态 - setTabUnselectd(); + setTabUnselected(); addTab(index); this.tagLayout.adjustComponentWidth(); @@ -109,7 +110,7 @@ public class XCardAddButton extends XButton{ LayoutUtils.layoutRootContainer(designer.getRootComponent()); } - private void initRalateLayout(){ + private void initRelateLayout(){ XWCardTitleLayout titleLayout = (XWCardTitleLayout)this.getBackupParent(); this.tagLayout = titleLayout.getTagPart(); @@ -128,7 +129,7 @@ public class XCardAddButton extends XButton{ } //将原来的tab页设置为未选中状态 - private void setTabUnselectd(){ + private void setTabUnselected(){ for(int i=0;i Date: Wed, 22 Feb 2017 17:05:32 +0800 Subject: [PATCH 129/343] ct --- .../com/fr/design/locale/designer.properties | 55 ++++---- .../design/locale/designer_en_US.properties | 126 +++++++++-------- .../design/locale/designer_ja_JP.properties | 130 +++++++++--------- .../design/locale/designer_ko_KR.properties | 45 +++--- .../design/locale/designer_zh_CN.properties | 48 ++++--- .../design/locale/designer_zh_TW.properties | 94 +++++++------ .../mainframe/toolbar/ToolBarMenuDock.java | 10 +- 7 files changed, 254 insertions(+), 254 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 28d261ed2..268f5d53d 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -100,7 +100,7 @@ FR-Designer_FS_Close_Other_Templates= FR-Designer_File= FR-Designer_Filter_Conditions= FR-Designer_Finish-Modify-Share= -FR-Designer_Fit-App= +FR-Designer_Fit= FR-Designer_Font-Family= FR-Designer_Font-Size= FR-Designer_Forbid_Drag_into_Adapt_Pane=Forbid Drag into Para Pane @@ -357,7 +357,6 @@ FR-Designer_KeyPoint=KeyPoint FR-Designer_loadedTreeModel=loadedTreeModel FR-Designer-Failed_to_load_the_plugin=Failed to load the plugin\uFF0Cplease update the plugin\: FR-Designer-Plugin_Please_Update_Jar= -FR-Designer-Invalid_Page_Number=Invalid Page Number FR-Designer_XMLA_Database=Database FR-Designer_XMLA_UserName=User name FR-Designer_XMLA_Password=Password @@ -488,10 +487,6 @@ FR-Designer-LayerPageReport_PageQuery= FR-Designer-LayerPageReport_Define_PageQuerySQL= FR-Designer_Event= 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_Exported_successfully=Exported successfully FR-Designer_Exporting=Exporting @@ -510,27 +505,11 @@ FR-Designer_JavaScript_Set= FR-Designer_Attribute= FR-Designer_Form_Editing_Listeners= FR-Designer_Form_Basic_Properties= -FR-Designer_DS_Dictionary= -FR-Designer_Create_Tree= +FR-Designer_DS_Dictionary=Data Dictionary +FR-Designer_Create_Tree=Build Tree FR-Designer_Set_Callback_Function= FR-Designer_ConfirmDialog_Content= FR-Designer_ConfirmDialog_Title= - -FR-Designer_FormulaPane_Tips=Tips\:You_Can_Input_B1_To_Input_The_Data_Of_The_First_Row_Second_Column -FR-Designer_FormulaPane_Variables=Variables -FR-Designer_FormulaPane_Formula_Description=Formula_Description -FR-Designer_FormulaPane_Function_Detail=Function Detail -FR-Designer_FormulaPane_Search=Search -FR-Designer_Tab_carousel= -FR-Designer_setCarousel= -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 @@ -538,17 +517,30 @@ 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_Background_Null= +FR-Designer_Background_Color= +FR-Designer_Background_Texture= +FR-Designer_Background_Pattern= +FR-Designer_Background_Gradient_Color= +FR-Designer_Background_Image= +FR-Designer_Background_Clear= +FR-Designer_Background_Image_Select= +FR-Designer_Tab_carousel= +FR-Designer_setCarousel= +FR-Designer_carouselInterval= +FR-Designer_Initial_Background_Tips= +FR-Designer_Mouse_Move_Tips= +FR-Designer_Mouse_Click_Tips= 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_Allow_Null=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=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_Vertical=Vertical FR-Designer_Gradient_Direction=Gradient Direction @@ -562,5 +554,12 @@ 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_Role=Role +FR-Designer-Move_Tab_First=move to first +FR-Designer-Move_Tab_End=move to end +FR-Designer-Move_Tab_Next=move to next +FR-Designer-Move_Tab_Prev=move to previous FR-Designer_DS_TableData=Data Set -FR-Designer_Parameter-Formula=Formula \ No newline at end of file +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 diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index 26d5bc85f..b0bf16d5d 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/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_Cell=cell FR-Designer_Chart_Cell=Chart Hyperlink-Link Cell -FR-Designer_Chart_Float=Chart Hyperlink-Floating Element -FR-Designer_Chart_Float_chart=Chart Hyperlink-Floating Chart +FR-Designer_Chart_Float=Chart Hyperlink-Floating Elements +FR-Designer_Chart_Float_chart=Chart Hyperlink-Floating-window Chart 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_Close=close @@ -100,7 +100,6 @@ FR-Designer_FS_Close_Other_Templates=Close other templates FR-Designer_File=file FR-Designer_Filter_Conditions=Filter condition FR-Designer_Finish-Modify-Share=Finish Modification And Share -FR-Designer_Fit-App=App self-adaption FR-Designer_Fit=self-adaption FR-Designer_Font-Family=Font name FR-Designer_Font-Size=Font size @@ -119,7 +118,7 @@ FR-Designer_Get-CubeGetting cube= FR-Designer_Help=Help FR-Designer_Hide=Hide FR-Designer_Hyperlink=Hyperlink -FR-Designer_Hyperlink-Form_link=Current dashboard object +FR-Designer_Hyperlink-Form_link=Current form object FR-Designer_IDCard=IDCard FR-Designer_Icon=Icon FR-Designer_Index=index @@ -127,7 +126,7 @@ FR-Designer_Input_Rule=Input Rule FR-Designer_Language_Default=Default FR-Designer_Layout=Layout FR-Designer_Layout-HBox=Horizontal Box Layout -FR-Designer_Layout-Index=Index +FR-Designer_Layout-Index=Layout Index FR-Designer_Layout_Constraints=Layout Constraints FR-Designer_Length=Length FR-Designer_Loading_Data=Loading Data @@ -174,12 +173,12 @@ FR-Designer_Search=Search FR-Designer_Set=Set FR-Designer_Share-Template=Share Template FR-Designer_Simple_general=Simple custom query -FR-Designer_Song_TypeFace=Song typeface +FR-Designer_Song_TypeFace=song typeface FR-Designer_Start-Date=Start Date FR-Designer_Subscript=Subscript FR-Designer_Superscript=Superscript FR-Designer_Support_QQ=Support online -FR-Designer_Swatch=Sample +FR-Designer_Swatch=Swatch FR-Designer_Tab_title=Tab title FR-Designer_TableData=Data set FR-Designer_Thank_guest=Special thanks to @@ -191,8 +190,8 @@ FR-Designer_Underline=Underline FR-Designer_Used=Recently Used FR-Designer_User-defined-MDX=Custom MDX query FR-Designer_SampleText=SampleText SampleText -FR-Designer_Vertical-LeftToRight=Vertical Text (left to right) -FR-Designer_Vertical-RightToLeft=Vertical Text (right to left) +FR-Designer_Vertical-LeftToRight=Vertical Text (Left to Right) +FR-Designer_Vertical-RightToLeft=Vertical Text (Right To Left) FR-Designer_VerticalBoxLayout=Vertical Box Layout 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. @@ -359,7 +358,6 @@ FR-Designer_KeyPoint=KeyPoint FR-Designer_loadedTreeModel=loadedTreeModel FR-Designer-Failed_to_load_the_plugin=Failed to load the plugin\uFF0Cplease update the plugin\: FR-Designer-Plugin_Please_Update_Jar=Please Update Jar -FR-Designer-Invalid_Page_Number=Invalid Page Number FR-Designer_XMLA_Database=DB FR-Designer_XMLA_UserName=User name FR-Designer_XMLA_Password=Password @@ -415,12 +413,12 @@ FR-Designer_Unit_PT=Pound FR-Designer-Write_Auto_Stash=auto stash FR-Designer_Printer_Native_Button=Native Print 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_Error=Error FR-Designer_formDesignerModule=Form Designer FR-Designer-Website_Url=http\://www.finereport.com/en -FR-Designer-BBSLogin_Download-Unlogin-Tip=Login to download +FR-Designer-BBSLogin_Download-Unlogin-Tip= FR-Designer-App_ReLayout=AppRelayout FR-Designer_Mobile-Attr=Mobile Attr FR-Designer_Mobile-Vertical=Vertical Screen @@ -434,42 +432,42 @@ FR-Designer_COMMUNITY_NEED=need FR-Designer_COMMUNITY_BUG=bug report FR-Designer_COMMUNITY_SIGN=sign FR-Designer_COMMUNITY_QUESTIONS=questions -FR-Designer_Mobile-Zoom=Zoom +FR-Designer_Mobile-Zoom=zoom FR-Designer_Mobile-Open=Open -FR-Designer_Mobile-Warning=Max height cannot exceed 80% of display area +FR-Designer_Mobile-Warning= FR-Designer_Button-OK=OK FR-Designer_Button-Cancel=Cancel FR-Designer_Write-Save-Formula=Preserve formula when fill FR-Designer_Export-Save-Formula=Preserve formula when export -FR-Designer_Form-Fit-Tip=Adaptive plug-in -FR-Designer_Form-Frozen-Tip=When use Frozen, suggest install -FR-Designer_Form-Forzen-Speed=, use bidirectional and horizontal adaption to improve the speed. -FR-Designer_Attention=Attention -FR-Designer_Forbid_Widgets_Intersects=Forbid component overlap +FR-Designer_Form-Fit-Tip=Fit Plugin +FR-Designer_Form-Frozen-Tip=When Use Form Frozen, Suggest Install +FR-Designer_Form-Forzen-Speed=To Speed UP. +FR-Designer_Attention=attention +FR-Designer_Forbid_Widgets_Intersects=Forbid Widgets Intersects FR-Designer_Widget_Scaling_Mode_Fit=Area-Fit FR-Designer_Widget_Scaling_Mode_Fixed=Area-Fixed -FR-Designer-Widget_Area_Scaling=Component area scaling -FR-Designer-Widget_Scaling_Mode=Scaling mode +FR-Designer-Widget_Area_Scaling=Widget Area Scaling +FR-Designer-Widget_Scaling_Mode=Widget Scaling Mode FR-Designer-QQLogin-Determine=Determine FR-Designer-QQLogin-Cancel=Cancel -FR-Designer-Reuse_Manager=Component management -FR-Designer_TableData-Default-Para=Default parameter -FR-Designer_Layout_Block_Absolute=Absolute layout block -FR-Designer_Layout_Block_Tab=Tab block -FR-Designer_Layout_Block_Blank=Blank block -FR-Designer_Attr_Layout=Layout -FR-Designer_Attr_Layout_Type=Layout type -FR-Designer_Attr_Bidirectional_Adaptive=Bidirectional adaptive -FR-Designer-Selected_Widget=Selected widget -FR-Designer_LocalWidget=Local component library -FR-Designer_AllCategories=All categories -FR-Designer_Download_Template=Download components -FR-Designer_Install_Template=Install components -FR-Designer_Delete_Template=Delete components -FR-Designer_Mobile-Refresh=Refresh -FR-Designer_Mobile-ToolBar=Toolbar +FR-Designer-Reuse_Manager=Reuse Manager +FR-Designer_TableData-Default-Para=Default Para +FR-Designer_Layout_Block_Absolute=Absolute Layout Block +FR-Designer_Layout_Block_Tab=TabLayout +FR-Designer_Layout_Block_Blank=Blank Block +FR-Designer_Attr_Layout=layout +FR-Designer_Attr_Layout_Type=layout type +FR-Designer_Attr_Bidirectional_Adaptive=Bidirectional Adaptive +FR-Designer-Selected_Widget=selected widget +FR-Designer_LocalWidget=local widget +FR-Designer_AllCategories=all categories +FR-Designer_Download_Template=download template +FR-Designer_Install_Template=install template +FR-Designer_Delete_Template=delete template +FR-Designer_Mobile-Refresh=refresh +FR-Designer_Mobile-ToolBar=toolbar 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_Language_Change_Successful=New language setting will be enabled when designer is restarted FR-Designer_Template_Web_Attributes=Web Attributes @@ -488,10 +486,6 @@ FR-Designer-DS-Database_Query=DB Query FR-Designer_Is_Share_DBTableData=Shared data set FR-Designer_Event=Event 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_Exported_successfully=Exported successfully FR-Designer_Exporting=Exporting @@ -514,24 +508,8 @@ FR-Designer_Form_Basic_Properties=Basic Property FR-Designer_DS_Dictionary=Data Dictionary FR-Designer_Create_Tree=Build Tree FR-Designer_Set_Callback_Function=Set Callback Function -FR-Designer_ConfirmDialog_Content=Confirm to delete Tab Control -FR-Designer_ConfirmDialog_Title=FineReport 8.0 - -FR-Designer_FormulaPane_Tips=Tips\:You can input B1 to get the data in the second cell of the first row -FR-Designer_FormulaPane_Variables=Variables -FR-Designer_FormulaPane_Formula_Description=Formula Description -FR-Designer_FormulaPane_Function_Detail=Function Detail -FR-Designer_FormulaPane_Search=Search -FR-Designer_Tab_carousel=Tab carousel -FR-Designer_setCarousel=Start -FR-Designer_carouselInterval=Interval - -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_ConfirmDialog_Content= +FR-Designer_ConfirmDialog_Title= 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 @@ -539,17 +517,30 @@ 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_Background_Null=No Background +FR-Designer_Background_Color=Color +FR-Designer_Background_Texture=Texture +FR-Designer_Background_Pattern=Pattern +FR-Designer_Background_Gradient_Color=Gradient Color +FR-Designer_Background_Image=Image +FR-Designer_Background_Clear=Clear +FR-Designer_Background_Image_Select=Select Picture +FR-Designer_Tab_carousel=tab carousel +FR-Designer_setCarousel=set carousel +FR-Designer_carouselInterval=interval +FR-Designer_Initial_Background_Tips=Initial background of the button +FR-Designer_Mouse_Move_Tips=Move the mouse to the button on the background, in the absence of not changing the background +FR-Designer_Mouse_Click_Tips=The background of the mouse to click the button, in the absence of not changing the background 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_Allow_Null=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_Function_Description_Area_Text=The class must inherit 'com.fr.script.AbstractFunction'. The compiled class files 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_Vertical=Vertical FR-Designer_Gradient_Direction=Gradient Direction @@ -563,5 +554,12 @@ FR-Designer_Show_As_Download=Display the binary content using download link FR-Designer_File_Name_For_Download=File Name For Download FR-Designer_No=No FR-Designer_Pagination=Page Break +FR-Designer-Move_Tab_First=move to first +FR-Designer-Move_Tab_End=move to end +FR-Designer-Move_Tab_Next=move to next +FR-Designer-Move_Tab_Prev=move to previous +FR-Designer_Role=Role FR-Designer_DS_TableData=Data Set -FR-Designer_Parameter-Formula=Formula \ No newline at end of file +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 diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index d86d0a164..0ef9ce10c 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -100,7 +100,6 @@ FR-Designer_FS_Close_Other_Templates=\u305D\u306E\u4ED6\u30C6\u30F3\u30D7\u30EC\ FR-Designer_File=\u30D5\u30A1\u30A4\u30EB 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_Fit-App=App\u81EA\u9069\u5FDC FR-Designer_Fit=\u81EA\u9069\u5FDC FR-Designer_Font-Family=\u30D5\u30A9\u30F3\u30C8\u540D\u79F0 FR-Designer_Font-Size=\u30D5\u30A9\u30F3\u30C8\u5927\u5C0F @@ -223,7 +222,7 @@ FR-Designer-StyleAlignment_Style_Indentation=\u30A4\u30F3\u30C7\u30F3\u30C8 FR-Designer-StyleAlignment_Style_Spacing=\u9593\u9694\u8DDD\u96E2 FR-Designer-StyleAlignment_Style_Alignment=\u63C3\u3048 FR-Designer-CommitTab_Submit=\u63D0\u51FA\u3059\u308B -FR-Designer-CommitTab_SureToDelete=\u524A\u9664\u3057\u307E\u3059\u304B +FR-Designer-CommitTab_SureToDelete=Sure to delete FR-Designer-CommitTab_Remove=\u524A\u9664 FR-Designer-Collect_Information_free=\u7121\u6599 FR-Designer-Collect_Information_Description=\u8A18\u8FF0 @@ -370,13 +369,13 @@ FR-Designer_LiteCondition_ConditionB-OR=\u30AA\u30A2(OR) FR-Designer_LiteCondition_Common_Condition=\u666E\u901A\u6761\u4EF6 FR-Designer_LiteCondition_Formula_Condition=\u516C\u5F0F\u6761\u4EF6 FR-Designer_LiteCondition_Define=\u5B9A\u7FA9 -FR-Designer_Select_All=\u5168\u9078\u629E +FR-Designer_Select_All= 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_Finerest_Addon=\u5E06\u8EDF\u5FDC\u7528\u30BB\u30F3\u30BF\u30FC FR-Designer_Performance_First=\u6027\u80FD\u512A\u5148 FR-Designer_Total_N_Grade=\u5168\u90E8\u3067\:${N}\u5C64 -FR-Designer_time(s)=\u56DE +FR-Designer_time(s)= FR-Designer_General=\u5E38\u7528 FR-Designer_Advanced=\u9AD8\u7D1A FR-Designer_Oracle=\u3059\u3079\u3066\u306E\u30C6\u30FC\u30D6\u30EB @@ -408,10 +407,10 @@ FR-Designer_Current_Preview_Rows=\u73FE\u5728\u306E\u30D7\u30EC\u30D3\u30E5\u30F FR-Designer_Data=\u30C7\u30FC\u30BF FR-Designer_Error=\u30A8\u30E9\u30FC FR-Designer-Website_Url=http\://www.finereport.com/jp -FR-Designer_formDesignerModule=\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u30C7\u30B6\u30A4\u30CA\u30FC -FR-Designer-BBSLogin_Login-Title=BBS\u30ED\u30B0\u30A4\u30F3 -FR-Designer_Get-CubeGetting=cube\u53D6\u5F97 -FR-Designer-BBSLogin_Download-Unlogin-Tip=\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9 +FR-Designer_formDesignerModule= +FR-Designer-BBSLogin_Login-Title= +FR-Designer_Get-CubeGetting= +FR-Designer-BBSLogin_Download-Unlogin-Tip= 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-Vertical=\u7E26 @@ -436,76 +435,60 @@ 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-QQLogin-Determine=\u6C7A\u5B9A\u3057\u307E\u3059 FR-Designer-QQLogin-Cancel=\u30AD\u30E3\u30F3\u30BB\u30EB -FR-Designer-Reuse_Manager=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8 -FR-Designer_Layout_Block_Absolute=\u7D76\u5BFE\u30EC\u30A4\u30A2\u30A6\u30C8\u30D6\u30ED\u30C3\u30AF -FR-Designer_Layout_Block_Tab=Tab\u30D6\u30ED\u30C3\u30AF -FR-Designer_Layout_Block_Blank=\u7A7A\u767D\u30D6\u30ED\u30C3\u30AF -FR-Designer_Attr_Layout=\u30EC\u30A4\u30A2\u30A6\u30C8 -FR-Designer_Attr_Layout_Type=\u30EC\u30A4\u30A2\u30A6\u30C8\u65B9\u5F0F -FR-Designer_Attr_Bidirectional_Adaptive=\u53CC\u65B9\u5411\u81EA\u5DF1\u8ABF\u6574 -FR-Designer_Download_Template=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u3092\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9 +FR-Designer-Reuse_Manager= +FR-Designer_Layout_Block_Absolute= +FR-Designer_Layout_Block_Tab= +FR-Designer_Layout_Block_Blank= +FR-Designer_Attr_Layout= +FR-Designer_Attr_Layout_Type= +FR-Designer_Attr_Bidirectional_Adaptive= +FR-Designer_Download_Template= FR-Designer-Widget_Scaling_Mode=\u30B9\u30B1\u30FC\u30EA\u30F3\u30B0\u8AD6\u7406 -FR-Designer_Mobile-Refresh=\u66F4\u65B0 -FR-Designer_Mobile-ToolBar=\u30C4\u30FC\u30EB\u30D0\u30FC +FR-Designer_Mobile-Refresh= +FR-Designer_Mobile-ToolBar= 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_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=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u30A6\u30A7\u30D6\u30D7\u30ED\u30D1\u30C6\u30A3 +FR-Designer_Language_Change_Successful= +FR-Designer_Template_Web_Attributes= FR-Designer_Basic=\u57FA\u672C 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_Write_Setting=\u66F8\u304D\u8FBC\u307F\u30DA\u30FC\u30B8\u8A2D\u5B9A +FR-Designer_Write_Setting=\u5831\u544A\u30DA\u30FC\u30B8\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_Import_Css=Css\u5F15\u7528 FR-Designer_Import_JavaScript=JavaScript\u5F15\u7528 FR-Designer-Datasource-Param_DES=  "${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
 select * from table where id\=${abc}\u3002
 select * from table where id\='${abc}'\u3002(\u3082\u3057id\u306F\u6587\u5B57\u5217\u306A\u3089)\uFFFD FR-Designer-DS-Database_Query=\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u30AF\u30A8\u30EA\u30FC -FR-Designer-LayerPageReport_PageQuery=\u6539\u30DA\u30FC\u30B8\u691C\u7D22 -FR-Designer-LayerPageReport_Define_PageQuerySQL=\u6539\u30DA\u30FC\u30B8\u691C\u7D22sql\u3092\u66F8\u304F +FR-Designer-LayerPageReport_PageQuery=\u30DA\u30FC\u30B8\u5225\u30AF\u30A8\u30EA +FR-Designer-LayerPageReport_Define_PageQuerySQL=\u5B9A\u7FA9\u30DA\u30FC\u30B8\u5225\u30AF\u30A8\u30EAsql FR-Designer_Is_Share_DBTableData=\u5171\u6709\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8 -FR-Designer_Event=\u30A4\u30D9\u30F3\u30C8 -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_Event=\ +FR-Designer_Properties=FR-Designer_Properties=\ +\ FR-Designer_Export_failed=\u5C0E\u51FA\u306B\u5931\u6557\u3057\u307E\u3057\u305F FR-Designer_Exported_successfully=\u5C0E\u51FA\u6210\u529F FR-Designer_Exporting=\u5C0E\u51FA\u3057\u3066\u3044\u307E\u3059 -FR-Designer_Export-PDF=PDF\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8 -FR-Designer_Button_OK=\u78BA\u5B9A +FR-Designer_Export-PDF=PDF\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8FR-Designer_Button_OK=FR-Designer_Button_OK=\u78BA\u5B9A FR-Designer_Button_Cancel=\u30AD\u30E3\u30F3\u30BB\u30EB -FR-Designer_JavaScript=JavaScript -FR-Designer_JavaScript_Form_Submit=\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u66F8\u304D\u8FBC\u307F -FR-Designer_JavaScript_Commit_to_Database=DB\u306B\u66F8\u304D\u8FBC\u307F -FR-Designer_JavaScript_Custom=\u30AB\u30B9\u30BF\u30E0 -FR-Designer_RWA_Submit=\u66F8\u304D\u8FBC\u307F -FR-Designer_Event_Name=\u30A4\u30D9\u30F3\u30C8\u540D -FR-Designer_Event_Type=\u30A4\u30D9\u30F3\u30C8\u30BF\u30A4\u30D7 -FR-Designer_Event_Name_Type=\u30A4\u30D9\u30F3\u30C8\u540D\u3068\u30BF\u30A4\u30D7 -FR-Designer_JavaScript_Set=JS\u8A2D\u5B9A -FR-Designer_Attribute=\u30D7\u30ED\u30D1\u30C6\u30A3 -FR-Designer_Form_Editing_Listeners=\u30A4\u30D9\u30F3\u30C8\u7DE8\u96C6 -FR-Designer_Form_Basic_Properties=\u57FA\u672C\u30D7\u30ED\u30D1\u30C6\u30A3 -FR-Designer_DS_Dictionary=\u30C7\u30FC\u30BF\u8F9E\u66F8 -FR-Designer_Create_Tree=\u30C4\u30EA\u30FC\u69CB\u7BC9 -FR-Designer_Set_Callback_Function=\u30B3\u30FC\u30EB\u30D0\u30C3\u30AF\u95A2\u6570\u8A2D\u5B9A -FR-Designer_ConfirmDialog_Content=tab\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u3092\u524A\u9664\u3057\u307E\u3059\u304B -FR-Designer_ConfirmDialog_Title=FineReport 8.0 -FR-Designer_FormulaPane_Tips=\u30D2\u30F3\u30C8\:B1\u3092\u5165\u529B -FR-Designer_FormulaPane_Variables=\u5909\u6570 -FR-Designer_FormulaPane_Formula_Description=\u516C\u5F0F\u8AAC\u660E -FR-Designer_FormulaPane_Function_Detail=\u95A2\u6570\u660E\u7D30 -FR-Designer_FormulaPane_Search=\u691C\u7D22 -FR-Designer_Tab_carousel=tab\u30AB\u30EB\u30FC\u30BB\u30EB -FR-Designer_setCarousel=\u30AB\u30EB\u30FC\u30BB\u30EB\u30AA\u30F3 -FR-Designer_carouselInterval=\u30AB\u30EB\u30FC\u30BB\u30EB\u9593\u9694 -FR-Designer_ClassName_panel=\u985E\u540D -FR-Designer_Description_panel=\u8A18\u8FF0 -FR-Designer_Edit_panel=\u7DE8\u96C6 -FR-Designer_Property_panel=\u5C5E\u6027 -FR-Designer_Select_panel=\u9078\u629E +\uFFFD +FR-Designer_JavaScript= +FR-Designer_JavaScript_Form_Submit= +FR-Designer_JavaScript_Commit_to_Database= +FR-Designer_JavaScript_Custom= +FR-Designer_RWA_Submit= +FR-Designer_Event_Name= +FR-Designer_Event_Type= +FR-Designer_Event_Name_Type= +FR-Designer_JavaScript_Set= +FR-Designer_Attribute= +FR-Designer_Form_Editing_Listeners= +FR-Designer_Form_Basic_Properties= +FR-Designer_DS_Dictionary= +FR-Designer_Create_Tree= +FR-Designer_Set_Callback_Function= +FR-Designer_ConfirmDialog_Content= +FR-Designer_ConfirmDialog_Title= 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 @@ -513,17 +496,30 @@ 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_Background_Null= +FR-Designer_Background_Color= +FR-Designer_Background_Texture= +FR-Designer_Background_Pattern= +FR-Designer_Background_Gradient_Color= +FR-Designer_Background_Image= +FR-Designer_Background_Clear= +FR-Designer_Background_Image_Select= +FR-Designer_Tab_carousel= +FR-Designer_setCarousel= +FR-Designer_carouselInterval= +FR-Designer_Initial_Background_Tips= +FR-Designer_Mouse_Move_Tips= +FR-Designer_Mouse_Click_Tips= 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_Allow_Null=\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_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_Vertical=\u7E26\u65B9\u5411 FR-Designer_Gradient_Direction=\u65B9\u5411\u3092\u5F90\u3005\u306B\u5909\u5316 @@ -537,5 +533,11 @@ 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_No=\u3044\u3044\u3048 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_Role= FR-Designer_DS_TableData=\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9 FR-Designer_Parameter-Formula=\u6570\u5F0F +FR-Designer_Plugin_Should_Update_Please_Contact_Developer= diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index dfb5ec78f..5bc3966dc 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -100,7 +100,6 @@ FR-Designer_FS_Close_Other_Templates=\uAE30\uD0C0\uD15C\uD50C\uB9BF\uB2EB\uAE30 FR-Designer_File=\uD30C\uC77C FR-Designer_Filter_Conditions=\uD544\uD130\uC870\uAC74 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_Font-Family=\uAE00\uAF34\uBA85\uCE6D FR-Designer_Font-Size=\uAE00\uAF34\uD06C\uAE30 @@ -461,10 +460,6 @@ 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_Define_PageQuerySQL=\uC815\uC758\uD398\uC774\uC9C0\uB098\uB204\uAE30\uCC3E\uC544\uBCF4\uAE30sql 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_Export_failed=\uB0B4\uBCF4\uB0B4\uAE30\uC2E4\uD328 FR-Designer_Exported_successfully=\uB0B4\uBCF4\uB0B4\uAE30\uC131\uACF5 @@ -489,19 +484,6 @@ FR-Designer_Create_Tree= FR-Designer_Set_Callback_Function= FR-Designer_ConfirmDialog_Content= FR-Designer_ConfirmDialog_Title= -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_FormulaPane_Variables=\uBCC0\uC218 -FR-Designer_FormulaPane_Formula_Description=\uC218\uC2DD\uC124\uBA85 -FR-Designer_FormulaPane_Function_Detail=\uD568\uC218\uC0C1\uC138\uC0AC\uD56D -FR-Designer_FormulaPane_Search=\uAC80\uC0C9 -FR-Designer_Tab_carousel= -FR-Designer_setCarousel= -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 @@ -509,18 +491,30 @@ 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_Background_Null= +FR-Designer_Background_Color= +FR-Designer_Background_Texture= +FR-Designer_Background_Pattern= +FR-Designer_Background_Gradient_Color= +FR-Designer_Background_Image= +FR-Designer_Background_Clear= +FR-Designer_Background_Image_Select= +FR-Designer_Tab_carousel= +FR-Designer_setCarousel= +FR-Designer_carouselInterval= +FR-Designer_Initial_Background_Tips= +FR-Designer_Mouse_Move_Tips= +FR-Designer_Mouse_Click_Tips= 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_Allow_Null=\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_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_Vertical=\uC138\uB85C FR-Designer_Gradient_Direction=\uADF8\uB77C\uB370\uC774\uC158 \uBC29\uD5A5 @@ -534,5 +528,12 @@ 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_No=\uC544\uB2C8\uC624 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_Role= FR-Designer_DS_TableData=\uB370\uC774\uD130\uC138\uD2B8 FR-Designer_Parameter-Formula=\uC218\uC2DD +FR-Designer_Plugin_Should_Update_Please_Contact_Developer= + diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 367884033..c8ecd5bef 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -100,7 +100,6 @@ FR-Designer_FS_Close_Other_Templates=\u5173\u95ED\u5176\u4ED6\u6A21\u677F FR-Designer_File=\u6587\u4EF6 FR-Designer_Filter_Conditions=\u8FC7\u6EE4\u6761\u4EF6 FR-Designer_Finish-Modify-Share=\u5B8C\u6210\u4FEE\u6539\u5E76\u5206\u4EAB -FR-Designer_Fit-App=App\u81EA\u9002\u5E94 FR-Designer_Fit=\u81EA\u9002\u5E94 FR-Designer_Font-Family=\u5B57\u4F53\u540D\u79F0 FR-Designer_Font-Size=\u5B57\u4F53\u5927\u5C0F @@ -359,7 +358,6 @@ FR-Designer_KeyPoint=\u5173\u952E\u8282\u70B9 FR-Designer_loadedTreeModel=\u52A0\u8F7D\u5931\u8D25,\u8BF7\u68C0\u67E5\u540E\u91CD\u8BD5 FR-Designer-Failed_to_load_the_plugin=\u65E0\u6CD5\u52A0\u8F7D\u63D2\u4EF6\uFF0C\u8BF7\u66F4\u65B0\u63D2\u4EF6\uFF1A FR-Designer-Plugin_Please_Update_Jar=\u8BF7\u66F4\u65B0Jar\u5305, \u63D2\u4EF6\u9700\u6C42\u6700\u4F4E\u7248\u672C -FR-Designer-Invalid_Page_Number=\u65E0\u6548\u9875\u7801 FR-Designer_Get-CubeGetting=\u83B7\u53D6cube FR-Designer_XMLA_Database=\u6570\u636E\u5E93 FR-Designer_XMLA_UserName=\u7528\u6237\u540D @@ -492,10 +490,6 @@ FR-Designer-LayerPageReport_Define_PageQuerySQL=\u5B9A\u4E49\u5206\u9875\u67E5\u FR-Designer_Is_Share_DBTableData=\u5171\u4EAB\u6570\u636E\u96C6 FR-Designer_Event=\u4E8B\u4EF6 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_Exported_successfully=\u5BFC\u51FA\u6210\u529F FR-Designer_Exporting=\u6B63\u5728\u5BFC\u51FA @@ -520,22 +514,6 @@ FR-Designer_Create_Tree=\u6784\u5EFA\u6811 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_Title=FineReport 8.0 - -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_FormulaPane_Variables=\u53D8\u91CF -FR-Designer_FormulaPane_Formula_Description=\u516C\u5F0F\u8BF4\u660E -FR-Designer_FormulaPane_Function_Detail=\u51FD\u6570\u660E\u7EC6 -FR-Designer_FormulaPane_Search=\u641C\u7D22 -FR-Designer_Tab_carousel=tab\u8F6E\u64AD -FR-Designer_setCarousel=\u5F00\u542F\u8F6E\u64AD -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 @@ -543,17 +521,30 @@ 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_Background_Null=\u6CA1\u6709\u80CC\u666F +FR-Designer_Background_Color=\u989C\u8272 +FR-Designer_Background_Texture=\u7EB9\u7406 +FR-Designer_Background_Pattern=\u56FE\u6848 +FR-Designer_Background_Gradient_Color=\u6E10\u53D8\u8272 +FR-Designer_Background_Image=\u56FE\u7247 +FR-Designer_Background_Clear=\u6E05\u9664 +FR-Designer_Background_Image_Select=\u9009\u62E9\u56FE\u7247 +FR-Designer_Tab_carousel=tab\u8F6E\u64AD +FR-Designer_setCarousel=\u5F00\u542F\u8F6E\u64AD +FR-Designer_carouselInterval=\u8F6E\u64AD\u95F4\u9694 +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_Click_Tips=\u9F20\u6807\u70B9\u51FB\u6309\u94AE\u65F6\u80CC\u666F\uFF0C\u82E5\u65E0\u5219\u4E0D\u6539\u53D8\u80CC\u666F 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_Allow_Null=\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_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_Vertical=\u7EB5\u5411 FR-Designer_Gradient_Direction=\u6E10\u53D8\u65B9\u5411 @@ -567,5 +558,12 @@ 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_No=\u5426 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_Role=\u89D2\u8272 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 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 95aba53ff..a31f31760 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -100,7 +100,6 @@ FR-Designer_FS_Close_Other_Templates=\u95DC\u9589\u5176\u4ED6\u7BC4\u672C FR-Designer_File=\u6A94\u6848 FR-Designer_Filter_Conditions=\u904E\u6FFE\u689D\u4EF6 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_Font-Family=\u5B57\u9AD4\u540D\u7A31 FR-Designer_Font-Size=\u5B57\u9AD4\u5927\u5C0F @@ -358,7 +357,6 @@ FR-Designer_KeyPoint=\u95DC\u9375\u7BC0\u9EDE FR-Designer_loadedTreeModel=\u52A0\u8F09\u5931\u6557,\u8ACB\u6AA2\u67E5\u5F8C\u91CD\u8A66 FR-Designer-Failed_to_load_the_plugin=\u7121\u6CD5\u52A0\u8F09\u63D2\u4EF6\uFF0C\u8ACB\u66F4\u65B0\u63D2\u4EF6\uFF1A FR-Designer-Plugin_Please_Update_Jar=\u8ACB\u66F4\u65B0Jar\u5305, \u63D2\u4EF6\u9700\u6C42\u6700\u4F4E\u7248\u672C -FR-Designer-Invalid_Page_Number=\u7121\u6548\u9801\u78BC FR-Designer_Get-CubeGetting=\u7372\u53D6cube FR-Designer_XMLA_Database=\u8CC7\u6599\u5EAB FR-Designer_XMLA_UserName=\u5E33\u865F @@ -453,12 +451,12 @@ FR-Designer-QQLogin-Determine=\u78BA\u5B9A FR-Designer-QQLogin-Cancel=\u53D6\u6D88 FR-Designer-Reuse_Manager=\u7D44\u4EF6\u7BA1\u7406 FR-Designer_TableData-Default-Para=\u6578\u64DA\u96C6\u9ED8\u8A8D\u53C3\u6578 -FR-Designer_Layout_Block_Absolute=\u7D55\u5C0D\u756B\u5E03\u584A -FR-Designer_Layout_Block_Tab=Tab\u584A -FR-Designer_Layout_Block_Blank=\u7A7A\u767D\u584A -FR-Designer_Attr_Layout=\u4F48\u5C40 -FR-Designer_Attr_Layout_Type=\u4F48\u5C40\u65B9\u5F0F -FR-Designer_Attr_Bidirectional_Adaptive=\u96D9\u5411\u81EA\u9069\u61C9 +FR-Designer_Layout_Block_Absolute= +FR-Designer_Layout_Block_Tab= +FR-Designer_Layout_Block_Blank= +FR-Designer_Attr_Layout= +FR-Designer_Attr_Layout_Type= +FR-Designer_Attr_Bidirectional_Adaptive= FR-Designer_Mobile-Refresh=\u5237\u65B0 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 @@ -480,10 +478,6 @@ 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_Properties=\u5C6C\u6027 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_Exported_successfully=\u532F\u51FA\u6210\u529F FR-Designer_Exporting=\u6B63\u5728\u532F\u51FA... @@ -491,39 +485,23 @@ FR-Designer_Export-PDF=PDF\u683C\u5F0F FR-Designer_Properties_Mobile=\u624B\u6A5F\u5C6C\u6027 FR-Designer_Button_OK=\u78BA\u5B9A FR-Designer_Button_Cancel=\u53D6\u6D88 -FR-Designer_JavaScript=JavaScript\u8173\u672C -FR-Designer_JavaScript_Form_Submit=\u8868\u55AE\u63D0\u4EA4 -FR-Designer_JavaScript_Commit_to_Database=\u63D0\u4EA4\u5165\u5EAB -FR-Designer_JavaScript_Custom=\u81EA\u5B9A\u7FA9 -FR-Designer_RWA_Submit=\u63D0\u4EA4 -FR-Designer_Event_Name=\u4E8B\u4EF6\u540D -FR-Designer_Event_Type=\u4E8B\u4EF6\u985E\u578B -FR-Designer_Event_Name_Type=\u4E8B\u4EF6\u540D\u5B57\u548C\u985E\u578B -FR-Designer_JavaScript_Set=JS\u8A2D\u7F6E -FR-Designer_Attribute=\u5C6C\u6027 -FR-Designer_Form_Editing_Listeners=\u4E8B\u4EF6\u7DE8\u8F2F -FR-Designer_Form_Basic_Properties=\u57FA\u672C\u5C6C\u6027 -FR-Designer_DS_Dictionary=\u6578\u64DA\u5B57\u5178 -FR-Designer_Create_Tree=\u69CB\u5EFA\u6A39 -FR-Designer_Set_Callback_Function=\u8A2D\u7F6E\u56DE\u8ABF\u51FD\u6578 -FR-Designer_ConfirmDialog_Content=\u662F\u5426\u78BA\u5B9A\u522A\u9664TAB\u63A7\u4EF6 -FR-Designer_ConfirmDialog_Title=FineReport 8.0 - -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_FormulaPane_Variables=\u8B8A\u91CF -FR-Designer_FormulaPane_Formula_Description=\u516C\u5F0F\u8AAA\u660E -FR-Designer_FormulaPane_Function_Detail=\u51FD\u6578\u660E\u7D30 -FR-Designer_FormulaPane_Search=\u641C\u7D22 -FR-Designer_Tab_carousel=Tab\u8F2A\u64AD -FR-Designer_setCarousel=\u958B\u555F\u8F2A\u64AD -FR-Designer_carouselInterval=\u8F2A\u64AD\u9593\u9694 - -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_JavaScript= +FR-Designer_JavaScript_Form_Submit= +FR-Designer_JavaScript_Commit_to_Database= +FR-Designer_JavaScript_Custom= +FR-Designer_RWA_Submit= +FR-Designer_Event_Name= +FR-Designer_Event_Type= +FR-Designer_Event_Name_Type= +FR-Designer_JavaScript_Set= +FR-Designer_Attribute= +FR-Designer_Form_Editing_Listeners= +FR-Designer_Form_Basic_Properties= +FR-Designer_DS_Dictionary= +FR-Designer_Create_Tree= +FR-Designer_Set_Callback_Function= +FR-Designer_ConfirmDialog_Content= +FR-Designer_ConfirmDialog_Title= 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 @@ -531,17 +509,30 @@ 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_Background_Null= +FR-Designer_Background_Color= +FR-Designer_Background_Texture= +FR-Designer_Background_Pattern= +FR-Designer_Background_Gradient_Color= +FR-Designer_Background_Image= +FR-Designer_Background_Clear= +FR-Designer_Background_Image_Select= +FR-Designer_Tab_carousel= +FR-Designer_setCarousel= +FR-Designer_carouselInterval= +FR-Designer_Initial_Background_Tips= +FR-Designer_Mouse_Move_Tips= +FR-Designer_Mouse_Click_Tips= 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_Allow_Null=\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_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_Vertical=\u7E31\u5411 FR-Designer_Gradient_Direction=\u6F38\u8B8A\u65B9\u5411 @@ -555,5 +546,12 @@ 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_No=\u5426 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_Role= FR-Designer_DS_TableData=\u8CC7\u6599\u96C6 FR-Designer_Parameter-Formula=\u516C\u5F0F +FR-Designer_Plugin_Should_Update_Please_Contact_Developer=\u633F\u4EF6\u7248\u672C\u904E\u4F4E\uFF0C\u5B58\u5728API\u4E0D\u76F8\u5BB9\uFF0C\u8ACB\u806F\u7CFB\u958B\u767C\u8005\u965E\u7D1A\u633F\u4EF6 +FR-Designer_WidgetOrder=\u63A7\u4EF6\u9806\u5E8F diff --git a/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java b/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java index b0a9ba166..7fcea5d1e 100644 --- a/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java +++ b/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java @@ -148,7 +148,7 @@ public abstract class ToolBarMenuDock { public void addCommunityMenuDef(java.util.List menuList){ Locale locale = FRContext.getLocale(); - Locale [] locales = supportCommunityLocales(); + Locale [] locales =supportCommunityLocales(); for(int i = 0; i < locales.length; i++) { if(locale.equals(locales[i])){ menuList.add(createCommunityMenuDef()); @@ -161,7 +161,6 @@ public abstract class ToolBarMenuDock { return new Locale[]{ Locale.CHINA, Locale.TAIWAN, - Locale.US }; } @@ -313,6 +312,11 @@ public abstract class ToolBarMenuDock { public ShortCut[] createHelpShortCuts() { java.util.List shortCuts = new ArrayList(); 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(new TutorialAction()); shortCuts.add(SeparatorDef.DEFAULT); @@ -397,7 +401,7 @@ public abstract class ToolBarMenuDock { return toolBar; } else { - return polyToolBar(Inter.getLocText(new String[]{"Polybolck", "Edit"})); + return polyToolBar(Inter.getLocText("FR-Designer_Polyblock_Edit")); } } From ff38b20cab6818c8563d2c721eccf6e28959c0c0 Mon Sep 17 00:00:00 2001 From: neil Date: Thu, 23 Feb 2017 10:16:35 +0800 Subject: [PATCH 130/343] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=EF=BC=8C=20=E4=BF=AE=E5=A4=8D=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/locale/designer.properties | 55 ++++---- .../design/locale/designer_en_US.properties | 126 ++++++++--------- .../design/locale/designer_ja_JP.properties | 130 +++++++++--------- .../design/locale/designer_ko_KR.properties | 45 +++--- .../design/locale/designer_zh_CN.properties | 48 +++---- .../design/locale/designer_zh_TW.properties | 94 ++++++------- .../mainframe/toolbar/ToolBarMenuDock.java | 6 +- 7 files changed, 255 insertions(+), 249 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 268f5d53d..28d261ed2 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -100,7 +100,7 @@ FR-Designer_FS_Close_Other_Templates= FR-Designer_File= FR-Designer_Filter_Conditions= FR-Designer_Finish-Modify-Share= -FR-Designer_Fit= +FR-Designer_Fit-App= FR-Designer_Font-Family= FR-Designer_Font-Size= 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-Failed_to_load_the_plugin=Failed to load the plugin\uFF0Cplease update the plugin\: FR-Designer-Plugin_Please_Update_Jar= +FR-Designer-Invalid_Page_Number=Invalid Page Number FR-Designer_XMLA_Database=Database FR-Designer_XMLA_UserName=User name FR-Designer_XMLA_Password=Password @@ -487,6 +488,10 @@ FR-Designer-LayerPageReport_PageQuery= FR-Designer-LayerPageReport_Define_PageQuerySQL= FR-Designer_Event= 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_Exported_successfully=Exported successfully FR-Designer_Exporting=Exporting @@ -505,11 +510,27 @@ FR-Designer_JavaScript_Set= FR-Designer_Attribute= FR-Designer_Form_Editing_Listeners= FR-Designer_Form_Basic_Properties= -FR-Designer_DS_Dictionary=Data Dictionary -FR-Designer_Create_Tree=Build Tree +FR-Designer_DS_Dictionary= +FR-Designer_Create_Tree= FR-Designer_Set_Callback_Function= FR-Designer_ConfirmDialog_Content= FR-Designer_ConfirmDialog_Title= + +FR-Designer_FormulaPane_Tips=Tips\:You_Can_Input_B1_To_Input_The_Data_Of_The_First_Row_Second_Column +FR-Designer_FormulaPane_Variables=Variables +FR-Designer_FormulaPane_Formula_Description=Formula_Description +FR-Designer_FormulaPane_Function_Detail=Function Detail +FR-Designer_FormulaPane_Search=Search +FR-Designer_Tab_carousel= +FR-Designer_setCarousel= +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 @@ -517,30 +538,17 @@ 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_Background_Null= -FR-Designer_Background_Color= -FR-Designer_Background_Texture= -FR-Designer_Background_Pattern= -FR-Designer_Background_Gradient_Color= -FR-Designer_Background_Image= -FR-Designer_Background_Clear= -FR-Designer_Background_Image_Select= -FR-Designer_Tab_carousel= -FR-Designer_setCarousel= -FR-Designer_carouselInterval= -FR-Designer_Initial_Background_Tips= -FR-Designer_Mouse_Move_Tips= -FR-Designer_Mouse_Click_Tips= FR-Designer_About_Version=Version FR-Designer_About_CopyRight=Copy Right FR-Designer_Service_Phone=Service Phone -FR-Designer_Allow_Null=Allow null +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}' directory.\nAdd the source code(.java file) into the same folder if need.\nExample: {R2}} +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 @@ -554,12 +562,5 @@ 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_Role=Role -FR-Designer-Move_Tab_First=move to first -FR-Designer-Move_Tab_End=move to end -FR-Designer-Move_Tab_Next=move to next -FR-Designer-Move_Tab_Prev=move to previous FR-Designer_DS_TableData=Data Set -FR-Designer_Parameter-Formula=Formula -FR-Designer_Plugin_Should_Update_Please_Contact_Developer=Plugin version is too low, and is not compatible with current API. Please contact the developer to update. -FR-Designer_WidgetOrder=Widget Order +FR-Designer_Parameter-Formula=Formula \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index b0bf16d5d..26d5bc85f 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/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_Cell=cell FR-Designer_Chart_Cell=Chart Hyperlink-Link Cell -FR-Designer_Chart_Float=Chart Hyperlink-Floating Elements -FR-Designer_Chart_Float_chart=Chart Hyperlink-Floating-window Chart +FR-Designer_Chart_Float=Chart Hyperlink-Floating Element +FR-Designer_Chart_Float_chart=Chart Hyperlink-Floating Chart 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_Close=close @@ -100,6 +100,7 @@ FR-Designer_FS_Close_Other_Templates=Close other templates FR-Designer_File=file FR-Designer_Filter_Conditions=Filter condition FR-Designer_Finish-Modify-Share=Finish Modification And Share +FR-Designer_Fit-App=App self-adaption FR-Designer_Fit=self-adaption FR-Designer_Font-Family=Font name FR-Designer_Font-Size=Font size @@ -118,7 +119,7 @@ FR-Designer_Get-CubeGetting cube= FR-Designer_Help=Help FR-Designer_Hide=Hide 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_Icon=Icon FR-Designer_Index=index @@ -126,7 +127,7 @@ FR-Designer_Input_Rule=Input Rule FR-Designer_Language_Default=Default FR-Designer_Layout=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_Length=Length FR-Designer_Loading_Data=Loading Data @@ -173,12 +174,12 @@ FR-Designer_Search=Search FR-Designer_Set=Set FR-Designer_Share-Template=Share Template FR-Designer_Simple_general=Simple custom query -FR-Designer_Song_TypeFace=song typeface +FR-Designer_Song_TypeFace=Song typeface FR-Designer_Start-Date=Start Date FR-Designer_Subscript=Subscript FR-Designer_Superscript=Superscript FR-Designer_Support_QQ=Support online -FR-Designer_Swatch=Swatch +FR-Designer_Swatch=Sample FR-Designer_Tab_title=Tab title FR-Designer_TableData=Data set FR-Designer_Thank_guest=Special thanks to @@ -190,8 +191,8 @@ FR-Designer_Underline=Underline FR-Designer_Used=Recently Used FR-Designer_User-defined-MDX=Custom MDX query FR-Designer_SampleText=SampleText SampleText -FR-Designer_Vertical-LeftToRight=Vertical Text (Left to Right) -FR-Designer_Vertical-RightToLeft=Vertical Text (Right To Left) +FR-Designer_Vertical-LeftToRight=Vertical Text (left to right) +FR-Designer_Vertical-RightToLeft=Vertical Text (right to left) FR-Designer_VerticalBoxLayout=Vertical Box Layout 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. @@ -358,6 +359,7 @@ FR-Designer_KeyPoint=KeyPoint FR-Designer_loadedTreeModel=loadedTreeModel FR-Designer-Failed_to_load_the_plugin=Failed to load the plugin\uFF0Cplease update the plugin\: FR-Designer-Plugin_Please_Update_Jar=Please Update Jar +FR-Designer-Invalid_Page_Number=Invalid Page Number FR-Designer_XMLA_Database=DB FR-Designer_XMLA_UserName=User name FR-Designer_XMLA_Password=Password @@ -413,12 +415,12 @@ FR-Designer_Unit_PT=Pound FR-Designer-Write_Auto_Stash=auto stash FR-Designer_Printer_Native_Button=Native Print 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_Error=Error FR-Designer_formDesignerModule=Form Designer 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_Mobile-Attr=Mobile Attr FR-Designer_Mobile-Vertical=Vertical Screen @@ -432,42 +434,42 @@ FR-Designer_COMMUNITY_NEED=need FR-Designer_COMMUNITY_BUG=bug report FR-Designer_COMMUNITY_SIGN=sign FR-Designer_COMMUNITY_QUESTIONS=questions -FR-Designer_Mobile-Zoom=zoom +FR-Designer_Mobile-Zoom=Zoom 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-Cancel=Cancel FR-Designer_Write-Save-Formula=Preserve formula when fill FR-Designer_Export-Save-Formula=Preserve formula when export -FR-Designer_Form-Fit-Tip=Fit Plugin -FR-Designer_Form-Frozen-Tip=When Use Form Frozen, Suggest Install -FR-Designer_Form-Forzen-Speed=To Speed UP. -FR-Designer_Attention=attention -FR-Designer_Forbid_Widgets_Intersects=Forbid Widgets Intersects +FR-Designer_Form-Fit-Tip=Adaptive plug-in +FR-Designer_Form-Frozen-Tip=When use Frozen, suggest install +FR-Designer_Form-Forzen-Speed=, use bidirectional and horizontal adaption to improve the speed. +FR-Designer_Attention=Attention +FR-Designer_Forbid_Widgets_Intersects=Forbid component overlap FR-Designer_Widget_Scaling_Mode_Fit=Area-Fit FR-Designer_Widget_Scaling_Mode_Fixed=Area-Fixed -FR-Designer-Widget_Area_Scaling=Widget Area Scaling -FR-Designer-Widget_Scaling_Mode=Widget Scaling Mode +FR-Designer-Widget_Area_Scaling=Component area scaling +FR-Designer-Widget_Scaling_Mode=Scaling mode FR-Designer-QQLogin-Determine=Determine FR-Designer-QQLogin-Cancel=Cancel -FR-Designer-Reuse_Manager=Reuse Manager -FR-Designer_TableData-Default-Para=Default Para -FR-Designer_Layout_Block_Absolute=Absolute Layout Block -FR-Designer_Layout_Block_Tab=TabLayout -FR-Designer_Layout_Block_Blank=Blank Block -FR-Designer_Attr_Layout=layout -FR-Designer_Attr_Layout_Type=layout type -FR-Designer_Attr_Bidirectional_Adaptive=Bidirectional Adaptive -FR-Designer-Selected_Widget=selected widget -FR-Designer_LocalWidget=local widget -FR-Designer_AllCategories=all categories -FR-Designer_Download_Template=download template -FR-Designer_Install_Template=install template -FR-Designer_Delete_Template=delete template -FR-Designer_Mobile-Refresh=refresh -FR-Designer_Mobile-ToolBar=toolbar +FR-Designer-Reuse_Manager=Component management +FR-Designer_TableData-Default-Para=Default parameter +FR-Designer_Layout_Block_Absolute=Absolute layout block +FR-Designer_Layout_Block_Tab=Tab block +FR-Designer_Layout_Block_Blank=Blank block +FR-Designer_Attr_Layout=Layout +FR-Designer_Attr_Layout_Type=Layout type +FR-Designer_Attr_Bidirectional_Adaptive=Bidirectional adaptive +FR-Designer-Selected_Widget=Selected widget +FR-Designer_LocalWidget=Local component library +FR-Designer_AllCategories=All categories +FR-Designer_Download_Template=Download components +FR-Designer_Install_Template=Install components +FR-Designer_Delete_Template=Delete components +FR-Designer_Mobile-Refresh=Refresh +FR-Designer_Mobile-ToolBar=Toolbar 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_Language_Change_Successful=New language setting will be enabled when designer is restarted 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_Event=Event 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_Exported_successfully=Exported successfully FR-Designer_Exporting=Exporting @@ -508,8 +514,24 @@ FR-Designer_Form_Basic_Properties=Basic Property FR-Designer_DS_Dictionary=Data Dictionary FR-Designer_Create_Tree=Build Tree FR-Designer_Set_Callback_Function=Set Callback Function -FR-Designer_ConfirmDialog_Content= -FR-Designer_ConfirmDialog_Title= +FR-Designer_ConfirmDialog_Content=Confirm to delete Tab Control +FR-Designer_ConfirmDialog_Title=FineReport 8.0 + +FR-Designer_FormulaPane_Tips=Tips\:You can input B1 to get the data in the second cell of the first row +FR-Designer_FormulaPane_Variables=Variables +FR-Designer_FormulaPane_Formula_Description=Formula Description +FR-Designer_FormulaPane_Function_Detail=Function Detail +FR-Designer_FormulaPane_Search=Search +FR-Designer_Tab_carousel=Tab carousel +FR-Designer_setCarousel=Start +FR-Designer_carouselInterval=Interval + +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 @@ -517,30 +539,17 @@ 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_Background_Null=No Background -FR-Designer_Background_Color=Color -FR-Designer_Background_Texture=Texture -FR-Designer_Background_Pattern=Pattern -FR-Designer_Background_Gradient_Color=Gradient Color -FR-Designer_Background_Image=Image -FR-Designer_Background_Clear=Clear -FR-Designer_Background_Image_Select=Select Picture -FR-Designer_Tab_carousel=tab carousel -FR-Designer_setCarousel=set carousel -FR-Designer_carouselInterval=interval -FR-Designer_Initial_Background_Tips=Initial background of the button -FR-Designer_Mouse_Move_Tips=Move the mouse to the button on the background, in the absence of not changing the background -FR-Designer_Mouse_Click_Tips=The background of the mouse to click the button, in the absence of not changing the background FR-Designer_About_Version=Version FR-Designer_About_CopyRight=Copy Right FR-Designer_Service_Phone=Service Phone -FR-Designer_Allow_Null=Allow null +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}' directory.\nAdd the source code(.java file) into the same folder if need.\nExample: {R2} +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 @@ -554,12 +563,5 @@ FR-Designer_Show_As_Download=Display the binary content using download link FR-Designer_File_Name_For_Download=File Name For Download FR-Designer_No=No FR-Designer_Pagination=Page Break -FR-Designer-Move_Tab_First=move to first -FR-Designer-Move_Tab_End=move to end -FR-Designer-Move_Tab_Next=move to next -FR-Designer-Move_Tab_Prev=move to previous -FR-Designer_Role=Role 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_Parameter-Formula=Formula \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index 0ef9ce10c..d86d0a164 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/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_Filter_Conditions=\u9078\u5225\u6761\u4EF6 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_Font-Family=\u30D5\u30A9\u30F3\u30C8\u540D\u79F0 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_Alignment=\u63C3\u3048 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-Collect_Information_free=\u7121\u6599 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_Formula_Condition=\u516C\u5F0F\u6761\u4EF6 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_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_Performance_First=\u6027\u80FD\u512A\u5148 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_Advanced=\u9AD8\u7D1A 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_Error=\u30A8\u30E9\u30FC FR-Designer-Website_Url=http\://www.finereport.com/jp -FR-Designer_formDesignerModule= -FR-Designer-BBSLogin_Login-Title= -FR-Designer_Get-CubeGetting= -FR-Designer-BBSLogin_Download-Unlogin-Tip= +FR-Designer_formDesignerModule=\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u30C7\u30B6\u30A4\u30CA\u30FC +FR-Designer-BBSLogin_Login-Title=BBS\u30ED\u30B0\u30A4\u30F3 +FR-Designer_Get-CubeGetting=cube\u53D6\u5F97 +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_Mobile-Attr=\u30E2\u30D0\u30A4\u30EB\u7AEF\u672B\u5C5E\u6027 FR-Designer_Mobile-Vertical=\u7E26 @@ -435,60 +436,76 @@ 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-QQLogin-Determine=\u6C7A\u5B9A\u3057\u307E\u3059 FR-Designer-QQLogin-Cancel=\u30AD\u30E3\u30F3\u30BB\u30EB -FR-Designer-Reuse_Manager= -FR-Designer_Layout_Block_Absolute= -FR-Designer_Layout_Block_Tab= -FR-Designer_Layout_Block_Blank= -FR-Designer_Attr_Layout= -FR-Designer_Attr_Layout_Type= -FR-Designer_Attr_Bidirectional_Adaptive= -FR-Designer_Download_Template= +FR-Designer-Reuse_Manager=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8 +FR-Designer_Layout_Block_Absolute=\u7D76\u5BFE\u30EC\u30A4\u30A2\u30A6\u30C8\u30D6\u30ED\u30C3\u30AF +FR-Designer_Layout_Block_Tab=Tab\u30D6\u30ED\u30C3\u30AF +FR-Designer_Layout_Block_Blank=\u7A7A\u767D\u30D6\u30ED\u30C3\u30AF +FR-Designer_Attr_Layout=\u30EC\u30A4\u30A2\u30A6\u30C8 +FR-Designer_Attr_Layout_Type=\u30EC\u30A4\u30A2\u30A6\u30C8\u65B9\u5F0F +FR-Designer_Attr_Bidirectional_Adaptive=\u53CC\u65B9\u5411\u81EA\u5DF1\u8ABF\u6574 +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_Mobile-Refresh= -FR-Designer_Mobile-ToolBar= +FR-Designer_Mobile-Refresh=\u66F4\u65B0 +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_Add_all=\u3059\u3079\u3066\u8FFD\u52A0 -FR-Designer_Language_Change_Successful= -FR-Designer_Template_Web_Attributes= +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=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u30A6\u30A7\u30D6\u30D7\u30ED\u30D1\u30C6\u30A3 FR-Designer_Basic=\u57FA\u672C 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_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_Browser_Background=\u30D6\u30E9\u30A6\u30B6\u80CC\u666F FR-Designer_Import_Css=Css\u5F15\u7528 FR-Designer_Import_JavaScript=JavaScript\u5F15\u7528 FR-Designer-Datasource-Param_DES=  "${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
 select * from table where id\=${abc}\u3002
 select * from table where id\='${abc}'\u3002(\u3082\u3057id\u306F\u6587\u5B57\u5217\u306A\u3089)\uFFFD 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_Define_PageQuerySQL=\u5B9A\u7FA9\u30DA\u30FC\u30B8\u5225\u30AF\u30A8\u30EAsql +FR-Designer-LayerPageReport_PageQuery=\u6539\u30DA\u30FC\u30B8\u691C\u7D22 +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_Event=\ -FR-Designer_Properties=FR-Designer_Properties=\ -\ +FR-Designer_Event=\u30A4\u30D9\u30F3\u30C8 +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_Exported_successfully=\u5C0E\u51FA\u6210\u529F 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 -\uFFFD -FR-Designer_JavaScript= -FR-Designer_JavaScript_Form_Submit= -FR-Designer_JavaScript_Commit_to_Database= -FR-Designer_JavaScript_Custom= -FR-Designer_RWA_Submit= -FR-Designer_Event_Name= -FR-Designer_Event_Type= -FR-Designer_Event_Name_Type= -FR-Designer_JavaScript_Set= -FR-Designer_Attribute= -FR-Designer_Form_Editing_Listeners= -FR-Designer_Form_Basic_Properties= -FR-Designer_DS_Dictionary= -FR-Designer_Create_Tree= -FR-Designer_Set_Callback_Function= -FR-Designer_ConfirmDialog_Content= -FR-Designer_ConfirmDialog_Title= +FR-Designer_JavaScript=JavaScript +FR-Designer_JavaScript_Form_Submit=\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u66F8\u304D\u8FBC\u307F +FR-Designer_JavaScript_Commit_to_Database=DB\u306B\u66F8\u304D\u8FBC\u307F +FR-Designer_JavaScript_Custom=\u30AB\u30B9\u30BF\u30E0 +FR-Designer_RWA_Submit=\u66F8\u304D\u8FBC\u307F +FR-Designer_Event_Name=\u30A4\u30D9\u30F3\u30C8\u540D +FR-Designer_Event_Type=\u30A4\u30D9\u30F3\u30C8\u30BF\u30A4\u30D7 +FR-Designer_Event_Name_Type=\u30A4\u30D9\u30F3\u30C8\u540D\u3068\u30BF\u30A4\u30D7 +FR-Designer_JavaScript_Set=JS\u8A2D\u5B9A +FR-Designer_Attribute=\u30D7\u30ED\u30D1\u30C6\u30A3 +FR-Designer_Form_Editing_Listeners=\u30A4\u30D9\u30F3\u30C8\u7DE8\u96C6 +FR-Designer_Form_Basic_Properties=\u57FA\u672C\u30D7\u30ED\u30D1\u30C6\u30A3 +FR-Designer_DS_Dictionary=\u30C7\u30FC\u30BF\u8F9E\u66F8 +FR-Designer_Create_Tree=\u30C4\u30EA\u30FC\u69CB\u7BC9 +FR-Designer_Set_Callback_Function=\u30B3\u30FC\u30EB\u30D0\u30C3\u30AF\u95A2\u6570\u8A2D\u5B9A +FR-Designer_ConfirmDialog_Content=tab\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u3092\u524A\u9664\u3057\u307E\u3059\u304B +FR-Designer_ConfirmDialog_Title=FineReport 8.0 +FR-Designer_FormulaPane_Tips=\u30D2\u30F3\u30C8\:B1\u3092\u5165\u529B +FR-Designer_FormulaPane_Variables=\u5909\u6570 +FR-Designer_FormulaPane_Formula_Description=\u516C\u5F0F\u8AAC\u660E +FR-Designer_FormulaPane_Function_Detail=\u95A2\u6570\u660E\u7D30 +FR-Designer_FormulaPane_Search=\u691C\u7D22 +FR-Designer_Tab_carousel=tab\u30AB\u30EB\u30FC\u30BB\u30EB +FR-Designer_setCarousel=\u30AB\u30EB\u30FC\u30BB\u30EB\u30AA\u30F3 +FR-Designer_carouselInterval=\u30AB\u30EB\u30FC\u30BB\u30EB\u9593\u9694 +FR-Designer_ClassName_panel=\u985E\u540D +FR-Designer_Description_panel=\u8A18\u8FF0 +FR-Designer_Edit_panel=\u7DE8\u96C6 +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 @@ -496,30 +513,17 @@ 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_Background_Null= -FR-Designer_Background_Color= -FR-Designer_Background_Texture= -FR-Designer_Background_Pattern= -FR-Designer_Background_Gradient_Color= -FR-Designer_Background_Image= -FR-Designer_Background_Clear= -FR-Designer_Background_Image_Select= -FR-Designer_Tab_carousel= -FR-Designer_setCarousel= -FR-Designer_carouselInterval= -FR-Designer_Initial_Background_Tips= -FR-Designer_Mouse_Move_Tips= -FR-Designer_Mouse_Click_Tips= 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_Null=\u7A7A\u6B04\u3042\u308A +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}" \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_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 @@ -533,11 +537,5 @@ 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_No=\u3044\u3044\u3048 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_Role= FR-Designer_DS_TableData=\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9 FR-Designer_Parameter-Formula=\u6570\u5F0F -FR-Designer_Plugin_Should_Update_Please_Contact_Developer= diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index 5bc3966dc..dfb5ec78f 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/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_Filter_Conditions=\uD544\uD130\uC870\uAC74 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_Font-Family=\uAE00\uAF34\uBA85\uCE6D FR-Designer_Font-Size=\uAE00\uAF34\uD06C\uAE30 @@ -460,6 +461,10 @@ 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_Define_PageQuerySQL=\uC815\uC758\uD398\uC774\uC9C0\uB098\uB204\uAE30\uCC3E\uC544\uBCF4\uAE30sql 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_Export_failed=\uB0B4\uBCF4\uB0B4\uAE30\uC2E4\uD328 FR-Designer_Exported_successfully=\uB0B4\uBCF4\uB0B4\uAE30\uC131\uACF5 @@ -484,6 +489,19 @@ FR-Designer_Create_Tree= FR-Designer_Set_Callback_Function= FR-Designer_ConfirmDialog_Content= FR-Designer_ConfirmDialog_Title= +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_FormulaPane_Variables=\uBCC0\uC218 +FR-Designer_FormulaPane_Formula_Description=\uC218\uC2DD\uC124\uBA85 +FR-Designer_FormulaPane_Function_Detail=\uD568\uC218\uC0C1\uC138\uC0AC\uD56D +FR-Designer_FormulaPane_Search=\uAC80\uC0C9 +FR-Designer_Tab_carousel= +FR-Designer_setCarousel= +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 @@ -491,30 +509,18 @@ 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_Background_Null= -FR-Designer_Background_Color= -FR-Designer_Background_Texture= -FR-Designer_Background_Pattern= -FR-Designer_Background_Gradient_Color= -FR-Designer_Background_Image= -FR-Designer_Background_Clear= -FR-Designer_Background_Image_Select= -FR-Designer_Tab_carousel= -FR-Designer_setCarousel= -FR-Designer_carouselInterval= -FR-Designer_Initial_Background_Tips= -FR-Designer_Mouse_Move_Tips= -FR-Designer_Mouse_Click_Tips= 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_Null=\uBE48\uCE78\uD5C8\uC6A9 +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}" \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_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 @@ -528,12 +534,5 @@ 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_No=\uC544\uB2C8\uC624 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_Role= FR-Designer_DS_TableData=\uB370\uC774\uD130\uC138\uD2B8 FR-Designer_Parameter-Formula=\uC218\uC2DD -FR-Designer_Plugin_Should_Update_Please_Contact_Developer= - diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index c8ecd5bef..367884033 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/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_Filter_Conditions=\u8FC7\u6EE4\u6761\u4EF6 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_Font-Family=\u5B57\u4F53\u540D\u79F0 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-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-Invalid_Page_Number=\u65E0\u6548\u9875\u7801 FR-Designer_Get-CubeGetting=\u83B7\u53D6cube FR-Designer_XMLA_Database=\u6570\u636E\u5E93 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_Event=\u4E8B\u4EF6 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_Exported_successfully=\u5BFC\u51FA\u6210\u529F FR-Designer_Exporting=\u6B63\u5728\u5BFC\u51FA @@ -514,6 +520,22 @@ FR-Designer_Create_Tree=\u6784\u5EFA\u6811 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_Title=FineReport 8.0 + +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_FormulaPane_Variables=\u53D8\u91CF +FR-Designer_FormulaPane_Formula_Description=\u516C\u5F0F\u8BF4\u660E +FR-Designer_FormulaPane_Function_Detail=\u51FD\u6570\u660E\u7EC6 +FR-Designer_FormulaPane_Search=\u641C\u7D22 +FR-Designer_Tab_carousel=tab\u8F6E\u64AD +FR-Designer_setCarousel=\u5F00\u542F\u8F6E\u64AD +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 @@ -521,30 +543,17 @@ 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_Background_Null=\u6CA1\u6709\u80CC\u666F -FR-Designer_Background_Color=\u989C\u8272 -FR-Designer_Background_Texture=\u7EB9\u7406 -FR-Designer_Background_Pattern=\u56FE\u6848 -FR-Designer_Background_Gradient_Color=\u6E10\u53D8\u8272 -FR-Designer_Background_Image=\u56FE\u7247 -FR-Designer_Background_Clear=\u6E05\u9664 -FR-Designer_Background_Image_Select=\u9009\u62E9\u56FE\u7247 -FR-Designer_Tab_carousel=tab\u8F6E\u64AD -FR-Designer_setCarousel=\u5F00\u542F\u8F6E\u64AD -FR-Designer_carouselInterval=\u8F6E\u64AD\u95F4\u9694 -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_Click_Tips=\u9F20\u6807\u70B9\u51FB\u6309\u94AE\u65F6\u80CC\u666F\uFF0C\u82E5\u65E0\u5219\u4E0D\u6539\u53D8\u80CC\u666F 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_Null=\u5141\u8BB8\u4E3A\u7A7A +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}" \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_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 @@ -558,12 +567,5 @@ 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_No=\u5426 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_Role=\u89D2\u8272 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 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index a31f31760..95aba53ff 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/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_Filter_Conditions=\u904E\u6FFE\u689D\u4EF6 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_Font-Family=\u5B57\u9AD4\u540D\u7A31 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-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-Invalid_Page_Number=\u7121\u6548\u9801\u78BC FR-Designer_Get-CubeGetting=\u7372\u53D6cube FR-Designer_XMLA_Database=\u8CC7\u6599\u5EAB FR-Designer_XMLA_UserName=\u5E33\u865F @@ -451,12 +453,12 @@ FR-Designer-QQLogin-Determine=\u78BA\u5B9A FR-Designer-QQLogin-Cancel=\u53D6\u6D88 FR-Designer-Reuse_Manager=\u7D44\u4EF6\u7BA1\u7406 FR-Designer_TableData-Default-Para=\u6578\u64DA\u96C6\u9ED8\u8A8D\u53C3\u6578 -FR-Designer_Layout_Block_Absolute= -FR-Designer_Layout_Block_Tab= -FR-Designer_Layout_Block_Blank= -FR-Designer_Attr_Layout= -FR-Designer_Attr_Layout_Type= -FR-Designer_Attr_Bidirectional_Adaptive= +FR-Designer_Layout_Block_Absolute=\u7D55\u5C0D\u756B\u5E03\u584A +FR-Designer_Layout_Block_Tab=Tab\u584A +FR-Designer_Layout_Block_Blank=\u7A7A\u767D\u584A +FR-Designer_Attr_Layout=\u4F48\u5C40 +FR-Designer_Attr_Layout_Type=\u4F48\u5C40\u65B9\u5F0F +FR-Designer_Attr_Bidirectional_Adaptive=\u96D9\u5411\u81EA\u9069\u61C9 FR-Designer_Mobile-Refresh=\u5237\u65B0 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 @@ -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_Properties=\u5C6C\u6027 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_Exported_successfully=\u532F\u51FA\u6210\u529F FR-Designer_Exporting=\u6B63\u5728\u532F\u51FA... @@ -485,23 +491,39 @@ FR-Designer_Export-PDF=PDF\u683C\u5F0F FR-Designer_Properties_Mobile=\u624B\u6A5F\u5C6C\u6027 FR-Designer_Button_OK=\u78BA\u5B9A FR-Designer_Button_Cancel=\u53D6\u6D88 -FR-Designer_JavaScript= -FR-Designer_JavaScript_Form_Submit= -FR-Designer_JavaScript_Commit_to_Database= -FR-Designer_JavaScript_Custom= -FR-Designer_RWA_Submit= -FR-Designer_Event_Name= -FR-Designer_Event_Type= -FR-Designer_Event_Name_Type= -FR-Designer_JavaScript_Set= -FR-Designer_Attribute= -FR-Designer_Form_Editing_Listeners= -FR-Designer_Form_Basic_Properties= -FR-Designer_DS_Dictionary= -FR-Designer_Create_Tree= -FR-Designer_Set_Callback_Function= -FR-Designer_ConfirmDialog_Content= -FR-Designer_ConfirmDialog_Title= +FR-Designer_JavaScript=JavaScript\u8173\u672C +FR-Designer_JavaScript_Form_Submit=\u8868\u55AE\u63D0\u4EA4 +FR-Designer_JavaScript_Commit_to_Database=\u63D0\u4EA4\u5165\u5EAB +FR-Designer_JavaScript_Custom=\u81EA\u5B9A\u7FA9 +FR-Designer_RWA_Submit=\u63D0\u4EA4 +FR-Designer_Event_Name=\u4E8B\u4EF6\u540D +FR-Designer_Event_Type=\u4E8B\u4EF6\u985E\u578B +FR-Designer_Event_Name_Type=\u4E8B\u4EF6\u540D\u5B57\u548C\u985E\u578B +FR-Designer_JavaScript_Set=JS\u8A2D\u7F6E +FR-Designer_Attribute=\u5C6C\u6027 +FR-Designer_Form_Editing_Listeners=\u4E8B\u4EF6\u7DE8\u8F2F +FR-Designer_Form_Basic_Properties=\u57FA\u672C\u5C6C\u6027 +FR-Designer_DS_Dictionary=\u6578\u64DA\u5B57\u5178 +FR-Designer_Create_Tree=\u69CB\u5EFA\u6A39 +FR-Designer_Set_Callback_Function=\u8A2D\u7F6E\u56DE\u8ABF\u51FD\u6578 +FR-Designer_ConfirmDialog_Content=\u662F\u5426\u78BA\u5B9A\u522A\u9664TAB\u63A7\u4EF6 +FR-Designer_ConfirmDialog_Title=FineReport 8.0 + +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_FormulaPane_Variables=\u8B8A\u91CF +FR-Designer_FormulaPane_Formula_Description=\u516C\u5F0F\u8AAA\u660E +FR-Designer_FormulaPane_Function_Detail=\u51FD\u6578\u660E\u7D30 +FR-Designer_FormulaPane_Search=\u641C\u7D22 +FR-Designer_Tab_carousel=Tab\u8F2A\u64AD +FR-Designer_setCarousel=\u958B\u555F\u8F2A\u64AD +FR-Designer_carouselInterval=\u8F2A\u64AD\u9593\u9694 + +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 @@ -509,30 +531,17 @@ 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_Background_Null= -FR-Designer_Background_Color= -FR-Designer_Background_Texture= -FR-Designer_Background_Pattern= -FR-Designer_Background_Gradient_Color= -FR-Designer_Background_Image= -FR-Designer_Background_Clear= -FR-Designer_Background_Image_Select= -FR-Designer_Tab_carousel= -FR-Designer_setCarousel= -FR-Designer_carouselInterval= -FR-Designer_Initial_Background_Tips= -FR-Designer_Mouse_Move_Tips= -FR-Designer_Mouse_Click_Tips= 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_Null=\u5141\u8A31\u70BA\u7A7A\u767D +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}" \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_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 @@ -546,12 +555,5 @@ 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_No=\u5426 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_Role= FR-Designer_DS_TableData=\u8CC7\u6599\u96C6 FR-Designer_Parameter-Formula=\u516C\u5F0F -FR-Designer_Plugin_Should_Update_Please_Contact_Developer=\u633F\u4EF6\u7248\u672C\u904E\u4F4E\uFF0C\u5B58\u5728API\u4E0D\u76F8\u5BB9\uFF0C\u8ACB\u806F\u7CFB\u958B\u767C\u8005\u965E\u7D1A\u633F\u4EF6 -FR-Designer_WidgetOrder=\u63A7\u4EF6\u9806\u5E8F diff --git a/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java b/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java index 7fcea5d1e..03612e0da 100644 --- a/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java +++ b/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.community.*; 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.file.NewTemplatePane; 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.env.RemoteEnv; import com.fr.general.ComparatorUtils; -import com.fr.general.GeneralContext; import com.fr.general.Inter; import com.fr.stable.ArrayUtils; import com.fr.stable.ProductConstants; @@ -161,6 +162,7 @@ public abstract class ToolBarMenuDock { return new Locale[]{ Locale.CHINA, Locale.TAIWAN, + Locale.US }; } From c79c47b393063ccaa07b6a609b9a578ddcb0c709 Mon Sep 17 00:00:00 2001 From: richie Date: Thu, 23 Feb 2017 10:28:24 +0800 Subject: [PATCH 131/343] =?UTF-8?q?=E7=99=BB=E5=BD=95=E7=95=8C=E9=9D=A2?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E9=87=8D=E6=96=B0=E8=AE=BE=E8=AE=A1=EF=BC=8C?= =?UTF-8?q?=E9=81=BF=E5=85=8D=E4=BD=BF=E7=94=A8=E8=AF=B7=E6=B1=82=E6=B3=A8?= =?UTF-8?q?=E5=85=A5=E7=9A=84=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/data/datapane/TableDataTreePane.java | 2 +- designer_base/src/com/fr/design/mainframe/DesignerFrame.java | 3 +-- .../src/com/fr/design/mainframe/WestRegionContainerPane.java | 2 +- .../src/com/fr/design/ChartTypeInterfaceManager.java | 2 +- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/designer_base/src/com/fr/design/data/datapane/TableDataTreePane.java b/designer_base/src/com/fr/design/data/datapane/TableDataTreePane.java index 5a893803c..c8f5ba317 100644 --- a/designer_base/src/com/fr/design/data/datapane/TableDataTreePane.java +++ b/designer_base/src/com/fr/design/data/datapane/TableDataTreePane.java @@ -84,7 +84,7 @@ public class TableDataTreePane extends BasicTableDataTreePane { GeneralContext.addPluginReadListener(new PluginReadListener() { @Override - public void success() { + public void success(Status status) { addMenuDef.clearShortCuts(); createAddMenuDef(); } diff --git a/designer_base/src/com/fr/design/mainframe/DesignerFrame.java b/designer_base/src/com/fr/design/mainframe/DesignerFrame.java index 298e5e996..117eb2848 100644 --- a/designer_base/src/com/fr/design/mainframe/DesignerFrame.java +++ b/designer_base/src/com/fr/design/mainframe/DesignerFrame.java @@ -169,7 +169,6 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta /** * 初始menuPane的方法 方便OEM时修改该组件 - * @param ad */ protected void initMenuPane(){ menuPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); @@ -189,7 +188,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta final JPanel northEastPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); GeneralContext.addPluginReadListener(new PluginReadListener() { @Override - public void success() { + public void success(Status status) { TitlePlaceProcessor processor = ExtraDesignClassManager.getInstance().getSingle(TitlePlaceProcessor.MARK_STRING); if (processor == null) { processor = new DefaultTitlePlace(); diff --git a/designer_base/src/com/fr/design/mainframe/WestRegionContainerPane.java b/designer_base/src/com/fr/design/mainframe/WestRegionContainerPane.java index 917e4cbfc..7fa8012fe 100644 --- a/designer_base/src/com/fr/design/mainframe/WestRegionContainerPane.java +++ b/designer_base/src/com/fr/design/mainframe/WestRegionContainerPane.java @@ -29,7 +29,7 @@ public class WestRegionContainerPane extends UIResizableContainer { super(DesignerFrameFileDealerPane.getInstance(), Constants.RIGHT); GeneralContext.addPluginReadListener(new PluginReadListener() { @Override - public void success() { + public void success(Status status) { setDownPane(TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter())); } }); diff --git a/designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java b/designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java index c091c54b9..c67a6aea5 100644 --- a/designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java +++ b/designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java @@ -75,7 +75,7 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh static { GeneralContext.addPluginReadListener(new PluginReadListener() { @Override - public void success() { + public void success(Status status) { //重新注册designModuleFactory DesignModuleFactory.registerExtraWidgetOptions(initWidgetOption()); } From 61ce070f0e468495d34ffbf73902af8ab87ec07e Mon Sep 17 00:00:00 2001 From: juhaoyu <2335173323@qq.com> Date: Thu, 23 Feb 2017 10:32:23 +0800 Subject: [PATCH 132/343] =?UTF-8?q?=E6=8F=92=E4=BB=B6=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/extra/PluginHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/extra/PluginHelper.java b/designer_base/src/com/fr/design/extra/PluginHelper.java index 119858206..be0244f78 100644 --- a/designer_base/src/com/fr/design/extra/PluginHelper.java +++ b/designer_base/src/com/fr/design/extra/PluginHelper.java @@ -256,7 +256,7 @@ public class PluginHelper { if (PluginLoader.getLoader().isInstalled(plugin)) { 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()}); FRLogger.getLogger().error(jarExpiredInfo); throw new com.fr.plugin.PluginVerifyException(jarExpiredInfo); From 92d9e6fddccb9522962d05a9fa5b5ffa55a029c1 Mon Sep 17 00:00:00 2001 From: fanglei <294531121> Date: Thu, 23 Feb 2017 19:22:58 +0800 Subject: [PATCH 133/343] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E2=80=9C=E7=A7=BB?= =?UTF-8?q?=E5=8A=A8=E7=AB=AF=E5=B1=9E=E6=80=A7=E2=80=9D=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E4=B8=AD=E2=80=9C=E8=A7=A3=E6=9E=90=E6=96=B9=E5=BC=8F=E2=80=9D?= =?UTF-8?q?=E4=B8=AD=E7=9A=84=E6=B3=A8=E9=87=8A=E5=88=86=E5=88=AB=E5=9C=A8?= =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E5=92=8C=E8=A1=A8=E5=8D=95=E4=B8=AD=E6=9C=89?= =?UTF-8?q?=E4=BA=89=E5=8F=96=E7=9A=84=E8=A1=A8=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/report/mobile/MobileUseHtmlGroupPane.java | 4 ++++ .../com/fr/design/report/mobile/ReportMobileAttrPane.java | 2 +- .../design/dialog/mobile/MobileUseHtmlGroupBeanPane.java | 8 ++++---- .../src/com/fr/design/locale/designer.properties | 1 + .../src/com/fr/design/locale/designer_en_US.properties | 1 + .../src/com/fr/design/locale/designer_zh_CN.properties | 1 + .../src/com/fr/design/locale/designer_zh_TW.properties | 1 + .../src/com/fr/design/form/mobile/FormMobileAttrPane.java | 2 +- .../com/fr/design/form/mobile/MobileUseHtmlGroupPane.java | 4 ++++ 9 files changed, 18 insertions(+), 6 deletions(-) diff --git a/designer/src/com/fr/design/report/mobile/MobileUseHtmlGroupPane.java b/designer/src/com/fr/design/report/mobile/MobileUseHtmlGroupPane.java index 0e0ec087d..ee3c51fec 100644 --- a/designer/src/com/fr/design/report/mobile/MobileUseHtmlGroupPane.java +++ b/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. */ public class MobileUseHtmlGroupPane extends MobileUseHtmlGroupBeanPane { + public MobileUseHtmlGroupPane(String annotation) { + super(annotation); + } + @Override public void populateBean(ElementCaseMobileAttr mobileAttr) { if(mobileAttr != null) { diff --git a/designer/src/com/fr/design/report/mobile/ReportMobileAttrPane.java b/designer/src/com/fr/design/report/mobile/ReportMobileAttrPane.java index 8f8f74437..e062b64cc 100644 --- a/designer/src/com/fr/design/report/mobile/ReportMobileAttrPane.java +++ b/designer/src/com/fr/design/report/mobile/ReportMobileAttrPane.java @@ -34,7 +34,7 @@ public class ReportMobileAttrPane extends BasicBeanPane{ appFitBrowserPane.setAppFitPreviewPane(appFitPreviewPane); jPanel.add(appFitBrowserPane); - jPanel.add(htmlGroupPane = new MobileUseHtmlGroupPane()); + jPanel.add(htmlGroupPane = new MobileUseHtmlGroupPane(Inter.getLocText("FR-mobile_analysis_annotation"))); jPanel.add(mobileToolBarPane = new MobileToolBarPane()); diff --git a/designer_base/src/com/fr/design/dialog/mobile/MobileUseHtmlGroupBeanPane.java b/designer_base/src/com/fr/design/dialog/mobile/MobileUseHtmlGroupBeanPane.java index 5ddf61e56..06666ee57 100644 --- a/designer_base/src/com/fr/design/dialog/mobile/MobileUseHtmlGroupBeanPane.java +++ b/designer_base/src/com/fr/design/dialog/mobile/MobileUseHtmlGroupBeanPane.java @@ -23,11 +23,11 @@ public abstract class MobileUseHtmlGroupBeanPane extends BasicBeanPane { private List radioButtons = new ArrayList(); - public MobileUseHtmlGroupBeanPane() { - initComponents(); + public MobileUseHtmlGroupBeanPane(String annotation) { + initComponents(annotation); } - private void initComponents() { + private void initComponents(String annotation) { this.setLayout(FRGUIPaneFactory.createBorderLayout()); this.setBorder(UITitledBorder.createBorderWithTitle(this.title4PopupWindow())); @@ -43,7 +43,7 @@ public abstract class MobileUseHtmlGroupBeanPane extends BasicBeanPane { 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_annotation")), null, null} + new Component[]{new UILabel(annotation), null, null} }; JPanel usePane = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); usePane.setBorder(BorderFactory.createEmptyBorder(10, 13, 10, 10)); diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 268f5d53d..d3dc874dd 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -563,3 +563,4 @@ 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-mobile_form_analysis_annotation=annotation\: You can use this attribute to control the analysis of the form in the APP diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index b0bf16d5d..878814518 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -563,3 +563,4 @@ 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-mobile_form_analysis_annotation=annotation\: You can use this attribute to control the analysis of the form in the APP diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index c8ecd5bef..43131c114 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -567,3 +567,4 @@ 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-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 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index a31f31760..494e6fb30 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -555,3 +555,4 @@ FR-Designer_DS_TableData=\u8CC7\u6599\u96C6 FR-Designer_Parameter-Formula=\u516C\u5F0F FR-Designer_Plugin_Should_Update_Please_Contact_Developer=\u633F\u4EF6\u7248\u672C\u904E\u4F4E\uFF0C\u5B58\u5728API\u4E0D\u76F8\u5BB9\uFF0C\u8ACB\u806F\u7CFB\u958B\u767C\u8005\u965E\u7D1A\u633F\u4EF6 FR-Designer_WidgetOrder=\u63A7\u4EF6\u9806\u5E8F +FR-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 \ No newline at end of file diff --git a/designer_form/src/com/fr/design/form/mobile/FormMobileAttrPane.java b/designer_form/src/com/fr/design/form/mobile/FormMobileAttrPane.java index eb53e8f8c..0f45ce212 100644 --- a/designer_form/src/com/fr/design/form/mobile/FormMobileAttrPane.java +++ b/designer_form/src/com/fr/design/form/mobile/FormMobileAttrPane.java @@ -36,7 +36,7 @@ public class FormMobileAttrPane extends BasicBeanPane{ jPanel2.setLayout(FRGUIPaneFactory.createBorderLayout()); jPanel2.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); this.mobileToolBarPane = new MobileToolBarPane(); - this.mobileUseHtmlGroupPane = new MobileUseHtmlGroupPane(); + this.mobileUseHtmlGroupPane = new MobileUseHtmlGroupPane(Inter.getLocText("FR-mobile_form_analysis_annotation")); //设置一个JPanel包裹mobileToolBarPane这个Panel,让jPanel的高度等于mobileToolBarPane高度加10,再放入this中 jPanel1.setPreferredSize(new Dimension(0, (int)this.mobileToolBarPane.getPreferredSize().getHeight() + PADDINGHEIGHT)); jPanel2.setPreferredSize(new Dimension(0, (int)this.mobileUseHtmlGroupPane.getPreferredSize().getHeight() + PADDINGHEIGHT)); diff --git a/designer_form/src/com/fr/design/form/mobile/MobileUseHtmlGroupPane.java b/designer_form/src/com/fr/design/form/mobile/MobileUseHtmlGroupPane.java index 45550a842..ab400d4a3 100644 --- a/designer_form/src/com/fr/design/form/mobile/MobileUseHtmlGroupPane.java +++ b/designer_form/src/com/fr/design/form/mobile/MobileUseHtmlGroupPane.java @@ -8,6 +8,10 @@ import com.fr.form.main.mobile.FormMobileAttr; * Created by fanglei on 2016/12/28. */ public class MobileUseHtmlGroupPane extends MobileUseHtmlGroupBeanPane { + public MobileUseHtmlGroupPane(String annotation) { + super(annotation); + } + @Override public void populateBean(FormMobileAttr mobileAttr) { if(mobileAttr != null) { From 8abb491cb449c57da947501e3f166e22421f9942 Mon Sep 17 00:00:00 2001 From: fanglei <294531121> Date: Thu, 23 Feb 2017 19:55:25 +0800 Subject: [PATCH 134/343] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=9B=BD=E9=99=85?= =?UTF-8?q?=E5=8C=96=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/dialog/mobile/MobileUseHtmlGroupBeanPane.java | 2 -- designer_base/src/com/fr/design/locale/designer.properties | 3 +++ .../src/com/fr/design/locale/designer_en_US.properties | 3 +++ .../src/com/fr/design/locale/designer_zh_CN.properties | 3 +++ .../src/com/fr/design/locale/designer_zh_TW.properties | 3 +++ .../src/com/fr/design/form/mobile/FormMobileAttrPane.java | 2 +- 6 files changed, 13 insertions(+), 3 deletions(-) diff --git a/designer_base/src/com/fr/design/dialog/mobile/MobileUseHtmlGroupBeanPane.java b/designer_base/src/com/fr/design/dialog/mobile/MobileUseHtmlGroupBeanPane.java index d70ad4c39..06666ee57 100644 --- a/designer_base/src/com/fr/design/dialog/mobile/MobileUseHtmlGroupBeanPane.java +++ b/designer_base/src/com/fr/design/dialog/mobile/MobileUseHtmlGroupBeanPane.java @@ -45,8 +45,6 @@ public abstract class MobileUseHtmlGroupBeanPane extends BasicBeanPane { new Component[]{new UILabel(Inter.getLocText("FR-mobile_analysis_style")), useApp, useHTML5}, new Component[]{new UILabel(annotation), null, null} }; - FR-mobile_form_analysis_annotation=annotation\: You can use this attribute to control the analysis of the form in the APP - JPanel usePane = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); usePane.setBorder(BorderFactory.createEmptyBorder(10, 13, 10, 10)); diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index fa84ee8d9..272f3ca29 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -564,3 +564,6 @@ 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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index e409147ef..8538ec99f 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -565,3 +565,6 @@ 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 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 367884033..33e6a7e6e 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -569,3 +569,6 @@ 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 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 95aba53ff..caeda5b0f 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -557,3 +557,6 @@ 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 diff --git a/designer_form/src/com/fr/design/form/mobile/FormMobileAttrPane.java b/designer_form/src/com/fr/design/form/mobile/FormMobileAttrPane.java index 0f45ce212..6dc1f20ef 100644 --- a/designer_form/src/com/fr/design/form/mobile/FormMobileAttrPane.java +++ b/designer_form/src/com/fr/design/form/mobile/FormMobileAttrPane.java @@ -36,7 +36,7 @@ public class FormMobileAttrPane extends BasicBeanPane{ jPanel2.setLayout(FRGUIPaneFactory.createBorderLayout()); jPanel2.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); this.mobileToolBarPane = new MobileToolBarPane(); - this.mobileUseHtmlGroupPane = new MobileUseHtmlGroupPane(Inter.getLocText("FR-mobile_form_analysis_annotation")); + this.mobileUseHtmlGroupPane = new MobileUseHtmlGroupPane(Inter.getLocText("FR-Designer_Mobile_Form_Analysis_Annotation")); //设置一个JPanel包裹mobileToolBarPane这个Panel,让jPanel的高度等于mobileToolBarPane高度加10,再放入this中 jPanel1.setPreferredSize(new Dimension(0, (int)this.mobileToolBarPane.getPreferredSize().getHeight() + PADDINGHEIGHT)); jPanel2.setPreferredSize(new Dimension(0, (int)this.mobileUseHtmlGroupPane.getPreferredSize().getHeight() + PADDINGHEIGHT)); From ccddb53ac074fa977e95abb488defe8ce0fb3799 Mon Sep 17 00:00:00 2001 From: fanglei <294531121> Date: Thu, 23 Feb 2017 20:11:51 +0800 Subject: [PATCH 135/343] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E5=9C=A8release?= =?UTF-8?q?=E4=B8=AD=E7=9A=84=E5=9B=BD=E9=99=85=E5=8C=96=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/locale/designer.properties | 2 ++ .../src/com/fr/design/locale/designer_en_US.properties | 2 ++ .../src/com/fr/design/locale/designer_zh_CN.properties | 3 +++ .../src/com/fr/design/locale/designer_zh_TW.properties | 2 ++ 4 files changed, 9 insertions(+) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index d73f60f4b..2636ad1d0 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -570,3 +570,5 @@ FR-Designer-Move_Tab_Prev=move to previous FR-Designer_DS_TableData=Data Set FR-Designer_Parameter-Formula=Formula FR-Designer_Plugin_Should_Update_Please_Contact_Developer=Plugin version is too low, and is not compatible with current API. Please contact the developer to update. +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 diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index 1d6fa2d47..1a4342eb1 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -570,3 +570,5 @@ FR-Designer-Move_Tab_Prev=move to previous FR-Designer_DS_TableData=Data Set FR-Designer_Parameter-Formula=Formula FR-Designer_Plugin_Should_Update_Please_Contact_Developer=Plugin version is too low, and is not compatible with current API. Please contact the developer to update. +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 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index c8db01119..1504f45d5 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -574,3 +574,6 @@ FR-Designer-Move_Tab_Prev=\u5F80\u524D\u79FB\u52A8 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 + diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 30bcc8cda..5cbee5475 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -562,3 +562,5 @@ FR-Designer-Move_Tab_Prev=\u5F80\u524D\u79FB\u52D5 FR-Designer_DS_TableData=\u8CC7\u6599\u96C6 FR-Designer_Parameter-Formula=\u516C\u5F0F FR-Designer_Plugin_Should_Update_Please_Contact_Developer=\u633F\u4EF6\u7248\u672C\u904E\u4F4E\uFF0C\u5B58\u5728API\u4E0D\u76F8\u5BB9\uFF0C\u8ACB\u806F\u7CFB\u958B\u767C\u8005\u965E\u7D1A\u633F\u4EF6 +FR-Designer_WidgetOrder=\u63A7\u4EF6\u9806\u5E8F +FR-Designer_Mobile_Form_Analysis_Annotation=\u6CE8\u91CB\uFF1A\u53EF\u4EE5\u901A\u904E\u8A72\u5C6C\u6027\u63A7\u5236\u8868\u55AE\u5728APP\u4E2D\u7684\u89E3\u6790\u65B9\u5F0F From 7e7c6f9983f04d9547e7af2ab3a15aff38c2e0a7 Mon Sep 17 00:00:00 2001 From: fanglei <294531121> Date: Fri, 24 Feb 2017 09:41:02 +0800 Subject: [PATCH 136/343] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=9B=BD=E9=99=85?= =?UTF-8?q?=E5=8C=96=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/report/mobile/ReportMobileAttrPane.java | 2 +- designer_base/src/com/fr/design/locale/designer.properties | 3 ++- .../src/com/fr/design/locale/designer_en_US.properties | 1 + .../src/com/fr/design/locale/designer_zh_CN.properties | 1 + .../src/com/fr/design/locale/designer_zh_TW.properties | 1 + 5 files changed, 6 insertions(+), 2 deletions(-) diff --git a/designer/src/com/fr/design/report/mobile/ReportMobileAttrPane.java b/designer/src/com/fr/design/report/mobile/ReportMobileAttrPane.java index e062b64cc..e91d1d3b8 100644 --- a/designer/src/com/fr/design/report/mobile/ReportMobileAttrPane.java +++ b/designer/src/com/fr/design/report/mobile/ReportMobileAttrPane.java @@ -34,7 +34,7 @@ public class ReportMobileAttrPane extends BasicBeanPane{ appFitBrowserPane.setAppFitPreviewPane(appFitPreviewPane); jPanel.add(appFitBrowserPane); - jPanel.add(htmlGroupPane = new MobileUseHtmlGroupPane(Inter.getLocText("FR-mobile_analysis_annotation"))); + jPanel.add(htmlGroupPane = new MobileUseHtmlGroupPane(Inter.getLocText("FR-Designer_Mobile_Report_Analysis_Annotation"))); jPanel.add(mobileToolBarPane = new MobileToolBarPane()); diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 272f3ca29..cd0440813 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -566,4 +566,5 @@ 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 \ No newline at end of file +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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index 8538ec99f..47afa410c 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -568,3 +568,4 @@ 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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 33e6a7e6e..b85d0a192 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -572,3 +572,4 @@ 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 +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. \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index caeda5b0f..48ee886d3 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -560,3 +560,4 @@ 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 +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 \ No newline at end of file From 0084eb4e7f39a70199aa73b3f46705e6a6c56ad7 Mon Sep 17 00:00:00 2001 From: fanglei <294531121> Date: Fri, 24 Feb 2017 10:18:04 +0800 Subject: [PATCH 137/343] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E5=9B=BD=E9=99=85?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/locale/designer.properties | 1 + .../src/com/fr/design/locale/designer_en_US.properties | 1 + .../src/com/fr/design/locale/designer_zh_CN.properties | 2 +- .../src/com/fr/design/locale/designer_zh_TW.properties | 1 + 4 files changed, 4 insertions(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 2636ad1d0..bb066c133 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -572,3 +572,4 @@ 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 diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index 1a4342eb1..c0f157bfc 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -572,3 +572,4 @@ 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 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 1504f45d5..1674bbb4b 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -576,4 +576,4 @@ 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 - +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. diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 5cbee5475..0c0b4069a 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -564,3 +564,4 @@ FR-Designer_Parameter-Formula=\u516C\u5F0F FR-Designer_Plugin_Should_Update_Please_Contact_Developer=\u633F\u4EF6\u7248\u672C\u904E\u4F4E\uFF0C\u5B58\u5728API\u4E0D\u76F8\u5BB9\uFF0C\u8ACB\u806F\u7CFB\u958B\u767C\u8005\u965E\u7D1A\u633F\u4EF6 FR-Designer_WidgetOrder=\u63A7\u4EF6\u9806\u5E8F FR-Designer_Mobile_Form_Analysis_Annotation=\u6CE8\u91CB\uFF1A\u53EF\u4EE5\u901A\u904E\u8A72\u5C6C\u6027\u63A7\u5236\u8868\u55AE\u5728APP\u4E2D\u7684\u89E3\u6790\u65B9\u5F0F +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 From dd44bda245261b76257b1cf9281ece130dd413ba Mon Sep 17 00:00:00 2001 From: zhouping Date: Fri, 24 Feb 2017 17:01:17 +0800 Subject: [PATCH 138/343] =?UTF-8?q?REPORT-2021=20tab=E5=B8=83=E5=B1=80?= =?UTF-8?q?=E5=AD=97=E4=BD=93=E3=80=81=E5=AD=97=E5=8F=B7=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../creator/cardlayout/XCardSwitchButton.java | 10 +--- .../creator/cardlayout/XWTabFitLayout.java | 51 ++----------------- 2 files changed, 6 insertions(+), 55 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java index 6c55ee045..7f7c2c79a 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java @@ -47,7 +47,6 @@ public class XCardSwitchButton extends XButton { //设置的图片类型 private static final String COLORBACKGROUNDTYPE = "ColorBackground"; private static final String DEFAULTTYPE = "default"; - private static final String DEFAULT_FONT_NAME = "SimSun"; //默认颜色 public static final Color NORMAL_GRAL = new Color(236,236,236); @@ -66,7 +65,6 @@ public class XCardSwitchButton extends XButton { private static final int FONT_SIZE_ADJUST = 2; private static final int SIDE_OFFSET = 57; - private static final int FONT_SIZE = 9; private XWCardLayout cardLayout; private XWCardTagLayout tagLayout; @@ -321,10 +319,7 @@ public class XCardSwitchButton extends XButton { // 标题部分 WidgetTitle title = style.getTitle(); - FRFont font = button.getFont(); - if (font == null) { - font = FRFont.getInstance(DEFAULT_FONT_NAME, 0, FONT_SIZE); - } + FRFont font = title.getFrFont(); FRFont newFont = FRFont.getInstance(font.getName(),font.getStyle(),font.getSize() + FONT_SIZE_ADJUST); UILabel label = this.getContentLabel(); label.setFont(newFont); @@ -403,9 +398,6 @@ public class XCardSwitchButton extends XButton { XCardSwitchButton temp = (XCardSwitchButton) this.tagLayout.getComponent(i); CardSwitchButton cardSwitchButton = (CardSwitchButton) temp.toData(); FRFont frFont = cardSwitchButton.getFont(); - if (frFont == null) { - frFont = FRFont.getInstance(DEFAULT_FONT_NAME, 0, FONT_SIZE); - } UILabel label = temp.getContentLabel(); label.setSize(dimension); label.setFont(frFont.applyResolutionNP(ScreenResolution.getScreenResolution())); diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java index db6070178..902f2b6bb 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java @@ -1,11 +1,5 @@ package com.fr.design.designer.creator.cardlayout; -import java.awt.*; -import java.beans.IntrospectionException; - -import javax.swing.border.Border; - -import com.fr.base.ScreenResolution; import com.fr.base.background.ColorBackground; import com.fr.design.designer.beans.LayoutAdapter; import com.fr.design.designer.beans.adapters.layout.FRTabFitLayoutAdapter; @@ -16,24 +10,24 @@ import com.fr.design.designer.creator.XLayoutContainer; import com.fr.design.designer.creator.XWFitLayout; import com.fr.design.form.util.XCreatorConstants; import com.fr.design.fun.WidgetPropertyUIProvider; -import com.fr.design.gui.ilable.UILabel; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.FormHierarchyTreePane; import com.fr.design.mainframe.widget.editors.ButtonTypeEditor; -import com.fr.design.mainframe.widget.editors.FontEditor; import com.fr.design.mainframe.widget.editors.ImgBackgroundEditor; -import com.fr.design.mainframe.widget.renderer.FontCellRenderer; import com.fr.design.utils.gui.LayoutUtils; import com.fr.form.ui.CardSwitchButton; import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import com.fr.form.ui.container.cardlayout.WCardTagLayout; import com.fr.form.ui.container.cardlayout.WTabFitLayout; import com.fr.general.Background; -import com.fr.general.FRFont; import com.fr.general.Inter; import com.fr.stable.ArrayUtils; import com.fr.stable.core.PropertyChangeAdapter; +import javax.swing.border.Border; +import java.awt.*; +import java.beans.IntrospectionException; + /** * @author focus @@ -45,14 +39,10 @@ public class XWTabFitLayout extends XWFitLayout { // tab布局在拖拽导致的缩放里(含间隔时),如果拖拽宽高大于组件宽高,会导致调整的时候找不到原来的组件 // 这里先将拖拽之前的宽高先做备份 private static final Color NORMAL_GRAL = new Color(236,236,236); - private static final String DEFAULT_FONT_NAME = "SimSun"; - public final static Font DEFAULTFT = new Font("Song_TypeFace",0,12); - public final static FRFont DEFAULT_FRFT = FRFont.getInstance(DEFAULT_FONT_NAME, 0, 9); private Dimension referDim; private Background initialBackground; private Background overBackground; private Background clickBackground; - private FRFont font; private XCardSwitchButton xCardSwitchButton; public Dimension getReferDim() { @@ -87,15 +77,6 @@ public class XWTabFitLayout extends XWFitLayout { this.clickBackground = clickBackground; } - @Override - public FRFont getFont() { - return font; - } - - public void setFont(FRFont font) { - this.font = font; - } - public XCardSwitchButton getxCardSwitchButton() { return xCardSwitchButton; } @@ -162,21 +143,7 @@ public class XWTabFitLayout extends XWFitLayout { cardSwitchButton.setClickBackground(clickBackground); } } - ), - //字体 - creatNonListenerStyle(4).setPropertyChangeListener( - new PropertyChangeAdapter() { - @Override - public void propertyChange() { - font = ((WTabFitLayout) data).getFont(); - CardSwitchButton cardSwitchButton = (CardSwitchButton) xCardSwitchButton.toData(); - cardSwitchButton.setFont(font); - UILabel uiLabel = xCardSwitchButton.getLabel(); - uiLabel.setFont(font.applyResolutionNP(ScreenResolution.getScreenResolution())); - uiLabel.setForeground(font.getForeground()); - xCardSwitchButton.setLabel(uiLabel); - } - }), + ) }; } @@ -208,9 +175,6 @@ public class XWTabFitLayout extends XWFitLayout { XCreatorConstants.PROPERTY_CATEGORY, "Advanced"), new CRPropertyDescriptor("clickBackground", this.data.getClass()).setEditorClass( ImgBackgroundEditor.class).setI18NName(Inter.getLocText("FR-Designer_Background-Click")).putKeyValue( - XCreatorConstants.PROPERTY_CATEGORY, "Advanced"), - new CRPropertyDescriptor("font", this.data.getClass()).setI18NName(Inter.getLocText("FR-Designer_FRFont")) - .setEditorClass(FontEditor.class).setRendererClass(FontCellRenderer.class).putKeyValue( XCreatorConstants.PROPERTY_CATEGORY, "Advanced") }; return crPropertyDescriptors[i]; @@ -235,20 +199,15 @@ public class XWTabFitLayout extends XWFitLayout { if (!isStyle) { this.xCardSwitchButton.setCustomStyle(false); this.xCardSwitchButton.setSelectBackground(bg); - this.xCardSwitchButton.getLabel().setFont(DEFAULTFT); cardSwitchButton.setInitialBackground(null); cardSwitchButton.setClickBackground(null); cardSwitchButton.setOverBackground(null); - cardSwitchButton.setFont(DEFAULT_FRFT); } else { Background initialBackground = cardSwitchButton.getInitialBackground(); bg = initialBackground == null ? bg : initialBackground; this.xCardSwitchButton.setSelectBackground(bg); this.xCardSwitchButton.setCustomStyle(true); cardSwitchButton.setCustomStyle(true); - if (font != null) { - cardSwitchButton.setFont(font); - } if (this.initialBackground != null){ this.xCardSwitchButton.setSelectBackground(this.initialBackground); cardSwitchButton.setInitialBackground(this.initialBackground); From 7d077a4653ac392a379f816db3f45db158b4f4f4 Mon Sep 17 00:00:00 2001 From: zhouping Date: Fri, 24 Feb 2017 17:33:36 +0800 Subject: [PATCH 139/343] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1=20tab?= =?UTF-8?q?=E5=B8=83=E5=B1=80=E5=AD=97=E4=BD=93=E3=80=81=E5=AD=97=E5=8F=B7?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E4=BF=AE=E6=94=B9=EF=BC=8Crelease=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E5=88=B0dev?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../creator/cardlayout/XCardSwitchButton.java | 10 +--- .../creator/cardlayout/XWTabFitLayout.java | 51 ++----------------- 2 files changed, 6 insertions(+), 55 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java index effa8856e..04e678029 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java @@ -48,7 +48,6 @@ public class XCardSwitchButton extends XButton { //设置的图片类型 private static final String COLOR_BACKGROUND_TYPE = "ColorBackground"; private static final String DEFAULT_TYPE = "default"; - private static final String DEFAULT_FONT_NAME = "SimSun"; //默认颜色 public static final Color NORMAL_GRAL = new Color(236,236,236); @@ -67,7 +66,6 @@ public class XCardSwitchButton extends XButton { private static final int FONT_SIZE_ADJUST = 2; private static final int SIDE_OFFSET = 57; - private static final int FONT_SIZE = 9; private XWCardLayout cardLayout; private XWCardTagLayout tagLayout; @@ -345,10 +343,7 @@ public class XCardSwitchButton extends XButton { // 标题部分 WidgetTitle title = style.getTitle(); - FRFont font = button.getFont(); - if (font == null) { - font = FRFont.getInstance(DEFAULT_FONT_NAME, 0, FONT_SIZE); - } + FRFont font = title.getFrFont(); FRFont newFont = FRFont.getInstance(font.getName(),font.getStyle(),font.getSize() + FONT_SIZE_ADJUST); UILabel label = this.getContentLabel(); label.setFont(newFont); @@ -427,9 +422,6 @@ public class XCardSwitchButton extends XButton { XCardSwitchButton temp = (XCardSwitchButton) this.tagLayout.getComponent(i); CardSwitchButton cardSwitchButton = (CardSwitchButton) temp.toData(); FRFont frFont = cardSwitchButton.getFont(); - if (frFont == null) { - frFont = FRFont.getInstance(DEFAULT_FONT_NAME, 0, FONT_SIZE); - } UILabel label = temp.getContentLabel(); label.setSize(dimension); label.setFont(frFont.applyResolutionNP(ScreenResolution.getScreenResolution())); diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java index f4cac3e15..ee74339a9 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java @@ -1,11 +1,5 @@ package com.fr.design.designer.creator.cardlayout; -import java.awt.*; -import java.beans.IntrospectionException; - -import javax.swing.border.Border; - -import com.fr.base.ScreenResolution; import com.fr.base.background.ColorBackground; import com.fr.design.designer.beans.LayoutAdapter; import com.fr.design.designer.beans.adapters.layout.FRTabFitLayoutAdapter; @@ -16,25 +10,25 @@ import com.fr.design.designer.creator.XLayoutContainer; import com.fr.design.designer.creator.XWFitLayout; import com.fr.design.form.util.XCreatorConstants; import com.fr.design.fun.WidgetPropertyUIProvider; -import com.fr.design.gui.ilable.UILabel; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.FormHierarchyTreePane; import com.fr.design.mainframe.widget.editors.ButtonTypeEditor; -import com.fr.design.mainframe.widget.editors.FontEditor; import com.fr.design.mainframe.widget.editors.ImgBackgroundEditor; -import com.fr.design.mainframe.widget.renderer.FontCellRenderer; import com.fr.design.utils.gui.LayoutUtils; import com.fr.form.ui.CardSwitchButton; import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import com.fr.form.ui.container.cardlayout.WCardTagLayout; import com.fr.form.ui.container.cardlayout.WTabFitLayout; import com.fr.general.Background; -import com.fr.general.FRFont; import com.fr.general.FRLogger; import com.fr.general.Inter; import com.fr.stable.ArrayUtils; import com.fr.stable.core.PropertyChangeAdapter; +import javax.swing.border.Border; +import java.awt.*; +import java.beans.IntrospectionException; + /** * @author focus @@ -46,14 +40,10 @@ public class XWTabFitLayout extends XWFitLayout { // tab布局在拖拽导致的缩放里(含间隔时),如果拖拽宽高大于组件宽高,会导致调整的时候找不到原来的组件 // 这里先将拖拽之前的宽高先做备份 private static final Color NORMAL_GRAL = new Color(236,236,236); - private static final String DEFAULT_FONT_NAME = "SimSun"; - public final static Font DEFAULTFT = new Font("Song_TypeFace",0,12); - public final static FRFont DEFAULT_FRFT = FRFont.getInstance(DEFAULT_FONT_NAME, 0, 9); private Dimension referDim; private Background initialBackground; private Background overBackground; private Background clickBackground; - private FRFont font; private XCardSwitchButton xCardSwitchButton; public Dimension getReferDim() { @@ -88,15 +78,6 @@ public class XWTabFitLayout extends XWFitLayout { this.clickBackground = clickBackground; } - @Override - public FRFont getFont() { - return font; - } - - public void setFont(FRFont font) { - this.font = font; - } - public XCardSwitchButton getxCardSwitchButton() { return xCardSwitchButton; } @@ -164,21 +145,7 @@ public class XWTabFitLayout extends XWFitLayout { cardSwitchButton.setClickBackground(clickBackground); } } - ), - //字体 - creatNonListenerStyle(4).setPropertyChangeListener( - new PropertyChangeAdapter() { - @Override - public void propertyChange() { - font = ((WTabFitLayout) data).getFont(); - CardSwitchButton cardSwitchButton = (CardSwitchButton) xCardSwitchButton.toData(); - cardSwitchButton.setFont(font); - UILabel uiLabel = xCardSwitchButton.getLabel(); - uiLabel.setFont(font.applyResolutionNP(ScreenResolution.getScreenResolution())); - uiLabel.setForeground(font.getForeground()); - xCardSwitchButton.setLabel(uiLabel); - } - }), + ) }; } @@ -210,9 +177,6 @@ public class XWTabFitLayout extends XWFitLayout { XCreatorConstants.PROPERTY_CATEGORY, "Advanced"), new CRPropertyDescriptor("clickBackground", this.data.getClass()).setEditorClass( ImgBackgroundEditor.class).setI18NName(Inter.getLocText("FR-Designer_Background-Click")).putKeyValue( - XCreatorConstants.PROPERTY_CATEGORY, "Advanced"), - new CRPropertyDescriptor("font", this.data.getClass()).setI18NName(Inter.getLocText("FR-Designer_FRFont")) - .setEditorClass(FontEditor.class).setRendererClass(FontCellRenderer.class).putKeyValue( XCreatorConstants.PROPERTY_CATEGORY, "Advanced") }; return crPropertyDescriptors[i]; @@ -243,20 +207,15 @@ public class XWTabFitLayout extends XWFitLayout { if (!isStyle) { this.xCardSwitchButton.setCustomStyle(false); this.xCardSwitchButton.setSelectBackground(bg); - this.xCardSwitchButton.getLabel().setFont(DEFAULTFT); cardSwitchButton.setInitialBackground(null); cardSwitchButton.setClickBackground(null); cardSwitchButton.setOverBackground(null); - cardSwitchButton.setFont(DEFAULT_FRFT); } else { Background initialBackground = cardSwitchButton.getInitialBackground(); bg = initialBackground == null ? bg : initialBackground; this.xCardSwitchButton.setSelectBackground(bg); this.xCardSwitchButton.setCustomStyle(true); cardSwitchButton.setCustomStyle(true); - if (font != null) { - cardSwitchButton.setFont(font); - } if (this.initialBackground != null){ this.xCardSwitchButton.setSelectBackground(this.initialBackground); cardSwitchButton.setInitialBackground(this.initialBackground); From d191a6303661583e41e52ebe9cf3b53499292dc8 Mon Sep 17 00:00:00 2001 From: fanglei <294531121> Date: Fri, 24 Feb 2017 17:52:06 +0800 Subject: [PATCH 140/343] =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E5=B0=91?= =?UTF-8?q?=E4=BA=86=E5=8F=A5=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/locale/designer.properties | 2 +- .../src/com/fr/design/locale/designer_en_US.properties | 4 ++-- .../src/com/fr/design/locale/designer_zh_CN.properties | 4 ++-- .../src/com/fr/design/locale/designer_zh_TW.properties | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index cd0440813..423f8c42c 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -567,4 +567,4 @@ 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 \ No newline at end of file +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. \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index 47afa410c..b0acea3ab 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -567,5 +567,5 @@ 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 \ No newline at end of file +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. \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index b85d0a192..bdb97b094 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -571,5 +571,5 @@ 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 -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. \ No newline at end of file +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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 48ee886d3..3acd7487c 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -559,5 +559,5 @@ 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 -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 \ No newline at end of file +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 \ No newline at end of file From 04bba80e9f190fc6e22ad6d94abc8939aed5caa0 Mon Sep 17 00:00:00 2001 From: fanglei <294531121> Date: Fri, 24 Feb 2017 17:53:11 +0800 Subject: [PATCH 141/343] =?UTF-8?q?=E8=A1=A5=E4=B8=8A=E5=8F=A5=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/locale/designer.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 423f8c42c..0a66c326e 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -566,5 +566,5 @@ 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_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. \ No newline at end of file From 804f703e9603798a8157e040c9e5d7a3aeef560a Mon Sep 17 00:00:00 2001 From: fanglei <294531121> Date: Fri, 24 Feb 2017 17:59:11 +0800 Subject: [PATCH 142/343] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E5=8F=A5=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/locale/designer.properties | 4 ++-- .../src/com/fr/design/locale/designer_en_US.properties | 4 ++-- .../src/com/fr/design/locale/designer_zh_CN.properties | 4 ++-- .../src/com/fr/design/locale/designer_zh_TW.properties | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index bb066c133..dbf612afb 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -571,5 +571,5 @@ 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 +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. diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index c0f157bfc..cacd6e086 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -571,5 +571,5 @@ 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 +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. diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 1674bbb4b..c9f113f49 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -575,5 +575,5 @@ 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 -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. +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 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 0c0b4069a..1f23c9a36 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -563,5 +563,5 @@ FR-Designer_DS_TableData=\u8CC7\u6599\u96C6 FR-Designer_Parameter-Formula=\u516C\u5F0F FR-Designer_Plugin_Should_Update_Please_Contact_Developer=\u633F\u4EF6\u7248\u672C\u904E\u4F4E\uFF0C\u5B58\u5728API\u4E0D\u76F8\u5BB9\uFF0C\u8ACB\u806F\u7CFB\u958B\u767C\u8005\u965E\u7D1A\u633F\u4EF6 FR-Designer_WidgetOrder=\u63A7\u4EF6\u9806\u5E8F -FR-Designer_Mobile_Form_Analysis_Annotation=\u6CE8\u91CB\uFF1A\u53EF\u4EE5\u901A\u904E\u8A72\u5C6C\u6027\u63A7\u5236\u8868\u55AE\u5728APP\u4E2D\u7684\u89E3\u6790\u65B9\u5F0F -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 +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 From b388a85042d384f76b0036ddbaa55fc30c3e70ec Mon Sep 17 00:00:00 2001 From: fr_shine Date: Mon, 27 Feb 2017 09:39:29 +0800 Subject: [PATCH 143/343] editlabel not append origin label --- .../mainframe/chart/gui/UIEditLabel.java | 44 ++++++++++++------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/UIEditLabel.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/UIEditLabel.java index ceca4f9dc..c7c3c51c7 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/UIEditLabel.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/UIEditLabel.java @@ -161,35 +161,47 @@ public class UIEditLabel extends JPanel implements UIObserver{ return text; } + protected boolean appendOriginalLabel() { + return true; + } + private void stopEditing(){ isEditingStopped = true; this.removeAll(); - String text =this.showLabel.getText(); - text = StringUtils.cutStringEndWith(text,":"); - text = !ComparatorUtils.equals(text, this.originalLabel) ? - StringUtils.perfectEnd(text, "(" + this.originalLabel + ")"): this.originalLabel; - showLabel.setText(StringUtils.perfectEnd(text,":")); + if(appendOriginalLabel()) { + String text = this.showLabel.getText(); + text = StringUtils.cutStringEndWith(text, ":"); + text = !ComparatorUtils.equals(text, this.originalLabel) ? + StringUtils.perfectEnd(text, "(" + this.originalLabel + ")") : this.originalLabel; + showLabel.setText(StringUtils.perfectEnd(text, ":")); + } this.add(showLabel, BorderLayout.CENTER); this.revalidate(); this.repaint(); } public String getText(){ - String text =this.showLabel.getText(); - text = StringUtils.cutStringEndWith(text,":"); - return StringUtils.cutStringEndWith(text,"("+this.originalLabel+")"); + if(appendOriginalLabel()) { + String text = this.showLabel.getText(); + text = StringUtils.cutStringEndWith(text, ":"); + return StringUtils.cutStringEndWith(text, "(" + this.originalLabel + ")"); + } else { + return this.showLabel.getText(); + } } public void setText(String text){ - if(text == null || StringUtils.isEmpty(text)){ - this.showLabel.setText(this.originalLabel); - return; - } - if(!ComparatorUtils.equals(text,originalLabel)){ - text = StringUtils.cutStringEndWith(text, ":"); - text = StringUtils.perfectEnd(text,"("+originalLabel+")"); + if(appendOriginalLabel()) { + if (text == null || StringUtils.isEmpty(text)) { + this.showLabel.setText(this.originalLabel); + return; + } + if (!ComparatorUtils.equals(text, originalLabel)) { + text = StringUtils.cutStringEndWith(text, ":"); + text = StringUtils.perfectEnd(text, "(" + originalLabel + ")"); + } + text = StringUtils.perfectEnd(text, ":"); } - text = StringUtils.perfectEnd(text,":"); this.showLabel.setText(text); } From d2730c56f7790ce1ea070d739d13e4dfcf9aebc3 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Mon, 27 Feb 2017 10:49:39 +0800 Subject: [PATCH 144/343] =?UTF-8?q?=E6=97=A0=E4=BB=BB=E5=8A=A1=20=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../beans/adapters/layout/FRBodyLayoutAdapter.java | 6 +++--- .../adapters/layout/FRTabFitLayoutAdapter.java | 13 +++++++------ 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRBodyLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRBodyLayoutAdapter.java index 8db19d9fb..b3072667b 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRBodyLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRBodyLayoutAdapter.java @@ -6,6 +6,7 @@ import com.fr.design.designer.creator.XWParameterLayout; import com.fr.design.designer.creator.cardlayout.XWCardMainBorderLayout; import com.fr.design.utils.ComponentUtils; import com.fr.form.ui.PaddingMargin; +import com.fr.form.ui.container.WBorderLayout; import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; import com.fr.general.ComparatorUtils; @@ -639,9 +640,8 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter { * 又通过ComponentUtils.getRelativeBounds()方法获取到了绝对坐标, * 再次计算相对坐标,所以将y值重新变成绝对坐标。 * */ - if (currentCreator.getParent().getParent().getComponent(0) instanceof XWParameterLayout) { - int high = currentCreator.getParent().getParent().getComponent(0).getHeight(); - y = y + WCardMainBorderLayout.TAB_HEIGHT + high; + if (currentCreator.getBackupParent().getLocation().y == WBorderLayout.DEFAULT_SIZE) { + y = y + WCardMainBorderLayout.TAB_HEIGHT + WBorderLayout.DEFAULT_SIZE; } else { y = y + WCardMainBorderLayout.TAB_HEIGHT; } diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRTabFitLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRTabFitLayoutAdapter.java index f0ccc3eb8..63a70e1bb 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRTabFitLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRTabFitLayoutAdapter.java @@ -15,6 +15,7 @@ import com.fr.design.designer.creator.cardlayout.XWTabFitLayout; import com.fr.design.designer.properties.FRTabFitLayoutPropertiesGroupModel; import com.fr.design.utils.ComponentUtils; import com.fr.form.ui.LayoutBorderStyle; +import com.fr.form.ui.container.WBorderLayout; import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; import com.fr.general.ComparatorUtils; @@ -92,16 +93,16 @@ public class FRTabFitLayoutAdapter extends FRFitLayoutAdapter { private int adjustY(int y, XWTabFitLayout tabLayout) { XWCardLayout cardLayout = (XWCardLayout) tabLayout.getBackupParent(); LayoutBorderStyle style = cardLayout.toData().getBorderStyle(); - if (container.getParent().getComponent(0) instanceof XWParameterLayout) { - y = y - container.getParent().getComponent(0).getHeight() - container.getParent().getComponent(0).getY(); + if (container.getLocation().y == WBorderLayout.DEFAULT_SIZE) { + y = y - WBorderLayout.DEFAULT_SIZE; } if (ComparatorUtils.equals(style.getType(), LayoutBorderStyle.TITLE)) { - y -= WCardMainBorderLayout.TAB_HEIGHT; + y = y - WCardMainBorderLayout.TAB_HEIGHT; } return y; } - protected Rectangle getLayoutBound(XWCardMainBorderLayout mainLayout){ - return ComponentUtils.getRelativeBounds(mainLayout); - } + protected Rectangle getLayoutBound(XWCardMainBorderLayout mainLayout) { + return ComponentUtils.getRelativeBounds(mainLayout); + } } \ No newline at end of file From 81e5c2aacf71ce0ee3b6b9349b3017a8e309952b Mon Sep 17 00:00:00 2001 From: yaohwu Date: Mon, 27 Feb 2017 20:21:52 +0800 Subject: [PATCH 145/343] =?UTF-8?q?=E2=80=9CREPORT-2030=E5=88=A0=E9=99=A4d?= =?UTF-8?q?esigner=E5=AF=B9=E8=AF=9D=E6=A1=86=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/extra/exe/ModifyStatusExecutor.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/extra/exe/ModifyStatusExecutor.java b/designer_base/src/com/fr/design/extra/exe/ModifyStatusExecutor.java index c544858dd..a61f35e2d 100644 --- a/designer_base/src/com/fr/design/extra/exe/ModifyStatusExecutor.java +++ b/designer_base/src/com/fr/design/extra/exe/ModifyStatusExecutor.java @@ -42,7 +42,9 @@ public class ModifyStatusExecutor implements Executor { plugin.setActive(active); try { FRContext.getCurrentEnv().writePlugin(plugin); - PluginWebBridge.getHelper().showRestartMessage(plugin.isActive() ? Inter.getLocText("FR-Designer-Plugin_Has_Been_Actived") : Inter.getLocText("FR-Designer-Plugin_Has_Been_Disabled")); + /* + * PluginWebBridge.getHelper().showRestartMessage(plugin.isActive() ? Inter.getLocText("FR-Designer-Plugin_Has_Been_Actived") : Inter.getLocText("FR-Designer-Plugin_Has_Been_Disabled")); + **/ } catch (Exception e) { FRContext.getLogger().error(e.getMessage()); } From af03d197f0d5ff87fbd368ed87432a461d1050c3 Mon Sep 17 00:00:00 2001 From: plough Date: Tue, 28 Feb 2017 15:59:10 +0800 Subject: [PATCH 146/343] =?UTF-8?q?REPORT-1916=20=E5=81=9A=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E7=9A=84=E8=BF=87=E7=A8=8B=E5=92=8C=E8=80=97=E6=97=B6?= =?UTF-8?q?=E6=94=B6=E9=9B=86=3D=E3=80=8B=E5=AE=8C=E6=88=90=E5=9F=BA?= =?UTF-8?q?=E6=9C=AC=E4=BF=A1=E6=81=AF=E7=9A=84=E6=9C=AC=E5=9C=B0=E5=AD=98?= =?UTF-8?q?=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/JPolyWorkBook.java | 1 - .../com/fr/design/mainframe/JWorkBook.java | 64 ++++++++- .../com/fr/design/mainframe/JTemplate.java | 45 +++++- .../templateinfo/TemplateInfoCollector.java | 133 ++++++++++++++++++ .../src/com/fr/design/mainframe/JForm.java | 30 ++++ 5 files changed, 267 insertions(+), 6 deletions(-) create mode 100644 designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java diff --git a/designer/src/com/fr/design/mainframe/JPolyWorkBook.java b/designer/src/com/fr/design/mainframe/JPolyWorkBook.java index bfdb39664..aa5a727e8 100644 --- a/designer/src/com/fr/design/mainframe/JPolyWorkBook.java +++ b/designer/src/com/fr/design/mainframe/JPolyWorkBook.java @@ -24,7 +24,6 @@ public class JPolyWorkBook extends JWorkBook { super(new WorkBook(new PolyWorkSheet()), DEFAULT_NAME); populateReportParameterAttr(); } - /** * 创建sheet名称tab面板 diff --git a/designer/src/com/fr/design/mainframe/JWorkBook.java b/designer/src/com/fr/design/mainframe/JWorkBook.java index f3722c4ac..2494e20a0 100644 --- a/designer/src/com/fr/design/mainframe/JWorkBook.java +++ b/designer/src/com/fr/design/mainframe/JWorkBook.java @@ -3,6 +3,7 @@ package com.fr.design.mainframe; import com.fr.base.BaseUtils; import com.fr.base.FRContext; import com.fr.base.Parameter; +import com.fr.base.parameter.ParameterUI; import com.fr.design.DesignModelAdapter; import com.fr.design.ExtraDesignClassManager; import com.fr.design.actions.AllowAuthorityEditAction; @@ -54,7 +55,10 @@ import com.fr.main.impl.WorkBook; import com.fr.main.parameter.ReportParameterAttr; import com.fr.poly.PolyDesigner; import com.fr.privilege.finegrain.WorkSheetPrivilegeControl; +import com.fr.report.cellcase.CellCase; import com.fr.report.elementcase.TemplateElementCase; +import com.fr.report.poly.PolyWorkSheet; +import com.fr.report.report.Report; import com.fr.report.worksheet.WorkSheet; import com.fr.stable.ArrayUtils; import com.fr.stable.StableUtils; @@ -66,10 +70,7 @@ import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.FileOutputStream; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; /** * JWorkBook used to edit WorkBook. @@ -129,6 +130,61 @@ public class JWorkBook extends JTemplate { return centerPane; } + // 获取模板类型 + public int getReportType() { + return template.isElementCaseBook() ? 0 : 1; + } + + // 获取模板格子数 + public int getCellCount() { + int cellCount = 0; + if (template.isElementCaseBook()) { // 如果是普通报表 + for (int i = 0; i < template.getReportCount(); i++) { + WorkSheet r = (WorkSheet) template.getReport(i); + CellCase cc = r.getBlock().getCellCase(); + for (int j = 0; j < cc.getRowCount(); j++) { + Iterator iter = cc.getRow(j); + while (iter.hasNext()) { + cellCount ++; + iter.next(); + } + } + } + } + return cellCount; + } + // 获取模板悬浮元素个数 + public int getFloatCount() { + int chartCount = 0; + if (template.isElementCaseBook()) { // 如果是普通报表 + for (int i = 0; i < template.getReportCount(); i++) { + WorkSheet r = (WorkSheet) template.getReport(i); + Iterator fiter = r.getBlock().floatIterator(); + while (fiter.hasNext()) { + chartCount ++; + fiter.next(); + } + } + } + return chartCount; + } + // 获取模板聚合块个数 + public int getBlockCount() { + int blockCount = 0; + if (!template.isElementCaseBook()) { // 如果是聚合报表 + for (int i = 0; i < template.getReportCount(); i++) { + PolyWorkSheet r = (PolyWorkSheet) template.getReport(i); + blockCount += r.getBlockCount(); + } + } + return blockCount; + } + // 获取模板控件数 + public int getWidgetCount() { + ParameterUI pui = template.getReportParameterAttr().getParameterUI(); + return pui == null ? 0 : (pui.getAllWidgets().length - 1); + } + /** * 判断sheet权限 * diff --git a/designer_base/src/com/fr/design/mainframe/JTemplate.java b/designer_base/src/com/fr/design/mainframe/JTemplate.java index 58060d91a..3f016812c 100644 --- a/designer_base/src/com/fr/design/mainframe/JTemplate.java +++ b/designer_base/src/com/fr/design/mainframe/JTemplate.java @@ -27,6 +27,7 @@ import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.imenu.UIMenuItem; import com.fr.design.gui.itree.filetree.TemplateFileTree; import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.templateinfo.TemplateInfoCollector; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; import com.fr.design.menu.MenuDef; import com.fr.design.menu.NameSeparator; @@ -72,16 +73,25 @@ public abstract class JTemplate> ex private UndoManager authorityUndoManager; protected U undoState; protected U authorityUndoState = null; + protected T template; // 当前模板 private static short currentIndex = 0;// 此变量用于多次新建模板时,让名字不重复 private DesignModelAdapter designModel; private PreviewProvider previewType; + private long openTime = 0L; // 打开模板的时间点(包括新建模板) + private TemplateInfoCollector tic = TemplateInfoCollector.getInstance(); public JTemplate(T t, String defaultFileName) { - this(t, new MemFILE(newTemplateNameByIndex(defaultFileName))); + this(t, new MemFILE(newTemplateNameByIndex(defaultFileName)), true); + initForCollect(); } public JTemplate(T t, FILE file) { + this(t, file, false); + } + + public JTemplate(T t, FILE file, boolean isNewFile) { super(t); + this.template = t; this.previewType = parserPreviewProvider(t.getPreviewType()); this.editingFILE = file; this.setLayout(FRGUIPaneFactory.createBorderLayout()); @@ -89,8 +99,38 @@ public abstract class JTemplate> ex this.add(createCenterPane(), BorderLayout.CENTER); this.undoState = createUndoState(); designModel = createDesignModel(); + // 如果不是新建模板,并且在收集列表中 + if (!isNewFile && tic.inList(t)) { + openTime = System.currentTimeMillis(); + } } + // 为收集模版信息作准备 + private void initForCollect() { + if (template.getReportletsid() == null) { + template.initReportletsid(); // 为新模板设置 reportletsid 属性 + } + if (openTime == 0) { + openTime = System.currentTimeMillis(); + } + } + private void collectInfo() { // 执行收集操作 + long saveTime = System.currentTimeMillis(); // 保存模板的时间点 + tic.collectInfo(template, this, openTime, saveTime); + openTime = saveTime; // 更新 openTime,准备下一次计算 + } + + // 获取模板类型。0 代表普通报表,1 代表聚合报表,2 代表表单 + public abstract int getReportType(); + // 获取模板格子数 + public abstract int getCellCount(); + // 获取模板悬浮元素个数 + public abstract int getFloatCount(); + // 获取模板聚合块个数 + public abstract int getBlockCount(); + // 获取模板控件数 + public abstract int getWidgetCount(); + public U getUndoState() { return undoState; } @@ -439,6 +479,7 @@ public abstract class JTemplate> ex JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText("FR-Designer_No-Privilege") + "!", Inter.getLocText("FR-Designer_Message"), JOptionPane.WARNING_MESSAGE); return false; } + collectInfo(); return this.saveFile(); } @@ -487,6 +528,8 @@ public abstract class JTemplate> ex boolean result = this.saveFile(); if (result) { DesignerFrameFileDealerPane.getInstance().refresh(); + initForCollect(); // 如果是旧模板另存为新模板,则添加 reportletsid + collectInfo(); } //更换最近打开 DesignerEnvManager.getEnvManager().replaceRecentOpenedFilePath(oldName, this.getFullPathName()); diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java new file mode 100644 index 000000000..52542e14d --- /dev/null +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java @@ -0,0 +1,133 @@ +package com.fr.design.mainframe.templateinfo; + +import com.fr.base.io.IOFile; +import com.fr.design.DesignerEnvManager; +import com.fr.design.mainframe.JTemplate; +import com.fr.general.FRLogger; +import com.fr.general.GeneralUtils; +import com.fr.stable.ProductConstants; +import com.fr.stable.StableUtils; + +import java.io.*; +import java.util.Date; +import java.util.HashMap; + +/** + * 做模板的过程和耗时收集,辅助类 + * Created by plough on 2017/2/21. + */ +public class TemplateInfoCollector implements Serializable { + private static final String FILE_NAME = "tplInfo.ser"; + private static TemplateInfoCollector instance; + private HashMap> templateInfoList; + + @SuppressWarnings("unchecked") + private TemplateInfoCollector() { + // 先尝试从文件读取 + try{ + ObjectInputStream is = new ObjectInputStream(new FileInputStream(getInfoFile())); + templateInfoList = (HashMap>) is.readObject(); + } catch (FileNotFoundException ex) { + // 如果之前没有存储过,则创建新对象 + templateInfoList = new HashMap<>(); + } catch (Exception ex) { + FRLogger.getLogger().error(ex.getMessage(), ex); + } + } + + /** + * 获取缓存文件存放路径 + */ + private static File getInfoFile() { + return new File(StableUtils.pathJoin(ProductConstants.getEnvHome(), FILE_NAME)); + } + + public static TemplateInfoCollector getInstance() { + if (instance == null) { + instance = new TemplateInfoCollector(); + } + return instance; + } + + /** + * 根据模板ID是否在收集列表中,判断是否需要收集当前模板的信息 + */ + public boolean inList(T t) { + return templateInfoList.containsKey(t.getReportletsid()); + } + + // 将包含所有信息的对象保存到文件 + private void saveInfo() { + try { + ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(getInfoFile())); + System.out.println("写入:" + instance.templateInfoList); + os.writeObject(instance.templateInfoList); + os.close(); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + public HashMap getInfoList() { + for (String key : templateInfoList.keySet()) { + System.out.println(templateInfoList.get(key)); + } + return templateInfoList; + } + + /** + * 收集模板信息。如果之前没有记录,则新增;如果已有记录,则更新。 + * 同时将最新数据保存到文件中。 + */ + public void collectInfo(T t, JTemplate jt, long openTime, long saveTime) { + HashMap templateInfo; + + if (inList(t)) { // 已有记录 + templateInfo = templateInfoList.get(t.getReportletsid()); + } else { // 新增 + templateInfo = new HashMap<>(); + + String username = DesignerEnvManager.getEnvManager().getBBSName(); + String uuid = DesignerEnvManager.getEnvManager().getUUID(); + String activitykey = DesignerEnvManager.getEnvManager().getActivationKey(); + String reportletsid = t.getReportletsid(); + String createTime = new Date(openTime).toString(); + int reportType = jt.getReportType(); + String jarTime = GeneralUtils.readBuildNO(); + String version = ProductConstants.VERSION; + templateInfo.put("username", username); + templateInfo.put("uuid", uuid); + templateInfo.put("activitykey", activitykey); + templateInfo.put("reportletsid", reportletsid); + templateInfo.put("create_time", createTime); + templateInfo.put("report_type", reportType); + templateInfo.put("jar_time", jarTime); + templateInfo.put("version", version); + } + + long timeConsume = saveTime - openTime; + // 如果已存有数据,则加上本次编辑时间 + if (templateInfo.get("time_consume") != null) { + timeConsume += (long)templateInfo.get("time_consume"); + } + +// String process; + int cellCount = jt.getCellCount(); + int floatCount = jt.getFloatCount(); + int blockCount = jt.getBlockCount(); + int widgetCount = jt.getWidgetCount(); + templateInfo.put("time_consume", timeConsume); + templateInfo.put("cell_count", cellCount); + templateInfo.put("float_count", floatCount); + templateInfo.put("block_count", blockCount); + templateInfo.put("widget_count", widgetCount); + templateInfoList.put(t.getReportletsid(), templateInfo); + + saveInfo(); // 每次更新之后,都同步到暂存文件中 + } + + public static void main(String[] args) { + TemplateInfoCollector tic = TemplateInfoCollector.getInstance(); + tic.getInfoList(); + } +} diff --git a/designer_form/src/com/fr/design/mainframe/JForm.java b/designer_form/src/com/fr/design/mainframe/JForm.java index 7c912ede0..c19f7f43b 100644 --- a/designer_form/src/com/fr/design/mainframe/JForm.java +++ b/designer_form/src/com/fr/design/mainframe/JForm.java @@ -38,6 +38,7 @@ import com.fr.form.FormElementCaseProvider; import com.fr.form.main.Form; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WBorderLayout; +import com.fr.form.ui.container.WFitLayout; import com.fr.form.ui.container.WLayout; import com.fr.general.ComparatorUtils; import com.fr.general.FRLogger; @@ -88,6 +89,35 @@ public class JForm extends JTemplate implements BaseJForm { return DesignState.JFORM; } + // 获取模板类型 + public int getReportType() { + return 2; + } + + // 获取模板格子数 + public int getCellCount() { + return 0; + } + // 获取模板悬浮元素个数 + public int getFloatCount() { + return 0; + } + // 获取模板聚合块个数 + public int getBlockCount() { + return 0; + } + // 获取模板控件数 + public int getWidgetCount() { + int widgetCount = 0; + for (int i = 0; i < template.getContainer().getWidgetCount(); i++) { + WFitLayout wf = (WFitLayout) template.getContainer().getWidget(i); + widgetCount += wf.getWidgetCount(); + } + int a = 1; + int b = 2; + return widgetCount; + } + @Override protected boolean accept(Object o) { return !(o instanceof FloatElementsProvider); From 0bcbfe576d113b328a13bae3654e72615ecdfdd0 Mon Sep 17 00:00:00 2001 From: zack Date: Tue, 28 Feb 2017 16:57:34 +0800 Subject: [PATCH 147/343] =?UTF-8?q?REPORT-1980=20=E6=8D=A2=E6=88=90listmap?= =?UTF-8?q?=E7=BB=B4=E6=8C=81=E5=8E=9F=E6=9C=89=E9=A1=BA=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/gui/frpane/HyperlinkGroupPane.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/gui/frpane/HyperlinkGroupPane.java b/designer_base/src/com/fr/design/gui/frpane/HyperlinkGroupPane.java index 112fa54dc..99fc5948e 100644 --- a/designer_base/src/com/fr/design/gui/frpane/HyperlinkGroupPane.java +++ b/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.NameJavaScriptGroup; import com.fr.plugin.PluginManager; +import com.fr.stable.ListMap; import com.fr.stable.Nameable; import java.util.ArrayList; @@ -34,7 +35,7 @@ public class HyperlinkGroupPane extends JListControlPane { * @return 返回Nameable按钮数组. */ public NameableCreator[] createNameableCreators() { - Map nameCreators = new TreeMap(); + Map nameCreators = new ListMap<>(); NameableCreator[] creators = DesignModuleFactory.getHyperlinkGroupType().getHyperlinkCreators(); for (NameableCreator creator : creators) { nameCreators.put(creator.menuName(), creator); From 7f7841b8036b2f4d3a7e788ba0143ec33774ecf8 Mon Sep 17 00:00:00 2001 From: mengao Date: Wed, 1 Mar 2017 09:20:48 +0800 Subject: [PATCH 148/343] =?UTF-8?q?=E5=88=86=E4=B8=A4=E8=A1=8C=E6=98=BE?= =?UTF-8?q?=E7=A4=BAcheckbox=E5=92=8C=E8=BE=93=E5=85=A5=E6=A1=86=EF=BC=8C?= =?UTF-8?q?=E9=80=82=E5=BA=94=E5=9B=BD=E9=99=85=E5=8C=96=E6=83=85=E5=86=B5?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/chart/axis/MinMaxValuePane.java | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java index d717d31a8..73235dc31 100644 --- a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java +++ b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java @@ -42,14 +42,14 @@ public class MinMaxValuePane extends JPanel { double p = TableLayout.PREFERRED; double f = TableLayout.FILL; double[] columnSize = { p, f }; - double[] rowSize = { p, p, p, p}; + double[] rowSize = { p, p, p, p, p, p, p, p}; Component[][] components = getPanelComponents(); JPanel panel = TableLayoutHelper.createTableLayoutPane(components ,rowSize,columnSize); this.setLayout(new BorderLayout()); this.add(panel,BorderLayout.CENTER); - for(int i = 0; i < components.length; i++) { + for(int i = 0; i < components.length; i+=2) { ((UICheckBox)components[i][0]).addActionListener(new ActionListener() { @Override @@ -57,18 +57,21 @@ public class MinMaxValuePane extends JPanel { checkBoxUse(); } }); - ChartSwingUtils.addListener((UICheckBox)components[i][0], (UITextField)components[i][1]); + ChartSwingUtils.addListener((UICheckBox)components[i][0], (UITextField)components[i+1][0]); } } - - protected Component[][] getPanelComponents() { - return new Component[][]{ - new Component[]{minCheckBox, minValueField}, - new Component[]{maxCheckBox, maxValueField}, - new Component[]{isCustomMainUnitBox, mainUnitField}, - new Component[]{isCustomSecUnitBox, secUnitField}, - }; - } + protected Component[][] getPanelComponents() { + return new Component[][]{ + new Component[]{minCheckBox}, + new Component[]{minValueField}, + new Component[]{maxCheckBox}, + new Component[]{maxValueField}, + new Component[]{isCustomMainUnitBox}, + new Component[]{mainUnitField}, + new Component[]{isCustomSecUnitBox}, + new Component[]{secUnitField}, + }; + } private void checkBoxUse() { minValueField.setEnabled(minCheckBox.isSelected()); From 015d53588ee29394deeae6335c8fbd4a41b85d6f Mon Sep 17 00:00:00 2001 From: kerry Date: Wed, 1 Mar 2017 11:06:02 +0800 Subject: [PATCH 149/343] =?UTF-8?q?REPORT-1858=20frm=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E9=9A=90=E8=97=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/designer/creator/XChartEditor.java | 7 +++++++ .../src/com/fr/design/designer/creator/XCreator.java | 8 ++++++++ .../com/fr/design/designer/creator/XElementCase.java | 7 +++++++ .../fr/design/designer/creator/XWidgetCreator.java | 11 ++++++++++- .../com/fr/design/gui/xtable/PropertyGroupModel.java | 3 +++ 5 files changed, 35 insertions(+), 1 deletion(-) diff --git a/designer_form/src/com/fr/design/designer/creator/XChartEditor.java b/designer_form/src/com/fr/design/designer/creator/XChartEditor.java index 605532ab1..2ac2c12e3 100644 --- a/designer_form/src/com/fr/design/designer/creator/XChartEditor.java +++ b/designer_form/src/com/fr/design/designer/creator/XChartEditor.java @@ -85,6 +85,13 @@ public class XChartEditor extends XBorderStyleWidgetCreator { return new CRPropertyDescriptor[] { new CRPropertyDescriptor("widgetName", this.data.getClass()).setI18NName(Inter .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( WLayoutBorderStyleEditor.class).setI18NName( Inter.getLocText("Chart-Style_Name")).putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced") diff --git a/designer_form/src/com/fr/design/designer/creator/XCreator.java b/designer_form/src/com/fr/design/designer/creator/XCreator.java index ba2a56ce0..4788bc8f3 100644 --- a/designer_form/src/com/fr/design/designer/creator/XCreator.java +++ b/designer_form/src/com/fr/design/designer/creator/XCreator.java @@ -379,6 +379,14 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo toData().setWidgetName(name); } + /** + * 重置组件的可见性 + * @param visible 可见性 + */ + public void resetVisible(boolean visible){ + toData().setVisible(visible); + } + /** * 返回编辑的子组件,scale为其内部组件 * @return 组件 diff --git a/designer_form/src/com/fr/design/designer/creator/XElementCase.java b/designer_form/src/com/fr/design/designer/creator/XElementCase.java index a932548cc..7b6dac0e8 100644 --- a/designer_form/src/com/fr/design/designer/creator/XElementCase.java +++ b/designer_form/src/com/fr/design/designer/creator/XElementCase.java @@ -83,6 +83,13 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme CRPropertyDescriptor[] propertyTableEditor = new CRPropertyDescriptor[]{ new CRPropertyDescriptor("widgetName", this.data.getClass()) .setI18NName(Inter.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( WLayoutBorderStyleEditor.class).setI18NName( Inter.getLocText("FR-Designer-Widget_Style")).putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced") diff --git a/designer_form/src/com/fr/design/designer/creator/XWidgetCreator.java b/designer_form/src/com/fr/design/designer/creator/XWidgetCreator.java index 3832f35d2..2c1be0eab 100644 --- a/designer_form/src/com/fr/design/designer/creator/XWidgetCreator.java +++ b/designer_form/src/com/fr/design/designer/creator/XWidgetCreator.java @@ -145,7 +145,16 @@ public abstract class XWidgetCreator extends XCreator { this.draw(); } } - + + /** + * 渲染Painter + */ + public void paint(Graphics g) { + //不可见时,按钮.4f透明 + AlphaComposite composite = this.data.isVisible() ? (AlphaComposite)((Graphics2D)g).getComposite() : AlphaComposite.getInstance(AlphaComposite.SRC_OVER,HALF_OPACITY); + ((Graphics2D)g).setComposite(composite); + super.paint(g); + } /** * 重命名 * diff --git a/designer_form/src/com/fr/design/gui/xtable/PropertyGroupModel.java b/designer_form/src/com/fr/design/gui/xtable/PropertyGroupModel.java index 8e8cadad1..bb0f0cd3a 100644 --- a/designer_form/src/com/fr/design/gui/xtable/PropertyGroupModel.java +++ b/designer_form/src/com/fr/design/gui/xtable/PropertyGroupModel.java @@ -53,6 +53,9 @@ public class PropertyGroupModel extends AbstractPropertyGroupModel { if(ComparatorUtils.equals(FormConstants.NAME, properties[row].getName())){ creator.resetCreatorName(value.toString()); } + if(ComparatorUtils.equals("visible", properties[row].getName())){ + creator.resetVisible((boolean) value); + } properties[row].firePropertyChanged(); return true; } catch (Exception e) { From 505dd7e910bbce249e9886b229d278bc20c58cb9 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Wed, 1 Mar 2017 17:03:59 +0800 Subject: [PATCH 150/343] =?UTF-8?q?REPORT-1957=EF=BC=8C=E5=B9=B6=E4=B8=94?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8F=82=E6=95=B0=E8=AF=B4=E6=98=8E=E8=B5=84?= =?UTF-8?q?=E6=BA=90=E6=96=87=E4=BB=B6=E7=9A=84=E7=BC=96=E7=A0=81=E6=96=B9?= =?UTF-8?q?=E5=BC=8F=E4=B8=BAutf-8,=E5=8A=A0=E8=BD=BD=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E6=97=B6=E4=BD=BF=E7=94=A8utf-8=E7=BC=96=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/formula/FormulaPane.java | 221 +++++++++--------- .../design/insert/formula/variable/cn/$$$.txt | 2 +- .../formula/variable/cn/$$page_number.txt | 2 +- .../variable/cn/$$totalPage_number.txt | 2 +- .../formula/variable/cn/$fr_authority.txt | 2 +- .../formula/variable/cn/$fr_username.txt | 2 +- .../formula/variable/cn/$fr_userposition.txt | 4 +- .../insert/formula/variable/cn/NOFILTER.txt | 2 +- .../insert/formula/variable/cn/NULL.txt | 2 +- .../formula/variable/cn/contextPath.txt | 4 +- .../insert/formula/variable/cn/curReport.txt | 2 +- .../formula/variable/cn/formletName.txt | 4 +- .../formula/variable/cn/fr_submitinfo.txt | 2 +- .../insert/formula/variable/cn/reportName.txt | 4 +- .../insert/formula/variable/cn/serverName.txt | 4 +- .../insert/formula/variable/cn/serverPort.txt | 2 +- .../formula/variable/cn/serverSchema.txt | 4 +- .../insert/formula/variable/cn/serverURL.txt | 4 +- .../insert/formula/variable/cn/servletURL.txt | 3 +- .../insert/formula/variable/cn/sessionID.txt | 5 +- .../design/insert/formula/variable/en/$$$.txt | 2 +- .../formula/variable/en/$fr_authority.txt | 2 +- .../formula/variable/en/$fr_username.txt | 2 +- .../formula/variable/en/$fr_userposition.txt | 2 +- .../insert/formula/variable/en/NOFILTER.txt | 2 +- .../formula/variable/en/contextPath.txt | 2 +- .../formula/variable/en/formletName.txt | 4 +- .../formula/variable/en/fr_submitinfo.txt | 2 +- .../insert/formula/variable/en/reportName.txt | 4 +- .../insert/formula/variable/en/serverName.txt | 4 +- .../formula/variable/en/serverSchema.txt | 4 +- .../insert/formula/variable/en/serverURL.txt | 4 +- .../insert/formula/variable/en/servletURL.txt | 3 +- 33 files changed, 146 insertions(+), 168 deletions(-) diff --git a/designer_base/src/com/fr/design/formula/FormulaPane.java b/designer_base/src/com/fr/design/formula/FormulaPane.java index 9aec1972a..9ef2e4b2b 100644 --- a/designer_base/src/com/fr/design/formula/FormulaPane.java +++ b/designer_base/src/com/fr/design/formula/FormulaPane.java @@ -22,6 +22,7 @@ import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.Inter; import com.fr.parser.FRLexer; import com.fr.parser.FRParser; +import com.fr.stable.EncodeConstants; import com.fr.stable.ProductConstants; import com.fr.stable.StringUtils; import com.fr.stable.script.Expression; @@ -38,12 +39,14 @@ import java.awt.event.*; import java.io.*; import java.util.Locale; import java.util.Set; + /** * 公式编辑面板 + * * @editor zhou * @since 2012-3-29下午1:50:53 */ -public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ +public class FormulaPane extends BasicPane implements KeyListener, UIFormula { protected VariableTreeAndDescriptionArea variableTreeAndDescriptionArea; protected RSyntaxTextArea formulaTextArea; @@ -62,17 +65,17 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ public FormulaPane() { initComponents(); } - - private void initFormulaTextAreaKeyListener(){ - formulaTextArea.addKeyListener(this); - formulaTextArea.addKeyListener(new KeyAdapter() { + + private void initFormulaTextAreaKeyListener() { + formulaTextArea.addKeyListener(this); + formulaTextArea.addKeyListener(new KeyAdapter() { public void keyReleased(KeyEvent e) { formulaTextArea.setForeground(Color.black); String text = formulaTextArea.getText(); // 判断在中文输入状态是否还包含提示符 要删掉 //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)); insertPosition = 0; formulaTextArea.setText(text); @@ -80,9 +83,9 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ } }); } - - private void initFormulaTextAreaMouseListener(){ - formulaTextArea.addMouseListener(new MouseAdapter() { + + private void initFormulaTextAreaMouseListener() { + formulaTextArea.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { insertPosition = formulaTextArea.getCaretPosition(); @@ -106,22 +109,24 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ } }); } - - private void initFormulaTextArea(){ - formulaTextArea = new RSyntaxTextArea(); + + private void initFormulaTextArea() { + formulaTextArea = new RSyntaxTextArea(); configFormulaArea(); initFormulaTextAreaKeyListener(); initFormulaTextAreaMouseListener(); } - - private void initKeyWordTextFieldKeyListener(){ - keyWordTextField.addKeyListener(new KeyListener() { + + private void initKeyWordTextFieldKeyListener() { + keyWordTextField.addKeyListener(new KeyListener() { @Override public void keyTyped(KeyEvent e) { } + @Override public void keyReleased(KeyEvent e) { } + @Override public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ENTER) { @@ -133,9 +138,9 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ } }); } - - private void initTipsPane(){ - // tipsPane + + private void initTipsPane() { + // tipsPane JPanel tipsPane = new JPanel(new BorderLayout(4, 4)); this.add(tipsPane, BorderLayout.EAST); @@ -161,7 +166,7 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ } }); } - + protected void initComponents() { this.setLayout(new BorderLayout(4, 4)); // text @@ -172,7 +177,7 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ + " "); formulaLabel.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4)); initFormulaTextArea(); - + UIScrollPane formulaTextAreaScrollPane = new UIScrollPane(formulaTextArea); formulaTextAreaScrollPane.setBorder(null); textPane.add(formulaLabel, BorderLayout.NORTH); @@ -259,6 +264,7 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ this.formulaTextArea.setText(StringUtils.EMPTY); } } + //hugh:为啥会是10呢?搞不懂~~~ private static final int KEY_10 = 10; //上下左右 @@ -266,6 +272,7 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ private static final int KEY_38 = 38; private static final int KEY_39 = 39; private static final int KEY_40 = 40; + @Override public void keyReleased(KeyEvent e) { int key = e.getKeyCode(); @@ -452,10 +459,10 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ formulaTextArea.requestFocus(); insertPosition = formulaTextArea.getCaretPosition(); } - + @Override protected String title4PopupWindow() { - return Inter.getLocText("FormulaD-Formula_Definition"); + return Inter.getLocText("FormulaD-Formula_Definition"); } /** @@ -561,9 +568,9 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ public VariableTreeAndDescriptionArea() { this.initComponents(); } - - private void initFunctionTypeList(JPanel functionPane){ - functionTypeList = new QuickList(functionTypeListModel); + + private void initFunctionTypeList(JPanel functionPane) { + functionTypeList = new QuickList(functionTypeListModel); UIScrollPane functionTypeScrollPane = new UIScrollPane(functionTypeList); functionTypeScrollPane.setBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, UIConstants.ARC)); functionTypeScrollPane.setPreferredSize(new Dimension(140, 200)); @@ -572,23 +579,23 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ initGroupTypeModel(); initTypeListSelectionListener(); } - - private void initTypeListCellRenderer(){ - functionTypeList.setCellRenderer( - new DefaultListCellRenderer() { - @Override - public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { - super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); - if (value instanceof FunctionGroup) { - this.setText(((FunctionGroup) value).getGroupName()); - } - return this; - } - }); + + private void initTypeListCellRenderer() { + functionTypeList.setCellRenderer( + new DefaultListCellRenderer() { + @Override + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { + super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); + if (value instanceof FunctionGroup) { + this.setText(((FunctionGroup) value).getGroupName()); + } + return this; + } + }); } - - private void initTypeListSelectionListener(){ - functionTypeList.addListSelectionListener(new ListSelectionListener() { + + private void initTypeListSelectionListener() { + functionTypeList.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent evt) { Object selectedValue = ((JList) evt.getSource()).getSelectedValue(); if (!(selectedValue instanceof FunctionGroup)) { @@ -607,22 +614,22 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ } }); } - - private void initGroupTypeModel(){ - functionTypeListModel.addElement(FunctionConstants.COMMON); - for (int i = 0; i < FunctionConstants.EMBFUNCTIONS.length; i++) { - functionTypeListModel.addElement(FunctionConstants.EMBFUNCTIONS[i]); - } - functionTypeListModel.addElement(FunctionConstants.ALL); - functionTypeListModel.addElement(FunctionConstants.CUSTOM); - functionTypeListModel.addElement(FunctionConstants.PLUGIN); - - //hugh: 从函数分组插件中添加分组 - FunctionConstants.addFunctionGroupFromPlugins(functionTypeListModel); - } - - private void initFunctionNameListCellRenderer(){ - functionNameList.setCellRenderer(new DefaultListCellRenderer() { + + private void initGroupTypeModel() { + functionTypeListModel.addElement(FunctionConstants.COMMON); + for (int i = 0; i < FunctionConstants.EMBFUNCTIONS.length; i++) { + functionTypeListModel.addElement(FunctionConstants.EMBFUNCTIONS[i]); + } + functionTypeListModel.addElement(FunctionConstants.ALL); + functionTypeListModel.addElement(FunctionConstants.CUSTOM); + functionTypeListModel.addElement(FunctionConstants.PLUGIN); + + //hugh: 从函数分组插件中添加分组 + FunctionConstants.addFunctionGroupFromPlugins(functionTypeListModel); + } + + private void initFunctionNameListCellRenderer() { + functionNameList.setCellRenderer(new DefaultListCellRenderer() { @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { @@ -633,10 +640,10 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ return this; } }); - } - - private void initFunctionNameListSelectionListener(){ - functionNameList.addListSelectionListener(new ListSelectionListener() { + } + + private void initFunctionNameListSelectionListener() { + functionNameList.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent evt) { Object selectedValue = functionNameList.getSelectedValue(); @@ -651,9 +658,9 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ } }); } - - private void initFunctionNameListMouseListener(){ - functionNameList.addMouseListener(new MouseAdapter() { + + private void initFunctionNameListMouseListener() { + functionNameList.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent evt) { if (evt.getClickCount() >= 2) { Object selectedValue = functionNameList.getSelectedValue(); @@ -675,9 +682,9 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ } }); } - - private void initFunctionNameList(JPanel functionPane){ - functionNameList = new JList(new DefaultListModel()); + + private void initFunctionNameList(JPanel functionPane) { + functionNameList = new JList(new DefaultListModel()); UIScrollPane functionNameScrollPane = new UIScrollPane(functionNameList); functionNameScrollPane.setPreferredSize(new Dimension(140, 200)); functionPane.add( @@ -688,9 +695,9 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ initFunctionNameListSelectionListener(); initFunctionNameListMouseListener(); } - - private void initDescriptionTextArea(){ - // Description + + private void initDescriptionTextArea() { + // Description descriptionTextArea = new UITextArea(16, 27); UIScrollPane desScrollPane = new UIScrollPane(descriptionTextArea); @@ -710,16 +717,16 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ }); } - - private StringBuilder getText(TextUserObject selectedValue,String path) throws IOException{ - Reader desReader; - StringBuilder desBuf = new StringBuilder(); - InputStream desInputStream = BaseUtils.readResource(path+ ((TextUserObject) selectedValue).displayText+".txt"); + + private StringBuilder getText(TextUserObject selectedValue, String path) throws IOException { + 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); + desReader = new InputStreamReader(desInputStream, EncodeConstants.ENCODING_UTF_8); } BufferedReader reader = new BufferedReader(desReader); String lineText; @@ -732,12 +739,12 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ reader.close(); desReader.close(); return desBuf; - } - - private void initVariablesTreeSelectionListener(){ - variablesTree.addTreeSelectionListener(new TreeSelectionListener() { - public void valueChanged(TreeSelectionEvent e) { - Object selectedValue = ((DefaultMutableTreeNode) variablesTree.getLastSelectedPathComponent()).getUserObject(); + } + + private void initVariablesTreeSelectionListener() { + variablesTree.addTreeSelectionListener(new TreeSelectionListener() { + public void valueChanged(TreeSelectionEvent e) { + Object selectedValue = ((DefaultMutableTreeNode) variablesTree.getLastSelectedPathComponent()).getUserObject(); if (selectedValue == null) { return; } @@ -751,7 +758,7 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ path = "/com/fr/design/insert/formula/variable/en/"; } if (selectedValue instanceof TextUserObject) { - desBuf = getText((TextUserObject)selectedValue,path); + desBuf = getText((TextUserObject) selectedValue, path); } } catch (IOException exp) { FRContext.getLogger().error(exp.getMessage(), exp); @@ -761,9 +768,9 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ } }); } - - private void initVariablesTree(){ - // vairable. + + private void initVariablesTree() { + // vairable. variablesTree = new JTree(); UIScrollPane variablesTreePane = new UIScrollPane(variablesTree); variablesTreePane.setBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, UIConstants.ARC)); @@ -773,12 +780,12 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ variablesTree.setShowsRootHandles(true); variablesTree.addMouseListener(applyTextMouseListener); variablesTree.setCellRenderer(applyTreeCellRenderer); - + initDescriptionTextArea(); - + initVariablesTreeSelectionListener(); } - + private void initComponents() { this.setLayout(new BorderLayout(4, 4)); // Function @@ -810,10 +817,10 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ private void showPopupPane() { BasicPane basicPane = new BasicPane() { - @Override - protected String title4PopupWindow() { - return Inter.getLocText("FR-Designer_FormulaPane_Function_Detail"); - } + @Override + protected String title4PopupWindow() { + return Inter.getLocText("FR-Designer_FormulaPane_Function_Detail"); + } }; basicPane.setLayout(FRGUIPaneFactory.createBorderLayout()); UITextArea desArea = new UITextArea(); @@ -889,7 +896,7 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ return this; } }; - + public void populate(VariableResolver variableResolver) { // varibale tree. DefaultTreeModel variableModel = (DefaultTreeModel) variablesTree.getModel(); @@ -902,28 +909,28 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ DefaultMutableTreeNode bindCellNode = new DefaultMutableTreeNode(new TextUserObject("$$$")); rootNode.add(bindCellNode); } - + rootNode.add(new TextFolderUserObject(Inter.getLocText("FormulaD-Data_Fields"), - BaseUtils.readIcon("/com/fr/design/images/dialog/table.png"), + BaseUtils.readIcon("/com/fr/design/images/dialog/table.png"), variableResolver.resolveColumnNames()).createMutableTreeNode()); - + // 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()); - + 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()); - + BaseUtils.readIcon("/com/fr/design/images/dialog/parameter.gif"), + variableResolver.resolveTableDataParameterVariables()).createMutableTreeNode()); + rootNode.add(new TextFolderUserObject(Inter.getLocText("ParameterD-Report_Parameter"), - BaseUtils.readIcon("/com/fr/design/images/m_report/p.gif"), - variableResolver.resolveReportParameterVariables()).createMutableTreeNode()); - + BaseUtils.readIcon("/com/fr/design/images/m_report/p.gif"), + variableResolver.resolveReportParameterVariables()).createMutableTreeNode()); + rootNode.add(new TextFolderUserObject(Inter.getLocText("M_Server-Global_Parameters"), BaseUtils.readIcon("/com/fr/design/images/dialog/parameter.gif"), variableResolver.resolveGlobalParameterVariables()).createMutableTreeNode()); - + variableModel.reload(); // Expand for (int row = 0; row < this.variablesTree.getRowCount(); row++) { diff --git a/designer_base/src/com/fr/design/insert/formula/variable/cn/$$$.txt b/designer_base/src/com/fr/design/insert/formula/variable/cn/$$$.txt index ea95070da..48d884dc4 100644 --- a/designer_base/src/com/fr/design/insert/formula/variable/cn/$$$.txt +++ b/designer_base/src/com/fr/design/insert/formula/variable/cn/$$$.txt @@ -1 +1 @@ -ǰֵ \ No newline at end of file +当前值 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/insert/formula/variable/cn/$$page_number.txt b/designer_base/src/com/fr/design/insert/formula/variable/cn/$$page_number.txt index 322c867f4..0e45e0871 100644 --- a/designer_base/src/com/fr/design/insert/formula/variable/cn/$$page_number.txt +++ b/designer_base/src/com/fr/design/insert/formula/variable/cn/$$page_number.txt @@ -1 +1 @@ -ǰҳ +当前的页数。 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/insert/formula/variable/cn/$$totalPage_number.txt b/designer_base/src/com/fr/design/insert/formula/variable/cn/$$totalPage_number.txt index a6a8244be..11c6fb59b 100644 --- a/designer_base/src/com/fr/design/insert/formula/variable/cn/$$totalPage_number.txt +++ b/designer_base/src/com/fr/design/insert/formula/variable/cn/$$totalPage_number.txt @@ -1 +1 @@ -ҳ \ No newline at end of file +总页数。 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/insert/formula/variable/cn/$fr_authority.txt b/designer_base/src/com/fr/design/insert/formula/variable/cn/$fr_authority.txt index eadf192eb..abafe8eff 100644 --- a/designer_base/src/com/fr/design/insert/formula/variable/cn/$fr_authority.txt +++ b/designer_base/src/com/fr/design/insert/formula/variable/cn/$fr_authority.txt @@ -1 +1 @@ -ʹȨʱɫIJ \ No newline at end of file +使用权限时保存角色的参数 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/insert/formula/variable/cn/$fr_username.txt b/designer_base/src/com/fr/design/insert/formula/variable/cn/$fr_username.txt index 586198ed0..9dadd3883 100644 --- a/designer_base/src/com/fr/design/insert/formula/variable/cn/$fr_username.txt +++ b/designer_base/src/com/fr/design/insert/formula/variable/cn/$fr_username.txt @@ -1 +1 @@ -ʹȨʱûIJ \ No newline at end of file +使用权限时保存用户名的参数 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/insert/formula/variable/cn/$fr_userposition.txt b/designer_base/src/com/fr/design/insert/formula/variable/cn/$fr_userposition.txt index 07b3122ab..73cb5a6d2 100644 --- a/designer_base/src/com/fr/design/insert/formula/variable/cn/$fr_userposition.txt +++ b/designer_base/src/com/fr/design/insert/formula/variable/cn/$fr_userposition.txt @@ -1,3 +1 @@ -ʹȨʱ,$fr_userpositionDzŽɫ -ʽ磺{"departments":"","jobTitle":"۾"} -ŽɫԲźְɵ顣 \ No newline at end of file +使用权限时,$fr_userposition就是部门角色,格式如:{"jobTitle":"销售经理","departments":"销售"},部门角色是以部门和职务组成的数组。 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/insert/formula/variable/cn/NOFILTER.txt b/designer_base/src/com/fr/design/insert/formula/variable/cn/NOFILTER.txt index ccda7162b..13caca6bc 100644 --- a/designer_base/src/com/fr/design/insert/formula/variable/cn/NOFILTER.txt +++ b/designer_base/src/com/fr/design/insert/formula/variable/cn/NOFILTER.txt @@ -1 +1 @@ -NOFILTERһֵȽ϶ΪtrueIJ +NOFILTER是一个与任意值比较都为true的参数。 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/insert/formula/variable/cn/NULL.txt b/designer_base/src/com/fr/design/insert/formula/variable/cn/NULL.txt index 90e31a9b2..40ea67ca4 100644 --- a/designer_base/src/com/fr/design/insert/formula/variable/cn/NULL.txt +++ b/designer_base/src/com/fr/design/insert/formula/variable/cn/NULL.txt @@ -1 +1 @@ -ֵIJ \ No newline at end of file +空值的参数。 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/insert/formula/variable/cn/contextPath.txt b/designer_base/src/com/fr/design/insert/formula/variable/cn/contextPath.txt index 0257c7e84..2faf5629e 100644 --- a/designer_base/src/com/fr/design/insert/formula/variable/cn/contextPath.txt +++ b/designer_base/src/com/fr/design/insert/formula/variable/cn/contextPath.txt @@ -1,3 +1 @@ -contextPathָ·ķĿ¼. -ʣhttp://localhost:8080/WebReport/ReportServer?reportlet=WorkBook1.cpt -contextPath/WebReport \ No newline at end of file +contextPath是指绝对路径的服务器别名,即虚拟目录.假如访问:http://localhost:8080/WebReport/ReportServer?reportlet=WorkBook1.cpt,contextPath是/WebReport \ No newline at end of file diff --git a/designer_base/src/com/fr/design/insert/formula/variable/cn/curReport.txt b/designer_base/src/com/fr/design/insert/formula/variable/cn/curReport.txt index cc01b6726..4a0b82a92 100644 --- a/designer_base/src/com/fr/design/insert/formula/variable/cn/curReport.txt +++ b/designer_base/src/com/fr/design/insert/formula/variable/cn/curReport.txt @@ -1 +1 @@ -ǰ \ No newline at end of file +当前报表。 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/insert/formula/variable/cn/formletName.txt b/designer_base/src/com/fr/design/insert/formula/variable/cn/formletName.txt index 95c5feec3..c9921354a 100644 --- a/designer_base/src/com/fr/design/insert/formula/variable/cn/formletName.txt +++ b/designer_base/src/com/fr/design/insert/formula/variable/cn/formletName.txt @@ -1,3 +1 @@ - -ʣhttp://localhost:8080/WebReport/ReportServer?formlet=Form1.frm -formNameForm1.frm \ No newline at end of file +表单名字假如访问:http://localhost:8080/WebReport/ReportServer?formlet=Form1.frm,formName就是Form1.frm \ No newline at end of file diff --git a/designer_base/src/com/fr/design/insert/formula/variable/cn/fr_submitinfo.txt b/designer_base/src/com/fr/design/insert/formula/variable/cn/fr_submitinfo.txt index 4a1e38b99..41212da23 100644 --- a/designer_base/src/com/fr/design/insert/formula/variable/cn/fr_submitinfo.txt +++ b/designer_base/src/com/fr/design/insert/formula/variable/cn/fr_submitinfo.txt @@ -1 +1 @@ -ύ¼ķϢ fr_submitinfo.success¼ɹ fr_submitinfo.failinfo򵥼¼Ϣ \ No newline at end of file +提交入库事件的返回信息。fr_submitinfo.success记录成功与否fr_submitinfo.failinfo简单记录出错信息 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/insert/formula/variable/cn/reportName.txt b/designer_base/src/com/fr/design/insert/formula/variable/cn/reportName.txt index 982b43b72..d2bb66ad3 100644 --- a/designer_base/src/com/fr/design/insert/formula/variable/cn/reportName.txt +++ b/designer_base/src/com/fr/design/insert/formula/variable/cn/reportName.txt @@ -1,3 +1 @@ - -ʣhttp://localhost:8080/WebReport/ReportServer?reportlet=WorkBook1.cpt -reportNameWorkBook1.cpt \ No newline at end of file +报表名字假如访问:http://localhost:8080/WebReport/ReportServer?reportlet=WorkBook1.cpt,reportName就是WorkBook1.cpt \ No newline at end of file diff --git a/designer_base/src/com/fr/design/insert/formula/variable/cn/serverName.txt b/designer_base/src/com/fr/design/insert/formula/variable/cn/serverName.txt index 89eb2f98d..d6fca7188 100644 --- a/designer_base/src/com/fr/design/insert/formula/variable/cn/serverName.txt +++ b/designer_base/src/com/fr/design/insert/formula/variable/cn/serverName.txt @@ -1,3 +1 @@ -serverNameַָ. -ʣhttp://localhost:8080/WebReport/ReportServer?reportlet=WorkBook1.cpt -serverNameָǣlocalhostʻӵIP \ No newline at end of file +serverName,是指服务器地址或名称.假如访问:http://localhost:8080/WebReport/ReportServer?reportlet=WorkBook1.cpt,serverName指的是:localhost,即访问机子的IP \ No newline at end of file diff --git a/designer_base/src/com/fr/design/insert/formula/variable/cn/serverPort.txt b/designer_base/src/com/fr/design/insert/formula/variable/cn/serverPort.txt index 8a0dd40cf..24552e730 100644 --- a/designer_base/src/com/fr/design/insert/formula/variable/cn/serverPort.txt +++ b/designer_base/src/com/fr/design/insert/formula/variable/cn/serverPort.txt @@ -1 +1 @@ -serverPortָǷʵĶ˿ \ No newline at end of file +serverPort指的是访问的端口 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/insert/formula/variable/cn/serverSchema.txt b/designer_base/src/com/fr/design/insert/formula/variable/cn/serverSchema.txt index 02cecc67e..15bcc7e9f 100644 --- a/designer_base/src/com/fr/design/insert/formula/variable/cn/serverSchema.txt +++ b/designer_base/src/com/fr/design/insert/formula/variable/cn/serverSchema.txt @@ -1,3 +1 @@ -serverSchemaָЭ. -ʣhttp://localhost:8080/WebReport/ReportServer?reportlet=WorkBook1.cpt -serverSchemaָǣhttp \ No newline at end of file +serverSchema,是指协议名称.假如访问:http://localhost:8080/WebReport/ReportServer?reportlet=WorkBook1.cpt,serverSchema指的是:http \ No newline at end of file diff --git a/designer_base/src/com/fr/design/insert/formula/variable/cn/serverURL.txt b/designer_base/src/com/fr/design/insert/formula/variable/cn/serverURL.txt index 5fd3852e9..02c7db49f 100644 --- a/designer_base/src/com/fr/design/insert/formula/variable/cn/serverURL.txt +++ b/designer_base/src/com/fr/design/insert/formula/variable/cn/serverURL.txt @@ -1,3 +1 @@ -serverURLָʷURL -ʣhttp://localhost:8080/WebReport/ReportServer?reportlet=WorkBook1.cpt -serverURLhttp://localhost:8080 +serverURL是指访问服务的URL假如访问:http://localhost:8080/WebReport/ReportServer?reportlet=WorkBook1.cpt,serverURL就是http://localhost:8080 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/insert/formula/variable/cn/servletURL.txt b/designer_base/src/com/fr/design/insert/formula/variable/cn/servletURL.txt index 73a1c0fff..2a1e5dfd4 100644 --- a/designer_base/src/com/fr/design/insert/formula/variable/cn/servletURL.txt +++ b/designer_base/src/com/fr/design/insert/formula/variable/cn/servletURL.txt @@ -1,2 +1 @@ -ʣhttp://localhost:8080/WebReport/ReportServer?reportlet=WorkBook1.cpt -servletURLָǣ/WebReport/ReportServer \ No newline at end of file +假如访问:http://localhost:8080/WebReport/ReportServer?reportlet=WorkBook1.cpt,servletURL指的是:/WebReport/ReportServer \ No newline at end of file diff --git a/designer_base/src/com/fr/design/insert/formula/variable/cn/sessionID.txt b/designer_base/src/com/fr/design/insert/formula/variable/cn/sessionID.txt index a27a6b408..eb0b42cf6 100644 --- a/designer_base/src/com/fr/design/insert/formula/variable/cn/sessionID.txt +++ b/designer_base/src/com/fr/design/insert/formula/variable/cn/sessionID.txt @@ -1,4 +1 @@ -SessionIDǷûỰıʶ -ڴỰʱΪÿһỰһıʶ -ỰʶԳͷءSessionIDڱλỰIDļ¼ -SessionID WEBҳͳơ \ No newline at end of file +SessionID属性是返回用户会话的标识。在创建会话时,服务器会为每一个会话生成一个单独的标识,会话标识以长整形数据类型返回。SessionID等于本次会话ID的记录,SessionID 多数情况是用于WEB页面的统计。 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/insert/formula/variable/en/$$$.txt b/designer_base/src/com/fr/design/insert/formula/variable/en/$$$.txt index 4148f61d3..7f4e9bf6a 100644 --- a/designer_base/src/com/fr/design/insert/formula/variable/en/$$$.txt +++ b/designer_base/src/com/fr/design/insert/formula/variable/en/$$$.txt @@ -1 +1 @@ -The current value \ No newline at end of file +The current value \ No newline at end of file diff --git a/designer_base/src/com/fr/design/insert/formula/variable/en/$fr_authority.txt b/designer_base/src/com/fr/design/insert/formula/variable/en/$fr_authority.txt index c7c8074a0..4cd04a675 100644 --- a/designer_base/src/com/fr/design/insert/formula/variable/en/$fr_authority.txt +++ b/designer_base/src/com/fr/design/insert/formula/variable/en/$fr_authority.txt @@ -1 +1 @@ -Parameter of user authority \ No newline at end of file +Parameter of user authority \ No newline at end of file diff --git a/designer_base/src/com/fr/design/insert/formula/variable/en/$fr_username.txt b/designer_base/src/com/fr/design/insert/formula/variable/en/$fr_username.txt index 8b8e172de..4acc4b6a8 100644 --- a/designer_base/src/com/fr/design/insert/formula/variable/en/$fr_username.txt +++ b/designer_base/src/com/fr/design/insert/formula/variable/en/$fr_username.txt @@ -1 +1 @@ -Parameter of username \ No newline at end of file +Parameter of username \ No newline at end of file diff --git a/designer_base/src/com/fr/design/insert/formula/variable/en/$fr_userposition.txt b/designer_base/src/com/fr/design/insert/formula/variable/en/$fr_userposition.txt index 1071578ed..065c00081 100644 --- a/designer_base/src/com/fr/design/insert/formula/variable/en/$fr_userposition.txt +++ b/designer_base/src/com/fr/design/insert/formula/variable/en/$fr_userposition.txt @@ -1 +1 @@ -department role of user \ No newline at end of file +department role of user \ No newline at end of file diff --git a/designer_base/src/com/fr/design/insert/formula/variable/en/NOFILTER.txt b/designer_base/src/com/fr/design/insert/formula/variable/en/NOFILTER.txt index 8902cd963..e2fdaa0c6 100644 --- a/designer_base/src/com/fr/design/insert/formula/variable/en/NOFILTER.txt +++ b/designer_base/src/com/fr/design/insert/formula/variable/en/NOFILTER.txt @@ -1 +1 @@ -The result is aways true when NOFILTER is compared with any other values. +The result is aways true when NOFILTER is compared with any other values. \ No newline at end of file diff --git a/designer_base/src/com/fr/design/insert/formula/variable/en/contextPath.txt b/designer_base/src/com/fr/design/insert/formula/variable/en/contextPath.txt index 8b37a4d9e..7c6256035 100644 --- a/designer_base/src/com/fr/design/insert/formula/variable/en/contextPath.txt +++ b/designer_base/src/com/fr/design/insert/formula/variable/en/contextPath.txt @@ -1 +1 @@ -absolute path of the server http://localhost:8080/WebReport/ReportServer?reportlet=WorkBook1.cpt contextPath is /WebReport \ No newline at end of file +absolute path of the serverhttp://localhost:8080/WebReport/ReportServer?reportlet=WorkBook1.cpt,contextPath is /WebReport \ No newline at end of file diff --git a/designer_base/src/com/fr/design/insert/formula/variable/en/formletName.txt b/designer_base/src/com/fr/design/insert/formula/variable/en/formletName.txt index 320a270d6..48e90583c 100644 --- a/designer_base/src/com/fr/design/insert/formula/variable/en/formletName.txt +++ b/designer_base/src/com/fr/design/insert/formula/variable/en/formletName.txt @@ -1,3 +1 @@ -form name -http://localhost:8080/WebReport/ReportServer?formlet=Form1.frm -formName is Form1.frm \ No newline at end of file +form namehttp://localhost:8080/WebReport/ReportServer?formlet=Form1.frm,formName is Form1.frm \ No newline at end of file diff --git a/designer_base/src/com/fr/design/insert/formula/variable/en/fr_submitinfo.txt b/designer_base/src/com/fr/design/insert/formula/variable/en/fr_submitinfo.txt index a4dc1dc07..ce8c81728 100644 --- a/designer_base/src/com/fr/design/insert/formula/variable/en/fr_submitinfo.txt +++ b/designer_base/src/com/fr/design/insert/formula/variable/en/fr_submitinfo.txt @@ -1 +1 @@ -callback status of form submit contains fr_submitinfo.success and fr_submitinfo.failinfo \ No newline at end of file +callback status of form submitcontains fr_submitinfo.success and fr_submitinfo.failinfo \ No newline at end of file diff --git a/designer_base/src/com/fr/design/insert/formula/variable/en/reportName.txt b/designer_base/src/com/fr/design/insert/formula/variable/en/reportName.txt index bd15a4025..88afaad37 100644 --- a/designer_base/src/com/fr/design/insert/formula/variable/en/reportName.txt +++ b/designer_base/src/com/fr/design/insert/formula/variable/en/reportName.txt @@ -1,3 +1 @@ -report name -http://localhost:8080/WebReport/ReportServer?reportlet=WorkBook1.cpt -reportName is WorkBook1.cpt \ No newline at end of file +report namehttp://localhost:8080/WebReport/ReportServer?reportlet=WorkBook1.cpt,reportName is WorkBook1.cpt \ No newline at end of file diff --git a/designer_base/src/com/fr/design/insert/formula/variable/en/serverName.txt b/designer_base/src/com/fr/design/insert/formula/variable/en/serverName.txt index 666c13b64..265bd4ad0 100644 --- a/designer_base/src/com/fr/design/insert/formula/variable/en/serverName.txt +++ b/designer_base/src/com/fr/design/insert/formula/variable/en/serverName.txt @@ -1,3 +1 @@ -address or name of the server -http://localhost:8080/WebReport/ReportServer?reportlet=WorkBook1.cpt -serverName means localhost \ No newline at end of file +address or name of the serverhttp://localhost:8080/WebReport/ReportServer?reportlet=WorkBook1.cpt,serverName means localhost \ No newline at end of file diff --git a/designer_base/src/com/fr/design/insert/formula/variable/en/serverSchema.txt b/designer_base/src/com/fr/design/insert/formula/variable/en/serverSchema.txt index 2b06eaa23..85072e652 100644 --- a/designer_base/src/com/fr/design/insert/formula/variable/en/serverSchema.txt +++ b/designer_base/src/com/fr/design/insert/formula/variable/en/serverSchema.txt @@ -1,3 +1 @@ -serverSchema -http://localhost:8080/WebReport/ReportServer?reportlet=WorkBook1.cpt -serverSchema is http \ No newline at end of file +serverSchemahttp://localhost:8080/WebReport/ReportServer?reportlet=WorkBook1.cpt,serverSchema is http \ No newline at end of file diff --git a/designer_base/src/com/fr/design/insert/formula/variable/en/serverURL.txt b/designer_base/src/com/fr/design/insert/formula/variable/en/serverURL.txt index 347114b08..f14f92583 100644 --- a/designer_base/src/com/fr/design/insert/formula/variable/en/serverURL.txt +++ b/designer_base/src/com/fr/design/insert/formula/variable/en/serverURL.txt @@ -1,3 +1 @@ -URL of the server -http://localhost:8080/WebReport/ReportServer?reportlet=WorkBook1.cpt -serverURL is http://localhost:8080 +URL of the serverhttp://localhost:8080/WebReport/ReportServer?reportlet=WorkBook1.cpt,serverURL is http://localhost:8080 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/insert/formula/variable/en/servletURL.txt b/designer_base/src/com/fr/design/insert/formula/variable/en/servletURL.txt index b5ed4ec75..b9149deff 100644 --- a/designer_base/src/com/fr/design/insert/formula/variable/en/servletURL.txt +++ b/designer_base/src/com/fr/design/insert/formula/variable/en/servletURL.txt @@ -1,2 +1 @@ -http://localhost:8080/WebReport/ReportServer?reportlet=WorkBook1.cpt -servletURL is /WebReport/ReportServer \ No newline at end of file +http://localhost:8080/WebReport/ReportServer?reportlet=WorkBook1.cpt,servletURL is /WebReport/ReportServer \ No newline at end of file From 98dc9f981f4fa7da7e16091c971468e4e746a84b Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Wed, 1 Mar 2017 17:07:48 +0800 Subject: [PATCH 151/343] =?UTF-8?q?8.0=E6=8F=92=E4=BB=B6=E5=90=AF=E7=94=A8?= =?UTF-8?q?=E7=A6=81=E7=94=A8=E9=87=8D=E5=90=AF=E8=AE=BE=E8=AE=A1=E5=99=A8?= =?UTF-8?q?confirm=E5=AF=B9=E8=AF=9D=E6=A1=86=E4=BF=9D=E7=95=99=EF=BC=8C?= =?UTF-8?q?=E5=9C=A89.0=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/extra/exe/ModifyStatusExecutor.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/designer_base/src/com/fr/design/extra/exe/ModifyStatusExecutor.java b/designer_base/src/com/fr/design/extra/exe/ModifyStatusExecutor.java index a61f35e2d..c544858dd 100644 --- a/designer_base/src/com/fr/design/extra/exe/ModifyStatusExecutor.java +++ b/designer_base/src/com/fr/design/extra/exe/ModifyStatusExecutor.java @@ -42,9 +42,7 @@ public class ModifyStatusExecutor implements Executor { plugin.setActive(active); try { FRContext.getCurrentEnv().writePlugin(plugin); - /* - * PluginWebBridge.getHelper().showRestartMessage(plugin.isActive() ? Inter.getLocText("FR-Designer-Plugin_Has_Been_Actived") : Inter.getLocText("FR-Designer-Plugin_Has_Been_Disabled")); - **/ + PluginWebBridge.getHelper().showRestartMessage(plugin.isActive() ? Inter.getLocText("FR-Designer-Plugin_Has_Been_Actived") : Inter.getLocText("FR-Designer-Plugin_Has_Been_Disabled")); } catch (Exception e) { FRContext.getLogger().error(e.getMessage()); } From 5993e65d4a602adef07c7218f2cb8ea06404a0b1 Mon Sep 17 00:00:00 2001 From: mengao Date: Fri, 3 Mar 2017 10:31:55 +0800 Subject: [PATCH 152/343] =?UTF-8?q?=E5=88=86=E4=B8=A4=E8=A1=8C=E6=98=BE?= =?UTF-8?q?=E7=A4=BAcheckbox=E5=92=8C=E8=BE=93=E5=85=A5=E6=A1=86=EF=BC=8C?= =?UTF-8?q?=E9=80=82=E5=BA=94=E5=9B=BD=E9=99=85=E5=8C=96=E6=83=85=E5=86=B5?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chart/gui/style/axis/ChartValuePane.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java index b100518c1..986f67f2d 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java @@ -151,10 +151,11 @@ public class ChartValuePane extends ChartAxisUsePane{ double p = TableLayout.PREFERRED; double f = TableLayout.FILL; double[] columnSize = { LayoutConstants.CHART_ATTR_TOMARGIN,p,f}; - double[] rowSize = { p, p,}; + double[] rowSize = { p, p, p}; Component[][] component = new Component[][]{ new Component[]{null,initMinMaxValue(),null}, - new Component[]{null, addLogarithmicPane2ValuePane(), addLogText()}, + new Component[]{null, addLogarithmicPane2ValuePane(), null}, + new Component[]{null, null, addLogText()}, }; return TableLayoutHelper.createTableLayoutPane(component, rowSize, columnSize); } @@ -173,10 +174,10 @@ public class ChartValuePane extends ChartAxisUsePane{ JPanel labelLogPane = FRGUIPaneFactory.createLeftFlowZeroGapBorderPane(); labelLogPane.add(logBox = new UICheckBox(Inter.getLocText("Logarithmic")+":")); labelLogPane.add(new UILabel(Inter.getLocText("Chart_Log_Base"))); - + logBaseField = new UITextField(4); logBaseField.setText("10"); - logBaseField.setPreferredSize(new Dimension(20, 20)); + logBaseField.setPreferredSize(new Dimension(50, 20)); logBox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { @@ -185,7 +186,7 @@ public class ChartValuePane extends ChartAxisUsePane{ }); ChartSwingUtils.addListener(logBox, logBaseField); - + return labelLogPane; } From 9536b70257d75451f5b0d031b47c87d8636c5044 Mon Sep 17 00:00:00 2001 From: mengao Date: Fri, 3 Mar 2017 10:39:00 +0800 Subject: [PATCH 153/343] =?UTF-8?q?=E5=88=86=E4=B8=A4=E8=A1=8C=E6=98=BE?= =?UTF-8?q?=E7=A4=BAcheckbox=E5=92=8C=E8=BE=93=E5=85=A5=E6=A1=86=EF=BC=8C?= =?UTF-8?q?=E9=80=82=E5=BA=94=E5=9B=BD=E9=99=85=E5=8C=96=E6=83=85=E5=86=B5?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/chart/gui/style/axis/ChartValuePane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java index 986f67f2d..f798a0a07 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java @@ -177,7 +177,7 @@ public class ChartValuePane extends ChartAxisUsePane{ logBaseField = new UITextField(4); logBaseField.setText("10"); - logBaseField.setPreferredSize(new Dimension(50, 20)); + logBaseField.setPreferredSize(new Dimension(55, 20)); logBox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { From 1a7eebe0867cae4494096e810b49a20805bca163 Mon Sep 17 00:00:00 2001 From: juhaoyu <2335173323@qq.com> Date: Fri, 3 Mar 2017 11:04:19 +0800 Subject: [PATCH 154/343] =?UTF-8?q?REPORT-1835=20sap=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E7=AE=A1=E7=90=86=E7=B3=BB=E7=BB=9F=E4=B8=8B?= =?UTF-8?q?=E7=9A=84=E5=AE=9A=E6=97=B6=E8=B0=83=E5=BA=A6=E6=B2=A1=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mainframe/DesignerFrameFileDealerPane.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/designer_base/src/com/fr/design/mainframe/DesignerFrameFileDealerPane.java b/designer_base/src/com/fr/design/mainframe/DesignerFrameFileDealerPane.java index 9355a3348..352fc1564 100644 --- a/designer_base/src/com/fr/design/mainframe/DesignerFrameFileDealerPane.java +++ b/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.GeneralContext; import com.fr.general.Inter; +import com.fr.plugin.proxy.PluginProxyCompatibleUtils; import com.fr.stable.CoreConstants; import com.fr.stable.StableUtils; import com.fr.stable.project.ProjectConstants; @@ -131,6 +132,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt } toolbarDef.addShortCut(delFileAction); Set extraShortCuts = ExtraDesignClassManager.getInstance().getArray(ShortCut.TEMPLATE_TREE); + extraShortCuts = PluginProxyCompatibleUtils.toOriObjectHashSet(extraShortCuts); for (ShortCut shortCut : extraShortCuts){ toolbarDef.addShortCut(shortCut); } From 77b115e7d35f87a499a222a2c27c4eb7c08228c1 Mon Sep 17 00:00:00 2001 From: mengao Date: Mon, 6 Mar 2017 11:13:14 +0800 Subject: [PATCH 155/343] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=9B=BE=E8=A1=A8?= =?UTF-8?q?=E4=B8=AD=E5=AD=97=E4=BD=93=E8=AE=BE=E7=BD=AE=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/chart/gui/style/ChartTextAttrPane.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPane.java index 5b1ba5aee..bff37e324 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPane.java @@ -29,11 +29,10 @@ public class ChartTextAttrPane extends BasicPane { protected UIToggleButton bold; protected UIToggleButton italic; protected UIColorButton fontColor; - - public static Integer[] Font_Sizes = {new Integer(6), new Integer(8), new Integer(9), new Integer(10), new Integer(11), new Integer(12), new Integer(14), new Integer(16), - new Integer(18), new Integer(20), new Integer(22), new Integer(24), new Integer(26), new Integer(28), new Integer(36), new Integer(48), new Integer(72)}; + public static Integer[] Font_Sizes = new Integer[67]; public ChartTextAttrPane() { + setFont_Sizes(); initComponents(); } @@ -45,6 +44,11 @@ public class ChartTextAttrPane extends BasicPane { // TODO Auto-generated method stub return null; } + public static void setFont_Sizes() { + for (int i =0; i < 67;i++){ + Font_Sizes [i]= new Integer(i+6); + } + } public void populate(TextAttr textAttr) { if (textAttr == null) { From d6c2d969ad04c3175d7f57d9370c428880f63267 Mon Sep 17 00:00:00 2001 From: mengao Date: Mon, 6 Mar 2017 14:05:06 +0800 Subject: [PATCH 156/343] =?UTF-8?q?=E5=BE=AE=E8=B0=83=E5=B8=83=E5=B1=80?= =?UTF-8?q?=EF=BC=8C=E4=BD=BF=E5=9B=BE=E8=A1=A8=E8=B6=85=E9=93=BE=E5=8F=AF?= =?UTF-8?q?=E4=BB=A5=E6=AD=A3=E5=B8=B8=E6=98=BE=E7=A4=BA=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java index 4a18611fa..f57328e14 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java @@ -79,7 +79,7 @@ public class ChartTypeButtonPane extends BasicBeanPane implemen eastPane.setLayout(new BorderLayout()); - eastPane.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 15)); + eastPane.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 10)); JPanel button = new JPanel(); button.setPreferredSize(new Dimension(45, 20)); button.setLayout(new GridLayout(1, 2, 5, 0)); From d7dfacd2f630cf4cd927b21ce97ae06b4a577ec2 Mon Sep 17 00:00:00 2001 From: kerry Date: Mon, 6 Mar 2017 16:48:40 +0800 Subject: [PATCH 157/343] =?UTF-8?q?=E6=97=A0jira=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=EF=BC=8C=E6=8F=90=E4=BA=A4=E5=9B=BD=E9=99=85=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/locale/designer.properties | 13 ++++++++++++- .../com/fr/design/locale/designer_en_US.properties | 13 ++++++++++++- .../com/fr/design/locale/designer_ja_JP.properties | 11 +++++++++++ .../com/fr/design/locale/designer_ko_KR.properties | 11 +++++++++++ .../com/fr/design/locale/designer_zh_CN.properties | 13 ++++++++++++- .../com/fr/design/locale/designer_zh_TW.properties | 13 ++++++++++++- 6 files changed, 70 insertions(+), 4 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 0a66c326e..87a3471e9 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -567,4 +567,15 @@ 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. \ No newline at end of file +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. +FR-Designer_Background_Null= +FR-Designer_Background_Color= +FR-Designer_Background_Texture= +FR-Designer_Background_Pattern= +FR-Designer_Background_Gradient_Color= +FR-Designer_Background_Image= +FR-Designer_Background_Clear= +FR-Designer_Background_Image_Select= +FR-Designer_Initial_Background_Tips= +FR-Designer_Mouse_Move_Tips= +FR-Designer_Mouse_Click_Tips= \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index b0acea3ab..aedaabbc6 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -568,4 +568,15 @@ 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. \ No newline at end of file +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. +FR-Designer_Background_Null=No Background +FR-Designer_Background_Color=Color +FR-Designer_Background_Texture=Texture +FR-Designer_Background_Pattern=Pattern +FR-Designer_Background_Gradient_Color=Gradient Color +FR-Designer_Background_Image=Image +FR-Designer_Background_Clear=Clear +FR-Designer_Background_Image_Select=Select Picture +FR-Designer_Initial_Background_Tips=Initial background of the button +FR-Designer_Mouse_Move_Tips=Move the mouse to the button on the background, in the absence of not changing the background +FR-Designer_Mouse_Click_Tips=The background of the mouse to click the button, in the absence of not changing the background \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index d86d0a164..f966aaef0 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -539,3 +539,14 @@ 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 +FR-Designer_Background_Null= +FR-Designer_Background_Color= +FR-Designer_Background_Texture= +FR-Designer_Background_Pattern= +FR-Designer_Background_Gradient_Color= +FR-Designer_Background_Image= +FR-Designer_Background_Clear= +FR-Designer_Background_Image_Select= +FR-Designer_Initial_Background_Tips= +FR-Designer_Mouse_Move_Tips= +FR-Designer_Mouse_Click_Tips= diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index dfb5ec78f..611d8128c 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -536,3 +536,14 @@ 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 +FR-Designer_Background_Null= +FR-Designer_Background_Color= +FR-Designer_Background_Texture= +FR-Designer_Background_Pattern= +FR-Designer_Background_Gradient_Color= +FR-Designer_Background_Image= +FR-Designer_Background_Clear= +FR-Designer_Background_Image_Select= +FR-Designer_Initial_Background_Tips= +FR-Designer_Mouse_Move_Tips= +FR-Designer_Mouse_Click_Tips= \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index bdb97b094..0bf1d423c 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -572,4 +572,15 @@ 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 \ No newline at end of file +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_Color=\u989C\u8272 +FR-Designer_Background_Texture=\u7EB9\u7406 +FR-Designer_Background_Pattern=\u56FE\u6848 +FR-Designer_Background_Gradient_Color=\u6E10\u53D8\u8272 +FR-Designer_Background_Image=\u56FE\u7247 +FR-Designer_Background_Clear=\u6E05\u9664 +FR-Designer_Background_Image_Select=\u9009\u62E9\u56FE\u7247 +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_Click_Tips=\u9F20\u6807\u70B9\u51FB\u6309\u94AE\u65F6\u80CC\u666F\uFF0C\u82E5\u65E0\u5219\u4E0D\u6539\u53D8\u80CC\u666F \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 3acd7487c..47836061f 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -560,4 +560,15 @@ 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 \ No newline at end of file +FR-Designer_Mobile_Report_Analysis_Annotation=\u6CE8\u91CB\uFF1A\u53EF\u4EE5\u901A\u904E\u8A72\u5C6C\u6027\u63A7\u5236\u5831\u8868\u5728APP\u4E2D\u7684\u89E3\u6790\u65B9\u5F0F\uFF0C\u53EA\u652F\u6301\u5206\u9801\u9810\u89BD\uFF0C\u586B\u5831\u9810\u89BD\u6642\u5C6C\u6027\u7121\u6548\u3002 +FR-Designer_Background_Null= +FR-Designer_Background_Color= +FR-Designer_Background_Texture= +FR-Designer_Background_Pattern= +FR-Designer_Background_Gradient_Color= +FR-Designer_Background_Image= +FR-Designer_Background_Clear= +FR-Designer_Background_Image_Select= +FR-Designer_Initial_Background_Tips= +FR-Designer_Mouse_Move_Tips= +FR-Designer_Mouse_Click_Tips= \ No newline at end of file From f0b588a3b2a80ff4f3ee8b16cfe88cdb13524d34 Mon Sep 17 00:00:00 2001 From: mengao Date: Tue, 7 Mar 2017 09:39:40 +0800 Subject: [PATCH 158/343] =?UTF-8?q?=E5=BE=AE=E8=B0=83=E5=B8=83=E5=B1=80?= =?UTF-8?q?=EF=BC=8C=E4=BD=BF=E5=9B=BE=E8=A1=A8=E8=B6=85=E9=93=BE=E5=8F=AF?= =?UTF-8?q?=E4=BB=A5=E6=AD=A3=E5=B8=B8=E6=98=BE=E7=A4=BA=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/chart/gui/style/ChartTextAttrPane.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPane.java index bff37e324..df8b91707 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPane.java @@ -23,6 +23,7 @@ import com.fr.design.utils.gui.GUICoreUtils; public class ChartTextAttrPane extends BasicPane { private static final long serialVersionUID = 6731679928019436869L; + private static final int SET_FONT = 6; protected UIComboBox fontNameComboBox; protected UIComboBox fontSizeComboBox; @@ -45,8 +46,8 @@ public class ChartTextAttrPane extends BasicPane { return null; } public static void setFont_Sizes() { - for (int i =0; i < 67;i++){ - Font_Sizes [i]= new Integer(i+6); + for (int i =0; i < Font_Sizes.length;i++){ + Font_Sizes [i]= new Integer(i+SET_FONT); } } From 266d3c8490ff83596a7074b34c99f31eabf5e490 Mon Sep 17 00:00:00 2001 From: mengao Date: Tue, 7 Mar 2017 15:31:06 +0800 Subject: [PATCH 159/343] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E5=AD=97=E4=BD=93=E5=AD=97=E5=8F=B7=E4=BB=A3=E7=A0=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chart/gui/style/ChartTextAttrPane.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPane.java index df8b91707..c4586d42e 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPane.java @@ -23,17 +23,20 @@ import com.fr.design.utils.gui.GUICoreUtils; public class ChartTextAttrPane extends BasicPane { private static final long serialVersionUID = 6731679928019436869L; - private static final int SET_FONT = 6; + private static final int FONT_START = 6; + private static final int FONT_END = 72; protected UIComboBox fontNameComboBox; protected UIComboBox fontSizeComboBox; - protected UIToggleButton bold; protected UIToggleButton italic; protected UIColorButton fontColor; public static Integer[] Font_Sizes = new Integer[67]; - + static{ + for(int i = FONT_START; i <= FONT_END; i++){ + Font_Sizes [i - FONT_START] = new Integer(i); + } + } public ChartTextAttrPane() { - setFont_Sizes(); initComponents(); } @@ -45,11 +48,6 @@ public class ChartTextAttrPane extends BasicPane { // TODO Auto-generated method stub return null; } - public static void setFont_Sizes() { - for (int i =0; i < Font_Sizes.length;i++){ - Font_Sizes [i]= new Integer(i+SET_FONT); - } - } public void populate(TextAttr textAttr) { if (textAttr == null) { From c3001565b020c0eb98b073b3cfc50c8e58281b4c Mon Sep 17 00:00:00 2001 From: fr_shine Date: Tue, 7 Mar 2017 16:28:10 +0800 Subject: [PATCH 160/343] =?UTF-8?q?=E6=9B=B4=E6=94=B9qpilevel=E5=9B=A0?= =?UTF-8?q?=E4=B8=BA=E5=A4=A7=E6=95=B0=E6=8D=AE=E5=88=A0=E4=BA=86=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/chart/fun/IndependentChartUIProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_chart/src/com/fr/design/chart/fun/IndependentChartUIProvider.java b/designer_chart/src/com/fr/design/chart/fun/IndependentChartUIProvider.java index 1b90382d6..031ecd3d6 100644 --- a/designer_chart/src/com/fr/design/chart/fun/IndependentChartUIProvider.java +++ b/designer_chart/src/com/fr/design/chart/fun/IndependentChartUIProvider.java @@ -22,7 +22,7 @@ public interface IndependentChartUIProvider extends Level { String XML_TAG = "IndependentChartUIProvider"; - int CURRENT_API_LEVEL = 3; + int CURRENT_API_LEVEL = 4; /** * 图表的类型定义界面类型,就是属性表的第一个界面 From 396368458a641c06256f69b8a36681e8dc3f9589 Mon Sep 17 00:00:00 2001 From: plough Date: Tue, 7 Mar 2017 16:49:07 +0800 Subject: [PATCH 161/343] =?UTF-8?q?REPORT-2093=20=E8=8B=B1=E6=96=87?= =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E5=99=A8=E5=90=AF=E5=8A=A8=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E5=8F=B3=E4=B8=8B=E8=A7=92=E7=9A=84=E9=B8=A3=E8=B0=A2=E9=83=A8?= =?UTF-8?q?=E5=88=86=E8=AF=B7=E5=8E=BB=E6=8E=89=EF=BC=9B=E5=85=B3=E4=BA=8E?= =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E5=99=A8=E9=83=A8=E5=88=86=E7=9A=84=E9=B8=A3?= =?UTF-8?q?=E8=B0=A2=E4=B9=9F=E5=8E=BB=E6=8E=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/start/ReportSplashPane.java | 22 +++++++++++++--- .../com/fr/design/actions/help/AboutPane.java | 25 ++++++++++++++----- 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/designer/src/com/fr/start/ReportSplashPane.java b/designer/src/com/fr/start/ReportSplashPane.java index ab45bc453..7ae0bc63c 100644 --- a/designer/src/com/fr/start/ReportSplashPane.java +++ b/designer/src/com/fr/start/ReportSplashPane.java @@ -4,6 +4,7 @@ package com.fr.start; import com.fr.base.BaseUtils; +import com.fr.base.FRContext; import com.fr.base.GraphHelper; import com.fr.design.mainframe.bbs.BBSConstants; import com.fr.general.GeneralContext; @@ -18,6 +19,8 @@ import java.awt.*; import java.awt.font.FontRenderContext; import java.awt.font.LineMetrics; import java.awt.image.BufferedImage; +import java.util.ArrayList; +import java.util.Locale; import java.util.Random; import java.util.TimerTask; @@ -117,9 +120,22 @@ public class ReportSplashPane extends SplashPane{ GraphHelper.drawString(splashG2d, showText, MODULE_INFO_X, y); //每次随机感谢一位论坛用户 - splashG2d.setPaint(THANK_COLOR); - String content = Inter.getLocText("FR-Designer_Thanks-To") + GUEST; - GraphHelper.drawString(splashG2d, content, THANK_INFO_X, y); + if (shouldShowThanks()) { + splashG2d.setPaint(THANK_COLOR); + String content = Inter.getLocText("FR-Designer_Thanks-To") + GUEST; + GraphHelper.drawString(splashG2d, content, THANK_INFO_X, y); + } + } + + // 是否显示鸣谢文字 + private boolean shouldShowThanks() { + Locale[] hideLocales = {Locale.US, Locale.KOREA, Locale.JAPAN}; + for (Locale loc : hideLocales) { + if (FRContext.getLocale().equals(loc)) { + return false; + } + } + return true; } private static String getRandomUser(){ diff --git a/designer_base/src/com/fr/design/actions/help/AboutPane.java b/designer_base/src/com/fr/design/actions/help/AboutPane.java index 5ee395f80..9c8953597 100644 --- a/designer_base/src/com/fr/design/actions/help/AboutPane.java +++ b/designer_base/src/com/fr/design/actions/help/AboutPane.java @@ -68,10 +68,7 @@ public class AboutPane extends JPanel { Inter.getLocText("FR-Designer-Basic_Activation_Key_Copy_OK") })); - // 英文去掉服务电话和 QQ - if (FRContext.getLocale().equals(Locale.US)){ - // do nothing - } else { + if (shouldShowPhoneAndQQ()){ if(ComparatorUtils.equals(ProductConstants.APP_NAME,FINEREPORT)){ boxCenterAlignmentPane = new BoxCenterAligmentPane(Inter.getLocText("FR-Designer_Service_Phone") + ProductConstants.COMPARE_TELEPHONE); contentPane.add(boxCenterAlignmentPane); @@ -85,8 +82,24 @@ public class AboutPane extends JPanel { contentPane.add(actionLabel); contentPane.add(emailLabel); - - addThankPane(contentPane); + if (shouldShowThanks()) { + addThankPane(contentPane); + } + } + + // 是否显示服务电话和 qq + private boolean shouldShowPhoneAndQQ() { + return !FRContext.getLocale().equals(Locale.US); + } + // 是否显示鸣谢面板 + private boolean shouldShowThanks() { + Locale[] hideLocales = {Locale.US, Locale.KOREA, Locale.JAPAN}; + for (Locale loc : hideLocales) { + if (FRContext.getLocale().equals(loc)) { + return false; + } + } + return true; } //添加鸣谢面板 From baf564760bb4d7eefec8a6db88aa30747f854261 Mon Sep 17 00:00:00 2001 From: plough Date: Tue, 7 Mar 2017 16:50:55 +0800 Subject: [PATCH 162/343] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer/src/com/fr/start/ReportSplashPane.java | 1 - 1 file changed, 1 deletion(-) diff --git a/designer/src/com/fr/start/ReportSplashPane.java b/designer/src/com/fr/start/ReportSplashPane.java index 7ae0bc63c..5f2f3acd2 100644 --- a/designer/src/com/fr/start/ReportSplashPane.java +++ b/designer/src/com/fr/start/ReportSplashPane.java @@ -19,7 +19,6 @@ import java.awt.*; import java.awt.font.FontRenderContext; import java.awt.font.LineMetrics; import java.awt.image.BufferedImage; -import java.util.ArrayList; import java.util.Locale; import java.util.Random; import java.util.TimerTask; From b233da60eff5e1d9150f2eba8f2c31758c71b1a9 Mon Sep 17 00:00:00 2001 From: mengao Date: Tue, 7 Mar 2017 16:55:16 +0800 Subject: [PATCH 163/343] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E5=AD=97=E4=BD=93=E5=AD=97=E5=8F=B7=E4=BB=A3=E7=A0=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/chart/gui/style/ChartTextAttrPane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPane.java index c4586d42e..48ef44970 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPane.java @@ -30,7 +30,7 @@ public class ChartTextAttrPane extends BasicPane { protected UIToggleButton bold; protected UIToggleButton italic; protected UIColorButton fontColor; - public static Integer[] Font_Sizes = new Integer[67]; + public static Integer[] Font_Sizes = new Integer[FONT_END-FONT_START+1]; static{ for(int i = FONT_START; i <= FONT_END; i++){ Font_Sizes [i - FONT_START] = new Integer(i); From da8587f2c57f9b9bd1aa8487cb7aeb9c163812b5 Mon Sep 17 00:00:00 2001 From: plough Date: Tue, 7 Mar 2017 17:34:25 +0800 Subject: [PATCH 164/343] =?UTF-8?q?REPORT-1916=20=E5=81=9A=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E7=9A=84=E8=BF=87=E7=A8=8B=E5=92=8C=E8=80=97=E6=97=B6?= =?UTF-8?q?=E6=94=B6=E9=9B=86=3D=E3=80=8B=E5=AE=8C=E6=88=90=E6=89=80?= =?UTF-8?q?=E6=9C=89=E4=BF=A1=E6=81=AF=E7=9A=84=E6=9C=AC=E5=9C=B0=E5=AD=98?= =?UTF-8?q?=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer/TemplateProcessTracker.aj | 73 +++++++++++++++++++ designer/src/com/fr/grid/Grid.java | 4 + .../designerbase/TemplateProcessTracker.aj | 61 ++++++++++++++++ .../tabledatapane/EmbeddedTableDataPane.java | 1 + .../com/fr/design/mainframe/JTemplate.java | 12 +++ .../templateinfo/TemplateInfoCollector.java | 22 +++++- .../templateinfo/TemplateProcessTracker.aj | 71 ++++++++++++++++++ .../designerchart/TemplateProcessTracker.aj | 56 ++++++++++++++ .../designerform/TemplateProcessTracker.aj | 60 +++++++++++++++ 9 files changed, 358 insertions(+), 2 deletions(-) create mode 100644 designer/src/com/fr/aspectj/designer/TemplateProcessTracker.aj create mode 100644 designer_base/src/com/fr/aspectj/designerbase/TemplateProcessTracker.aj create mode 100644 designer_base/src/com/fr/design/mainframe/templateinfo/TemplateProcessTracker.aj create mode 100644 designer_chart/src/com/fr/aspectj/designerchart/TemplateProcessTracker.aj create mode 100644 designer_form/src/com/fr/aspectj/designerform/TemplateProcessTracker.aj diff --git a/designer/src/com/fr/aspectj/designer/TemplateProcessTracker.aj b/designer/src/com/fr/aspectj/designer/TemplateProcessTracker.aj new file mode 100644 index 000000000..a2c3565d9 --- /dev/null +++ b/designer/src/com/fr/aspectj/designer/TemplateProcessTracker.aj @@ -0,0 +1,73 @@ +package com.fr.aspectj.designer; + +/** + * 记录模板过程 + * Created by plough on 2017/3/3. + */ + +import com.fr.design.mainframe.templateinfo.TemplateInfoCollector; +import org.aspectj.lang.reflect.SourceLocation; + +import java.awt.event.ActionEvent; +import java.awt.event.MouseEvent; +import java.util.Date; + +public aspect TemplateProcessTracker { + //声明一个pointcut,匹配你需要的方法 + pointcut onMouseClicked(MouseEvent e) : + execution(* mouseClicked(MouseEvent)) && args(e); + pointcut onMousePressed(MouseEvent e) : + execution(* mousePressed(MouseEvent)) && args(e); + pointcut onMouseReleased(MouseEvent e) : + execution(* mouseReleased(MouseEvent)) && args(e); + pointcut onActionPerformed(ActionEvent e) : + execution(* actionPerformed(ActionEvent)) && args(e); + pointcut onSetValueAt(Object v, int r, int c) : + execution(* setValueAt(java.lang.Object, int, int)) && args(v, r, c); + pointcut onSetValue4EditingElement(Object v) : + execution(* setValue4EditingElement(java.lang.Object)) && args(v); + + //before表示之前的意思 + //这整个表示在MouseAdapter的public void mouseXXX(MouseEvent)方法调用之前,你想要执行的代码 + before(MouseEvent e) : onMouseClicked(e) || onMousePressed(e) || onMouseReleased(e) { + SourceLocation sl = thisJoinPoint.getSourceLocation();//切面对应的代码位置 + + String log = String.format("%s:\n%s\n%s\n%s\n\n", new Date(), sl, e, e.getSource()); + TemplateInfoCollector.appendProcess(log); + } + //同上 + before(ActionEvent e) : onActionPerformed(e) { + SourceLocation sl = thisJoinPoint.getSourceLocation(); + // !within(LogHandlerBar) 没用, 手动过滤 + if (e.getSource().toString().contains("javax.swing.Timer")) { + return; + } + + String log = String.format("%s:\n%s\n%s\n%s\n\n", new Date(), sl, e, e.getSource()); + TemplateInfoCollector.appendProcess(log); + + } + //同上 + before(Object v, int r, int c) : onSetValueAt(v, r, c) { + SourceLocation sl = thisJoinPoint.getSourceLocation(); + // !within(LogHandlerBar) 没用, 手动过滤 +// if (e.getSource().toString().contains("javax.swing.Timer")) { +// return; +// } + + String log = String.format("%s:\n%s\nset value: %s at (%d, %d)\n\n", new Date(), sl, v, r, c); + TemplateInfoCollector.appendProcess(log); + + } + //同上 + before(Object v) : onSetValue4EditingElement(v) { + SourceLocation sl = thisJoinPoint.getSourceLocation(); + +// String v = "test"; + String log = String.format("%s:\n%s\nset value: %s\n\n", new Date(), sl, v); + TemplateInfoCollector.appendProcess(log); + + } + + +} diff --git a/designer/src/com/fr/grid/Grid.java b/designer/src/com/fr/grid/Grid.java index a259cf63b..432ea888c 100644 --- a/designer/src/com/fr/grid/Grid.java +++ b/designer/src/com/fr/grid/Grid.java @@ -10,6 +10,7 @@ import com.fr.design.constants.UIConstants; import com.fr.design.fun.GridUIProcessor; import com.fr.design.gui.itextfield.UITextField; import com.fr.design.mainframe.ElementCasePane; +import com.fr.design.mainframe.templateinfo.TemplateInfoCollector; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.ComparatorUtils; import com.fr.grid.event.CellEditorEvent; @@ -35,6 +36,7 @@ import javax.swing.plaf.ComponentUI; import java.awt.*; import java.awt.event.MouseEvent; import java.awt.geom.Point2D; +import java.util.Date; import java.util.Hashtable; import java.util.Iterator; @@ -1072,6 +1074,8 @@ public class Grid extends BaseGridComponent { * @return true if the value changed */ private boolean setValue4EditingElement(Object newValue) { + String log = String.format("%s:\nGrid.java\nset value: %s at %s\n\n", new Date(), newValue, editingCellElement); + TemplateInfoCollector.appendProcess(log); if (newValue instanceof TemplateCellElement) { TemplateCellElement cellElement = (TemplateCellElement) newValue; editingCellElement.setValue(cellElement.getValue()); diff --git a/designer_base/src/com/fr/aspectj/designerbase/TemplateProcessTracker.aj b/designer_base/src/com/fr/aspectj/designerbase/TemplateProcessTracker.aj new file mode 100644 index 000000000..04e3fa2e4 --- /dev/null +++ b/designer_base/src/com/fr/aspectj/designerbase/TemplateProcessTracker.aj @@ -0,0 +1,61 @@ +package com.fr.aspectj.designerbase; + +/** + * 记录模板过程 + * Created by plough on 2017/3/3. + */ + +import com.fr.design.mainframe.templateinfo.TemplateInfoCollector; +import org.aspectj.lang.reflect.SourceLocation; + +import java.awt.event.ActionEvent; +import java.awt.event.MouseEvent; +import java.util.Date; + +public aspect TemplateProcessTracker { + //声明一个pointcut,匹配你需要的方法 + pointcut onMouseClicked(MouseEvent e) : + execution(* mouseClicked(MouseEvent)) && args(e); + pointcut onMousePressed(MouseEvent e) : + execution(* mousePressed(MouseEvent)) && args(e); + pointcut onMouseReleased(MouseEvent e) : + execution(* mouseReleased(MouseEvent)) && args(e); + pointcut onActionPerformed(ActionEvent e) : + execution(* actionPerformed(ActionEvent)) && args(e); + pointcut onSetValueAt(Object v, int r, int c) : + execution(* setValueAt(java.lang.Object, int, int)) && args(v, r, c); + + //before表示之前的意思 + //这整个表示在MouseAdapter的public void mouseXXX(MouseEvent)方法调用之前,你想要执行的代码 + before(MouseEvent e) : onMouseClicked(e) || onMousePressed(e) || onMouseReleased(e) { + SourceLocation sl = thisJoinPoint.getSourceLocation();//切面对应的代码位置 + + String log = String.format("%s:\n%s\n%s\n%s\n\n", new Date(), sl, e, e.getSource()); + TemplateInfoCollector.appendProcess(log); + } + //同上 + before(ActionEvent e) : onActionPerformed(e) { + SourceLocation sl = thisJoinPoint.getSourceLocation(); + // !within(LogHandlerBar) 没用, 手动过滤 + if (e.getSource().toString().contains("javax.swing.Timer")) { + return; + } + + String log = String.format("%s:\n%s\n%s\n%s\n\n", new Date(), sl, e, e.getSource()); + TemplateInfoCollector.appendProcess(log); + + } + //同上 + before(Object v, int r, int c) : onSetValueAt(v, r, c) { + SourceLocation sl = thisJoinPoint.getSourceLocation(); + // !within(LogHandlerBar) 没用, 手动过滤 +// if (e.getSource().toString().contains("javax.swing.Timer")) { +// return; +// } + + String log = String.format("%s:\n%s\nset value: %s at (%d, %d)\n\n", new Date(), sl, v, r, c); + TemplateInfoCollector.appendProcess(log); + } + + +} diff --git a/designer_base/src/com/fr/design/data/tabledata/tabledatapane/EmbeddedTableDataPane.java b/designer_base/src/com/fr/design/data/tabledata/tabledatapane/EmbeddedTableDataPane.java index 3103f6850..a4ddba1f7 100644 --- a/designer_base/src/com/fr/design/data/tabledata/tabledatapane/EmbeddedTableDataPane.java +++ b/designer_base/src/com/fr/design/data/tabledata/tabledatapane/EmbeddedTableDataPane.java @@ -96,6 +96,7 @@ public class EmbeddedTableDataPane extends AbstractTableDataPane> ex private PreviewProvider previewType; private long openTime = 0L; // 打开模板的时间点(包括新建模板) private TemplateInfoCollector tic = TemplateInfoCollector.getInstance(); + private StringBuilder process = new StringBuilder(""); // 制作模板的过程 public JTemplate(T t, String defaultFileName) { this(t, new MemFILE(newTemplateNameByIndex(defaultFileName)), true); @@ -102,6 +103,7 @@ public abstract class JTemplate> ex // 如果不是新建模板,并且在收集列表中 if (!isNewFile && tic.inList(t)) { openTime = System.currentTimeMillis(); + process.append(tic.loadProcess(t)); } } @@ -131,6 +133,16 @@ public abstract class JTemplate> ex // 获取模板控件数 public abstract int getWidgetCount(); + // 追加过程记录 + public void appendProcess(String s) { + process.append(s); + } + + // 获取过程记录 + public String getProcess() { + return process.toString(); + } + public U getUndoState() { return undoState; } diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java index 52542e14d..95ced6330 100644 --- a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java @@ -2,6 +2,7 @@ package com.fr.design.mainframe.templateinfo; import com.fr.base.io.IOFile; import com.fr.design.DesignerEnvManager; +import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.JTemplate; import com.fr.general.FRLogger; import com.fr.general.GeneralUtils; @@ -49,6 +50,22 @@ public class TemplateInfoCollector implements Serializable { return instance; } + public static void appendProcess(String log) { +// System.out.println(log); + // 获取当前编辑的模板 + JTemplate jt = DesignerContext.getDesignerFrame().getSelectedJTemplate(); + // 追加过程记录 + jt.appendProcess(log); + } + + /** + * 加载已经存储的模板过程 + */ + public String loadProcess(T t) { +// return ""; + return (String)templateInfoList.get(t.getReportletsid()).get("process"); + } + /** * 根据模板ID是否在收集列表中,判断是否需要收集当前模板的信息 */ @@ -106,17 +123,18 @@ public class TemplateInfoCollector implements Serializable { } long timeConsume = saveTime - openTime; - // 如果已存有数据,则加上本次编辑时间 + // 如果已存有数据,则加上之前的累计编辑时间 if (templateInfo.get("time_consume") != null) { timeConsume += (long)templateInfo.get("time_consume"); } -// String process; + String process = jt.getProcess(); int cellCount = jt.getCellCount(); int floatCount = jt.getFloatCount(); int blockCount = jt.getBlockCount(); int widgetCount = jt.getWidgetCount(); templateInfo.put("time_consume", timeConsume); + templateInfo.put("process", process); templateInfo.put("cell_count", cellCount); templateInfo.put("float_count", floatCount); templateInfo.put("block_count", blockCount); diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateProcessTracker.aj b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateProcessTracker.aj new file mode 100644 index 000000000..d186f8298 --- /dev/null +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateProcessTracker.aj @@ -0,0 +1,71 @@ +//package com.fr.design.mainframe.templateinfo; +// +//import org.aspectj.lang.reflect.SourceLocation; +// +//import java.awt.event.ActionEvent; +//import java.awt.event.MouseEvent; +//import java.util.Date; +// +///** +// * 记录模板过程 +// * Created by plough on 2017/2/27. +// */ +//public aspect TemplateProcessTracker { +// //声明一个pointcut,匹配你需要的方法 +// pointcut onMouseClicked(MouseEvent e) : +// execution(* mouseClicked(MouseEvent)) && args(e); +// pointcut onMousePressed(MouseEvent e) : +// execution(* mousePressed(MouseEvent)) && args(e); +// pointcut onMouseReleased(MouseEvent e) : +// execution(* mouseReleased(MouseEvent)) && args(e); +// pointcut onActionPerformed(ActionEvent e) : +// execution(* actionPerformed(ActionEvent)) && args(e); +// pointcut onSetValueAt(Object v, int r, int c) : +// execution(* setValueAt(Object, int, int)) && args(v, r, c); +// pointcut onSetValue4EditingElement(Object v) : +// execution(* setValue4EditingElement(Object)) && args(v); +// +// //before表示之前的意思 +// //这整个表示在MouseAdapter的public void mouseXXX(MouseEvent)方法调用之前,你想要执行的代码 +// before(MouseEvent e) : onMouseClicked(e) || onMousePressed(e) || onMouseReleased(e) { +// SourceLocation sl = thisJoinPoint.getSourceLocation();//切面对应的代码位置 +// +// String log = String.format("%s:\n%s\n%s\n%s\n\n", new Date(), sl, e, e.getSource()); +// TemplateInfoCollector.appendProcess(log); +// } +// //同上 +// before(ActionEvent e) : onActionPerformed(e) { +// SourceLocation sl = thisJoinPoint.getSourceLocation(); +// // !within(LogHandlerBar) 没用, 手动过滤 +// if (e.getSource().toString().contains("javax.swing.Timer")) { +// return; +// } +// +// String log = String.format("%s:\n%s\n%s\n%s\n\n", new Date(), sl, e, e.getSource()); +// TemplateInfoCollector.appendProcess(log); +// +// } +// //同上 +// before(Object v, int r, int c) : onSetValueAt(v, r, c) { +// SourceLocation sl = thisJoinPoint.getSourceLocation(); +// // !within(LogHandlerBar) 没用, 手动过滤 +//// if (e.getSource().toString().contains("javax.swing.Timer")) { +//// return; +//// } +// +// String log = String.format("%s:\n%s\nset value: %s at (%d, %d)\n\n", new Date(), sl, v, r, c); +// TemplateInfoCollector.appendProcess(log); +// +// } +// //同上 +// before(Object v) : onSetValue4EditingElement(v) { +// SourceLocation sl = thisJoinPoint.getSourceLocation(); +// +//// String v = "test"; +// String log = String.format("%s:\n%s\nset value: %s\n\n", new Date(), sl, v); +// TemplateInfoCollector.appendProcess(log); +// +// } +// +// +//} diff --git a/designer_chart/src/com/fr/aspectj/designerchart/TemplateProcessTracker.aj b/designer_chart/src/com/fr/aspectj/designerchart/TemplateProcessTracker.aj new file mode 100644 index 000000000..c192a190d --- /dev/null +++ b/designer_chart/src/com/fr/aspectj/designerchart/TemplateProcessTracker.aj @@ -0,0 +1,56 @@ +package com.fr.aspectj.designerchart; + +/** + * Created by plough on 2017/3/3. + */ +import com.fr.chart.chartattr.Chart; +import com.fr.design.mainframe.templateinfo.TemplateInfoCollector; +import org.aspectj.lang.reflect.SourceLocation; + +import javax.swing.event.ListSelectionEvent; +import java.awt.event.ActionEvent; +import java.awt.event.MouseEvent; +import java.util.Date; + +public aspect TemplateProcessTracker { + //声明一个pointcut,匹配你需要的方法 + pointcut onMouseClicked(MouseEvent e) : + execution(* mouseClicked(MouseEvent)) && args(e); + pointcut onMousePressed(MouseEvent e) : + execution(* mousePressed(MouseEvent)) && args(e); + pointcut onMouseReleased(MouseEvent e) : + execution(* mouseReleased(MouseEvent)) && args(e); + pointcut onActionPerformed(ActionEvent e) : + execution(* actionPerformed(ActionEvent)) && args(e); + pointcut onChartUpdate(Chart c) : + execution(* update(Chart)) && args(c); + + //before表示之前的意思 + //这整个表示在MouseAdapter的public void mouseXXX(MouseEvent)方法调用之前,你想要执行的代码 + before(MouseEvent e) : onMouseClicked(e) || onMousePressed(e) || onMouseReleased(e) { + SourceLocation sl = thisJoinPoint.getSourceLocation();//切面对应的代码位置 + + String log = String.format("%s:\n%s\n%s\n%s\n\n", new Date(), sl, e, e.getSource()); + TemplateInfoCollector.appendProcess(log); + } + //同上 + before(ActionEvent e) : onActionPerformed(e) { + SourceLocation sl = thisJoinPoint.getSourceLocation(); + // !within(LogHandlerBar) 没用, 手动过滤 + if (e.getSource().toString().contains("javax.swing.Timer")) { + return; + } + + String log = String.format("%s:\n%s\n%s\n%s\n\n", new Date(), sl, e, e.getSource()); + TemplateInfoCollector.appendProcess(log); + + } + //同上 + before(Chart c) : onChartUpdate(c) { + SourceLocation sl = thisJoinPoint.getSourceLocation(); + String log = String.format("%s:\n%s\n插入新图表:%s\n\n", new Date(), sl, c.getChartName()); + TemplateInfoCollector.appendProcess(log); + + } + +} diff --git a/designer_form/src/com/fr/aspectj/designerform/TemplateProcessTracker.aj b/designer_form/src/com/fr/aspectj/designerform/TemplateProcessTracker.aj new file mode 100644 index 000000000..885d21ecd --- /dev/null +++ b/designer_form/src/com/fr/aspectj/designerform/TemplateProcessTracker.aj @@ -0,0 +1,60 @@ +package com.fr.aspectj.designerform; + +/** + * Created by plough on 2017/3/3. + */ +import com.fr.design.mainframe.templateinfo.TemplateInfoCollector; +import org.aspectj.lang.reflect.SourceLocation; + +import java.awt.event.ActionEvent; +import java.awt.event.MouseEvent; +import java.util.Date; + +public aspect TemplateProcessTracker { + //声明一个pointcut,匹配你需要的方法 + pointcut onMouseClicked(MouseEvent e) : + execution(* mouseClicked(MouseEvent)) && args(e); + pointcut onMousePressed(MouseEvent e) : + execution(* mousePressed(MouseEvent)) && args(e); + pointcut onMouseReleased(MouseEvent e) : + execution(* mouseReleased(MouseEvent)) && args(e); + pointcut onActionPerformed(ActionEvent e) : + execution(* actionPerformed(ActionEvent)) && args(e); + pointcut onSetValueAt(Object v, int r, int c) : + execution(* setValueAt(java.lang.Object, int, int)) && args(v, r, c); + + //before表示之前的意思 + //这整个表示在MouseAdapter的public void mouseXXX(MouseEvent)方法调用之前,你想要执行的代码 + before(MouseEvent e) : onMouseClicked(e) || onMousePressed(e) || onMouseReleased(e) { + SourceLocation sl = thisJoinPoint.getSourceLocation();//切面对应的代码位置 + + String log = String.format("%s:\n%s\n%s\n%s\n\n", new Date(), sl, e, e.getSource()); + TemplateInfoCollector.appendProcess(log); + } + //同上 + before(ActionEvent e) : onActionPerformed(e) { + SourceLocation sl = thisJoinPoint.getSourceLocation(); + // !within(LogHandlerBar) 没用, 手动过滤 + if (e.getSource().toString().contains("javax.swing.Timer")) { + return; + } + + String log = String.format("%s:\n%s\n%s\n%s\n\n", new Date(), sl, e, e.getSource()); + TemplateInfoCollector.appendProcess(log); + + } + //同上 + before(Object v, int r, int c) : onSetValueAt(v, r, c) { + SourceLocation sl = thisJoinPoint.getSourceLocation(); + // !within(LogHandlerBar) 没用, 手动过滤 +// if (e.getSource().toString().contains("javax.swing.Timer")) { +// return; +// } + + String log = String.format("%s:\n%s\nset value: %s at (%d, %d)\n\n", new Date(), sl, v, r, c); + TemplateInfoCollector.appendProcess(log); + + } + + +} From f2c3c76e7d60e48a5b4f9d3ab8ddc653c398bcfb Mon Sep 17 00:00:00 2001 From: plough Date: Wed, 8 Mar 2017 16:22:38 +0800 Subject: [PATCH 165/343] =?UTF-8?q?REPORT-1916=20=E5=81=9A=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E7=9A=84=E8=BF=87=E7=A8=8B=E5=92=8C=E8=80=97=E6=97=B6?= =?UTF-8?q?=E6=94=B6=E9=9B=86=3D=E3=80=8B=E4=BF=AE=E6=94=B9=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E5=8D=95=E5=85=83=E6=A0=BC=E7=BC=96=E8=BE=91=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E7=9A=84=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/aspectj/designer/TemplateProcessTracker.aj | 9 +++++---- designer/src/com/fr/grid/Grid.java | 9 +++++++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/designer/src/com/fr/aspectj/designer/TemplateProcessTracker.aj b/designer/src/com/fr/aspectj/designer/TemplateProcessTracker.aj index a2c3565d9..24dfc7351 100644 --- a/designer/src/com/fr/aspectj/designer/TemplateProcessTracker.aj +++ b/designer/src/com/fr/aspectj/designer/TemplateProcessTracker.aj @@ -6,6 +6,7 @@ package com.fr.aspectj.designer; */ import com.fr.design.mainframe.templateinfo.TemplateInfoCollector; +import com.fr.grid.Grid; import org.aspectj.lang.reflect.SourceLocation; import java.awt.event.ActionEvent; @@ -24,8 +25,8 @@ public aspect TemplateProcessTracker { execution(* actionPerformed(ActionEvent)) && args(e); pointcut onSetValueAt(Object v, int r, int c) : execution(* setValueAt(java.lang.Object, int, int)) && args(v, r, c); - pointcut onSetValue4EditingElement(Object v) : - execution(* setValue4EditingElement(java.lang.Object)) && args(v); + pointcut onSetValue4EditingElement(Grid g, Object v) : + call(* setValue4EditingElement(java.lang.Object)) && target(g) && args(v); //before表示之前的意思 //这整个表示在MouseAdapter的public void mouseXXX(MouseEvent)方法调用之前,你想要执行的代码 @@ -60,11 +61,11 @@ public aspect TemplateProcessTracker { } //同上 - before(Object v) : onSetValue4EditingElement(v) { + before(Grid g, Object v) : onSetValue4EditingElement(g, v) { SourceLocation sl = thisJoinPoint.getSourceLocation(); // String v = "test"; - String log = String.format("%s:\n%s\nset value: %s\n\n", new Date(), sl, v); + String log = String.format("%s:\n%s\nset value: %s at %s\n\n", new Date(), sl, v, g.getEditingCellElement()); TemplateInfoCollector.appendProcess(log); } diff --git a/designer/src/com/fr/grid/Grid.java b/designer/src/com/fr/grid/Grid.java index 432ea888c..178cd085e 100644 --- a/designer/src/com/fr/grid/Grid.java +++ b/designer/src/com/fr/grid/Grid.java @@ -1067,6 +1067,13 @@ public class Grid extends BaseGridComponent { } + /** + * @return editingCellElement 的字符串表示 + */ + public String getEditingCellElement() { + return editingCellElement.toString(); + } + /** * 将新值赋给editingCellElement * @@ -1074,8 +1081,6 @@ public class Grid extends BaseGridComponent { * @return true if the value changed */ private boolean setValue4EditingElement(Object newValue) { - String log = String.format("%s:\nGrid.java\nset value: %s at %s\n\n", new Date(), newValue, editingCellElement); - TemplateInfoCollector.appendProcess(log); if (newValue instanceof TemplateCellElement) { TemplateCellElement cellElement = (TemplateCellElement) newValue; editingCellElement.setValue(cellElement.getValue()); From 0a1db37ffbff56c8ff1e2f1b1f5103462e63a0cc Mon Sep 17 00:00:00 2001 From: frharry Date: Wed, 8 Mar 2017 18:10:32 +0800 Subject: [PATCH 166/343] =?UTF-8?q?REPORT-1344=20=E8=A1=A8=E5=8D=95?= =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E5=9D=97=E7=BF=BB=E9=A1=B5=E6=94=B9=E8=BF=9B?= =?UTF-8?q?=E5=B9=B6=E5=A2=9E=E5=8A=A0=E5=B1=80=E9=83=A8=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/dialog/BasicDialog.java | 1 + .../src/com/fr/design/dialog/BasicPane.java | 24 + .../design/designer/creator/XElementCase.java | 4 +- .../com/fr/design/mainframe/FEditToolBar.java | 481 ++++++++++++++++++ .../fr/design/mainframe/FSettingToolBar.java | 84 +++ .../src/com/fr/design/mainframe/FToolBar.java | 68 +++ .../fr/design/mainframe/FToolBarButton.java | 159 ++++++ .../com/fr/design/mainframe/FToolBarPane.java | 233 +++++++++ .../mainframe/FormWebWidgetConstants.java | 54 ++ .../AccessibleECToolBarEditor.java | 57 +++ .../widget/editors/ECToolBarEditor.java | 13 + .../widget/editors/ECToolBarPane.java | 304 +++++++++++ .../widget/wrappers/ECToolBarWrapper.java | 34 ++ 13 files changed, 1515 insertions(+), 1 deletion(-) create mode 100644 designer_form/src/com/fr/design/mainframe/FEditToolBar.java create mode 100644 designer_form/src/com/fr/design/mainframe/FSettingToolBar.java create mode 100644 designer_form/src/com/fr/design/mainframe/FToolBar.java create mode 100644 designer_form/src/com/fr/design/mainframe/FToolBarButton.java create mode 100644 designer_form/src/com/fr/design/mainframe/FToolBarPane.java create mode 100644 designer_form/src/com/fr/design/mainframe/FormWebWidgetConstants.java create mode 100644 designer_form/src/com/fr/design/mainframe/widget/accessibles/AccessibleECToolBarEditor.java create mode 100644 designer_form/src/com/fr/design/mainframe/widget/editors/ECToolBarEditor.java create mode 100644 designer_form/src/com/fr/design/mainframe/widget/editors/ECToolBarPane.java create mode 100644 designer_form/src/com/fr/design/mainframe/widget/wrappers/ECToolBarWrapper.java diff --git a/designer_base/src/com/fr/design/dialog/BasicDialog.java b/designer_base/src/com/fr/design/dialog/BasicDialog.java index 703b19205..bc9ec749d 100644 --- a/designer_base/src/com/fr/design/dialog/BasicDialog.java +++ b/designer_base/src/com/fr/design/dialog/BasicDialog.java @@ -13,6 +13,7 @@ public abstract class BasicDialog extends UIDialog { public static final Dimension CHART = new Dimension(760, 560); public static final Dimension MAP_SIZE = new Dimension(760, 450); public static final Dimension UPDATE_ONLINE_SIZE = new Dimension(600,300); + public static final Dimension TOOLBAR_SIZE = new Dimension(660, 327); public BasicDialog(Frame parent) { super(parent); diff --git a/designer_base/src/com/fr/design/dialog/BasicPane.java b/designer_base/src/com/fr/design/dialog/BasicPane.java index eb1b41305..05c6a84f2 100644 --- a/designer_base/src/com/fr/design/dialog/BasicPane.java +++ b/designer_base/src/com/fr/design/dialog/BasicPane.java @@ -251,6 +251,30 @@ public abstract class BasicPane extends JPanel { return dg; } + /** + * 显示窗口 + * + * @param window 窗口 + * @param l 对话框监听器 + * @return 对话框 + */ + public BasicDialog showToolBarWindow(Window window, DialogActionListener l) { + BasicDialog dg; + if (window instanceof Frame) { + dg = new DIALOG((Frame) window); + } else { + dg = new DIALOG((Dialog) window); + } + + if (l != null) { + dg.addDialogActionListener(l); + } + dg.setBasicDialogSize(BasicDialog.TOOLBAR_SIZE); + GUICoreUtils.centerWindow(dg); + dg.setResizable(false); + return dg; + } + protected abstract String title4PopupWindow(); public String getTitle() { diff --git a/designer_form/src/com/fr/design/designer/creator/XElementCase.java b/designer_form/src/com/fr/design/designer/creator/XElementCase.java index a932548cc..f30ddb758 100644 --- a/designer_form/src/com/fr/design/designer/creator/XElementCase.java +++ b/designer_form/src/com/fr/design/designer/creator/XElementCase.java @@ -11,6 +11,7 @@ import com.fr.design.fun.impl.AbstractFormElementCaseEditorProvider; import com.fr.design.gui.ilable.UILabel; import com.fr.design.mainframe.*; import com.fr.design.mainframe.widget.editors.BooleanEditor; +import com.fr.design.mainframe.widget.editors.ECToolBarEditor; import com.fr.design.mainframe.widget.editors.PaddingMarginEditor; import com.fr.design.mainframe.widget.editors.WLayoutBorderStyleEditor; import com.fr.design.mainframe.widget.renderer.LayoutBorderStyleRenderer; @@ -92,11 +93,12 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme public void propertyChange() { initStyle(); } + }), new CRPropertyDescriptor("margin", this.data.getClass()).setEditorClass(PaddingMarginEditor.class) .setI18NName(Inter.getLocText("FR-Layout_Padding")) .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced"), - new CRPropertyDescriptor("showToolBar", this.data.getClass()).setEditorClass(BooleanEditor.class) + new CRPropertyDescriptor("ToolBars", this.data.getClass()).setEditorClass(ECToolBarEditor.class) .setI18NName(Inter.getLocText("Form-EC_toolbar")) .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced") }; diff --git a/designer_form/src/com/fr/design/mainframe/FEditToolBar.java b/designer_form/src/com/fr/design/mainframe/FEditToolBar.java new file mode 100644 index 000000000..4ca4ab9c1 --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/FEditToolBar.java @@ -0,0 +1,481 @@ +package com.fr.design.mainframe; + +import com.fr.base.BaseUtils; +import com.fr.design.actions.UpdateAction; +import com.fr.design.dialog.BasicDialog; +import com.fr.design.dialog.BasicPane; +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.icheckbox.UICheckBox; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.itextfield.UITextField; +import com.fr.design.gui.itoolbar.UIToolbar; +import com.fr.design.javascript.JavaScriptActionPane; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.menu.ToolBarDef; +import com.fr.design.style.background.BackgroundPane; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.design.widget.IconDefinePane; +import com.fr.form.ui.*; +import com.fr.form.ui.Button; +import com.fr.form.web.button.Export; +import com.fr.general.Background; +import com.fr.general.Inter; +import com.fr.stable.StringUtils; + +import javax.swing.*; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.*; + +/** + * Created by harry on 2017-3-2. + */ +public class FEditToolBar extends BasicPane { + + private JList list; + private DefaultListModel listModel; + private JPanel right; + private CardLayout card; + private ButtonPane bp; + private FToolBarButton lastButton; + private Background background = null; + private UICheckBox defaultCheckBox; + + private ListSelectionListener listSelectionListener = new ListSelectionListener() { + public void valueChanged(ListSelectionEvent evt) { + if (lastButton != null) { + lastButton.setWidget(bp.update()); + } + if (list.getSelectedValue() instanceof FToolBarButton) { + lastButton = (FToolBarButton) list.getSelectedValue(); + if (lastButton.getWidget() instanceof Button) { + card.show(right, "button"); + bp.populate(lastButton.getWidget()); + } else { + bp.populate(lastButton.getWidget()); + card.show(right, "none"); + } + } + } + }; + + + private ActionListener actioner = new ActionListener() { + /** + * + */ + public void actionPerformed(ActionEvent arg0) { + final BackgroundPane backgroundPane = new BackgroundPane(); + BasicDialog dialog = backgroundPane.showWindow(DesignerContext.getDesignerFrame()); + backgroundPane.populate(FEditToolBar.this.background); + dialog.addDialogActionListener(new DialogActionAdapter() { + public void doOk() { + FEditToolBar.this.background = backgroundPane.update(); + if (FEditToolBar.this.background != null) { + FEditToolBar.this.defaultCheckBox.setSelected(false); + } + } + }); + dialog.setVisible(true); + } + }; + + public FEditToolBar() { + initComponent(); + } + + /** + * 初始化 + */ + public void initComponent() { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + JPanel left = FRGUIPaneFactory.createBorderLayout_S_Pane(); + listModel = new DefaultListModel(); + list = new JList(listModel); + list.setCellRenderer(render); + left.add(new JScrollPane(list), BorderLayout.CENTER); + if (listModel.getSize() > 0) { + list.setSelectedIndex(0); + } + + ToolBarDef toolbarDef = new ToolBarDef(); + toolbarDef.addShortCut(new MoveUpItemAction()); + toolbarDef.addShortCut(new MoveDownItemAction()); + toolbarDef.addShortCut(new RemoveAction()); + UIToolbar toolBar = ToolBarDef.createJToolBar(); + toolbarDef.updateToolBar(toolBar); + left.add(toolBar, BorderLayout.NORTH); + + right = FRGUIPaneFactory.createCardLayout_S_Pane(); + card = new CardLayout(); + right.setLayout(card); + bp = new ButtonPane(); + right.add("none", FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane()); + right.add("button", bp); + + JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, left, right); + // splitPane.setDividerLocation(left.getMinimumSize().width); + splitPane.setDividerLocation(120); + this.add(splitPane); + list.addListSelectionListener(listSelectionListener); + JPanel backgroundPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); + UIButton bgButton = new UIButton(Inter.getLocText(new String[]{"Background", "Set"})); + defaultCheckBox = new UICheckBox(Inter.getLocText(new String[]{"Default", "Background"})); + bgButton.addActionListener(actioner); + backgroundPane.add(defaultCheckBox); + backgroundPane.add(bgButton); + backgroundPane.setBorder(BorderFactory.createTitledBorder(Inter.getLocText(new String[]{"Background", "Set"}))); + this.add(backgroundPane, BorderLayout.SOUTH); + } + + ListCellRenderer render = new DefaultListCellRenderer() { + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { + super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); + + if (value instanceof FToolBarButton) { + FToolBarButton button = (FToolBarButton) value; + this.setText(button.getNameOption().optionName()); + this.setIcon(button.getNameOption().optionIcon()); + } + return this; + } + }; + + @Override + protected String title4PopupWindow() { + return Inter.getLocText("FR-Designer_Edit"); + } + + public void populate(FToolBar ftoolbar) { + this.populate(ftoolbar, null); + } + + public void populate(FToolBar ftoolbar, FToolBarButton button) { + if (ftoolbar == null) { + return; + } + for (int i = 0; i < ftoolbar.getButtonlist().size(); i++) { + listModel.addElement(ftoolbar.getButtonlist().get(i)); + } + this.list.validate(); + this.list.repaint(); + if (ftoolbar.getButtonlist().size() > 0) { + this.list.setSelectedIndex(0); + } + if (button != null) { + this.list.setSelectedValue(button, true); + } + this.background = ftoolbar.getBackground(); + + this.defaultCheckBox.setSelected(ftoolbar.isDefault() ? true : false); + } + + public FToolBar update() { + if (this.list.getSelectedIndex() > -1) { + for (int i = 0; i < listModel.getSize(); i++) { + this.list.setSelectedIndex(i); + FToolBarButton toolBarButton = (FToolBarButton) this.list.getSelectedValue(); + Widget widget = this.bp.update(); + toolBarButton.setWidget(widget); + if (widget instanceof Button) { + String iconname = ((Button) widget).getIconName(); + if (StringUtils.isNotBlank(iconname)) { + Image iimage = WidgetManager.getProviderInstance().getIconManager().getIconImage(iconname); + toolBarButton.setIcon(new ImageIcon(iimage)); + } + } + } + } + java.util.List list = new ArrayList(); + for (int i = 0; i < listModel.size(); i++) { + list.add((FToolBarButton) listModel.get(i)); + } + FToolBar ftoolBar = new FToolBar(); + ftoolBar.setButtonlist(list); + + ftoolBar.setDefault(this.defaultCheckBox.isSelected()); + if (!ftoolBar.isDefault()) { + ftoolBar.setBackground(this.background); + } + return ftoolBar; + } + + private class MoveUpItemAction extends UpdateAction { + public MoveUpItemAction() { + this.setName(Inter.getLocText("Utils-Move_Up")); + this.setMnemonic('U'); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/control/up.png")); + } + + /** + * + */ + public void actionPerformed(ActionEvent evt) { + int selectedIndex = list.getSelectedIndex(); + if (selectedIndex == -1) { + return; + } + + // 上移 + if (selectedIndex > 0) { + DefaultListModel listModel = (DefaultListModel) list.getModel(); + + Object selecteObj1 = listModel.get(selectedIndex - 1); + listModel.set(selectedIndex - 1, listModel.get(selectedIndex)); + listModel.set(selectedIndex, selecteObj1); + + list.setSelectedIndex(selectedIndex - 1); + list.ensureIndexIsVisible(selectedIndex - 1); + list.validate(); + } + } + } + + private class MoveDownItemAction extends UpdateAction { + public MoveDownItemAction() { + this.setName(Inter.getLocText("Utils-Move_Down")); + this.setMnemonic('D'); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/control/down.png")); + } + + /** + * + */ + public void actionPerformed(ActionEvent evt) { + int selectedIndex = list.getSelectedIndex(); + if (selectedIndex == -1) { + return; + } + + // 下移 + if (selectedIndex == -1) { + return; + } + + if (selectedIndex < list.getModel().getSize() - 1) { + DefaultListModel listModel = (DefaultListModel) list.getModel(); + + Object selecteObj1 = listModel.get(selectedIndex + 1); + listModel.set(selectedIndex + 1, listModel.get(selectedIndex)); + listModel.set(selectedIndex, selecteObj1); + + list.setSelectedIndex(selectedIndex + 1); + list.ensureIndexIsVisible(selectedIndex + 1); + list.validate(); + } + } + } + + public class RemoveAction extends UpdateAction { + public RemoveAction() { + this.setName(Inter.getLocText("FR-Designer_Delete")); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/base/images/cell/control/remove.png")); + } + + /** + * 动作 + * @param e 事件 + */ + public void actionPerformed(ActionEvent e) { + int i = list.getSelectedIndex(); + if (i < 0 || !(listModel.getElementAt(i) instanceof FToolBarButton)) { + return; + } + int val = JOptionPane.showConfirmDialog(FEditToolBar.this, Inter.getLocText("FR-Designer_Are_You_Sure_To_Delete_The_Data") + "?", "Message", JOptionPane.YES_NO_OPTION); + if (val != JOptionPane.YES_OPTION) { + return; + } + listModel.removeElementAt(i); + list.validate(); + if (listModel.size() > 0) { + list.setSelectedIndex(0); + } else { + card.show(right, "none"); + } + } + } + + public class ButtonPane extends BasicPane { + private CardLayout card; + private JPanel centerPane; + private UICheckBox icon, text, excelP, excelO; + private Widget widget; + private UITextField nameField; + private IconDefinePane iconPane; + private UIButton button; + private JavaScriptActionPane javaScriptPane; + + public ButtonPane() { + this.initComponents(); + } + + /** + * 初始化元素 + */ + public void initComponents() { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + JPanel north = FRGUIPaneFactory.createBorderLayout_S_Pane(); + icon = new UICheckBox(Inter.getLocText("FR-Designer_Show_Icon")); + text = new UICheckBox(Inter.getLocText("FR-Designer_Show_Text")); + + north.add(icon, BorderLayout.NORTH); + north.add(text, BorderLayout.CENTER); + + nameField = new UITextField(8); + iconPane = new IconDefinePane(); + javaScriptPane = JavaScriptActionPane.createDefault(); + + double p = TableLayout.PREFERRED; + double rowSize[] = {p, p}; + double columnSize[] = {p, p}; + + Component[][] coms = new Component[][]{{new UILabel(Inter.getLocText(new String[]{"Widget", "Printer-Alias"}) + ":"), nameField}, {new UILabel(Inter.getLocText(new String[]{"Widget", "Icon"}) + ":"), iconPane}}; + + JPanel nameIconPane = TableLayoutHelper.createTableLayoutPane(coms, rowSize, columnSize); + + north.add(nameIconPane, BorderLayout.SOUTH); + + north.setBorder(BorderFactory.createTitledBorder(Inter.getLocText(new String[]{"Form-Button", "Property", "Set"}))); + this.add(north, BorderLayout.NORTH); + JPanel none = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); + centerPane = FRGUIPaneFactory.createCardLayout_S_Pane(); + card = new CardLayout(); + centerPane.setLayout(card); + centerPane.add("custom", getCustomPane()); + centerPane.add("export", getExport()); + centerPane.add("none", none); + + this.add(centerPane, BorderLayout.CENTER); + } + + + private JPanel getCustomPane() { + JPanel customPane = FRGUIPaneFactory.createCenterFlowInnerContainer_S_Pane(); + + button = new UIButton(Inter.getLocText("FR-Designer_User_Defined_Event")); + customPane.add(button); + customPane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("FR-Designer_Edit") + "JS", null)); + button.addActionListener(l); + return customPane; + } + + private JPanel getExport() { + JPanel export = FRGUIPaneFactory.createY_AXISBoxInnerContainer_L_Pane(); + // export.setLayout(new BoxLayout(export, BoxLayout.Y_AXIS)); + excelP = new UICheckBox(Inter.getLocText("FR-Designer-Output_Excel_Page")); + excelO = new UICheckBox(Inter.getLocText("FR-Designer-Output_Excel_Simple")); + export.add(excelP); + export.add(Box.createVerticalStrut(2)); + export.add(excelO); + export.add(Box.createVerticalStrut(2)); + + export.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText(new String[]{"Form-Button", "Property", "Set"}), null)); + return export; + } + + @Override + protected String title4PopupWindow() { + return "Button"; + } + + ActionListener l = new ActionListener() { + public void actionPerformed(ActionEvent e) { + if (!(widget instanceof CustomToolBarButton)) { + return; + } + if (javaScriptPane == null || ((CustomToolBarButton)widget).getJSImpl() == null) { + javaScriptPane = JavaScriptActionPane.createDefault(); + } + javaScriptPane.setPreferredSize(new Dimension(750, 500)); + BasicDialog dialog = javaScriptPane.showWindow(SwingUtilities.getWindowAncestor(ButtonPane.this)); + dialog.addDialogActionListener(new DialogActionAdapter() { + @Override + public void doOk() { + ((CustomToolBarButton) widget).setJSImpl(javaScriptPane.updateBean()); + } + }); + dialog.setVisible(true); + } + }; + + /** + * 更新 + * @param widget 对应组件 + */ + public void populate(Widget widget) { + this.widget = widget; + card.show(centerPane, "none"); + if (widget instanceof Button) { + populateDefault(); + } + if (widget instanceof Export) { + populateExport(); + } else if (widget instanceof CustomToolBarButton) { + populateCustomToolBarButton(); + } + } + + private void populateExport(){ + card.show(centerPane, "export"); + Export export = (Export) widget; + this.excelP.setSelected(export.isExcelPAvailable()); + this.excelO.setSelected(export.isExcelOAvailable()); + } + + private void populateCustomToolBarButton(){ + card.show(centerPane, "custom"); + CustomToolBarButton customToolBarButton = (CustomToolBarButton) widget; + if (customToolBarButton.getJSImpl() != null) { + this.javaScriptPane.populateBean(customToolBarButton.getJSImpl()); + } + } + + + + private void populateDefault(){ + Button button = (Button) widget; + this.icon.setSelected(button.isShowIcon()); + this.text.setSelected(button.isShowText()); + this.nameField.setText(button.getText()); + this.iconPane.populate(((Button) widget).getIconName()); + } + + /** + * 更新 + * + * @return 对应组件 + */ + public Widget update() { + if (widget instanceof Export) { + updateExport(); + } else if (widget instanceof CustomToolBarButton) { + ((CustomToolBarButton) widget).setJSImpl(this.javaScriptPane.updateBean()); + } + if (widget instanceof Button) { + updateDefault(); + } + + return widget; + } + + private void updateDefault(){ + ((Button) widget).setShowIcon(this.icon.isSelected()); + ((Button) widget).setShowText(this.text.isSelected()); + ((Button) widget).setText(this.nameField.getText()); + ((Button) widget).setIconName(this.iconPane.update()); + } + + + private void updateExport(){ + Export export = (Export) widget; + export.setExcelPAvailable(this.excelP.isSelected()); + export.setExcelOAvailable(this.excelO.isSelected()); + } + } +} diff --git a/designer_form/src/com/fr/design/mainframe/FSettingToolBar.java b/designer_form/src/com/fr/design/mainframe/FSettingToolBar.java new file mode 100644 index 000000000..00f9dae61 --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/FSettingToolBar.java @@ -0,0 +1,84 @@ +package com.fr.design.mainframe; + +import com.fr.base.BaseUtils; +import com.fr.design.dialog.BasicDialog; +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.general.Inter; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +/** + * Created by harry on 2017-3-2. + */ +public class FSettingToolBar extends JPanel { + private Icon setIcon = BaseUtils.readIcon("com/fr/design/images/toolbarbtn/toolbarbtnsetting.png"); + private Icon delIcon = BaseUtils.readIcon("com/fr/design/images/toolbarbtn/toolbarbtnclear.png"); + private UIButton setButton; + private UIButton delButton; + private FToolBarPane toolBarPane; + + public FSettingToolBar(String name,FToolBarPane toolBarPane) { + super(); + this.setBackground(Color.lightGray); + this.add(new UILabel(name)); + this.toolBarPane = toolBarPane; + setButton = GUICoreUtils.createTransparentButton(setIcon, setIcon, setIcon); + setButton.setToolTipText(Inter.getLocText("Edit_Button_ToolBar")); + setButton.setAction(new SetAction()); + delButton = GUICoreUtils.createTransparentButton(delIcon, delIcon, delIcon); + delButton.setToolTipText(Inter.getLocText("Remove_Button_ToolBar")); + delButton.setAction(new DelAction()); + this.add(setButton); + this.add(delButton); + } + + public void setEnabled(boolean b) { + setButton.setEnabled(b); + delButton.setEnabled(b); + } + + public void addActionListener(ActionListener l){ + setButton.addActionListener(l); + delButton.addActionListener(l); + } + + private class SetAction extends AbstractAction { + + public SetAction() { + this.putValue(Action.SMALL_ICON, setIcon); + } + + @Override + public void actionPerformed(ActionEvent arg0) { + final FEditToolBar tb = new FEditToolBar(); + tb.populate(toolBarPane.getFToolBar()); + BasicDialog dialog = tb.showWindow(DesignerContext.getDesignerFrame()); + dialog.addDialogActionListener(new DialogActionAdapter() { + public void doOk() { + toolBarPane.setFToolBar(tb.update()); + } + }); + dialog.setVisible(true); + } + } + + private class DelAction extends AbstractAction { + + public DelAction() { + this.putValue(Action.SMALL_ICON, delIcon); + } + + @Override + public void actionPerformed(ActionEvent arg0) { + toolBarPane.removeAll(); + toolBarPane.removeButtonList(); + toolBarPane.repaint(); + } + } +} diff --git a/designer_form/src/com/fr/design/mainframe/FToolBar.java b/designer_form/src/com/fr/design/mainframe/FToolBar.java new file mode 100644 index 000000000..5eb519680 --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/FToolBar.java @@ -0,0 +1,68 @@ +package com.fr.design.mainframe; + +import com.fr.form.ui.ToolBar; +import com.fr.form.ui.Widget; +import com.fr.general.Background; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by harry on 2017-3-2. + */ +public class FToolBar { + private List buttonlist = new ArrayList(); + private Background background = null; + private boolean isDefault = true; + + public List getButtonlist() { + return buttonlist; + } + + public void setButtonlist(List buttonlist) { + if (buttonlist == null || buttonlist.size() < 0) { + this.buttonlist = new ArrayList(); + } else { + this.buttonlist = buttonlist; + } + } + + public void addButton(FToolBarButton toolBarButton) { + this.buttonlist.add(toolBarButton); + } + + public void removeButton(FToolBarButton toolBarButton) { + this.buttonlist.remove(toolBarButton); + } + + public void clearButton() { + this.buttonlist.clear(); + } + + public Background getBackground() { + return background; + } + + public void setBackground(Background background) { + this.background = background; + } + + public boolean isDefault() { + return isDefault; + } + + public void setDefault(boolean isDefault) { + this.isDefault = isDefault; + } + + public ToolBar getToolBar() { + Widget[] n = new Widget[this.getButtonlist().size()]; + for (int j = 0; j < this.getButtonlist().size(); j++) { + n[j] = this.getButtonlist().get(j).getWidget(); + } + ToolBar toolBar = new ToolBar(n); + toolBar.setBackground(this.background); + toolBar.setDefault(this.isDefault); + return toolBar; + } +} diff --git a/designer_form/src/com/fr/design/mainframe/FToolBarButton.java b/designer_form/src/com/fr/design/mainframe/FToolBarButton.java new file mode 100644 index 000000000..c65b31757 --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/FToolBarButton.java @@ -0,0 +1,159 @@ +package com.fr.design.mainframe; + +import com.fr.base.BaseUtils; +import com.fr.design.dialog.BasicDialog; +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.gui.core.WidgetOption; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.form.ui.Widget; +import com.fr.form.ui.WidgetManager; +import com.fr.stable.StringUtils; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; + +/** + * Created by harry on 2017-3-2. + */ +public class FToolBarButton extends UIButton implements MouseListener { + private Widget widget; + private WidgetOption no; + + public FToolBarButton(Icon icon, Widget widget) { + this(null, icon, widget); + } + + public FToolBarButton(String text, Icon icon, Widget widget) { + super(text, icon); + this.widget = widget; + if (widget instanceof com.fr.form.ui.Button) { + com.fr.form.ui.Button button = (com.fr.form.ui.Button) widget; + String iconName = button.getIconName(); + if (StringUtils.isNotEmpty(iconName)) { + Image iimage = WidgetManager.getProviderInstance().getIconManager().getIconImage(iconName); + if (iimage != null) { + setIcon(new ImageIcon(iimage)); + } + } + } + this.addMouseListener(this); + setMargin(new Insets(0, 0, 0, 0)); + } + + + /** + * 改变按钮的权限细粒度状态 + * + * @param selectedRole 选择的角色 + * @param isVisible 是否可见 + */ + public void changeAuthorityState(String selectedRole, boolean isVisible) { + this.widget.changeOnlyVisibleAuthorityState(selectedRole, isVisible); + } + + /** + * 是都做过权限细粒度 + * + * @param role 选择的角色 + * @return 若是对应的该角色做过权限细粒度,则返回true + */ + public boolean isDoneAuthorityEdited(String role) { + return this.widget.isDoneVisibleAuthority(role); + } + + public Widget getWidget() { + return this.widget; + } + + + public void setWidget(Widget widget) { + this.widget = widget; + } + + public WidgetOption getNameOption() { + return this.no; + } + + public void setNameOption(WidgetOption no) { + this.no = no; + } + + + protected void paintBorder(Graphics g) { + this.setBorderType(UIButton.NORMAL_BORDER); + super.paintBorder(g); + } + + /** + * 处理鼠标点击事件 + * + * @param e 鼠标点击事件 + */ + public void mouseClicked(MouseEvent e) { + if (BaseUtils.isAuthorityEditing()) { + auhtorityMouseAction(); + return; + } + if (e.getClickCount() >= 2) { + if (this.getParent() instanceof FToolBarPane) { + final FToolBarPane tb = (FToolBarPane) this.getParent(); + final FEditToolBar etb = new FEditToolBar(); + etb.populate(tb.getFToolBar(), this); + BasicDialog dialog = etb.showWindow(DesignerContext.getDesignerFrame()); + dialog.addDialogActionListener(new DialogActionAdapter() { + public void doOk() { + tb.setFToolBar(etb.update()); + } + }); + dialog.setVisible(true); + } + } + } + + + private void auhtorityMouseAction() { + if (this.getParent() instanceof FToolBarPane && this.isEnabled()) { + this.setSelected(!this.isSelected()); + + } + + } + + /** + * 鼠标进入事件 + * + * @param e 鼠标进入事件 + */ + public void mouseEntered(MouseEvent e) { + + } + + /** + * 鼠标退出事件 + * + * @param e 鼠标退出事件 + */ + public void mouseExited(MouseEvent e) { + + } + + /** + * 鼠标按下事件 + * + * @param e 鼠标事件 + */ + public void mousePressed(MouseEvent e) { + + } + + /** + * 鼠标释放事件 + * + * @param e 鼠标事件 + */ + public void mouseReleased(MouseEvent e) { + + } +} diff --git a/designer_form/src/com/fr/design/mainframe/FToolBarPane.java b/designer_form/src/com/fr/design/mainframe/FToolBarPane.java new file mode 100644 index 000000000..f58651bde --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/FToolBarPane.java @@ -0,0 +1,233 @@ +package com.fr.design.mainframe; + +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.dialog.BasicDialog; +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.gui.core.WidgetOption; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.form.ui.ToolBar; +import com.fr.form.ui.Widget; + +import javax.swing.*; +import java.awt.*; +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.UnsupportedFlavorException; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.util.List; + +/** + * Created by harry on 2017-3-2. + */ +public class FToolBarPane extends BasicBeanPane { + + private FToolBar ftoolbar = new FToolBar(); + + public FToolBarPane() { + super(); + this.initComponent(); + } + + + /** + * 添加鼠标监听 + * + * @param mouselistener 鼠标监听 + */ + public void addAuthorityListener(MouseListener mouselistener) { + List list = ftoolbar.getButtonlist(); + for (int i = 0; i < list.size(); i++) { + list.get(i).addMouseListener(mouselistener); + } + } + + public FToolBarPane(FToolBarButton button) { + super(); + this.initComponent(); + this.add(button); + } + + /** + * 初始化组件 + */ + public void initComponent() { + this.addMouseListener(listener); + this.setLayout(FRGUIPaneFactory.createBoxFlowLayout()); + this.setTransferHandler(new ToolBarHandler(TransferHandler.COPY)); + this.setBorder(BorderFactory.createTitledBorder("")); + } + + /** + * 删除鼠标事件 + */ + public void removeDefaultMouseListener() { + this.removeMouseListener(listener); + } + + @Override + protected String title4PopupWindow() { + return "Toolbar"; + } + + public void setSelectedButton(FToolBarButton button) { + this.ftoolbar.addButton(button); + } + + /** + * 添加组件 + * + * @param comp 组件 + * + * @return 被添加的组件 + */ + public Component add(Component comp) { + if (comp instanceof FToolBarButton) { + this.ftoolbar.addButton((FToolBarButton) comp); + } + return super.add(comp); + } + + private Component addComp(Component comp) { + return super.add(comp); + } + + + public void removeButtonList() { + this.ftoolbar.clearButton(); + } + + protected void setFToolBar(FToolBar ftoolbar) { + if (ftoolbar == null) { + ftoolbar = new FToolBar(); + } + this.ftoolbar = ftoolbar; + this.setToolBar(this.ftoolbar.getButtonlist()); + } + + public List getToolBarButtons() { + return ftoolbar.getButtonlist(); + } + + protected FToolBar getFToolBar() { + return this.ftoolbar; + } + + public boolean isEmpty() { + return this.ftoolbar.getButtonlist().size() <= 0; + } + + private void setToolBar(List list) { + if (list == null || list.size() < 0) { + return; + } + this.removeAll(); + for (int i = 0; i < list.size(); i++) { + this.addComp(list.get(i)); + } + this.validate(); + this.repaint(); + + } + + @Override + public void populateBean(ToolBar toolbar) { + this.removeAll(); + this.getFToolBar().clearButton(); + for (int j = 0; j < toolbar.getWidgetSize(); j++) { + Widget widget = toolbar.getWidget(j); + WidgetOption no = WidgetOption.getToolBarButton(widget.getClass()); + if (no == null){ + //如果装了什么插件, 放到了工具栏上, 后来删除了插件, 模板里还存着之前的控件 + continue; + } + + FToolBarButton button = new FToolBarButton(no.optionIcon(), widget); + button.setNameOption(no); + this.add(button); + this.validate(); + this.repaint(); + } + this.getFToolBar().setBackground(toolbar.getBackground()); + this.getFToolBar().setDefault(toolbar.isDefault()); + } + + @Override + public ToolBar updateBean() { + return this.ftoolbar.getToolBar(); + } + + MouseListener listener = new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + if (e.getClickCount() >= 2 && !SwingUtilities.isRightMouseButton(e)) { + final FEditToolBar tb = new FEditToolBar(); + tb.populate(getFToolBar()); + BasicDialog dialog = tb.showWindow(SwingUtilities.getWindowAncestor(FToolBarPane.this)); + dialog.addDialogActionListener(new DialogActionAdapter() { + @Override + public void doOk() { + FToolBarPane.this.setFToolBar(tb.update()); + } + }); + dialog.setVisible(true); + } + } + }; + + + /* + * 拖拽属性设置 + */ + private class ToolBarHandler extends TransferHandler { + private int action; + + public ToolBarHandler(int action) { + this.action = action; + } + + + @Override + public boolean canImport(TransferHandler.TransferSupport support) { + if (!support.isDrop()) { + return false; + } + + if (!support.isDataFlavorSupported(DataFlavor.stringFlavor)) { + return false; + } + + boolean actionSupported = (action & support.getSourceDropActions()) == action; + if (actionSupported) { + support.setDropAction(action); + return true; + } + + return false; + } + + @Override + public boolean importData(TransferHandler.TransferSupport support) { + if (!canImport(support)) { + return false; + } + WidgetOption data; + try { + data = (WidgetOption) support.getTransferable().getTransferData(DataFlavor.stringFlavor); + } catch (UnsupportedFlavorException e) { + return false; + } catch (java.io.IOException e) { + return false; + } + + Widget widget = data.createWidget(); + FToolBarButton btn = new FToolBarButton(data.optionIcon(), widget); + btn.setNameOption(data); + FToolBarPane.this.add(btn); + FToolBarPane.this.validate(); + FToolBarPane.this.repaint(); + return true; + } + + } +} diff --git a/designer_form/src/com/fr/design/mainframe/FormWebWidgetConstants.java b/designer_form/src/com/fr/design/mainframe/FormWebWidgetConstants.java new file mode 100644 index 000000000..e94abdc99 --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/FormWebWidgetConstants.java @@ -0,0 +1,54 @@ +package com.fr.design.mainframe; + +import com.fr.base.BaseUtils; +import com.fr.design.gui.core.WidgetOption; +import com.fr.design.gui.core.WidgetOptionFactory; +import com.fr.form.ui.CustomToolBarButton; +import com.fr.form.web.button.ExcelO; +import com.fr.form.web.button.ExcelP; +import com.fr.form.web.button.Export; +import com.fr.form.web.button.page.*; +import com.fr.general.Inter; + +/** + * Created by harry on 2017-3-3. + */ +public class FormWebWidgetConstants { + + private FormWebWidgetConstants() { + } + + public static WidgetOption[] getFormECToolBarInstance() { + return new WidgetOption[]{FIRST, PREVIOUS, PAGENAVI, NEXT, LAST, EXPORT, EXCELP, EXCELO, CUSTOM_BUTTON}; + } + + // 当前页/总页数 + public static final WidgetOption PAGENAVI = WidgetOptionFactory.createByWidgetClass(Inter.getLocText(new String[]{"HJS-Current_Page", "HF-Number_of_Page"}, new String[]{"/", ""}), + BaseUtils.readIcon("/com/fr/web/images/pageNumber.png"), PageNavi.class); + // 首页 + public static final WidgetOption FIRST = WidgetOptionFactory.createByWidgetClass(Inter.getLocText("FR-Engine_ReportServerP-First"), BaseUtils.readIcon("/com/fr/web/images/first.png"), + First.class); + // 末页 + public static final WidgetOption LAST = WidgetOptionFactory.createByWidgetClass(Inter.getLocText("FR-Engine_ReportServerP-Last"), BaseUtils.readIcon("/com/fr/web/images/last.png"), + Last.class); + // 前一页 + public static final WidgetOption PREVIOUS = WidgetOptionFactory.createByWidgetClass(Inter.getLocText("FR-Engine_ReportServerP-Previous"), + BaseUtils.readIcon("/com/fr/web/images/previous.png"), Previous.class); + // 后一页 + public static final WidgetOption NEXT = WidgetOptionFactory.createByWidgetClass(Inter.getLocText("FR-Engine_ReportServerP-Next"), BaseUtils.readIcon("/com/fr/web/images/next.png"), + Next.class); + + // 导出成Excel 分页导出 + 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); + // 导出成Excel 原样导出 + 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); + // 导出 + public static final WidgetOption EXPORT = WidgetOptionFactory + .createByWidgetClass(Inter.getLocText("FR-Engine_Export"), BaseUtils.readIcon("/com/fr/web/images/export.png"), Export.class); + + public static final WidgetOption CUSTOM_BUTTON = WidgetOptionFactory + .createByWidgetClass(Inter.getLocText(new String[]{"Custom", "Form-Button"}), CustomToolBarButton.class); + +} diff --git a/designer_form/src/com/fr/design/mainframe/widget/accessibles/AccessibleECToolBarEditor.java b/designer_form/src/com/fr/design/mainframe/widget/accessibles/AccessibleECToolBarEditor.java new file mode 100644 index 000000000..e7bf4662f --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/widget/accessibles/AccessibleECToolBarEditor.java @@ -0,0 +1,57 @@ +package com.fr.design.mainframe.widget.accessibles; + +import com.fr.design.dialog.BasicDialog; +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.gui.core.WidgetOption; +import com.fr.design.mainframe.FormWebWidgetConstants; +import com.fr.design.mainframe.widget.editors.ECToolBarPane; +import com.fr.design.mainframe.widget.wrappers.ECToolBarWrapper; +import com.fr.form.web.FToolBarManager; +import com.fr.stable.ArrayUtils; + +import javax.swing.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * Created by harry on 2017-2-23. + */ +public class AccessibleECToolBarEditor extends UneditableAccessibleEditor { + private ECToolBarPane pane; + + public AccessibleECToolBarEditor() { + super(new ECToolBarWrapper()); + } + + @Override + protected void showEditorPane() { + if (pane == null) { + pane = new ECToolBarPane(); + pane.setDefaultToolBar(getDefaultToolBarManager(), getToolBarInstance()); + } + BasicDialog dlg = pane.showToolBarWindow(SwingUtilities.getWindowAncestor(this), new DialogActionAdapter() { + + @Override + public void doOk() { + setValue(pane.updateBean()); + fireStateChanged(); + } + }); + FToolBarManager[] managers = (FToolBarManager[]) getValue(); + pane.setCheckBoxSelected(ArrayUtils.isNotEmpty(managers)); + pane.populateBean((FToolBarManager[]) getValue()); + dlg.setVisible(true); + } + + private FToolBarManager getDefaultToolBarManager() { + return FToolBarManager.createDefaultToolBar(); + } + + private WidgetOption[] getToolBarInstance() { + List defaultOptions = Arrays.asList(FormWebWidgetConstants.getFormECToolBarInstance()); + List options = new ArrayList(); + options.addAll(defaultOptions); + return options.toArray(new WidgetOption[options.size()]); + } +} diff --git a/designer_form/src/com/fr/design/mainframe/widget/editors/ECToolBarEditor.java b/designer_form/src/com/fr/design/mainframe/widget/editors/ECToolBarEditor.java new file mode 100644 index 000000000..eea19ced7 --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/widget/editors/ECToolBarEditor.java @@ -0,0 +1,13 @@ +package com.fr.design.mainframe.widget.editors; + +import com.fr.design.mainframe.widget.accessibles.AccessibleECToolBarEditor; +import com.fr.design.mainframe.widget.accessibles.AccessiblePropertyEditor; + +/** + * Created by harry on 2017-2-23. + */ +public class ECToolBarEditor extends AccessiblePropertyEditor { + public ECToolBarEditor() { + super(new AccessibleECToolBarEditor()); + } +} diff --git a/designer_form/src/com/fr/design/mainframe/widget/editors/ECToolBarPane.java b/designer_form/src/com/fr/design/mainframe/widget/editors/ECToolBarPane.java new file mode 100644 index 000000000..ea2bbe7a4 --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/widget/editors/ECToolBarPane.java @@ -0,0 +1,304 @@ +package com.fr.design.mainframe.widget.editors; + +import com.fr.base.BaseUtils; +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.gui.core.WidgetOption; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.icheckbox.UICheckBox; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.FSettingToolBar; +import com.fr.design.mainframe.FToolBarButton; +import com.fr.design.mainframe.FToolBarPane; +import com.fr.form.ui.Widget; +import com.fr.form.web.FLocation; +import com.fr.form.web.FToolBarManager; +import com.fr.general.Inter; +import com.fr.stable.ArrayUtils; +import com.fr.stable.Constants; +import com.fr.stable.StringUtils; + +import javax.swing.*; +import javax.swing.table.DefaultTableCellRenderer; +import javax.swing.table.DefaultTableModel; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.image.ImageObserver; +import java.util.*; +import java.util.List; + +/** + * Created by harry on 2017-2-23. + */ +public class ECToolBarPane extends BasicBeanPane { + private static final int COLUMN = 2; + private int row = 6; + private DefaultTableModel toolbarButtonTableModel; + private JTable layoutTable; + private UICheckBox isUseToolBarCheckBox = new UICheckBox(Inter.getLocText("FR-Designer_Use_ToolBar") + ":"); // 是否使用工具栏 + + private FToolBarPane northToolBar; + private FToolBarPane southToolBar; + private FToolBarManager defaultToolBar; + + + public ECToolBarPane() { + toolbarButtonTableModel = new TableModel(row ,COLUMN); + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + JPanel north = FRGUIPaneFactory.createBorderLayout_S_Pane(); + UIButton defaultButton = new UIButton(Inter.getLocText("FR-Designer_Restore_Default")); + // 恢复默认按钮 + defaultButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + northToolBar.removeButtonList(); + northToolBar.removeAll(); + southToolBar.removeButtonList(); + southToolBar.removeAll(); + if (defaultToolBar == null) { + return; + } + FToolBarManager toolBarManager = defaultToolBar; + toolBarManager.setToolBarLocation(FLocation.createTopEmbedLocation()); + FToolBarManager[] tbm = new FToolBarManager[] { toolBarManager }; + populateBean(tbm); + ECToolBarPane.this.repaint(); + } + }); + + north.add(isUseToolBarCheckBox, BorderLayout.WEST); + JPanel aa = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane(); + aa.add(defaultButton); + north.add(aa, BorderLayout.CENTER); + this.add(north, BorderLayout.NORTH); + + northToolBar = new FToolBarPane(); + northToolBar.setPreferredSize(new Dimension(ImageObserver.WIDTH, 26)); + northToolBar.setBackground(Color.lightGray); + + UIButton topButton = new UIButton(BaseUtils.readIcon("com/fr/design/images/arrow/arrow_up.png")); + topButton.setBorder(null); + topButton.setOpaque(false); + topButton.setContentAreaFilled(false); + topButton.setFocusPainted(false); + topButton.setRequestFocusEnabled(false); + topButton.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + if (isSelectedtable()) { + WidgetOption no = (WidgetOption)layoutTable.getValueAt(layoutTable.getSelectedRow(), layoutTable.getSelectedColumn()); + Widget widget = no.createWidget(); + FToolBarButton tb = new FToolBarButton(no.optionIcon(), widget); + tb.setNameOption(no); + northToolBar.add(tb); + northToolBar.validate(); + northToolBar.repaint(); + } else { + JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText("FR-Designer_ChooseOneButton")); + } + } + }); + + UIButton downButton = new UIButton(BaseUtils.readIcon("com/fr/design/images/arrow/arrow_down.png")); + downButton.setBorder(null); + downButton.setMargin(null); + downButton.setOpaque(false); + downButton.setContentAreaFilled(false); + downButton.setFocusPainted(false); + downButton.setRequestFocusEnabled(false); + downButton.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + if (isSelectedtable()) { + WidgetOption no = (WidgetOption)layoutTable.getValueAt(layoutTable.getSelectedRow(), layoutTable.getSelectedColumn()); + Widget widget = no.createWidget(); + FToolBarButton tb = new FToolBarButton(no.optionIcon(), widget); + tb.setNameOption(no); + southToolBar.add(tb); + southToolBar.validate(); + southToolBar.repaint(); + } else { + JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText("FR-Designer_ChooseOneButton")); + } + } + }); + + initLayoutTable(); + + JPanel center = FRGUIPaneFactory.createBorderLayout_S_Pane(); + center.setBackground(Color.white); + center.add(topButton, BorderLayout.NORTH); + JPanel small = FRGUIPaneFactory.createBorderLayout_S_Pane(); + small.setBackground(Color.white); + small.add(new UILabel(StringUtils.BLANK), BorderLayout.NORTH); + small.add(layoutTable, BorderLayout.CENTER); + center.add(small, BorderLayout.CENTER); + center.add(downButton, BorderLayout.SOUTH); + southToolBar = new FToolBarPane(); + southToolBar.setPreferredSize(new Dimension(ImageObserver.WIDTH, 26)); + southToolBar.setBackground(Color.lightGray); + JPanel movePane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + JPanel northContentPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + FSettingToolBar top = new FSettingToolBar(Inter.getLocText("FR-Designer_ToolBar_Top"), northToolBar); + northContentPane.add(top, BorderLayout.EAST); + northContentPane.add(northToolBar, BorderLayout.CENTER); + northContentPane.setBackground(Color.lightGray); + + JPanel southContentPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + FSettingToolBar bottom = new FSettingToolBar(Inter.getLocText("FR-Designer_ToolBar_Bottom"), southToolBar); + southContentPane.add(bottom, BorderLayout.EAST); + southContentPane.add(southToolBar, BorderLayout.CENTER); + southContentPane.setBackground(Color.lightGray); + + movePane.add(northContentPane, BorderLayout.NORTH); + movePane.add(center, BorderLayout.CENTER); + movePane.add(southContentPane, BorderLayout.SOUTH); + + this.add(new JScrollPane(movePane), BorderLayout.CENTER); + + isUseToolBarCheckBox.setSelected(false); + } + + 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)) { + WidgetOption no = (WidgetOption)layoutTable.getValueAt(layoutTable.getSelectedRow(), layoutTable.getSelectedColumn()); + Widget widget = no.createWidget(); + FToolBarButton tb = new FToolBarButton(no.optionIcon(), widget); + tb.setNameOption(no); + northToolBar.add(tb); + northToolBar.validate(); + northToolBar.repaint(); + } + } + }); + } + + private boolean isSelectedtable() { + for (int i = 0; i < layoutTable.getColumnCount(); i++) { + if (layoutTable.isColumnSelected(i)) { + return true; + } + } + return false; + } + + /** + * 是否被选中 + * @return 同上 + */ + public boolean isUseToolbar() { + return this.isUseToolBarCheckBox.isSelected(); + } + + public void setDefaultToolBar(FToolBarManager defaultToolBar, WidgetOption[] buttonArray) { + this.defaultToolBar = defaultToolBar; + if (buttonArray != null) { + for (int i = 0; i < buttonArray.length; i++) { + toolbarButtonTableModel.setValueAt(buttonArray[i], i % row, i / row); + } + } + + } + + DefaultTableCellRenderer tableRenderer = new DefaultTableCellRenderer() { + @Override + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { + super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); + + if (value instanceof WidgetOption) { + WidgetOption nameOption = (WidgetOption)value; + this.setText(nameOption.optionName()); + + Icon icon = nameOption.optionIcon(); + if (icon != null) { + this.setIcon(icon); + } + } + if (value == null) { + this.setText(StringUtils.EMPTY); + this.setIcon(null); + } + return this; + } + }; + + @Override + protected String title4PopupWindow() { + return Inter.getLocText(new String[]{"Form-EC_toolbar", "Set"}); + } + + public void setCheckBoxSelected(boolean b) { + this.isUseToolBarCheckBox.setSelected(b); + } + + @Override + public void populateBean(FToolBarManager[] toolBarManager) { + if (ArrayUtils.isEmpty(toolBarManager)) { + defaultToolBar.setToolBarLocation(FLocation.createTopEmbedLocation()); + toolBarManager = new FToolBarManager[] { defaultToolBar }; + } + if (ArrayUtils.isEmpty(toolBarManager)) { + return; + } + for (int i = 0; i < toolBarManager.length; i++) { + FLocation location = toolBarManager[i].getToolBarLocation(); + if (location instanceof FLocation.Embed) { + if (((FLocation.Embed)location).getPosition() == Constants.TOP) { + northToolBar.populateBean(toolBarManager[i].getToolBar()); + } else if (((FLocation.Embed)location).getPosition() == Constants.BOTTOM) { + southToolBar.populateBean(toolBarManager[i].getToolBar()); + } + } + } + } + + @Override + public FToolBarManager[] updateBean() { + if(!isUseToolbar()){ + return new FToolBarManager[0]; + } + List toolBarManagerList = new ArrayList(); + if (!northToolBar.isEmpty()) { + FToolBarManager north = new FToolBarManager(); + north.setToolBar(northToolBar.updateBean()); + north.setToolBarLocation(FLocation.createTopEmbedLocation()); + toolBarManagerList.add(north); + } + + if (!southToolBar.isEmpty()) { + FToolBarManager south = new FToolBarManager(); + south.setToolBar(southToolBar.updateBean()); + south.setToolBarLocation(FLocation.createBottomEmbedLocation()); + toolBarManagerList.add(south); + } + return toolBarManagerList.toArray(new FToolBarManager[toolBarManagerList.size()]); + } + + private class TableModel extends DefaultTableModel { + public TableModel(int i, int j) { + super(i, j); + } + + // 禁止jtable的双击编辑功能 + public boolean isCellEditable(int row, int column) { + return false; + } + } +} diff --git a/designer_form/src/com/fr/design/mainframe/widget/wrappers/ECToolBarWrapper.java b/designer_form/src/com/fr/design/mainframe/widget/wrappers/ECToolBarWrapper.java new file mode 100644 index 000000000..5faf54348 --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/widget/wrappers/ECToolBarWrapper.java @@ -0,0 +1,34 @@ +package com.fr.design.mainframe.widget.wrappers; + +import com.fr.design.Exception.ValidationException; +import com.fr.design.designer.properties.Decoder; +import com.fr.design.designer.properties.Encoder; +import com.fr.form.web.FToolBarManager; +import com.fr.general.Inter; + +/** + * Created by harry on 2017-3-1. + */ +public class ECToolBarWrapper implements Encoder, Decoder { + @Override + public Object decode(String txt) { + return null; + } + + @Override + public void validate(String txt) throws ValidationException { + + } + + @Override + public String encode(Object v) { + if (v == null) { + return null; + } + FToolBarManager[] toolBarManager = (FToolBarManager[])v; + if (toolBarManager.length != 0) { + return Inter.getLocText("FR-Designer_Open"); + } + return Inter.getLocText("FR-Designer_Close"); + } +} From 2a3fa77d2bca97524077af7d374aa13b8f543cdf Mon Sep 17 00:00:00 2001 From: frharry Date: Wed, 8 Mar 2017 19:33:42 +0800 Subject: [PATCH 167/343] =?UTF-8?q?REPORT-1344=20=E8=A1=A8=E5=8D=95?= =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E5=9D=97=E7=BF=BB=E9=A1=B5=E6=94=B9=E8=BF=9B?= =?UTF-8?q?=E5=B9=B6=E5=A2=9E=E5=8A=A0=E5=B1=80=E9=83=A8=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/locale/designer.properties | 2 ++ .../design/locale/designer_en_US.properties | 2 ++ .../design/locale/designer_ja_JP.properties | 2 ++ .../design/locale/designer_ko_KR.properties | 2 ++ .../design/locale/designer_zh_CN.properties | 2 ++ .../design/locale/designer_zh_TW.properties | 2 ++ .../fr/design/mainframe/FSettingToolBar.java | 4 ++-- .../fr/design/mainframe/FToolBarButton.java | 21 +++++++++++++++---- 8 files changed, 31 insertions(+), 6 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 0a66c326e..3d488421b 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -91,6 +91,7 @@ FR-Designer_DS-Dictionary= FR-Designer_Data-confusion= FR-Designer_Data_Type= FR-Designer_Double_Click_Edit_OR_Clear= +FR-Designer_Edit_Button_ToolBar= FR-Designer_Email= FR-Designer_Enabled= FR-Designer_End-Date= @@ -161,6 +162,7 @@ FR-Designer_Refresh_Parameter_In_SQL= FR-Designer_Reg_Expressions= FR-Designer_Reg_Max_Length= FR-Designer_Reg_Min_Length= +FR-Designer_Remove_Button_ToolBar= FR-Designer_ReportColumns-Columns= FR-Designer_Return-Date= FR-Designer_RichText= diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index b0acea3ab..6652599b9 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -91,6 +91,7 @@ FR-Designer_DS-Dictionary=Data Dictionary FR-Designer_Data-confusion=Data Confusion FR-Designer_Data_Type=Data type FR-Designer_Double_Click_Edit_OR_Clear=Double Click to Edit or Clear +FR-Designer_Edit_Button_ToolBar=Edit Button ToolBar FR-Designer_Email=Mail FR-Designer_Enabled=Enabled FR-Designer_End-Date=End Date @@ -163,6 +164,7 @@ FR-Designer_Refresh_Parameter_In_SQL=Whether to refresh parameters in the SQL FR-Designer_Reg_Expressions=Regular expressions FR-Designer_Reg_Max_Length=max length FR-Designer_Reg_Min_Length=min length +FR-Designer_Remove_Button_ToolBar=Remove Button ToolBar FR-Designer_ReportColumns-Columns=Multi-columns/lines FR-Designer_Return-Date=Return Date FR-Designer_RichText=Insert Rich Text diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index d86d0a164..a6051651a 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -91,6 +91,7 @@ FR-Designer_DS-Dictionary=\u30C7\u30FC\u30BF\u5B57\u5178 FR-Designer_Data-confusion=\u30C7\u30FC\u30BF\u6DF7\u4EA4 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_Edit_Button_ToolBar=\u30DC\u30BF\u30F3\u306B\u3042\u308B\u30C4\u30FC\u30EB\u6B04\u7DE8\u96C6 FR-Designer_Email=\u30E1\u30FC\u30EB FR-Designer_Enabled=\u4F7F\u7528\u53EF\u80FD FR-Designer_End-Date=\u7D42\u4E86\u65E5\u671F @@ -162,6 +163,7 @@ 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_Max_Length=\u6700\u5927\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_Return-Date=\u65E5\u671F\u306B\u623B\u308B FR-Designer_RichText=\u30EA\u30C3\u30C1\u6587\u66F8\u633F\u5165 diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index dfb5ec78f..388919ddc 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -91,6 +91,7 @@ FR-Designer_DS-Dictionary=\uB370\uC774\uD130\uC0AC\uC804 FR-Designer_Data-confusion=\uB370\uC774\uD130\uD63C\uD569 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_Edit_Button_ToolBar=\uD0A4\uAC00\uC788\uB294\uD234\uBC14\uD3B8\uC9D1 FR-Designer_Email=\uBA54\uC77C FR-Designer_Enabled=\uC0AC\uC6A9\uAC00\uB2A5 FR-Designer_End-Date=\uC885\uB8CC\uB0A0\uC9DC @@ -162,6 +163,7 @@ FR-Designer_Refresh_Parameter_In_SQL=SQL\uC758\uB9E4\uAC1C\uBCC0\uC218\uB97C\uC0 FR-Designer_Reg_Expressions=\uC815\uADDC\uD45C\uD604\uC2DD FR-Designer_Reg_Max_Length=\uCD5C\uB300\uAE38\uC774 FR-Designer_Reg_Min_Length=\uCD5C\uC18C\uAE38\uC774 +FR-Designer_Remove_Button_ToolBar=\uD0A4\uAC00\uC788\uB294\uD234\uBC14\uC81C\uAC70 FR-Designer_ReportColumns-Columns=\uC140\uB098\uB204\uAE30 FR-Designer_Return-Date=\uB0A0\uC9DC\uB3CC\uC544\uAC00\uAE30 FR-Designer_RichText=\uB9AC\uCE58\uD14D\uC2A4\uD2B8\uBC15\uC2A4\uC0BD\uC785 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index bdb97b094..c114e3a41 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -91,6 +91,7 @@ FR-Designer_DS-Dictionary=\u6570\u636E\u5B57\u5178 FR-Designer_Data-confusion=\u6570\u636E\u6DF7\u6DC6 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_Edit_Button_ToolBar=\u7F16\u8F91\u6309\u94AE\u6240\u5728\u5DE5\u5177\u680F FR-Designer_Email=\u90AE\u4EF6 FR-Designer_Enabled=\u53EF\u7528 FR-Designer_End-Date=\u7ED3\u675F\u65E5\u671F @@ -163,6 +164,7 @@ FR-Designer_Refresh_Parameter_In_SQL=\u662F\u5426\u5237\u65B0SQL\u4E2D\u7684\u53 FR-Designer_Reg_Expressions=\u6B63\u5219\u8868\u8FBE\u5F0F FR-Designer_Reg_Max_Length=\u6700\u5927\u957F\u5EA6 FR-Designer_Reg_Min_Length=\u6700\u5C0F\u957F\u5EA6 +FR-Designer_Remove_Button_ToolBar=\u79FB\u9664\u6309\u94AE\u6240\u5728\u5DE5\u5177\u680F FR-Designer_ReportColumns-Columns=\u5206\u680F FR-Designer_Return-Date=\u8FD4\u56DE\u65E5\u671F FR-Designer_RichText=\u63D2\u5165\u5BCC\u6587\u672C diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 3acd7487c..fc7c2046d 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -91,6 +91,7 @@ FR-Designer_DS-Dictionary=\u8CC7\u6599\u5B57\u5178 FR-Designer_Data-confusion=\u8CC7\u6599\u6DF7\u6DC6 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_Edit_Button_ToolBar=\u7DE8\u8F2F\u6309\u9215\u6240\u5728\u5DE5\u5177\u6B04 FR-Designer_Email=\u90F5\u4EF6 FR-Designer_Enabled=\u53EF\u7528 FR-Designer_End-Date=\u7D50\u675F\u65E5\u671F @@ -162,6 +163,7 @@ FR-Designer_Refresh_Parameter_In_SQL=\u5728SQL\u4E2D\u91CD\u65B0\u6574\u7406\u76 FR-Designer_Reg_Expressions=\u6B63\u5247\u8868\u9054\u5F0F FR-Designer_Reg_Max_Length=\u6700\u5927\u9577\u5EA6 FR-Designer_Reg_Min_Length=\u6700\u5C0F\u9577\u5EA6 +FR-Designer_Remove_Button_ToolBar=\u79FB\u9664\u6309\u9215\u6240\u5728\u5DE5\u5177\u6B04 FR-Designer_ReportColumns-Columns=\u5831\u8868\u6B04\u4F4D FR-Designer_Return-Date=\u8FD4\u56DE\u65E5\u671F FR-Designer_RichText= RTF diff --git a/designer_form/src/com/fr/design/mainframe/FSettingToolBar.java b/designer_form/src/com/fr/design/mainframe/FSettingToolBar.java index 00f9dae61..f059c9dff 100644 --- a/designer_form/src/com/fr/design/mainframe/FSettingToolBar.java +++ b/designer_form/src/com/fr/design/mainframe/FSettingToolBar.java @@ -29,10 +29,10 @@ public class FSettingToolBar extends JPanel { this.add(new UILabel(name)); this.toolBarPane = toolBarPane; setButton = GUICoreUtils.createTransparentButton(setIcon, setIcon, setIcon); - setButton.setToolTipText(Inter.getLocText("Edit_Button_ToolBar")); + setButton.setToolTipText(Inter.getLocText("FR-Designer_Edit_Button_ToolBar")); setButton.setAction(new SetAction()); delButton = GUICoreUtils.createTransparentButton(delIcon, delIcon, delIcon); - delButton.setToolTipText(Inter.getLocText("Remove_Button_ToolBar")); + delButton.setToolTipText(Inter.getLocText("FR-Designer_Remove_Button_ToolBar")); delButton.setAction(new DelAction()); this.add(setButton); this.add(delButton); diff --git a/designer_form/src/com/fr/design/mainframe/FToolBarButton.java b/designer_form/src/com/fr/design/mainframe/FToolBarButton.java index c65b31757..339a624be 100644 --- a/designer_form/src/com/fr/design/mainframe/FToolBarButton.java +++ b/designer_form/src/com/fr/design/mainframe/FToolBarButton.java @@ -1,12 +1,15 @@ package com.fr.design.mainframe; import com.fr.base.BaseUtils; +import com.fr.base.GraphHelper; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.gui.core.WidgetOption; -import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.roleAuthority.ReportAndFSManagePane; +import com.fr.design.utils.gui.GUIPaintUtils; import com.fr.form.ui.Widget; import com.fr.form.ui.WidgetManager; +import com.fr.stable.Constants; import com.fr.stable.StringUtils; import javax.swing.*; @@ -17,7 +20,7 @@ import java.awt.event.MouseListener; /** * Created by harry on 2017-3-2. */ -public class FToolBarButton extends UIButton implements MouseListener { +public class FToolBarButton extends JButton implements MouseListener { private Widget widget; private WidgetOption no; @@ -27,6 +30,7 @@ public class FToolBarButton extends UIButton implements MouseListener { public FToolBarButton(String text, Icon icon, Widget widget) { super(text, icon); + init(); this.widget = widget; if (widget instanceof com.fr.form.ui.Button) { com.fr.form.ui.Button button = (com.fr.form.ui.Button) widget; @@ -42,6 +46,11 @@ public class FToolBarButton extends UIButton implements MouseListener { setMargin(new Insets(0, 0, 0, 0)); } + private void init() { + setBackground(null); + setRolloverEnabled(true); + } + /** * 改变按钮的权限细粒度状态 @@ -82,8 +91,12 @@ public class FToolBarButton extends UIButton implements MouseListener { protected void paintBorder(Graphics g) { - this.setBorderType(UIButton.NORMAL_BORDER); - super.paintBorder(g); + paintBorder(g, this); + } + + protected void paintBorder(Graphics g, FToolBarButton b) { + String selectedRoles = ReportAndFSManagePane.getInstance().getRoleTree().getSelectedRoleName(); + GUIPaintUtils.drawBorder((Graphics2D) g, 0, 0, b.getWidth(), b.getHeight(), true, Constants.NULL, b.isDoneAuthorityEdited(selectedRoles)); } /** From 346e7337d9cf981624c2b5886c47e7ef753b7021 Mon Sep 17 00:00:00 2001 From: frharry Date: Wed, 8 Mar 2017 20:40:08 +0800 Subject: [PATCH 168/343] =?UTF-8?q?REPORT-1344=20=E8=A1=A8=E5=8D=95?= =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E5=9D=97=E7=BF=BB=E9=A1=B5=E6=94=B9=E8=BF=9B?= =?UTF-8?q?=E5=B9=B6=E5=A2=9E=E5=8A=A0=E5=B1=80=E9=83=A8=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/designer/creator/XElementCase.java | 7 +- ...FEditToolBar.java => FormEditToolBar.java} | 40 +++++----- ...ngToolBar.java => FormSettingToolBar.java} | 8 +- .../{FToolBar.java => FormToolBar.java} | 14 ++-- ...lBarButton.java => FormToolBarButton.java} | 17 ++--- ...FToolBarPane.java => FormToolBarPane.java} | 42 +++++------ .../mainframe/FormWebWidgetConstants.java | 2 +- ...> AccessibleElementCaseToolBarEditor.java} | 26 +++---- .../widget/editors/ECToolBarEditor.java | 13 ---- .../editors/ElementCaseToolBarEditor.java | 13 ++++ ...rPane.java => ElementCaseToolBarPane.java} | 74 +++++++++---------- ...er.java => ElementCaseToolBarWrapper.java} | 6 +- 12 files changed, 129 insertions(+), 133 deletions(-) rename designer_form/src/com/fr/design/mainframe/{FEditToolBar.java => FormEditToolBar.java} (92%) rename designer_form/src/com/fr/design/mainframe/{FSettingToolBar.java => FormSettingToolBar.java} (92%) rename designer_form/src/com/fr/design/mainframe/{FToolBar.java => FormToolBar.java} (76%) rename designer_form/src/com/fr/design/mainframe/{FToolBarButton.java => FormToolBarButton.java} (87%) rename designer_form/src/com/fr/design/mainframe/{FToolBarPane.java => FormToolBarPane.java} (82%) rename designer_form/src/com/fr/design/mainframe/widget/accessibles/{AccessibleECToolBarEditor.java => AccessibleElementCaseToolBarEditor.java} (62%) delete mode 100644 designer_form/src/com/fr/design/mainframe/widget/editors/ECToolBarEditor.java create mode 100644 designer_form/src/com/fr/design/mainframe/widget/editors/ElementCaseToolBarEditor.java rename designer_form/src/com/fr/design/mainframe/widget/editors/{ECToolBarPane.java => ElementCaseToolBarPane.java} (80%) rename designer_form/src/com/fr/design/mainframe/widget/wrappers/{ECToolBarWrapper.java => ElementCaseToolBarWrapper.java} (79%) diff --git a/designer_form/src/com/fr/design/designer/creator/XElementCase.java b/designer_form/src/com/fr/design/designer/creator/XElementCase.java index 584b630f8..c7cd3b493 100644 --- a/designer_form/src/com/fr/design/designer/creator/XElementCase.java +++ b/designer_form/src/com/fr/design/designer/creator/XElementCase.java @@ -10,12 +10,9 @@ import com.fr.design.fun.WidgetPropertyUIProvider; import com.fr.design.fun.impl.AbstractFormElementCaseEditorProvider; import com.fr.design.gui.ilable.UILabel; import com.fr.design.mainframe.*; -import com.fr.design.mainframe.widget.editors.BooleanEditor; -import com.fr.design.mainframe.widget.editors.ECToolBarEditor; +import com.fr.design.mainframe.widget.editors.ElementCaseToolBarEditor; import com.fr.design.mainframe.widget.editors.PaddingMarginEditor; import com.fr.design.mainframe.widget.editors.WLayoutBorderStyleEditor; -import com.fr.design.mainframe.widget.renderer.LayoutBorderStyleRenderer; -import com.fr.design.mainframe.widget.renderer.PaddingMarginCellRenderer; import com.fr.form.FormElementCaseContainerProvider; import com.fr.form.FormElementCaseProvider; import com.fr.form.FormProvider; @@ -105,7 +102,7 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme new CRPropertyDescriptor("margin", this.data.getClass()).setEditorClass(PaddingMarginEditor.class) .setI18NName(Inter.getLocText("FR-Layout_Padding")) .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced"), - new CRPropertyDescriptor("ToolBars", this.data.getClass()).setEditorClass(ECToolBarEditor.class) + new CRPropertyDescriptor("ToolBars", this.data.getClass()).setEditorClass(ElementCaseToolBarEditor.class) .setI18NName(Inter.getLocText("Form-EC_toolbar")) .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced") }; diff --git a/designer_form/src/com/fr/design/mainframe/FEditToolBar.java b/designer_form/src/com/fr/design/mainframe/FormEditToolBar.java similarity index 92% rename from designer_form/src/com/fr/design/mainframe/FEditToolBar.java rename to designer_form/src/com/fr/design/mainframe/FormEditToolBar.java index 4ca4ab9c1..d0e217f27 100644 --- a/designer_form/src/com/fr/design/mainframe/FEditToolBar.java +++ b/designer_form/src/com/fr/design/mainframe/FormEditToolBar.java @@ -36,14 +36,14 @@ import java.util.*; /** * Created by harry on 2017-3-2. */ -public class FEditToolBar extends BasicPane { +public class FormEditToolBar extends BasicPane { private JList list; private DefaultListModel listModel; private JPanel right; private CardLayout card; private ButtonPane bp; - private FToolBarButton lastButton; + private FormToolBarButton lastButton; private Background background = null; private UICheckBox defaultCheckBox; @@ -52,8 +52,8 @@ public class FEditToolBar extends BasicPane { if (lastButton != null) { lastButton.setWidget(bp.update()); } - if (list.getSelectedValue() instanceof FToolBarButton) { - lastButton = (FToolBarButton) list.getSelectedValue(); + if (list.getSelectedValue() instanceof FormToolBarButton) { + lastButton = (FormToolBarButton) list.getSelectedValue(); if (lastButton.getWidget() instanceof Button) { card.show(right, "button"); bp.populate(lastButton.getWidget()); @@ -73,12 +73,12 @@ public class FEditToolBar extends BasicPane { public void actionPerformed(ActionEvent arg0) { final BackgroundPane backgroundPane = new BackgroundPane(); BasicDialog dialog = backgroundPane.showWindow(DesignerContext.getDesignerFrame()); - backgroundPane.populate(FEditToolBar.this.background); + backgroundPane.populate(FormEditToolBar.this.background); dialog.addDialogActionListener(new DialogActionAdapter() { public void doOk() { - FEditToolBar.this.background = backgroundPane.update(); - if (FEditToolBar.this.background != null) { - FEditToolBar.this.defaultCheckBox.setSelected(false); + FormEditToolBar.this.background = backgroundPane.update(); + if (FormEditToolBar.this.background != null) { + FormEditToolBar.this.defaultCheckBox.setSelected(false); } } }); @@ -86,7 +86,7 @@ public class FEditToolBar extends BasicPane { } }; - public FEditToolBar() { + public FormEditToolBar() { initComponent(); } @@ -138,8 +138,8 @@ public class FEditToolBar extends BasicPane { public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); - if (value instanceof FToolBarButton) { - FToolBarButton button = (FToolBarButton) value; + if (value instanceof FormToolBarButton) { + FormToolBarButton button = (FormToolBarButton) value; this.setText(button.getNameOption().optionName()); this.setIcon(button.getNameOption().optionIcon()); } @@ -152,11 +152,11 @@ public class FEditToolBar extends BasicPane { return Inter.getLocText("FR-Designer_Edit"); } - public void populate(FToolBar ftoolbar) { + public void populate(FormToolBar ftoolbar) { this.populate(ftoolbar, null); } - public void populate(FToolBar ftoolbar, FToolBarButton button) { + public void populate(FormToolBar ftoolbar, FormToolBarButton button) { if (ftoolbar == null) { return; } @@ -176,11 +176,11 @@ public class FEditToolBar extends BasicPane { this.defaultCheckBox.setSelected(ftoolbar.isDefault() ? true : false); } - public FToolBar update() { + public FormToolBar update() { if (this.list.getSelectedIndex() > -1) { for (int i = 0; i < listModel.getSize(); i++) { this.list.setSelectedIndex(i); - FToolBarButton toolBarButton = (FToolBarButton) this.list.getSelectedValue(); + FormToolBarButton toolBarButton = (FormToolBarButton) this.list.getSelectedValue(); Widget widget = this.bp.update(); toolBarButton.setWidget(widget); if (widget instanceof Button) { @@ -192,11 +192,11 @@ public class FEditToolBar extends BasicPane { } } } - java.util.List list = new ArrayList(); + java.util.List list = new ArrayList(); for (int i = 0; i < listModel.size(); i++) { - list.add((FToolBarButton) listModel.get(i)); + list.add((FormToolBarButton) listModel.get(i)); } - FToolBar ftoolBar = new FToolBar(); + FormToolBar ftoolBar = new FormToolBar(); ftoolBar.setButtonlist(list); ftoolBar.setDefault(this.defaultCheckBox.isSelected()); @@ -284,10 +284,10 @@ public class FEditToolBar extends BasicPane { */ public void actionPerformed(ActionEvent e) { int i = list.getSelectedIndex(); - if (i < 0 || !(listModel.getElementAt(i) instanceof FToolBarButton)) { + if (i < 0 || !(listModel.getElementAt(i) instanceof FormToolBarButton)) { return; } - int val = JOptionPane.showConfirmDialog(FEditToolBar.this, Inter.getLocText("FR-Designer_Are_You_Sure_To_Delete_The_Data") + "?", "Message", JOptionPane.YES_NO_OPTION); + int val = JOptionPane.showConfirmDialog(FormEditToolBar.this, Inter.getLocText("FR-Designer_Are_You_Sure_To_Delete_The_Data") + "?", "Message", JOptionPane.YES_NO_OPTION); if (val != JOptionPane.YES_OPTION) { return; } diff --git a/designer_form/src/com/fr/design/mainframe/FSettingToolBar.java b/designer_form/src/com/fr/design/mainframe/FormSettingToolBar.java similarity index 92% rename from designer_form/src/com/fr/design/mainframe/FSettingToolBar.java rename to designer_form/src/com/fr/design/mainframe/FormSettingToolBar.java index f059c9dff..2ed8a6984 100644 --- a/designer_form/src/com/fr/design/mainframe/FSettingToolBar.java +++ b/designer_form/src/com/fr/design/mainframe/FormSettingToolBar.java @@ -16,14 +16,14 @@ import java.awt.event.ActionListener; /** * Created by harry on 2017-3-2. */ -public class FSettingToolBar extends JPanel { +public class FormSettingToolBar extends JPanel { private Icon setIcon = BaseUtils.readIcon("com/fr/design/images/toolbarbtn/toolbarbtnsetting.png"); private Icon delIcon = BaseUtils.readIcon("com/fr/design/images/toolbarbtn/toolbarbtnclear.png"); private UIButton setButton; private UIButton delButton; - private FToolBarPane toolBarPane; + private FormToolBarPane toolBarPane; - public FSettingToolBar(String name,FToolBarPane toolBarPane) { + public FormSettingToolBar(String name, FormToolBarPane toolBarPane) { super(); this.setBackground(Color.lightGray); this.add(new UILabel(name)); @@ -56,7 +56,7 @@ public class FSettingToolBar extends JPanel { @Override public void actionPerformed(ActionEvent arg0) { - final FEditToolBar tb = new FEditToolBar(); + final FormEditToolBar tb = new FormEditToolBar(); tb.populate(toolBarPane.getFToolBar()); BasicDialog dialog = tb.showWindow(DesignerContext.getDesignerFrame()); dialog.addDialogActionListener(new DialogActionAdapter() { diff --git a/designer_form/src/com/fr/design/mainframe/FToolBar.java b/designer_form/src/com/fr/design/mainframe/FormToolBar.java similarity index 76% rename from designer_form/src/com/fr/design/mainframe/FToolBar.java rename to designer_form/src/com/fr/design/mainframe/FormToolBar.java index 5eb519680..5a172e5d4 100644 --- a/designer_form/src/com/fr/design/mainframe/FToolBar.java +++ b/designer_form/src/com/fr/design/mainframe/FormToolBar.java @@ -10,28 +10,28 @@ import java.util.List; /** * Created by harry on 2017-3-2. */ -public class FToolBar { - private List buttonlist = new ArrayList(); +public class FormToolBar { + private List buttonlist = new ArrayList(); private Background background = null; private boolean isDefault = true; - public List getButtonlist() { + public List getButtonlist() { return buttonlist; } - public void setButtonlist(List buttonlist) { + public void setButtonlist(List buttonlist) { if (buttonlist == null || buttonlist.size() < 0) { - this.buttonlist = new ArrayList(); + this.buttonlist = new ArrayList(); } else { this.buttonlist = buttonlist; } } - public void addButton(FToolBarButton toolBarButton) { + public void addButton(FormToolBarButton toolBarButton) { this.buttonlist.add(toolBarButton); } - public void removeButton(FToolBarButton toolBarButton) { + public void removeButton(FormToolBarButton toolBarButton) { this.buttonlist.remove(toolBarButton); } diff --git a/designer_form/src/com/fr/design/mainframe/FToolBarButton.java b/designer_form/src/com/fr/design/mainframe/FormToolBarButton.java similarity index 87% rename from designer_form/src/com/fr/design/mainframe/FToolBarButton.java rename to designer_form/src/com/fr/design/mainframe/FormToolBarButton.java index 339a624be..a26b8d18f 100644 --- a/designer_form/src/com/fr/design/mainframe/FToolBarButton.java +++ b/designer_form/src/com/fr/design/mainframe/FormToolBarButton.java @@ -1,7 +1,6 @@ package com.fr.design.mainframe; import com.fr.base.BaseUtils; -import com.fr.base.GraphHelper; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.gui.core.WidgetOption; @@ -20,15 +19,15 @@ import java.awt.event.MouseListener; /** * Created by harry on 2017-3-2. */ -public class FToolBarButton extends JButton implements MouseListener { +public class FormToolBarButton extends JButton implements MouseListener { private Widget widget; private WidgetOption no; - public FToolBarButton(Icon icon, Widget widget) { + public FormToolBarButton(Icon icon, Widget widget) { this(null, icon, widget); } - public FToolBarButton(String text, Icon icon, Widget widget) { + public FormToolBarButton(String text, Icon icon, Widget widget) { super(text, icon); init(); this.widget = widget; @@ -94,7 +93,7 @@ public class FToolBarButton extends JButton implements MouseListener { paintBorder(g, this); } - protected void paintBorder(Graphics g, FToolBarButton b) { + protected void paintBorder(Graphics g, FormToolBarButton b) { String selectedRoles = ReportAndFSManagePane.getInstance().getRoleTree().getSelectedRoleName(); GUIPaintUtils.drawBorder((Graphics2D) g, 0, 0, b.getWidth(), b.getHeight(), true, Constants.NULL, b.isDoneAuthorityEdited(selectedRoles)); } @@ -110,9 +109,9 @@ public class FToolBarButton extends JButton implements MouseListener { return; } if (e.getClickCount() >= 2) { - if (this.getParent() instanceof FToolBarPane) { - final FToolBarPane tb = (FToolBarPane) this.getParent(); - final FEditToolBar etb = new FEditToolBar(); + if (this.getParent() instanceof FormToolBarPane) { + final FormToolBarPane tb = (FormToolBarPane) this.getParent(); + final FormEditToolBar etb = new FormEditToolBar(); etb.populate(tb.getFToolBar(), this); BasicDialog dialog = etb.showWindow(DesignerContext.getDesignerFrame()); dialog.addDialogActionListener(new DialogActionAdapter() { @@ -127,7 +126,7 @@ public class FToolBarButton extends JButton implements MouseListener { private void auhtorityMouseAction() { - if (this.getParent() instanceof FToolBarPane && this.isEnabled()) { + if (this.getParent() instanceof FormToolBarPane && this.isEnabled()) { this.setSelected(!this.isSelected()); } diff --git a/designer_form/src/com/fr/design/mainframe/FToolBarPane.java b/designer_form/src/com/fr/design/mainframe/FormToolBarPane.java similarity index 82% rename from designer_form/src/com/fr/design/mainframe/FToolBarPane.java rename to designer_form/src/com/fr/design/mainframe/FormToolBarPane.java index f58651bde..e64259b27 100644 --- a/designer_form/src/com/fr/design/mainframe/FToolBarPane.java +++ b/designer_form/src/com/fr/design/mainframe/FormToolBarPane.java @@ -20,11 +20,11 @@ import java.util.List; /** * Created by harry on 2017-3-2. */ -public class FToolBarPane extends BasicBeanPane { +public class FormToolBarPane extends BasicBeanPane { - private FToolBar ftoolbar = new FToolBar(); + private FormToolBar ftoolbar = new FormToolBar(); - public FToolBarPane() { + public FormToolBarPane() { super(); this.initComponent(); } @@ -36,13 +36,13 @@ public class FToolBarPane extends BasicBeanPane { * @param mouselistener 鼠标监听 */ public void addAuthorityListener(MouseListener mouselistener) { - List list = ftoolbar.getButtonlist(); + List list = ftoolbar.getButtonlist(); for (int i = 0; i < list.size(); i++) { list.get(i).addMouseListener(mouselistener); } } - public FToolBarPane(FToolBarButton button) { + public FormToolBarPane(FormToolBarButton button) { super(); this.initComponent(); this.add(button); @@ -70,7 +70,7 @@ public class FToolBarPane extends BasicBeanPane { return "Toolbar"; } - public void setSelectedButton(FToolBarButton button) { + public void setSelectedButton(FormToolBarButton button) { this.ftoolbar.addButton(button); } @@ -82,8 +82,8 @@ public class FToolBarPane extends BasicBeanPane { * @return 被添加的组件 */ public Component add(Component comp) { - if (comp instanceof FToolBarButton) { - this.ftoolbar.addButton((FToolBarButton) comp); + if (comp instanceof FormToolBarButton) { + this.ftoolbar.addButton((FormToolBarButton) comp); } return super.add(comp); } @@ -97,19 +97,19 @@ public class FToolBarPane extends BasicBeanPane { this.ftoolbar.clearButton(); } - protected void setFToolBar(FToolBar ftoolbar) { + protected void setFToolBar(FormToolBar ftoolbar) { if (ftoolbar == null) { - ftoolbar = new FToolBar(); + ftoolbar = new FormToolBar(); } this.ftoolbar = ftoolbar; this.setToolBar(this.ftoolbar.getButtonlist()); } - public List getToolBarButtons() { + public List getToolBarButtons() { return ftoolbar.getButtonlist(); } - protected FToolBar getFToolBar() { + protected FormToolBar getFToolBar() { return this.ftoolbar; } @@ -117,7 +117,7 @@ public class FToolBarPane extends BasicBeanPane { return this.ftoolbar.getButtonlist().size() <= 0; } - private void setToolBar(List list) { + private void setToolBar(List list) { if (list == null || list.size() < 0) { return; } @@ -142,7 +142,7 @@ public class FToolBarPane extends BasicBeanPane { continue; } - FToolBarButton button = new FToolBarButton(no.optionIcon(), widget); + FormToolBarButton button = new FormToolBarButton(no.optionIcon(), widget); button.setNameOption(no); this.add(button); this.validate(); @@ -161,13 +161,13 @@ public class FToolBarPane extends BasicBeanPane { @Override public void mouseClicked(MouseEvent e) { if (e.getClickCount() >= 2 && !SwingUtilities.isRightMouseButton(e)) { - final FEditToolBar tb = new FEditToolBar(); + final FormEditToolBar tb = new FormEditToolBar(); tb.populate(getFToolBar()); - BasicDialog dialog = tb.showWindow(SwingUtilities.getWindowAncestor(FToolBarPane.this)); + BasicDialog dialog = tb.showWindow(SwingUtilities.getWindowAncestor(FormToolBarPane.this)); dialog.addDialogActionListener(new DialogActionAdapter() { @Override public void doOk() { - FToolBarPane.this.setFToolBar(tb.update()); + FormToolBarPane.this.setFToolBar(tb.update()); } }); dialog.setVisible(true); @@ -221,11 +221,11 @@ public class FToolBarPane extends BasicBeanPane { } Widget widget = data.createWidget(); - FToolBarButton btn = new FToolBarButton(data.optionIcon(), widget); + FormToolBarButton btn = new FormToolBarButton(data.optionIcon(), widget); btn.setNameOption(data); - FToolBarPane.this.add(btn); - FToolBarPane.this.validate(); - FToolBarPane.this.repaint(); + FormToolBarPane.this.add(btn); + FormToolBarPane.this.validate(); + FormToolBarPane.this.repaint(); return true; } diff --git a/designer_form/src/com/fr/design/mainframe/FormWebWidgetConstants.java b/designer_form/src/com/fr/design/mainframe/FormWebWidgetConstants.java index e94abdc99..a84b7523d 100644 --- a/designer_form/src/com/fr/design/mainframe/FormWebWidgetConstants.java +++ b/designer_form/src/com/fr/design/mainframe/FormWebWidgetConstants.java @@ -18,7 +18,7 @@ public class FormWebWidgetConstants { private FormWebWidgetConstants() { } - public static WidgetOption[] getFormECToolBarInstance() { + public static WidgetOption[] getFormElementCaseToolBarInstance() { return new WidgetOption[]{FIRST, PREVIOUS, PAGENAVI, NEXT, LAST, EXPORT, EXCELP, EXCELO, CUSTOM_BUTTON}; } diff --git a/designer_form/src/com/fr/design/mainframe/widget/accessibles/AccessibleECToolBarEditor.java b/designer_form/src/com/fr/design/mainframe/widget/accessibles/AccessibleElementCaseToolBarEditor.java similarity index 62% rename from designer_form/src/com/fr/design/mainframe/widget/accessibles/AccessibleECToolBarEditor.java rename to designer_form/src/com/fr/design/mainframe/widget/accessibles/AccessibleElementCaseToolBarEditor.java index e7bf4662f..1695892ba 100644 --- a/designer_form/src/com/fr/design/mainframe/widget/accessibles/AccessibleECToolBarEditor.java +++ b/designer_form/src/com/fr/design/mainframe/widget/accessibles/AccessibleElementCaseToolBarEditor.java @@ -4,9 +4,9 @@ import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.gui.core.WidgetOption; import com.fr.design.mainframe.FormWebWidgetConstants; -import com.fr.design.mainframe.widget.editors.ECToolBarPane; -import com.fr.design.mainframe.widget.wrappers.ECToolBarWrapper; -import com.fr.form.web.FToolBarManager; +import com.fr.design.mainframe.widget.editors.ElementCaseToolBarPane; +import com.fr.design.mainframe.widget.wrappers.ElementCaseToolBarWrapper; +import com.fr.form.web.FormToolBarManager; import com.fr.stable.ArrayUtils; import javax.swing.*; @@ -17,17 +17,17 @@ import java.util.List; /** * Created by harry on 2017-2-23. */ -public class AccessibleECToolBarEditor extends UneditableAccessibleEditor { - private ECToolBarPane pane; +public class AccessibleElementCaseToolBarEditor extends UneditableAccessibleEditor { + private ElementCaseToolBarPane pane; - public AccessibleECToolBarEditor() { - super(new ECToolBarWrapper()); + public AccessibleElementCaseToolBarEditor() { + super(new ElementCaseToolBarWrapper()); } @Override protected void showEditorPane() { if (pane == null) { - pane = new ECToolBarPane(); + pane = new ElementCaseToolBarPane(); pane.setDefaultToolBar(getDefaultToolBarManager(), getToolBarInstance()); } BasicDialog dlg = pane.showToolBarWindow(SwingUtilities.getWindowAncestor(this), new DialogActionAdapter() { @@ -38,18 +38,18 @@ public class AccessibleECToolBarEditor extends UneditableAccessibleEditor { fireStateChanged(); } }); - FToolBarManager[] managers = (FToolBarManager[]) getValue(); + FormToolBarManager[] managers = (FormToolBarManager[]) getValue(); pane.setCheckBoxSelected(ArrayUtils.isNotEmpty(managers)); - pane.populateBean((FToolBarManager[]) getValue()); + pane.populateBean((FormToolBarManager[]) getValue()); dlg.setVisible(true); } - private FToolBarManager getDefaultToolBarManager() { - return FToolBarManager.createDefaultToolBar(); + private FormToolBarManager getDefaultToolBarManager() { + return FormToolBarManager.createDefaultToolBar(); } private WidgetOption[] getToolBarInstance() { - List defaultOptions = Arrays.asList(FormWebWidgetConstants.getFormECToolBarInstance()); + List defaultOptions = Arrays.asList(FormWebWidgetConstants.getFormElementCaseToolBarInstance()); List options = new ArrayList(); options.addAll(defaultOptions); return options.toArray(new WidgetOption[options.size()]); diff --git a/designer_form/src/com/fr/design/mainframe/widget/editors/ECToolBarEditor.java b/designer_form/src/com/fr/design/mainframe/widget/editors/ECToolBarEditor.java deleted file mode 100644 index eea19ced7..000000000 --- a/designer_form/src/com/fr/design/mainframe/widget/editors/ECToolBarEditor.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.fr.design.mainframe.widget.editors; - -import com.fr.design.mainframe.widget.accessibles.AccessibleECToolBarEditor; -import com.fr.design.mainframe.widget.accessibles.AccessiblePropertyEditor; - -/** - * Created by harry on 2017-2-23. - */ -public class ECToolBarEditor extends AccessiblePropertyEditor { - public ECToolBarEditor() { - super(new AccessibleECToolBarEditor()); - } -} diff --git a/designer_form/src/com/fr/design/mainframe/widget/editors/ElementCaseToolBarEditor.java b/designer_form/src/com/fr/design/mainframe/widget/editors/ElementCaseToolBarEditor.java new file mode 100644 index 000000000..de252c984 --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/widget/editors/ElementCaseToolBarEditor.java @@ -0,0 +1,13 @@ +package com.fr.design.mainframe.widget.editors; + +import com.fr.design.mainframe.widget.accessibles.AccessibleElementCaseToolBarEditor; +import com.fr.design.mainframe.widget.accessibles.AccessiblePropertyEditor; + +/** + * Created by harry on 2017-2-23. + */ +public class ElementCaseToolBarEditor extends AccessiblePropertyEditor { + public ElementCaseToolBarEditor() { + super(new AccessibleElementCaseToolBarEditor()); + } +} diff --git a/designer_form/src/com/fr/design/mainframe/widget/editors/ECToolBarPane.java b/designer_form/src/com/fr/design/mainframe/widget/editors/ElementCaseToolBarPane.java similarity index 80% rename from designer_form/src/com/fr/design/mainframe/widget/editors/ECToolBarPane.java rename to designer_form/src/com/fr/design/mainframe/widget/editors/ElementCaseToolBarPane.java index ea2bbe7a4..9e6a90445 100644 --- a/designer_form/src/com/fr/design/mainframe/widget/editors/ECToolBarPane.java +++ b/designer_form/src/com/fr/design/mainframe/widget/editors/ElementCaseToolBarPane.java @@ -8,12 +8,12 @@ import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.ilable.UILabel; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.DesignerContext; -import com.fr.design.mainframe.FSettingToolBar; -import com.fr.design.mainframe.FToolBarButton; -import com.fr.design.mainframe.FToolBarPane; +import com.fr.design.mainframe.FormSettingToolBar; +import com.fr.design.mainframe.FormToolBarButton; +import com.fr.design.mainframe.FormToolBarPane; import com.fr.form.ui.Widget; -import com.fr.form.web.FLocation; -import com.fr.form.web.FToolBarManager; +import com.fr.form.web.FormToolBarManager; +import com.fr.form.web.Location; import com.fr.general.Inter; import com.fr.stable.ArrayUtils; import com.fr.stable.Constants; @@ -34,19 +34,19 @@ import java.util.List; /** * Created by harry on 2017-2-23. */ -public class ECToolBarPane extends BasicBeanPane { +public class ElementCaseToolBarPane extends BasicBeanPane { private static final int COLUMN = 2; private int row = 6; private DefaultTableModel toolbarButtonTableModel; private JTable layoutTable; private UICheckBox isUseToolBarCheckBox = new UICheckBox(Inter.getLocText("FR-Designer_Use_ToolBar") + ":"); // 是否使用工具栏 - private FToolBarPane northToolBar; - private FToolBarPane southToolBar; - private FToolBarManager defaultToolBar; + private FormToolBarPane northToolBar; + private FormToolBarPane southToolBar; + private FormToolBarManager defaultToolBar; - public ECToolBarPane() { + public ElementCaseToolBarPane() { toolbarButtonTableModel = new TableModel(row ,COLUMN); this.setLayout(FRGUIPaneFactory.createBorderLayout()); JPanel north = FRGUIPaneFactory.createBorderLayout_S_Pane(); @@ -61,11 +61,11 @@ public class ECToolBarPane extends BasicBeanPane { if (defaultToolBar == null) { return; } - FToolBarManager toolBarManager = defaultToolBar; - toolBarManager.setToolBarLocation(FLocation.createTopEmbedLocation()); - FToolBarManager[] tbm = new FToolBarManager[] { toolBarManager }; + FormToolBarManager toolBarManager = defaultToolBar; + toolBarManager.setToolBarLocation(Location.createTopEmbedLocation()); + FormToolBarManager[] tbm = new FormToolBarManager[] { toolBarManager }; populateBean(tbm); - ECToolBarPane.this.repaint(); + ElementCaseToolBarPane.this.repaint(); } }); @@ -75,7 +75,7 @@ public class ECToolBarPane extends BasicBeanPane { north.add(aa, BorderLayout.CENTER); this.add(north, BorderLayout.NORTH); - northToolBar = new FToolBarPane(); + northToolBar = new FormToolBarPane(); northToolBar.setPreferredSize(new Dimension(ImageObserver.WIDTH, 26)); northToolBar.setBackground(Color.lightGray); @@ -92,7 +92,7 @@ public class ECToolBarPane extends BasicBeanPane { if (isSelectedtable()) { WidgetOption no = (WidgetOption)layoutTable.getValueAt(layoutTable.getSelectedRow(), layoutTable.getSelectedColumn()); Widget widget = no.createWidget(); - FToolBarButton tb = new FToolBarButton(no.optionIcon(), widget); + FormToolBarButton tb = new FormToolBarButton(no.optionIcon(), widget); tb.setNameOption(no); northToolBar.add(tb); northToolBar.validate(); @@ -117,7 +117,7 @@ public class ECToolBarPane extends BasicBeanPane { if (isSelectedtable()) { WidgetOption no = (WidgetOption)layoutTable.getValueAt(layoutTable.getSelectedRow(), layoutTable.getSelectedColumn()); Widget widget = no.createWidget(); - FToolBarButton tb = new FToolBarButton(no.optionIcon(), widget); + FormToolBarButton tb = new FormToolBarButton(no.optionIcon(), widget); tb.setNameOption(no); southToolBar.add(tb); southToolBar.validate(); @@ -139,18 +139,18 @@ public class ECToolBarPane extends BasicBeanPane { small.add(layoutTable, BorderLayout.CENTER); center.add(small, BorderLayout.CENTER); center.add(downButton, BorderLayout.SOUTH); - southToolBar = new FToolBarPane(); + southToolBar = new FormToolBarPane(); southToolBar.setPreferredSize(new Dimension(ImageObserver.WIDTH, 26)); southToolBar.setBackground(Color.lightGray); JPanel movePane = FRGUIPaneFactory.createBorderLayout_S_Pane(); JPanel northContentPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); - FSettingToolBar top = new FSettingToolBar(Inter.getLocText("FR-Designer_ToolBar_Top"), northToolBar); + FormSettingToolBar top = new FormSettingToolBar(Inter.getLocText("FR-Designer_ToolBar_Top"), northToolBar); northContentPane.add(top, BorderLayout.EAST); northContentPane.add(northToolBar, BorderLayout.CENTER); northContentPane.setBackground(Color.lightGray); JPanel southContentPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); - FSettingToolBar bottom = new FSettingToolBar(Inter.getLocText("FR-Designer_ToolBar_Bottom"), southToolBar); + FormSettingToolBar bottom = new FormSettingToolBar(Inter.getLocText("FR-Designer_ToolBar_Bottom"), southToolBar); southContentPane.add(bottom, BorderLayout.EAST); southContentPane.add(southToolBar, BorderLayout.CENTER); southContentPane.setBackground(Color.lightGray); @@ -180,7 +180,7 @@ public class ECToolBarPane extends BasicBeanPane { if (e.getClickCount() > 1 && !SwingUtilities.isRightMouseButton(e)) { WidgetOption no = (WidgetOption)layoutTable.getValueAt(layoutTable.getSelectedRow(), layoutTable.getSelectedColumn()); Widget widget = no.createWidget(); - FToolBarButton tb = new FToolBarButton(no.optionIcon(), widget); + FormToolBarButton tb = new FormToolBarButton(no.optionIcon(), widget); tb.setNameOption(no); northToolBar.add(tb); northToolBar.validate(); @@ -207,7 +207,7 @@ public class ECToolBarPane extends BasicBeanPane { return this.isUseToolBarCheckBox.isSelected(); } - public void setDefaultToolBar(FToolBarManager defaultToolBar, WidgetOption[] buttonArray) { + public void setDefaultToolBar(FormToolBarManager defaultToolBar, WidgetOption[] buttonArray) { this.defaultToolBar = defaultToolBar; if (buttonArray != null) { for (int i = 0; i < buttonArray.length; i++) { @@ -249,20 +249,20 @@ public class ECToolBarPane extends BasicBeanPane { } @Override - public void populateBean(FToolBarManager[] toolBarManager) { + public void populateBean(FormToolBarManager[] toolBarManager) { if (ArrayUtils.isEmpty(toolBarManager)) { - defaultToolBar.setToolBarLocation(FLocation.createTopEmbedLocation()); - toolBarManager = new FToolBarManager[] { defaultToolBar }; + defaultToolBar.setToolBarLocation(Location.createTopEmbedLocation()); + toolBarManager = new FormToolBarManager[] { defaultToolBar }; } if (ArrayUtils.isEmpty(toolBarManager)) { return; } for (int i = 0; i < toolBarManager.length; i++) { - FLocation location = toolBarManager[i].getToolBarLocation(); - if (location instanceof FLocation.Embed) { - if (((FLocation.Embed)location).getPosition() == Constants.TOP) { + Location location = toolBarManager[i].getToolBarLocation(); + if (location instanceof Location.Embed) { + if (((Location.Embed)location).getPosition() == Constants.TOP) { northToolBar.populateBean(toolBarManager[i].getToolBar()); - } else if (((FLocation.Embed)location).getPosition() == Constants.BOTTOM) { + } else if (((Location.Embed)location).getPosition() == Constants.BOTTOM) { southToolBar.populateBean(toolBarManager[i].getToolBar()); } } @@ -270,25 +270,25 @@ public class ECToolBarPane extends BasicBeanPane { } @Override - public FToolBarManager[] updateBean() { + public FormToolBarManager[] updateBean() { if(!isUseToolbar()){ - return new FToolBarManager[0]; + return new FormToolBarManager[0]; } - List toolBarManagerList = new ArrayList(); + List toolBarManagerList = new ArrayList(); if (!northToolBar.isEmpty()) { - FToolBarManager north = new FToolBarManager(); + FormToolBarManager north = new FormToolBarManager(); north.setToolBar(northToolBar.updateBean()); - north.setToolBarLocation(FLocation.createTopEmbedLocation()); + north.setToolBarLocation(Location.createTopEmbedLocation()); toolBarManagerList.add(north); } if (!southToolBar.isEmpty()) { - FToolBarManager south = new FToolBarManager(); + FormToolBarManager south = new FormToolBarManager(); south.setToolBar(southToolBar.updateBean()); - south.setToolBarLocation(FLocation.createBottomEmbedLocation()); + south.setToolBarLocation(Location.createBottomEmbedLocation()); toolBarManagerList.add(south); } - return toolBarManagerList.toArray(new FToolBarManager[toolBarManagerList.size()]); + return toolBarManagerList.toArray(new FormToolBarManager[toolBarManagerList.size()]); } private class TableModel extends DefaultTableModel { diff --git a/designer_form/src/com/fr/design/mainframe/widget/wrappers/ECToolBarWrapper.java b/designer_form/src/com/fr/design/mainframe/widget/wrappers/ElementCaseToolBarWrapper.java similarity index 79% rename from designer_form/src/com/fr/design/mainframe/widget/wrappers/ECToolBarWrapper.java rename to designer_form/src/com/fr/design/mainframe/widget/wrappers/ElementCaseToolBarWrapper.java index 5faf54348..e244c2a22 100644 --- a/designer_form/src/com/fr/design/mainframe/widget/wrappers/ECToolBarWrapper.java +++ b/designer_form/src/com/fr/design/mainframe/widget/wrappers/ElementCaseToolBarWrapper.java @@ -3,13 +3,13 @@ package com.fr.design.mainframe.widget.wrappers; import com.fr.design.Exception.ValidationException; import com.fr.design.designer.properties.Decoder; import com.fr.design.designer.properties.Encoder; -import com.fr.form.web.FToolBarManager; +import com.fr.form.web.FormToolBarManager; import com.fr.general.Inter; /** * Created by harry on 2017-3-1. */ -public class ECToolBarWrapper implements Encoder, Decoder { +public class ElementCaseToolBarWrapper implements Encoder, Decoder { @Override public Object decode(String txt) { return null; @@ -25,7 +25,7 @@ public class ECToolBarWrapper implements Encoder, Decoder { if (v == null) { return null; } - FToolBarManager[] toolBarManager = (FToolBarManager[])v; + FormToolBarManager[] toolBarManager = (FormToolBarManager[])v; if (toolBarManager.length != 0) { return Inter.getLocText("FR-Designer_Open"); } From 26c360cbea417c66d52cdf5dc644d1aca0c480bc Mon Sep 17 00:00:00 2001 From: zhouping Date: Fri, 10 Mar 2017 11:00:39 +0800 Subject: [PATCH 169/343] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1=20?= =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/locale/designer.properties | 17 ++++++++++++++++- .../fr/design/locale/designer_en_US.properties | 17 ++++++++++++++++- .../fr/design/locale/designer_ja_JP.properties | 15 +++++++++++++++ .../fr/design/locale/designer_ko_KR.properties | 15 +++++++++++++++ .../fr/design/locale/designer_zh_CN.properties | 17 ++++++++++++++++- .../fr/design/locale/designer_zh_TW.properties | 17 ++++++++++++++++- 6 files changed, 94 insertions(+), 4 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 0a66c326e..05c7aa6a6 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -567,4 +567,19 @@ 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. \ No newline at end of file +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. +FR-Designer_Background_Null= +FR-Designer_Background_Color= +FR-Designer_Background_Texture= +FR-Designer_Background_Pattern= +FR-Designer_Background_Gradient_Color= +FR-Designer_Background_Image= +FR-Designer_Background_Clear= +FR-Designer_Background_Image_Select= +FR-Designer_Initial_Background_Tips= +FR-Designer_Mouse_Move_Tips= +FR-Designer_Mouse_Click_Tips= +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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index b0acea3ab..fcece5756 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -568,4 +568,19 @@ 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. \ No newline at end of file +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. +FR-Designer_Background_Null=No Background +FR-Designer_Background_Color=Color +FR-Designer_Background_Texture=Texture +FR-Designer_Background_Pattern=Pattern +FR-Designer_Background_Gradient_Color=Gradient Color +FR-Designer_Background_Image=Image +FR-Designer_Background_Clear=Clear +FR-Designer_Background_Image_Select=Select Picture +FR-Designer_Initial_Background_Tips=Initial background of the button +FR-Designer_Mouse_Move_Tips=Move the mouse to the button on the background, in the absence of not changing the background +FR-Designer_Mouse_Click_Tips=The background of the mouse to click the button, in the absence of not changing the background +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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index d86d0a164..233078394 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -539,3 +539,18 @@ 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 +FR-Designer_Background_Null= +FR-Designer_Background_Color= +FR-Designer_Background_Texture= +FR-Designer_Background_Pattern= +FR-Designer_Background_Gradient_Color= +FR-Designer_Background_Image= +FR-Designer_Background_Clear= +FR-Designer_Background_Image_Select= +FR-Designer_Initial_Background_Tips= +FR-Designer_Mouse_Move_Tips= +FR-Designer_Mouse_Click_Tips= +FR-Designer-Move_Tab_First= +FR-Designer-Move_Tab_End= +FR-Designer-Move_Tab_Next= +FR-Designer-Move_Tab_Prev= \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index dfb5ec78f..a54595e0c 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -536,3 +536,18 @@ 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 +FR-Designer_Background_Null= +FR-Designer_Background_Color= +FR-Designer_Background_Texture= +FR-Designer_Background_Pattern= +FR-Designer_Background_Gradient_Color= +FR-Designer_Background_Image= +FR-Designer_Background_Clear= +FR-Designer_Background_Image_Select= +FR-Designer_Initial_Background_Tips= +FR-Designer_Mouse_Move_Tips= +FR-Designer_Mouse_Click_Tips= +FR-Designer-Move_Tab_First= +FR-Designer-Move_Tab_End= +FR-Designer-Move_Tab_Next= +FR-Designer-Move_Tab_Prev= \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index bdb97b094..53aab70e5 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -572,4 +572,19 @@ 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 \ No newline at end of file +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_Color=\u989C\u8272 +FR-Designer_Background_Texture=\u7EB9\u7406 +FR-Designer_Background_Pattern=\u56FE\u6848 +FR-Designer_Background_Gradient_Color=\u6E10\u53D8\u8272 +FR-Designer_Background_Image=\u56FE\u7247 +FR-Designer_Background_Clear=\u6E05\u9664 +FR-Designer_Background_Image_Select=\u9009\u62E9\u56FE\u7247 +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_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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 3acd7487c..68622ad34 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -560,4 +560,19 @@ 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 \ No newline at end of file +FR-Designer_Mobile_Report_Analysis_Annotation=\u6CE8\u91CB\uFF1A\u53EF\u4EE5\u901A\u904E\u8A72\u5C6C\u6027\u63A7\u5236\u5831\u8868\u5728APP\u4E2D\u7684\u89E3\u6790\u65B9\u5F0F\uFF0C\u53EA\u652F\u6301\u5206\u9801\u9810\u89BD\uFF0C\u586B\u5831\u9810\u89BD\u6642\u5C6C\u6027\u7121\u6548\u3002 +FR-Designer_Background_Null= +FR-Designer_Background_Color= +FR-Designer_Background_Texture= +FR-Designer_Background_Pattern= +FR-Designer_Background_Gradient_Color= +FR-Designer_Background_Image= +FR-Designer_Background_Clear= +FR-Designer_Background_Image_Select= +FR-Designer_Initial_Background_Tips= +FR-Designer_Mouse_Move_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 \ No newline at end of file From a5c34f032c77e0f128fdc53a6c42e09f05a94cd0 Mon Sep 17 00:00:00 2001 From: zhouping Date: Fri, 10 Mar 2017 11:01:08 +0800 Subject: [PATCH 170/343] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1=20?= =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/locale/designer.properties | 6 +++++- .../src/com/fr/design/locale/designer_en_US.properties | 6 +++++- .../src/com/fr/design/locale/designer_ja_JP.properties | 4 ++++ .../src/com/fr/design/locale/designer_ko_KR.properties | 6 +++++- .../src/com/fr/design/locale/designer_zh_CN.properties | 6 +++++- .../src/com/fr/design/locale/designer_zh_TW.properties | 6 +++++- 6 files changed, 29 insertions(+), 5 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 87a3471e9..05c7aa6a6 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -578,4 +578,8 @@ FR-Designer_Background_Clear= FR-Designer_Background_Image_Select= FR-Designer_Initial_Background_Tips= FR-Designer_Mouse_Move_Tips= -FR-Designer_Mouse_Click_Tips= \ No newline at end of file +FR-Designer_Mouse_Click_Tips= +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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index aedaabbc6..fcece5756 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -579,4 +579,8 @@ FR-Designer_Background_Clear=Clear FR-Designer_Background_Image_Select=Select Picture FR-Designer_Initial_Background_Tips=Initial background of the button FR-Designer_Mouse_Move_Tips=Move the mouse to the button on the background, in the absence of not changing the background -FR-Designer_Mouse_Click_Tips=The background of the mouse to click the button, in the absence of not changing the background \ No newline at end of file +FR-Designer_Mouse_Click_Tips=The background of the mouse to click the button, in the absence of not changing the background +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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index f966aaef0..233078394 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -550,3 +550,7 @@ FR-Designer_Background_Image_Select= FR-Designer_Initial_Background_Tips= FR-Designer_Mouse_Move_Tips= FR-Designer_Mouse_Click_Tips= +FR-Designer-Move_Tab_First= +FR-Designer-Move_Tab_End= +FR-Designer-Move_Tab_Next= +FR-Designer-Move_Tab_Prev= \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index 611d8128c..a54595e0c 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -546,4 +546,8 @@ FR-Designer_Background_Clear= FR-Designer_Background_Image_Select= FR-Designer_Initial_Background_Tips= FR-Designer_Mouse_Move_Tips= -FR-Designer_Mouse_Click_Tips= \ No newline at end of file +FR-Designer_Mouse_Click_Tips= +FR-Designer-Move_Tab_First= +FR-Designer-Move_Tab_End= +FR-Designer-Move_Tab_Next= +FR-Designer-Move_Tab_Prev= \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 0bf1d423c..53aab70e5 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -583,4 +583,8 @@ FR-Designer_Background_Clear=\u6E05\u9664 FR-Designer_Background_Image_Select=\u9009\u62E9\u56FE\u7247 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_Click_Tips=\u9F20\u6807\u70B9\u51FB\u6309\u94AE\u65F6\u80CC\u666F\uFF0C\u82E5\u65E0\u5219\u4E0D\u6539\u53D8\u80CC\u666F \ No newline at end of file +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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 47836061f..68622ad34 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -571,4 +571,8 @@ FR-Designer_Background_Clear= FR-Designer_Background_Image_Select= FR-Designer_Initial_Background_Tips= FR-Designer_Mouse_Move_Tips= -FR-Designer_Mouse_Click_Tips= \ No newline at end of file +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 \ No newline at end of file From aa2c2d10d0b8d2fc722ab1fe5693154cb836ce5c Mon Sep 17 00:00:00 2001 From: mengao Date: Fri, 10 Mar 2017 14:32:37 +0800 Subject: [PATCH 171/343] =?UTF-8?q?=E8=BF=98=E5=8E=9F=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java index f57328e14..4a18611fa 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java @@ -79,7 +79,7 @@ public class ChartTypeButtonPane extends BasicBeanPane implemen eastPane.setLayout(new BorderLayout()); - eastPane.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 10)); + eastPane.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 15)); JPanel button = new JPanel(); button.setPreferredSize(new Dimension(45, 20)); button.setLayout(new GridLayout(1, 2, 5, 0)); From 1da998d12e69ae0d7f7ca3f9daeca5ccf88409a5 Mon Sep 17 00:00:00 2001 From: mengao Date: Fri, 10 Mar 2017 14:44:34 +0800 Subject: [PATCH 172/343] =?UTF-8?q?=E8=B6=85=E7=BA=A7=E9=93=BE=E6=8E=A5?= =?UTF-8?q?=E4=B8=AD=EF=BC=8C=E5=9B=BE=E8=A1=A8=E9=93=BE=E6=8E=A5=E6=AD=A3?= =?UTF-8?q?=E5=B8=B8=E6=98=BE=E7=A4=BA=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java index 4a18611fa..f57328e14 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java @@ -79,7 +79,7 @@ public class ChartTypeButtonPane extends BasicBeanPane implemen eastPane.setLayout(new BorderLayout()); - eastPane.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 15)); + eastPane.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 10)); JPanel button = new JPanel(); button.setPreferredSize(new Dimension(45, 20)); button.setLayout(new GridLayout(1, 2, 5, 0)); From 1717e7ef30fd33808c6d585a39b7f5e69ca795f5 Mon Sep 17 00:00:00 2001 From: mengao Date: Fri, 10 Mar 2017 14:47:40 +0800 Subject: [PATCH 173/343] =?UTF-8?q?=E8=B6=85=E7=BA=A7=E9=93=BE=E6=8E=A5?= =?UTF-8?q?=E4=B8=AD=EF=BC=8C=E5=9B=BE=E8=A1=A8=E9=93=BE=E6=8E=A5=E6=AD=A3?= =?UTF-8?q?=E5=B8=B8=E6=98=BE=E7=A4=BA=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java index 4a18611fa..f57328e14 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java @@ -79,7 +79,7 @@ public class ChartTypeButtonPane extends BasicBeanPane implemen eastPane.setLayout(new BorderLayout()); - eastPane.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 15)); + eastPane.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 10)); JPanel button = new JPanel(); button.setPreferredSize(new Dimension(45, 20)); button.setLayout(new GridLayout(1, 2, 5, 0)); From ec86d81f94da3118320bce7dc1551505016b8ed2 Mon Sep 17 00:00:00 2001 From: mengao Date: Fri, 10 Mar 2017 14:48:32 +0800 Subject: [PATCH 174/343] =?UTF-8?q?=E8=BF=98=E5=8E=9F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java index f57328e14..4a18611fa 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java @@ -79,7 +79,7 @@ public class ChartTypeButtonPane extends BasicBeanPane implemen eastPane.setLayout(new BorderLayout()); - eastPane.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 10)); + eastPane.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 15)); JPanel button = new JPanel(); button.setPreferredSize(new Dimension(45, 20)); button.setLayout(new GridLayout(1, 2, 5, 0)); From bcbc311cbdd313a34e57367fd4b4e97d039b4393 Mon Sep 17 00:00:00 2001 From: frharry Date: Fri, 10 Mar 2017 16:55:30 +0800 Subject: [PATCH 175/343] =?UTF-8?q?REPORT-1344=20=E8=A1=A8=E5=8D=95?= =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E5=9D=97=E7=BF=BB=E9=A1=B5=E6=94=B9=E8=BF=9B?= =?UTF-8?q?=E5=B9=B6=E5=A2=9E=E5=8A=A0=E5=B1=80=E9=83=A8=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/FormEditToolBar.java | 14 +++---- .../design/mainframe/FormSettingToolBar.java | 6 +-- .../com/fr/design/mainframe/FormToolBar.java | 6 +-- .../design/mainframe/FormToolBarButton.java | 37 ++++++++----------- .../mainframe/FormWebWidgetConstants.java | 18 ++++----- .../editors/ElementCaseToolBarPane.java | 6 +-- 6 files changed, 40 insertions(+), 47 deletions(-) diff --git a/designer_form/src/com/fr/design/mainframe/FormEditToolBar.java b/designer_form/src/com/fr/design/mainframe/FormEditToolBar.java index d0e217f27..c2c487ef5 100644 --- a/designer_form/src/com/fr/design/mainframe/FormEditToolBar.java +++ b/designer_form/src/com/fr/design/mainframe/FormEditToolBar.java @@ -1,6 +1,5 @@ package com.fr.design.mainframe; -import com.fr.base.BaseUtils; import com.fr.design.actions.UpdateAction; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.BasicPane; @@ -22,6 +21,7 @@ import com.fr.form.ui.*; import com.fr.form.ui.Button; import com.fr.form.web.button.Export; import com.fr.general.Background; +import com.fr.general.IOUtils; import com.fr.general.Inter; import com.fr.stable.StringUtils; @@ -125,12 +125,12 @@ public class FormEditToolBar extends BasicPane { this.add(splitPane); list.addListSelectionListener(listSelectionListener); JPanel backgroundPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); - UIButton bgButton = new UIButton(Inter.getLocText(new String[]{"Background", "Set"})); - defaultCheckBox = new UICheckBox(Inter.getLocText(new String[]{"Default", "Background"})); + UIButton bgButton = new UIButton(Inter.getLocText("FR-Designer-Output_Background_Set")); + defaultCheckBox = new UICheckBox(Inter.getLocText("FR-Designer-Output_Default_Background")); bgButton.addActionListener(actioner); backgroundPane.add(defaultCheckBox); backgroundPane.add(bgButton); - backgroundPane.setBorder(BorderFactory.createTitledBorder(Inter.getLocText(new String[]{"Background", "Set"}))); + backgroundPane.setBorder(BorderFactory.createTitledBorder(Inter.getLocText("FR-Designer-Output_Background_Set"))); this.add(backgroundPane, BorderLayout.SOUTH); } @@ -210,7 +210,7 @@ public class FormEditToolBar extends BasicPane { public MoveUpItemAction() { this.setName(Inter.getLocText("Utils-Move_Up")); this.setMnemonic('U'); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/control/up.png")); + this.setSmallIcon(IOUtils.readIcon("/com/fr/design/images/control/up.png")); } /** @@ -241,7 +241,7 @@ public class FormEditToolBar extends BasicPane { public MoveDownItemAction() { this.setName(Inter.getLocText("Utils-Move_Down")); this.setMnemonic('D'); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/control/down.png")); + this.setSmallIcon(IOUtils.readIcon("/com/fr/design/images/control/down.png")); } /** @@ -275,7 +275,7 @@ public class FormEditToolBar extends BasicPane { public class RemoveAction extends UpdateAction { public RemoveAction() { this.setName(Inter.getLocText("FR-Designer_Delete")); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/base/images/cell/control/remove.png")); + this.setSmallIcon(IOUtils.readIcon("/com/fr/base/images/cell/control/remove.png")); } /** diff --git a/designer_form/src/com/fr/design/mainframe/FormSettingToolBar.java b/designer_form/src/com/fr/design/mainframe/FormSettingToolBar.java index 2ed8a6984..c84776789 100644 --- a/designer_form/src/com/fr/design/mainframe/FormSettingToolBar.java +++ b/designer_form/src/com/fr/design/mainframe/FormSettingToolBar.java @@ -1,11 +1,11 @@ package com.fr.design.mainframe; -import com.fr.base.BaseUtils; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ilable.UILabel; import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.general.IOUtils; import com.fr.general.Inter; import javax.swing.*; @@ -17,8 +17,8 @@ import java.awt.event.ActionListener; * Created by harry on 2017-3-2. */ public class FormSettingToolBar extends JPanel { - private Icon setIcon = BaseUtils.readIcon("com/fr/design/images/toolbarbtn/toolbarbtnsetting.png"); - private Icon delIcon = BaseUtils.readIcon("com/fr/design/images/toolbarbtn/toolbarbtnclear.png"); + private Icon setIcon = IOUtils.readIcon("com/fr/design/images/toolbarbtn/toolbarbtnsetting.png"); + private Icon delIcon = IOUtils.readIcon("com/fr/design/images/toolbarbtn/toolbarbtnclear.png"); private UIButton setButton; private UIButton delButton; private FormToolBarPane toolBarPane; diff --git a/designer_form/src/com/fr/design/mainframe/FormToolBar.java b/designer_form/src/com/fr/design/mainframe/FormToolBar.java index 5a172e5d4..860144dc8 100644 --- a/designer_form/src/com/fr/design/mainframe/FormToolBar.java +++ b/designer_form/src/com/fr/design/mainframe/FormToolBar.java @@ -56,11 +56,11 @@ public class FormToolBar { } public ToolBar getToolBar() { - Widget[] n = new Widget[this.getButtonlist().size()]; + Widget[] widgets = new Widget[this.getButtonlist().size()]; for (int j = 0; j < this.getButtonlist().size(); j++) { - n[j] = this.getButtonlist().get(j).getWidget(); + widgets[j] = this.getButtonlist().get(j).getWidget(); } - ToolBar toolBar = new ToolBar(n); + ToolBar toolBar = new ToolBar(widgets); toolBar.setBackground(this.background); toolBar.setDefault(this.isDefault); return toolBar; diff --git a/designer_form/src/com/fr/design/mainframe/FormToolBarButton.java b/designer_form/src/com/fr/design/mainframe/FormToolBarButton.java index a26b8d18f..0e08197d3 100644 --- a/designer_form/src/com/fr/design/mainframe/FormToolBarButton.java +++ b/designer_form/src/com/fr/design/mainframe/FormToolBarButton.java @@ -21,7 +21,7 @@ import java.awt.event.MouseListener; */ public class FormToolBarButton extends JButton implements MouseListener { private Widget widget; - private WidgetOption no; + private WidgetOption widgetOption; public FormToolBarButton(Icon icon, Widget widget) { this(null, icon, widget); @@ -29,7 +29,8 @@ public class FormToolBarButton extends JButton implements MouseListener { public FormToolBarButton(String text, Icon icon, Widget widget) { super(text, icon); - init(); + setBackground(null); + setRolloverEnabled(true); this.widget = widget; if (widget instanceof com.fr.form.ui.Button) { com.fr.form.ui.Button button = (com.fr.form.ui.Button) widget; @@ -45,12 +46,6 @@ public class FormToolBarButton extends JButton implements MouseListener { setMargin(new Insets(0, 0, 0, 0)); } - private void init() { - setBackground(null); - setRolloverEnabled(true); - } - - /** * 改变按钮的权限细粒度状态 * @@ -81,11 +76,11 @@ public class FormToolBarButton extends JButton implements MouseListener { } public WidgetOption getNameOption() { - return this.no; + return this.widgetOption; } - public void setNameOption(WidgetOption no) { - this.no = no; + public void setNameOption(WidgetOption widgetOption) { + this.widgetOption = widgetOption; } @@ -109,18 +104,16 @@ public class FormToolBarButton extends JButton implements MouseListener { return; } if (e.getClickCount() >= 2) { - if (this.getParent() instanceof FormToolBarPane) { - final FormToolBarPane tb = (FormToolBarPane) this.getParent(); - final FormEditToolBar etb = new FormEditToolBar(); - etb.populate(tb.getFToolBar(), this); - BasicDialog dialog = etb.showWindow(DesignerContext.getDesignerFrame()); - dialog.addDialogActionListener(new DialogActionAdapter() { - public void doOk() { - tb.setFToolBar(etb.update()); + final FormToolBarPane toolBarPane = (FormToolBarPane) this.getParent(); + final FormEditToolBar editToolBar = new FormEditToolBar(); + editToolBar.populate(toolBarPane.getFToolBar(), this); + BasicDialog dialog = editToolBar.showWindow(DesignerContext.getDesignerFrame()); + dialog.addDialogActionListener(new DialogActionAdapter() { + public void doOk() { + toolBarPane.setFToolBar(editToolBar.update()); } - }); - dialog.setVisible(true); - } + }); + dialog.setVisible(true); } } diff --git a/designer_form/src/com/fr/design/mainframe/FormWebWidgetConstants.java b/designer_form/src/com/fr/design/mainframe/FormWebWidgetConstants.java index a84b7523d..4bf970234 100644 --- a/designer_form/src/com/fr/design/mainframe/FormWebWidgetConstants.java +++ b/designer_form/src/com/fr/design/mainframe/FormWebWidgetConstants.java @@ -1,6 +1,5 @@ package com.fr.design.mainframe; -import com.fr.base.BaseUtils; import com.fr.design.gui.core.WidgetOption; import com.fr.design.gui.core.WidgetOptionFactory; import com.fr.form.ui.CustomToolBarButton; @@ -8,6 +7,7 @@ import com.fr.form.web.button.ExcelO; import com.fr.form.web.button.ExcelP; import com.fr.form.web.button.Export; import com.fr.form.web.button.page.*; +import com.fr.general.IOUtils; import com.fr.general.Inter; /** @@ -24,29 +24,29 @@ public class FormWebWidgetConstants { // 当前页/总页数 public static final WidgetOption PAGENAVI = WidgetOptionFactory.createByWidgetClass(Inter.getLocText(new String[]{"HJS-Current_Page", "HF-Number_of_Page"}, new String[]{"/", ""}), - BaseUtils.readIcon("/com/fr/web/images/pageNumber.png"), PageNavi.class); + IOUtils.readIcon("/com/fr/web/images/pageNumber.png"), PageNavi.class); // 首页 - public static final WidgetOption FIRST = WidgetOptionFactory.createByWidgetClass(Inter.getLocText("FR-Engine_ReportServerP-First"), BaseUtils.readIcon("/com/fr/web/images/first.png"), + public static final WidgetOption FIRST = WidgetOptionFactory.createByWidgetClass(Inter.getLocText("FR-Engine_ReportServerP-First"), IOUtils.readIcon("/com/fr/web/images/first.png"), First.class); // 末页 - public static final WidgetOption LAST = WidgetOptionFactory.createByWidgetClass(Inter.getLocText("FR-Engine_ReportServerP-Last"), BaseUtils.readIcon("/com/fr/web/images/last.png"), + public static final WidgetOption LAST = WidgetOptionFactory.createByWidgetClass(Inter.getLocText("FR-Engine_ReportServerP-Last"), IOUtils.readIcon("/com/fr/web/images/last.png"), Last.class); // 前一页 public static final WidgetOption PREVIOUS = WidgetOptionFactory.createByWidgetClass(Inter.getLocText("FR-Engine_ReportServerP-Previous"), - BaseUtils.readIcon("/com/fr/web/images/previous.png"), Previous.class); + IOUtils.readIcon("/com/fr/web/images/previous.png"), Previous.class); // 后一页 - public static final WidgetOption NEXT = WidgetOptionFactory.createByWidgetClass(Inter.getLocText("FR-Engine_ReportServerP-Next"), BaseUtils.readIcon("/com/fr/web/images/next.png"), + public static final WidgetOption NEXT = WidgetOptionFactory.createByWidgetClass(Inter.getLocText("FR-Engine_ReportServerP-Next"), IOUtils.readIcon("/com/fr/web/images/next.png"), Next.class); // 导出成Excel 分页导出 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); + IOUtils.readIcon("/com/fr/web/images/excel.png"), ExcelP.class); // 导出成Excel 原样导出 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); + IOUtils.readIcon("/com/fr/web/images/excel.png"), ExcelO.class); // 导出 public static final WidgetOption EXPORT = WidgetOptionFactory - .createByWidgetClass(Inter.getLocText("FR-Engine_Export"), BaseUtils.readIcon("/com/fr/web/images/export.png"), Export.class); + .createByWidgetClass(Inter.getLocText("FR-Engine_Export"), IOUtils.readIcon("/com/fr/web/images/export.png"), Export.class); public static final WidgetOption CUSTOM_BUTTON = WidgetOptionFactory .createByWidgetClass(Inter.getLocText(new String[]{"Custom", "Form-Button"}), CustomToolBarButton.class); diff --git a/designer_form/src/com/fr/design/mainframe/widget/editors/ElementCaseToolBarPane.java b/designer_form/src/com/fr/design/mainframe/widget/editors/ElementCaseToolBarPane.java index 9e6a90445..624dc956a 100644 --- a/designer_form/src/com/fr/design/mainframe/widget/editors/ElementCaseToolBarPane.java +++ b/designer_form/src/com/fr/design/mainframe/widget/editors/ElementCaseToolBarPane.java @@ -1,6 +1,5 @@ package com.fr.design.mainframe.widget.editors; -import com.fr.base.BaseUtils; import com.fr.design.beans.BasicBeanPane; import com.fr.design.gui.core.WidgetOption; import com.fr.design.gui.ibutton.UIButton; @@ -14,6 +13,7 @@ import com.fr.design.mainframe.FormToolBarPane; import com.fr.form.ui.Widget; import com.fr.form.web.FormToolBarManager; import com.fr.form.web.Location; +import com.fr.general.IOUtils; import com.fr.general.Inter; import com.fr.stable.ArrayUtils; import com.fr.stable.Constants; @@ -79,7 +79,7 @@ public class ElementCaseToolBarPane extends BasicBeanPane northToolBar.setPreferredSize(new Dimension(ImageObserver.WIDTH, 26)); northToolBar.setBackground(Color.lightGray); - UIButton topButton = new UIButton(BaseUtils.readIcon("com/fr/design/images/arrow/arrow_up.png")); + UIButton topButton = new UIButton(IOUtils.readIcon("com/fr/design/images/arrow/arrow_up.png")); topButton.setBorder(null); topButton.setOpaque(false); topButton.setContentAreaFilled(false); @@ -103,7 +103,7 @@ public class ElementCaseToolBarPane extends BasicBeanPane } }); - UIButton downButton = new UIButton(BaseUtils.readIcon("com/fr/design/images/arrow/arrow_down.png")); + UIButton downButton = new UIButton(IOUtils.readIcon("com/fr/design/images/arrow/arrow_down.png")); downButton.setBorder(null); downButton.setMargin(null); downButton.setOpaque(false); From b7343f7b9927e900060ba02a0935c17970141686 Mon Sep 17 00:00:00 2001 From: frharry Date: Fri, 10 Mar 2017 17:07:40 +0800 Subject: [PATCH 176/343] =?UTF-8?q?REPORT-1344=20=E8=A1=A8=E5=8D=95?= =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E5=9D=97=E7=BF=BB=E9=A1=B5=E6=94=B9=E8=BF=9B?= =?UTF-8?q?=E5=B9=B6=E5=A2=9E=E5=8A=A0=E5=B1=80=E9=83=A8=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/mainframe/FormToolBarButton.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/designer_form/src/com/fr/design/mainframe/FormToolBarButton.java b/designer_form/src/com/fr/design/mainframe/FormToolBarButton.java index 0e08197d3..a9651c7fa 100644 --- a/designer_form/src/com/fr/design/mainframe/FormToolBarButton.java +++ b/designer_form/src/com/fr/design/mainframe/FormToolBarButton.java @@ -99,12 +99,14 @@ public class FormToolBarButton extends JButton implements MouseListener { * @param e 鼠标点击事件 */ public void mouseClicked(MouseEvent e) { + //该button只在报表块工具栏中使用, + //parent只有FormToolBarPane一种,故可以直接强转 + final FormToolBarPane toolBarPane = (FormToolBarPane) this.getParent(); if (BaseUtils.isAuthorityEditing()) { auhtorityMouseAction(); return; } if (e.getClickCount() >= 2) { - final FormToolBarPane toolBarPane = (FormToolBarPane) this.getParent(); final FormEditToolBar editToolBar = new FormEditToolBar(); editToolBar.populate(toolBarPane.getFToolBar(), this); BasicDialog dialog = editToolBar.showWindow(DesignerContext.getDesignerFrame()); @@ -119,11 +121,9 @@ public class FormToolBarButton extends JButton implements MouseListener { private void auhtorityMouseAction() { - if (this.getParent() instanceof FormToolBarPane && this.isEnabled()) { + if (this.isEnabled()) { this.setSelected(!this.isSelected()); - } - } /** From 688237c397bcb1530097b1786fbd7ae128af2c67 Mon Sep 17 00:00:00 2001 From: zack Date: Mon, 13 Mar 2017 18:34:39 +0800 Subject: [PATCH 177/343] =?UTF-8?q?REPORT-2052=20=E6=BC=8F=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/env/RemoteEnv.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/env/RemoteEnv.java b/designer_base/src/com/fr/env/RemoteEnv.java index 4284b2155..ac5732e73 100644 --- a/designer_base/src/com/fr/env/RemoteEnv.java +++ b/designer_base/src/com/fr/env/RemoteEnv.java @@ -55,7 +55,7 @@ import java.util.Timer; import java.util.logging.Level; import java.util.regex.Pattern; -public class RemoteEnv implements Env { +public class RemoteEnv extends AbstractEnv { private static final int TIME_OUT = 30 * 1000; private static final int PLAIN_SOCKET_PORT = 80; private static final int SSL_PORT = 443; From e422507fa15afb161e2d343ce0c655ae8f889b42 Mon Sep 17 00:00:00 2001 From: neil Date: Tue, 14 Mar 2017 19:16:28 +0800 Subject: [PATCH 178/343] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=EF=BC=8C=20release=E8=AE=BE=E8=AE=A1=E5=99=A8=E6=94=AF?= =?UTF-8?q?=E6=8C=811.7jdk?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_form/build.release.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_form/build.release.gradle b/designer_form/build.release.gradle index 90abcb81e..23ee80322 100644 --- a/designer_form/build.release.gradle +++ b/designer_form/build.release.gradle @@ -4,7 +4,7 @@ tasks.withType(JavaCompile){ options.encoding = 'UTF-8' } //指定构建的jdk版本 -sourceCompatibility=1.8 +sourceCompatibility=1.7 //指定生成的jar包版本 version='8.0' From 708cd6e9c541a102cf5ec37a2de7b7c0bccdc344 Mon Sep 17 00:00:00 2001 From: kerry Date: Wed, 15 Mar 2017 10:11:57 +0800 Subject: [PATCH 179/343] =?UTF-8?q?=E6=97=A0jira=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=EF=BC=8C=E5=B1=8F=E8=94=BD=E7=BB=84=E4=BB=B6=E9=9A=90=E8=97=8F?= =?UTF-8?q?=E6=96=B0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/designer/creator/XChartEditor.java | 7 ------- .../src/com/fr/design/designer/creator/XElementCase.java | 7 ------- .../com/fr/design/designer/creator/XWidgetCreator.java | 9 --------- .../src/com/fr/design/gui/xtable/PropertyGroupModel.java | 3 --- 4 files changed, 26 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/creator/XChartEditor.java b/designer_form/src/com/fr/design/designer/creator/XChartEditor.java index 2ac2c12e3..605532ab1 100644 --- a/designer_form/src/com/fr/design/designer/creator/XChartEditor.java +++ b/designer_form/src/com/fr/design/designer/creator/XChartEditor.java @@ -85,13 +85,6 @@ public class XChartEditor extends XBorderStyleWidgetCreator { return new CRPropertyDescriptor[] { new CRPropertyDescriptor("widgetName", this.data.getClass()).setI18NName(Inter .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( WLayoutBorderStyleEditor.class).setI18NName( Inter.getLocText("Chart-Style_Name")).putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced") diff --git a/designer_form/src/com/fr/design/designer/creator/XElementCase.java b/designer_form/src/com/fr/design/designer/creator/XElementCase.java index 7b6dac0e8..a932548cc 100644 --- a/designer_form/src/com/fr/design/designer/creator/XElementCase.java +++ b/designer_form/src/com/fr/design/designer/creator/XElementCase.java @@ -83,13 +83,6 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme CRPropertyDescriptor[] propertyTableEditor = new CRPropertyDescriptor[]{ new CRPropertyDescriptor("widgetName", this.data.getClass()) .setI18NName(Inter.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( WLayoutBorderStyleEditor.class).setI18NName( Inter.getLocText("FR-Designer-Widget_Style")).putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced") diff --git a/designer_form/src/com/fr/design/designer/creator/XWidgetCreator.java b/designer_form/src/com/fr/design/designer/creator/XWidgetCreator.java index 2c1be0eab..9de56622d 100644 --- a/designer_form/src/com/fr/design/designer/creator/XWidgetCreator.java +++ b/designer_form/src/com/fr/design/designer/creator/XWidgetCreator.java @@ -146,15 +146,6 @@ public abstract class XWidgetCreator extends XCreator { } } - /** - * 渲染Painter - */ - public void paint(Graphics g) { - //不可见时,按钮.4f透明 - AlphaComposite composite = this.data.isVisible() ? (AlphaComposite)((Graphics2D)g).getComposite() : AlphaComposite.getInstance(AlphaComposite.SRC_OVER,HALF_OPACITY); - ((Graphics2D)g).setComposite(composite); - super.paint(g); - } /** * 重命名 * diff --git a/designer_form/src/com/fr/design/gui/xtable/PropertyGroupModel.java b/designer_form/src/com/fr/design/gui/xtable/PropertyGroupModel.java index bb0f0cd3a..8e8cadad1 100644 --- a/designer_form/src/com/fr/design/gui/xtable/PropertyGroupModel.java +++ b/designer_form/src/com/fr/design/gui/xtable/PropertyGroupModel.java @@ -53,9 +53,6 @@ public class PropertyGroupModel extends AbstractPropertyGroupModel { if(ComparatorUtils.equals(FormConstants.NAME, properties[row].getName())){ creator.resetCreatorName(value.toString()); } - if(ComparatorUtils.equals("visible", properties[row].getName())){ - creator.resetVisible((boolean) value); - } properties[row].firePropertyChanged(); return true; } catch (Exception e) { From f3f8b4563b5e3c261e23de4af8e50b198df5b80a Mon Sep 17 00:00:00 2001 From: plough Date: Wed, 15 Mar 2017 11:32:20 +0800 Subject: [PATCH 180/343] =?UTF-8?q?REPORT-1916=20=E5=81=9A=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E7=9A=84=E8=BF=87=E7=A8=8B=E5=92=8C=E8=80=97=E6=97=B6?= =?UTF-8?q?=E6=94=B6=E9=9B=86=3D=E3=80=8B=E9=87=8D=E6=9E=84=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=EF=BC=8C=E5=B0=86process=E5=92=8Cconsuming=E5=88=86?= =?UTF-8?q?=E7=A6=BB=EF=BC=8C=E6=9A=82=E6=97=B6=E4=B8=8D=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E8=BF=87=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer/TemplateProcessTracker.aj | 13 +- .../designerbase/TemplateProcessTracker.aj | 9 +- .../templateinfo/TemplateInfoCollector.java | 176 +++++++++++++----- .../templateinfo/TemplateProcessTracker.aj | 71 ------- .../designerchart/TemplateProcessTracker.aj | 9 +- .../designerform/TemplateProcessTracker.aj | 13 +- 6 files changed, 159 insertions(+), 132 deletions(-) delete mode 100644 designer_base/src/com/fr/design/mainframe/templateinfo/TemplateProcessTracker.aj diff --git a/designer/src/com/fr/aspectj/designer/TemplateProcessTracker.aj b/designer/src/com/fr/aspectj/designer/TemplateProcessTracker.aj index 24dfc7351..0b3ea7083 100644 --- a/designer/src/com/fr/aspectj/designer/TemplateProcessTracker.aj +++ b/designer/src/com/fr/aspectj/designer/TemplateProcessTracker.aj @@ -33,7 +33,8 @@ public aspect TemplateProcessTracker { before(MouseEvent e) : onMouseClicked(e) || onMousePressed(e) || onMouseReleased(e) { SourceLocation sl = thisJoinPoint.getSourceLocation();//切面对应的代码位置 - String log = String.format("%s:\n%s\n%s\n%s\n\n", new Date(), sl, e, e.getSource()); +// String log = String.format("%s:\n%s\n%s\n%s\n\n", new Date(), sl, e, e.getSource()); + String log = ""; TemplateInfoCollector.appendProcess(log); } //同上 @@ -44,7 +45,8 @@ public aspect TemplateProcessTracker { return; } - String log = String.format("%s:\n%s\n%s\n%s\n\n", new Date(), sl, e, e.getSource()); + //String log = String.format("%s:\n%s\n%s\n%s\n\n", new Date(), sl, e, e.getSource()); + String log = ""; TemplateInfoCollector.appendProcess(log); } @@ -56,7 +58,8 @@ public aspect TemplateProcessTracker { // return; // } - String log = String.format("%s:\n%s\nset value: %s at (%d, %d)\n\n", new Date(), sl, v, r, c); + //String log = String.format("%s:\n%s\nset value: %s at (%d, %d)\n\n", new Date(), sl, v, r, c); + String log = ""; TemplateInfoCollector.appendProcess(log); } @@ -65,9 +68,9 @@ public aspect TemplateProcessTracker { SourceLocation sl = thisJoinPoint.getSourceLocation(); // String v = "test"; - String log = String.format("%s:\n%s\nset value: %s at %s\n\n", new Date(), sl, v, g.getEditingCellElement()); + //String log = String.format("%s:\n%s\nset value: %s at %s\n\n", new Date(), sl, v, g.getEditingCellElement()); + String log = ""; TemplateInfoCollector.appendProcess(log); - } diff --git a/designer_base/src/com/fr/aspectj/designerbase/TemplateProcessTracker.aj b/designer_base/src/com/fr/aspectj/designerbase/TemplateProcessTracker.aj index 04e3fa2e4..b07ec9951 100644 --- a/designer_base/src/com/fr/aspectj/designerbase/TemplateProcessTracker.aj +++ b/designer_base/src/com/fr/aspectj/designerbase/TemplateProcessTracker.aj @@ -30,7 +30,8 @@ public aspect TemplateProcessTracker { before(MouseEvent e) : onMouseClicked(e) || onMousePressed(e) || onMouseReleased(e) { SourceLocation sl = thisJoinPoint.getSourceLocation();//切面对应的代码位置 - String log = String.format("%s:\n%s\n%s\n%s\n\n", new Date(), sl, e, e.getSource()); + //String log = String.format("%s:\n%s\n%s\n%s\n\n", new Date(), sl, e, e.getSource()); + String log = ""; TemplateInfoCollector.appendProcess(log); } //同上 @@ -41,7 +42,8 @@ public aspect TemplateProcessTracker { return; } - String log = String.format("%s:\n%s\n%s\n%s\n\n", new Date(), sl, e, e.getSource()); + //String log = String.format("%s:\n%s\n%s\n%s\n\n", new Date(), sl, e, e.getSource()); + String log = ""; TemplateInfoCollector.appendProcess(log); } @@ -53,7 +55,8 @@ public aspect TemplateProcessTracker { // return; // } - String log = String.format("%s:\n%s\nset value: %s at (%d, %d)\n\n", new Date(), sl, v, r, c); + //String log = String.format("%s:\n%s\nset value: %s at (%d, %d)\n\n", new Date(), sl, v, r, c); + String log = ""; TemplateInfoCollector.appendProcess(log); } diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java index 95ced6330..7c2ef0eab 100644 --- a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java @@ -1,15 +1,21 @@ package com.fr.design.mainframe.templateinfo; +import com.fr.base.FRContext; import com.fr.base.io.IOFile; import com.fr.design.DesignerEnvManager; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.JTemplate; +import com.fr.general.ComparatorUtils; import com.fr.general.FRLogger; import com.fr.general.GeneralUtils; -import com.fr.stable.ProductConstants; -import com.fr.stable.StableUtils; +import com.fr.general.http.HttpClient; +import com.fr.stable.*; +import org.json.JSONObject; import java.io.*; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; import java.util.Date; import java.util.HashMap; @@ -51,7 +57,6 @@ public class TemplateInfoCollector implements Serializable { } public static void appendProcess(String log) { -// System.out.println(log); // 获取当前编辑的模板 JTemplate jt = DesignerContext.getDesignerFrame().getSelectedJTemplate(); // 追加过程记录 @@ -61,9 +66,10 @@ public class TemplateInfoCollector implements Serializable { /** * 加载已经存储的模板过程 */ + @SuppressWarnings("unchecked") public String loadProcess(T t) { -// return ""; - return (String)templateInfoList.get(t.getReportletsid()).get("process"); + HashMap processMap = (HashMap) templateInfoList.get(t.getReportletsid()).get("processMap"); + return (String)processMap.get("process"); } /** @@ -77,8 +83,8 @@ public class TemplateInfoCollector implements Serializable { private void saveInfo() { try { ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(getInfoFile())); - System.out.println("写入:" + instance.templateInfoList); - os.writeObject(instance.templateInfoList); + System.out.println("写入:" + templateInfoList); + os.writeObject(templateInfoList); os.close(); } catch (Exception ex) { ex.printStackTrace(); @@ -99,53 +105,137 @@ public class TemplateInfoCollector implements Serializable { public void collectInfo(T t, JTemplate jt, long openTime, long saveTime) { HashMap templateInfo; - if (inList(t)) { // 已有记录 + long timeConsume = saveTime - openTime; // 制作模板耗时 + String reportletsid = t.getReportletsid(); + + if (inList(t)) { // 已有记录 templateInfo = templateInfoList.get(t.getReportletsid()); - } else { // 新增 + // 更新 conusmingMap + HashMap consumingMap = (HashMap) templateInfo.get("consumingMap"); + timeConsume += (long)consumingMap.get("time_consume"); // 加上之前的累计编辑时间 + consumingMap.put("time_consume", timeConsume); + } + else { // 新增 templateInfo = new HashMap<>(); + templateInfo.put("consumingMap", getNewConsumingMap(reportletsid, openTime, timeConsume)); + } + + // 直接覆盖 processMap + templateInfo.put("processMap", getProcessMap(reportletsid, jt)); + + // TODO: 更新模板是否完成的标记 + + + templateInfoList.put(reportletsid, templateInfo); + + saveInfo(); // 每次更新之后,都同步到暂存文件中 + } + + private HashMap getNewConsumingMap(String reportletsid, long openTime, long timeConsume) { + HashMap consumingMap = new HashMap<>(); + + String username = DesignerEnvManager.getEnvManager().getBBSName(); + String uuid = DesignerEnvManager.getEnvManager().getUUID(); + String activitykey = DesignerEnvManager.getEnvManager().getActivationKey(); +// String createTime = new Date(openTime).toString(); + String createTime = new SimpleDateFormat("yyyy-MM-dd hh:mm").format(Calendar.getInstance().getTime()); + String jarTime = GeneralUtils.readBuildNO(); + String version = ProductConstants.VERSION; + consumingMap.put("username", username); + consumingMap.put("uuid", uuid); + consumingMap.put("activitykey", activitykey); + consumingMap.put("reportletsid", reportletsid); + consumingMap.put("create_time", createTime); + consumingMap.put("time_consume", timeConsume); + consumingMap.put("jar_time", jarTime); + consumingMap.put("version", version); + + return consumingMap; + } + + private HashMap getProcessMap(String reportletsid, JTemplate jt) { + HashMap processMap = new HashMap<>(); - String username = DesignerEnvManager.getEnvManager().getBBSName(); - String uuid = DesignerEnvManager.getEnvManager().getUUID(); - String activitykey = DesignerEnvManager.getEnvManager().getActivationKey(); - String reportletsid = t.getReportletsid(); - String createTime = new Date(openTime).toString(); - int reportType = jt.getReportType(); - String jarTime = GeneralUtils.readBuildNO(); - String version = ProductConstants.VERSION; - templateInfo.put("username", username); - templateInfo.put("uuid", uuid); - templateInfo.put("activitykey", activitykey); - templateInfo.put("reportletsid", reportletsid); - templateInfo.put("create_time", createTime); - templateInfo.put("report_type", reportType); - templateInfo.put("jar_time", jarTime); - templateInfo.put("version", version); + processMap.put("reportletsid", reportletsid); + processMap.put("process", jt.getProcess()); + processMap.put("report_type", jt.getReportType()); + processMap.put("cell_count", jt.getCellCount()); + processMap.put("float_count", jt.getFloatCount()); + processMap.put("block_count", jt.getBlockCount()); + processMap.put("widget_count", jt.getWidgetCount()); + + return processMap; + } + + /** + * 发送本地模板信息到服务器 + */ + public void sendTemplateInfo() { + + String url1 = "http://cloud.fanruan.com/api/monitor/record_of_make_reports/single"; + ArrayList> completeTemplatesInfo = getCompleteTemplatesInfo(); + for (HashMap templateInfo : completeTemplatesInfo) { + String jsonConsumingMap = templateInfo.get("jsonConsumingMap"); + String jsonProcessMap = templateInfo.get("jsonProcessMap"); + if (sendSingleTemplateInfo(url1, jsonConsumingMap) && sendSingleTemplateInfo(url1, jsonProcessMap)) { + // TODO: 清空记录 + System.out.println("success"); + } } +// //服务器返回true, 说明已经获取成功, 清空当前记录的信息 +// if (success) { +// System.out.println("success"); +// } else { +// System.out.println("fail"); +// } + } - long timeConsume = saveTime - openTime; - // 如果已存有数据,则加上之前的累计编辑时间 - if (templateInfo.get("time_consume") != null) { - timeConsume += (long)templateInfo.get("time_consume"); + private boolean sendSingleTemplateInfo(String url, String content) { + HashMap para = new HashMap<>(); + String date = new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime()); + para.put("token", CodeUtils.md5Encode(date, "", "MD5")); + para.put("content", content); +// para.put("content", "{name:3, age:3}"); +// HttpClient httpClient = new HttpClient("http://cloud.fanruan.com/api/monitor/record_of_make_reports/single", para, true); + HttpClient httpClient = new HttpClient(url, para, true); + + //httpClient.setContent(getCompleteTemplatesInfo()); + httpClient.setTimeout(5000); + httpClient.asGet(); + + if (!httpClient.isServerAlive()) { + return false; } - String process = jt.getProcess(); - int cellCount = jt.getCellCount(); - int floatCount = jt.getFloatCount(); - int blockCount = jt.getBlockCount(); - int widgetCount = jt.getWidgetCount(); - templateInfo.put("time_consume", timeConsume); - templateInfo.put("process", process); - templateInfo.put("cell_count", cellCount); - templateInfo.put("float_count", floatCount); - templateInfo.put("block_count", blockCount); - templateInfo.put("widget_count", widgetCount); - templateInfoList.put(t.getReportletsid(), templateInfo); + String res = httpClient.getResponseText(); + boolean success = ComparatorUtils.equals(new JSONObject(res).get("status"), "success"); + return success; + } - saveInfo(); // 每次更新之后,都同步到暂存文件中 + // 返回已完成的模板信息 + @SuppressWarnings("unchecked") + private ArrayList> getCompleteTemplatesInfo() { + ArrayList> completeTemplatesInfo = new ArrayList<>(); + for (String key : templateInfoList.keySet()) { + HashMap templateInfo = new HashMap<>(); + HashMap consumingMap = (HashMap) templateInfoList.get(key).get("consumingMap"); + HashMap processMap = (HashMap) templateInfoList.get(key).get("processMap"); + String jsonConsumingMap = new JSONObject(consumingMap).toString(); + String jsonProcessMap = new JSONObject(processMap).toString(); + templateInfo.put("jsonConsumingMap", jsonConsumingMap); + templateInfo.put("jsonProcessMap", jsonProcessMap); + templateInfo.put("reportletsid", key); + completeTemplatesInfo.add(templateInfo); // TODO 暂未添加筛选条件 + } + return completeTemplatesInfo; } + + public static void main(String[] args) { TemplateInfoCollector tic = TemplateInfoCollector.getInstance(); - tic.getInfoList(); +// tic.getInfoList(); + tic.sendTemplateInfo(); + } } diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateProcessTracker.aj b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateProcessTracker.aj deleted file mode 100644 index d186f8298..000000000 --- a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateProcessTracker.aj +++ /dev/null @@ -1,71 +0,0 @@ -//package com.fr.design.mainframe.templateinfo; -// -//import org.aspectj.lang.reflect.SourceLocation; -// -//import java.awt.event.ActionEvent; -//import java.awt.event.MouseEvent; -//import java.util.Date; -// -///** -// * 记录模板过程 -// * Created by plough on 2017/2/27. -// */ -//public aspect TemplateProcessTracker { -// //声明一个pointcut,匹配你需要的方法 -// pointcut onMouseClicked(MouseEvent e) : -// execution(* mouseClicked(MouseEvent)) && args(e); -// pointcut onMousePressed(MouseEvent e) : -// execution(* mousePressed(MouseEvent)) && args(e); -// pointcut onMouseReleased(MouseEvent e) : -// execution(* mouseReleased(MouseEvent)) && args(e); -// pointcut onActionPerformed(ActionEvent e) : -// execution(* actionPerformed(ActionEvent)) && args(e); -// pointcut onSetValueAt(Object v, int r, int c) : -// execution(* setValueAt(Object, int, int)) && args(v, r, c); -// pointcut onSetValue4EditingElement(Object v) : -// execution(* setValue4EditingElement(Object)) && args(v); -// -// //before表示之前的意思 -// //这整个表示在MouseAdapter的public void mouseXXX(MouseEvent)方法调用之前,你想要执行的代码 -// before(MouseEvent e) : onMouseClicked(e) || onMousePressed(e) || onMouseReleased(e) { -// SourceLocation sl = thisJoinPoint.getSourceLocation();//切面对应的代码位置 -// -// String log = String.format("%s:\n%s\n%s\n%s\n\n", new Date(), sl, e, e.getSource()); -// TemplateInfoCollector.appendProcess(log); -// } -// //同上 -// before(ActionEvent e) : onActionPerformed(e) { -// SourceLocation sl = thisJoinPoint.getSourceLocation(); -// // !within(LogHandlerBar) 没用, 手动过滤 -// if (e.getSource().toString().contains("javax.swing.Timer")) { -// return; -// } -// -// String log = String.format("%s:\n%s\n%s\n%s\n\n", new Date(), sl, e, e.getSource()); -// TemplateInfoCollector.appendProcess(log); -// -// } -// //同上 -// before(Object v, int r, int c) : onSetValueAt(v, r, c) { -// SourceLocation sl = thisJoinPoint.getSourceLocation(); -// // !within(LogHandlerBar) 没用, 手动过滤 -//// if (e.getSource().toString().contains("javax.swing.Timer")) { -//// return; -//// } -// -// String log = String.format("%s:\n%s\nset value: %s at (%d, %d)\n\n", new Date(), sl, v, r, c); -// TemplateInfoCollector.appendProcess(log); -// -// } -// //同上 -// before(Object v) : onSetValue4EditingElement(v) { -// SourceLocation sl = thisJoinPoint.getSourceLocation(); -// -//// String v = "test"; -// String log = String.format("%s:\n%s\nset value: %s\n\n", new Date(), sl, v); -// TemplateInfoCollector.appendProcess(log); -// -// } -// -// -//} diff --git a/designer_chart/src/com/fr/aspectj/designerchart/TemplateProcessTracker.aj b/designer_chart/src/com/fr/aspectj/designerchart/TemplateProcessTracker.aj index c192a190d..51e86fd15 100644 --- a/designer_chart/src/com/fr/aspectj/designerchart/TemplateProcessTracker.aj +++ b/designer_chart/src/com/fr/aspectj/designerchart/TemplateProcessTracker.aj @@ -30,7 +30,8 @@ public aspect TemplateProcessTracker { before(MouseEvent e) : onMouseClicked(e) || onMousePressed(e) || onMouseReleased(e) { SourceLocation sl = thisJoinPoint.getSourceLocation();//切面对应的代码位置 - String log = String.format("%s:\n%s\n%s\n%s\n\n", new Date(), sl, e, e.getSource()); + //String log = String.format("%s:\n%s\n%s\n%s\n\n", new Date(), sl, e, e.getSource()); + String log = ""; TemplateInfoCollector.appendProcess(log); } //同上 @@ -41,14 +42,16 @@ public aspect TemplateProcessTracker { return; } - String log = String.format("%s:\n%s\n%s\n%s\n\n", new Date(), sl, e, e.getSource()); + //String log = String.format("%s:\n%s\n%s\n%s\n\n", new Date(), sl, e, e.getSource()); + String log = ""; TemplateInfoCollector.appendProcess(log); } //同上 before(Chart c) : onChartUpdate(c) { SourceLocation sl = thisJoinPoint.getSourceLocation(); - String log = String.format("%s:\n%s\n插入新图表:%s\n\n", new Date(), sl, c.getChartName()); + //String log = String.format("%s:\n%s\n插入新图表:%s\n\n", new Date(), sl, c.getChartName()); + String log = ""; TemplateInfoCollector.appendProcess(log); } diff --git a/designer_form/src/com/fr/aspectj/designerform/TemplateProcessTracker.aj b/designer_form/src/com/fr/aspectj/designerform/TemplateProcessTracker.aj index 885d21ecd..0aabeb362 100644 --- a/designer_form/src/com/fr/aspectj/designerform/TemplateProcessTracker.aj +++ b/designer_form/src/com/fr/aspectj/designerform/TemplateProcessTracker.aj @@ -28,7 +28,8 @@ public aspect TemplateProcessTracker { before(MouseEvent e) : onMouseClicked(e) || onMousePressed(e) || onMouseReleased(e) { SourceLocation sl = thisJoinPoint.getSourceLocation();//切面对应的代码位置 - String log = String.format("%s:\n%s\n%s\n%s\n\n", new Date(), sl, e, e.getSource()); + //String log = String.format("%s:\n%s\n%s\n%s\n\n", new Date(), sl, e, e.getSource()); + String log = ""; TemplateInfoCollector.appendProcess(log); } //同上 @@ -39,19 +40,17 @@ public aspect TemplateProcessTracker { return; } - String log = String.format("%s:\n%s\n%s\n%s\n\n", new Date(), sl, e, e.getSource()); + //String log = String.format("%s:\n%s\n%s\n%s\n\n", new Date(), sl, e, e.getSource()); + String log = ""; TemplateInfoCollector.appendProcess(log); } //同上 before(Object v, int r, int c) : onSetValueAt(v, r, c) { SourceLocation sl = thisJoinPoint.getSourceLocation(); - // !within(LogHandlerBar) 没用, 手动过滤 -// if (e.getSource().toString().contains("javax.swing.Timer")) { -// return; -// } - String log = String.format("%s:\n%s\nset value: %s at (%d, %d)\n\n", new Date(), sl, v, r, c); + //String log = String.format("%s:\n%s\nset value: %s at (%d, %d)\n\n", new Date(), sl, v, r, c); + String log = ""; TemplateInfoCollector.appendProcess(log); } From 66f7e6fbcbc65d058d64aef67739971eb9884aec Mon Sep 17 00:00:00 2001 From: plough Date: Wed, 15 Mar 2017 16:21:02 +0800 Subject: [PATCH 181/343] =?UTF-8?q?REPORT-1916=20=E5=81=9A=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E7=9A=84=E8=BF=87=E7=A8=8B=E5=92=8C=E8=80=97=E6=97=B6?= =?UTF-8?q?=E6=94=B6=E9=9B=86=3D=E3=80=8B=E4=B8=8A=E4=BC=A0=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E6=95=B0=E6=8D=AE=E5=89=8D=EF=BC=8C=E5=88=A4=E6=96=AD?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E6=98=AF=E5=90=A6=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/InformationCollector.java | 2 + .../templateinfo/TemplateInfoCollector.java | 90 +++++++++++++++---- 2 files changed, 73 insertions(+), 19 deletions(-) diff --git a/designer/src/com/fr/design/mainframe/InformationCollector.java b/designer/src/com/fr/design/mainframe/InformationCollector.java index a4b3fc6ab..f50cc5dad 100644 --- a/designer/src/com/fr/design/mainframe/InformationCollector.java +++ b/designer/src/com/fr/design/mainframe/InformationCollector.java @@ -10,6 +10,7 @@ import com.fr.data.core.db.dml.Delete; import com.fr.data.core.db.dml.Select; import com.fr.data.core.db.dml.Table; import com.fr.design.DesignerEnvManager; +import com.fr.design.mainframe.templateinfo.TemplateInfoCollector; import com.fr.general.*; import com.fr.general.http.HttpClient; import com.fr.json.JSONArray; @@ -315,6 +316,7 @@ public class InformationCollector implements XMLReadable, XMLWriter { } sendFunctionsInfo(); sendUserInfo(); + TemplateInfoCollector.getInstance().sendTemplateInfo(); } }); sendThread.start(); diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java index 7c2ef0eab..83c7c1d63 100644 --- a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java @@ -27,19 +27,38 @@ public class TemplateInfoCollector implements Serializable { private static final String FILE_NAME = "tplInfo.ser"; private static TemplateInfoCollector instance; private HashMap> templateInfoList; + private String designerOpenDate; //设计器最近一次打开日期 @SuppressWarnings("unchecked") private TemplateInfoCollector() { - // 先尝试从文件读取 - try{ - ObjectInputStream is = new ObjectInputStream(new FileInputStream(getInfoFile())); - templateInfoList = (HashMap>) is.readObject(); - } catch (FileNotFoundException ex) { - // 如果之前没有存储过,则创建新对象 - templateInfoList = new HashMap<>(); - } catch (Exception ex) { - FRLogger.getLogger().error(ex.getMessage(), ex); - } +// // 先尝试从文件读取 +// try{ +// ObjectInputStream is = new ObjectInputStream(new FileInputStream(getInfoFile())); +//// templateInfoList = (HashMap>) is.readObject(); +// instance = (HashMap>) is.readObject(); +// } catch (FileNotFoundException ex) { +// // 如果之前没有存储过,则创建新对象 +// templateInfoList = new HashMap<>(); +// } catch (Exception ex) { +// FRLogger.getLogger().error(ex.getMessage(), ex); +// } + templateInfoList = new HashMap<>(); + setDesignerOpenDate(); + } + + /** + * 把设计器最近打开日期设定为当前日期 + */ + private void setDesignerOpenDate() { + designerOpenDate = new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime()); + } + + /** + * 判断今天是否第一次打开设计器 + */ + private boolean designerOpenFirstTime() { + String today = new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime()); + return !ComparatorUtils.equals(today, designerOpenDate); } /** @@ -50,8 +69,21 @@ public class TemplateInfoCollector implements Serializable { } public static TemplateInfoCollector getInstance() { +// if (instance == null) { +// instance = new TemplateInfoCollector(); +// } +// return instance; if (instance == null) { - instance = new TemplateInfoCollector(); + // 先尝试从文件读取 + try{ + ObjectInputStream is = new ObjectInputStream(new FileInputStream(getInfoFile())); + instance = (TemplateInfoCollector) is.readObject(); + } catch (FileNotFoundException ex) { + // 如果之前没有存储过,则创建新对象 + instance = new TemplateInfoCollector(); + } catch (Exception ex) { + FRLogger.getLogger().error(ex.getMessage(), ex); + } } return instance; } @@ -83,8 +115,8 @@ public class TemplateInfoCollector implements Serializable { private void saveInfo() { try { ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(getInfoFile())); - System.out.println("写入:" + templateInfoList); - os.writeObject(templateInfoList); + System.out.println("写入:" + instance.templateInfoList); + os.writeObject(instance); os.close(); } catch (Exception ex) { ex.printStackTrace(); @@ -98,6 +130,20 @@ public class TemplateInfoCollector implements Serializable { return templateInfoList; } + /** + * 更新 day_count:打开设计器却未编辑模板的连续日子 + */ + private void addDayCount() { + if (designerOpenFirstTime()) { + for (String key : templateInfoList.keySet()) { + HashMap templateInfo = templateInfoList.get(key); + int dayCount = (int)templateInfo.get("day_count") + 1; + templateInfo.put("day_count", dayCount); + } + setDesignerOpenDate(); + } + } + /** * 收集模板信息。如果之前没有记录,则新增;如果已有记录,则更新。 * 同时将最新数据保存到文件中。 @@ -105,7 +151,7 @@ public class TemplateInfoCollector implements Serializable { public void collectInfo(T t, JTemplate jt, long openTime, long saveTime) { HashMap templateInfo; - long timeConsume = saveTime - openTime; // 制作模板耗时 + long timeConsume = ((saveTime - openTime) / 1000); // 制作模板耗时(单位:s) String reportletsid = t.getReportletsid(); if (inList(t)) { // 已有记录 @@ -123,7 +169,8 @@ public class TemplateInfoCollector implements Serializable { // 直接覆盖 processMap templateInfo.put("processMap", getProcessMap(reportletsid, jt)); - // TODO: 更新模板是否完成的标记 + // 保存模板时,让 day_count 归零 + templateInfo.put("day_count", 0); templateInfoList.put(reportletsid, templateInfo); @@ -138,7 +185,7 @@ public class TemplateInfoCollector implements Serializable { String uuid = DesignerEnvManager.getEnvManager().getUUID(); String activitykey = DesignerEnvManager.getEnvManager().getActivationKey(); // String createTime = new Date(openTime).toString(); - String createTime = new SimpleDateFormat("yyyy-MM-dd hh:mm").format(Calendar.getInstance().getTime()); + String createTime = new SimpleDateFormat("yyyy-MM-dd HH:mm").format(Calendar.getInstance().getTime()); String jarTime = GeneralUtils.readBuildNO(); String version = ProductConstants.VERSION; consumingMap.put("username", username); @@ -171,17 +218,19 @@ public class TemplateInfoCollector implements Serializable { * 发送本地模板信息到服务器 */ public void sendTemplateInfo() { - + addDayCount(); String url1 = "http://cloud.fanruan.com/api/monitor/record_of_make_reports/single"; ArrayList> completeTemplatesInfo = getCompleteTemplatesInfo(); for (HashMap templateInfo : completeTemplatesInfo) { String jsonConsumingMap = templateInfo.get("jsonConsumingMap"); String jsonProcessMap = templateInfo.get("jsonProcessMap"); if (sendSingleTemplateInfo(url1, jsonConsumingMap) && sendSingleTemplateInfo(url1, jsonProcessMap)) { - // TODO: 清空记录 + // 清空记录 System.out.println("success"); + templateInfoList.remove(templateInfo.get("reportletsid")); } } + saveInfo(); // //服务器返回true, 说明已经获取成功, 清空当前记录的信息 // if (success) { // System.out.println("success"); @@ -217,6 +266,9 @@ public class TemplateInfoCollector implements Serializable { private ArrayList> getCompleteTemplatesInfo() { ArrayList> completeTemplatesInfo = new ArrayList<>(); for (String key : templateInfoList.keySet()) { + if ((int)templateInfoList.get(key).get("day_count") <= 15) { // 未完成模板 + continue; + } HashMap templateInfo = new HashMap<>(); HashMap consumingMap = (HashMap) templateInfoList.get(key).get("consumingMap"); HashMap processMap = (HashMap) templateInfoList.get(key).get("processMap"); @@ -234,7 +286,7 @@ public class TemplateInfoCollector implements Serializable { public static void main(String[] args) { TemplateInfoCollector tic = TemplateInfoCollector.getInstance(); -// tic.getInfoList(); + tic.getInfoList(); tic.sendTemplateInfo(); } From 6b6c4c43e026728eb3cffb7e36ed56475b110e2f Mon Sep 17 00:00:00 2001 From: fr_shine Date: Wed, 15 Mar 2017 17:15:21 +0800 Subject: [PATCH 182/343] =?UTF-8?q?=E6=8E=A7=E4=BB=B6=E5=90=8D=E7=A7=B0?= =?UTF-8?q?=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/chart/gui/ChartTypePane.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypePane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypePane.java index 172d040f3..0b5cfe6c9 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypePane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypePane.java @@ -33,7 +33,7 @@ import java.util.List; * @version 创建时间:2012-12-26 上午10:56:51 */ public class ChartTypePane extends AbstractChartAttrPane{ - private ComboBoxPane chartTypePane; + private ComboBoxPane chartTypeComBox; private ChartTypeButtonPane buttonPane; private ChartEditPane editPane; private ChartCollection editingCollection; @@ -72,13 +72,13 @@ public class ChartTypePane extends AbstractChartAttrPane{ if (editingCollection != null) { relayoutChartTypePane(editingCollection); }else { - chartTypePane = new ComboBoxPane(); + chartTypeComBox = new ComboBoxPane(); } BasicScrollPane scrollPane = new BasicScrollPane() { @Override protected JPanel createContentPane() { - return chartTypePane; + return chartTypeComBox; } @Override @@ -99,7 +99,7 @@ public class ChartTypePane extends AbstractChartAttrPane{ }; content.add(scrollPane, BorderLayout.CENTER); - buttonPane.setEditingChartPane(chartTypePane); + buttonPane.setEditingChartPane(chartTypeComBox); return content; } @@ -286,7 +286,7 @@ public class ChartTypePane extends AbstractChartAttrPane{ public void relayoutChartTypePane(ChartCollection collection){ if (needRelayout(collection)) { - chartTypePane.relayout(collection); + chartTypeComBox.relayout(collection); //设置面板切换状态 updatePaneState(collection); } @@ -314,7 +314,7 @@ public class ChartTypePane extends AbstractChartAttrPane{ initContentPane(); buttonPane.populateBean(collection); - chartTypePane.populateBean(chart); + chartTypeComBox.populateBean(chart); this.initAllListeners(); } @@ -326,7 +326,7 @@ public class ChartTypePane extends AbstractChartAttrPane{ editingCollection = collection; buttonPane.update(collection);// 内部操作时 已经做过处理. Chart chart = collection.getSelectedChart(); - chartTypePane.updateBean(chart); + chartTypeComBox.updateBean(chart); } /** @@ -334,7 +334,7 @@ public class ChartTypePane extends AbstractChartAttrPane{ * @return 类型界面 */ public FurtherBasicBeanPane[] getPaneList(){ - return chartTypePane.getCards().toArray(new FurtherBasicBeanPane[0]); + return chartTypeComBox.getCards().toArray(new FurtherBasicBeanPane[0]); } /** @@ -342,7 +342,7 @@ public class ChartTypePane extends AbstractChartAttrPane{ * @return 当前选中的图表的index */ public int getSelectedIndex(){ - return chartTypePane.getSelectedIndex(); + return chartTypeComBox.getSelectedIndex(); } /** @@ -350,7 +350,7 @@ public class ChartTypePane extends AbstractChartAttrPane{ * @return 选中的图标的序号 */ public int getSelectedChartIndex(){ - return chartTypePane.getSelectedIndex(); + return chartTypeComBox.getSelectedIndex(); } /** From 3b81c50ed16efe8ba83e343a5acbe19f37beb544 Mon Sep 17 00:00:00 2001 From: zack Date: Wed, 15 Mar 2017 17:19:39 +0800 Subject: [PATCH 183/343] =?UTF-8?q?REPORT-2052=20=E5=8E=8B=E7=BC=A9?= =?UTF-8?q?=E9=83=A8=E7=BD=B2=E5=8A=A0=E8=BD=BD=E6=8F=92=E4=BB=B6=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E9=87=8D=E6=9E=84=20design=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E5=AE=89=E8=A3=85=E7=9A=84=E6=97=B6=E5=80=99=E5=AE=9E?= =?UTF-8?q?=E6=97=B6=E6=94=B9=E5=8F=98pluginconfig?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/extra/PluginHelper.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/designer_base/src/com/fr/design/extra/PluginHelper.java b/designer_base/src/com/fr/design/extra/PluginHelper.java index be0244f78..107bbf2ac 100644 --- a/designer_base/src/com/fr/design/extra/PluginHelper.java +++ b/designer_base/src/com/fr/design/extra/PluginHelper.java @@ -7,6 +7,7 @@ import com.fr.design.extra.plugindependence.DownLoadDependenceUI; import com.fr.general.*; import com.fr.general.http.HttpClient; import com.fr.plugin.Plugin; +import com.fr.plugin.PluginConfigManager; import com.fr.stable.plugin.PluginConstants; import com.fr.plugin.PluginLoader; import com.fr.plugin.PluginManagerHelper; @@ -225,6 +226,8 @@ public class PluginHelper { } // 删除放解压文件的临时文件夹 StableUtils.deleteFile(new File(TEMP_PATH)); + PluginConfigManager.getProviderInstance().pushNewPlugin(plugin); + PluginConfigManager.getProviderInstance().syncPluginConfig(); new SwingWorker() { @Override From 77e8710f6cea1148f564a1b6bf53a9c7b3beb282 Mon Sep 17 00:00:00 2001 From: plough Date: Thu, 16 Mar 2017 09:47:27 +0800 Subject: [PATCH 184/343] =?UTF-8?q?REPORT-1916=20=E5=81=9A=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E7=9A=84=E8=BF=87=E7=A8=8B=E5=92=8C=E8=80=97=E6=97=B6?= =?UTF-8?q?=E6=94=B6=E9=9B=86=3D=E3=80=8B=E8=B0=83=E6=95=B4=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../templateinfo/TemplateInfoCollector.java | 59 ++++--------------- 1 file changed, 13 insertions(+), 46 deletions(-) diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java index 83c7c1d63..891fc5b20 100644 --- a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java @@ -1,6 +1,5 @@ package com.fr.design.mainframe.templateinfo; -import com.fr.base.FRContext; import com.fr.base.io.IOFile; import com.fr.design.DesignerEnvManager; import com.fr.design.mainframe.DesignerContext; @@ -16,7 +15,6 @@ import java.io.*; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; -import java.util.Date; import java.util.HashMap; /** @@ -31,17 +29,6 @@ public class TemplateInfoCollector implements Serializable { @SuppressWarnings("unchecked") private TemplateInfoCollector() { -// // 先尝试从文件读取 -// try{ -// ObjectInputStream is = new ObjectInputStream(new FileInputStream(getInfoFile())); -//// templateInfoList = (HashMap>) is.readObject(); -// instance = (HashMap>) is.readObject(); -// } catch (FileNotFoundException ex) { -// // 如果之前没有存储过,则创建新对象 -// templateInfoList = new HashMap<>(); -// } catch (Exception ex) { -// FRLogger.getLogger().error(ex.getMessage(), ex); -// } templateInfoList = new HashMap<>(); setDesignerOpenDate(); } @@ -69,10 +56,6 @@ public class TemplateInfoCollector implements Serializable { } public static TemplateInfoCollector getInstance() { -// if (instance == null) { -// instance = new TemplateInfoCollector(); -// } -// return instance; if (instance == null) { // 先尝试从文件读取 try{ @@ -111,7 +94,9 @@ public class TemplateInfoCollector implements Serializable { return templateInfoList.containsKey(t.getReportletsid()); } - // 将包含所有信息的对象保存到文件 + /** + * 将包含所有信息的对象保存到文件 + */ private void saveInfo() { try { ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(getInfoFile())); @@ -123,13 +108,6 @@ public class TemplateInfoCollector implements Serializable { } } - public HashMap getInfoList() { - for (String key : templateInfoList.keySet()) { - System.out.println(templateInfoList.get(key)); - } - return templateInfoList; - } - /** * 更新 day_count:打开设计器却未编辑模板的连续日子 */ @@ -148,6 +126,7 @@ public class TemplateInfoCollector implements Serializable { * 收集模板信息。如果之前没有记录,则新增;如果已有记录,则更新。 * 同时将最新数据保存到文件中。 */ + @SuppressWarnings("unchecked") public void collectInfo(T t, JTemplate jt, long openTime, long saveTime) { HashMap templateInfo; @@ -184,7 +163,6 @@ public class TemplateInfoCollector implements Serializable { String username = DesignerEnvManager.getEnvManager().getBBSName(); String uuid = DesignerEnvManager.getEnvManager().getUUID(); String activitykey = DesignerEnvManager.getEnvManager().getActivationKey(); -// String createTime = new Date(openTime).toString(); String createTime = new SimpleDateFormat("yyyy-MM-dd HH:mm").format(Calendar.getInstance().getTime()); String jarTime = GeneralUtils.readBuildNO(); String version = ProductConstants.VERSION; @@ -219,24 +197,19 @@ public class TemplateInfoCollector implements Serializable { */ public void sendTemplateInfo() { addDayCount(); - String url1 = "http://cloud.fanruan.com/api/monitor/record_of_make_reports/single"; + String consumingUrl = "http://cloud.fanruan.com/api/monitor/record_of_reports_consuming/single"; + String processUrl = "http://cloud.fanruan.com/api/monitor/record_of_reports_process/single"; ArrayList> completeTemplatesInfo = getCompleteTemplatesInfo(); for (HashMap templateInfo : completeTemplatesInfo) { String jsonConsumingMap = templateInfo.get("jsonConsumingMap"); String jsonProcessMap = templateInfo.get("jsonProcessMap"); - if (sendSingleTemplateInfo(url1, jsonConsumingMap) && sendSingleTemplateInfo(url1, jsonProcessMap)) { + if (sendSingleTemplateInfo(consumingUrl, jsonConsumingMap) && sendSingleTemplateInfo(processUrl, jsonProcessMap)) { // 清空记录 System.out.println("success"); templateInfoList.remove(templateInfo.get("reportletsid")); } } saveInfo(); -// //服务器返回true, 说明已经获取成功, 清空当前记录的信息 -// if (success) { -// System.out.println("success"); -// } else { -// System.out.println("fail"); -// } } private boolean sendSingleTemplateInfo(String url, String content) { @@ -244,11 +217,7 @@ public class TemplateInfoCollector implements Serializable { String date = new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime()); para.put("token", CodeUtils.md5Encode(date, "", "MD5")); para.put("content", content); -// para.put("content", "{name:3, age:3}"); -// HttpClient httpClient = new HttpClient("http://cloud.fanruan.com/api/monitor/record_of_make_reports/single", para, true); HttpClient httpClient = new HttpClient(url, para, true); - - //httpClient.setContent(getCompleteTemplatesInfo()); httpClient.setTimeout(5000); httpClient.asGet(); @@ -261,7 +230,9 @@ public class TemplateInfoCollector implements Serializable { return success; } - // 返回已完成的模板信息 + /** + * 返回已完成的模板信息 + */ @SuppressWarnings("unchecked") private ArrayList> getCompleteTemplatesInfo() { ArrayList> completeTemplatesInfo = new ArrayList<>(); @@ -277,17 +248,13 @@ public class TemplateInfoCollector implements Serializable { templateInfo.put("jsonConsumingMap", jsonConsumingMap); templateInfo.put("jsonProcessMap", jsonProcessMap); templateInfo.put("reportletsid", key); - completeTemplatesInfo.add(templateInfo); // TODO 暂未添加筛选条件 + completeTemplatesInfo.add(templateInfo); } return completeTemplatesInfo; } - - public static void main(String[] args) { - TemplateInfoCollector tic = TemplateInfoCollector.getInstance(); - tic.getInfoList(); - tic.sendTemplateInfo(); - +// TemplateInfoCollector tic = TemplateInfoCollector.getInstance(); +// tic.sendTemplateInfo(); } } From 9a738346ed4273d31686cb2df00ef0732f93079b Mon Sep 17 00:00:00 2001 From: plough Date: Thu, 16 Mar 2017 16:15:58 +0800 Subject: [PATCH 185/343] =?UTF-8?q?REPORT-1916=20=E5=81=9A=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E7=9A=84=E8=BF=87=E7=A8=8B=E5=92=8C=E8=80=97=E6=97=B6?= =?UTF-8?q?=E6=94=B6=E9=9B=86=3D=E3=80=8B=E4=B8=8A=E4=BC=A0=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=89=8D=EF=BC=8C=E5=88=A4=E6=96=AD=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E4=B8=BA=E6=B5=8B=E8=AF=95=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../templateinfo/TemplateInfoCollector.java | 50 +++++++++++++++---- 1 file changed, 40 insertions(+), 10 deletions(-) diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java index 891fc5b20..b9c92b1da 100644 --- a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java @@ -100,7 +100,7 @@ public class TemplateInfoCollector implements Serializable { private void saveInfo() { try { ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(getInfoFile())); - System.out.println("写入:" + instance.templateInfoList); +// System.out.println("写入:" + instance.templateInfoList); os.writeObject(instance); os.close(); } catch (Exception ex) { @@ -205,7 +205,7 @@ public class TemplateInfoCollector implements Serializable { String jsonProcessMap = templateInfo.get("jsonProcessMap"); if (sendSingleTemplateInfo(consumingUrl, jsonConsumingMap) && sendSingleTemplateInfo(processUrl, jsonProcessMap)) { // 清空记录 - System.out.println("success"); +// System.out.println("success"); templateInfoList.remove(templateInfo.get("reportletsid")); } } @@ -236,23 +236,53 @@ public class TemplateInfoCollector implements Serializable { @SuppressWarnings("unchecked") private ArrayList> getCompleteTemplatesInfo() { ArrayList> completeTemplatesInfo = new ArrayList<>(); + ArrayList testTemplateKeys = new ArrayList<>(); // 保存测试模板的key for (String key : templateInfoList.keySet()) { - if ((int)templateInfoList.get(key).get("day_count") <= 15) { // 未完成模板 + HashMap templateInfo = templateInfoList.get(key); + if ((int)templateInfo.get("day_count") <= 15) { // 未完成模板 continue; } - HashMap templateInfo = new HashMap<>(); - HashMap consumingMap = (HashMap) templateInfoList.get(key).get("consumingMap"); - HashMap processMap = (HashMap) templateInfoList.get(key).get("processMap"); + if (isTestTemplate(templateInfo)) { + testTemplateKeys.add(key); + continue; + } + HashMap consumingMap = (HashMap) templateInfo.get("consumingMap"); + HashMap processMap = (HashMap) templateInfo.get("processMap"); String jsonConsumingMap = new JSONObject(consumingMap).toString(); String jsonProcessMap = new JSONObject(processMap).toString(); - templateInfo.put("jsonConsumingMap", jsonConsumingMap); - templateInfo.put("jsonProcessMap", jsonProcessMap); - templateInfo.put("reportletsid", key); - completeTemplatesInfo.add(templateInfo); + HashMap jsonTemplateInfo = new HashMap<>(); + jsonTemplateInfo.put("jsonConsumingMap", jsonConsumingMap); + jsonTemplateInfo.put("jsonProcessMap", jsonProcessMap); + jsonTemplateInfo.put("reportletsid", key); + completeTemplatesInfo.add(jsonTemplateInfo); + } + // 删除测试模板 + for (String key : testTemplateKeys) { + templateInfoList.remove(key); +// System.out.println(key + " is removed..."); } return completeTemplatesInfo; } + @SuppressWarnings("unchecked") + private boolean isTestTemplate(HashMap templateInfo) { + HashMap processMap = (HashMap) templateInfo.get("processMap"); + int reportType = (int)processMap.get("report_type"); + int cellCount = (int)processMap.get("cell_count"); + int floatCount = (int)processMap.get("float_count"); + int blockCount = (int)processMap.get("block_count"); + int widgetCount = (int)processMap.get("widget_count"); + boolean isTestTemplate = false; + if (reportType == 0) { // 普通报表 + isTestTemplate = cellCount <= 5 && floatCount <= 1 && widgetCount <= 5; + } else if (reportType == 1) { // 聚合报表 + isTestTemplate = blockCount <= 1 && widgetCount <= 5; + } else { // 表单(reportType == 2) + isTestTemplate = widgetCount <= 1; + } + return isTestTemplate; + } + public static void main(String[] args) { // TemplateInfoCollector tic = TemplateInfoCollector.getInstance(); // tic.sendTemplateInfo(); From 4fefd27c156689d4d4969a5c37d1c352ce529243 Mon Sep 17 00:00:00 2001 From: kerry Date: Fri, 17 Mar 2017 09:16:06 +0800 Subject: [PATCH 186/343] =?UTF-8?q?REPORT-1858=20=20frm=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E9=9A=90=E8=97=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/designer/creator/XChartEditor.java | 7 +++++++ .../src/com/fr/design/designer/creator/XElementCase.java | 7 +++++++ .../com/fr/design/designer/creator/XWidgetCreator.java | 9 +++++++++ .../src/com/fr/design/gui/xtable/PropertyGroupModel.java | 3 +++ 4 files changed, 26 insertions(+) diff --git a/designer_form/src/com/fr/design/designer/creator/XChartEditor.java b/designer_form/src/com/fr/design/designer/creator/XChartEditor.java index 605532ab1..2ac2c12e3 100644 --- a/designer_form/src/com/fr/design/designer/creator/XChartEditor.java +++ b/designer_form/src/com/fr/design/designer/creator/XChartEditor.java @@ -85,6 +85,13 @@ public class XChartEditor extends XBorderStyleWidgetCreator { return new CRPropertyDescriptor[] { new CRPropertyDescriptor("widgetName", this.data.getClass()).setI18NName(Inter .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( WLayoutBorderStyleEditor.class).setI18NName( Inter.getLocText("Chart-Style_Name")).putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced") diff --git a/designer_form/src/com/fr/design/designer/creator/XElementCase.java b/designer_form/src/com/fr/design/designer/creator/XElementCase.java index a932548cc..7b6dac0e8 100644 --- a/designer_form/src/com/fr/design/designer/creator/XElementCase.java +++ b/designer_form/src/com/fr/design/designer/creator/XElementCase.java @@ -83,6 +83,13 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme CRPropertyDescriptor[] propertyTableEditor = new CRPropertyDescriptor[]{ new CRPropertyDescriptor("widgetName", this.data.getClass()) .setI18NName(Inter.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( WLayoutBorderStyleEditor.class).setI18NName( Inter.getLocText("FR-Designer-Widget_Style")).putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced") diff --git a/designer_form/src/com/fr/design/designer/creator/XWidgetCreator.java b/designer_form/src/com/fr/design/designer/creator/XWidgetCreator.java index 9de56622d..2c1be0eab 100644 --- a/designer_form/src/com/fr/design/designer/creator/XWidgetCreator.java +++ b/designer_form/src/com/fr/design/designer/creator/XWidgetCreator.java @@ -146,6 +146,15 @@ public abstract class XWidgetCreator extends XCreator { } } + /** + * 渲染Painter + */ + public void paint(Graphics g) { + //不可见时,按钮.4f透明 + AlphaComposite composite = this.data.isVisible() ? (AlphaComposite)((Graphics2D)g).getComposite() : AlphaComposite.getInstance(AlphaComposite.SRC_OVER,HALF_OPACITY); + ((Graphics2D)g).setComposite(composite); + super.paint(g); + } /** * 重命名 * diff --git a/designer_form/src/com/fr/design/gui/xtable/PropertyGroupModel.java b/designer_form/src/com/fr/design/gui/xtable/PropertyGroupModel.java index 8e8cadad1..bb0f0cd3a 100644 --- a/designer_form/src/com/fr/design/gui/xtable/PropertyGroupModel.java +++ b/designer_form/src/com/fr/design/gui/xtable/PropertyGroupModel.java @@ -53,6 +53,9 @@ public class PropertyGroupModel extends AbstractPropertyGroupModel { if(ComparatorUtils.equals(FormConstants.NAME, properties[row].getName())){ creator.resetCreatorName(value.toString()); } + if(ComparatorUtils.equals("visible", properties[row].getName())){ + creator.resetVisible((boolean) value); + } properties[row].firePropertyChanged(); return true; } catch (Exception e) { From 2d53d781b620a0e0aaf867012adb1da7da621e14 Mon Sep 17 00:00:00 2001 From: juhaoyu <2335173323@qq.com> Date: Fri, 17 Mar 2017 11:02:33 +0800 Subject: [PATCH 187/343] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=8F=92=E4=BB=B6=E5=8D=B8=E8=BD=BD=E5=89=8D?= =?UTF-8?q?=E7=9B=91=E5=90=AC=EF=BC=8C=E6=80=A7=E8=83=BD=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E4=BB=A5=E6=AD=A4=E8=BF=9B=E8=A1=8C=E9=A2=9D=E5=A4=96=E7=9A=84?= =?UTF-8?q?=E5=8D=B8=E8=BD=BD=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/extra/PluginHelper.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/designer_base/src/com/fr/design/extra/PluginHelper.java b/designer_base/src/com/fr/design/extra/PluginHelper.java index be0244f78..ed0d78aa1 100644 --- a/designer_base/src/com/fr/design/extra/PluginHelper.java +++ b/designer_base/src/com/fr/design/extra/PluginHelper.java @@ -319,6 +319,8 @@ public class PluginHelper { if (plugin == null || env == null) { return ArrayUtils.EMPTY_STRING_ARRAY; } + //卸载前监听 + plugin.preUninstall(); PluginLoader.getLoader().deletePlugin(plugin); return env.deleteFileFromPluginAndLibFolder(plugin); } From b2f7c448f98034f8981d2f58afe6e770272831d5 Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 17 Mar 2017 11:38:19 +0800 Subject: [PATCH 188/343] =?UTF-8?q?REPORT-1916=20=E5=81=9A=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E7=9A=84=E8=BF=87=E7=A8=8B=E5=92=8C=E8=80=97=E6=97=B6?= =?UTF-8?q?=E6=94=B6=E9=9B=86=3D=E3=80=8B=E6=8A=8A=20reportletsid=20?= =?UTF-8?q?=E6=94=B9=E6=88=90=20templateID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer/TemplateProcessTracker.aj | 4 --- .../designerbase/TemplateProcessTracker.aj | 4 --- .../com/fr/design/mainframe/JTemplate.java | 6 ++-- .../templateinfo/TemplateInfoCollector.java | 28 +++++++++---------- 4 files changed, 17 insertions(+), 25 deletions(-) diff --git a/designer/src/com/fr/aspectj/designer/TemplateProcessTracker.aj b/designer/src/com/fr/aspectj/designer/TemplateProcessTracker.aj index 0b3ea7083..032cd2342 100644 --- a/designer/src/com/fr/aspectj/designer/TemplateProcessTracker.aj +++ b/designer/src/com/fr/aspectj/designer/TemplateProcessTracker.aj @@ -53,10 +53,6 @@ public aspect TemplateProcessTracker { //同上 before(Object v, int r, int c) : onSetValueAt(v, r, c) { SourceLocation sl = thisJoinPoint.getSourceLocation(); - // !within(LogHandlerBar) 没用, 手动过滤 -// if (e.getSource().toString().contains("javax.swing.Timer")) { -// return; -// } //String log = String.format("%s:\n%s\nset value: %s at (%d, %d)\n\n", new Date(), sl, v, r, c); String log = ""; diff --git a/designer_base/src/com/fr/aspectj/designerbase/TemplateProcessTracker.aj b/designer_base/src/com/fr/aspectj/designerbase/TemplateProcessTracker.aj index b07ec9951..61a0be500 100644 --- a/designer_base/src/com/fr/aspectj/designerbase/TemplateProcessTracker.aj +++ b/designer_base/src/com/fr/aspectj/designerbase/TemplateProcessTracker.aj @@ -50,10 +50,6 @@ public aspect TemplateProcessTracker { //同上 before(Object v, int r, int c) : onSetValueAt(v, r, c) { SourceLocation sl = thisJoinPoint.getSourceLocation(); - // !within(LogHandlerBar) 没用, 手动过滤 -// if (e.getSource().toString().contains("javax.swing.Timer")) { -// return; -// } //String log = String.format("%s:\n%s\nset value: %s at (%d, %d)\n\n", new Date(), sl, v, r, c); String log = ""; diff --git a/designer_base/src/com/fr/design/mainframe/JTemplate.java b/designer_base/src/com/fr/design/mainframe/JTemplate.java index ccdfb11e1..aec297ddf 100644 --- a/designer_base/src/com/fr/design/mainframe/JTemplate.java +++ b/designer_base/src/com/fr/design/mainframe/JTemplate.java @@ -109,8 +109,8 @@ public abstract class JTemplate> ex // 为收集模版信息作准备 private void initForCollect() { - if (template.getReportletsid() == null) { - template.initReportletsid(); // 为新模板设置 reportletsid 属性 + if (template.getTemplateID() == null) { + template.initTemplateID(); // 为新模板设置 templateID 属性 } if (openTime == 0) { openTime = System.currentTimeMillis(); @@ -540,7 +540,7 @@ public abstract class JTemplate> ex boolean result = this.saveFile(); if (result) { DesignerFrameFileDealerPane.getInstance().refresh(); - initForCollect(); // 如果是旧模板另存为新模板,则添加 reportletsid + initForCollect(); // 如果是旧模板另存为新模板,则添加 templateID collectInfo(); } //更换最近打开 diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java index b9c92b1da..6e73c5d0b 100644 --- a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java @@ -83,7 +83,7 @@ public class TemplateInfoCollector implements Serializable { */ @SuppressWarnings("unchecked") public String loadProcess(T t) { - HashMap processMap = (HashMap) templateInfoList.get(t.getReportletsid()).get("processMap"); + HashMap processMap = (HashMap) templateInfoList.get(t.getTemplateID()).get("processMap"); return (String)processMap.get("process"); } @@ -91,7 +91,7 @@ public class TemplateInfoCollector implements Serializable { * 根据模板ID是否在收集列表中,判断是否需要收集当前模板的信息 */ public boolean inList(T t) { - return templateInfoList.containsKey(t.getReportletsid()); + return templateInfoList.containsKey(t.getTemplateID()); } /** @@ -100,7 +100,7 @@ public class TemplateInfoCollector implements Serializable { private void saveInfo() { try { ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(getInfoFile())); -// System.out.println("写入:" + instance.templateInfoList); + System.out.println("写入:" + instance.templateInfoList); os.writeObject(instance); os.close(); } catch (Exception ex) { @@ -131,10 +131,10 @@ public class TemplateInfoCollector implements Serializable { HashMap templateInfo; long timeConsume = ((saveTime - openTime) / 1000); // 制作模板耗时(单位:s) - String reportletsid = t.getReportletsid(); + String templateID = t.getTemplateID(); if (inList(t)) { // 已有记录 - templateInfo = templateInfoList.get(t.getReportletsid()); + templateInfo = templateInfoList.get(t.getTemplateID()); // 更新 conusmingMap HashMap consumingMap = (HashMap) templateInfo.get("consumingMap"); timeConsume += (long)consumingMap.get("time_consume"); // 加上之前的累计编辑时间 @@ -142,22 +142,22 @@ public class TemplateInfoCollector implements Serializable { } else { // 新增 templateInfo = new HashMap<>(); - templateInfo.put("consumingMap", getNewConsumingMap(reportletsid, openTime, timeConsume)); + templateInfo.put("consumingMap", getNewConsumingMap(templateID, openTime, timeConsume)); } // 直接覆盖 processMap - templateInfo.put("processMap", getProcessMap(reportletsid, jt)); + templateInfo.put("processMap", getProcessMap(templateID, jt)); // 保存模板时,让 day_count 归零 templateInfo.put("day_count", 0); - templateInfoList.put(reportletsid, templateInfo); + templateInfoList.put(templateID, templateInfo); saveInfo(); // 每次更新之后,都同步到暂存文件中 } - private HashMap getNewConsumingMap(String reportletsid, long openTime, long timeConsume) { + private HashMap getNewConsumingMap(String templateID, long openTime, long timeConsume) { HashMap consumingMap = new HashMap<>(); String username = DesignerEnvManager.getEnvManager().getBBSName(); @@ -169,7 +169,7 @@ public class TemplateInfoCollector implements Serializable { consumingMap.put("username", username); consumingMap.put("uuid", uuid); consumingMap.put("activitykey", activitykey); - consumingMap.put("reportletsid", reportletsid); + consumingMap.put("templateID", templateID); consumingMap.put("create_time", createTime); consumingMap.put("time_consume", timeConsume); consumingMap.put("jar_time", jarTime); @@ -178,10 +178,10 @@ public class TemplateInfoCollector implements Serializable { return consumingMap; } - private HashMap getProcessMap(String reportletsid, JTemplate jt) { + private HashMap getProcessMap(String templateID, JTemplate jt) { HashMap processMap = new HashMap<>(); - processMap.put("reportletsid", reportletsid); + processMap.put("templateID", templateID); processMap.put("process", jt.getProcess()); processMap.put("report_type", jt.getReportType()); processMap.put("cell_count", jt.getCellCount()); @@ -206,7 +206,7 @@ public class TemplateInfoCollector implements Serializable { if (sendSingleTemplateInfo(consumingUrl, jsonConsumingMap) && sendSingleTemplateInfo(processUrl, jsonProcessMap)) { // 清空记录 // System.out.println("success"); - templateInfoList.remove(templateInfo.get("reportletsid")); + templateInfoList.remove(templateInfo.get("templateID")); } } saveInfo(); @@ -253,7 +253,7 @@ public class TemplateInfoCollector implements Serializable { HashMap jsonTemplateInfo = new HashMap<>(); jsonTemplateInfo.put("jsonConsumingMap", jsonConsumingMap); jsonTemplateInfo.put("jsonProcessMap", jsonProcessMap); - jsonTemplateInfo.put("reportletsid", key); + jsonTemplateInfo.put("templateID", key); completeTemplatesInfo.add(jsonTemplateInfo); } // 删除测试模板 From 89432288836110ff2271c288fbece4691fcb92ee Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 17 Mar 2017 14:27:50 +0800 Subject: [PATCH 189/343] =?UTF-8?q?REPORT-1916=20=E5=81=9A=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E7=9A=84=E8=BF=87=E7=A8=8B=E5=92=8C=E8=80=97=E6=97=B6?= =?UTF-8?q?=E6=94=B6=E9=9B=86=3D=E3=80=8B=E8=8B=A5=E6=9C=AA=E5=8A=A0?= =?UTF-8?q?=E5=85=A5=E4=BA=A7=E5=93=81=E6=94=B9=E8=89=AF=E8=AE=A1=E5=88=92?= =?UTF-8?q?=EF=BC=8C=E5=88=99=E4=B8=8D=E6=94=B6=E9=9B=86=E6=9C=AC=E5=9C=B0?= =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../templateinfo/TemplateInfoCollector.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java index 6e73c5d0b..df71bdfc8 100644 --- a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java @@ -1,5 +1,6 @@ package com.fr.design.mainframe.templateinfo; +import com.fr.base.FRContext; import com.fr.base.io.IOFile; import com.fr.design.DesignerEnvManager; import com.fr.design.mainframe.DesignerContext; @@ -71,7 +72,14 @@ public class TemplateInfoCollector implements Serializable { return instance; } + private static boolean shouldCollectInfo() { + return DesignerEnvManager.getEnvManager().isJoinProductImprove() && FRContext.isChineseEnv(); + } + public static void appendProcess(String log) { + if (!shouldCollectInfo()) { + return; + } // 获取当前编辑的模板 JTemplate jt = DesignerContext.getDesignerFrame().getSelectedJTemplate(); // 追加过程记录 @@ -100,7 +108,7 @@ public class TemplateInfoCollector implements Serializable { private void saveInfo() { try { ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(getInfoFile())); - System.out.println("写入:" + instance.templateInfoList); +// System.out.println("写入:" + instance.templateInfoList); os.writeObject(instance); os.close(); } catch (Exception ex) { @@ -128,6 +136,10 @@ public class TemplateInfoCollector implements Serializable { */ @SuppressWarnings("unchecked") public void collectInfo(T t, JTemplate jt, long openTime, long saveTime) { + if (!shouldCollectInfo()) { + return; + } + HashMap templateInfo; long timeConsume = ((saveTime - openTime) / 1000); // 制作模板耗时(单位:s) From 65c3c951bc9c356a383400c9757db910e8d52054 Mon Sep 17 00:00:00 2001 From: fanglei <294531121> Date: Sat, 18 Mar 2017 16:22:24 +0800 Subject: [PATCH 190/343] =?UTF-8?q?=E5=AF=B9import=20BoundsWidget=E8=BF=9B?= =?UTF-8?q?=E8=A1=8C=E4=BF=AE=E6=94=B9=E4=BB=A5=E5=85=BC=E5=AE=B9=E8=80=81?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E8=87=AA=E9=80=82=E5=BA=94=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E5=92=8C=E8=A1=A8=E5=8D=95=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer/beans/ConnectorCreator.java | 2 +- .../layout/FRAbsoluteLayoutAdapter.java | 2 +- .../adapters/layout/FRFitLayoutAdapter.java | 4 ++-- .../beans/location/AccessDirection.java | 2 +- .../design/designer/beans/location/Inner.java | 2 +- .../designer/creator/XWAbsoluteLayout.java | 12 +++++----- .../design/designer/creator/XWFitLayout.java | 22 +++++++++---------- .../designer/creator/XWScaleLayout.java | 2 +- .../designer/creator/XWTitleLayout.java | 2 +- .../cardlayout/XWCardMainBorderLayout.java | 6 ++--- .../creator/cardlayout/XWTabFitLayout.java | 4 ++-- .../fr/design/mainframe/ConnectorHelper.java | 2 +- 12 files changed, 31 insertions(+), 31 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/beans/ConnectorCreator.java b/designer_form/src/com/fr/design/designer/beans/ConnectorCreator.java index 350235d45..ca9934416 100644 --- a/designer_form/src/com/fr/design/designer/beans/ConnectorCreator.java +++ b/designer_form/src/com/fr/design/designer/beans/ConnectorCreator.java @@ -6,7 +6,7 @@ import java.util.ArrayList; import java.util.PriorityQueue; import com.fr.form.ui.container.WLayout; -import com.fr.form.ui.widget.BoundsWidget; +import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; public class ConnectorCreator { diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java index 140204e75..7810fc9a6 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java @@ -12,8 +12,8 @@ import com.fr.design.designer.properties.FRAbsoluteLayoutPropertiesGroupModel; import com.fr.form.ui.container.WAbsoluteLayout; import com.fr.design.utils.ComponentUtils; import com.fr.design.utils.gui.LayoutUtils; -import com.fr.form.ui.widget.BoundsWidget; import com.fr.general.ComparatorUtils; +import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import com.fr.general.FRLogger; public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java index f578b28ab..7401b8d07 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java @@ -28,8 +28,8 @@ import com.fr.design.utils.ComponentUtils; import com.fr.form.ui.LayoutBorderStyle; import com.fr.form.ui.container.WLayout; import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; -import com.fr.form.ui.widget.BoundsWidget; import com.fr.general.ComparatorUtils; +import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; /** * 自适应布局的容器适配器 @@ -1026,7 +1026,7 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { setAdjustedSize(tabLayout, offset, isHor); for (int m = 0; m < tabLayout.getComponentCount(); m++) { XCreator childCreator = tabLayout.getXCreator(m); - BoundsWidget wgt = tabLayout.toData().getBoundsWidget(childCreator.toData()); + BoundsWidget wgt = (BoundsWidget) tabLayout.toData().getBoundsWidget(childCreator.toData()); wgt.setBounds(tabLayout.getComponent(m).getBounds()); } adjustCreatorsSize(percent, tabLayout, isHor); diff --git a/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java b/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java index a2a57c4ff..e368c7425 100644 --- a/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java +++ b/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java @@ -14,7 +14,7 @@ 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.WParameterLayout; -import com.fr.form.ui.widget.BoundsWidget; +import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; /** * @author richer diff --git a/designer_form/src/com/fr/design/designer/beans/location/Inner.java b/designer_form/src/com/fr/design/designer/beans/location/Inner.java index 4f475adf0..b07b18b4a 100644 --- a/designer_form/src/com/fr/design/designer/beans/location/Inner.java +++ b/designer_form/src/com/fr/design/designer/beans/location/Inner.java @@ -9,8 +9,8 @@ import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.FormSelection; import com.fr.design.utils.ComponentUtils; import com.fr.form.ui.container.WAbsoluteLayout; -import com.fr.form.ui.widget.BoundsWidget; import com.fr.stable.ArrayUtils; +import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import java.awt.*; import java.awt.Rectangle; diff --git a/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java b/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java index 4ed1b6549..0258172a3 100644 --- a/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java @@ -23,7 +23,7 @@ import com.fr.form.ui.Connector; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WAbsoluteLayout; import com.fr.form.ui.container.WLayout; -import com.fr.form.ui.widget.BoundsWidget; +import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import com.fr.general.FRScreen; import com.fr.general.IOUtils; import com.fr.general.Inter; @@ -154,7 +154,7 @@ public class XWAbsoluteLayout extends XLayoutContainer { if (xCreator.acceptType(XWAbsoluteLayout.class)){ ((XWAbsoluteLayout) xCreator).updateBoundsWidget(); } - BoundsWidget boundsWidget = layout.getBoundsWidget(xCreator.toData()); + BoundsWidget boundsWidget = (BoundsWidget) layout.getBoundsWidget(xCreator.toData()); Rectangle rectangle = dealWidgetBound(xCreator.getBounds()); } @@ -179,7 +179,7 @@ public class XWAbsoluteLayout extends XLayoutContainer { double percentH = ((double) backupBound.height / (double) currentBound.height); for (int index = 0, n = this.getComponentCount(); index < n; index++){ XCreator creator = (XCreator) this.getComponent(index); - BoundsWidget wgt = layout.getBoundsWidget(creator.toData()); + BoundsWidget wgt = (BoundsWidget) layout.getBoundsWidget(creator.toData()); // 用当前的显示大小计算后调正具体位置 Rectangle wgtBound = creator.getBounds(); Rectangle rec = calculateBound(wgtBound, percentW, percentH); @@ -211,7 +211,7 @@ public class XWAbsoluteLayout extends XLayoutContainer { rec.y = (int)(rec.y / prevContainerPercent * containerPercent); rec.height = (int)(rec.height / prevContainerPercent * containerPercent); rec.width = (int)(rec.width / prevContainerPercent * containerPercent); - BoundsWidget wgt = toData().getBoundsWidget(creator.toData()); + BoundsWidget wgt = (BoundsWidget) toData().getBoundsWidget(creator.toData()); wgt.setBounds(rec); creator.setBounds(rec); creator.updateChildBound(minHeight); @@ -467,7 +467,7 @@ public class XWAbsoluteLayout extends XLayoutContainer { XCreator xCreator = (XCreator) getComponent(i); Rectangle rectangle = xCreator.getBounds(); xCreator.setBounds((int) (rectangle.x * percent), rectangle.y, (int) (rectangle.width * percent), rectangle.height); - BoundsWidget widget = toData().getBoundsWidget(xCreator.toData()); + BoundsWidget widget = (BoundsWidget) toData().getBoundsWidget(xCreator.toData()); widget.setBounds(xCreator.getBounds()); } } @@ -483,7 +483,7 @@ public class XWAbsoluteLayout extends XLayoutContainer { XCreator xCreator = (XCreator) getComponent(i); Rectangle rectangle = xCreator.getBounds(); xCreator.setBounds(rectangle.x, (int) (rectangle.y * percent), rectangle.width, (int) (rectangle.height * percent)); - BoundsWidget widget = toData().getBoundsWidget(xCreator.toData()); + BoundsWidget widget = (BoundsWidget) toData().getBoundsWidget(xCreator.toData()); widget.setBounds(xCreator.getBounds()); } } diff --git a/designer_form/src/com/fr/design/designer/creator/XWFitLayout.java b/designer_form/src/com/fr/design/designer/creator/XWFitLayout.java index 340ec9cd1..62c61dd46 100644 --- a/designer_form/src/com/fr/design/designer/creator/XWFitLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/XWFitLayout.java @@ -23,8 +23,8 @@ import com.fr.form.ui.Widget; import com.fr.form.ui.container.WBodyLayoutType; import com.fr.form.ui.container.WFitLayout; import com.fr.form.ui.container.WLayout; -import com.fr.form.ui.widget.BoundsWidget; import com.fr.general.FRScreen; +import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import com.fr.general.Inter; import com.fr.stable.ArrayUtils; @@ -351,7 +351,7 @@ public class XWFitLayout extends XLayoutContainer { } for (int i=0, size=comps.size(); i Date: Mon, 20 Mar 2017 10:18:06 +0800 Subject: [PATCH 191/343] =?UTF-8?q?REPORT-1916=20=E5=81=9A=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E7=9A=84=E8=BF=87=E7=A8=8B=E5=92=8C=E8=80=97=E6=97=B6?= =?UTF-8?q?=E6=94=B6=E9=9B=86=3D=E3=80=8B=E6=8A=8A=E7=BB=9F=E8=AE=A1?= =?UTF-8?q?=E6=A0=BC=E5=AD=90=E6=95=B0=E9=87=8F=E7=9A=84=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=88=86=E7=A6=BB=E4=B8=BA=E5=8D=95=E7=8B=AC=E7=9A=84=E7=B1=BB?= =?UTF-8?q?=EF=BC=9B=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mainframe/JWorkBook.java | 58 ++------------ .../tabledatapane/EmbeddedTableDataPane.java | 1 - .../src/com/fr/design/extra/PluginHelper.java | 2 +- .../com/fr/design/mainframe/JTemplate.java | 13 +--- .../templateinfo/JFormProcessInfo.java | 42 +++++++++++ .../templateinfo/JWorkBookProcessInfo.java | 75 +++++++++++++++++++ .../templateinfo/TemplateInfoCollector.java | 39 ++++++---- .../templateinfo/TemplateProcessInfo.java | 26 +++++++ .../src/com/fr/design/mainframe/JForm.java | 32 ++------ 9 files changed, 182 insertions(+), 106 deletions(-) create mode 100644 designer_base/src/com/fr/design/mainframe/templateinfo/JFormProcessInfo.java create mode 100644 designer_base/src/com/fr/design/mainframe/templateinfo/JWorkBookProcessInfo.java create mode 100644 designer_base/src/com/fr/design/mainframe/templateinfo/TemplateProcessInfo.java diff --git a/designer/src/com/fr/design/mainframe/JWorkBook.java b/designer/src/com/fr/design/mainframe/JWorkBook.java index 4cb98680a..fd4cd7b0d 100644 --- a/designer/src/com/fr/design/mainframe/JWorkBook.java +++ b/designer/src/com/fr/design/mainframe/JWorkBook.java @@ -27,6 +27,8 @@ import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.icontainer.UIModeControlContainer; import com.fr.design.gui.imenu.UIMenuItem; import com.fr.design.mainframe.cell.QuickEditorRegion; +import com.fr.design.mainframe.templateinfo.JWorkBookProcessInfo; +import com.fr.design.mainframe.templateinfo.TemplateProcessInfo; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; import com.fr.design.menu.*; import com.fr.design.module.DesignModuleFactory; @@ -130,59 +132,11 @@ public class JWorkBook extends JTemplate { return centerPane; } - // 获取模板类型 - public int getReportType() { - return template.isElementCaseBook() ? 0 : 1; - } - - // 获取模板格子数 - public int getCellCount() { - int cellCount = 0; - if (template.isElementCaseBook()) { // 如果是普通报表 - for (int i = 0; i < template.getReportCount(); i++) { - WorkSheet r = (WorkSheet) template.getReport(i); - CellCase cc = r.getBlock().getCellCase(); - for (int j = 0; j < cc.getRowCount(); j++) { - Iterator iter = cc.getRow(j); - while (iter.hasNext()) { - cellCount ++; - iter.next(); - } - } - } - } - return cellCount; - } - // 获取模板悬浮元素个数 - public int getFloatCount() { - int chartCount = 0; - if (template.isElementCaseBook()) { // 如果是普通报表 - for (int i = 0; i < template.getReportCount(); i++) { - WorkSheet r = (WorkSheet) template.getReport(i); - Iterator fiter = r.getBlock().floatIterator(); - while (fiter.hasNext()) { - chartCount ++; - fiter.next(); - } - } - } - return chartCount; - } - // 获取模板聚合块个数 - public int getBlockCount() { - int blockCount = 0; - if (!template.isElementCaseBook()) { // 如果是聚合报表 - for (int i = 0; i < template.getReportCount(); i++) { - PolyWorkSheet r = (PolyWorkSheet) template.getReport(i); - blockCount += r.getBlockCount(); - } + public TemplateProcessInfo getProcessInfo() { + if (processInfo == null) { + processInfo = new JWorkBookProcessInfo(template); } - return blockCount; - } - // 获取模板控件数 - public int getWidgetCount() { - ParameterUI pui = template.getReportParameterAttr().getParameterUI(); - return pui == null ? 0 : (pui.getAllWidgets().length - 1); + return processInfo; } /** diff --git a/designer_base/src/com/fr/design/data/tabledata/tabledatapane/EmbeddedTableDataPane.java b/designer_base/src/com/fr/design/data/tabledata/tabledatapane/EmbeddedTableDataPane.java index a4ddba1f7..3103f6850 100644 --- a/designer_base/src/com/fr/design/data/tabledata/tabledatapane/EmbeddedTableDataPane.java +++ b/designer_base/src/com/fr/design/data/tabledata/tabledatapane/EmbeddedTableDataPane.java @@ -96,7 +96,6 @@ public class EmbeddedTableDataPane extends AbstractTableDataPane> ex protected U undoState; protected U authorityUndoState = null; protected T template; // 当前模板 + protected TemplateProcessInfo processInfo; // 模板过程的相关信息 private static short currentIndex = 0;// 此变量用于多次新建模板时,让名字不重复 private DesignModelAdapter designModel; private PreviewProvider previewType; @@ -122,16 +124,7 @@ public abstract class JTemplate> ex openTime = saveTime; // 更新 openTime,准备下一次计算 } - // 获取模板类型。0 代表普通报表,1 代表聚合报表,2 代表表单 - public abstract int getReportType(); - // 获取模板格子数 - public abstract int getCellCount(); - // 获取模板悬浮元素个数 - public abstract int getFloatCount(); - // 获取模板聚合块个数 - public abstract int getBlockCount(); - // 获取模板控件数 - public abstract int getWidgetCount(); + public abstract TemplateProcessInfo getProcessInfo(); // 追加过程记录 public void appendProcess(String s) { diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/JFormProcessInfo.java b/designer_base/src/com/fr/design/mainframe/templateinfo/JFormProcessInfo.java new file mode 100644 index 000000000..4fa516929 --- /dev/null +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/JFormProcessInfo.java @@ -0,0 +1,42 @@ +package com.fr.design.mainframe.templateinfo; + +import com.fr.form.main.Form; +import com.fr.form.ui.container.WFitLayout; + +/** + * Created by plough on 2017/3/17. + */ +public class JFormProcessInfo extends TemplateProcessInfo
{ + public JFormProcessInfo(Form form) { + super(form); + } + + // 获取模板类型 + public int getReportType() { + return 2; + } + + // 获取模板格子数 + public int getCellCount() { + return 0; + } + // 获取模板悬浮元素个数 + public int getFloatCount() { + return 0; + } + // 获取模板聚合块个数 + public int getBlockCount() { + return 0; + } + // 获取模板控件数 + public int getWidgetCount() { + int widgetCount = 0; + for (int i = 0; i < template.getContainer().getWidgetCount(); i++) { + WFitLayout wf = (WFitLayout) template.getContainer().getWidget(i); + widgetCount += wf.getWidgetCount(); + } + int a = 1; + int b = 2; + return widgetCount; + } +} diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/JWorkBookProcessInfo.java b/designer_base/src/com/fr/design/mainframe/templateinfo/JWorkBookProcessInfo.java new file mode 100644 index 000000000..44522b856 --- /dev/null +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/JWorkBookProcessInfo.java @@ -0,0 +1,75 @@ +package com.fr.design.mainframe.templateinfo; + +import com.fr.base.io.IOFile; +import com.fr.base.parameter.ParameterUI; +import com.fr.main.impl.WorkBook; +import com.fr.report.cellcase.CellCase; +import com.fr.report.poly.PolyWorkSheet; +import com.fr.report.worksheet.WorkSheet; + +import java.util.Iterator; + +/** + * Created by plough on 2017/3/17. + */ +public class JWorkBookProcessInfo extends TemplateProcessInfo { + + public JWorkBookProcessInfo(WorkBook wb) { + super(wb); + } + + // 获取模板类型 + public int getReportType() { + return template.isElementCaseBook() ? 0 : 1; + } + + // 获取模板格子数 + public int getCellCount() { + int cellCount = 0; + if (template.isElementCaseBook()) { // 如果是普通报表 + for (int i = 0; i < template.getReportCount(); i++) { + WorkSheet r = (WorkSheet) template.getReport(i); + CellCase cc = r.getBlock().getCellCase(); + for (int j = 0; j < cc.getRowCount(); j++) { + Iterator iter = cc.getRow(j); + while (iter.hasNext()) { + cellCount ++; + iter.next(); + } + } + } + } + return cellCount; + } + // 获取模板悬浮元素个数 + public int getFloatCount() { + int chartCount = 0; + if (template.isElementCaseBook()) { // 如果是普通报表 + for (int i = 0; i < template.getReportCount(); i++) { + WorkSheet r = (WorkSheet) template.getReport(i); + Iterator fiter = r.getBlock().floatIterator(); + while (fiter.hasNext()) { + chartCount ++; + fiter.next(); + } + } + } + return chartCount; + } + // 获取模板聚合块个数 + public int getBlockCount() { + int blockCount = 0; + if (!template.isElementCaseBook()) { // 如果是聚合报表 + for (int i = 0; i < template.getReportCount(); i++) { + PolyWorkSheet r = (PolyWorkSheet) template.getReport(i); + blockCount += r.getBlockCount(); + } + } + return blockCount; + } + // 获取模板控件数 + public int getWidgetCount() { + ParameterUI pui = template.getReportParameterAttr().getParameterUI(); + return pui == null ? 0 : (pui.getAllWidgets().length - 1); + } +} diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java index df71bdfc8..8b987dc05 100644 --- a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java @@ -8,6 +8,7 @@ import com.fr.design.mainframe.JTemplate; import com.fr.general.ComparatorUtils; import com.fr.general.FRLogger; import com.fr.general.GeneralUtils; +import com.fr.general.SiteCenter; import com.fr.general.http.HttpClient; import com.fr.stable.*; import org.json.JSONObject; @@ -27,6 +28,10 @@ public class TemplateInfoCollector implements Serializable { private static TemplateInfoCollector instance; private HashMap> templateInfoList; private String designerOpenDate; //设计器最近一次打开日期 + private static final int VALID_CELL_COUNT = 5; // 有效报表模板的格子数 + private static final int VALID_WIDGET_COUNT = 5; // 有效报表模板的控件数 + private static final int COMPLETE_DAY_COUNT = 15; // 判断模板是否完成的天数 + private static final int ONE_THOUSAND = 1000; @SuppressWarnings("unchecked") private TemplateInfoCollector() { @@ -108,11 +113,11 @@ public class TemplateInfoCollector implements Serializable { private void saveInfo() { try { ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(getInfoFile())); -// System.out.println("写入:" + instance.templateInfoList); + System.out.println("写入:" + instance.templateInfoList); os.writeObject(instance); os.close(); } catch (Exception ex) { - ex.printStackTrace(); + FRLogger.getLogger().error(ex.getMessage()); } } @@ -142,7 +147,7 @@ public class TemplateInfoCollector implements Serializable { HashMap templateInfo; - long timeConsume = ((saveTime - openTime) / 1000); // 制作模板耗时(单位:s) + long timeConsume = ((saveTime - openTime) / ONE_THOUSAND); // 制作模板耗时(单位:s) String templateID = t.getTemplateID(); if (inList(t)) { // 已有记录 @@ -195,11 +200,13 @@ public class TemplateInfoCollector implements Serializable { processMap.put("templateID", templateID); processMap.put("process", jt.getProcess()); - processMap.put("report_type", jt.getReportType()); - processMap.put("cell_count", jt.getCellCount()); - processMap.put("float_count", jt.getFloatCount()); - processMap.put("block_count", jt.getBlockCount()); - processMap.put("widget_count", jt.getWidgetCount()); + + TemplateProcessInfo info = jt.getProcessInfo(); + processMap.put("report_type", info.getReportType()); + processMap.put("cell_count", info.getCellCount()); + processMap.put("float_count", info.getFloatCount()); + processMap.put("block_count", info.getBlockCount()); + processMap.put("widget_count", info.getWidgetCount()); return processMap; } @@ -209,15 +216,15 @@ public class TemplateInfoCollector implements Serializable { */ public void sendTemplateInfo() { addDayCount(); - String consumingUrl = "http://cloud.fanruan.com/api/monitor/record_of_reports_consuming/single"; - String processUrl = "http://cloud.fanruan.com/api/monitor/record_of_reports_process/single"; + String consumingUrl = SiteCenter.getInstance().acquireUrlByKind("tempinfo.consuming") + "/single"; + String processUrl = SiteCenter.getInstance().acquireUrlByKind("tempinfo.process") + "/single"; ArrayList> completeTemplatesInfo = getCompleteTemplatesInfo(); for (HashMap templateInfo : completeTemplatesInfo) { String jsonConsumingMap = templateInfo.get("jsonConsumingMap"); String jsonProcessMap = templateInfo.get("jsonProcessMap"); if (sendSingleTemplateInfo(consumingUrl, jsonConsumingMap) && sendSingleTemplateInfo(processUrl, jsonProcessMap)) { // 清空记录 -// System.out.println("success"); + FRLogger.getLogger().info("successfully send " + templateInfo.get("templateID")); templateInfoList.remove(templateInfo.get("templateID")); } } @@ -251,7 +258,7 @@ public class TemplateInfoCollector implements Serializable { ArrayList testTemplateKeys = new ArrayList<>(); // 保存测试模板的key for (String key : templateInfoList.keySet()) { HashMap templateInfo = templateInfoList.get(key); - if ((int)templateInfo.get("day_count") <= 15) { // 未完成模板 + if ((int)templateInfo.get("day_count") <= COMPLETE_DAY_COUNT) { // 未完成模板 continue; } if (isTestTemplate(templateInfo)) { @@ -286,9 +293,9 @@ public class TemplateInfoCollector implements Serializable { int widgetCount = (int)processMap.get("widget_count"); boolean isTestTemplate = false; if (reportType == 0) { // 普通报表 - isTestTemplate = cellCount <= 5 && floatCount <= 1 && widgetCount <= 5; + isTestTemplate = cellCount <= VALID_CELL_COUNT && floatCount <= 1 && widgetCount <= VALID_WIDGET_COUNT; } else if (reportType == 1) { // 聚合报表 - isTestTemplate = blockCount <= 1 && widgetCount <= 5; + isTestTemplate = blockCount <= 1 && widgetCount <= VALID_WIDGET_COUNT; } else { // 表单(reportType == 2) isTestTemplate = widgetCount <= 1; } @@ -296,7 +303,7 @@ public class TemplateInfoCollector implements Serializable { } public static void main(String[] args) { -// TemplateInfoCollector tic = TemplateInfoCollector.getInstance(); -// tic.sendTemplateInfo(); + TemplateInfoCollector tic = TemplateInfoCollector.getInstance(); + tic.sendTemplateInfo(); } } diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateProcessInfo.java b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateProcessInfo.java new file mode 100644 index 000000000..d92ca7028 --- /dev/null +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateProcessInfo.java @@ -0,0 +1,26 @@ +package com.fr.design.mainframe.templateinfo; + +import com.fr.base.io.IOFile; + +/** + * Created by plough on 2017/3/17. + */ +public abstract class TemplateProcessInfo { + + protected T template; + + public TemplateProcessInfo(T template) { + this.template = template; + } + + // 获取模板类型。0 代表普通报表,1 代表聚合报表,2 代表表单 + public abstract int getReportType(); + // 获取模板格子数 + public abstract int getCellCount(); + // 获取模板悬浮元素个数 + public abstract int getFloatCount(); + // 获取模板聚合块个数 + public abstract int getBlockCount(); + // 获取模板控件数 + public abstract int getWidgetCount(); +} diff --git a/designer_form/src/com/fr/design/mainframe/JForm.java b/designer_form/src/com/fr/design/mainframe/JForm.java index c19f7f43b..b20f44bca 100644 --- a/designer_form/src/com/fr/design/mainframe/JForm.java +++ b/designer_form/src/com/fr/design/mainframe/JForm.java @@ -23,6 +23,8 @@ import com.fr.design.mainframe.actions.EmbeddedFormExportExportAction; import com.fr.design.mainframe.actions.TemplateParameterAction; import com.fr.design.mainframe.form.FormECCompositeProvider; import com.fr.design.mainframe.form.FormECDesignerProvider; +import com.fr.design.mainframe.templateinfo.JFormProcessInfo; +import com.fr.design.mainframe.templateinfo.TemplateProcessInfo; import com.fr.design.mainframe.toolbar.ToolBarMenuDock; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; import com.fr.design.menu.KeySetUtils; @@ -89,33 +91,11 @@ public class JForm extends JTemplate implements BaseJForm { return DesignState.JFORM; } - // 获取模板类型 - public int getReportType() { - return 2; - } - - // 获取模板格子数 - public int getCellCount() { - return 0; - } - // 获取模板悬浮元素个数 - public int getFloatCount() { - return 0; - } - // 获取模板聚合块个数 - public int getBlockCount() { - return 0; - } - // 获取模板控件数 - public int getWidgetCount() { - int widgetCount = 0; - for (int i = 0; i < template.getContainer().getWidgetCount(); i++) { - WFitLayout wf = (WFitLayout) template.getContainer().getWidget(i); - widgetCount += wf.getWidgetCount(); + public TemplateProcessInfo getProcessInfo() { + if (processInfo == null) { + processInfo = new JFormProcessInfo(template); } - int a = 1; - int b = 2; - return widgetCount; + return processInfo; } @Override From 587f6cf099b4700d09ae00e8d7f2a5fd1367fb6a Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 20 Mar 2017 11:01:24 +0800 Subject: [PATCH 192/343] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/extra/PluginHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/extra/PluginHelper.java b/designer_base/src/com/fr/design/extra/PluginHelper.java index f6bcccc62..ed0d78aa1 100644 --- a/designer_base/src/com/fr/design/extra/PluginHelper.java +++ b/designer_base/src/com/fr/design/extra/PluginHelper.java @@ -320,7 +320,7 @@ public class PluginHelper { return ArrayUtils.EMPTY_STRING_ARRAY; } //卸载前监听 -// plugin.preUninstall(); + plugin.preUninstall(); PluginLoader.getLoader().deletePlugin(plugin); return env.deleteFileFromPluginAndLibFolder(plugin); } From a9f5cfab070bd8aed53bf06abb8ce39fad0c3863 Mon Sep 17 00:00:00 2001 From: sunmondong Date: Mon, 20 Mar 2017 11:43:44 +0800 Subject: [PATCH 193/343] =?UTF-8?q?=E4=BD=BF=E7=94=A8aspectJ=E6=9E=84?= =?UTF-8?q?=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/build.release.gradle | 23 ++++++++++++++++++++++- designer_chart/build.release.gradle | 20 +++++++++++++++++++- designer_form/build.release.gradle | 19 ++++++++++++++++++- 3 files changed, 59 insertions(+), 3 deletions(-) diff --git a/designer_base/build.release.gradle b/designer_base/build.release.gradle index 4ed4ba12b..6aa5467c2 100644 --- a/designer_base/build.release.gradle +++ b/designer_base/build.release.gradle @@ -1,8 +1,29 @@ -apply plugin: 'java' tasks.withType(JavaCompile){ options.encoding = 'UTF-8' } + +buildscript { + repositories { + maven { + url "http://www.eveoh.nl/files/maven2" + } + } + + dependencies { + classpath "nl.eveoh:gradle-aspectj:1.2" + } +} + +ext.aspectjVersion = '1.7.4' + +apply plugin: 'aspectj' + +repositories { + mavenCentral() +} + + //指定构建的jdk版本 sourceCompatibility=1.8 //指定生成jar包版本 diff --git a/designer_chart/build.release.gradle b/designer_chart/build.release.gradle index e97176e24..b897c71de 100644 --- a/designer_chart/build.release.gradle +++ b/designer_chart/build.release.gradle @@ -1,8 +1,26 @@ -apply plugin: 'java' tasks.withType(JavaCompile){ options.encoding = 'UTF-8' } +buildscript { + repositories { + maven { + url "http://www.eveoh.nl/files/maven2" + } + } + + dependencies { + classpath "nl.eveoh:gradle-aspectj:1.2" + } +} + +ext.aspectjVersion = '1.7.4' +apply plugin: 'aspectj' + +repositories { + mavenCentral() +} + //指定构建的jdk版本 sourceCompatibility=1.8 //指定生成jar包的版本 diff --git a/designer_form/build.release.gradle b/designer_form/build.release.gradle index 23ee80322..793f6a0b1 100644 --- a/designer_form/build.release.gradle +++ b/designer_form/build.release.gradle @@ -1,8 +1,25 @@ -apply plugin: 'java' tasks.withType(JavaCompile){ options.encoding = 'UTF-8' } +buildscript { + repositories { + maven { + url "http://www.eveoh.nl/files/maven2" + } + } + + dependencies { + classpath "nl.eveoh:gradle-aspectj:1.2" + } +} + +ext.aspectjVersion = '1.7.4' +apply plugin: 'aspectj' + +repositories { + mavenCentral() +} //指定构建的jdk版本 sourceCompatibility=1.7 //指定生成的jar包版本 From 04e2efaf47e3e3689733e46c32f0a0d6850b7889 Mon Sep 17 00:00:00 2001 From: sunmondong Date: Mon, 20 Mar 2017 12:20:17 +0800 Subject: [PATCH 194/343] =?UTF-8?q?=20=E6=9E=84=E5=BB=BA=E4=BD=BF=E7=94=A8?= =?UTF-8?q?AspectJ?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/build.dev.gradle | 21 ++++++- designer_base/build.dev.gradle.bak | 70 ++++++++++++++++++++++++ designer_chart/build.dev.gradle | 20 ++++++- designer_chart/build.dev.gradle.bak | 85 +++++++++++++++++++++++++++++ designer_form/build.dev.gradle | 19 ++++++- designer_form/build.dev.gradle.bak | 4 +- 6 files changed, 213 insertions(+), 6 deletions(-) create mode 100644 designer_base/build.dev.gradle.bak create mode 100644 designer_chart/build.dev.gradle.bak diff --git a/designer_base/build.dev.gradle b/designer_base/build.dev.gradle index b02f751e7..9b2b65770 100644 --- a/designer_base/build.dev.gradle +++ b/designer_base/build.dev.gradle @@ -1,8 +1,25 @@ - -apply plugin: 'java' tasks.withType(JavaCompile){ options.encoding = 'UTF-8' } + +buildscript { + repositories { + maven { + url "http://www.eveoh.nl/files/maven2" + } + } + + dependencies { + classpath "nl.eveoh:gradle-aspectj:1.2" + } +} + +ext.aspectjVersion = '1.7.4' +apply plugin: 'aspectj' + +repositories { + mavenCentral() +} //指定构建的jdk版本 sourceCompatibility=1.7 //指定生成jar包版本 diff --git a/designer_base/build.dev.gradle.bak b/designer_base/build.dev.gradle.bak new file mode 100644 index 000000000..b02f751e7 --- /dev/null +++ b/designer_base/build.dev.gradle.bak @@ -0,0 +1,70 @@ + +apply plugin: 'java' +tasks.withType(JavaCompile){ + options.encoding = 'UTF-8' +} +//指定构建的jdk版本 +sourceCompatibility=1.7 +//指定生成jar包版本 +version='8.0' +//生成jar包重命名 +jar{ + baseName='fr-designer-core' +} + + +def srcDir="." + +//指定源码路径 +sourceSets{ + main{ + java{ + srcDirs=["${srcDir}/src"] + } + } +} +//获取什么分支名 +FileTree files =fileTree(dir:'./',include:'build.*.gradle') +def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf ('\\')) +buildDir=buildDir.substring(0,buildDir.lastIndexOf ('\\')) +def branchName=buildDir.substring(buildDir.lastIndexOf ('\\')+1) + +//声明外部依赖 +dependencies{ + +compile fileTree(dir:"../../../finereport-lib-stable/${branchName}",include:'**/*.jar') +compile fileTree(dir:'../../../',include:"finereport-*-stable/${branchName}/**/build/libs/*.jar") + + testCompile 'junit:junit:4.12' +} +//复制非.java文件到classes文件夹下参与打包 +task copyFile(type:Copy,dependsOn:compileJava){ + copy{ + from ("${srcDir}/src"){ + exclude '**/.setting/**','.classpath','.project','**/*.java','**/*.db','**/*.g','**/package.html' + } + into 'build/classes/main' + } + +} + + +//压缩项目中的js文件 +task compressJS{ + ant.taskdef(name:'yuicompress',classname:'com.yahoo.platform.yui.compressor.YUICompressTask'){ + classpath { + fileset(dir:'../../../finereport-lib4build-stable',includes:'**/*.jar') + } + } + ant.yuicompress(linebreak:"500",warn:"false", munge:"yes",preserveallsemicolons:"false",charset:"utf-8",encoding:"utf-8",outputfolder:'build/classes/main'){ + fileset (dir:"${srcDir}/src"){ + include (name:'**/*.js') + include (name:'**/*.css') + } + + } +} +jar.dependsOn compressJS + + + diff --git a/designer_chart/build.dev.gradle b/designer_chart/build.dev.gradle index ba6df992b..db1478361 100644 --- a/designer_chart/build.dev.gradle +++ b/designer_chart/build.dev.gradle @@ -1,8 +1,26 @@ -apply plugin: 'java' tasks.withType(JavaCompile){ options.encoding = 'UTF-8' } + +buildscript { + repositories { + maven { + url "http://www.eveoh.nl/files/maven2" + } + } + + dependencies { + classpath "nl.eveoh:gradle-aspectj:1.2" + } +} + +ext.aspectjVersion = '1.7.4' +apply plugin: 'aspectj' + +repositories { + mavenCentral() +} //指定构建的jdk版本 sourceCompatibility=1.7 //指定生成jar包的版本 diff --git a/designer_chart/build.dev.gradle.bak b/designer_chart/build.dev.gradle.bak new file mode 100644 index 000000000..7566bcc82 --- /dev/null +++ b/designer_chart/build.dev.gradle.bak @@ -0,0 +1,85 @@ + +apply plugin: 'java' +tasks.withType(JavaCompile){ + options.encoding = 'UTF-8' +} + +buildscript { + repositories { + maven { + url "http://www.eveoh.nl/files/maven2" + } + } + + dependencies { + classpath "nl.eveoh:gradle-aspectj:1.2" + } +} + +ext.aspectjVersion = '1.7.4' +apply plugin: 'aspectj' + +repositories { + mavenCentral() +} +//指定构建的jdk版本 +sourceCompatibility=1.7 +//指定生成jar包的版本 +version='8.0' + +def srcDir="." + +//对生成的jar包进行重命名 + +jar{ + baseName='fr-designer-chart' +} + +sourceSets{ + main{ + java{ + srcDirs=["${srcDir}/src"] + } + } +} +FileTree files =fileTree(dir:'./',include:'build.*.gradle') +def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf ('\\')) +buildDir=buildDir.substring(0,buildDir.lastIndexOf ('\\')) +def branchName=buildDir.substring(buildDir.lastIndexOf ('\\')+1) + +//指定外部依赖 +dependencies{ +compile fileTree(dir:"../../../finereport-lib-stable/${branchName}",include:'**/*.jar') +compile fileTree(dir:'../../../',include:"finereport-*-stable/${branchName}/**/build/libs/*.jar") + + testCompile 'junit:junit:4.12' +} +//将非.java 文件复制到classes文件夹下参与打包 +task copyFile(type:Copy,dependsOn:compileJava){ + copy{ + from ("${srcDir}/src"){ + exclude '**/.setting/**','.classpath','.project','**/*.java','**/*.db','**/*.g','**/package.html' + + } + into 'build/classes/main' + } + +} + +//压缩项目中的js文件 +task compressJS{ + ant.taskdef(name:'yuicompress',classname:'com.yahoo.platform.yui.compressor.YUICompressTask'){ + classpath { + fileset(dir:'../../../finereport-lib4build-stable',includes:'**/*.jar') + } + } + ant.yuicompress(linebreak:"500",warn:"false", munge:"yes",preserveallsemicolons:"false",charset:"utf-8",encoding:"utf-8",outputfolder:'build/classes/main'){ + fileset (dir:"${srcDir}/src"){ + include (name:'**/*.js') + include (name:'**/*.css') + } + + } +} +jar.dependsOn compressJS + diff --git a/designer_form/build.dev.gradle b/designer_form/build.dev.gradle index ae16b033e..4b71fed5f 100644 --- a/designer_form/build.dev.gradle +++ b/designer_form/build.dev.gradle @@ -1,8 +1,25 @@ -apply plugin: 'java' tasks.withType(JavaCompile){ options.encoding = 'UTF-8' } +buildscript { + repositories { + maven { + url "http://www.eveoh.nl/files/maven2" + } + } + + dependencies { + classpath "nl.eveoh:gradle-aspectj:1.2" + } +} + +ext.aspectjVersion = '1.7.4' +apply plugin: 'aspectj' + +repositories { + mavenCentral() +} //指定构建的jdk版本 sourceCompatibility=1.7 //指定生成的jar包版本 diff --git a/designer_form/build.dev.gradle.bak b/designer_form/build.dev.gradle.bak index 2b727caac..ae16b033e 100644 --- a/designer_form/build.dev.gradle.bak +++ b/designer_form/build.dev.gradle.bak @@ -4,7 +4,7 @@ tasks.withType(JavaCompile){ options.encoding = 'UTF-8' } //指定构建的jdk版本 -sourceCompatibility=1.8 +sourceCompatibility=1.7 //指定生成的jar包版本 version='8.0' @@ -20,7 +20,7 @@ sourceSets{ main{ java{ srcDirs=["${srcDir}/src", -"${srcDir}/../designer/src"] + "${srcDir}/../designer/src"] } } } From ae1cdd7d65496a92fa4c024d5b622660912d8363 Mon Sep 17 00:00:00 2001 From: mengao Date: Mon, 20 Mar 2017 13:40:29 +0800 Subject: [PATCH 195/343] =?UTF-8?q?=E8=BF=98=E5=8E=9F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/gui/controlpane/JControlPane.java | 2 +- .../series/SeriesCondition/impl/ChartHyperPoplinkPane.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/designer_base/src/com/fr/design/gui/controlpane/JControlPane.java b/designer_base/src/com/fr/design/gui/controlpane/JControlPane.java index 53dfc54af..7a7cc5475 100644 --- a/designer_base/src/com/fr/design/gui/controlpane/JControlPane.java +++ b/designer_base/src/com/fr/design/gui/controlpane/JControlPane.java @@ -18,7 +18,7 @@ import java.awt.*; * Time: 15:07 */ public abstract class JControlPane extends BasicPane implements UnrepeatedNameHelper { - protected static final int SHORT_WIDTH = 30; //每加一个short Divider位置加30 + protected static final int SHORT_WIDTH = 28; //每加一个short Divider位置加28 protected JPanel controlUpdatePane; private ShortCut4JControlPane[] shorts; diff --git a/designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperPoplinkPane.java b/designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperPoplinkPane.java index 94836c7a3..50a55d0e6 100644 --- a/designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperPoplinkPane.java +++ b/designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperPoplinkPane.java @@ -45,7 +45,7 @@ public class ChartHyperPoplinkPane extends BasicBeanPane { ChartCollection cc = createChartCollection(); chartComponent = new ChartComponent(); - chartComponent.setPreferredSize(new Dimension(220, 170));// 在单元格弹出时 需要调整保证属性表的大小. + chartComponent.setPreferredSize(new Dimension(210, 170));// 在单元格弹出时 需要调整保证属性表的大小. chartComponent.setSupportEdit(false); chartComponent.populate(cc); From 70c1e7564468a7ea64b9afb4f67f3ec9d5f0e317 Mon Sep 17 00:00:00 2001 From: sunmondong Date: Mon, 20 Mar 2017 13:55:13 +0800 Subject: [PATCH 196/343] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E4=B8=BAaspectJ?= =?UTF-8?q?=E6=9E=84=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/build.master.gradle | 20 +++++- designer_base/build.master.gradle.bak | 89 ++++++++++++++++++++++++++ designer_chart/build.master.gradle | 20 +++++- designer_chart/build.master.gradle.bak | 85 ++++++++++++++++++++++++ designer_form/build.master.gradle | 21 +++++- designer_form/build.master.gradle.bak | 22 ++++++- 6 files changed, 253 insertions(+), 4 deletions(-) create mode 100644 designer_base/build.master.gradle.bak create mode 100644 designer_chart/build.master.gradle.bak diff --git a/designer_base/build.master.gradle b/designer_base/build.master.gradle index b02f751e7..5220ecebf 100644 --- a/designer_base/build.master.gradle +++ b/designer_base/build.master.gradle @@ -1,8 +1,26 @@ -apply plugin: 'java' tasks.withType(JavaCompile){ options.encoding = 'UTF-8' } +buildscript { + repositories { + maven { + url "http://www.eveoh.nl/files/maven2" + } + } + + dependencies { + classpath "nl.eveoh:gradle-aspectj:1.2" + } +} + +ext.aspectjVersion = '1.7.4' +apply plugin: 'aspectj' + +repositories { + mavenCentral() +} + //指定构建的jdk版本 sourceCompatibility=1.7 //指定生成jar包版本 diff --git a/designer_base/build.master.gradle.bak b/designer_base/build.master.gradle.bak new file mode 100644 index 000000000..86cb6ca3e --- /dev/null +++ b/designer_base/build.master.gradle.bak @@ -0,0 +1,89 @@ + +apply plugin: 'java' +tasks.withType(JavaCompile){ + options.encoding = 'UTF-8' +} +buildscript { + repositories { + maven { + url "http://www.eveoh.nl/files/maven2" + } + } + + dependencies { + classpath "nl.eveoh:gradle-aspectj:1.2" + } +} + +ext.aspectjVersion = '1.7.4' +apply plugin: 'aspectj' + +repositories { + mavenCentral() +} + +//指定构建的jdk版本 +sourceCompatibility=1.7 +//指定生成jar包版本 +version='8.0' +//生成jar包重命名 +jar{ + baseName='fr-designer-core' +} + + +def srcDir="." + +//指定源码路径 +sourceSets{ + main{ + java{ + srcDirs=["${srcDir}/src"] + } + } +} +//获取什么分支名 +FileTree files =fileTree(dir:'./',include:'build.*.gradle') +def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf ('\\')) +buildDir=buildDir.substring(0,buildDir.lastIndexOf ('\\')) +def branchName=buildDir.substring(buildDir.lastIndexOf ('\\')+1) + +//声明外部依赖 +dependencies{ + +compile fileTree(dir:"../../../finereport-lib-stable/${branchName}",include:'**/*.jar') +compile fileTree(dir:'../../../',include:"finereport-*-stable/${branchName}/**/build/libs/*.jar") + + testCompile 'junit:junit:4.12' +} +//复制非.java文件到classes文件夹下参与打包 +task copyFile(type:Copy,dependsOn:compileJava){ + copy{ + from ("${srcDir}/src"){ + exclude '**/.setting/**','.classpath','.project','**/*.java','**/*.db','**/*.g','**/package.html' + } + into 'build/classes/main' + } + +} + + +//压缩项目中的js文件 +task compressJS{ + ant.taskdef(name:'yuicompress',classname:'com.yahoo.platform.yui.compressor.YUICompressTask'){ + classpath { + fileset(dir:'../../../finereport-lib4build-stable',includes:'**/*.jar') + } + } + ant.yuicompress(linebreak:"500",warn:"false", munge:"yes",preserveallsemicolons:"false",charset:"utf-8",encoding:"utf-8",outputfolder:'build/classes/main'){ + fileset (dir:"${srcDir}/src"){ + include (name:'**/*.js') + include (name:'**/*.css') + } + + } +} +jar.dependsOn compressJS + + + diff --git a/designer_chart/build.master.gradle b/designer_chart/build.master.gradle index ba6df992b..6730fd1ee 100644 --- a/designer_chart/build.master.gradle +++ b/designer_chart/build.master.gradle @@ -1,8 +1,26 @@ -apply plugin: 'java' tasks.withType(JavaCompile){ options.encoding = 'UTF-8' } +buildscript { + repositories { + maven { + url "http://www.eveoh.nl/files/maven2" + } + } + + dependencies { + classpath "nl.eveoh:gradle-aspectj:1.2" + } +} + +ext.aspectjVersion = '1.7.4' +apply plugin: 'aspectj' + +repositories { + mavenCentral() +} + //指定构建的jdk版本 sourceCompatibility=1.7 //指定生成jar包的版本 diff --git a/designer_chart/build.master.gradle.bak b/designer_chart/build.master.gradle.bak new file mode 100644 index 000000000..c0f28d1f8 --- /dev/null +++ b/designer_chart/build.master.gradle.bak @@ -0,0 +1,85 @@ + +apply plugin: 'java' +tasks.withType(JavaCompile){ + options.encoding = 'UTF-8' +} +buildscript { + repositories { + maven { + url "http://www.eveoh.nl/files/maven2" + } + } + + dependencies { + classpath "nl.eveoh:gradle-aspectj:1.2" + } +} + +ext.aspectjVersion = '1.7.4' +apply plugin: 'aspectj' + +repositories { + mavenCentral() +} + +//指定构建的jdk版本 +sourceCompatibility=1.7 +//指定生成jar包的版本 +version='8.0' + +def srcDir="." + +//对生成的jar包进行重命名 + +jar{ + baseName='fr-designer-chart' +} + +sourceSets{ + main{ + java{ + srcDirs=["${srcDir}/src"] + } + } +} +FileTree files =fileTree(dir:'./',include:'build.*.gradle') +def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf ('\\')) +buildDir=buildDir.substring(0,buildDir.lastIndexOf ('\\')) +def branchName=buildDir.substring(buildDir.lastIndexOf ('\\')+1) + +//指定外部依赖 +dependencies{ +compile fileTree(dir:"../../../finereport-lib-stable/${branchName}",include:'**/*.jar') +compile fileTree(dir:'../../../',include:"finereport-*-stable/${branchName}/**/build/libs/*.jar") + + testCompile 'junit:junit:4.12' +} +//将非.java 文件复制到classes文件夹下参与打包 +task copyFile(type:Copy,dependsOn:compileJava){ + copy{ + from ("${srcDir}/src"){ + exclude '**/.setting/**','.classpath','.project','**/*.java','**/*.db','**/*.g','**/package.html' + + } + into 'build/classes/main' + } + +} + +//压缩项目中的js文件 +task compressJS{ + ant.taskdef(name:'yuicompress',classname:'com.yahoo.platform.yui.compressor.YUICompressTask'){ + classpath { + fileset(dir:'../../../finereport-lib4build-stable',includes:'**/*.jar') + } + } + ant.yuicompress(linebreak:"500",warn:"false", munge:"yes",preserveallsemicolons:"false",charset:"utf-8",encoding:"utf-8",outputfolder:'build/classes/main'){ + fileset (dir:"${srcDir}/src"){ + include (name:'**/*.js') + include (name:'**/*.css') + } + + } +} +jar.dependsOn compressJS + diff --git a/designer_form/build.master.gradle b/designer_form/build.master.gradle index 324f408bf..45d1d86f1 100644 --- a/designer_form/build.master.gradle +++ b/designer_form/build.master.gradle @@ -1,8 +1,27 @@ -apply plugin: 'java' tasks.withType(JavaCompile){ options.encoding = 'UTF-8' } + +buildscript { + repositories { + maven { + url "http://www.eveoh.nl/files/maven2" + } + } + + dependencies { + classpath "nl.eveoh:gradle-aspectj:1.2" + } +} + +ext.aspectjVersion = '1.7.4' +apply plugin: 'aspectj' + +repositories { + mavenCentral() +} + //指定构建的jdk版本 sourceCompatibility=1.7 //指定生成的jar包版本 diff --git a/designer_form/build.master.gradle.bak b/designer_form/build.master.gradle.bak index b6fdde506..348ba4875 100644 --- a/designer_form/build.master.gradle.bak +++ b/designer_form/build.master.gradle.bak @@ -3,6 +3,26 @@ apply plugin: 'java' tasks.withType(JavaCompile){ options.encoding = 'UTF-8' } + +buildscript { + repositories { + maven { + url "http://www.eveoh.nl/files/maven2" + } + } + + dependencies { + classpath "nl.eveoh:gradle-aspectj:1.2" + } +} + +ext.aspectjVersion = '1.7.4' +apply plugin: 'aspectj' + +repositories { + mavenCentral() +} + //指定构建的jdk版本 sourceCompatibility=1.7 //指定生成的jar包版本 @@ -47,7 +67,7 @@ def dataContent ={def dir -> } } } -FileTree f1=fileTree(dir:'../../../'include:"finereport-*-stable/${branchName}/build/libs/*.jar") +FileTree f1=fileTree(dir:'../../../',include:"finereport-*-stable/${branchName}/build/libs/*.jar") f1.each{File file-> println "----------${file.path}" } From 2afb21241badfe2295285ab7c59dd2a7147d8bb4 Mon Sep 17 00:00:00 2001 From: fr_shine Date: Mon, 20 Mar 2017 18:00:08 +0800 Subject: [PATCH 197/343] =?UTF-8?q?=E5=A4=A7=E6=95=B0=E6=8D=AE=E4=B9=8B?= =?UTF-8?q?=E5=89=8D=E6=8A=8Aapilevel=E7=AD=89=E7=BA=A7=E6=8F=90=E9=AB=98?= =?UTF-8?q?=E4=BA=86=EF=BC=8C=E4=BA=A7=E5=93=81=E4=B8=8D=E5=90=8C=E6=84=8F?= =?UTF-8?q?=EF=BC=8C=E5=85=88=E6=94=B9=E5=9B=9E=E6=9D=A5=EF=BC=8C=E5=85=BC?= =?UTF-8?q?=E5=AE=B9=E9=97=AE=E9=A2=98=E5=86=8D=E7=9C=8B=E7=9C=8B=E6=80=8E?= =?UTF-8?q?=E4=B9=88=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/chart/fun/IndependentChartUIProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_chart/src/com/fr/design/chart/fun/IndependentChartUIProvider.java b/designer_chart/src/com/fr/design/chart/fun/IndependentChartUIProvider.java index 031ecd3d6..1b90382d6 100644 --- a/designer_chart/src/com/fr/design/chart/fun/IndependentChartUIProvider.java +++ b/designer_chart/src/com/fr/design/chart/fun/IndependentChartUIProvider.java @@ -22,7 +22,7 @@ public interface IndependentChartUIProvider extends Level { String XML_TAG = "IndependentChartUIProvider"; - int CURRENT_API_LEVEL = 4; + int CURRENT_API_LEVEL = 3; /** * 图表的类型定义界面类型,就是属性表的第一个界面 From 74ba5ca9ab6e5f1fd30820b4d33d6219596db79f Mon Sep 17 00:00:00 2001 From: mengao Date: Tue, 21 Mar 2017 10:22:16 +0800 Subject: [PATCH 198/343] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=B8=83=E5=B1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/gui/controlpane/JControlPane.java | 2 +- .../series/SeriesCondition/impl/ChartHyperPoplinkPane.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/designer_base/src/com/fr/design/gui/controlpane/JControlPane.java b/designer_base/src/com/fr/design/gui/controlpane/JControlPane.java index 7a7cc5475..53dfc54af 100644 --- a/designer_base/src/com/fr/design/gui/controlpane/JControlPane.java +++ b/designer_base/src/com/fr/design/gui/controlpane/JControlPane.java @@ -18,7 +18,7 @@ import java.awt.*; * Time: 15:07 */ public abstract class JControlPane extends BasicPane implements UnrepeatedNameHelper { - protected static final int SHORT_WIDTH = 28; //每加一个short Divider位置加28 + protected static final int SHORT_WIDTH = 30; //每加一个short Divider位置加30 protected JPanel controlUpdatePane; private ShortCut4JControlPane[] shorts; diff --git a/designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperPoplinkPane.java b/designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperPoplinkPane.java index 50a55d0e6..1a68ad5e5 100644 --- a/designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperPoplinkPane.java +++ b/designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperPoplinkPane.java @@ -45,7 +45,7 @@ public class ChartHyperPoplinkPane extends BasicBeanPane { ChartCollection cc = createChartCollection(); chartComponent = new ChartComponent(); - chartComponent.setPreferredSize(new Dimension(210, 170));// 在单元格弹出时 需要调整保证属性表的大小. + chartComponent.setPreferredSize(new Dimension(200, 170));// 在单元格弹出时 需要调整保证属性表的大小. chartComponent.setSupportEdit(false); chartComponent.populate(cc); From 3517d4546fd28f761d2f06cd9b8b7ca733509f3f Mon Sep 17 00:00:00 2001 From: mengao Date: Tue, 21 Mar 2017 10:27:30 +0800 Subject: [PATCH 199/343] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=B8=83=E5=B1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java index f57328e14..3710dcd52 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java @@ -79,7 +79,7 @@ public class ChartTypeButtonPane extends BasicBeanPane implemen eastPane.setLayout(new BorderLayout()); - eastPane.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 10)); + eastPane.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 5)); JPanel button = new JPanel(); button.setPreferredSize(new Dimension(45, 20)); button.setLayout(new GridLayout(1, 2, 5, 0)); From 5a9c222dc2d5d2e5cb2d0981491dd898cbf7302a Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Wed, 22 Mar 2017 17:26:42 +0800 Subject: [PATCH 200/343] =?UTF-8?q?frm=E6=9C=AC=E5=9C=B0=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E5=A4=8D=E7=94=A8=20=E7=BB=9D=E5=AF=B9=E5=B8=83=E5=B1=80?= =?UTF-8?q?=EF=BC=8C=E9=81=97=E7=95=99=EF=BC=9A=E9=87=8D=E5=91=BD=E5=90=8D?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/actions/edit/CopyAction.java | 2 +- .../fr/design/beans/location/MoveUtils.java | 52 +- .../beans/location/WidgetForbidWindow.java | 56 +- .../com/fr/design/mainframe/BaseJForm.java | 2 +- .../toolbar/ToolBarMenuDockPlus.java | 20 +- .../parameter/ParameterDesignerProvider.java | 2 +- .../designer/beans/actions/CopyAction.java | 30 +- .../layout/AbstractLayoutAdapter.java | 83 +- .../layout/FRAbsoluteLayoutAdapter.java | 553 ++++---- .../beans/location/AccessDirection.java | 40 +- .../designer/beans/models/SelectionModel.java | 580 ++++---- .../form/parameter/FormParaDesigner.java | 1242 +++++++++-------- .../mainframe/EditingMouseListener.java | 2 +- .../com/fr/design/mainframe/FormDesigner.java | 218 +-- .../design/mainframe/FormSelectionUtils.java | 301 ++-- .../src/com/fr/design/mainframe/JForm.java | 66 +- .../design/mainframe/MobileWidgetTable.java | 3 +- .../design/mainframe/WidgetPropertyPane.java | 31 +- 18 files changed, 1741 insertions(+), 1542 deletions(-) diff --git a/designer_base/src/com/fr/design/actions/edit/CopyAction.java b/designer_base/src/com/fr/design/actions/edit/CopyAction.java index 6f7ec1c4d..a9e685552 100644 --- a/designer_base/src/com/fr/design/actions/edit/CopyAction.java +++ b/designer_base/src/com/fr/design/actions/edit/CopyAction.java @@ -18,7 +18,7 @@ import com.fr.general.Inter; public class CopyAction extends TemplateComponentAction { public CopyAction(TargetComponent t) { super(t); - + this.setName(Inter.getLocText("M_Edit-Copy")); this.setMnemonic('C'); this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_edit/copy.png")); diff --git a/designer_base/src/com/fr/design/beans/location/MoveUtils.java b/designer_base/src/com/fr/design/beans/location/MoveUtils.java index d89848446..4ba477ffa 100644 --- a/designer_base/src/com/fr/design/beans/location/MoveUtils.java +++ b/designer_base/src/com/fr/design/beans/location/MoveUtils.java @@ -279,13 +279,13 @@ public class MoveUtils { } } - public static void displayForbidWindow(int x, int y) { - widgetForbidWindow.showWindow(x, y); - } +// public static void displayForbidWindow(int x, int y) { +// widgetForbidWindow.showWindow(x, y); +// } - public static void hideForbidWindow() { - widgetForbidWindow.hideWindow(); - } +// public static void hideForbidWindow() { +// widgetForbidWindow.hideWindow(); +// } /** * 吸附 @@ -319,24 +319,24 @@ public class MoveUtils { java.util.List cacheRecs = new ArrayList(); //是否存在控件重叠 - boolean isWidgetsIntersects = false; +// boolean isWidgetsIntersects = false; while (iterator.hasNext()) { Rectangle bounds = iterator.nextRectangle(); cacheRecs.add(bounds); - boolean isIntersects = operatingRectangle.intersects(bounds); +// boolean isIntersects = operatingRectangle.intersects(bounds); findX(px, bounds, left, right, width); findY(py, bounds, top, bottom, height); if(!isParameterLayout){ - if(isIntersects) { - isWidgetsIntersects = true; - } - else{ +// if(isIntersects) { +// isWidgetsIntersects = true; +// } +// else{ findEquidistantLine(bounds, left, top, height, width); - } +// } } } - showForbiddenWindow(designer, x, y, isWidgetsIntersects); + //showForbiddenWindow(designer, x, y, isWidgetsIntersects); createXAbsorptionline(px, designer, width, cacheRecs); createYAbsorptionline(py, designer, height, cacheRecs); @@ -353,18 +353,18 @@ public class MoveUtils { return sorptionPoint; } - public static void showForbiddenWindow(RectangleDesigner designer, int x, int y, boolean isIntersects){ - if (isIntersects){ - if(designer.getDesignerLocationOnScreen() != null) { - displayForbidWindow(x + designer.getDesignerLocationOnScreen().x, y + designer.getDesignerLocationOnScreen().y); - } - designer.setWidgetsIntersected(true); - } - else{ - designer.setWidgetsIntersected(false); - hideForbidWindow(); - } - } +// public static void showForbiddenWindow(RectangleDesigner designer, int x, int y, boolean isIntersects){ +// if (isIntersects){ +// if(designer.getDesignerLocationOnScreen() != null) { +// displayForbidWindow(x + designer.getDesignerLocationOnScreen().x, y + designer.getDesignerLocationOnScreen().y); +// } +// designer.setWidgetsIntersected(true); +// } +// else{ +// designer.setWidgetsIntersected(false); +// hideForbidWindow(); +// } +// } private static void createXAbsorptionline(PlacePointing px, RectangleDesigner designer, int width, java.util.List cacheRecs) { Absorptionline line = null; diff --git a/designer_base/src/com/fr/design/beans/location/WidgetForbidWindow.java b/designer_base/src/com/fr/design/beans/location/WidgetForbidWindow.java index acf934e25..9ff080afb 100644 --- a/designer_base/src/com/fr/design/beans/location/WidgetForbidWindow.java +++ b/designer_base/src/com/fr/design/beans/location/WidgetForbidWindow.java @@ -17,32 +17,32 @@ public class WidgetForbidWindow extends JWindow { private UIButton promptButton = new UIButton(Inter.getLocText("FR-Designer_Forbid_Widgets_Intersects"), BaseUtils.readIcon(IconPathConstants.FORBID_ICON_PATH)); - /** - * 构造函数 - */ - public WidgetForbidWindow() { - this.add(promptButton); - - this.setSize(WIDTH, HEIGHT); - } - - /** - * 在指定位置显示窗口, 默认将window的中心点放到指定位置上 - * - * @param x x坐标 - * @param y y坐标 - * - */ - public void showWindow(int x, int y){ - this.setLocation(x - WIDTH / 2, y - HEIGHT / 2); - this.setVisible(true); - } - - /** - * 隐藏当前窗口 - * - */ - public void hideWindow(){ - this.setVisible(false); - } +// /** +// * 构造函数 +// */ +// public WidgetForbidWindow() { +// this.add(promptButton); +// +// this.setSize(WIDTH, HEIGHT); +// } +// +// /** +// * 在指定位置显示窗口, 默认将window的中心点放到指定位置上 +// * +// * @param x x坐标 +// * @param y y坐标 +// * +// */ +// public void showWindow(int x, int y){ +// this.setLocation(x - WIDTH / 2, y - HEIGHT / 2); +// this.setVisible(true); +// } +// +// /** +// * 隐藏当前窗口 +// * +// */ +// public void hideWindow(){ +// this.setVisible(false); +// } } diff --git a/designer_base/src/com/fr/design/mainframe/BaseJForm.java b/designer_base/src/com/fr/design/mainframe/BaseJForm.java index c0fd09f17..a666af38b 100644 --- a/designer_base/src/com/fr/design/mainframe/BaseJForm.java +++ b/designer_base/src/com/fr/design/mainframe/BaseJForm.java @@ -1 +1 @@ -package com.fr.design.mainframe; import javax.swing.JComponent; import com.fr.form.FormElementCaseContainerProvider; /** * Author : Shockway * Date: 13-7-15 * Time: 上午10:28 */ public interface BaseJForm extends JTemplateProvider{ public static final String XML_TAG = "JForm"; public static final int FORM_TAB = 0; public static final int ELEMENTCASE_TAB = 1; public static final int ELEMENTCASE_CHANGE_TAB = 2; /** * 刷新所有控件 */ public void refreshAllNameWidgets(); /** * 刷新参数 */ public void populateParameter(); /** * 刷新选中的控件 */ public void refreshSelectedWidget(); /** * 获取当前的Target */ public Object getTarget(); /** * 执行撤销 * * @param o 之前保存的状态 */ public void applyUndoState4Form(BaseUndoState o); /** * 获取当前编辑的组件 */ public JComponent getEditingPane(); /** * 只在Form和ElementCase之间切换 * @param index 切换位置 */ public void tabChanged(int index); /** * 在Form和ElementCase, 以及ElementCase和ElementCase之间切换 * @param index 切换位置 * @param ecContainer ElementCase所在container */ public void tabChanged(int index, FormElementCaseContainerProvider ecContainer); } \ No newline at end of file +package com.fr.design.mainframe; import javax.swing.JComponent; import com.fr.form.FormElementCaseContainerProvider; /** * Author : Shockway * Date: 13-7-15 * Time: 上午10:28 */ public interface BaseJForm extends JTemplateProvider { String XML_TAG = "JForm"; int FORM_TAB = 0; int ELEMENTCASE_TAB = 1; int ELEMENTCASE_CHANGE_TAB = 2; /** * 刷新所有控件 */ void refreshAllNameWidgets(); /** * 刷新参数 */ void populateParameter(); /** * 刷新选中的控件 */ void refreshSelectedWidget(); /** * 获取当前的Target */ Object getTarget(); /** * 执行撤销 * * @param o 之前保存的状态 */ void applyUndoState4Form(BaseUndoState o); /** * 获取当前编辑的组件 */ JComponent getEditingPane(); /** * 只在Form和ElementCase之间切换 * * @param index 切换位置 */ void tabChanged(int index); /** * 在Form和ElementCase, 以及ElementCase和ElementCase之间切换 * * @param index 切换位置 * @param ecContainer ElementCase所在container */ void tabChanged(int index, FormElementCaseContainerProvider ecContainer); } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDockPlus.java b/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDockPlus.java index 6c85ce214..ada075aeb 100644 --- a/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDockPlus.java +++ b/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDockPlus.java @@ -12,52 +12,52 @@ public interface ToolBarMenuDockPlus { * * @return 工具 */ - public ToolBarDef[] toolbars4Target(); + ToolBarDef[] toolbars4Target(); /** * 文件菜单的子菜单 * * @return 子菜单 */ - public ShortCut[] shortcut4FileMenu(); + ShortCut[] shortcut4FileMenu(); /** * 目标的菜单 * * @return 菜单 */ - public MenuDef[] menus4Target(); + MenuDef[] menus4Target(); /** * 表单的工具栏 * * @return 表单工具栏 */ - public JPanel[] toolbarPanes4Form(); + JPanel[] toolbarPanes4Form(); /** * 表单的工具按钮 * * @return 工具按钮 */ - public JComponent[] toolBarButton4Form(); + JComponent[] toolBarButton4Form(); /** * 权限细粒度状态下的工具面板 * * @return 工具面板 */ - public JComponent toolBar4Authority(); + JComponent toolBar4Authority(); - public int getMenuState(); + int getMenuState(); - public int getToolBarHeight(); + int getToolBarHeight(); /** * 导出菜单的子菜单 ,目前用于图表设计器 * * @return 子菜单 */ - public ShortCut[] shortcut4ExportMenu(); - + ShortCut[] shortcut4ExportMenu(); + } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/parameter/ParameterDesignerProvider.java b/designer_base/src/com/fr/design/parameter/ParameterDesignerProvider.java index 2e2743048..a812238b7 100644 --- a/designer_base/src/com/fr/design/parameter/ParameterDesignerProvider.java +++ b/designer_base/src/com/fr/design/parameter/ParameterDesignerProvider.java @@ -1 +1 @@ -package com.fr.design.parameter; import com.fr.base.Parameter; import com.fr.base.parameter.ParameterUI; import com.fr.design.mainframe.AuthorityEditPane; import javax.swing.*; import java.awt.*; /** * 参数设计界面接口 */ public interface ParameterDesignerProvider { public void addListener(ParaDefinitePane paraDefinitePane); public Component createWrapper(); public void setDesignHeight(int height); public Dimension getDesignSize(); public Dimension getPreferredSize(); public void populate(ParameterUI p); public void refreshAllNameWidgets(); public void refresh4TableData(String oldName, String newName); public void refreshParameter(ParaDefinitePane paraDefinitePane); public boolean isWithQueryButton(); public java.util.List getAllXCreatorNameList(); public boolean isWithoutParaXCreator(Parameter[] ps); public boolean isBlank(); public ParameterUI getParaTarget(); public boolean addingParameter2Editor(Parameter parameter, int index); public boolean addingParameter2EditorWithQueryButton(Parameter parameter, int index); public void addingAllParameter2Editor(Parameter[] parameterArray, int currentIndex); public JPanel[] toolbarPanes4Form(); public JComponent[] toolBarButton4Form(); public void initBeforeUpEdit(); public void populateParameterPropertyPane(ParaDefinitePane p); public void initWidgetToolbarPane(); public AuthorityEditPane getAuthorityEditPane(); public JPanel getEastUpPane(); public JPanel getEastDownPane(); public boolean isSupportAuthority(); public void removeSelection(); public ParameterBridge getParaComponent(); } \ No newline at end of file +package com.fr.design.parameter; import com.fr.base.Parameter; import com.fr.base.parameter.ParameterUI; import com.fr.design.mainframe.AuthorityEditPane; import javax.swing.*; import java.awt.*; /** * 参数设计界面接口 */ public interface ParameterDesignerProvider { void addListener(ParaDefinitePane paraDefinitePane); Component createWrapper(); void setDesignHeight(int height); Dimension getDesignSize(); Dimension getPreferredSize(); void populate(ParameterUI p); void refreshAllNameWidgets(); void refresh4TableData(String oldName, String newName); void refreshParameter(ParaDefinitePane paraDefinitePane); boolean isWithQueryButton(); java.util.List getAllXCreatorNameList(); boolean isWithoutParaXCreator(Parameter[] ps); boolean isBlank(); ParameterUI getParaTarget(); boolean addingParameter2Editor(Parameter parameter, int index); boolean addingParameter2EditorWithQueryButton(Parameter parameter, int index); void addingAllParameter2Editor(Parameter[] parameterArray, int currentIndex); JPanel[] toolbarPanes4Form(); JComponent[] toolBarButton4Form(); void initBeforeUpEdit(); void populateParameterPropertyPane(ParaDefinitePane p); void initWidgetToolbarPane(); AuthorityEditPane getAuthorityEditPane(); JPanel getEastUpPane(); JPanel getEastDownPane(); boolean isSupportAuthority(); void removeSelection(); ParameterBridge getParaComponent(); } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/actions/CopyAction.java b/designer_form/src/com/fr/design/designer/beans/actions/CopyAction.java index e32ece18e..de36cde9b 100644 --- a/designer_form/src/com/fr/design/designer/beans/actions/CopyAction.java +++ b/designer_form/src/com/fr/design/designer/beans/actions/CopyAction.java @@ -11,21 +11,21 @@ import com.fr.design.mainframe.FormDesigner; public class CopyAction extends FormEditAction { - public CopyAction(FormDesigner t) { - super(t); - this.setName(Inter.getLocText("M_Edit-Copy")); - this.setMnemonic('C'); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_edit/copy.png")); - this.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK)); - } + public CopyAction(FormDesigner t) { + super(t); + this.setName(Inter.getLocText("M_Edit-Copy")); + this.setMnemonic('C'); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_edit/copy.png")); + this.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK)); + } - @Override - public boolean executeActionReturnUndoRecordNeeded() { - FormDesigner tc = getEditingComponent(); - if (tc != null) { - tc.copy(); - } - return false; - } + @Override + public boolean executeActionReturnUndoRecordNeeded() { + FormDesigner tc = getEditingComponent(); + if (tc != null) { + tc.copy(); + } + return false; + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/AbstractLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/AbstractLayoutAdapter.java index d5232d26a..54d6abab4 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/AbstractLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/AbstractLayoutAdapter.java @@ -23,32 +23,35 @@ public abstract class AbstractLayoutAdapter implements LayoutAdapter { this.container = container; this.layout = container.getLayout(); } - + /** * 是否使用控件备份大小 + * * @param xCreator 控件 * @return 所在容器相同,且支持备份的话返回true */ public boolean whetherUseBackupSize(XCreator xCreator) { - Class clazz = container.getClass(); - Class bkClazz = null; - if(xCreator.getBackupParent() != null) { - bkClazz = xCreator.getBackupParent().getClass(); - } - return ComparatorUtils.equals(bkClazz, clazz) - && supportBackupSize(); - } - + Class clazz = container.getClass(); + Class bkClazz = null; + if (xCreator.getBackupParent() != null) { + bkClazz = xCreator.getBackupParent().getClass(); + } + return ComparatorUtils.equals(bkClazz, clazz) + && supportBackupSize(); + } + /** * 是否支持用备份大小 + * * @return 否 */ public boolean supportBackupSize() { - return false; + return false; } /** * 有的控件在拖拽调整大小后需要根据自身内容重新计算下当前的尺寸是否合适,如果不合适,就需要重新fix一下 + * * @param creator 组件 */ public void fix(XCreator creator) { @@ -56,48 +59,52 @@ public abstract class AbstractLayoutAdapter implements LayoutAdapter { /** * 显示parent的字组件child,解决CardLayout中显示某个非显示组件的特殊情况 + * * @param child 组件 */ @Override public void showComponent(XCreator child) { - child.setVisible(true); + child.setVisible(true); } - + /** * 组件的ComponentAdapter在添加组件时,如果发现布局管理器不为空,会继而调用该布局管理器的 * addComp方法来完成组件的具体添加。在该方法内,布局管理器可以提供额外的功能。 + * * @param creator 被添加的新组件 - * @param x 添加的位置x,该位置是相对于container的 - * @param y 添加的位置y,该位置是相对于container的 + * @param x 添加的位置x,该位置是相对于container的 + * @param y 添加的位置y,该位置是相对于container的 * @return 是否添加成功,成功返回true,否则false */ @Override - public boolean addBean(XCreator creator, int x, int y) { - if (!accept(creator, x, y)) { - return false; - } - addComp(creator, x, y); - ((XWidgetCreator) creator).recalculateChildrenSize(); - return true; - } - + public boolean addBean(XCreator creator, int x, int y) { + if (!accept(creator, x, y)) { + return false; + } + addComp(creator, x, y); + ((XWidgetCreator) creator).recalculateChildrenSize(); + return true; + } + /** * 删除组件 - * @param creator 组件 - * @param initWidth 组件之前宽度 - * @param initHeight 组件之前高度 + * + * @param creator 组件 + * @param creatorWidth + * @param creatorHeight */ public void removeBean(XCreator creator, int creatorWidth, int creatorHeight) { - delete(creator, creatorWidth, creatorHeight); + delete(creator, creatorWidth, creatorHeight); } - + protected void delete(XCreator creator, int creatorWidth, int creatorHeight) { } - + protected abstract void addComp(XCreator creator, int x, int y); /** * 增加下一个组件 + * * @param dragged 组件 */ @Override @@ -108,8 +115,9 @@ public abstract class AbstractLayoutAdapter implements LayoutAdapter { /** * 目标控件位置插入组件 + * * @param target 目标 - * @param added 增加组件 + * @param added 增加组件 */ @Override public void addBefore(XCreator target, XCreator added) { @@ -126,8 +134,9 @@ public abstract class AbstractLayoutAdapter implements LayoutAdapter { /** * 插在目标组件后面 + * * @param target 目标 - * @param added 增加组件 + * @param added 增加组件 */ @Override public void addAfter(XCreator target, XCreator added) { @@ -147,14 +156,15 @@ public abstract class AbstractLayoutAdapter implements LayoutAdapter { LayoutUtils.layoutRootContainer(container); } - + @Override public HoverPainter getPainter() { return new NullPainter(container); } - + /** * 是否能接收更多的组件 + * * @return 能则返回true */ @Override @@ -171,4 +181,9 @@ public abstract class AbstractLayoutAdapter implements LayoutAdapter { public GroupModel getLayoutProperties() { return null; } + + + public XLayoutContainer getContainer() { + return this.container; + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java index 140204e75..58c07b045 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java @@ -17,338 +17,347 @@ import com.fr.general.ComparatorUtils; import com.fr.general.FRLogger; 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); - painter = new FRAbsoluteLayoutPainter(container); - initMinSize(); + painter = new FRAbsoluteLayoutPainter(container); + initMinSize(); } - private void initMinSize() { - XWAbsoluteLayout layout = (XWAbsoluteLayout) container; - minWidth = layout.getActualMinWidth(); - minHeight = layout.getActualMinHeight(); - actualVal = layout.getAcualInterval(); - margin = layout.toData().getMargin(); - } + private void initMinSize() { + XWAbsoluteLayout layout = (XWAbsoluteLayout) container; + minWidth = layout.getActualMinWidth(); + minHeight = layout.getActualMinHeight(); + actualVal = layout.getAcualInterval(); + margin = layout.toData().getMargin(); + } + + @Override + public HoverPainter getPainter() { + return painter; + } - @Override - public HoverPainter getPainter() { - return painter; - } - /** * 是否能在指定位置添加组件 + * * @param creator 组件 - * @param x 坐标x - * @param y 坐标y + * @param x 坐标x + * @param y 坐标y * @return 能则返回true */ - //这个地方的逻辑非常复杂, - // 1.当前绝对布局是不可编辑且是最外层,那么其他控件添加在它周围, - // 2.当前绝对布局是不可编辑且不是最外层,那么控件不可添加,(嵌套) - // 3.当前绝对布局可编辑,那么控件添加 + //这个地方的逻辑非常复杂, + // 1.当前绝对布局是不可编辑且是最外层,那么其他控件添加在它周围, + // 2.当前绝对布局是不可编辑且不是最外层,那么控件不可添加,(嵌套) + // 3.当前绝对布局可编辑,那么控件添加 @Override - public boolean accept(XCreator creator, int x, int y) { - Component comp = container.getComponentAt(x, y); - //布局控件要先判断是不是可编辑 - //可以编辑,按原有逻辑判断 - //不可编辑,当成一整个控件处理 - if (comp == null){ - return false; - } - //参数面板内的组件不允许拖往绝对布局中 - if (creator.getParent() != null && ((XCreator)creator.getParent()).acceptType(XWParameterLayout.class)){ - Rectangle rec = creator.getBounds(); - rec.y = creator.getParent().getHeight() - rec.height; - creator.setBounds(rec); - return false; - } - //判断下组件能不能拖入绝对布局 - if (!creator.canEnterIntoAbsolutePane()){ - return false; - } - XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer((XCreator)comp).getTopLayout(); - if(topLayout != null){ - if (topLayout.isEditable()){ - return topLayoutAccept(creator, x, y, topLayout); - } - //绝对布局嵌套,处于内层,不可编辑,不添加,topLayout只能获取到最外层可编辑的布局 - else if (((XLayoutContainer)topLayout.getParent()).acceptType(XWAbsoluteLayout.class)) { - return false; - } - else { - return acceptWidget(creator, x, y); - } - } - else{ - FRLogger.getLogger().error("top layout is null!"); - } - - return false; - } + public boolean accept(XCreator creator, int x, int y) { + Component comp = container.getComponentAt(x, y); + //布局控件要先判断是不是可编辑 + //可以编辑,按原有逻辑判断 + //不可编辑,当成一整个控件处理 + if (comp == null) { + return false; + } + //参数面板内的组件不允许拖往绝对布局中 + if (creator.getParent() != null && ((XCreator) creator.getParent()).acceptType(XWParameterLayout.class)) { + Rectangle rec = creator.getBounds(); + rec.y = creator.getParent().getHeight() - rec.height; + creator.setBounds(rec); + return false; + } + //判断组件能不能拖入绝对布局 + if (!creator.canEnterIntoAbsolutePane()) { + return false; + } + XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer((XCreator) comp).getTopLayout(); + if (topLayout != null) { + if (topLayout.isEditable()) { + return topLayoutAccept(creator, x, y, topLayout); + } + //绝对布局嵌套,处于内层,不可编辑,不添加,topLayout只能获取到最外层可编辑的布局 + else if (((XLayoutContainer) topLayout.getParent()).acceptType(XWAbsoluteLayout.class)) { + return false; + } else { + return acceptWidget(creator, x, y); + } + } else { + FRLogger.getLogger().error("top layout is null!"); + } - //toplayout假如可以编辑的话就往里面添加组件 - private boolean topLayoutAccept(XCreator creator, int x, int y, XLayoutContainer topLayout) { - //判断有没有和当前控件重叠 - //先计算当前控件的位置 - int creatorX, creatorY; - if (XCreatorUtils.getParentXLayoutContainer(creator) != null) { + return false; + } + //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); creatorX = creatorRectangle.x; creatorY = creatorRectangle.y; } else { + //这边计算得到的组件其实位置是正确的, + //因为传入的x和y已经加上了宽度或者高度的一半,再减去相同的宽度和高度的一半是没区别的, + // 例如高度为21,那么就是+10-10; + // 高度为20,那么就是+10-10; 没区别 int w = creator.getWidth() / 2; int h = creator.getHeight() / 2; creatorX = x - w; creatorY = y - h; } - //再判断和布局中其他控件重叠 - Rectangle curRec = new Rectangle(creatorX, creatorY, creator.getWidth(), creator.getHeight()); - WAbsoluteLayout wAbsoluteLayout = (WAbsoluteLayout)topLayout.toData(); - for (int i = 0, count = wAbsoluteLayout.getWidgetCount(); i < count; i++) { - BoundsWidget temp = (BoundsWidget) wAbsoluteLayout.getWidget(i); - Rectangle rectangle = temp.getBounds(); - if (curRec.intersects(rectangle)){ - return false; - } - } - if (creatorX < 0 || creatorX + creator.getWidth() > container.getWidth()) { + //frm 组件复用允许组件重叠 + //无须再判断和布局中其他控件重叠 + //Rectangle curRec = new Rectangle(creatorX, creatorY, creator.getWidth(), creator.getHeight()); + //WAbsoluteLayout wAbsoluteLayout = (WAbsoluteLayout) topLayout.toData(); + //for (int i = 0, count = wAbsoluteLayout.getWidgetCount(); i < count; i++) { + //BoundsWidget temp = (BoundsWidget) wAbsoluteLayout.getWidget(i); + //Rectangle rectangle = temp.getBounds(); + //if (curRec.intersects(rectangle)) { + //允许组件重叠 + //return false; + //} + //} + if (creatorX < 0 || creatorX + creator.getWidth() > container.getWidth()) { return false; } - if (creatorY < 0 || creatorY + creator.getHeight() > container.getHeight()){ + if (creatorY < 0 || creatorY + creator.getHeight() > container.getHeight()) { return false; } - return x >= 0 && y >= 0 && creator.getHeight() <= container.getHeight() + return x >= 0 && y >= 0 && creator.getHeight() <= container.getHeight() && creator.getWidth() <= container.getWidth(); - } + } - /** - * 判断是否鼠标在组件的三等分区域,如果组件在布局管理器中间,上下左右都可能会三等分 - * @param parentComp 鼠标所在区域的组件 - * @param x 坐标x - * @param y 坐标y - * @return 是则返回true - */ - public boolean isTrisectionArea(Component parentComp, int x, int y) { - XCreator creator = (XCreator)parentComp; - trisectAreaDirect = 0; - if (container.getComponentCount()<=1) { - return false; - } - int maxWidth = parentComp.getWidth(); - int maxHeight = parentComp.getHeight(); - int xL = parentComp.getX(); - int yL = parentComp.getY(); - // 组件宽高的十分之一和默认值取大 - int minRangeWidth = Math.max(maxWidth/BORDER_PROPORTION, DEFAULT_AREA_LENGTH); - int minRangeHeight = Math.max(maxHeight/BORDER_PROPORTION, DEFAULT_AREA_LENGTH); - if(yyL+maxHeight-minRangeHeight) { - // 在组件下侧三等分 - trisectAreaDirect = COMP_BOTTOM; - } else if (xxL+maxWidth-minRangeWidth) { - // 在组件右侧三等分 - trisectAreaDirect = COMP_RIGHT; - } - // tab布局的边界特殊处理,不进行三等分 - if(!creator.getTargetChildrenList().isEmpty()){ - return false; - } + /** + * 判断是否鼠标在组件的三等分区域,如果组件在布局管理器中间,上下左右都可能会三等分 + * + * @param parentComp 鼠标所在区域的组件 + * @param x 坐标x + * @param y 坐标y + * @return 是则返回true + */ + public boolean isTrisectionArea(Component parentComp, int x, int y) { + XCreator creator = (XCreator) parentComp; + trisectAreaDirect = 0; + if (container.getComponentCount() <= 1) { + return false; + } + int maxWidth = parentComp.getWidth(); + int maxHeight = parentComp.getHeight(); + int xL = parentComp.getX(); + int yL = parentComp.getY(); + // 组件宽高的十分之一和默认值取大 + int minRangeWidth = Math.max(maxWidth / BORDER_PROPORTION, DEFAULT_AREA_LENGTH); + int minRangeHeight = Math.max(maxHeight / BORDER_PROPORTION, DEFAULT_AREA_LENGTH); + if (y < yL + minRangeHeight) { + // 在组件上侧三等分 + trisectAreaDirect = COMP_TOP; + } else if (y > yL + maxHeight - minRangeHeight) { + // 在组件下侧三等分 + trisectAreaDirect = COMP_BOTTOM; + } else if (x < xL + minRangeWidth) { + // 在组件左侧三等分 + trisectAreaDirect = COMP_LEFT; + } else if (x > xL + maxWidth - minRangeWidth) { + // 在组件右侧三等分 + trisectAreaDirect = COMP_RIGHT; + } + // tab布局的边界特殊处理,不进行三等分 + if (!creator.getTargetChildrenList().isEmpty()) { + return false; + } - return !ComparatorUtils.equals(trisectAreaDirect, 0); - } + return !ComparatorUtils.equals(trisectAreaDirect, 0); + } - //当前绝对布局不可编辑,就当成一个控件,组件添加在周围 - private boolean acceptWidget(XCreator creator, int x, int y){ - isFindRelatedComps = false; - //拖入组件判断时,先判断是否为交叉点区域,其次三等分区域,再次平分区域 - Component comp = container.getComponentAt(x, y); - boolean isMatchEdge = false; - //如果当前处于边缘地带, 那么就把他贴到父容器上 - XLayoutContainer parent = container.findNearestFit(); - container = parent != null ? parent : container; - isAdd2ParentLayout = true; + //当前绝对布局不可编辑,就当成一个控件,组件添加在周围 + private boolean acceptWidget(XCreator creator, int x, int y) { + isFindRelatedComps = false; + //拖入组件判断时,先判断是否为交叉点区域,其次三等分区域,再次平分区域 + Component comp = container.getComponentAt(x, y); + boolean isMatchEdge = false; + //如果当前处于边缘地带, 那么就把他贴到父容器上 + XLayoutContainer parent = container.findNearestFit(); + container = parent != null ? parent : container; + isAdd2ParentLayout = true; - int componentHeight = comp.getHeight(); - int componentWidth = comp.getWidth(); - //上半部分高度 - int upHeight = (int) (componentHeight * TOP_HALF) + comp.getY(); - //下半部分高度 - int downHeight = (int) (componentHeight * BOTTOM_HALF) + comp.getY(); + int componentHeight = comp.getHeight(); + int componentWidth = comp.getWidth(); + //上半部分高度 + int upHeight = (int) (componentHeight * TOP_HALF) + comp.getY(); + //下半部分高度 + int downHeight = (int) (componentHeight * BOTTOM_HALF) + comp.getY(); - if (isCrossPointArea(comp, x, y)) { - return canAcceptWhileCrossPoint(comp, x, y); - } + if (isCrossPointArea(comp, x, y)) { + return canAcceptWhileCrossPoint(comp, x, y); + } - if (isTrisectionArea(comp, x, y)) { - return canAcceptWhileTrisection(comp, x, y); - } + if (isTrisectionArea(comp, x, y)) { + return canAcceptWhileTrisection(comp, x, y); + } - boolean horizonValid = componentWidth >= minWidth * 2 + actualVal; - boolean verticalValid = componentHeight >= minHeight * 2 + actualVal; - return y > upHeight && y < downHeight ? horizonValid : verticalValid; - } + boolean horizonValid = componentWidth >= minWidth * 2 + actualVal; + boolean verticalValid = componentHeight >= minHeight * 2 + actualVal; + return y > upHeight && y < downHeight ? horizonValid : verticalValid; + } - /** - * 组件的ComponentAdapter在添加组件时,如果发现布局管理器不为空,会继而调用该布局管理器的 - * addComp方法来完成组件的具体添加。在该方法内,布局管理器可以提供额外的功能。 - * - * @param creator 被添加的新组件 - * @param x 添加的位置x,该位置是相对于container的 - * @param y 添加的位置y,该位置是相对于container的 - * @return 是否添加成功,成功返回true,否则false - */ - @Override - public boolean addBean(XCreator creator, int x, int y) { - Rectangle rect = ComponentUtils.getRelativeBounds(container); + /** + * 组件的ComponentAdapter在添加组件时,如果发现布局管理器不为空,会继而调用该布局管理器的 + * addComp方法来完成组件的具体添加。在该方法内,布局管理器可以提供额外的功能。 + * + * @param creator 被添加的新组件 + * @param x 添加的位置x,该位置是相对于container的 + * @param y 添加的位置y,该位置是相对于container的 + * @return 是否添加成功,成功返回true,否则false + */ + @Override + public boolean addBean(XCreator creator, int x, int y) { + Rectangle rect = ComponentUtils.getRelativeBounds(container); - int posX = x + rect.x; - int posY = y + rect.y; - if (!accept(creator, x, y)) { - return false; - } - addComp(creator, posX, posY); - ((XWidgetCreator) creator).recalculateChildrenSize(); - return true; - } + int posX = x + rect.x; + int posY = y + rect.y; + if (!accept(creator, x, y)) { + return false; + } + addComp(creator, posX, posY); + ((XWidgetCreator) creator).recalculateChildrenSize(); + return true; + } - @Override - protected void addComp(XCreator creator, int x, int y) { - if(!isAdd2ParentLayout) { - Rectangle r = ComponentUtils.getRelativeBounds(container); - x = x - r.x; - y = y - r.y; - if (XCreatorUtils.getParentXLayoutContainer(creator) != null) { + @Override + protected void addComp(XCreator creator, int x, int y) { + if (!isAdd2ParentLayout) { + Rectangle r = ComponentUtils.getRelativeBounds(container); + x = x - r.x; + y = y - r.y; + if (XCreatorUtils.getParentXLayoutContainer(creator) != null) { - Rectangle creatorRectangle = ComponentUtils.getRelativeBounds(creator); - x = creatorRectangle.x - r.x; - y = creatorRectangle.y - r.y; - } else { - int w = creator.getWidth() / 2; - int h = creator.getHeight() / 2; - x = x - w; - y = y - h; - } - fix(creator, x, y); + Rectangle creatorRectangle = ComponentUtils.getRelativeBounds(creator); + x = creatorRectangle.x - r.x; + y = creatorRectangle.y - r.y; + } else { + int w = creator.getWidth() / 2; + int h = creator.getHeight() / 2; + x = x - w; + y = y - h; + } + fix(creator, x, y); - if (creator.hasTitleStyle()) { - addParentCreator(creator); - } else { - container.add(creator, creator.toData().getWidgetName()); - } - XWAbsoluteLayout layout = (XWAbsoluteLayout) container; - layout.updateBoundsWidget(creator); - updateCreatorBackBound(); - LayoutUtils.layoutRootContainer(container); - }else{ - fixAbsolute(creator, x, y); - if (creator.shouldScaleCreator() || creator.hasTitleStyle()) { - addParentCreator(creator); - } else { - container.add(creator, creator.toData().getWidgetName()); - } - XWFitLayout layout = (XWFitLayout) container; - // 更新对应的BoundsWidget - layout.updateBoundsWidget(); - updateCreatorBackBound(); - } - } + if (creator.hasTitleStyle()) { + addParentCreator(creator); + } else { + container.add(creator, creator.toData().getWidgetName()); + } + XWAbsoluteLayout layout = (XWAbsoluteLayout) container; + layout.updateBoundsWidget(creator); + updateCreatorBackBound(); + LayoutUtils.layoutRootContainer(container); + } else { + fixAbsolute(creator, x, y); + if (creator.shouldScaleCreator() || creator.hasTitleStyle()) { + addParentCreator(creator); + } else { + container.add(creator, creator.toData().getWidgetName()); + } + XWFitLayout layout = (XWFitLayout) container; + // 更新对应的BoundsWidget + layout.updateBoundsWidget(); + updateCreatorBackBound(); + } + } - private void updateCreatorBackBound() { - for (int i=0,size=container.getComponentCount(); i container.getWidth()) { - width = container.getWidth() - x; - } + public void fix(XCreator creator, int x, int y) { + int height = creator.getHeight(); + int width = creator.getWidth(); + if (x < 0) { + width += x; + x = 0; + } else if (x + creator.getWidth() > container.getWidth()) { + width = container.getWidth() - x; + } - if (y < 0) { - height += y; - y = 0; - } else if (y + creator.getHeight() > container.getHeight()) { - height = container.getHeight() - y; - } + if (y < 0) { + height += y; + y = 0; + } else if (y + creator.getHeight() > container.getHeight()) { + height = container.getHeight() - y; + } - creator.setBounds(x, y, width, height); + creator.setBounds(x, y, width, height); } @Override public ConstraintsGroupModel getLayoutConstraints(XCreator creator) { - return new BoundsGroupModel((XWAbsoluteLayout)container, creator); + return new BoundsGroupModel((XWAbsoluteLayout) container, creator); } - @Override - public GroupModel getLayoutProperties() { - XWAbsoluteLayout xwAbsoluteLayout = (XWAbsoluteLayout) container; - return new FRAbsoluteLayoutPropertiesGroupModel(xwAbsoluteLayout); - } + @Override + public GroupModel getLayoutProperties() { + XWAbsoluteLayout xwAbsoluteLayout = (XWAbsoluteLayout) container; + return new FRAbsoluteLayoutPropertiesGroupModel(xwAbsoluteLayout); + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java b/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java index a2a57c4ff..161fe6bd5 100644 --- a/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java +++ b/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java @@ -69,7 +69,7 @@ public abstract class AccessDirection implements Direction { boolean findInY = current_bounds.getHeight() <= MoveUtils.SORPTION_UNIT ? true : false; WAbsoluteLayout layout =getLayout(designer); FormSelection selection = designer.getSelectionModel().getSelection(); - boolean isWidgetsIntersect = false; +// boolean isWidgetsIntersect = false; for (int i = 0, count = layout.getWidgetCount(); i < count; i++) { BoundsWidget temp = (BoundsWidget) layout.getWidget(i); if (!temp.isVisible() || selection.contains(temp.getWidget())) { @@ -105,13 +105,13 @@ public abstract class AccessDirection implements Direction { break; } - if (current_bounds.intersects(bounds) && !(layout instanceof WParameterLayout)){ - isWidgetsIntersect = true; - } - } - processRectangleIntersects(designer, point.x, point.y, isWidgetsIntersect); - setDesignerStateModelProperties(designer, findInX, findInY, current_bounds, point); - } +// if (current_bounds.intersects(bounds) && !(layout instanceof WParameterLayout)) { +// isWidgetsIntersect = true; +// } + } +// 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); @@ -131,18 +131,18 @@ public abstract class AccessDirection implements Direction { 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 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( diff --git a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java index 834b28d74..75bacfff5 100644 --- a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java +++ b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java @@ -11,11 +11,7 @@ import com.fr.design.designer.beans.LayoutAdapter; import com.fr.design.designer.beans.events.DesignerEvent; import com.fr.design.designer.beans.location.Direction; import com.fr.design.designer.beans.location.Location; -import com.fr.design.designer.creator.XCreator; -import com.fr.design.designer.creator.XCreatorUtils; -import com.fr.design.designer.creator.XLayoutContainer; -import com.fr.design.designer.creator.XWFitLayout; -import com.fr.design.designer.creator.XWParameterLayout; +import com.fr.design.designer.creator.*; import com.fr.design.form.util.XCreatorConstants; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.FormSelection; @@ -27,302 +23,342 @@ import com.fr.stable.ArrayUtils; * 该model保存当前选择的组件和剪切版信息 */ public class SelectionModel { + //被粘贴组件在所选组件位置处往下、往右各错开20像素。执行多次粘贴时,在上一次粘贴的位置处错开20像素。 private static final int DELTA_X_Y = 20; //粘贴时候的偏移距离 - private static FormSelection CLIP_BOARD = new FormSelection(); - private FormDesigner designer; - private FormSelection selection; - private Rectangle hotspot_bounds; + private static FormSelection CLIP_BOARD = new FormSelection(); + private FormDesigner designer; + private FormSelection selection; + private Rectangle hotspot_bounds; - public SelectionModel(FormDesigner designer) { - this.designer = designer; - selection = new FormSelection(); - } + public SelectionModel(FormDesigner designer) { + this.designer = designer; + selection = new FormSelection(); + } - /** - * 重置。清空formSelction以及选择区域 - */ - public void reset() { - selection.reset(); - hotspot_bounds = null; - } - - /** - * formSelction是否为空 - * @return 是否为空 - */ - public static boolean isEmpty(){ - return CLIP_BOARD.isEmpty(); - } + /** + * 重置。清空formSelction以及选择区域 + */ + public void reset() { + selection.reset(); + hotspot_bounds = null; + } - /** - * 鼠标点击一下,所选中的单个组件。按下Ctrl或者shift键时鼠标可以进行多选 - * @param e 鼠标事件 - */ - public void selectACreatorAtMouseEvent(MouseEvent e) { - if (!e.isControlDown() && !e.isShiftDown()) { - // 如果Ctrl或者Shift键盘没有按下,则清除已经选择的组件 - selection.reset(); - } + /** + * formSelction是否为空 + * + * @return 是否为空 + */ + public static boolean isEmpty() { + return CLIP_BOARD.isEmpty(); + } - // 获取e所在的组件 - XCreator comp = designer.getComponentAt(e); + /** + * 鼠标点击一下,所选中的单个组件。按下Ctrl或者shift键时鼠标可以进行多选 + * + * @param e 鼠标事件 + */ + public void selectACreatorAtMouseEvent(MouseEvent e) { + if (!e.isControlDown() && !e.isShiftDown()) { + // 如果Ctrl或者Shift键盘没有按下,则清除已经选择的组件 + selection.reset(); + } - //布局组件的顶层布局如不可编辑,要获取其顶层布局 - XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer(comp).getTopLayout(); - if(topLayout != null && !topLayout.isEditable()){ - comp = topLayout; - } + // 获取e所在的组件 + XCreator comp = designer.getComponentAt(e); - // 如果父层是scale和title两个专属容器,返回其父层,组件本身是不让被选中的 - if (comp != designer.getRootComponent() && comp != designer.getParaComponent()) { - XCreator parentContainer = (XCreator) comp.getParent(); - comp = parentContainer.isDedicateContainer() ? parentContainer : comp; - } - if (selection.removeSelectedCreator(comp) || selection.addSelectedCreator(comp)) { - designer.getEditListenerTable().fireCreatorModified(comp, DesignerEvent.CREATOR_SELECTED); - designer.repaint(); - } - } + //布局组件的顶层布局如不可编辑,要获取其顶层布局 + XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer(comp).getTopLayout(); + if (topLayout != null && !topLayout.isEditable()) { + comp = topLayout; + } - /** - * 将所选组件剪切到剪切板上 - */ - public void cutSelectedCreator2ClipBoard() { - if (hasSelectionComponent()) { - selection.cut2ClipBoard(CLIP_BOARD); - designer.getEditListenerTable().fireCreatorModified(DesignerEvent.CREATOR_CUTED); - designer.repaint(); - } - } + // 如果父层是scale和title两个专属容器,返回其父层,组件本身是不让被选中的 + if (comp != designer.getRootComponent() && comp != designer.getParaComponent()) { + XCreator parentContainer = (XCreator) comp.getParent(); + comp = parentContainer.isDedicateContainer() ? parentContainer : comp; + } + if (selection.removeSelectedCreator(comp) || selection.addSelectedCreator(comp)) { + designer.getEditListenerTable().fireCreatorModified(comp, DesignerEvent.CREATOR_SELECTED); + designer.repaint(); + } + } - /** - * 复制当前选中的组件到剪切板 - */ - public void copySelectedCreator2ClipBoard() { - if (!selection.isEmpty()) { - selection.copy2ClipBoard(CLIP_BOARD); - } - } + /** + * 将所选组件剪切到剪切板上 + */ + public void cutSelectedCreator2ClipBoard() { + if (hasSelectionComponent()) { + selection.cut2ClipBoard(CLIP_BOARD); + designer.getEditListenerTable().fireCreatorModified(DesignerEvent.CREATOR_CUTED); + designer.repaint(); + } + } - /** - * 从剪切板粘帖组件 - * @return 否 - */ - public boolean pasteFromClipBoard() { - if (!CLIP_BOARD.isEmpty()) { - XLayoutContainer parent = null; - if (!hasSelectionComponent()) { - FormSelectionUtils.paste2Container(designer, designer.getRootComponent(),CLIP_BOARD, DELTA_X_Y, DELTA_X_Y); - } else { - parent = XCreatorUtils.getParentXLayoutContainer(selection.getSelectedCreator()); - if (parent != null) { - Rectangle rec = selection.getSelctionBounds(); - FormSelectionUtils.paste2Container(designer, parent,CLIP_BOARD, rec.x + DELTA_X_Y, rec.y + DELTA_X_Y); - } - } - } else { - Toolkit.getDefaultToolkit().beep(); - } - return false; - } + /** + * 复制当前选中的组件到剪切板 + */ + public void copySelectedCreator2ClipBoard() { + if (!selection.isEmpty()) { + selection.copy2ClipBoard(CLIP_BOARD); + } + } - public FormSelection getSelection() { - return selection; - } + /** + * 从剪切板粘帖组件 + * + * @return 否 + */ + public boolean pasteFromClipBoard() { + if (!CLIP_BOARD.isEmpty()) { + XLayoutContainer parent = null; + if (!hasSelectionComponent()) { + if (designer.getClass().equals(FormDesigner.class)) { + //编辑器外面还有两层容器,使用designer.getRootComponent()获取到的是编辑器中层的容器,不是编辑器表层 + //当前选择的就是编辑器表层 + FormSelectionUtils.paste2Container(designer, (XLayoutContainer) selection.getSelectedCreator(), + CLIP_BOARD, + DELTA_X_Y, + DELTA_X_Y); + } else { + //cpt本地组件复用,编辑器就一层,是最底层,使用designer.getRootComponent()就可以获取到 + //使用selection.getSelectedCreator()也应该是可以获取到的。 + FormSelectionUtils.paste2Container(designer, designer.getRootComponent(), + CLIP_BOARD, + DELTA_X_Y, + DELTA_X_Y); + } + } else { + //获取到编辑器的表层容器(已选的组件的父容器就是表层容器) + parent = XCreatorUtils.getParentXLayoutContainer(selection.getSelectedCreator()); + if (parent != null) { + Rectangle rec = selection.getSelctionBounds(); + FormSelectionUtils.paste2Container(designer, parent, CLIP_BOARD, rec.x + DELTA_X_Y, rec.y + DELTA_X_Y); + } + } + } else { + Toolkit.getDefaultToolkit().beep(); + } + return false; + } + + public FormSelection getSelection() { + return selection; + } - /** - * 删除当前所有选择的组件 - */ - public void deleteSelection() { - XCreator[] roots = selection.getSelectedCreators(); + /** + * 删除当前所有选择的组件 + */ + public void deleteSelection() { + XCreator[] roots = selection.getSelectedCreators(); - if (roots.length > 0) { - for (XCreator creator : roots) { - if(creator.acceptType(XWParameterLayout.class)){ + if (roots.length > 0) { + for (XCreator creator : roots) { + if (creator.acceptType(XWParameterLayout.class)) { designer.removeParaComponent(); } - - removeCreatorFromContainer(creator, creator.getWidth(), creator.getHeight()); - creator.removeAll(); - // 清除被选中的组件 + + removeCreatorFromContainer(creator, creator.getWidth(), creator.getHeight()); + creator.removeAll(); + // 清除被选中的组件 selection.reset(); - } + } setSelectedCreator(designer.getRootComponent()); - // 触发事件 - designer.getEditListenerTable().fireCreatorModified(DesignerEvent.CREATOR_DELETED); - designer.repaint(); - } - } + // 触发事件 + designer.getEditListenerTable().fireCreatorModified(DesignerEvent.CREATOR_DELETED); + designer.repaint(); + } + } - /** - * 从选择组件中删除某组件 - * - * @param creator 组件 - * @param creatorWidth 组件之前宽度 - * @param creatorHeight 组件之前高度 - */ - public void removeCreator(XCreator creator, int creatorWidth, int creatorHeight) { - selection.removeCreator(creator); - removeCreatorFromContainer(creator, creatorWidth, creatorHeight); - designer.repaint(); - } + /** + * 从选择组件中删除某组件 + * + * @param creator 组件 + * @param creatorWidth 组件之前宽度 + * @param creatorHeight 组件之前高度 + */ + public void removeCreator(XCreator creator, int creatorWidth, int creatorHeight) { + selection.removeCreator(creator); + removeCreatorFromContainer(creator, creatorWidth, creatorHeight); + designer.repaint(); + } - /** - * 设置选择区域 - */ - public void setHotspotBounds(Rectangle rect) { - hotspot_bounds = rect; - } + /** + * 设置选择区域 + */ + public void setHotspotBounds(Rectangle rect) { + hotspot_bounds = rect; + } - /** - * 获得当前选择区域 - */ - public Rectangle getHotspotBounds() { - return hotspot_bounds; - } + /** + * 获得当前选择区域 + */ + public Rectangle getHotspotBounds() { + return hotspot_bounds; + } - private void removeCreatorFromContainer(XCreator creator, int creatorWidth, int creatorHeight) { - XLayoutContainer parent = XCreatorUtils.getParentXLayoutContainer(creator); - if (parent == null) { - return; - } - boolean changeCreator = creator.shouldScaleCreator() || creator.hasTitleStyle(); - if (parent.acceptType(XWFitLayout.class) && changeCreator) { - creator = (XCreator) creator.getParent(); - } - parent.getLayoutAdapter().removeBean(creator, creatorWidth, creatorHeight); - // 删除其根组件,同时就删除了同时被选择的叶子组件 - parent.remove(creator); - LayoutManager layout = parent.getLayout(); + private void removeCreatorFromContainer(XCreator creator, int creatorWidth, int creatorHeight) { + XLayoutContainer parent = XCreatorUtils.getParentXLayoutContainer(creator); + if (parent == null) { + return; + } + boolean changeCreator = creator.shouldScaleCreator() || creator.hasTitleStyle(); + if (parent.acceptType(XWFitLayout.class) && changeCreator) { + creator = (XCreator) creator.getParent(); + } + parent.getLayoutAdapter().removeBean(creator, creatorWidth, creatorHeight); + // 删除其根组件,同时就删除了同时被选择的叶子组件 + parent.remove(creator); + LayoutManager layout = parent.getLayout(); - if (layout != null) { - // 刷新组件容器的布局 - LayoutUtils.layoutContainer(parent); - } - } + if (layout != null) { + // 刷新组件容器的布局 + LayoutUtils.layoutContainer(parent); + } + } - /** - * 是否有组件被选择。如果所选组件是最底层容器,也视为无选择 - * @return 是则返回true - */ - public boolean hasSelectionComponent() { - return !selection.isEmpty() && selection.getSelectedCreator().getParent() != null; - } + /** + * 是否有组件被选择。如果所选组件是最底层容器,也视为无选择 + * + * @return 是则返回true + * yaoh.wu 不应该通过判断是否是最底层容器来判断是否选择了组件 + * 而是应该判断选择的容器是否是编辑器的最表层容器,也就是点击空白地方选择的容器 + * 但是直接判断选择的容器是否是编辑器最表层类型又会引发拖动时选不上的情况, + * 因此通过判断父容器来实现 + *

+ * 举例:frm组件复用 绝对布局情况下,不选择时有三层容器: + * 底层@see {@link com.fr.design.designer.creator.XWBorderLayout} + * 中层@see {@link XWFitLayout} + * 表层@see {@link com.fr.design.designer.creator.XWAbsoluteBodyLayout} + *

+ * 但是编辑窗口的最外层其实是表层@see {@link com.fr.design.designer.creator.XWAbsoluteBodyLayout}, + * 其他两层不是靠添加组件就可以编辑的。 + */ + public boolean hasSelectionComponent() { + if (designer.getClass().equals(FormDesigner.class)) { + //frm组件复用选择 + return selection.getSelectedCreator() != null && !(selection.getSelectedCreator().getParent() instanceof + XWFitLayout); + } else { + //cpt本地组件复用 + return selection.getSelectedCreator() != null && selection.getSelectedCreator().getParent() != null; + } + } - /** - * 移动组件至指定位置 - * @param x 坐标x - * @param y 坐标y - */ - public void move(int x, int y) { - for (XCreator creator : selection.getSelectedCreators()) { - creator.setLocation(creator.getX() + x, creator.getY() + y); - LayoutAdapter layoutAdapter = AdapterBus.searchLayoutAdapter(designer, creator); - if (layoutAdapter != null) { - layoutAdapter.fix(creator); - } - } - designer.getEditListenerTable().fireCreatorModified(selection.getSelectedCreator(), - DesignerEvent.CREATOR_SELECTED); - } + /** + * 移动组件至指定位置 + * + * @param x 坐标x + * @param y 坐标y + */ + public void move(int x, int y) { + for (XCreator creator : selection.getSelectedCreators()) { + creator.setLocation(creator.getX() + x, creator.getY() + y); + LayoutAdapter layoutAdapter = AdapterBus.searchLayoutAdapter(designer, creator); + if (layoutAdapter != null) { + layoutAdapter.fix(creator); + } + } + designer.getEditListenerTable().fireCreatorModified(selection.getSelectedCreator(), + DesignerEvent.CREATOR_SELECTED); + } - /** - * 释放捕获 - */ - public void releaseDragging() { - designer.setPainter(null); - selection.fixCreator(designer); - designer.getEditListenerTable().fireCreatorModified(selection.getSelectedCreator(), - DesignerEvent.CREATOR_RESIZED); - } + /** + * 释放捕获 + */ + public void releaseDragging() { + designer.setPainter(null); + selection.fixCreator(designer); + designer.getEditListenerTable().fireCreatorModified(selection.getSelectedCreator(), + DesignerEvent.CREATOR_RESIZED); + } - public Direction getDirectionAt(MouseEvent e) { - Direction dir; - if (e.isControlDown() || e.isShiftDown()) { - XCreator creator = designer.getComponentAt(e.getX(), e.getY(), selection.getSelectedCreators()); - if (creator != designer.getRootComponent() && selection.addedable(creator)) { - return Location.add; - } - } - if (hasSelectionComponent()) { - int x = e.getX() + designer.getArea().getHorizontalValue(); - int y = e.getY() + designer.getArea().getVerticalValue(); - dir = getDirection(selection.getRelativeBounds(), x, y); - if (selection.size() == 1) { - if (!ArrayUtils.contains(selection.getSelectedCreator().getDirections(), dir.getActual())) { - dir = Location.outer; - } - } - } else { - dir = Location.outer; - } + public Direction getDirectionAt(MouseEvent e) { + Direction dir; + if (e.isControlDown() || e.isShiftDown()) { + XCreator creator = designer.getComponentAt(e.getX(), e.getY(), selection.getSelectedCreators()); + if (creator != designer.getRootComponent() && selection.addedable(creator)) { + return Location.add; + } + } + if (hasSelectionComponent()) { + int x = e.getX() + designer.getArea().getHorizontalValue(); + int y = e.getY() + designer.getArea().getVerticalValue(); + dir = getDirection(selection.getRelativeBounds(), x, y); + if (selection.size() == 1) { + if (!ArrayUtils.contains(selection.getSelectedCreator().getDirections(), dir.getActual())) { + dir = Location.outer; + } + } + } else { + dir = Location.outer; + } - if (designer.getDesignerMode().isFormParameterEditor() && dir == Location.outer) { - dir = designer.getLoc2Root(e); - } - return dir; - } + if (designer.getDesignerMode().isFormParameterEditor() && dir == Location.outer) { + dir = designer.getLoc2Root(e); + } + return dir; + } - private Direction getDirection(Rectangle bounds, int x, int y) { - if (x < (bounds.x - XCreatorConstants.RESIZE_BOX_SIZ)) { - return Location.outer; - } else if ((x >= (bounds.x - XCreatorConstants.RESIZE_BOX_SIZ)) && (x <= bounds.x)) { - if (y < (bounds.y - XCreatorConstants.RESIZE_BOX_SIZ)) { - return Location.outer; - } else if ((y >= (bounds.y - XCreatorConstants.RESIZE_BOX_SIZ)) && (y <= bounds.y)) { - return Location.left_top; - } else if ((y > bounds.y) && (y < (bounds.y + bounds.height))) { - return Location.left; - } else if ((y >= (bounds.y + bounds.height)) - && (y <= (bounds.y + bounds.height + XCreatorConstants.RESIZE_BOX_SIZ))) { - return Location.left_bottom; - } else { - return Location.outer; - } - } else if ((x > bounds.x) && (x < (bounds.x + bounds.width))) { - if (y < (bounds.y - XCreatorConstants.RESIZE_BOX_SIZ)) { - return Location.outer; - } else if ((y >= (bounds.y - XCreatorConstants.RESIZE_BOX_SIZ)) && (y <= bounds.y)) { - return Location.top; - } else if ((y > bounds.y) && (y < (bounds.y + bounds.height))) { - return Location.inner; - } else if ((y >= (bounds.y + bounds.height)) - && (y <= (bounds.y + bounds.height + XCreatorConstants.RESIZE_BOX_SIZ))) { - return Location.bottom; - } else { - return Location.outer; - } - } else if ((x >= (bounds.x + bounds.width)) - && (x <= (bounds.x + bounds.width + XCreatorConstants.RESIZE_BOX_SIZ))) { - if (y < (bounds.y - XCreatorConstants.RESIZE_BOX_SIZ)) { - return Location.outer; - } else if ((y >= (bounds.y - XCreatorConstants.RESIZE_BOX_SIZ)) && (y <= bounds.y)) { - return Location.right_top; - } else if ((y > bounds.y) && (y < (bounds.y + bounds.height))) { - return Location.right; - } else if ((y >= (bounds.y + bounds.height)) - && (y <= (bounds.y + bounds.height + XCreatorConstants.RESIZE_BOX_SIZ))) { - return Location.right_bottom; - } else { - return Location.outer; - } - } else { - return Location.outer; - } - } + private Direction getDirection(Rectangle bounds, int x, int y) { + if (x < (bounds.x - XCreatorConstants.RESIZE_BOX_SIZ)) { + return Location.outer; + } else if ((x >= (bounds.x - XCreatorConstants.RESIZE_BOX_SIZ)) && (x <= bounds.x)) { + if (y < (bounds.y - XCreatorConstants.RESIZE_BOX_SIZ)) { + return Location.outer; + } else if ((y >= (bounds.y - XCreatorConstants.RESIZE_BOX_SIZ)) && (y <= bounds.y)) { + return Location.left_top; + } else if ((y > bounds.y) && (y < (bounds.y + bounds.height))) { + return Location.left; + } else if ((y >= (bounds.y + bounds.height)) + && (y <= (bounds.y + bounds.height + XCreatorConstants.RESIZE_BOX_SIZ))) { + return Location.left_bottom; + } else { + return Location.outer; + } + } else if ((x > bounds.x) && (x < (bounds.x + bounds.width))) { + if (y < (bounds.y - XCreatorConstants.RESIZE_BOX_SIZ)) { + return Location.outer; + } else if ((y >= (bounds.y - XCreatorConstants.RESIZE_BOX_SIZ)) && (y <= bounds.y)) { + return Location.top; + } else if ((y > bounds.y) && (y < (bounds.y + bounds.height))) { + return Location.inner; + } else if ((y >= (bounds.y + bounds.height)) + && (y <= (bounds.y + bounds.height + XCreatorConstants.RESIZE_BOX_SIZ))) { + return Location.bottom; + } else { + return Location.outer; + } + } else if ((x >= (bounds.x + bounds.width)) + && (x <= (bounds.x + bounds.width + XCreatorConstants.RESIZE_BOX_SIZ))) { + if (y < (bounds.y - XCreatorConstants.RESIZE_BOX_SIZ)) { + return Location.outer; + } else if ((y >= (bounds.y - XCreatorConstants.RESIZE_BOX_SIZ)) && (y <= bounds.y)) { + return Location.right_top; + } else if ((y > bounds.y) && (y < (bounds.y + bounds.height))) { + return Location.right; + } else if ((y >= (bounds.y + bounds.height)) + && (y <= (bounds.y + bounds.height + XCreatorConstants.RESIZE_BOX_SIZ))) { + return Location.right_bottom; + } else { + return Location.outer; + } + } else { + return Location.outer; + } + } - private void fireCreatorSelected() { - designer.getEditListenerTable().fireCreatorModified(selection.getSelectedCreator(), - DesignerEvent.CREATOR_SELECTED); - } + private void fireCreatorSelected() { + designer.getEditListenerTable().fireCreatorModified(selection.getSelectedCreator(), + DesignerEvent.CREATOR_SELECTED); + } - public void setSelectedCreator(XCreator rootComponent) { - selection.setSelectedCreator(rootComponent); - fireCreatorSelected(); - } + public void setSelectedCreator(XCreator rootComponent) { + selection.setSelectedCreator(rootComponent); + fireCreatorSelected(); + } - public void setSelectedCreators(ArrayList rebuildSelection) { - selection.setSelectedCreators(rebuildSelection); - fireCreatorSelected(); - } + public void setSelectedCreators(ArrayList rebuildSelection) { + selection.setSelectedCreators(rebuildSelection); + fireCreatorSelected(); + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/form/parameter/FormParaDesigner.java b/designer_form/src/com/fr/design/form/parameter/FormParaDesigner.java index 692359bbd..1c6150d36 100644 --- a/designer_form/src/com/fr/design/form/parameter/FormParaDesigner.java +++ b/designer_form/src/com/fr/design/form/parameter/FormParaDesigner.java @@ -71,619 +71,631 @@ import com.fr.stable.ArrayUtils; */ // TODO ALEX_SEP FormDesigner和FormParaDesignEditor应该共用Form的编辑,但是FormParaDesignEditor不应该直接就是FormDesigner public class FormParaDesigner extends FormDesigner implements ParameterDesignerProvider { - private static final int NUM_IN_A_LINE = 4; - private static final int H_COMPONENT_GAP = 165; - private static final int V_COMPONENT_GAP = 25; - private static final int FIRST_V_LOCATION = 35; - private static final int FIRST_H_LOCATION = 90; - private static final int SECOND_H_LOCATION = 170; - private static final int ADD_HEIGHT = 20; - private static final int H_GAP = 105; - - private static Image paraImage = BaseUtils.readImage("/com/fr/design/images/form/parameter.png"); - - public FormParaDesigner() { - this(new FormParameterUI()); - } - - public FormParaDesigner(FormParameterUI ui) { - super(gen(ui)); - } - - private static Form gen(Form form) { - WLayout container = form.getContainer(); - if (container == null) { - container = new WParameterLayout(); - } - container.setWidgetName("para"); - form.setContainer(container); - return form; - } - - protected FormDesignerModeForSpecial createFormDesignerTargetMode() { - return new FormParaTargetMode(this); - } - - /** - * 开始编辑参数面板的时候进行的初始化 - */ - public void initBeforeUpEdit() { - WidgetToolBarPane.getInstance(this); - EastRegionContainerPane.getInstance().replaceDownPane( - FormWidgetDetailPane.getInstance(this)); - if (!BaseUtils.isAuthorityEditing()) { - EastRegionContainerPane.getInstance().addParameterPane(ParameterPropertyPane.getInstance(this)); - EastRegionContainerPane.getInstance().setParameterHeight(ParameterPropertyPane.getInstance(this).getPreferredSize().height); - EastRegionContainerPane.getInstance().replaceUpPane( - WidgetPropertyPane.getInstance(this)); - } else { - EastRegionContainerPane.getInstance().removeParameterPane(); - showAuthorityEditPane(); - } - - } - - /** - * 创建权限编辑面板 - * @return 面板 - */ - public AuthorityEditPane createAuthorityEditPane() { - return new FormWidgetAuthorityEditPane(this); - } - - /** - * 内容属性表面板 - * @return 内容属性表面板 - */ - public JPanel getEastUpPane() { - return WidgetPropertyPane.getInstance(this); - } - - /** - * 参数属性表 - * @return 参数属性表 - */ - - public JPanel getEastDownPane() { - return FormWidgetDetailPane.getInstance(this); - } - - /** - * 权限编辑面板 - * @return 权限编辑面板 - */ - public AuthorityEditPane getAuthorityEditPane() { - FormWidgetAuthorityEditPane formWidgetAuthorityEditPane = new FormWidgetAuthorityEditPane(this); - formWidgetAuthorityEditPane.populateDetials(); - return formWidgetAuthorityEditPane; - } - - /** - * 给包含此FormParaDesigner的ParameterDefinitePane添加事件 - * - * @param paraDefinitePane 面板 - */ - public void addListener(final ParaDefinitePane paraDefinitePane) { - this.getEditListenerTable().addListener(new DesignerEditListener() { - - @Override - public void fireCreatorModified(DesignerEvent evt) { - if (evt.getCreatorEventID() == DesignerEvent.CREATOR_ADDED - || evt.getCreatorEventID() == DesignerEvent.CREATOR_CUTED - || evt.getCreatorEventID() == DesignerEvent.CREATOR_PASTED - || evt.getCreatorEventID() == DesignerEvent.CREATOR_DELETED - || evt.getCreatorEventID() == DesignerEvent.CREATOR_EDITED - || evt.getCreatorEventID() == DesignerEvent.CREATOR_RENAMED) { - paraDefinitePane.setParameterArray( - paraDefinitePane.getNoRepeatParas(DesignModelAdapter.getCurrentModelAdapter().getParameters())); - paraDefinitePane.refreshParameter(); - } - } - }); - } - - /** - * 包裹一层FormArea - * - * @return 区域 - */ - public Component createWrapper() { - FormArea area = new FormArea(this, false); - area.setBorder(BorderFactory.createEmptyBorder(0, 13, 0, 0)); - return area; - } - - /** - * 刷新控件 - */ - public void refreshAllNameWidgets() { - XCreatorUtils.refreshAllNameWidgets(this.getRootComponent()); - } - - /** - * 刷新tableData - * - * @param oldName 旧名称 - * @param newName 新名称 - */ - public void refresh4TableData(String oldName, String newName) { - this.getTarget().renameTableData(oldName, newName); - this.getEditListenerTable().fireCreatorModified(DesignerEvent.CREATOR_SELECTED); - } - - /** - * 刷新参数 - * - * @param p 参数面板 - */ - public void refreshParameter(ParaDefinitePane p) { - XLayoutContainer rootContainer = this.getRootComponent(); - java.util.List namelist = getAllXCreatorNameList(rootContainer); - // parameterArray是报表的所有参数, nameList是已经在参数面板添加过控件的参数名 - // 与已有的参数列表比较 如果已经存在 就除去 - Parameter[] ps = p.getParameterArray(); - if (ps != null) { - for (Parameter parameter : ps) { - for (String name : namelist) { - if (name.equalsIgnoreCase(parameter.getName())) { - p.setParameterArray((Parameter[]) ArrayUtils.removeElement(p.getParameterArray(), parameter)); - } - } - } - } - ParameterPropertyPane.getInstance().getParameterToolbarPane().populateBean( - p.getParameterArray() == null ? new Parameter[0] : p.getParameterArray()); - EastRegionContainerPane.getInstance().setParameterHeight(ParameterPropertyPane.getInstance().getPreferredSize().height); - - } - - /** - * 判断这个参数面板是否没有控件 - * - * @return 参数面板是否没有控件 - */ - public boolean isBlank() { - XLayoutContainer rootContainer = this.getRootComponent(); - List xx = getAllXCreatorNameList(rootContainer); - return xx.isEmpty(); - } - - protected void setToolbarButtons(boolean flag) { - DesignerContext.getDesignerFrame().checkCombineUp(!flag, NAME_ARRAY_LIST); - } - - /** - * 看看参数面板中的控件是否有和模板参数同名的 - * - * @param allParameters 参数 - * @return 是否有同名 - */ - public boolean isWithoutParaXCreator(Parameter[] allParameters) { - XLayoutContainer rootContainer = this.getRootComponent(); - List xx = getAllXCreatorNameList(rootContainer); - for (Parameter parameter : allParameters) { - for (String name : xx) { - if (name.equalsIgnoreCase(parameter.getName())) { - return false; - } - } - } - - return true; - } - - /** - * 参数面板控件的名字 - * - * @return 名字 - */ - public List getAllXCreatorNameList() { - XLayoutContainer rootContainer = this.getRootComponent(); - List namelist = new ArrayList(); - for (int i = 0; i < rootContainer.getXCreatorCount(); i++) { - if (rootContainer.getXCreator(i) instanceof XLayoutContainer) { - namelist.addAll(getAllXCreatorNameList((XLayoutContainer) rootContainer.getXCreator(i))); - } else { - namelist.add(rootContainer.getXCreator(i).toData().getWidgetName()); - } - } - return namelist; - } - - private List getAllXCreatorNameList(XLayoutContainer rootContainer) { - List namelist = new ArrayList(); - for (int i = 0; i < rootContainer.getXCreatorCount(); i++) { - if (rootContainer.getXCreator(i) instanceof XLayoutContainer) { - namelist.addAll(getAllXCreatorNameList((XLayoutContainer) rootContainer.getXCreator(i))); - } else { - namelist.add(rootContainer.getXCreator(i).toData().getWidgetName()); - } - } - return namelist; - } - - /** - * 是否有查询按钮 - * - * @return 有无查询按钮 - */ - public boolean isWithQueryButton() { - XLayoutContainer rootContainer = this.getRootComponent(); - return SearchQueryCreators(rootContainer); - } - - /** - * 返回复制粘贴删除等动作 - * @return 同上 - */ - public Action[] getActions() { - if (designer_actions == null) { - designer_actions = new Action[]{new CutAction(this), new CopyAction(this), new PasteAction(this), - new FormDeleteAction(this)}; - } - return designer_actions; - } - - private boolean SearchQueryCreators(XLayoutContainer rootContainer) { - boolean b = false; - for (int i = 0; i < rootContainer.getXCreatorCount(); i++) { - if (rootContainer.getXCreator(i) instanceof XLayoutContainer) { - b = SearchQueryCreators((XLayoutContainer) rootContainer.getXCreator(i)); - } else if (rootContainer.getXCreator(i) instanceof XFormSubmit) { - b = true; - } - } - return b; - } - - /** - * 就是getTarget 为了返回ParameterUI接口而不冲突另写个 - * - * @return - */ - public ParameterUI getParaTarget() { - return (FormParameterUI) super.getTarget(); - } - - /** - * ParameterDefinitePane通过ParaDesigner来调用ParameterPropertyPane - * - * @param p 面板 - */ - public void populateParameterPropertyPane(ParaDefinitePane p) { - ParameterPropertyPane.getInstance().populateBean(p); - } - - /** - * 初始化 - */ - public void initWidgetToolbarPane() { - WidgetToolBarPane.getInstance(this); - } - - /** - * populate - * - * @param ui - */ - public void populate(ParameterUI ui) { - if (ui == null) { - return; - } - if (this.getTarget() == ui) { - repaint(); - return; - } - this.setTarget((FormParameterUI) ui.convert()); - this.refreshRoot(); - } - - /** - * 报表直接判断底层是否是绝对布局 - * @return 是则返回true - */ - public boolean hasWAbsoluteLayout() { - return this.getTarget().getContainer() instanceof WAbsoluteLayout; - } - - /** - * 刷新底层容器 - */ - public void refreshRoot() { - XLayoutContainer layoutContainer = (XLayoutContainer) XCreatorUtils.createXCreator(this.getTarget() - .getContainer()); - if (layoutContainer == null) { - layoutContainer = new XWParameterLayout(); - } - layoutContainer.setSize(LARGE_PREFERRED_SIZE); - setRootComponent(layoutContainer); - } - - /** - * 是否是报表的参数面板 - * @return 是 - */ - public boolean isFormParaDesigner(){ - return true; - } - - public XLayoutContainer getParaComponent() { - return getRootComponent(); - } - - private void paintLinkParameters(Graphics clipg) { - Parameter[] paras = DesignModelAdapter.getCurrentModelAdapter().getParameters(); - if (paras == null || paras.length == 0) { - return; - } - Graphics g = clipg.create(); - g.setColor(Color.RED); - if (!(this.getRootComponent() instanceof XWAbsoluteLayout)) { - return; - } - XWAbsoluteLayout layout = (XWAbsoluteLayout) this.getRootComponent(); - for (int i = 0; i < layout.getXCreatorCount(); i++) { - XCreator creator = layout.getXCreator(i); - if (!creator.isVisible()) { - continue; - } - for (Parameter p : paras) { - if (p.getName().equalsIgnoreCase(creator.toData().getWidgetName())) { - g.drawImage(paraImage, creator.getX() - 4, creator.getY() + 2, null); - break; - } - } - } - } - - /** - * 得到合适的大小 - * - * @return - */ - public Dimension getPreferredSize() { - return getDesignSize(); - } - - public Dimension getDesignSize() { - return ((FormParameterUI) getTarget()).getDesignSize(); - } - - /** - * 设置高度 - * - * @param height - */ - public void setDesignHeight(int height) { - Dimension dim = getPreferredSize(); - dim.height = height; - ((FormParameterUI) getTarget()).setDesignSize(dim); - } - - /** - * paintContent - * - * @param clipg - */ - public void paintContent(Graphics clipg) { - Dimension dim; - dim = ((FormParameterUI) getTarget()).getDesignSize(); - getRootComponent().setSize(dim); - getRootComponent().paint(clipg); - paintLinkParameters(clipg); - paintOp(clipg, getOutlineBounds()); - } - - private void paintOp(Graphics offg, Rectangle bounds) { - Color oldColor = offg.getColor(); - Insets insets = getOutlineInsets(); - offg.setColor(XCreatorConstants.OP_COLOR); - offg.fillRect(bounds.x, bounds.y + bounds.height, bounds.width + insets.right, insets.bottom); - offg.fillRect(bounds.x + bounds.width, bounds.y, insets.right, bounds.height); - offg.setColor(oldColor); - } - - protected void setRootComponent(XLayoutContainer component) { - component.setDirections(new int[]{Direction.BOTTOM, Direction.RIGHT}); - super.setRootComponent(component); - } - - /** - * 刷新尺寸 - */ - public void populateRootSize() { - ((FormParameterUI) getTarget()).setDesignSize(getRootComponent().getSize()); - if (getParaComponent().acceptType(XWParameterLayout.class)) { - WParameterLayout layout = (WParameterLayout)getParaComponent().toData(); - layout.setDesignWidth(getRootComponent().getWidth()); - } - } - - /** - * 保存参数界面的宽度 - * - * @param width 指定的宽度 - */ - public void updateWidth(int width) { - FormParameterUI parameterUI = ((FormParameterUI) getTarget()); - parameterUI.setDesignSize(new Dimension(width, parameterUI.getDesignSize().height)); - } - - /** - * 保存参数界面的高度 - * - * @param height 指定的高度 - */ - public void updateHeight(int height) { - FormParameterUI parameterUI = ((FormParameterUI) getTarget()); - parameterUI.setDesignSize(new Dimension(parameterUI.getDesignSize().width, height)); - } - - /** - * 在参数很多时,全部添加的时候,可以向下一次排版,若去掉就会在参数面板堆到一起 - * - * @param creator 组件 z - * @param x 长度 - * @param y 长度 c - * @param layout 布局 - * @return 是否扩展 - */ - public boolean prepareForAdd(XCreator creator, int x, int y, XWAbsoluteLayout layout) { - // 参数界面,自动扩展 - if (!isRoot(layout)) { - return false; - } - - Dimension size = layout.getSize(); - Boolean needResize = false; - - if (creator.getWidth() / 2 + x > layout.getWidth()) { - size.width = creator.getWidth() / 2 + x + ADD_HEIGHT; - needResize = true; - } - if (creator.getHeight() / 2 + y > layout.getHeight()) { - size.height = creator.getHeight() / 2 + y + ADD_HEIGHT; - needResize = true; - } - if (needResize) { - layout.setSize(size); - populateRootSize(); - } - return true; - } - - /** - * 加入参数 - * @param parameter 参数 c - * @param currentIndex 位置 w - * @return 是否加入 s - */ - public boolean addingParameter2Editor(Parameter parameter, int currentIndex) { - com.fr.form.ui.Label label = new com.fr.form.ui.Label(); - String name = parameter.getName(); - label.setWidgetName("Label" + name); - label.setWidgetValue(new WidgetValue(name + ":")); - XCreator xCreator = XCreatorUtils.createXCreator(label); - if (!(this.autoAddComponent(xCreator, H_COMPONENT_GAP * (currentIndex % NUM_IN_A_LINE) - + FIRST_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE)))) { - return false; - } - EditorHolder editor = new EditorHolder(parameter); - xCreator = XCreatorUtils.createXCreator(editor); - if (!(this.autoAddComponent(xCreator, H_COMPONENT_GAP * (currentIndex % NUM_IN_A_LINE) - + SECOND_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE)))) { - return false; - } - return true; - } - - - /** - * 加入参数 - * @param parameter 参数 c - * @param currentIndex 位置 w - * @return 是否加入 s - */ - public boolean addingParameter2EditorWithQueryButton(Parameter parameter, int currentIndex) { - com.fr.form.ui.Label label = new com.fr.form.ui.Label(); - String name = parameter.getName(); - label.setWidgetName("Label" + name); - label.setWidgetValue(new WidgetValue(name + ":")); - XCreator xCreator = XCreatorUtils.createXCreator(label); - if (!(this.autoAddComponent(xCreator, FIRST_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP - * (currentIndex / NUM_IN_A_LINE)))) { - return false; - } - EditorHolder editor = new EditorHolder(parameter); - editor.setWidgetName(name); - xCreator = XCreatorUtils.createXCreator(editor); - if (!(this.autoAddComponent(xCreator, SECOND_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP - * (currentIndex / NUM_IN_A_LINE)))) { - return false; - } - FormSubmitButton formSubmitButton = new FormSubmitButton(); - formSubmitButton.setWidgetName("Search"); - formSubmitButton.setText(Inter.getLocText("FR-Designer_Query")); - xCreator = XCreatorUtils.createXCreator(formSubmitButton); - if (!(this.autoAddComponent(xCreator, 270, FIRST_V_LOCATION + V_COMPONENT_GAP - * (currentIndex / NUM_IN_A_LINE)))) { - return false; - } - return true; - } - - /** - * 加入参数 - * @param parameterArray 参数 c - * @param currentIndex 位置 w - * @return 是否加入 s - */ - public void addingAllParameter2Editor(Parameter[] parameterArray, int currentIndex) { - for (int i = 0; i < parameterArray.length; i++) { - com.fr.form.ui.Label label = new com.fr.form.ui.Label(); - label.setWidgetName("Label" + parameterArray[i].getName()); - label.setWidgetValue(new WidgetValue(parameterArray[i].getName() + ":")); - XCreator xCreator = XCreatorUtils.createXCreator(label); - - if (!(this.autoAddComponent(xCreator, H_COMPONENT_GAP * (currentIndex % NUM_IN_A_LINE) - + FIRST_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE)))) { - break; - } - // 每行显示5组 - EditorHolder editor = new EditorHolder(parameterArray[i]); - editor.setWidgetName(parameterArray[i].getName()); - xCreator = XCreatorUtils.createXCreator(editor); - if (!(this.autoAddComponent(xCreator, H_COMPONENT_GAP * (currentIndex % NUM_IN_A_LINE) - + SECOND_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE)))) { - break; - } - currentIndex++; - } - if (!isWithQueryButton()) { - FormSubmitButton formSubmitButton = new FormSubmitButton(); - formSubmitButton.setWidgetName("Search"); - formSubmitButton.setText(Inter.getLocText("FR-Designer_Query")); - XCreator xCreator = XCreatorUtils.createXCreator(formSubmitButton); - if (!(this.autoAddComponent(xCreator, H_COMPONENT_GAP * 3 + H_GAP, FIRST_V_LOCATION - + V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE)))) { - return; - } - } - } - - /** - * 自动添加 - * - * @param xCreator 组件 z - * @param x 位置 w - * @param y 位置 - * @return 是否添加 s - */ - public boolean autoAddComponent(XCreator xCreator, int x, int y) { - XWAbsoluteLayout layout = (XWAbsoluteLayout) this.getRootComponent(); - FRAbsoluteLayoutAdapter adapter = (FRAbsoluteLayoutAdapter) layout.getLayoutAdapter(); - if (prepareForAdd(xCreator, x, y, layout)) { - adapter.addBean(xCreator, x, y); - } - this.getSelectionModel().setSelectedCreator(xCreator); - repaint(); - return true; - } - - /** - * 工具栏 - * @return 工具栏面板 g - */ - public JPanel[] toolbarPanes4Form() { - return new JPanel[]{FormParaPane.getInstance(this)}; - } - - /** - * 复制等按钮 - * @return 按钮组 a - */ - public JComponent[] toolBarButton4Form() { - return new JComponent[]{new CutAction(this).createToolBarComponent(), new CopyAction(this).createToolBarComponent(), new PasteAction(this).createToolBarComponent(), - new FormDeleteAction(this).createToolBarComponent()}; - } + private static final int NUM_IN_A_LINE = 4; + private static final int H_COMPONENT_GAP = 165; + private static final int V_COMPONENT_GAP = 25; + private static final int FIRST_V_LOCATION = 35; + private static final int FIRST_H_LOCATION = 90; + private static final int SECOND_H_LOCATION = 170; + private static final int ADD_HEIGHT = 20; + private static final int H_GAP = 105; + + private static Image paraImage = BaseUtils.readImage("/com/fr/design/images/form/parameter.png"); + + public FormParaDesigner() { + this(new FormParameterUI()); + } + + public FormParaDesigner(FormParameterUI ui) { + super(gen(ui)); + } + + private static Form gen(Form form) { + WLayout container = form.getContainer(); + if (container == null) { + container = new WParameterLayout(); + } + container.setWidgetName("para"); + form.setContainer(container); + return form; + } + + protected FormDesignerModeForSpecial createFormDesignerTargetMode() { + return new FormParaTargetMode(this); + } + + /** + * 开始编辑参数面板的时候进行的初始化 + */ + public void initBeforeUpEdit() { + WidgetToolBarPane.getInstance(this); + EastRegionContainerPane.getInstance().replaceDownPane( + FormWidgetDetailPane.getInstance(this)); + if (!BaseUtils.isAuthorityEditing()) { + EastRegionContainerPane.getInstance().addParameterPane(ParameterPropertyPane.getInstance(this)); + EastRegionContainerPane.getInstance().setParameterHeight(ParameterPropertyPane.getInstance(this).getPreferredSize().height); + EastRegionContainerPane.getInstance().replaceUpPane( + WidgetPropertyPane.getInstance(this)); + } else { + EastRegionContainerPane.getInstance().removeParameterPane(); + showAuthorityEditPane(); + } + + } + + /** + * 创建权限编辑面板 + * + * @return 面板 + */ + public AuthorityEditPane createAuthorityEditPane() { + return new FormWidgetAuthorityEditPane(this); + } + + /** + * 内容属性表面板 + * + * @return 内容属性表面板 + */ + public JPanel getEastUpPane() { + return WidgetPropertyPane.getInstance(this); + } + + /** + * 参数属性表 + * + * @return 参数属性表 + */ + + public JPanel getEastDownPane() { + return FormWidgetDetailPane.getInstance(this); + } + + /** + * 权限编辑面板 + * + * @return 权限编辑面板 + */ + public AuthorityEditPane getAuthorityEditPane() { + FormWidgetAuthorityEditPane formWidgetAuthorityEditPane = new FormWidgetAuthorityEditPane(this); + formWidgetAuthorityEditPane.populateDetials(); + return formWidgetAuthorityEditPane; + } + + /** + * 给包含此FormParaDesigner的ParameterDefinitePane添加事件 + * + * @param paraDefinitePane 面板 + */ + public void addListener(final ParaDefinitePane paraDefinitePane) { + this.getEditListenerTable().addListener(new DesignerEditListener() { + + @Override + public void fireCreatorModified(DesignerEvent evt) { + if (evt.getCreatorEventID() == DesignerEvent.CREATOR_ADDED + || evt.getCreatorEventID() == DesignerEvent.CREATOR_CUTED + || evt.getCreatorEventID() == DesignerEvent.CREATOR_PASTED + || evt.getCreatorEventID() == DesignerEvent.CREATOR_DELETED + || evt.getCreatorEventID() == DesignerEvent.CREATOR_EDITED + || evt.getCreatorEventID() == DesignerEvent.CREATOR_RENAMED) { + paraDefinitePane.setParameterArray( + paraDefinitePane.getNoRepeatParas(DesignModelAdapter.getCurrentModelAdapter().getParameters())); + paraDefinitePane.refreshParameter(); + } + } + }); + } + + /** + * 包裹一层FormArea + * + * @return 区域 + */ + public Component createWrapper() { + FormArea area = new FormArea(this, false); + area.setBorder(BorderFactory.createEmptyBorder(0, 13, 0, 0)); + return area; + } + + /** + * 刷新控件 + */ + public void refreshAllNameWidgets() { + XCreatorUtils.refreshAllNameWidgets(this.getRootComponent()); + } + + /** + * 刷新tableData + * + * @param oldName 旧名称 + * @param newName 新名称 + */ + public void refresh4TableData(String oldName, String newName) { + this.getTarget().renameTableData(oldName, newName); + this.getEditListenerTable().fireCreatorModified(DesignerEvent.CREATOR_SELECTED); + } + + /** + * 刷新参数 + * + * @param p 参数面板 + */ + public void refreshParameter(ParaDefinitePane p) { + XLayoutContainer rootContainer = this.getRootComponent(); + java.util.List namelist = getAllXCreatorNameList(rootContainer); + // parameterArray是报表的所有参数, nameList是已经在参数面板添加过控件的参数名 + // 与已有的参数列表比较 如果已经存在 就除去 + Parameter[] ps = p.getParameterArray(); + if (ps != null) { + for (Parameter parameter : ps) { + for (String name : namelist) { + if (name.equalsIgnoreCase(parameter.getName())) { + p.setParameterArray((Parameter[]) ArrayUtils.removeElement(p.getParameterArray(), parameter)); + } + } + } + } + ParameterPropertyPane.getInstance().getParameterToolbarPane().populateBean( + p.getParameterArray() == null ? new Parameter[0] : p.getParameterArray()); + EastRegionContainerPane.getInstance().setParameterHeight(ParameterPropertyPane.getInstance().getPreferredSize().height); + + } + + /** + * 判断这个参数面板是否没有控件 + * + * @return 参数面板是否没有控件 + */ + public boolean isBlank() { + XLayoutContainer rootContainer = this.getRootComponent(); + List xx = getAllXCreatorNameList(rootContainer); + return xx.isEmpty(); + } + + protected void setToolbarButtons(boolean flag) { + DesignerContext.getDesignerFrame().checkCombineUp(!flag, NAME_ARRAY_LIST); + } + + /** + * 看看参数面板中的控件是否有和模板参数同名的 + * + * @param allParameters 参数 + * @return 是否有同名 + */ + public boolean isWithoutParaXCreator(Parameter[] allParameters) { + XLayoutContainer rootContainer = this.getRootComponent(); + List xx = getAllXCreatorNameList(rootContainer); + for (Parameter parameter : allParameters) { + for (String name : xx) { + if (name.equalsIgnoreCase(parameter.getName())) { + return false; + } + } + } + + return true; + } + + /** + * 参数面板控件的名字 + * + * @return 名字 + */ + public List getAllXCreatorNameList() { + XLayoutContainer rootContainer = this.getRootComponent(); + List namelist = new ArrayList(); + for (int i = 0; i < rootContainer.getXCreatorCount(); i++) { + if (rootContainer.getXCreator(i) instanceof XLayoutContainer) { + namelist.addAll(getAllXCreatorNameList((XLayoutContainer) rootContainer.getXCreator(i))); + } else { + namelist.add(rootContainer.getXCreator(i).toData().getWidgetName()); + } + } + return namelist; + } + + private List getAllXCreatorNameList(XLayoutContainer rootContainer) { + List namelist = new ArrayList(); + for (int i = 0; i < rootContainer.getXCreatorCount(); i++) { + if (rootContainer.getXCreator(i) instanceof XLayoutContainer) { + namelist.addAll(getAllXCreatorNameList((XLayoutContainer) rootContainer.getXCreator(i))); + } else { + namelist.add(rootContainer.getXCreator(i).toData().getWidgetName()); + } + } + return namelist; + } + + /** + * 是否有查询按钮 + * + * @return 有无查询按钮 + */ + public boolean isWithQueryButton() { + XLayoutContainer rootContainer = this.getRootComponent(); + return SearchQueryCreators(rootContainer); + } + + /** + * 返回复制粘贴删除等动作 + * + * @return 同上 + */ + public Action[] getActions() { + if (designer_actions == null) { + designer_actions = new Action[]{new CutAction(this), new CopyAction(this), new PasteAction(this), + new FormDeleteAction(this)}; + } + return designer_actions; + } + + private boolean SearchQueryCreators(XLayoutContainer rootContainer) { + boolean b = false; + for (int i = 0; i < rootContainer.getXCreatorCount(); i++) { + if (rootContainer.getXCreator(i) instanceof XLayoutContainer) { + b = SearchQueryCreators((XLayoutContainer) rootContainer.getXCreator(i)); + } else if (rootContainer.getXCreator(i) instanceof XFormSubmit) { + b = true; + } + } + return b; + } + + /** + * 就是getTarget 为了返回ParameterUI接口而不冲突另写个 + * + * @return + */ + public ParameterUI getParaTarget() { + return (FormParameterUI) super.getTarget(); + } + + /** + * ParameterDefinitePane通过ParaDesigner来调用ParameterPropertyPane + * + * @param p 面板 + */ + public void populateParameterPropertyPane(ParaDefinitePane p) { + ParameterPropertyPane.getInstance().populateBean(p); + } + + /** + * 初始化 + */ + public void initWidgetToolbarPane() { + WidgetToolBarPane.getInstance(this); + } + + /** + * populate + * + * @param ui + */ + public void populate(ParameterUI ui) { + if (ui == null) { + return; + } + if (this.getTarget() == ui) { + repaint(); + return; + } + this.setTarget((FormParameterUI) ui.convert()); + this.refreshRoot(); + } + + /** + * 报表直接判断底层是否是绝对布局 + * + * @return 是则返回true + */ + public boolean hasWAbsoluteLayout() { + return this.getTarget().getContainer() instanceof WAbsoluteLayout; + } + + /** + * 刷新底层容器 + */ + public void refreshRoot() { + XLayoutContainer layoutContainer = (XLayoutContainer) XCreatorUtils.createXCreator(this.getTarget() + .getContainer()); + if (layoutContainer == null) { + layoutContainer = new XWParameterLayout(); + } + layoutContainer.setSize(LARGE_PREFERRED_SIZE); + setRootComponent(layoutContainer); + } + + /** + * 是否是报表的参数面板 + * + * @return 是 + */ + public boolean isFormParaDesigner() { + return true; + } + + public XLayoutContainer getParaComponent() { + return getRootComponent(); + } + + private void paintLinkParameters(Graphics clipg) { + Parameter[] paras = DesignModelAdapter.getCurrentModelAdapter().getParameters(); + if (paras == null || paras.length == 0) { + return; + } + Graphics g = clipg.create(); + g.setColor(Color.RED); + if (!(this.getRootComponent() instanceof XWAbsoluteLayout)) { + return; + } + XWAbsoluteLayout layout = (XWAbsoluteLayout) this.getRootComponent(); + for (int i = 0; i < layout.getXCreatorCount(); i++) { + XCreator creator = layout.getXCreator(i); + if (!creator.isVisible()) { + continue; + } + for (Parameter p : paras) { + if (p.getName().equalsIgnoreCase(creator.toData().getWidgetName())) { + g.drawImage(paraImage, creator.getX() - 4, creator.getY() + 2, null); + break; + } + } + } + } + + /** + * 得到合适的大小 + * + * @return + */ + public Dimension getPreferredSize() { + return getDesignSize(); + } + + public Dimension getDesignSize() { + return ((FormParameterUI) getTarget()).getDesignSize(); + } + + /** + * 设置高度 + * + * @param height + */ + public void setDesignHeight(int height) { + Dimension dim = getPreferredSize(); + dim.height = height; + ((FormParameterUI) getTarget()).setDesignSize(dim); + } + + /** + * paintContent + * + * @param clipg + */ + public void paintContent(Graphics clipg) { + Dimension dim; + dim = ((FormParameterUI) getTarget()).getDesignSize(); + getRootComponent().setSize(dim); + getRootComponent().paint(clipg); + paintLinkParameters(clipg); + paintOp(clipg, getOutlineBounds()); + } + + private void paintOp(Graphics offg, Rectangle bounds) { + Color oldColor = offg.getColor(); + Insets insets = getOutlineInsets(); + offg.setColor(XCreatorConstants.OP_COLOR); + offg.fillRect(bounds.x, bounds.y + bounds.height, bounds.width + insets.right, insets.bottom); + offg.fillRect(bounds.x + bounds.width, bounds.y, insets.right, bounds.height); + offg.setColor(oldColor); + } + + protected void setRootComponent(XLayoutContainer component) { + component.setDirections(new int[]{Direction.BOTTOM, Direction.RIGHT}); + super.setRootComponent(component); + } + + /** + * 刷新尺寸 + */ + public void populateRootSize() { + ((FormParameterUI) getTarget()).setDesignSize(getRootComponent().getSize()); + if (getParaComponent().acceptType(XWParameterLayout.class)) { + WParameterLayout layout = (WParameterLayout) getParaComponent().toData(); + layout.setDesignWidth(getRootComponent().getWidth()); + } + } + + /** + * 保存参数界面的宽度 + * + * @param width 指定的宽度 + */ + public void updateWidth(int width) { + FormParameterUI parameterUI = ((FormParameterUI) getTarget()); + parameterUI.setDesignSize(new Dimension(width, parameterUI.getDesignSize().height)); + } + + /** + * 保存参数界面的高度 + * + * @param height 指定的高度 + */ + public void updateHeight(int height) { + FormParameterUI parameterUI = ((FormParameterUI) getTarget()); + parameterUI.setDesignSize(new Dimension(parameterUI.getDesignSize().width, height)); + } + + /** + * 在参数很多时,全部添加的时候,可以向下一次排版,若去掉就会在参数面板堆到一起 + * + * @param creator 组件 z + * @param x 长度 + * @param y 长度 c + * @param layout 布局 + * @return 是否扩展 + */ + public boolean prepareForAdd(XCreator creator, int x, int y, XWAbsoluteLayout layout) { + // 参数界面,自动扩展 + if (!isRoot(layout)) { + return false; + } + + Dimension size = layout.getSize(); + Boolean needResize = false; + + if (creator.getWidth() / 2 + x > layout.getWidth()) { + size.width = creator.getWidth() / 2 + x + ADD_HEIGHT; + needResize = true; + } + if (creator.getHeight() / 2 + y > layout.getHeight()) { + size.height = creator.getHeight() / 2 + y + ADD_HEIGHT; + needResize = true; + } + if (needResize) { + layout.setSize(size); + populateRootSize(); + } + return true; + } + + /** + * 加入参数 + * + * @param parameter 参数 c + * @param currentIndex 位置 w + * @return 是否加入 s + */ + public boolean addingParameter2Editor(Parameter parameter, int currentIndex) { + com.fr.form.ui.Label label = new com.fr.form.ui.Label(); + String name = parameter.getName(); + label.setWidgetName("Label" + name); + label.setWidgetValue(new WidgetValue(name + ":")); + XCreator xCreator = XCreatorUtils.createXCreator(label); + if (!(this.autoAddComponent(xCreator, H_COMPONENT_GAP * (currentIndex % NUM_IN_A_LINE) + + FIRST_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE)))) { + return false; + } + EditorHolder editor = new EditorHolder(parameter); + xCreator = XCreatorUtils.createXCreator(editor); + if (!(this.autoAddComponent(xCreator, H_COMPONENT_GAP * (currentIndex % NUM_IN_A_LINE) + + SECOND_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE)))) { + return false; + } + return true; + } + + + /** + * 加入参数 + * + * @param parameter 参数 c + * @param currentIndex 位置 w + * @return 是否加入 s + */ + public boolean addingParameter2EditorWithQueryButton(Parameter parameter, int currentIndex) { + com.fr.form.ui.Label label = new com.fr.form.ui.Label(); + String name = parameter.getName(); + label.setWidgetName("Label" + name); + label.setWidgetValue(new WidgetValue(name + ":")); + XCreator xCreator = XCreatorUtils.createXCreator(label); + if (!(this.autoAddComponent(xCreator, FIRST_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP + * (currentIndex / NUM_IN_A_LINE)))) { + return false; + } + EditorHolder editor = new EditorHolder(parameter); + editor.setWidgetName(name); + xCreator = XCreatorUtils.createXCreator(editor); + if (!(this.autoAddComponent(xCreator, SECOND_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP + * (currentIndex / NUM_IN_A_LINE)))) { + return false; + } + FormSubmitButton formSubmitButton = new FormSubmitButton(); + formSubmitButton.setWidgetName("Search"); + formSubmitButton.setText(Inter.getLocText("FR-Designer_Query")); + xCreator = XCreatorUtils.createXCreator(formSubmitButton); + if (!(this.autoAddComponent(xCreator, 270, FIRST_V_LOCATION + V_COMPONENT_GAP + * (currentIndex / NUM_IN_A_LINE)))) { + return false; + } + return true; + } + + /** + * 加入参数 + * + * @param parameterArray 参数 c + * @param currentIndex 位置 w + * @return 是否加入 s + */ + public void addingAllParameter2Editor(Parameter[] parameterArray, int currentIndex) { + for (int i = 0; i < parameterArray.length; i++) { + com.fr.form.ui.Label label = new com.fr.form.ui.Label(); + label.setWidgetName("Label" + parameterArray[i].getName()); + label.setWidgetValue(new WidgetValue(parameterArray[i].getName() + ":")); + XCreator xCreator = XCreatorUtils.createXCreator(label); + + if (!(this.autoAddComponent(xCreator, H_COMPONENT_GAP * (currentIndex % NUM_IN_A_LINE) + + FIRST_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE)))) { + break; + } + // 每行显示5组 + EditorHolder editor = new EditorHolder(parameterArray[i]); + editor.setWidgetName(parameterArray[i].getName()); + xCreator = XCreatorUtils.createXCreator(editor); + if (!(this.autoAddComponent(xCreator, H_COMPONENT_GAP * (currentIndex % NUM_IN_A_LINE) + + SECOND_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE)))) { + break; + } + currentIndex++; + } + if (!isWithQueryButton()) { + FormSubmitButton formSubmitButton = new FormSubmitButton(); + formSubmitButton.setWidgetName("Search"); + formSubmitButton.setText(Inter.getLocText("FR-Designer_Query")); + XCreator xCreator = XCreatorUtils.createXCreator(formSubmitButton); + if (!(this.autoAddComponent(xCreator, H_COMPONENT_GAP * 3 + H_GAP, FIRST_V_LOCATION + + V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE)))) { + return; + } + } + } + + /** + * 自动添加 + * + * @param xCreator 组件 z + * @param x 位置 w + * @param y 位置 + * @return 是否添加 s + */ + public boolean autoAddComponent(XCreator xCreator, int x, int y) { + XWAbsoluteLayout layout = (XWAbsoluteLayout) this.getRootComponent(); + FRAbsoluteLayoutAdapter adapter = (FRAbsoluteLayoutAdapter) layout.getLayoutAdapter(); + if (prepareForAdd(xCreator, x, y, layout)) { + adapter.addBean(xCreator, x, y); + } + this.getSelectionModel().setSelectedCreator(xCreator); + repaint(); + return true; + } + + /** + * 工具栏 + * + * @return 工具栏面板 g + */ + public JPanel[] toolbarPanes4Form() { + return new JPanel[]{FormParaPane.getInstance(this)}; + } + + /** + * 复制等按钮 + * + * @return 按钮组 a + */ + public JComponent[] toolBarButton4Form() { + return new JComponent[]{new CutAction(this).createToolBarComponent(), new CopyAction(this).createToolBarComponent(), new PasteAction(this).createToolBarComponent(), + new FormDeleteAction(this).createToolBarComponent()}; + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java b/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java index 88dc9268f..9b4ccfeeb 100644 --- a/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java +++ b/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java @@ -202,7 +202,7 @@ public class EditingMouseListener extends MouseInputAdapter { XCreator selectionXCreator = designer.getSelectionModel().getSelection().getSelectedCreator(); if(selectionXCreator != null){ selectionXCreator.setBounds(dragBackupBounds.x, dragBackupBounds.y, dragBackupBounds.width, dragBackupBounds.height); - MoveUtils.hideForbidWindow(); +// MoveUtils.hideForbidWindow(); } } dragBackupBounds = null; diff --git a/designer_form/src/com/fr/design/mainframe/FormDesigner.java b/designer_form/src/com/fr/design/mainframe/FormDesigner.java index a3b197e91..d78cb5557 100644 --- a/designer_form/src/com/fr/design/mainframe/FormDesigner.java +++ b/designer_form/src/com/fr/design/mainframe/FormDesigner.java @@ -6,7 +6,10 @@ import com.fr.design.DesignState; import com.fr.design.designer.TargetComponent; import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.Painter; +import com.fr.design.designer.beans.actions.CopyAction; +import com.fr.design.designer.beans.actions.CutAction; import com.fr.design.designer.beans.actions.FormDeleteAction; +import com.fr.design.designer.beans.actions.PasteAction; import com.fr.design.designer.beans.adapters.layout.FRParameterLayoutAdapter; import com.fr.design.designer.beans.events.CreatorEventListenerTable; import com.fr.design.designer.beans.events.DesignerEditListener; @@ -65,7 +68,7 @@ import java.util.List; /** * 设计界面组件。该组件是界面设计工具的核心,主要负责的是被设计界面的显示,界面设计操作状态的 显示,编辑状态的显示等等。 */ -public class FormDesigner extends TargetComponent implements TreeSelectionListener, InvocationHandler, BaseFormDesigner ,ParaDefinitePane{ +public class FormDesigner extends TargetComponent implements TreeSelectionListener, InvocationHandler, BaseFormDesigner, ParaDefinitePane { protected static final ArrayList NAME_ARRAY_LIST = new ArrayList( Arrays.asList(new String[]{Inter.getLocText("M_Edit-Cut"), Inter.getLocText("M_Edit-Copy"), Inter.getLocText("M_Edit-Delete")}) ); @@ -159,7 +162,7 @@ public class FormDesigner extends TargetComponent implements TreeSelection ParameterPropertyPane.getInstance().populateBean(this); } - public Parameter[] getNoRepeatParas(Parameter[] paras){ + public Parameter[] getNoRepeatParas(Parameter[] paras) { List paraList = new ArrayList(); java.util.Set set = new java.util.HashSet(); for (Parameter p : paras) { @@ -171,23 +174,23 @@ public class FormDesigner extends TargetComponent implements TreeSelection return paraList.toArray(new Parameter[paraList.size()]); } - public void setParameterArray(Parameter[] ps){ + public void setParameterArray(Parameter[] ps) { parameterArray = ps; } - public Parameter[] getParameterArray(){ + public Parameter[] getParameterArray() { return parameterArray; } /** * 刷新参数 */ - public void refreshParameter(){ + public void refreshParameter() { XLayoutContainer rootContainer = this.getParaComponent(); - if (rootContainer != null){ + if (rootContainer != null) { java.util.List namelist = new ArrayList(); - rootContainer.getAllXCreatorNameList(rootContainer,namelist); + rootContainer.getAllXCreatorNameList(rootContainer, namelist); // parameterArray是报表的所有参数, nameList是已经在参数面板添加过控件的参数名 // 与已有的参数列表比较 如果已经存在 就除去 Parameter[] ps = getParameterArray(); @@ -201,7 +204,7 @@ public class FormDesigner extends TargetComponent implements TreeSelection EastRegionContainerPane.getInstance().setParameterHeight(ParameterPropertyPane.getInstance(this).getPreferredSize().height); } - private void removeSame(Parameter[] parameters, List namelist){ + private void removeSame(Parameter[] parameters, List namelist) { for (Parameter parameter : parameters) { for (String name : namelist) { if (name.equalsIgnoreCase(parameter.getName())) { @@ -214,20 +217,22 @@ public class FormDesigner extends TargetComponent implements TreeSelection /** * 是否有查询按钮 - * @return 有无查询按钮 + * + * @return 有无查询按钮 */ - public boolean isWithQueryButton(){ + public boolean isWithQueryButton() { XLayoutContainer rootContainer = this.getParaComponent(); return rootContainer != null && rootContainer.SearchQueryCreators(rootContainer); } /** * 加入参数到参数面板 + * * @param parameter 参数 * @return 是否加入 */ - public void addingParameter2Editor(Parameter parameter){ - if(getParaComponent() == null){ + public void addingParameter2Editor(Parameter parameter) { + if (getParaComponent() == null) { addParaPaneTooltips(); return; } @@ -242,11 +247,11 @@ public class FormDesigner extends TargetComponent implements TreeSelection if (!(this.autoAddComponent(xLabel, H_COMPONENT_GAP * (currentIndex % NUM_IN_A_LINE) + FIRST_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE)))) { - return ; + return; } if (!(this.autoAddComponent(xCreator, H_COMPONENT_GAP * (currentIndex % NUM_IN_A_LINE) + SECOND_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE)))) { - return ; + return; } currentIndex++; parameterArray = (Parameter[]) ArrayUtils.removeElement(parameterArray, parameter); @@ -256,11 +261,12 @@ public class FormDesigner extends TargetComponent implements TreeSelection /** * 加入参数到参数面板,有查询按钮 + * * @param parameter 参数 * @return 是否加入 */ - public void addingParameter2EditorWithQueryButton(Parameter parameter){ - if(getParaComponent() == null){ + public void addingParameter2EditorWithQueryButton(Parameter parameter) { + if (getParaComponent() == null) { addParaPaneTooltips(); return; } @@ -276,12 +282,12 @@ public class FormDesigner extends TargetComponent implements TreeSelection if (!(this.autoAddComponent(xLabel, FIRST_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE)))) { - return ; + return; } if (!(this.autoAddComponent(xCreator, SECOND_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE)))) { - return ; + return; } FormSubmitButton formSubmitButton = new FormSubmitButton(); formSubmitButton.setWidgetName("Search"); @@ -289,7 +295,7 @@ public class FormDesigner extends TargetComponent implements TreeSelection xCreator = XCreatorUtils.createXCreator(formSubmitButton); if (!(this.autoAddComponent(xCreator, 270, FIRST_V_LOCATION + V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE)))) { - return ; + return; } currentIndex = currentIndex + NUM_IN_A_LINE - currentIndex % NUM_IN_A_LINE; parameterArray = (Parameter[]) ArrayUtils.removeElement(parameterArray, parameter); @@ -300,8 +306,8 @@ public class FormDesigner extends TargetComponent implements TreeSelection /** * 一键添加所有参数 */ - public void addingAllParameter2Editor(){ - if(getParaComponent() == null){ + public void addingAllParameter2Editor() { + if (getParaComponent() == null) { addParaPaneTooltips(); return; } @@ -350,16 +356,17 @@ public class FormDesigner extends TargetComponent implements TreeSelection EastRegionContainerPane.getInstance().refreshDownPane(); } - private void addParaPaneTooltips(){ - JOptionPane.showConfirmDialog(DesignerContext.getDesignerFrame(),Inter.getLocText("FR-Designer-Form-Please_Drag_ParaPane"), + private void addParaPaneTooltips() { + JOptionPane.showConfirmDialog(DesignerContext.getDesignerFrame(), Inter.getLocText("FR-Designer-Form-Please_Drag_ParaPane"), Inter.getLocText("FR-Designer_Tooltips"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE); } /** * 自动添加组件 - * @param xCreator 组件 - * @param x 横坐标 - * @param y 纵坐标 + * + * @param xCreator 组件 + * @param x 横坐标 + * @param y 纵坐标 * @return 是否添加成功 */ public boolean autoAddComponent(XCreator xCreator, int x, int y) { @@ -375,10 +382,11 @@ public class FormDesigner extends TargetComponent implements TreeSelection /** * 在参数很多时,全部添加的时候,可以向下一次排版,若去掉就会在参数面板堆到一起 + * * @param creator 组件 - * @param x 长度 - * @param y 长度 - * @param layout 布局 + * @param x 长度 + * @param y 长度 + * @param layout 布局 * @return 是否扩展 */ public boolean prepareForAdd(XCreator creator, int x, int y, XWParameterLayout layout) { @@ -404,9 +412,9 @@ public class FormDesigner extends TargetComponent implements TreeSelection /** * 加入参数面板 */ - public void addParaComponent(){ + public void addParaComponent() { if (paraComponent != null) { - return ; + return; } paraHeight = WBorderLayout.DEFAULT_SIZE; paraComponent = new XWParameterLayout(); @@ -414,7 +422,7 @@ public class FormDesigner extends TargetComponent implements TreeSelection paraComponent.setSize(paraComponent.initEditorSize()); XWBorderLayout formLayoutContainer = (XWBorderLayout) rootComponent.getParent(); formLayoutContainer.toData().setNorthSize(paraHeight); - formLayoutContainer.add(paraComponent,WBorderLayout.NORTH); + formLayoutContainer.add(paraComponent, WBorderLayout.NORTH); //设下northSize,增加para后,重置border大小,这时候para和root的大小会自适应调整 formLayoutContainer.setSize(formLayoutContainer.getWidth(), formLayoutContainer.getHeight() + paraHeight); selectionModel.reset(); @@ -424,30 +432,33 @@ public class FormDesigner extends TargetComponent implements TreeSelection } /** - * 返回根节点父容器 - * @return 父容器 + * 返回根节点父容器 + * + * @return 父容器 */ - public Component getTopContainer(){ - if(rootComponent != null){ + public Component getTopContainer() { + if (rootComponent != null) { // 返回root所在的父容器,非designer return LayoutUtils.getTopContainer(rootComponent); } - return XCreatorUtils.createXCreator(this.getTarget().getContainer()); + return XCreatorUtils.createXCreator(this.getTarget().getContainer()); } /** * 返回参数界面高度 - * @return para高度 + * + * @return para高度 */ - public int getParaHeight(){ + public int getParaHeight() { return paraHeight; } /** * 重置para的高度 - * @param height 高度 + * + * @param height 高度 */ - public void setParaHeight(int height){ + public void setParaHeight(int height) { XWBorderLayout container = (XWBorderLayout) getTopContainer(); container.toData().setNorthSize(height); container.setSize(container.getWidth(), container.getHeight() + height - getParaHeight()); @@ -457,7 +468,7 @@ public class FormDesigner extends TargetComponent implements TreeSelection /** * 删除参数界面 */ - public void removeParaComponent(){ + public void removeParaComponent() { XWBorderLayout formLayoutContainer = (XWBorderLayout) getTopContainer(); formLayoutContainer.toData().removeWidget(paraComponent.toData()); paraHeight = 0; @@ -472,41 +483,42 @@ public class FormDesigner extends TargetComponent implements TreeSelection /** * 切换 - * @param elementCaseContainer 容器 + * + * @param elementCaseContainer 容器 */ - public void switchTab(FormElementCaseContainerProvider elementCaseContainer){ - if(this.switchAction == null){ + public void switchTab(FormElementCaseContainerProvider elementCaseContainer) { + if (this.switchAction == null) { return; } this.elementCaseContainer = elementCaseContainer; this.switchAction.actionPerformed(null); } - public void setElementCaseContainer(FormElementCaseContainerProvider elementCaseContainer){ + public void setElementCaseContainer(FormElementCaseContainerProvider elementCaseContainer) { this.elementCaseContainer = elementCaseContainer; } - public FormElementCaseProvider getElementCase(){ + public FormElementCaseProvider getElementCase() { return this.elementCaseContainer.getElementCase(); } - public String getElementCaseContainerName(){ + public String getElementCaseContainerName() { return this.elementCaseContainer.getElementCaseContainerName(); } - public void setElementCase(FormElementCaseProvider elementCase){ + public void setElementCase(FormElementCaseProvider elementCase) { this.elementCaseContainer.setElementCase(elementCase); } - public void setElementCaseBackground(BufferedImage image){ + public void setElementCaseBackground(BufferedImage image) { this.elementCaseContainer.setBackground(image); } - public Dimension getElementCaseContainerSize(){ + public Dimension getElementCaseContainerSize() { return this.elementCaseContainer.getSize(); } - public FormElementCaseContainerProvider getElementCaseContainer(){ + public FormElementCaseContainerProvider getElementCaseContainer() { return this.elementCaseContainer; } @@ -524,6 +536,7 @@ public class FormDesigner extends TargetComponent implements TreeSelection /** * 增加监听事件 + * * @param listener 界面组件编辑事件 */ public void addDesignerEditListener(DesignerEditListener listener) { @@ -539,15 +552,15 @@ public class FormDesigner extends TargetComponent implements TreeSelection /** * 表单则判断参数面板是否为绝对布局 + * * @return 是则返回true */ public boolean hasWAbsoluteLayout() { - if (paraComponent != null && paraComponent.acceptType(XWParameterLayout.class)){ + if (paraComponent != null && paraComponent.acceptType(XWParameterLayout.class)) { return true; - } - else{ + } else { if (this.getSelectionModel().getSelection().getSelectedCreator().getParent() != null - && ((XLayoutContainer)this.getSelectionModel().getSelection().getSelectedCreator().getParent()).acceptType(XWAbsoluteLayout.class)){ + && ((XLayoutContainer) this.getSelectionModel().getSelection().getSelectedCreator().getParent()).acceptType(XWAbsoluteLayout.class)) { return true; } } @@ -555,7 +568,8 @@ public class FormDesigner extends TargetComponent implements TreeSelection } /** - * 设置是否为报表块编辑 + * 设置是否为报表块编辑 + * * @param isEditing 是否为报表块编辑 */ public void setReportBlockEditing(boolean isEditing) { @@ -564,25 +578,27 @@ public class FormDesigner extends TargetComponent implements TreeSelection /** * 是否为报表块编辑 + * * @return 是否为报表块编辑 */ public boolean isReportBlockEditing() { return this.isReportBlockEditing; } - public void setWidgetsIntersect(boolean isWidgetsIntersect){ + public void setWidgetsIntersect(boolean isWidgetsIntersect) { this.isWidgetsIntersect = isWidgetsIntersect; } - public boolean isWidgetsIntersect(){ + public boolean isWidgetsIntersect() { return this.isWidgetsIntersect; } /** * 是否重命名控件 + * * @param creator 组件 * @param newName 新的组件名 - * @return 组件名有变化,且不和其他一样返回true + * @return 组件名有变化,且不和其他一样返回true */ public boolean renameCreator(XCreator creator, String newName) { if (ComparatorUtils.equals(creator.toData().getWidgetName(), newName)) { @@ -609,16 +625,17 @@ public class FormDesigner extends TargetComponent implements TreeSelection /** * 更新界面布局,重绘 - * @param proxy 动态代理类 + * + * @param proxy 动态代理类 * @param method 接口方法 - * @param args 参数 + * @param args 参数 * @return 不返回任何对象 */ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { - if(rootComponent != null){ + if (rootComponent != null) { LayoutUtils.layoutRootContainer(rootComponent); } - if(paraComponent != null){ + if (paraComponent != null) { LayoutUtils.layoutRootContainer(paraComponent); } repaint(); @@ -654,6 +671,7 @@ public class FormDesigner extends TargetComponent implements TreeSelection /** * 增加组件事件 + * * @param h 动态代理 */ public void addInvocationHandler(InvocationHandler h) { @@ -678,7 +696,7 @@ public class FormDesigner extends TargetComponent implements TreeSelection } /** - * 设置其UI类为DesignerUI,负责渲染 + * 设置其UI类为DesignerUI,负责渲染 */ @Override public void updateUI() { @@ -741,6 +759,7 @@ public class FormDesigner extends TargetComponent implements TreeSelection /** * 更新边框线状态 + * * @param e 鼠标事件 */ public void updateDrawLineMode(MouseEvent e) { @@ -761,7 +780,7 @@ public class FormDesigner extends TargetComponent implements TreeSelection // 撤销恢复操作都会refreshRoot,这时候的target.getContainer里的widget会和之前不一样,所以不用root判断来取 XLayoutContainer formLayoutContainer = (XLayoutContainer) XCreatorUtils.createXCreator(this.getTarget().getContainer()); // 布局默认都是1,底层的border改为0,不然没意义 - this.getTarget().getContainer().setMargin(new PaddingMargin(0,0,0,0)); + this.getTarget().getContainer().setMargin(new PaddingMargin(0, 0, 0, 0)); formLayoutContainer.setBorder(null); if (formLayoutContainer.acceptType(XWBorderLayout.class)) { WBorderLayout borderLayout = (WBorderLayout) formLayoutContainer.toData(); @@ -774,7 +793,7 @@ public class FormDesigner extends TargetComponent implements TreeSelection refreshNorth(northWidget, formLayoutContainer); refreshCenter(centerWidget, formLayoutContainer); - } else { + } else { formLayoutContainer.setSize(LARGE_PREFERRED_SIZE); setRootComponent(formLayoutContainer); } @@ -790,9 +809,9 @@ public class FormDesigner extends TargetComponent implements TreeSelection } XLayoutContainer northContainer = (XLayoutContainer) XCreatorUtils.createXCreator(northWidget); - paraHeight = ((XWBorderLayout)formLayoutContainer).toData().getNorthSize(); + paraHeight = ((XWBorderLayout) formLayoutContainer).toData().getNorthSize(); paraComponent = northContainer; - northContainer.setSize(0,paraHeight); + northContainer.setSize(0, paraHeight); formLayoutContainer.add(northContainer, WBorderLayout.NORTH); } @@ -841,14 +860,16 @@ public class FormDesigner extends TargetComponent implements TreeSelection /** * 是否是报表的参数面板 - * @return 否(表单的) + * + * @return 否(表单的) */ - public boolean isFormParaDesigner(){ + public boolean isFormParaDesigner() { return false; } /** - * 是否为底层容器 + * 是否为底层容器 + * * @param comp 组件 * @return 是则返回true */ @@ -923,10 +944,10 @@ public class FormDesigner extends TargetComponent implements TreeSelection } public SelectionModel getSelectionModel() { - if (paraComponent!=null){ - paraComponent.setSize(paraComponent.getWidth(),getParaHeight()); + if (paraComponent != null) { + paraComponent.setSize(paraComponent.getWidth(), getParaHeight()); Rectangle rec = rootComponent.getBounds(); - rootComponent.setBounds(rec.x,getParaHeight(),rec.width,rec.height); + rootComponent.setBounds(rec.x, getParaHeight(), rec.width, rec.height); } return selectionModel; } @@ -941,6 +962,7 @@ public class FormDesigner extends TargetComponent implements TreeSelection /** * 拖拽准备 + * * @param xCreator 组件 */ public void startDraggingBean(XCreator xCreator) { @@ -953,11 +975,12 @@ public class FormDesigner extends TargetComponent implements TreeSelection } /** - * 拖拽时相关处理 - * @param xCreator 组件 + * 拖拽时相关处理 + * + * @param xCreator 组件 * @param lastPressEvent 鼠标事件 - * @param x 坐标x - * @param y 坐标y + * @param x 坐标x + * @param y 坐标y */ public void startDraggingComponent(XCreator xCreator, MouseEvent lastPressEvent, int x, int y) { // 根据所选择的组件的BeanInfo生成相应的AddingModel @@ -978,6 +1001,7 @@ public class FormDesigner extends TargetComponent implements TreeSelection /** * 改变组件值 + * * @param e 组件选择事件 */ @Override @@ -1024,6 +1048,7 @@ public class FormDesigner extends TargetComponent implements TreeSelection /** * 是否支持权限编辑 + * * @return 是则返回true */ public boolean isSupportAuthority() { @@ -1048,7 +1073,8 @@ public class FormDesigner extends TargetComponent implements TreeSelection } /** - * 是否含有action名 + * 是否含有action名 + * * @param name action名 * @return 有则返回true */ @@ -1058,6 +1084,7 @@ public class FormDesigner extends TargetComponent implements TreeSelection /** * 显示组件 + * * @param comp 组件 */ public void makeVisible(XCreator comp) { @@ -1088,14 +1115,14 @@ public class FormDesigner extends TargetComponent implements TreeSelection /** * 返回复制粘贴删除等动作 + * 鼠标右键菜单 + * * @return 同上 */ public Action[] getActions() { if (designer_actions == null) { - //先把复制粘贴按钮去掉,只留下删除 -// designer_actions = new Action[]{new CutAction(this), new CopyAction(this), new PasteAction(this), -// new FormDeleteAction(this)}; - designer_actions = new Action[]{new FormDeleteAction(this)}; + designer_actions = new Action[]{new CutAction(this), new CopyAction(this), new PasteAction(this), + new FormDeleteAction(this)}; } return designer_actions; } @@ -1120,6 +1147,7 @@ public class FormDesigner extends TargetComponent implements TreeSelection /** * 返回表单区域 + * * @return 表单区域 */ public FormArea getArea() { @@ -1128,6 +1156,7 @@ public class FormDesigner extends TargetComponent implements TreeSelection /** * 设置上层区域 + * * @param formArea 表单区域 */ public void setParent(FormArea formArea) { @@ -1136,14 +1165,15 @@ public class FormDesigner extends TargetComponent implements TreeSelection /** * 绘制组件根节点 + * * @param clipg 图形 */ public void paintContent(Graphics clipg) { rootComponent.paint(clipg); } - public void paintPara(Graphics clipg){ - if(paraComponent != null){ + public void paintPara(Graphics clipg) { + if (paraComponent != null) { paraComponent.paint(clipg); } } @@ -1157,6 +1187,7 @@ public class FormDesigner extends TargetComponent implements TreeSelection /** * 返回连线类 + * * @return ConnectorHelper类 */ public ConnectorHelper getDrawLineHelper() { @@ -1164,7 +1195,8 @@ public class FormDesigner extends TargetComponent implements TreeSelection } /** - * 是否画线模式 + * 是否画线模式 + * * @return 是则返回true */ public boolean isDrawLineMode() { @@ -1173,6 +1205,7 @@ public class FormDesigner extends TargetComponent implements TreeSelection /** * 设置DrawLineMode + * * @param mode 是or或 */ public void setDrawLineMode(boolean mode) { @@ -1199,6 +1232,7 @@ public class FormDesigner extends TargetComponent implements TreeSelection /** * 返回表单控件权限编辑pane + * * @return 同上 */ public AuthorityEditPane createAuthorityEditPane() { @@ -1249,6 +1283,7 @@ public class FormDesigner extends TargetComponent implements TreeSelection /** * 粘贴 + * * @return 否 */ @Override @@ -1259,6 +1294,7 @@ public class FormDesigner extends TargetComponent implements TreeSelection /** * 剪切 + * * @return 否 */ @Override @@ -1273,6 +1309,7 @@ public class FormDesigner extends TargetComponent implements TreeSelection /** * 工具栏菜单 + * * @return 同上 */ @Override @@ -1286,6 +1323,7 @@ public class FormDesigner extends TargetComponent implements TreeSelection /** * 模版菜单 + * * @return 同上 */ @Override @@ -1295,6 +1333,7 @@ public class FormDesigner extends TargetComponent implements TreeSelection /** * 权限菜单 + * * @return 同上 */ public ShortCut[] shortCuts4Authority() { @@ -1304,6 +1343,7 @@ public class FormDesigner extends TargetComponent implements TreeSelection /** * 返回ToolBarDef + * * @return 同上 */ @Override @@ -1313,10 +1353,12 @@ public class FormDesigner extends TargetComponent implements TreeSelection /** * 返回工具栏按钮组件 + * * @return 同上 */ public JComponent[] toolBarButton4Form() { - return new JComponent[0]; + return new JComponent[]{new CutAction(this).createToolBarComponent(), new CopyAction(this).createToolBarComponent(), new PasteAction(this).createToolBarComponent(), + new FormDeleteAction(this).createToolBarComponent()}; } diff --git a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java index fc6391225..202537c4a 100644 --- a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java +++ b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java @@ -1,13 +1,13 @@ package com.fr.design.mainframe; -import java.awt.Component; -import java.awt.Rectangle; -import java.awt.Toolkit; +import java.awt.*; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import com.fr.base.FRContext; +import com.fr.design.designer.beans.adapters.layout.AbstractLayoutAdapter; +import com.fr.form.ui.container.WLayout; import com.fr.general.ComparatorUtils; import com.fr.design.designer.beans.LayoutAdapter; import com.fr.design.designer.beans.events.DesignerEvent; @@ -15,112 +15,199 @@ import com.fr.design.designer.creator.XCreator; import com.fr.design.designer.creator.XCreatorUtils; import com.fr.design.designer.creator.XLayoutContainer; import com.fr.design.designer.creator.XWAbsoluteLayout; -import com.fr.form.main.ClonedWidgetCreator; import com.fr.form.ui.Widget; public class FormSelectionUtils { - public static void paste2Container(FormDesigner designer, XLayoutContainer parent, FormSelection selection, int x, - int y) { - LayoutAdapter adapter = parent.getLayoutAdapter(); - if (selection.size() == 1) { - try { - XCreator creator = selection.getSelectedCreator(); - Widget cloned = new ClonedWidgetCreator(designer.getTarget()).clonedWidgetWithNoRepeatName(creator - .toData()); - XCreator clondCreator = XCreatorUtils.createXCreator(cloned, creator.getSize()); - if (adapter.addBean(clondCreator, x + clondCreator.getWidth() / 2, y + clondCreator.getHeight() / 2)) { - designer.getSelectionModel().getSelection().setSelectedCreator(clondCreator); - designer.getEditListenerTable().fireCreatorModified(clondCreator, DesignerEvent.CREATOR_PASTED); - return; - } - } catch (CloneNotSupportedException e) { - FRContext.getLogger().error(e.getMessage(), e); - } - } else if (selection.size() > 1) { - if (parent instanceof XWAbsoluteLayout) { - designer.getSelectionModel().getSelection().reset(); - Rectangle rec = selection.getSelctionBounds(); - for (XCreator creator : selection.getSelectedCreators()) { - try { - Widget cloned = new ClonedWidgetCreator(designer.getTarget()) - .clonedWidgetWithNoRepeatName(creator.toData()); - XCreator clondCreator = XCreatorUtils.createXCreator(cloned, creator.getSize()); - // 设置位置,移动20x20,防止被粘帖的组件重叠,照顾表单布局情况下 - adapter.addBean(clondCreator, x + creator.getX() - rec.x + clondCreator.getWidth() / 2, y - + creator.getY() - rec.y + clondCreator.getHeight() / 2); - designer.getSelectionModel().getSelection().addSelectedCreator(clondCreator); - } catch (CloneNotSupportedException e) { - FRContext.getLogger().error(e.getMessage(), e); - } - } - designer.getEditListenerTable().fireCreatorModified( - designer.getSelectionModel().getSelection().getSelectedCreator(), DesignerEvent.CREATOR_PASTED); - return; - } - } - Toolkit.getDefaultToolkit().beep(); - } - - public static void rebuildSelection(FormDesigner designer) { - ArrayList newSelection = new ArrayList(); - List widgetList = new ArrayList(); - for (XCreator comp : designer.getSelectionModel().getSelection().getSelectedCreators()) { - widgetList.add(comp.toData()); - } - designer.getSelectionModel().setSelectedCreators( - rebuildSelection(designer.getRootComponent(), widgetList, newSelection)); - } - - public static ArrayList rebuildSelection(XCreator rootComponent, Widget[] selectWidgets) { - List selectionWidget = new ArrayList(); - if(selectWidgets != null){ - selectionWidget.addAll(Arrays.asList(selectWidgets)); - } - return FormSelectionUtils.rebuildSelection(rootComponent, selectionWidget, new ArrayList()); - } - - private static ArrayList rebuildSelection(XCreator rootComponent, List selectionWidget, - ArrayList newSelection) { - FormSelectionUtils._rebuild(rootComponent, selectionWidget, newSelection); - if (newSelection.isEmpty()) { - newSelection.add(rootComponent); - } - return newSelection; - } - - private static void _rebuild(XCreator root, List selectionWidget, List newSelection) { - if (selectionWidget.isEmpty()) { - return; - } - for (Widget x : selectionWidget) { - if (ComparatorUtils.equals(x, root.toData())) { - if (!newSelection.contains(root)) { - newSelection.add(root); - selectionWidget.remove(x); - } - break; - } - } - - int count = root.getComponentCount(); - for (int i = 0; i < count && !selectionWidget.isEmpty(); i++) { - Component c = root.getComponent(i); - if (c instanceof XCreator) { - XCreator creator = (XCreator) c; - for (Widget x : selectionWidget) { - if (ComparatorUtils.equals(x, creator.toData())) { - newSelection.add(creator); - selectionWidget.remove(x); - break; - } - } - if (c instanceof XLayoutContainer) { - _rebuild((XLayoutContainer) c, selectionWidget, newSelection); - } else { - continue; - } - } - } - } + //组件复制时坐标偏移 + private static final int DELAY_X = 20; + private static final int DELAY_Y = 20; + + //组件复制时是否已经向左上偏移 + private static boolean BACK_OFFSET = false; + + //组件重命名后缀 + private static final String postfix = "_c"; + + /** + * @param designer 编辑器 + * @param parent 粘贴依据的组件 + * @param clipBoard 剪贴板内容 + * @param x x + * @param y y + */ + public static void paste2Container(FormDesigner designer, XLayoutContainer parent, FormSelection clipBoard, int x, + int y) { + LayoutAdapter adapter = parent.getLayoutAdapter(); + if (parent instanceof XWAbsoluteLayout) { + designer.getSelectionModel().getSelection().reset(); + Rectangle rec = clipBoard.getSelctionBounds(); + for (XCreator creator : clipBoard.getSelectedCreators()) { + try { + Widget copied = copyWidget(designer, creator.toData()); + XCreator copiedCreator = XCreatorUtils.createXCreator(copied, creator.getSize()); + // 获取位置 + Point point = getPasteLocation((AbstractLayoutAdapter) adapter, + copiedCreator, + x + creator.getX() - rec.x + copiedCreator.getWidth() / 2, + y + creator.getY() - rec.y + copiedCreator.getHeight() / 2); + boolean addSuccess = adapter.addBean(copiedCreator, point.x, point.y); + + if (addSuccess) { + designer.getSelectionModel().getSelection().addSelectedCreator(copiedCreator); + } + + } catch (CloneNotSupportedException e) { + FRContext.getLogger().error(e.getMessage(), e); + } + } + rebuildSelection(designer); + designer.getEditListenerTable().fireCreatorModified( + designer.getSelectionModel().getSelection().getSelectedCreator(), DesignerEvent.CREATOR_PASTED); + return; + } + Toolkit.getDefaultToolkit().beep(); + } + + /** + * 组件复用绝对布局获取粘贴组件位置 + * + * @param layoutAdapter 绝对布局容器AbstractLayoutAdapter + * @param copiedCreator 复制的组件 + * @param x x=组件x + clonedCreator.getWidth() / 2 + * @param y y=组件y + clonedCreator.getHeight() / 2 + * 除2的步骤会导致当宽度或者高度为奇数是,中心点向左上各偏移一个像素 + * 由于中心点向左上各偏移一个像素,依赖中心点计算的右下点就会相应的想做上偏移一个像素,导致结果不准确 + * @return 新位置坐标 + */ + private static Point getPasteLocation(AbstractLayoutAdapter layoutAdapter, XCreator copiedCreator, int x, int y) { + //当宽度为奇数时 设置偏移 + int x_offset = (copiedCreator.getWidth() & 1) == 1 ? 1 : 0; + //当高度为奇数时 设置偏移 + int y_offset = (copiedCreator.getHeight() & 1) == 1 ? 1 : 0; + + if (!layoutAdapter.accept(copiedCreator, x, y)) { + XLayoutContainer container = layoutAdapter.getContainer(); + boolean xOut = x < 0 || x + copiedCreator.getWidth() / 2 + x_offset > container.getWidth(); + boolean yOut = y < 0 || y + copiedCreator.getHeight() / 2 + y_offset > container.getHeight(); + /* + * 组件原始位置位于布局的右下角, + * 和布局右下边界线紧挨, + * 粘贴时组件在原始位置向左错开20像素。 + * x,y同时越界 + */ + if (xOut && yOut) { + x = BACK_OFFSET ? container.getWidth() - copiedCreator.getWidth() / 2 - x_offset + : container.getWidth() - copiedCreator.getWidth() / 2 - DELAY_X - x_offset; + y = BACK_OFFSET ? + container.getHeight() - copiedCreator.getHeight() / 2 - y_offset + : container.getHeight() - copiedCreator.getHeight() / 2 - DELAY_Y - y_offset; + BACK_OFFSET = !BACK_OFFSET; + return new Point(x, y); + } + /* + * 组件原始位置与布局边界距离小于20像素(下边界&右边界同时小于或者任意一个边界小于), + * 则粘贴时距离小于20像素一侧直接贴近布局边界, + * 距离大于20像素的一侧正常错开。 + * x,y中只有一个越界 + */ + else if ((xOut || yOut)) { + x = xOut ? container.getWidth() - copiedCreator.getWidth() / 2 - x_offset : x; + y = yOut ? container.getHeight() - copiedCreator.getHeight() / 2 - y_offset : y; + return new Point(x, y); + } + } + return new Point(x, y); + } + + + private static Widget copyWidget(FormDesigner formDesigner, Widget widget) throws + CloneNotSupportedException { + ArrayList clonedNameList = new ArrayList(); + Widget copied = (Widget) widget.clone(); + //重命名拷贝的组件 + setCopiedName(formDesigner, copied, clonedNameList); + if (copied instanceof WLayout) { + for (int i = 0; i < ((WLayout) copied).getWidgetCount(); i++) { + setCopiedName(formDesigner, ((WLayout) copied).getWidget(i), clonedNameList); + } + } + return copied; + } + + /** + * 组件拷贝命名规则 + * + * @param formDesigner + * @param copied + * @param clonedNameList + */ + private static void setCopiedName(FormDesigner formDesigner, Widget copied, ArrayList clonedNameList) { + String name = copied.getWidgetName(); + do { + name += postfix; + } while (formDesigner.getTarget().isNameExist(name) || clonedNameList.contains(name)); + copied.setWidgetName(name); + clonedNameList.add(name); + } + + public static void rebuildSelection(FormDesigner designer) { + ArrayList newSelection = new ArrayList(); + List widgetList = new ArrayList(); + for (XCreator comp : designer.getSelectionModel().getSelection().getSelectedCreators()) { + widgetList.add(comp.toData()); + } + designer.getSelectionModel().setSelectedCreators( + rebuildSelection(designer.getRootComponent(), widgetList, newSelection)); + } + + public static ArrayList rebuildSelection(XCreator rootComponent, Widget[] selectWidgets) { + List selectionWidget = new ArrayList(); + if (selectWidgets != null) { + selectionWidget.addAll(Arrays.asList(selectWidgets)); + } + return FormSelectionUtils.rebuildSelection(rootComponent, selectionWidget, new ArrayList()); + } + + private static ArrayList rebuildSelection(XCreator rootComponent, List selectionWidget, + ArrayList newSelection) { + FormSelectionUtils._rebuild(rootComponent, selectionWidget, newSelection); + if (newSelection.isEmpty()) { + newSelection.add(rootComponent); + } + return newSelection; + } + + private static void _rebuild(XCreator root, List selectionWidget, List newSelection) { + if (selectionWidget.isEmpty()) { + return; + } + for (Widget x : selectionWidget) { + if (ComparatorUtils.equals(x, root.toData())) { + if (!newSelection.contains(root)) { + newSelection.add(root); + selectionWidget.remove(x); + } + break; + } + } + + int count = root.getComponentCount(); + for (int i = 0; i < count && !selectionWidget.isEmpty(); i++) { + Component c = root.getComponent(i); + if (c instanceof XCreator) { + XCreator creator = (XCreator) c; + for (Widget x : selectionWidget) { + if (ComparatorUtils.equals(x, creator.toData())) { + newSelection.add(creator); + selectionWidget.remove(x); + break; + } + } + if (c instanceof XLayoutContainer) { + _rebuild((XLayoutContainer) c, selectionWidget, newSelection); + } + } + } + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/mainframe/JForm.java b/designer_form/src/com/fr/design/mainframe/JForm.java index 7c912ede0..5fafd28e2 100644 --- a/designer_form/src/com/fr/design/mainframe/JForm.java +++ b/designer_form/src/com/fr/design/mainframe/JForm.java @@ -4,10 +4,12 @@ import com.fr.base.BaseUtils; import com.fr.design.DesignState; import com.fr.design.actions.core.WorkBookSupportable; import com.fr.design.actions.file.WebPreviewUtils; -import com.fr.design.mainframe.actions.FormMobileAttrAction; import com.fr.design.cell.FloatElementsProvider; import com.fr.design.constants.UIConstants; +import com.fr.design.designer.beans.actions.CopyAction; +import com.fr.design.designer.beans.actions.CutAction; import com.fr.design.designer.beans.actions.FormDeleteAction; +import com.fr.design.designer.beans.actions.PasteAction; import com.fr.design.designer.beans.events.DesignerEditListener; import com.fr.design.designer.beans.events.DesignerEvent; import com.fr.design.designer.creator.*; @@ -20,6 +22,7 @@ import com.fr.design.gui.imenu.UIMenuItem; import com.fr.design.gui.xpane.FormHyperlinkGroupPane; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.actions.EmbeddedFormExportExportAction; +import com.fr.design.mainframe.actions.FormMobileAttrAction; import com.fr.design.mainframe.actions.TemplateParameterAction; import com.fr.design.mainframe.form.FormECCompositeProvider; import com.fr.design.mainframe.form.FormECDesignerProvider; @@ -264,10 +267,10 @@ public class JForm extends JTemplate implements BaseJForm { } - @Override /** - *焦点放到JForm + * 焦点放到JForm */ + @Override public void requestFocus() { super.requestFocus(); formDesign.requestFocus(); @@ -281,12 +284,12 @@ public class JForm extends JTemplate implements BaseJForm { formDesign.requestFocus(); } - @Override /** * 保存文件的后缀名 * * @return 返回后缀名 */ + @Override public String suffix() { // daniel改成三个字 return ".frm"; @@ -319,30 +322,33 @@ public class JForm extends JTemplate implements BaseJForm { formDesign.getEditListenerTable().fireCreatorModified(DesignerEvent.CREATOR_SELECTED); } - @Override + /** - *复制 f + * 复制 */ + @Override public void copy() { this.formDesign.copy(); } - @Override + /** - * * 粘贴 + * * @return 是否成功 */ + @Override public boolean paste() { return this.formDesign.paste(); } - @Override + /** - * * 剪切 + * * @return 是否成功 */ + @Override public boolean cut() { return this.formDesign.cut(); } @@ -352,36 +358,38 @@ public class JForm extends JTemplate implements BaseJForm { // //////////////////////////////////////////////////////////////////// - @Override /** * 目标菜单 * * @return 菜单 */ + @Override public MenuDef[] menus4Target() { return this.index == FORM_TAB ? (MenuDef[]) ArrayUtils.addAll(super.menus4Target(), this.formDesign.menus4Target()) : (MenuDef[]) ArrayUtils.addAll(super.menus4Target(), this.elementCaseDesign.menus4Target()); } - @Override + /** - * 模板的工具 + * 模板的工具 * * @return 工具 */ + @Override public ToolBarDef[] toolbars4Target() { return this.index == FORM_TAB ? this.formDesign.toolbars4Target() : this.elementCaseDesign.toolbars4Target(); } - @Override + /** * 模板菜单 * * @return 返回菜单 */ + @Override public ShortCut[] shortcut4TemplateMenu() { if (this.index == FORM_TAB) { return (ShortCut[]) ArrayUtils.addAll(new ShortCut[]{ @@ -407,11 +415,6 @@ public class JForm extends JTemplate implements BaseJForm { } @Override - /** - * undo的表单state - * - * @return 表单State - */ protected FormUndoState createUndoState() { FormUndoState cur = new FormUndoState(this, this.formDesign.getArea()); if (this.formDesign.isReportBlockEditing()) { @@ -445,17 +448,15 @@ public class JForm extends JTemplate implements BaseJForm { // 假如当前body是绝对布局的话就返回绝对布局body private XLayoutContainer selectedBodyLayout() { XLayoutContainer rootLayout = formDesign.getRootComponent(); - for (int i = 0; i < rootLayout.getComponentCount(); i++){ - if (rootLayout.getXCreator(i).acceptType(XWAbsoluteBodyLayout.class)){ - rootLayout = (XWAbsoluteBodyLayout)rootLayout.getXCreator(i); + for (int i = 0; i < rootLayout.getComponentCount(); i++) { + if (rootLayout.getXCreator(i).acceptType(XWAbsoluteBodyLayout.class)) { + rootLayout = (XWAbsoluteBodyLayout) rootLayout.getXCreator(i); } } return rootLayout; } + @Override - /** - * 应用undoState的表单数据 - */ protected void applyUndoState(FormUndoState u) { try { //JForm的target重置 @@ -487,19 +488,11 @@ public class JForm extends JTemplate implements BaseJForm { } @Override - /** - * - */ protected FormModelAdapter createDesignModel() { return new FormModelAdapter(this); } @Override - /** - * 表单的工具栏 - * - * @return 表单工具栏 - */ public JPanel[] toolbarPanes4Form() { return this.index == FORM_TAB ? new JPanel[]{FormParaWidgetPane.getInstance(formDesign)} : @@ -514,10 +507,9 @@ public class JForm extends JTemplate implements BaseJForm { public JComponent[] toolBarButton4Form() { return this.index == FORM_TAB ? new JComponent[]{ - //自适应布局里的复制粘贴意义不大, 先屏蔽掉 -// new CutAction(formDesign).createToolBarComponent(), -// new CopyAction(formDesign).createToolBarComponent(), -// new PasteAction(formDesign).createToolBarComponent(), + new CutAction(formDesign).createToolBarComponent(), + new CopyAction(formDesign).createToolBarComponent(), + new PasteAction(formDesign).createToolBarComponent(), new FormDeleteAction(formDesign).createToolBarComponent()} : elementCaseDesign.toolBarButton4Form(); } diff --git a/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java b/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java index f79eca1a9..ac46da031 100644 --- a/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java +++ b/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java @@ -251,7 +251,8 @@ public class MobileWidgetTable extends JTable { } //选择的控件 - Widget selectedModel = designer.getSelectionModel().getSelection().getSelectedCreator().toData(); + XCreator selectedCreator = designer.getSelectionModel().getSelection().getSelectedCreator(); + Widget selectedModel = selectedCreator != null ? selectedCreator.toData() : null; if(selectedModel == null){ return new String[0][0]; diff --git a/designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java b/designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java index 33736ac0a..9ea163d65 100644 --- a/designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java +++ b/designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java @@ -155,11 +155,11 @@ public class WidgetPropertyPane extends FormDockView implements BaseWidgetProper //只有放到JScrollPanel中去表头才能正常显示,这就是MobileWidgetTable中定义了表头却没有显示的原因! //解决方案:MobileWidgetTable实在无法直接放到JScrollPanel中去的时候,应该把表头get出来单独作为一个组件显示 - if(hasSelectParaPane(designer)){ - cardLayout.show(centerPane,PARA); + if (hasSelectParaPane(designer)) { + cardLayout.show(centerPane, PARA); header = mobileParaWidgetTable.getTableHeader(); } else { - cardLayout.show(centerPane,BODY); + cardLayout.show(centerPane, BODY); header = mobileWidgetTable.getTableHeader(); } downPanel = new UIScrollPane(centerPane); @@ -200,6 +200,7 @@ public class WidgetPropertyPane extends FormDockView implements BaseWidgetProper /** * 判断是将拓展的tab放入属性表还是将原来的tab放入属性表 + * * @param widgetAttrProviders 拓展的tab */ private void addWidgetAttr(WidgetPropertyUIProvider[] widgetAttrProviders) { @@ -219,6 +220,7 @@ public class WidgetPropertyPane extends FormDockView implements BaseWidgetProper /** * 如果是body的拓展属性表,那么要额外加上一张控件顺序表 + * * @return */ private Component getExtraBodyTable(AbstractPropertyTable abstractPropertyTable) { @@ -243,18 +245,20 @@ public class WidgetPropertyPane extends FormDockView implements BaseWidgetProper tabbedPane.addTab(Inter.getLocText("FR-Widget_Mobile_Terminal"), wsp); } - // + /** * 选中的组件是否在参数面板里 - * @param designer 设计器 - * @return 是则返回true + * + * @param designer 设计器 + * @return 是则返回true */ - public boolean hasSelectParaPane(FormDesigner designer){ + public boolean hasSelectParaPane(FormDesigner designer) { XCreator xCreator = designer.getSelectionModel().getSelection().getSelectedCreator(); - if(xCreator == null){ + if (xCreator == null) { xCreator = designer.getRootComponent(); } XLayoutContainer container = XCreatorUtils.getHotspotContainer(xCreator); + //TODO container可能为空,引发空指针异常 return xCreator.acceptType(XWParameterLayout.class) || container.acceptType(XWParameterLayout.class); } @@ -334,8 +338,9 @@ public class WidgetPropertyPane extends FormDockView implements BaseWidgetProper } /** - * 响应界面改变事件 - * @param evt 事件 + * 响应界面改变事件 + * + * @param evt 事件 */ public void fireCreatorModified(DesignerEvent evt) { if (evt.getCreatorEventID() == DesignerEvent.CREATOR_RESIZED @@ -343,11 +348,11 @@ public class WidgetPropertyPane extends FormDockView implements BaseWidgetProper || evt.getCreatorEventID() == DesignerEvent.CREATOR_SELECTED || evt.getCreatorEventID() == DesignerEvent.CREATOR_ADDED) { int value = downPanel.getVerticalScrollBar().getValue(); - if(hasSelectParaPane(getEditingFormDesigner())){ - cardLayout.show(centerPane,PARA); + if (hasSelectParaPane(getEditingFormDesigner())) { + cardLayout.show(centerPane, PARA); mobileParaWidgetTable.refreshData(); } else { - cardLayout.show(centerPane,BODY); + cardLayout.show(centerPane, BODY); mobileWidgetTable.refreshData(); } //出现滚动条 From 0a76edfca6ba19f4eb1363fd172b47cdf802afc1 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Wed, 22 Mar 2017 20:23:30 +0800 Subject: [PATCH 201/343] rename --- .../creator/DedicateLayoutContainer.java | 134 ++++++++++-------- .../design/mainframe/FormSelectionUtils.java | 33 +++-- .../design/mainframe/WidgetPropertyPane.java | 3 +- 3 files changed, 92 insertions(+), 78 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/creator/DedicateLayoutContainer.java b/designer_form/src/com/fr/design/designer/creator/DedicateLayoutContainer.java index 5b2f35c05..a31999f68 100644 --- a/designer_form/src/com/fr/design/designer/creator/DedicateLayoutContainer.java +++ b/designer_form/src/com/fr/design/designer/creator/DedicateLayoutContainer.java @@ -1,5 +1,5 @@ /** - * + * */ package com.fr.design.designer.creator; @@ -11,78 +11,86 @@ import java.util.ArrayList; /** * 一些控件专属的容器,如标题容器,sclae容器 + * * @author jim * @date 2014-11-7 */ public abstract class DedicateLayoutContainer extends XLayoutContainer { - public DedicateLayoutContainer(WLayout widget, Dimension initSize) { - super(widget, initSize); - } - - /** - * 得到属性名 + public DedicateLayoutContainer(WLayout widget, Dimension initSize) { + super(widget, initSize); + } + + /** + * 得到属性名 + * * @return 属性名 * @throws IntrospectionException */ - public CRPropertyDescriptor[] supportedDescriptor() throws IntrospectionException { - return new CRPropertyDescriptor[0]; - } - - /** - * 返回容器图标 - * - * @return - */ - @Override - public String getIconPath() { - if(this.getXCreator(XWScaleLayout.INDEX) != null){ + public CRPropertyDescriptor[] supportedDescriptor() throws IntrospectionException { + return new CRPropertyDescriptor[0]; + } + + /** + * 返回容器图标 + * + * @return + */ + @Override + public String getIconPath() { + if (this.getXCreator(XWScaleLayout.INDEX) != null) { return this.getXCreator(XWScaleLayout.INDEX).getIconPath(); } - return "/com/fr/web/images/form/resources/text_field_16.png"; - } + return "/com/fr/web/images/form/resources/text_field_16.png"; + } + - - /** - * 控件树不显示此组件 - * @param path 控件树list - */ - public void notShowInComponentTree(ArrayList path) { - path.remove(path.size()-1); - } - - /** - * 重置组件的名称 - * @param name 名称 - */ - public void resetCreatorName(String name) { - super.resetCreatorName(name); - XCreator child = getXCreator(XWScaleLayout.INDEX); - child.toData().setWidgetName(name); - } - - /** - * 返回对应属性表的组件,scale和title返回其子组件 - * @return 组件 - */ - public XCreator getPropertyDescriptorCreator() { - return getXCreator(XWScaleLayout.INDEX); - } - - /** - * 是否作为控件树的叶子节点 - * @return 是则返回true - */ - public boolean isComponentTreeLeaf() { - return true; - } - - /** - * 是否为sclae和title专属容器 - * @return 是则返回true - */ - public boolean isDedicateContainer() { - return true; - } + /** + * 控件树不显示此组件 + * + * @param path 控件树list + */ + public void notShowInComponentTree(ArrayList path) { + path.remove(path.size() - 1); + } + + /** + * 重置组件的名称 + * + * @param name 名称 + */ + public void resetCreatorName(String name) { + super.resetCreatorName(name); + XCreator child = getXCreator(XWScaleLayout.INDEX); + //TODO 这里是怎么实现改名的 + child.toData().setWidgetName(name); + } + + /** + * 返回对应属性表的组件,scale和title返回其子组件 + * + * @return 组件 + */ + public XCreator getPropertyDescriptorCreator() { + return getXCreator(XWScaleLayout.INDEX); + } + + /** + * 是否作为控件树的叶子节点 + * + * @return 是则返回true + */ + public boolean isComponentTreeLeaf() { + return true; + } + + /** + * 是否为sclae和title专属容器 + * + * @return 是则返回true + */ + public boolean isDedicateContainer() { + return true; + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java index 202537c4a..e96080e4d 100644 --- a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java +++ b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java @@ -7,14 +7,12 @@ import java.util.List; import com.fr.base.FRContext; import com.fr.design.designer.beans.adapters.layout.AbstractLayoutAdapter; +import com.fr.design.designer.creator.*; import com.fr.form.ui.container.WLayout; +import com.fr.form.ui.container.WTitleLayout; import com.fr.general.ComparatorUtils; import com.fr.design.designer.beans.LayoutAdapter; import com.fr.design.designer.beans.events.DesignerEvent; -import com.fr.design.designer.creator.XCreator; -import com.fr.design.designer.creator.XCreatorUtils; -import com.fr.design.designer.creator.XLayoutContainer; -import com.fr.design.designer.creator.XWAbsoluteLayout; import com.fr.form.ui.Widget; public class FormSelectionUtils { @@ -44,7 +42,7 @@ public class FormSelectionUtils { Rectangle rec = clipBoard.getSelctionBounds(); for (XCreator creator : clipBoard.getSelectedCreators()) { try { - Widget copied = copyWidget(designer, creator.toData()); + Widget copied = copyWidget(designer, creator); XCreator copiedCreator = XCreatorUtils.createXCreator(copied, creator.getSize()); // 获取位置 Point point = getPasteLocation((AbstractLayoutAdapter) adapter, @@ -121,17 +119,23 @@ public class FormSelectionUtils { } - private static Widget copyWidget(FormDesigner formDesigner, Widget widget) throws + private static Widget copyWidget(FormDesigner formDesigner, XCreator xCreator) throws CloneNotSupportedException { ArrayList clonedNameList = new ArrayList(); - Widget copied = (Widget) widget.clone(); + Widget copied = (Widget) xCreator.toData().clone(); //重命名拷贝的组件 - setCopiedName(formDesigner, copied, clonedNameList); - if (copied instanceof WLayout) { - for (int i = 0; i < ((WLayout) copied).getWidgetCount(); i++) { - setCopiedName(formDesigner, ((WLayout) copied).getWidget(i), clonedNameList); - } + String name = getCopiedName(formDesigner, copied, clonedNameList); + if (copied instanceof WTitleLayout) { + XWTitleLayout xwTitleLayout = new XWTitleLayout((WTitleLayout) copied, xCreator.getSize()); + xwTitleLayout.resetCreatorName(name); + } else { + copied.setWidgetName(name); } +// if (copied instanceof WLayout) { +// for (int i = 0; i < ((WLayout) copied).getWidgetCount(); i++) { +// setCopiedName(formDesigner, ((WLayout) copied).getWidget(i), clonedNameList); +// } +// } return copied; } @@ -141,14 +145,15 @@ public class FormSelectionUtils { * @param formDesigner * @param copied * @param clonedNameList + * @return name */ - private static void setCopiedName(FormDesigner formDesigner, Widget copied, ArrayList clonedNameList) { + private static String getCopiedName(FormDesigner formDesigner, Widget copied, ArrayList clonedNameList) { String name = copied.getWidgetName(); do { name += postfix; } while (formDesigner.getTarget().isNameExist(name) || clonedNameList.contains(name)); - copied.setWidgetName(name); clonedNameList.add(name); + return name; } public static void rebuildSelection(FormDesigner designer) { diff --git a/designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java b/designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java index 9ea163d65..533ca9dc0 100644 --- a/designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java +++ b/designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java @@ -147,7 +147,8 @@ public class WidgetPropertyPane extends FormDockView implements BaseWidgetProper designer.addDesignerEditListener(new mobileWidgetDesignerAdapter()); centerPane = FRGUIPaneFactory.createCardLayout_S_Pane(); cardLayout = (CardLayout) centerPane.getLayout(); - centerPane.add(mobileParaWidgetTable, PARA);// 采用卡片布局的容器必须指定卡片名字,如果没有卡片名字 + centerPane.add(mobileParaWidgetTable, PARA); + // 采用卡片布局的容器必须指定卡片名字,如果没有卡片名字 // 就会出现:Exception in thread "main" java.lang.IllegalArgumentException: // cannot add to layout: constraint must be a string // 第二个参数代表卡片的名字。后来show方法调用时通过名字找到要显示的卡片 From 47fe2434180fab8f939e05a140640bd21d2da0f1 Mon Sep 17 00:00:00 2001 From: plough Date: Thu, 23 Mar 2017 09:27:12 +0800 Subject: [PATCH 202/343] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/templateinfo/TemplateInfoCollector.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java index 8b987dc05..4f7069205 100644 --- a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java @@ -113,7 +113,7 @@ public class TemplateInfoCollector implements Serializable { private void saveInfo() { try { ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(getInfoFile())); - System.out.println("写入:" + instance.templateInfoList); + FRLogger.getLogger().info("writing: " + instance.templateInfoList); os.writeObject(instance); os.close(); } catch (Exception ex) { From d5bfb700b78be1fef00195f5573898b5cc569035 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Thu, 23 Mar 2017 09:33:35 +0800 Subject: [PATCH 203/343] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer/creator/DedicateLayoutContainer.java | 2 +- .../com/fr/design/mainframe/FormSelectionUtils.java | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/creator/DedicateLayoutContainer.java b/designer_form/src/com/fr/design/designer/creator/DedicateLayoutContainer.java index a31999f68..d929399d4 100644 --- a/designer_form/src/com/fr/design/designer/creator/DedicateLayoutContainer.java +++ b/designer_form/src/com/fr/design/designer/creator/DedicateLayoutContainer.java @@ -62,7 +62,7 @@ public abstract class DedicateLayoutContainer extends XLayoutContainer { public void resetCreatorName(String name) { super.resetCreatorName(name); XCreator child = getXCreator(XWScaleLayout.INDEX); - //TODO 这里是怎么实现改名的 + //实现WTitleLayout的SetWidgetName child.toData().setWidgetName(name); } diff --git a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java index e96080e4d..8816e1c8b 100644 --- a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java +++ b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java @@ -121,10 +121,10 @@ public class FormSelectionUtils { private static Widget copyWidget(FormDesigner formDesigner, XCreator xCreator) throws CloneNotSupportedException { - ArrayList clonedNameList = new ArrayList(); + ArrayList nameSpace = new ArrayList(); Widget copied = (Widget) xCreator.toData().clone(); //重命名拷贝的组件 - String name = getCopiedName(formDesigner, copied, clonedNameList); + String name = getCopiedName(formDesigner, copied, nameSpace); if (copied instanceof WTitleLayout) { XWTitleLayout xwTitleLayout = new XWTitleLayout((WTitleLayout) copied, xCreator.getSize()); xwTitleLayout.resetCreatorName(name); @@ -144,15 +144,15 @@ public class FormSelectionUtils { * * @param formDesigner * @param copied - * @param clonedNameList + * @param nameSpace * @return name */ - private static String getCopiedName(FormDesigner formDesigner, Widget copied, ArrayList clonedNameList) { + private static String getCopiedName(FormDesigner formDesigner, Widget copied, ArrayList nameSpace) { String name = copied.getWidgetName(); do { name += postfix; - } while (formDesigner.getTarget().isNameExist(name) || clonedNameList.contains(name)); - clonedNameList.add(name); + } while (formDesigner.getTarget().isNameExist(name) || nameSpace.contains(name)); + nameSpace.add(name); return name; } From 6bad68469e767148c6eccc34aa250b91e3d688b6 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Thu, 23 Mar 2017 15:49:44 +0800 Subject: [PATCH 204/343] =?UTF-8?q?FRM=E7=BB=84=E4=BB=B6=E5=A4=8D=E7=94=A8?= =?UTF-8?q?=EF=BC=8C=E6=96=87=E4=BB=B6=E9=97=B4=E7=9B=B8=E4=BA=92=E5=A4=8D?= =?UTF-8?q?=E5=88=B6=EF=BC=8C=E9=81=97=E7=95=99=EF=BC=9A=E8=87=AA=E9=80=82?= =?UTF-8?q?=E5=BA=94to=E7=BB=9D=E5=AF=B9=E4=BC=9A=E5=9B=A0=E5=A4=A7?= =?UTF-8?q?=E5=B0=8F=E8=B6=85=E5=87=BA=E8=80=8C=E4=B8=8D=E8=83=BD=E5=A4=8D?= =?UTF-8?q?=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer/beans/models/SelectionModel.java | 56 ++++++++++++++----- .../design/mainframe/FormSelectionUtils.java | 28 +++++++++- 2 files changed, 69 insertions(+), 15 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java index 75bacfff5..9bde1f4ed 100644 --- a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java +++ b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java @@ -113,12 +113,22 @@ public class SelectionModel { XLayoutContainer parent = null; if (!hasSelectionComponent()) { if (designer.getClass().equals(FormDesigner.class)) { - //编辑器外面还有两层容器,使用designer.getRootComponent()获取到的是编辑器中层的容器,不是编辑器表层 - //当前选择的就是编辑器表层 - FormSelectionUtils.paste2Container(designer, (XLayoutContainer) selection.getSelectedCreator(), - CLIP_BOARD, - DELTA_X_Y, - DELTA_X_Y); + + if (selection.getSelectedCreator() instanceof XWFitLayout) { + //相对布局 + FormSelectionUtils.paste2Container(designer, designer.getRootComponent(), + CLIP_BOARD, + DELTA_X_Y, + DELTA_X_Y); + } else { + //绝对布局 + //编辑器外面还有两层容器,使用designer.getRootComponent()获取到的是编辑器中层的容器,不是编辑器表层 + //当前选择的就是编辑器表层 + FormSelectionUtils.paste2Container(designer, (XLayoutContainer) selection.getSelectedCreator(), + CLIP_BOARD, + DELTA_X_Y, + DELTA_X_Y); + } } else { //cpt本地组件复用,编辑器就一层,是最底层,使用designer.getRootComponent()就可以获取到 //使用selection.getSelectedCreator()也应该是可以获取到的。 @@ -130,9 +140,19 @@ public class SelectionModel { } else { //获取到编辑器的表层容器(已选的组件的父容器就是表层容器) parent = XCreatorUtils.getParentXLayoutContainer(selection.getSelectedCreator()); - if (parent != null) { - Rectangle rec = selection.getSelctionBounds(); - FormSelectionUtils.paste2Container(designer, parent, CLIP_BOARD, rec.x + DELTA_X_Y, rec.y + DELTA_X_Y); + if (selection.getSelectedCreator().getParent() instanceof XWFitLayout) { + //相对布局 + if (parent != null) { + Rectangle rec = selection.getSelctionBounds(); + FormSelectionUtils.paste2Container(designer, parent, CLIP_BOARD, rec.x + rec.width / 2, rec.y + + rec.height - 2); + } + } else if (selection.getSelectedCreator().getParent() instanceof XWAbsoluteLayout) { + //绝对布局 + if (parent != null) { + Rectangle rec = selection.getSelctionBounds(); + FormSelectionUtils.paste2Container(designer, parent, CLIP_BOARD, rec.x + DELTA_X_Y, rec.y + DELTA_X_Y); + } } } } else { @@ -235,11 +255,21 @@ public class SelectionModel { */ public boolean hasSelectionComponent() { if (designer.getClass().equals(FormDesigner.class)) { - //frm组件复用选择 - return selection.getSelectedCreator() != null && !(selection.getSelectedCreator().getParent() instanceof - XWFitLayout); + //frm本地组件复用 + if (selection.getSelectedCreator() == null) { + return false; + } else if (selection.getSelectedCreator().getParent() instanceof XWFitLayout) { + // 相对布局 + // 已选:selection.getSelectedCreator().getParent() instanceof @XWFitLayout + // 未选:selection.getSelectedCreator() instanceof @XWFitLayout + return !(selection.getSelectedCreator() instanceof XWAbsoluteLayout); + } else { + //绝对布局 + //已选:selection.getSelectedCreator().getParent() instanceof @XWAbsoluteLayout + return selection.getSelectedCreator().getParent() instanceof XWAbsoluteLayout; + } } else { - //cpt本地组件复用 + //cpt本地组件复用,selection.getSelectedCreator().getParent()=@XWParameterLayout instanceof @XWAbsoluteLayout return selection.getSelectedCreator() != null && selection.getSelectedCreator().getParent() != null; } } diff --git a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java index 8816e1c8b..d1c088d40 100644 --- a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java +++ b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java @@ -34,10 +34,11 @@ public class FormSelectionUtils { * @param x x * @param y y */ - public static void paste2Container(FormDesigner designer, XLayoutContainer parent, FormSelection clipBoard, int x, - int y) { + public static void paste2Container(FormDesigner designer, XLayoutContainer parent, + FormSelection clipBoard, int x, int y) { LayoutAdapter adapter = parent.getLayoutAdapter(); if (parent instanceof XWAbsoluteLayout) { + //绝对布局 designer.getSelectionModel().getSelection().reset(); Rectangle rec = clipBoard.getSelctionBounds(); for (XCreator creator : clipBoard.getSelectedCreators()) { @@ -63,6 +64,29 @@ public class FormSelectionUtils { designer.getEditListenerTable().fireCreatorModified( designer.getSelectionModel().getSelection().getSelectedCreator(), DesignerEvent.CREATOR_PASTED); return; + } else if (parent instanceof XWFitLayout) { + //相对布局 + designer.getSelectionModel().getSelection().reset(); + Rectangle rec = clipBoard.getSelctionBounds(); + for (XCreator creator : clipBoard.getSelectedCreators()) { + try { + Widget copied = copyWidget(designer, creator); + XCreator copiedCreator = XCreatorUtils.createXCreator(copied, creator.getSize()); + // TODO 获取位置 + boolean addSuccess = adapter.addBean(copiedCreator, x, y); + + if (addSuccess) { + designer.getSelectionModel().getSelection().addSelectedCreator(copiedCreator); + } + + } catch (CloneNotSupportedException e) { + FRContext.getLogger().error(e.getMessage(), e); + } + } + rebuildSelection(designer); + designer.getEditListenerTable().fireCreatorModified( + designer.getSelectionModel().getSelection().getSelectedCreator(), DesignerEvent.CREATOR_PASTED); + return; } Toolkit.getDefaultToolkit().beep(); } From 7e0fae20f770d46f8f4d1dcd7f09f6c365a85bc7 Mon Sep 17 00:00:00 2001 From: zack Date: Fri, 24 Mar 2017 11:24:07 +0800 Subject: [PATCH 205/343] =?UTF-8?q?REPORT-2242=20=E5=A1=AB=E6=8A=A5?= =?UTF-8?q?=E6=8F=90=E4=BA=A4=E8=AE=BE=E7=BD=AE=E7=9A=84=E8=8B=A5=E5=B9=B2?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer/src/com/fr/design/webattr/EditToolBar.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/designer/src/com/fr/design/webattr/EditToolBar.java b/designer/src/com/fr/design/webattr/EditToolBar.java index ac1295934..938fd4509 100644 --- a/designer/src/com/fr/design/webattr/EditToolBar.java +++ b/designer/src/com/fr/design/webattr/EditToolBar.java @@ -329,15 +329,16 @@ public class EditToolBar extends BasicPane { private JavaScriptActionPane javaScriptPane; private ExportToolBarProvider[] exportToolBarProviders; - private ChangeListener changeListener = new ChangeListener() { - public void stateChanged(ChangeEvent e) { + private ActionListener actionListener = new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { if (isVerify.isSelected()) { failSubmit.setVisible(true); } else { failSubmit.setVisible(false); + failSubmit.setSelected(false); } } - }; public ButtonPane() { @@ -481,7 +482,7 @@ public class EditToolBar extends BasicPane { submitPane.add(isVerify); submitPane.add(failSubmit); submitPane.add(isCurSheet); - isVerify.addChangeListener(changeListener); + isVerify.addActionListener(actionListener); return submitPane; } @@ -573,6 +574,9 @@ public class EditToolBar extends BasicPane { card.show(centerPane, "submit"); Submit submit = ((Submit) widget); this.isVerify.setSelected(submit.isVerify()); + if (!submit.isVerify()) { + this.failSubmit.setVisible(false); + } this.failSubmit.setSelected(submit.isFailVerifySubmit()); this.isCurSheet.setSelected(submit.isOnlySubmitSelect()); } From fc9adf928ebdd7a615cf21c29fca4c5545809646 Mon Sep 17 00:00:00 2001 From: zhouping Date: Mon, 27 Mar 2017 09:33:08 +0800 Subject: [PATCH 206/343] =?UTF-8?q?REPORT-2171=20=E8=A1=A8=E5=8D=95?= =?UTF-8?q?=E9=87=8C=E5=B5=8C=E5=A5=97tab=E5=90=8E,=20=E6=BB=9A=E5=8A=A8?= =?UTF-8?q?=E6=9D=A1=E4=B8=A2=E5=A4=B1=E4=BA=86,=20=E6=89=80=E6=9C=89?= =?UTF-8?q?=E8=87=AA=E9=80=82=E5=BA=94=E9=83=BD=E8=BF=99=E6=A0=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/designer/creator/XWAbsoluteLayout.java | 10 ++++++++++ .../com/fr/design/designer/creator/XWFitLayout.java | 1 + 2 files changed, 11 insertions(+) diff --git a/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java b/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java index 4ed1b6549..1c731dffa 100644 --- a/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java @@ -8,6 +8,7 @@ import java.awt.event.ContainerEvent; import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; import java.beans.IntrospectionException; +import java.util.ArrayList; import java.util.HashMap; import com.fr.design.designer.beans.AdapterBus; @@ -16,6 +17,7 @@ import com.fr.design.designer.beans.LayoutAdapter; import com.fr.design.designer.beans.adapters.layout.FRAbsoluteLayoutAdapter; import com.fr.design.designer.beans.location.Direction; import com.fr.design.designer.beans.models.SelectionModel; +import com.fr.design.designer.creator.cardlayout.XWTabFitLayout; import com.fr.design.form.layout.FRAbsoluteLayout; import com.fr.design.icon.IconPathConstants; import com.fr.design.mainframe.*; @@ -154,6 +156,14 @@ public class XWAbsoluteLayout extends XLayoutContainer { if (xCreator.acceptType(XWAbsoluteLayout.class)){ ((XWAbsoluteLayout) xCreator).updateBoundsWidget(); } + // 如果子组件时tab布局,则tab布局内部的组件的wiget也要更新,否则保存后重新打开大小不对 + ArrayList childrenList = xCreator.getTargetChildrenList(); + if(!childrenList.isEmpty()){ + for(int i=0; i Date: Mon, 27 Mar 2017 16:33:25 +0800 Subject: [PATCH 207/343] =?UTF-8?q?=E8=BF=98=E5=8E=9F=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E6=94=B9=E5=AE=A2=E6=88=B7bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/chart/axis/MinMaxValuePane.java | 18 +++++++----------- .../chart/gui/style/axis/ChartValuePane.java | 5 ++--- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java index 73235dc31..4a9be221d 100644 --- a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java +++ b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java @@ -42,14 +42,14 @@ public class MinMaxValuePane extends JPanel { double p = TableLayout.PREFERRED; double f = TableLayout.FILL; double[] columnSize = { p, f }; - double[] rowSize = { p, p, p, p, p, p, p, p}; + double[] rowSize = { p, p, p, p}; Component[][] components = getPanelComponents(); JPanel panel = TableLayoutHelper.createTableLayoutPane(components ,rowSize,columnSize); this.setLayout(new BorderLayout()); this.add(panel,BorderLayout.CENTER); - for(int i = 0; i < components.length; i+=2) { + for(int i = 0; i < components.length; i++) { ((UICheckBox)components[i][0]).addActionListener(new ActionListener() { @Override @@ -57,19 +57,15 @@ public class MinMaxValuePane extends JPanel { checkBoxUse(); } }); - ChartSwingUtils.addListener((UICheckBox)components[i][0], (UITextField)components[i+1][0]); + ChartSwingUtils.addListener((UICheckBox)components[i][0], (UITextField)components[i][1]); } } protected Component[][] getPanelComponents() { return new Component[][]{ - new Component[]{minCheckBox}, - new Component[]{minValueField}, - new Component[]{maxCheckBox}, - new Component[]{maxValueField}, - new Component[]{isCustomMainUnitBox}, - new Component[]{mainUnitField}, - new Component[]{isCustomSecUnitBox}, - new Component[]{secUnitField}, + new Component[]{minCheckBox, minValueField}, + new Component[]{maxCheckBox, maxValueField}, + new Component[]{isCustomMainUnitBox, mainUnitField}, + new Component[]{isCustomSecUnitBox, secUnitField}, }; } diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java index f798a0a07..d25ed2997 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java @@ -151,11 +151,10 @@ public class ChartValuePane extends ChartAxisUsePane{ double p = TableLayout.PREFERRED; double f = TableLayout.FILL; double[] columnSize = { LayoutConstants.CHART_ATTR_TOMARGIN,p,f}; - double[] rowSize = { p, p, p}; + double[] rowSize = {p, p}; Component[][] component = new Component[][]{ new Component[]{null,initMinMaxValue(),null}, - new Component[]{null, addLogarithmicPane2ValuePane(), null}, - new Component[]{null, null, addLogText()}, + new Component[]{null, addLogarithmicPane2ValuePane(), addLogText()}, }; return TableLayoutHelper.createTableLayoutPane(component, rowSize, columnSize); } From b7fea495cff85298182c710dc5c2dd98ffbbdbde Mon Sep 17 00:00:00 2001 From: mengao Date: Mon, 27 Mar 2017 16:43:33 +0800 Subject: [PATCH 208/343] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=B8=83=E5=B1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/chart/axis/MinMaxValuePane.java | 18 +++++++++++------- .../chart/gui/style/axis/ChartValuePane.java | 5 +++-- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java index 4a9be221d..73235dc31 100644 --- a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java +++ b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java @@ -42,14 +42,14 @@ public class MinMaxValuePane extends JPanel { double p = TableLayout.PREFERRED; double f = TableLayout.FILL; double[] columnSize = { p, f }; - double[] rowSize = { p, p, p, p}; + double[] rowSize = { p, p, p, p, p, p, p, p}; Component[][] components = getPanelComponents(); JPanel panel = TableLayoutHelper.createTableLayoutPane(components ,rowSize,columnSize); this.setLayout(new BorderLayout()); this.add(panel,BorderLayout.CENTER); - for(int i = 0; i < components.length; i++) { + for(int i = 0; i < components.length; i+=2) { ((UICheckBox)components[i][0]).addActionListener(new ActionListener() { @Override @@ -57,15 +57,19 @@ public class MinMaxValuePane extends JPanel { checkBoxUse(); } }); - ChartSwingUtils.addListener((UICheckBox)components[i][0], (UITextField)components[i][1]); + ChartSwingUtils.addListener((UICheckBox)components[i][0], (UITextField)components[i+1][0]); } } protected Component[][] getPanelComponents() { return new Component[][]{ - new Component[]{minCheckBox, minValueField}, - new Component[]{maxCheckBox, maxValueField}, - new Component[]{isCustomMainUnitBox, mainUnitField}, - new Component[]{isCustomSecUnitBox, secUnitField}, + new Component[]{minCheckBox}, + new Component[]{minValueField}, + new Component[]{maxCheckBox}, + new Component[]{maxValueField}, + new Component[]{isCustomMainUnitBox}, + new Component[]{mainUnitField}, + new Component[]{isCustomSecUnitBox}, + new Component[]{secUnitField}, }; } diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java index d25ed2997..f798a0a07 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java @@ -151,10 +151,11 @@ public class ChartValuePane extends ChartAxisUsePane{ double p = TableLayout.PREFERRED; double f = TableLayout.FILL; double[] columnSize = { LayoutConstants.CHART_ATTR_TOMARGIN,p,f}; - double[] rowSize = {p, p}; + double[] rowSize = { p, p, p}; Component[][] component = new Component[][]{ new Component[]{null,initMinMaxValue(),null}, - new Component[]{null, addLogarithmicPane2ValuePane(), addLogText()}, + new Component[]{null, addLogarithmicPane2ValuePane(), null}, + new Component[]{null, null, addLogText()}, }; return TableLayoutHelper.createTableLayoutPane(component, rowSize, columnSize); } From 58152e27753cd4dd781a77432376efa94b66f8ae Mon Sep 17 00:00:00 2001 From: mengao Date: Mon, 27 Mar 2017 16:58:26 +0800 Subject: [PATCH 209/343] =?UTF-8?q?=E8=BF=98=E5=8E=9F=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/chart/axis/MinMaxValuePane.java | 18 +++++++----------- .../chart/gui/style/axis/ChartValuePane.java | 5 ++--- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java index 73235dc31..4a9be221d 100644 --- a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java +++ b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java @@ -42,14 +42,14 @@ public class MinMaxValuePane extends JPanel { double p = TableLayout.PREFERRED; double f = TableLayout.FILL; double[] columnSize = { p, f }; - double[] rowSize = { p, p, p, p, p, p, p, p}; + double[] rowSize = { p, p, p, p}; Component[][] components = getPanelComponents(); JPanel panel = TableLayoutHelper.createTableLayoutPane(components ,rowSize,columnSize); this.setLayout(new BorderLayout()); this.add(panel,BorderLayout.CENTER); - for(int i = 0; i < components.length; i+=2) { + for(int i = 0; i < components.length; i++) { ((UICheckBox)components[i][0]).addActionListener(new ActionListener() { @Override @@ -57,19 +57,15 @@ public class MinMaxValuePane extends JPanel { checkBoxUse(); } }); - ChartSwingUtils.addListener((UICheckBox)components[i][0], (UITextField)components[i+1][0]); + ChartSwingUtils.addListener((UICheckBox)components[i][0], (UITextField)components[i][1]); } } protected Component[][] getPanelComponents() { return new Component[][]{ - new Component[]{minCheckBox}, - new Component[]{minValueField}, - new Component[]{maxCheckBox}, - new Component[]{maxValueField}, - new Component[]{isCustomMainUnitBox}, - new Component[]{mainUnitField}, - new Component[]{isCustomSecUnitBox}, - new Component[]{secUnitField}, + new Component[]{minCheckBox, minValueField}, + new Component[]{maxCheckBox, maxValueField}, + new Component[]{isCustomMainUnitBox, mainUnitField}, + new Component[]{isCustomSecUnitBox, secUnitField}, }; } diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java index f798a0a07..e497bcb80 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java @@ -151,11 +151,10 @@ public class ChartValuePane extends ChartAxisUsePane{ double p = TableLayout.PREFERRED; double f = TableLayout.FILL; double[] columnSize = { LayoutConstants.CHART_ATTR_TOMARGIN,p,f}; - double[] rowSize = { p, p, p}; + double[] rowSize = { p, p}; Component[][] component = new Component[][]{ new Component[]{null,initMinMaxValue(),null}, - new Component[]{null, addLogarithmicPane2ValuePane(), null}, - new Component[]{null, null, addLogText()}, + new Component[]{null, addLogarithmicPane2ValuePane(), addLogText()}, }; return TableLayoutHelper.createTableLayoutPane(component, rowSize, columnSize); } From 18c5708343c4b54ba1ea35f579e90b912346a2a6 Mon Sep 17 00:00:00 2001 From: mengao Date: Mon, 27 Mar 2017 18:38:35 +0800 Subject: [PATCH 210/343] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=B8=83=E5=B1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/chart/axis/MinMaxValuePane.java | 18 +++++++++++------- .../chart/gui/style/axis/ChartValuePane.java | 5 +++-- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java index 4a9be221d..73235dc31 100644 --- a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java +++ b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java @@ -42,14 +42,14 @@ public class MinMaxValuePane extends JPanel { double p = TableLayout.PREFERRED; double f = TableLayout.FILL; double[] columnSize = { p, f }; - double[] rowSize = { p, p, p, p}; + double[] rowSize = { p, p, p, p, p, p, p, p}; Component[][] components = getPanelComponents(); JPanel panel = TableLayoutHelper.createTableLayoutPane(components ,rowSize,columnSize); this.setLayout(new BorderLayout()); this.add(panel,BorderLayout.CENTER); - for(int i = 0; i < components.length; i++) { + for(int i = 0; i < components.length; i+=2) { ((UICheckBox)components[i][0]).addActionListener(new ActionListener() { @Override @@ -57,15 +57,19 @@ public class MinMaxValuePane extends JPanel { checkBoxUse(); } }); - ChartSwingUtils.addListener((UICheckBox)components[i][0], (UITextField)components[i][1]); + ChartSwingUtils.addListener((UICheckBox)components[i][0], (UITextField)components[i+1][0]); } } protected Component[][] getPanelComponents() { return new Component[][]{ - new Component[]{minCheckBox, minValueField}, - new Component[]{maxCheckBox, maxValueField}, - new Component[]{isCustomMainUnitBox, mainUnitField}, - new Component[]{isCustomSecUnitBox, secUnitField}, + new Component[]{minCheckBox}, + new Component[]{minValueField}, + new Component[]{maxCheckBox}, + new Component[]{maxValueField}, + new Component[]{isCustomMainUnitBox}, + new Component[]{mainUnitField}, + new Component[]{isCustomSecUnitBox}, + new Component[]{secUnitField}, }; } diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java index e497bcb80..f798a0a07 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java @@ -151,10 +151,11 @@ public class ChartValuePane extends ChartAxisUsePane{ double p = TableLayout.PREFERRED; double f = TableLayout.FILL; double[] columnSize = { LayoutConstants.CHART_ATTR_TOMARGIN,p,f}; - double[] rowSize = { p, p}; + double[] rowSize = { p, p, p}; Component[][] component = new Component[][]{ new Component[]{null,initMinMaxValue(),null}, - new Component[]{null, addLogarithmicPane2ValuePane(), addLogText()}, + new Component[]{null, addLogarithmicPane2ValuePane(), null}, + new Component[]{null, null, addLogText()}, }; return TableLayoutHelper.createTableLayoutPane(component, rowSize, columnSize); } From 74c386e934c01c15b7b67d3edbf52b0e3593ab09 Mon Sep 17 00:00:00 2001 From: mengao Date: Mon, 27 Mar 2017 19:24:04 +0800 Subject: [PATCH 211/343] =?UTF-8?q?=E8=BF=98=E5=8E=9F=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/chart/axis/MinMaxValuePane.java | 18 +++++++----------- .../chart/gui/style/axis/ChartValuePane.java | 3 +-- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java index 73235dc31..7fc7d9db3 100644 --- a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java +++ b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java @@ -42,14 +42,14 @@ public class MinMaxValuePane extends JPanel { double p = TableLayout.PREFERRED; double f = TableLayout.FILL; double[] columnSize = { p, f }; - double[] rowSize = { p, p, p, p, p, p, p, p}; + double[] rowSize = { p, p, p, p}; Component[][] components = getPanelComponents(); JPanel panel = TableLayoutHelper.createTableLayoutPane(components ,rowSize,columnSize); this.setLayout(new BorderLayout()); this.add(panel,BorderLayout.CENTER); - for(int i = 0; i < components.length; i+=2) { + for(int i = 0; i < components.length; i++) { ((UICheckBox)components[i][0]).addActionListener(new ActionListener() { @Override @@ -57,19 +57,15 @@ public class MinMaxValuePane extends JPanel { checkBoxUse(); } }); - ChartSwingUtils.addListener((UICheckBox)components[i][0], (UITextField)components[i+1][0]); + ChartSwingUtils.addListener((UICheckBox)components[i][0], (UITextField)components[i][1]); } } protected Component[][] getPanelComponents() { return new Component[][]{ - new Component[]{minCheckBox}, - new Component[]{minValueField}, - new Component[]{maxCheckBox}, - new Component[]{maxValueField}, - new Component[]{isCustomMainUnitBox}, - new Component[]{mainUnitField}, - new Component[]{isCustomSecUnitBox}, - new Component[]{secUnitField}, + new Component[]{minCheckBox, minValueField}, + new Component[]{maxCheckBox, maxValueField}, + new Component[]{isCustomMainUnitBox, mainUnitField}, + new Component[]{isCustomSecUnitBox, secUnitField}, }; } diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java index f798a0a07..a83dd975a 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java @@ -151,9 +151,8 @@ public class ChartValuePane extends ChartAxisUsePane{ double p = TableLayout.PREFERRED; double f = TableLayout.FILL; double[] columnSize = { LayoutConstants.CHART_ATTR_TOMARGIN,p,f}; - double[] rowSize = { p, p, p}; + double[] rowSize = {p, p}; Component[][] component = new Component[][]{ - new Component[]{null,initMinMaxValue(),null}, new Component[]{null, addLogarithmicPane2ValuePane(), null}, new Component[]{null, null, addLogText()}, }; From e53ae9b10785e226cca6c59b59df01f9cded3b22 Mon Sep 17 00:00:00 2001 From: mengao Date: Mon, 27 Mar 2017 19:27:55 +0800 Subject: [PATCH 212/343] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=B8=83=E5=B1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/chart/gui/style/axis/ChartValuePane.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java index a83dd975a..f667a66dd 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java @@ -153,8 +153,8 @@ public class ChartValuePane extends ChartAxisUsePane{ double[] columnSize = { LayoutConstants.CHART_ATTR_TOMARGIN,p,f}; double[] rowSize = {p, p}; Component[][] component = new Component[][]{ - new Component[]{null, addLogarithmicPane2ValuePane(), null}, - new Component[]{null, null, addLogText()}, + new Component[]{null,initMinMaxValue(),null}, + new Component[]{null, addLogarithmicPane2ValuePane(), addLogText()}, }; return TableLayoutHelper.createTableLayoutPane(component, rowSize, columnSize); } From 31e9e165bbfb54048f0975f212bc2837d1bea76f Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Tue, 28 Mar 2017 11:46:33 +0800 Subject: [PATCH 213/343] =?UTF-8?q?tab=20=E6=96=87=E4=BB=B6=E9=97=B4?= =?UTF-8?q?=E5=A4=8D=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapters/layout/FRFitLayoutAdapter.java | 23 ++++---- .../layout/FRTabFitLayoutAdapter.java | 2 +- .../designer/beans/models/SelectionModel.java | 59 ++++++++++++------- 3 files changed, 51 insertions(+), 33 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java index f578b28ab..417e95c35 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java @@ -52,6 +52,7 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { public void setEdit(boolean edit) { isEdit = edit; } + /** * 构造函数 * @@ -277,7 +278,7 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { super.clearCompsList(); } - protected Rectangle getLayoutBound(XWCardMainBorderLayout mainLayout){ + protected Rectangle getLayoutBound(XWCardMainBorderLayout mainLayout) { return mainLayout.getBounds(); } @@ -353,13 +354,13 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { * 拖拽控件边框后,根据控件的大小尺寸,进行相关组件的调整 * * @param backupBound 边界备份 - * @param bounds 组件边界 - * @param xCreator 组件 - * @param row 选中的行 - * @param difference 偏移量 + * @param bounds 组件边界 + * @param xCreator 组件 + * @param row 选中的行 + * @param difference 偏移量 */ public void calculateBounds(Rectangle backupBound, Rectangle bounds, XCreator xCreator, int row, int difference) { - Rectangle rc = new Rectangle(0,0,0,0); + Rectangle rc = new Rectangle(0, 0, 0, 0); XLayoutContainer parent = XCreatorUtils.getParentXLayoutContainer(xCreator); if (parent != null) { Rectangle rec = ComponentUtils.getRelativeBounds(parent); @@ -370,17 +371,17 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { //处理左右延伸 switch (row) { case 0: - if (backupBound.width + backupBound.x == container.getWidth() - margin.getRight() +rc.x) { + if (backupBound.width + backupBound.x == container.getWidth() - margin.getRight() + rc.x) { x += difference; } break; case 1: - if(backupBound.y + backupBound.height == container.getHeight() - margin.getBottom() +rc.y){ + if (backupBound.y + backupBound.height == container.getHeight() - margin.getBottom() + rc.y) { y += difference; } break; } - bounds.setLocation(x,y); + bounds.setLocation(x, y); xCreator.setBackupBound(backupBound); xCreator.setBounds(bounds); this.fix(xCreator); @@ -424,7 +425,7 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { // 根据需要依附的位置调整拖拽的坐标值 private int adjustCoordinateByDependingLine(int coordinate, int[] coordinates) { - if(!isEdit) { + if (!isEdit) { for (int i = 0; i < coordinates.length; i++) { if (coordinate == coordinates[i]) { continue; @@ -440,7 +441,7 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { // 根据需要依附的位置调整拖拽的距离 private int adjustDiffByDependingLine(int coordinate, int[] coordinates, int diff) { - if(!isEdit) { + if (!isEdit) { for (int i = 0; i < coordinates.length; i++) { if (coordinate + diff > coordinates[i] - DEPENDING_SCOPE && coordinate + diff < coordinates[i] + DEPENDING_SCOPE) { diff = coordinates[i] - coordinate; diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRTabFitLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRTabFitLayoutAdapter.java index 63a70e1bb..c2093f1ce 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRTabFitLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRTabFitLayoutAdapter.java @@ -69,7 +69,7 @@ public class FRTabFitLayoutAdapter extends FRFitLayoutAdapter { if (!accept(creator, posX, posY)) { return false; } - // posX,posY是新拖入组件相对于容器的位置,若在tab布局的边缘,则需要把新组件添加到 + // posX,posY是新拖入组件相对于容器的位置,若在tab布局的边缘,则需要把新组件添加到l // 父层自适应布局中,这时候的添加位置就是tab布局所在的位置 if (this.intersectsEdge(posX, posY, backUpContainer)) { if (!ComparatorUtils.equals(backUpContainer.getOuterLayout(), backUpContainer.getBackupParent())) { diff --git a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java index 9bde1f4ed..697cb0b43 100644 --- a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java +++ b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java @@ -12,11 +12,15 @@ import com.fr.design.designer.beans.events.DesignerEvent; import com.fr.design.designer.beans.location.Direction; import com.fr.design.designer.beans.location.Location; import com.fr.design.designer.creator.*; +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.form.util.XCreatorConstants; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.FormSelection; import com.fr.design.mainframe.FormSelectionUtils; import com.fr.design.utils.gui.LayoutUtils; +import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; import com.fr.stable.ArrayUtils; /** @@ -25,6 +29,7 @@ import com.fr.stable.ArrayUtils; public class SelectionModel { //被粘贴组件在所选组件位置处往下、往右各错开20像素。执行多次粘贴时,在上一次粘贴的位置处错开20像素。 private static final int DELTA_X_Y = 20; //粘贴时候的偏移距离 + private static final int BORDER_PROPORTION = 10; private static FormSelection CLIP_BOARD = new FormSelection(); private FormDesigner designer; private FormSelection selection; @@ -111,15 +116,26 @@ public class SelectionModel { public boolean pasteFromClipBoard() { if (!CLIP_BOARD.isEmpty()) { XLayoutContainer parent = null; + //未选 if (!hasSelectionComponent()) { if (designer.getClass().equals(FormDesigner.class)) { - if (selection.getSelectedCreator() instanceof XWFitLayout) { - //相对布局 - FormSelectionUtils.paste2Container(designer, designer.getRootComponent(), - CLIP_BOARD, - DELTA_X_Y, - DELTA_X_Y); + if (selection.getSelectedCreator().getClass().equals(XWTabFitLayout.class)) { + Rectangle rec = selection.getRelativeBounds(); + //Tab布局 + System.out.println("ADD: " + (rec.x + rec.width / 2) + "\t" + (rec.y + BORDER_PROPORTION)); + FormSelectionUtils.paste2Container(designer, (XLayoutContainer) selection.getSelectedCreator(), + CLIP_BOARD, + rec.x + rec.width / 2, + rec.y + BORDER_PROPORTION); + } else { + Rectangle rec = selection.getRelativeBounds(); + //自适应布局 + FormSelectionUtils.paste2Container(designer, designer.getRootComponent(), + CLIP_BOARD, + rec.x + rec.width / 2, + rec.y + BORDER_PROPORTION); + } } else { //绝对布局 //编辑器外面还有两层容器,使用designer.getRootComponent()获取到的是编辑器中层的容器,不是编辑器表层 @@ -137,15 +153,17 @@ public class SelectionModel { DELTA_X_Y, DELTA_X_Y); } - } else { + } + //已选 + else { //获取到编辑器的表层容器(已选的组件的父容器就是表层容器) parent = XCreatorUtils.getParentXLayoutContainer(selection.getSelectedCreator()); if (selection.getSelectedCreator().getParent() instanceof XWFitLayout) { - //相对布局 + //自适应布局 if (parent != null) { Rectangle rec = selection.getSelctionBounds(); FormSelectionUtils.paste2Container(designer, parent, CLIP_BOARD, rec.x + rec.width / 2, rec.y + - rec.height - 2); + rec.height - BORDER_PROPORTION); } } else if (selection.getSelectedCreator().getParent() instanceof XWAbsoluteLayout) { //绝对布局 @@ -256,18 +274,17 @@ public class SelectionModel { public boolean hasSelectionComponent() { if (designer.getClass().equals(FormDesigner.class)) { //frm本地组件复用 - if (selection.getSelectedCreator() == null) { - return false; - } else if (selection.getSelectedCreator().getParent() instanceof XWFitLayout) { - // 相对布局 - // 已选:selection.getSelectedCreator().getParent() instanceof @XWFitLayout - // 未选:selection.getSelectedCreator() instanceof @XWFitLayout - return !(selection.getSelectedCreator() instanceof XWAbsoluteLayout); - } else { - //绝对布局 - //已选:selection.getSelectedCreator().getParent() instanceof @XWAbsoluteLayout - return selection.getSelectedCreator().getParent() instanceof XWAbsoluteLayout; - } + return selection.getSelectedCreator() != null + && !( + //frm绝对布局编辑器 + selection.getSelectedCreator().getClass().equals(XWAbsoluteBodyLayout.class) + //Tab布局编辑器 + || selection.getSelectedCreator().getClass().equals(XWCardMainBorderLayout.class) + || selection.getSelectedCreator().getClass().equals(XWCardLayout.class) + || selection.getSelectedCreator().getClass().equals(XWTabFitLayout.class) + //自适应布局编辑器 + || selection.getSelectedCreator().getClass().equals(XWFitLayout.class) + ); } else { //cpt本地组件复用,selection.getSelectedCreator().getParent()=@XWParameterLayout instanceof @XWAbsoluteLayout return selection.getSelectedCreator() != null && selection.getSelectedCreator().getParent() != null; From 3fcec33cc9eed08624aa104b3a2e6ba578af7d15 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Tue, 28 Mar 2017 14:17:35 +0800 Subject: [PATCH 214/343] =?UTF-8?q?tab=20=E9=97=B4=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E5=A4=8D=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer/beans/adapters/layout/FRTabFitLayoutAdapter.java | 4 +++- .../com/fr/design/designer/beans/models/SelectionModel.java | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRTabFitLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRTabFitLayoutAdapter.java index c2093f1ce..8b8fc42d1 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRTabFitLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRTabFitLayoutAdapter.java @@ -63,9 +63,11 @@ public class FRTabFitLayoutAdapter extends FRFitLayoutAdapter { // 经过accept判断后,container会被改变,先备份 XLayoutContainer backUpContainer = container; Rectangle rect = ComponentUtils.getRelativeBounds(container); - + System.out.println("xy: " + x + "\t" + y); + System.out.println(rect); int posX = x - rect.x; int posY = y - rect.y; + System.out.println("pos: " + posX + "\t" + posY); if (!accept(creator, posX, posY)) { return false; } diff --git a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java index 697cb0b43..aa7d9932c 100644 --- a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java +++ b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java @@ -29,7 +29,7 @@ import com.fr.stable.ArrayUtils; public class SelectionModel { //被粘贴组件在所选组件位置处往下、往右各错开20像素。执行多次粘贴时,在上一次粘贴的位置处错开20像素。 private static final int DELTA_X_Y = 20; //粘贴时候的偏移距离 - private static final int BORDER_PROPORTION = 10; + private static final int BORDER_PROPORTION = 20; private static FormSelection CLIP_BOARD = new FormSelection(); private FormDesigner designer; private FormSelection selection; @@ -161,7 +161,7 @@ public class SelectionModel { if (selection.getSelectedCreator().getParent() instanceof XWFitLayout) { //自适应布局 if (parent != null) { - Rectangle rec = selection.getSelctionBounds(); + Rectangle rec = selection.getRelativeBounds(); FormSelectionUtils.paste2Container(designer, parent, CLIP_BOARD, rec.x + rec.width / 2, rec.y + rec.height - BORDER_PROPORTION); } From e82c0f921a4f63dbfddc62fd98b9272e69861c2e Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Tue, 28 Mar 2017 14:27:17 +0800 Subject: [PATCH 215/343] =?UTF-8?q?=E6=97=A0=E4=BB=BB=E5=8A=A1=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/utils/ComponentUtils.java | 272 ++++----- .../design/designer/beans/LayoutAdapter.java | 31 +- .../layout/FRTabFitLayoutAdapter.java | 3 - .../fr/design/mainframe/FormSelection.java | 572 +++++++++--------- 4 files changed, 448 insertions(+), 430 deletions(-) diff --git a/designer_base/src/com/fr/design/utils/ComponentUtils.java b/designer_base/src/com/fr/design/utils/ComponentUtils.java index 4fcc52124..4f15323f7 100644 --- a/designer_base/src/com/fr/design/utils/ComponentUtils.java +++ b/designer_base/src/com/fr/design/utils/ComponentUtils.java @@ -12,140 +12,140 @@ import java.util.ArrayList; */ public class ComponentUtils { - public static boolean isComponentVisible(Component comp) { - if (!comp.isVisible() && !isRootComponent(comp)) { - return false; - } - Component parent = comp.getParent(); - - return parent == null || isComponentVisible(parent); - - } - - /** - * 获取component所在的容器的绝对位置 - */ - public static Rectangle getRelativeBounds(Component component) { - Rectangle bounds = new Rectangle(0, 0, component.getWidth(), component.getHeight()); - Container parent = component.getParent(); - - while (parent != null) { - bounds.x += component.getX(); - bounds.y += component.getY(); - component = parent; - parent = component.getParent(); - } - - return bounds; - } - - /** - * 恢复双缓冲状态,dbcomponents保存着初始状态为启动双缓冲的组件 - */ - public static void resetBuffer(ArrayList dbcomponents) { - for (JComponent jcomponent : dbcomponents) { - jcomponent.setDoubleBuffered(true); - } - } - - /** - * 禁止双缓冲状态,并将初始状态为启动双缓冲的组件保存到dbcomponents中 - */ - public static void disableBuffer(Component comp, ArrayList dbcomponents) { - if ((comp instanceof JComponent) && comp.isDoubleBuffered()) { - JComponent jcomponent = (JComponent) comp; - - dbcomponents.add(jcomponent); - jcomponent.setDoubleBuffered(false); - } - - if (comp instanceof Container) { - Container container = (Container) comp; - int count = container.getComponentCount(); - - if (count > 0) { - for (int i = 0; i < count; i++) { - Component component = container.getComponent(i); - - disableBuffer(component, dbcomponents); - } - } - } - } - - public static int indexOfComponent(Container container, Component target) { - int count = container.getComponentCount(); - - for (int i = 0; i < count; i++) { - Component child = container.getComponent(i); - - if (child == target) { - return i; - } - } - - return -1; - } - - /** - * 计算组件root相对于其顶层容器的可见区域 - */ - public static Rectangle computeVisibleRectRel2Root(Component root) { - Container container = findAncestorScrollPane(root); - - if (container == null) { - return getRelativeBounds(root); - } else { - // 如果是JScrollPane的子组件,需要计算其viewport与改组件的交叉的可见区域 - return getBoundsRel2Parent(root, container); - } - } - - /** - * 计算组件root相对于其顶层容器的可见区域 - */ - public static Rectangle computeVisibleRect(JComponent root) { - Rectangle root_bounds = ComponentUtils.getRelativeBounds(root); - Rectangle rect = computeVisibleRectRel2Root(root); - rect.x -= root_bounds.x; - rect.y -= root_bounds.y; - - return rect; - } - - private static Rectangle getBoundsRel2Parent(Component child, Container parent) { - Rectangle cRect = getRelativeBounds(child); - Rectangle pRect = getRelativeBounds(parent); - Rectangle bounds = new Rectangle(); - Rectangle2D.intersect(cRect, pRect, bounds); - - return bounds; - } - - public static Container findAncestorScrollPane(Component p) { - if ((p == null) || !(p instanceof Container)) { - return null; - } - - Container c = p.getParent(); - - return findAncestorScrollPane(c); - } - - public static boolean isRootComponent(Component root) { - Container parent = root.getParent(); - return parent == null; - } - - public static boolean isChildOf(Component component, Class parent) { - Container container = component.getParent(); - if (container != null) { - if (ComparatorUtils.equals(container.getClass(), parent)) { - return true; - } else { - return isChildOf(container, parent); - } - } - return false; - } + public static boolean isComponentVisible(Component comp) { + if (!comp.isVisible() && !isRootComponent(comp)) { + return false; + } + Component parent = comp.getParent(); + + return parent == null || isComponentVisible(parent); + + } + + /** + * 获取component所在的容器的绝对位置 + */ + public static Rectangle getRelativeBounds(Component component) { + Rectangle bounds = new Rectangle(0, 0, component.getWidth(), component.getHeight()); + Container parent = component.getParent(); + + while (parent != null) { + bounds.x += component.getX(); + bounds.y += component.getY(); + component = parent; + parent = component.getParent(); + } + + return bounds; + } + + /** + * 恢复双缓冲状态,dbcomponents保存着初始状态为启动双缓冲的组件 + */ + public static void resetBuffer(ArrayList dbcomponents) { + for (JComponent jcomponent : dbcomponents) { + jcomponent.setDoubleBuffered(true); + } + } + + /** + * 禁止双缓冲状态,并将初始状态为启动双缓冲的组件保存到dbcomponents中 + */ + public static void disableBuffer(Component comp, ArrayList dbcomponents) { + if ((comp instanceof JComponent) && comp.isDoubleBuffered()) { + JComponent jcomponent = (JComponent) comp; + + dbcomponents.add(jcomponent); + jcomponent.setDoubleBuffered(false); + } + + if (comp instanceof Container) { + Container container = (Container) comp; + int count = container.getComponentCount(); + + if (count > 0) { + for (int i = 0; i < count; i++) { + Component component = container.getComponent(i); + + disableBuffer(component, dbcomponents); + } + } + } + } + + public static int indexOfComponent(Container container, Component target) { + int count = container.getComponentCount(); + + for (int i = 0; i < count; i++) { + Component child = container.getComponent(i); + + if (child == target) { + return i; + } + } + + return -1; + } + + /** + * 计算组件root相对于其顶层容器的可见区域 + */ + public static Rectangle computeVisibleRectRel2Root(Component root) { + Container container = findAncestorScrollPane(root); + + if (container == null) { + return getRelativeBounds(root); + } else { + // 如果是JScrollPane的子组件,需要计算其viewport与改组件的交叉的可见区域 + return getBoundsRel2Parent(root, container); + } + } + + /** + * 计算组件root相对于其顶层容器的可见区域 + */ + public static Rectangle computeVisibleRect(JComponent root) { + Rectangle root_bounds = ComponentUtils.getRelativeBounds(root); + Rectangle rect = computeVisibleRectRel2Root(root); + rect.x -= root_bounds.x; + rect.y -= root_bounds.y; + + return rect; + } + + private static Rectangle getBoundsRel2Parent(Component child, Container parent) { + Rectangle cRect = getRelativeBounds(child); + Rectangle pRect = getRelativeBounds(parent); + Rectangle bounds = new Rectangle(); + Rectangle2D.intersect(cRect, pRect, bounds); + + return bounds; + } + + public static Container findAncestorScrollPane(Component p) { + if ((p == null) || !(p instanceof Container)) { + return null; + } + + Container c = p.getParent(); + + return findAncestorScrollPane(c); + } + + public static boolean isRootComponent(Component root) { + Container parent = root.getParent(); + return parent == null; + } + + public static boolean isChildOf(Component component, Class parent) { + Container container = component.getParent(); + if (container != null) { + if (ComparatorUtils.equals(container.getClass(), parent)) { + return true; + } else { + return isChildOf(container, parent); + } + } + return false; + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/LayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/LayoutAdapter.java index fffc1c587..e814c7892 100644 --- a/designer_form/src/com/fr/design/designer/beans/LayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/LayoutAdapter.java @@ -6,6 +6,7 @@ import com.fr.design.designer.creator.XCreator; /** * 该接口是LayoutManager的BeanInfo类。标准Java平台没有提供布局管理器的BeanInfo类, * 对于界面设计工具来说还需一些特殊的行为。 + * * @since 6.5.3 */ public interface LayoutAdapter { @@ -15,15 +16,17 @@ public interface LayoutAdapter { * 管理适配器的accept来决定当前位置是否可以放置,并提供特殊的标识,比如红色区域标识。比 * 如在BorderLayout中,如果某个方位已经放置了组件,则此时应该返回false标识该区域不可以 * 放置。 - *@param creator 组件 - *@param x 添加的位置x,该位置是相对于container的 - *@param y 添加的位置y,该位置是相对于container的 - *@return 是否可以放置 + * + * @param creator 组件 + * @param x 添加的位置x,该位置是相对于container的 + * @param y 添加的位置y,该位置是相对于container的 + * @return 是否可以放置 */ boolean accept(XCreator creator, int x, int y); /** * 有的控件在拖拽调整大小后需要根据自身内容重新计算下当前的尺寸是否合适,如果不合适,就需要重新fix一下 + * * @param creator 组件 */ void fix(XCreator creator); @@ -31,9 +34,10 @@ public interface LayoutAdapter { /** * 组件的ComponentAdapter在添加组件时,如果发现布局管理器不为空,会继而调用该布局管理器的 * addComp方法来完成组件的具体添加。在该方法内,布局管理器可以提供额外的功能。 + * * @param creator 被添加的新组件 - * @param x 添加的位置x,该位置是相对于container的 - * @param y 添加的位置y,该位置是相对于container的 + * @param x 添加的位置x,该位置是相对于container的 + * @param y 添加的位置y,该位置是相对于container的 * @return 是否添加成功,成功返回true,否则false */ boolean addBean(XCreator creator, int x, int y); @@ -45,6 +49,7 @@ public interface LayoutAdapter { /** * 显示parent的字组件child,解决CardLayout中显示某个非显示组件的特殊情况 + * * @param child 组件 */ void showComponent(XCreator child); @@ -53,20 +58,23 @@ public interface LayoutAdapter { /** * 组件叠放顺序前插入 + * * @param target 目标组件 - * @param added 插入组件 + * @param added 插入组件 */ void addBefore(XCreator target, XCreator added); /** * 组件叠放顺序后插入 + * * @param target 目标组件 - * @param added 放置组件 + * @param added 放置组件 */ void addAfter(XCreator target, XCreator added); /** * 能否放置更多组件 + * * @return 能则返回true */ boolean canAcceptMoreComponent(); @@ -74,11 +82,12 @@ public interface LayoutAdapter { ConstraintsGroupModel getLayoutConstraints(XCreator creator); GroupModel getLayoutProperties(); - + /** * 删除组件 - * @param creator 组件 - * @param initWidth 组件之前宽度 + * + * @param creator 组件 + * @param initWidth 组件之前宽度 * @param initHeight 组件之前高度 */ void removeBean(XCreator creator, int initWidth, int initHeight); diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRTabFitLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRTabFitLayoutAdapter.java index 8b8fc42d1..12a5ad55b 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRTabFitLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRTabFitLayoutAdapter.java @@ -63,11 +63,8 @@ public class FRTabFitLayoutAdapter extends FRFitLayoutAdapter { // 经过accept判断后,container会被改变,先备份 XLayoutContainer backUpContainer = container; Rectangle rect = ComponentUtils.getRelativeBounds(container); - System.out.println("xy: " + x + "\t" + y); - System.out.println(rect); int posX = x - rect.x; int posY = y - rect.y; - System.out.println("pos: " + posX + "\t" + posY); if (!accept(creator, posX, posY)) { return false; } diff --git a/designer_form/src/com/fr/design/mainframe/FormSelection.java b/designer_form/src/com/fr/design/mainframe/FormSelection.java index c81fc5841..f30cf2e84 100644 --- a/designer_form/src/com/fr/design/mainframe/FormSelection.java +++ b/designer_form/src/com/fr/design/mainframe/FormSelection.java @@ -20,288 +20,300 @@ import com.fr.design.utils.gui.LayoutUtils; public class FormSelection { - private ArrayList selection; - private Rectangle backupBounds; - private ArrayList recs = new ArrayList(); - - public FormSelection() { - selection = new ArrayList(); - } - - /** - * 重置选中的组件 - */ - public void reset() { - selection.clear(); - } - - /** - * 是否没有选中的组件 - * @return 为空返回true - */ - public boolean isEmpty() { - return selection.isEmpty(); - } - - /** - * 选中的组件数量 - * @return 选中的组件数量 - */ - public int size() { - return selection.size(); - } - - /** - * 去除选中的组件中指定组件 - * @param creator 待去除组件 - */ - public void removeCreator(XCreator creator) { - selection.remove(creator); - } - - /** - * 是否成功删除选择的组件 - * @param comp 组件 - * @return 是则返回true - */ - public boolean removeSelectedCreator(XCreator comp) { - if (selection.size() > 1 && selection.contains(comp)) { - removeCreator(comp); - return true; - } - return false; - } - - /** - * 成功增加选中的组件 - * @param creator 组件 - * @return 成功增加返回true - */ - public boolean addSelectedCreator(XCreator creator) { - if (addedable(creator)) { - selection.add(creator); - return true; - } - return false; - } - - /** - * 是否是可以增加的 - * @param creator 组件 - * @return 是则返回true - */ - public boolean addedable(XCreator creator) { - if (selection.isEmpty()) { - return true; - } - XLayoutContainer container = XCreatorUtils.getParentXLayoutContainer(creator); - if (!(container instanceof XWAbsoluteLayout)) { - return false; - } - for (XCreator selected : selection) { - if (selected == creator || XCreatorUtils.getParentXLayoutContainer(selected) != container) { - return false; - } - } - return true; - } - - /** - * 返回选中的第一个组件,为空返回null - * @return 返回选中组件 - */ - public XCreator getSelectedCreator() { - return !selection.isEmpty() ? selection.get(0) : null; - } - - /** - * 返回选中的所有组件 - * @return 所有组件s - */ - public XCreator[] getSelectedCreators() { - return selection.toArray(new XCreator[selection.size()]); - } - - public Widget[] getSelectedWidgets() { - Widget[] selectWidget = new Widget[selection.size()]; - for (int i = 0; i < selection.size(); i++) { - selectWidget[i] = selection.get(i).toData(); - } - return selectWidget; - } - - public void setSelectedCreator(XCreator creator) { - reset(); - selection.add(creator); - } - - public void setSelectedCreators(ArrayList selections) { - reset(); - for (XCreator creator : selections) { - if (addedable(creator)) { - selection.add(creator); - } - } - } - - /** - * 是否包含当前控件 - * @param widget 控件 - * @return 是则返回true - */ - public boolean contains(Widget widget) { - for (XCreator creator : selection) { - if (creator.toData() == widget) { - return true; - } - } - return false; - } - - public int[] getDirections() { - if (this.selection.size() > 1) { - return Direction.ALL; - } else if (this.selection.size() == 1) { - return this.selection.get(0).getDirections(); - } else { - return new int[0]; - } - } - - /** - * 备份组件的bound - */ - public void backupBounds() { - backupBounds = getRelativeBounds(); - recs.clear(); - for (XComponent comp : selection) { - recs.add(comp.getBounds()); - } - } - - public Rectangle getBackupBounds() { - return backupBounds; - } - - public Rectangle getRelativeBounds() { - Rectangle bounds = getSelctionBounds(); - XLayoutContainer parent = XCreatorUtils.getParentXLayoutContainer(selection.get(0)); - if (parent == null) { - return bounds; - } - Rectangle rec = ComponentUtils.getRelativeBounds(parent); - bounds.x += rec.x; - bounds.y += rec.y; - return bounds; - } - - public Rectangle getSelctionBounds() { - if(selection.isEmpty()) { - return new Rectangle(); - } - Rectangle bounds = selection.get(0).getBounds(); - for (int i = 1, len = selection.size(); i < len; i++) { - bounds = bounds.union(selection.get(i).getBounds()); - } - return bounds; - } - - public void setSelectionBounds(Rectangle rec, FormDesigner designer) { - XLayoutContainer parent = XCreatorUtils.getParentXLayoutContainer(selection.get(0)); - Rectangle backupBounds = new Rectangle(this.backupBounds); - if (parent != null) { - Rectangle r = ComponentUtils.getRelativeBounds(parent); - rec.x -= r.x; - rec.y -= r.y; - backupBounds.x -= r.x; - backupBounds.y -= r.y; - } - - int size = selection.size(); - if (size == 1) { - XCreator creator = selection.get(0); - creator.setBounds(rec); - if(creator.acceptType(XWParameterLayout.class)){ - designer.setParaHeight((int)rec.getHeight()); + private ArrayList selection; + private Rectangle backupBounds; + private ArrayList recs = new ArrayList(); + + public FormSelection() { + selection = new ArrayList(); + } + + /** + * 重置选中的组件 + */ + public void reset() { + selection.clear(); + } + + /** + * 是否没有选中的组件 + * + * @return 为空返回true + */ + public boolean isEmpty() { + return selection.isEmpty(); + } + + /** + * 选中的组件数量 + * + * @return 选中的组件数量 + */ + public int size() { + return selection.size(); + } + + /** + * 去除选中的组件中指定组件 + * + * @param creator 待去除组件 + */ + public void removeCreator(XCreator creator) { + selection.remove(creator); + } + + /** + * 是否成功删除选择的组件 + * + * @param comp 组件 + * @return 是则返回true + */ + public boolean removeSelectedCreator(XCreator comp) { + if (selection.size() > 1 && selection.contains(comp)) { + removeCreator(comp); + return true; + } + return false; + } + + /** + * 成功增加选中的组件 + * + * @param creator 组件 + * @return 成功增加返回true + */ + public boolean addSelectedCreator(XCreator creator) { + if (addedable(creator)) { + selection.add(creator); + return true; + } + return false; + } + + /** + * 是否是可以增加的 + * + * @param creator 组件 + * @return 是则返回true + */ + public boolean addedable(XCreator creator) { + if (selection.isEmpty()) { + return true; + } + XLayoutContainer container = XCreatorUtils.getParentXLayoutContainer(creator); + if (!(container instanceof XWAbsoluteLayout)) { + return false; + } + for (XCreator selected : selection) { + if (selected == creator || XCreatorUtils.getParentXLayoutContainer(selected) != container) { + return false; + } + } + return true; + } + + /** + * 返回选中的第一个组件,为空返回null + * + * @return 返回选中组件 + */ + public XCreator getSelectedCreator() { + return !selection.isEmpty() ? selection.get(0) : null; + } + + /** + * 返回选中的所有组件 + * + * @return 所有组件s + */ + public XCreator[] getSelectedCreators() { + return selection.toArray(new XCreator[selection.size()]); + } + + public Widget[] getSelectedWidgets() { + Widget[] selectWidget = new Widget[selection.size()]; + for (int i = 0; i < selection.size(); i++) { + selectWidget[i] = selection.get(i).toData(); + } + return selectWidget; + } + + public void setSelectedCreator(XCreator creator) { + reset(); + selection.add(creator); + } + + public void setSelectedCreators(ArrayList selections) { + reset(); + for (XCreator creator : selections) { + if (addedable(creator)) { + selection.add(creator); + } + } + } + + /** + * 是否包含当前控件 + * + * @param widget 控件 + * @return 是则返回true + */ + public boolean contains(Widget widget) { + for (XCreator creator : selection) { + if (creator.toData() == widget) { + return true; + } + } + return false; + } + + public int[] getDirections() { + if (this.selection.size() > 1) { + return Direction.ALL; + } else if (this.selection.size() == 1) { + return this.selection.get(0).getDirections(); + } else { + return new int[0]; + } + } + + /** + * 备份组件的bound + */ + public void backupBounds() { + backupBounds = getRelativeBounds(); + recs.clear(); + for (XComponent comp : selection) { + recs.add(comp.getBounds()); + } + } + + public Rectangle getBackupBounds() { + return backupBounds; + } + + public Rectangle getRelativeBounds() { + Rectangle bounds = getSelctionBounds(); + XLayoutContainer parent = XCreatorUtils.getParentXLayoutContainer(selection.get(0)); + if (parent == null) { + return bounds; + } + Rectangle rec = ComponentUtils.getRelativeBounds(parent); + bounds.x += rec.x; + bounds.y += rec.y; + return bounds; + } + + public Rectangle getSelctionBounds() { + if (selection.isEmpty()) { + return new Rectangle(); + } + Rectangle bounds = selection.get(0).getBounds(); + for (int i = 1, len = selection.size(); i < len; i++) { + bounds = bounds.union(selection.get(i).getBounds()); + } + return bounds; + } + + public void setSelectionBounds(Rectangle rec, FormDesigner designer) { + XLayoutContainer parent = XCreatorUtils.getParentXLayoutContainer(selection.get(0)); + Rectangle backupBounds = new Rectangle(this.backupBounds); + if (parent != null) { + Rectangle r = ComponentUtils.getRelativeBounds(parent); + rec.x -= r.x; + rec.y -= r.y; + backupBounds.x -= r.x; + backupBounds.y -= r.y; + } + + int size = selection.size(); + if (size == 1) { + XCreator creator = selection.get(0); + creator.setBounds(rec); + if (creator.acceptType(XWParameterLayout.class)) { + designer.setParaHeight((int) rec.getHeight()); designer.getArea().doLayout(); } - LayoutUtils.layoutContainer(creator); - } else if (size > 1) { - for (int i = 0; i < selection.size(); i++) { - Rectangle newBounds = new Rectangle(recs.get(i)); - newBounds.x = rec.x + (newBounds.x - backupBounds.x) * rec.width / backupBounds.width; - newBounds.y = rec.y + (newBounds.y - backupBounds.y) * rec.height / backupBounds.height; - newBounds.width = rec.width * newBounds.width / backupBounds.width; - newBounds.height = rec.height * newBounds.height / backupBounds.height; - XCreator creator = selection.get(i); - creator.setBounds(newBounds); - if(creator.acceptType(XWParameterLayout.class)){ - designer.setParaHeight((int)rec.getHeight()); + LayoutUtils.layoutContainer(creator); + } else if (size > 1) { + for (int i = 0; i < selection.size(); i++) { + Rectangle newBounds = new Rectangle(recs.get(i)); + newBounds.x = rec.x + (newBounds.x - backupBounds.x) * rec.width / backupBounds.width; + newBounds.y = rec.y + (newBounds.y - backupBounds.y) * rec.height / backupBounds.height; + newBounds.width = rec.width * newBounds.width / backupBounds.width; + newBounds.height = rec.height * newBounds.height / backupBounds.height; + XCreator creator = selection.get(i); + creator.setBounds(newBounds); + if (creator.acceptType(XWParameterLayout.class)) { + designer.setParaHeight((int) rec.getHeight()); designer.getArea().doLayout(); } - } - LayoutUtils.layoutRootContainer(designer.getRootComponent()); - } - } - - /** - * 调整组件大小 - * @param designer 设计界面组件 - */ - public void fixCreator(FormDesigner designer) { - for (XCreator creator : selection) { - LayoutAdapter layoutAdapter = AdapterBus.searchLayoutAdapter(designer, creator); - if (layoutAdapter != null) { - creator.setBackupBound(backupBounds); - layoutAdapter.fix(creator); - } - } - } - - private void removeCreatorFromContainer(XCreator creator) { - XLayoutContainer parent = XCreatorUtils.getParentXLayoutContainer(creator); - if (parent == null) { - return; - } - // 删除其根组件,同时就删除了同时被选择的叶子组件 - parent.remove(creator); - LayoutManager layout = parent.getLayout(); - - if (layout != null) { - // 刷新组件容器的布局 - LayoutUtils.layoutContainer(parent); - } - } - - /** - * 剪切选中的所有组件 - * @param clipBoard 剪切板 - */ - public void cut2ClipBoard(FormSelection clipBoard) { - clipBoard.reset(); - clipBoard.selection.addAll(selection); - - for (XCreator creator : selection) { - removeCreatorFromContainer(creator); - } - reset(); - } - - /** - * 复制选中的所有组件 - * @param clipBoard 复制板 - */ - public void copy2ClipBoard(FormSelection clipBoard) { - clipBoard.reset(); - - for (XCreator root : selection) { - try { - XCreator creator = XCreatorUtils.createXCreator((Widget) root.toData().clone()); - creator.setBounds(root.getBounds()); - clipBoard.selection.add(creator); - } catch (CloneNotSupportedException e) { - FRContext.getLogger().error(e.getMessage(), e); - } - } - } + } + LayoutUtils.layoutRootContainer(designer.getRootComponent()); + } + } + + /** + * 调整组件大小 + * + * @param designer 设计界面组件 + */ + public void fixCreator(FormDesigner designer) { + for (XCreator creator : selection) { + LayoutAdapter layoutAdapter = AdapterBus.searchLayoutAdapter(designer, creator); + if (layoutAdapter != null) { + creator.setBackupBound(backupBounds); + layoutAdapter.fix(creator); + } + } + } + + private void removeCreatorFromContainer(XCreator creator) { + XLayoutContainer parent = XCreatorUtils.getParentXLayoutContainer(creator); + if (parent == null) { + return; + } + // 删除其根组件,同时就删除了同时被选择的叶子组件 + parent.remove(creator); + LayoutManager layout = parent.getLayout(); + + if (layout != null) { + // 刷新组件容器的布局 + LayoutUtils.layoutContainer(parent); + } + } + + /** + * 剪切选中的所有组件 + * + * @param clipBoard 剪切板 + */ + public void cut2ClipBoard(FormSelection clipBoard) { + clipBoard.reset(); + clipBoard.selection.addAll(selection); + + for (XCreator creator : selection) { + removeCreatorFromContainer(creator); + } + reset(); + } + + /** + * 复制选中的所有组件 + * + * @param clipBoard 复制板 + */ + public void copy2ClipBoard(FormSelection clipBoard) { + clipBoard.reset(); + + for (XCreator root : selection) { + try { + XCreator creator = XCreatorUtils.createXCreator((Widget) root.toData().clone()); + creator.setBounds(root.getBounds()); + clipBoard.selection.add(creator); + } catch (CloneNotSupportedException e) { + FRContext.getLogger().error(e.getMessage(), e); + } + } + } } \ No newline at end of file From 7a026b4b11cf43fd1e123ed568eccfbdfaa4e9c1 Mon Sep 17 00:00:00 2001 From: plough Date: Tue, 28 Mar 2017 14:29:15 +0800 Subject: [PATCH 216/343] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=EF=BC=8C=E5=9B=BD=E9=99=85=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/locale/designer.properties | 2 +- .../src/com/fr/design/locale/designer_en_US.properties | 2 +- .../src/com/fr/design/locale/designer_ja_JP.properties | 2 +- .../src/com/fr/design/locale/designer_ko_KR.properties | 2 +- .../src/com/fr/design/locale/designer_zh_CN.properties | 2 +- .../src/com/fr/design/locale/designer_zh_TW.properties | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 7ed85365d..7c4847f3c 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -543,7 +543,7 @@ 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_Allow_Null=Allow Null FR-Designer_PageSetup_Page=Page FR-Designer_Custom_Job_Description=Description FR-Designer_Property=Property diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index e7604d42c..fab277ad6 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -544,7 +544,7 @@ 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_Allow_Null=Allow Null FR-Designer_PageSetup_Page=Page FR-Designer_Custom_Job_Description=Description FR-Designer_Property=Property diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index 7cc3163c0..4d68093c7 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -518,7 +518,7 @@ 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_Allow_Null=\u7A7A\u6B04\u3042\u308A FR-Designer_PageSetup_Page=\u30DA\u30FC\u30B8 FR-Designer_Custom_Job_Description=\u8A18\u8FF0 FR-Designer_Property=\u5C5E\u6027 diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index 9942d0e86..14086e881 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -514,7 +514,7 @@ 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_Allow_Null=\uBE48\uCE78\uD5C8\uC6A9 FR-Designer_PageSetup_Page=\uC6F9\uD398\uC774\uC9C0 FR-Designer_Custom_Job_Description=\uC124\uBA85 FR-Designer_Property=\uC18D\uC131 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index d8789a58c..5139b301f 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -548,7 +548,7 @@ 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_Allow_Null=\u5141\u8BB8\u4E3A\u7A7A FR-Designer_PageSetup_Page=\u9875\u9762 FR-Designer_Custom_Job_Description=\u63CF\u8FF0 FR-Designer_Property=\u5C5E\u6027 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 68648424c..10edd2d16 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -536,7 +536,7 @@ 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_Allow_Null=\u5141\u8A31\u70BA\u7A7A\u767D FR-Designer_PageSetup_Page=\u9801\u9762 FR-Designer_Custom_Job_Description=\u63CF\u8FF0 FR-Designer_Property=\u5C6C\u6027 From 6a1e4bcca7274778e11a87fae317e5cc1ad95ffe Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Tue, 28 Mar 2017 15:47:25 +0800 Subject: [PATCH 217/343] =?UTF-8?q?=E6=97=A0=E4=BB=BB=E5=8A=A1=20=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/beans/location/MoveUtils.java | 1094 ++++++++--------- .../beans/location/WidgetForbidWindow.java | 53 +- .../designer/beans/models/SelectionModel.java | 1 - .../design/mainframe/FormSelectionUtils.java | 74 +- 4 files changed, 589 insertions(+), 633 deletions(-) diff --git a/designer_base/src/com/fr/design/beans/location/MoveUtils.java b/designer_base/src/com/fr/design/beans/location/MoveUtils.java index 4ba477ffa..f96782ba8 100644 --- a/designer_base/src/com/fr/design/beans/location/MoveUtils.java +++ b/designer_base/src/com/fr/design/beans/location/MoveUtils.java @@ -9,580 +9,536 @@ import java.util.ArrayList; /** * Created by IntelliJ IDEA. - * + * * @author: Richer * @since : 6.5.5 Date: 11-7-1 Time: 下午2:22 */ 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 ArrayList equidistantLines = new ArrayList<>(); - - private MoveUtils() { - - } - - public interface RectangleDesigner { - - /** - * 获取块边界的迭代器 - * - * @return 块边界的迭代器 - * - * @date 2015-2-12-下午2:43:47 - * - */ - RectangleIterator createRectangleIterator(); - - /** - * 设置X轴的线 - * - * @param line 连接线 - * - * @date 2015-2-12-下午2:44:04 - * - */ - void setXAbsorptionline(Absorptionline line); - - /** - * 设置Y轴的线 - * - * @param line 连接线 - * - * @date 2015-2-12-下午2:44:04 - * - */ - void setYAbsorptionline(Absorptionline line); - - /** - * 获取当前选中块的垂直线数组 - * - * @return 块的垂直线数组 - * - */ - int[] getVerticalLine(); - - /** - * 获取当前选中块的水平线数组 - * - * @return 块的水平线数组 - * - */ - int[] getHorizontalLine(); - - /** - * 设置designer内部组件是否重叠的标志位 - * @param isIntersects 是否重叠 - */ - void setWidgetsIntersected(boolean isIntersects); - - /** - * 获取designer内部组件是否重叠的标志位 - * @return 重叠 - */ - boolean isWidgetsIntersected(); - - /** - * 获取designer相对屏幕的位置 - * @return 位置 - */ - Point getDesignerLocationOnScreen(); - - /** - * 设置等距线 - * @param line 吸附线 - */ - void setEquidistantLine(Absorptionline line); - - /** - * 获取设计器垂直滚动条的值 - * @return 滚动条的值 - */ - int getDesignerScrollVerticalValue(); - - /** - * 获取设计器水平滚动条的值 - * @return 滚动条的值 - */ - int getDesignerScrollHorizontalValue(); - } - - public interface RectangleIterator { - - /** - * 是否存在下一个块 - * - * @return 是否存在下一个块 - * - * @date 2015-2-12-下午2:41:32 - * - */ - boolean hasNext(); - - /** - * 获取下一个块的bounds - * - * @return 下一个块的bounds - * - * @date 2015-2-12-下午2:41:55 - * - */ - Rectangle nextRectangle(); - - /** - * 获取块的垂直线数组 - * - * @return 块的垂直线数组 - * - * @date 2015-2-12-下午2:42:27 - * - */ - int[] getVerticalLine(); - - /** - * 获取块的水平线数组 - * - * @return 块的水平线数组 - * - * @date 2015-2-12-下午2:42:27 - * - */ - int[] getHorizontalLine(); - } - - private static class PlacePointing { - public PlacePointing(int x) { - this.palce = x; - } - - private boolean isFind() { - return direction != -1; - } - - private int palce; - private int direction = -1; - } - - private static void findX(PlacePointing px, Rectangle bounds, int left, int right, int width) { - if (px.isFind()) { - return; - } - if (Math.abs(bounds.x + bounds.width / 2 - (left + right) / 2) <= SORPTION_UNIT) { - px.palce = bounds.x + bounds.width / 2 - width / 2; - px.direction = SwingConstants.CENTER; - } - int x1 = bounds.x; - if (Math.abs(x1 - left) <= SORPTION_UNIT) { - px.palce = x1; - px.direction = SwingConstants.LEFT; - } - if (Math.abs(x1 - right) <= SORPTION_UNIT) { - px.palce = x1 - width; - px.direction = SwingConstants.RIGHT; - } - int x2 = bounds.x + bounds.width; - if (Math.abs(x2 - left) <= SORPTION_UNIT) { - px.palce = x2; - px.direction = SwingConstants.LEFT; - } - if (Math.abs(x2 - right) <= SORPTION_UNIT) { - px.palce = x2 - width; - px.direction = SwingConstants.RIGHT; - } - if (Math.abs(bounds.x + bounds.width / 2 - left) <= SORPTION_UNIT) { - px.palce = bounds.x + bounds.width / 2; - px.direction = SwingConstants.LEFT; - } - if (Math.abs(bounds.x + bounds.width / 2 - right) <= SORPTION_UNIT) { - px.palce = bounds.x + bounds.width / 2 - width; - px.direction = SwingConstants.RIGHT; - } - } - - private static void findY(PlacePointing py, Rectangle bounds, int top, int bottom, int height) { - if (py.isFind()) { - return; - } - - if (Math.abs(bounds.y + bounds.height / 2 - (top + bottom) / 2) <= SORPTION_UNIT) { - py.palce = bounds.y + bounds.height / 2 - height / 2; - py.direction = SwingConstants.CENTER; - } - int y1 = bounds.y; - if (Math.abs(y1 - top) <= SORPTION_UNIT) { - py.palce = y1; - py.direction = SwingConstants.TOP; - } - if (Math.abs(y1 - bottom) <= SORPTION_UNIT) { - py.palce = y1 - height; - py.direction = SwingConstants.BOTTOM; - } - int y2 = bounds.y + bounds.height; - if (Math.abs(y2 - top) <= SORPTION_UNIT) { - py.palce = y2; - py.direction = SwingConstants.TOP; - } - if (Math.abs(y2 - bottom) <= SORPTION_UNIT) { - py.palce = y2 - height; - py.direction = SwingConstants.BOTTOM; - } - if (Math.abs(bounds.y + bounds.height / 2 - top) <= SORPTION_UNIT) { - py.palce = bounds.y + bounds.height / 2; - py.direction = SwingConstants.TOP; - } - if (Math.abs(bounds.y + bounds.height / 2 - bottom) <= SORPTION_UNIT) { - py.palce = bounds.y + bounds.height / 2 - height; - py.direction = SwingConstants.BOTTOM; - } - } - - private static void findEquidistantLine(Rectangle bounds, int left, int top, int height, int width) { - //最近的距离与坐标 - EquidistantLine equidistantLineInfo = new EquidistantLine(0, 0, 0); - //等距线从各边中点画出,先要判断是不是在范围内 - int topMiddleX = left + width / 2; - int leftMiddleY = top + height / 2; - if ((topMiddleX > bounds.getX()) && (topMiddleX < (bounds.getX() + bounds.getWidth()))){ - //当前操作rec在bounds的下方 - if (top > (bounds.getY() + bounds.getHeight())){ - equidistantLineInfo.setDistance(top - (bounds.y + bounds.height)); - equidistantLineInfo.setReference(bounds.y + bounds.height); - equidistantLineInfo.setDirection(SwingConstants.TOP); - } - //当前操作rec在bounds上方 - if ((top + height) < bounds.getY()){ - equidistantLineInfo.setDistance(bounds.y - (top + height)); - equidistantLineInfo.setReference(bounds.y); - equidistantLineInfo.setDirection(SwingConstants.BOTTOM); - } - } - else if ((leftMiddleY > bounds.getY()) && (leftMiddleY < (bounds.getY() + bounds.getHeight()))){ - //当前操作rec在bounds的右侧 - if (left > (bounds.getX() + bounds.getWidth())){ - equidistantLineInfo.setDistance(left - (bounds.x + bounds.width)); - equidistantLineInfo.setReference(bounds.x + bounds.width); - equidistantLineInfo.setDirection(SwingConstants.LEFT); - } - //当前操作rec在bounds的左侧 - if ((left + width) < bounds.getX()){ - equidistantLineInfo.setDistance(bounds.x - (left + width)); - equidistantLineInfo.setReference(bounds.x); - equidistantLineInfo.setDirection(SwingConstants.RIGHT); - } - } - if(equidistantLineInfo.getDistance() > 0) { - equidistantLines.add(equidistantLineInfo); - } - } - -// public static void displayForbidWindow(int x, int y) { -// widgetForbidWindow.showWindow(x, y); -// } - -// public static void hideForbidWindow() { -// widgetForbidWindow.hideWindow(); -// } - - /** - * 吸附 - * - * @param x x坐标 - * @param y y坐标 - * @param width 宽度 - * @param height 高度 - * @param designer 块设计器 - * - * @return 吸附后坐标 - * - * @date 2015-2-12-下午2:39:16 - * - */ - public static Point sorption(int x, int y, int width, int height, RectangleDesigner designer, boolean isParameterLayout) { - - int left = x, top = y, bottom = top + height, right = left + width; - - Rectangle operatingRectangle = new Rectangle(x, y, width, height); - - equidistantLines.clear(); - - PlacePointing px = new PlacePointing(x); - PlacePointing py = new PlacePointing(y); - - PlacePointing pEquidistantX = new PlacePointing(x); - PlacePointing pEquidistantY = new PlacePointing(y); - - RectangleIterator iterator = designer.createRectangleIterator(); - - java.util.List cacheRecs = new ArrayList(); - //是否存在控件重叠 -// boolean isWidgetsIntersects = false; - while (iterator.hasNext()) { - Rectangle bounds = iterator.nextRectangle(); - cacheRecs.add(bounds); -// boolean isIntersects = operatingRectangle.intersects(bounds); - findX(px, bounds, left, right, width); - findY(py, bounds, top, bottom, height); - - if(!isParameterLayout){ -// if(isIntersects) { -// isWidgetsIntersects = true; -// } -// else{ - findEquidistantLine(bounds, left, top, height, width); -// } - } - } - //showForbiddenWindow(designer, x, y, isWidgetsIntersects); - - createXAbsorptionline(px, designer, width, cacheRecs); - createYAbsorptionline(py, designer, height, cacheRecs); - operatingRectangle.x = px.palce; - operatingRectangle.y = py.palce; - createEquidistantLine(pEquidistantX, pEquidistantY, operatingRectangle, designer); - Point sorptionPoint = new Point(px.palce,py.palce); - if (!px.isFind()){ - sorptionPoint.x = pEquidistantX.palce; - } - if (!py.isFind()){ - sorptionPoint.y = pEquidistantY.palce; - } - return sorptionPoint; - } - -// public static void showForbiddenWindow(RectangleDesigner designer, int x, int y, boolean isIntersects){ -// if (isIntersects){ -// if(designer.getDesignerLocationOnScreen() != null) { -// displayForbidWindow(x + designer.getDesignerLocationOnScreen().x, y + designer.getDesignerLocationOnScreen().y); -// } -// designer.setWidgetsIntersected(true); -// } -// else{ -// designer.setWidgetsIntersected(false); -// hideForbidWindow(); -// } -// } - - private static void createXAbsorptionline(PlacePointing px, RectangleDesigner designer, int width, java.util.List cacheRecs) { - Absorptionline line = null; - RectangleIterator iterator = designer.createRectangleIterator(); - int[] selfVertical = designer.getVerticalLine(); - if (px.direction == SwingConstants.CENTER) { - line = Absorptionline.createXMidAbsorptionline(px.palce + width / 2); - int left = px.palce; - int right = px.palce + width; - for (Rectangle bounds : cacheRecs) { - if (bounds.x == left || bounds.x + bounds.width == left) { - line.setFirstLine(left); - } - if (bounds.x == right || bounds.x + bounds.width == right) { - line.setSecondLine(right); - } - updateVerticalLine(selfVertical, iterator, line); - if (line.isFull()) { - break; - } - } - } else if (px.direction == SwingConstants.LEFT || px.direction == SwingConstants.RIGHT) { - int left = px.direction == SwingConstants.LEFT ? px.palce + width : px.palce; - line = Absorptionline.createXAbsorptionline(px.direction == SwingConstants.LEFT ? px.palce : px.palce + width); - int middle = px.palce + width / 2; - for (Rectangle bounds : cacheRecs) { - if (bounds.x == left || bounds.x + bounds.width == left) { - line.setSecondLine(left); - } - if (bounds.x + bounds.width / 2 == middle) { - line.setMidLine(middle); - } - updateVerticalLine(selfVertical, iterator, line); - if (line.isFull()) { - break; - } - } - } - designer.setXAbsorptionline(line); - } - - private static void createYAbsorptionline(PlacePointing py, RectangleDesigner designer, int height, java.util.List cacheRecs) { - Absorptionline line = null; - RectangleIterator iterator = designer.createRectangleIterator(); - int[] selfHorizontal = designer.getHorizontalLine(); - if (py.direction == SwingConstants.CENTER) { - line = Absorptionline.createYMidAbsorptionline(py.palce + height / 2); - int top = py.palce; - int bottom = py.palce + height; - for (Rectangle bounds : cacheRecs) { - if (bounds.y == top || bounds.y + bounds.height == top) { - line.setFirstLine(top); - } - if (bounds.y == bottom || bounds.y + bounds.height == bottom) { - line.setSecondLine(bottom); - } - updateHorizontalLine(selfHorizontal, iterator, line); - if (line.isFull()) { - break; - } - } - } else if (py.direction == SwingConstants.TOP || py.direction == SwingConstants.BOTTOM) { - int top = py.direction == SwingConstants.TOP ? py.palce + height : py.palce; - line = Absorptionline.createYAbsorptionline(py.direction == SwingConstants.TOP ? py.palce : py.palce + height); - int middle = py.palce + height / 2; - for (Rectangle bounds : cacheRecs) { - if (bounds.y == top || bounds.y + bounds.height == top) { - line.setSecondLine(top); - } - if (bounds.y + bounds.height / 2 == middle) { - line.setMidLine(middle); - } - updateHorizontalLine(selfHorizontal, iterator, line); - if (line.isFull()) { - break; - } - } - } - designer.setYAbsorptionline(line); - } - - private static void createEquidistantLine(PlacePointing px, PlacePointing py, Rectangle operatingRectangle, RectangleDesigner designer){ - processEquidistantLinesList(px, py, operatingRectangle); - Absorptionline line = null; - if(equidistantLines.size() > 0) { - int top = -1; - int left = -1; - int bottom = -1; - int right = -1; - for(int i = 0; i < equidistantLines.size(); i++){ - if (equidistantLines.get(i).getDirection() == SwingConstants.TOP){ - top = equidistantLines.get(i).getReference(); - } - if (equidistantLines.get(i).getDirection() == SwingConstants.LEFT){ - left = equidistantLines.get(i).getReference(); - } - if (equidistantLines.get(i).getDirection() == SwingConstants.BOTTOM){ - bottom = equidistantLines.get(i).getReference(); - } - if (equidistantLines.get(i).getDirection() == SwingConstants.RIGHT){ - right = equidistantLines.get(i).getReference(); - } - } - operatingRectangle.x -= designer.getDesignerScrollHorizontalValue(); - operatingRectangle.y -= designer.getDesignerScrollVerticalValue(); - line = Absorptionline.createEquidistantAbsorptionline(operatingRectangle, - top - designer.getDesignerScrollVerticalValue(), - left - designer.getDesignerScrollHorizontalValue(), - bottom - designer.getDesignerScrollVerticalValue(), - right - designer.getDesignerScrollHorizontalValue()); - } - designer.setEquidistantLine(line); - } - - private static void processEquidistantLinesList(PlacePointing pEquidistantX, PlacePointing pEquidistantY, Rectangle operatingRectangle){ - EquidistantLine[] equidistantLines1 = new EquidistantLine[EQUIDISTANTLINE_UNIT]; - //先按方向处理,只保留四个方向上距离最近 - for(int count = 0; count < equidistantLines.size(); count++){ - 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(equidistantLines1[direction] != null - && equidistantLines1[direction].getDistance() > equidistantLines.get(count).getDistance() - || equidistantLines1[direction] == null) { - equidistantLines1[direction] = equidistantLines.get(count); - } - } - } - } - - equidistantLines.clear(); - //找list中横纵分别等距的组合 - if (equidistantLines1[0] != null && equidistantLines1[2] != null){//top, bottom - int offset = equidistantLines1[0].getDistance() - equidistantLines1[2].getDistance(); - if (Math.abs(offset) <= SORPTION_UNIT * 2){ - pEquidistantY.direction = SwingConstants.TOP; - equidistantLines.add(equidistantLines1[0]); - equidistantLines.add(equidistantLines1[2]); - pEquidistantY.palce = operatingRectangle.y - offset / 2; - operatingRectangle.y = pEquidistantY.palce; - } - } - if (equidistantLines1[1] != null && equidistantLines1[3] != null){//left, right - int offset = equidistantLines1[1].getDistance() - equidistantLines1[3].getDistance(); - if (Math.abs(offset) <= SORPTION_UNIT * 2){ - pEquidistantX.direction = SwingConstants.LEFT; - equidistantLines.add(equidistantLines1[1]); - equidistantLines.add(equidistantLines1[3]); - pEquidistantX.palce = operatingRectangle.x - offset / 2; - operatingRectangle.x = pEquidistantX.palce; - } - } - } - - //更新纵向行列线 - private static void updateVerticalLine(int[] selfVertical, RectangleIterator iterator, Absorptionline line){ - int[] targetArray = iterator.getVerticalLine(); - if (intersectArrays(targetArray, selfVertical)){ - line.setVerticalLines(targetArray); - } - } - - //更新横向行列线 - private static void updateHorizontalLine(int[] selfHorizontal, RectangleIterator iterator, Absorptionline line){ - int[] targetArray = iterator.getHorizontalLine(); - if (intersectArrays(targetArray, selfHorizontal)){ - line.setHorizontalLines(targetArray); - } - } - - //检测两个数组是否有相交的部分 - private static boolean intersectArrays(int[] targetArray, int[] selfArray){ - for (int i : targetArray) { - for (int j : selfArray) { - if(i == j){ - return true; - } - } - } - - return false; - } - - private static class EquidistantLine{ - //与操作rectangle的距离 - private int distance; - //参考rectangle的位置 - private int reference; - //等距线的方向 - private int direction; - - EquidistantLine(int distance, int reference, int direction){ - this.distance = distance; - this.reference = reference; - this.direction = direction; - } - - public void setDistance(int distance){ - this.distance = distance; - } - - public int getDistance(){ - return this.distance; - } - - public void setReference(int reference){ - this.reference = reference; - } - - public int getReference(){ - return this.reference; - } - - public void setDirection(int direction){ - this.direction = direction; - } - - public int getDirection(){ - return this.direction; - } - } + public static ArrayList equidistantLines = new ArrayList<>(); + + private MoveUtils() { + + } + + public interface RectangleDesigner { + + /** + * 获取块边界的迭代器 + * + * @return 块边界的迭代器 + * @date 2015-2-12-下午2:43:47 + */ + RectangleIterator createRectangleIterator(); + + /** + * 设置X轴的线 + * + * @param line 连接线 + * @date 2015-2-12-下午2:44:04 + */ + void setXAbsorptionline(Absorptionline line); + + /** + * 设置Y轴的线 + * + * @param line 连接线 + * @date 2015-2-12-下午2:44:04 + */ + void setYAbsorptionline(Absorptionline line); + + /** + * 获取当前选中块的垂直线数组 + * + * @return 块的垂直线数组 + */ + int[] getVerticalLine(); + + /** + * 获取当前选中块的水平线数组 + * + * @return 块的水平线数组 + */ + int[] getHorizontalLine(); + + /** + * 设置designer内部组件是否重叠的标志位 + * + * @param isIntersects 是否重叠 + */ + void setWidgetsIntersected(boolean isIntersects); + + /** + * 获取designer内部组件是否重叠的标志位 + * + * @return 重叠 + */ + boolean isWidgetsIntersected(); + + /** + * 获取designer相对屏幕的位置 + * + * @return 位置 + */ + Point getDesignerLocationOnScreen(); + + /** + * 设置等距线 + * + * @param line 吸附线 + */ + void setEquidistantLine(Absorptionline line); + + /** + * 获取设计器垂直滚动条的值 + * + * @return 滚动条的值 + */ + int getDesignerScrollVerticalValue(); + + /** + * 获取设计器水平滚动条的值 + * + * @return 滚动条的值 + */ + int getDesignerScrollHorizontalValue(); + } + + public interface RectangleIterator { + + /** + * 是否存在下一个块 + * + * @return 是否存在下一个块 + * @date 2015-2-12-下午2:41:32 + */ + boolean hasNext(); + + /** + * 获取下一个块的bounds + * + * @return 下一个块的bounds + * @date 2015-2-12-下午2:41:55 + */ + Rectangle nextRectangle(); + + /** + * 获取块的垂直线数组 + * + * @return 块的垂直线数组 + * @date 2015-2-12-下午2:42:27 + */ + int[] getVerticalLine(); + + /** + * 获取块的水平线数组 + * + * @return 块的水平线数组 + * @date 2015-2-12-下午2:42:27 + */ + int[] getHorizontalLine(); + } + + private static class PlacePointing { + public PlacePointing(int x) { + this.palce = x; + } + + private boolean isFind() { + return direction != -1; + } + + private int palce; + private int direction = -1; + } + + private static void findX(PlacePointing px, Rectangle bounds, int left, int right, int width) { + if (px.isFind()) { + return; + } + if (Math.abs(bounds.x + bounds.width / 2 - (left + right) / 2) <= SORPTION_UNIT) { + px.palce = bounds.x + bounds.width / 2 - width / 2; + px.direction = SwingConstants.CENTER; + } + int x1 = bounds.x; + if (Math.abs(x1 - left) <= SORPTION_UNIT) { + px.palce = x1; + px.direction = SwingConstants.LEFT; + } + if (Math.abs(x1 - right) <= SORPTION_UNIT) { + px.palce = x1 - width; + px.direction = SwingConstants.RIGHT; + } + int x2 = bounds.x + bounds.width; + if (Math.abs(x2 - left) <= SORPTION_UNIT) { + px.palce = x2; + px.direction = SwingConstants.LEFT; + } + if (Math.abs(x2 - right) <= SORPTION_UNIT) { + px.palce = x2 - width; + px.direction = SwingConstants.RIGHT; + } + if (Math.abs(bounds.x + bounds.width / 2 - left) <= SORPTION_UNIT) { + px.palce = bounds.x + bounds.width / 2; + px.direction = SwingConstants.LEFT; + } + if (Math.abs(bounds.x + bounds.width / 2 - right) <= SORPTION_UNIT) { + px.palce = bounds.x + bounds.width / 2 - width; + px.direction = SwingConstants.RIGHT; + } + } + + private static void findY(PlacePointing py, Rectangle bounds, int top, int bottom, int height) { + if (py.isFind()) { + return; + } + + if (Math.abs(bounds.y + bounds.height / 2 - (top + bottom) / 2) <= SORPTION_UNIT) { + py.palce = bounds.y + bounds.height / 2 - height / 2; + py.direction = SwingConstants.CENTER; + } + int y1 = bounds.y; + if (Math.abs(y1 - top) <= SORPTION_UNIT) { + py.palce = y1; + py.direction = SwingConstants.TOP; + } + if (Math.abs(y1 - bottom) <= SORPTION_UNIT) { + py.palce = y1 - height; + py.direction = SwingConstants.BOTTOM; + } + int y2 = bounds.y + bounds.height; + if (Math.abs(y2 - top) <= SORPTION_UNIT) { + py.palce = y2; + py.direction = SwingConstants.TOP; + } + if (Math.abs(y2 - bottom) <= SORPTION_UNIT) { + py.palce = y2 - height; + py.direction = SwingConstants.BOTTOM; + } + if (Math.abs(bounds.y + bounds.height / 2 - top) <= SORPTION_UNIT) { + py.palce = bounds.y + bounds.height / 2; + py.direction = SwingConstants.TOP; + } + if (Math.abs(bounds.y + bounds.height / 2 - bottom) <= SORPTION_UNIT) { + py.palce = bounds.y + bounds.height / 2 - height; + py.direction = SwingConstants.BOTTOM; + } + } + + private static void findEquidistantLine(Rectangle bounds, int left, int top, int height, int width) { + //最近的距离与坐标 + EquidistantLine equidistantLineInfo = new EquidistantLine(0, 0, 0); + //等距线从各边中点画出,先要判断是不是在范围内 + int topMiddleX = left + width / 2; + int leftMiddleY = top + height / 2; + if ((topMiddleX > bounds.getX()) && (topMiddleX < (bounds.getX() + bounds.getWidth()))) { + //当前操作rec在bounds的下方 + if (top > (bounds.getY() + bounds.getHeight())) { + equidistantLineInfo.setDistance(top - (bounds.y + bounds.height)); + equidistantLineInfo.setReference(bounds.y + bounds.height); + equidistantLineInfo.setDirection(SwingConstants.TOP); + } + //当前操作rec在bounds上方 + if ((top + height) < bounds.getY()) { + equidistantLineInfo.setDistance(bounds.y - (top + height)); + equidistantLineInfo.setReference(bounds.y); + equidistantLineInfo.setDirection(SwingConstants.BOTTOM); + } + } else if ((leftMiddleY > bounds.getY()) && (leftMiddleY < (bounds.getY() + bounds.getHeight()))) { + //当前操作rec在bounds的右侧 + if (left > (bounds.getX() + bounds.getWidth())) { + equidistantLineInfo.setDistance(left - (bounds.x + bounds.width)); + equidistantLineInfo.setReference(bounds.x + bounds.width); + equidistantLineInfo.setDirection(SwingConstants.LEFT); + } + //当前操作rec在bounds的左侧 + if ((left + width) < bounds.getX()) { + equidistantLineInfo.setDistance(bounds.x - (left + width)); + equidistantLineInfo.setReference(bounds.x); + equidistantLineInfo.setDirection(SwingConstants.RIGHT); + } + } + if (equidistantLineInfo.getDistance() > 0) { + equidistantLines.add(equidistantLineInfo); + } + } + + + /** + * 吸附 + * + * @param x x坐标 + * @param y y坐标 + * @param width 宽度 + * @param height 高度 + * @param designer 块设计器 + * @return 吸附后坐标 + * @date 2015-2-12-下午2:39:16 + */ + public static Point sorption(int x, int y, int width, int height, RectangleDesigner designer, boolean isParameterLayout) { + + int left = x, top = y, bottom = top + height, right = left + width; + + Rectangle operatingRectangle = new Rectangle(x, y, width, height); + + equidistantLines.clear(); + + PlacePointing px = new PlacePointing(x); + PlacePointing py = new PlacePointing(y); + + PlacePointing pEquidistantX = new PlacePointing(x); + PlacePointing pEquidistantY = new PlacePointing(y); + + RectangleIterator iterator = designer.createRectangleIterator(); + + java.util.List cacheRecs = new ArrayList(); + while (iterator.hasNext()) { + Rectangle bounds = iterator.nextRectangle(); + cacheRecs.add(bounds); + findX(px, bounds, left, right, width); + findY(py, bounds, top, bottom, height); + + if (!isParameterLayout) { + findEquidistantLine(bounds, left, top, height, width); + } + } + + createXAbsorptionline(px, designer, width, cacheRecs); + createYAbsorptionline(py, designer, height, cacheRecs); + operatingRectangle.x = px.palce; + operatingRectangle.y = py.palce; + createEquidistantLine(pEquidistantX, pEquidistantY, operatingRectangle, designer); + Point sorptionPoint = new Point(px.palce, py.palce); + if (!px.isFind()) { + sorptionPoint.x = pEquidistantX.palce; + } + if (!py.isFind()) { + sorptionPoint.y = pEquidistantY.palce; + } + return sorptionPoint; + } + + + private static void createXAbsorptionline(PlacePointing px, RectangleDesigner designer, int width, java.util.List cacheRecs) { + Absorptionline line = null; + RectangleIterator iterator = designer.createRectangleIterator(); + int[] selfVertical = designer.getVerticalLine(); + if (px.direction == SwingConstants.CENTER) { + line = Absorptionline.createXMidAbsorptionline(px.palce + width / 2); + int left = px.palce; + int right = px.palce + width; + for (Rectangle bounds : cacheRecs) { + if (bounds.x == left || bounds.x + bounds.width == left) { + line.setFirstLine(left); + } + if (bounds.x == right || bounds.x + bounds.width == right) { + line.setSecondLine(right); + } + updateVerticalLine(selfVertical, iterator, line); + if (line.isFull()) { + break; + } + } + } else if (px.direction == SwingConstants.LEFT || px.direction == SwingConstants.RIGHT) { + int left = px.direction == SwingConstants.LEFT ? px.palce + width : px.palce; + line = Absorptionline.createXAbsorptionline(px.direction == SwingConstants.LEFT ? px.palce : px.palce + width); + int middle = px.palce + width / 2; + for (Rectangle bounds : cacheRecs) { + if (bounds.x == left || bounds.x + bounds.width == left) { + line.setSecondLine(left); + } + if (bounds.x + bounds.width / 2 == middle) { + line.setMidLine(middle); + } + updateVerticalLine(selfVertical, iterator, line); + if (line.isFull()) { + break; + } + } + } + designer.setXAbsorptionline(line); + } + + private static void createYAbsorptionline(PlacePointing py, RectangleDesigner designer, int height, java.util.List cacheRecs) { + Absorptionline line = null; + RectangleIterator iterator = designer.createRectangleIterator(); + int[] selfHorizontal = designer.getHorizontalLine(); + if (py.direction == SwingConstants.CENTER) { + line = Absorptionline.createYMidAbsorptionline(py.palce + height / 2); + int top = py.palce; + int bottom = py.palce + height; + for (Rectangle bounds : cacheRecs) { + if (bounds.y == top || bounds.y + bounds.height == top) { + line.setFirstLine(top); + } + if (bounds.y == bottom || bounds.y + bounds.height == bottom) { + line.setSecondLine(bottom); + } + updateHorizontalLine(selfHorizontal, iterator, line); + if (line.isFull()) { + break; + } + } + } else if (py.direction == SwingConstants.TOP || py.direction == SwingConstants.BOTTOM) { + int top = py.direction == SwingConstants.TOP ? py.palce + height : py.palce; + line = Absorptionline.createYAbsorptionline(py.direction == SwingConstants.TOP ? py.palce : py.palce + height); + int middle = py.palce + height / 2; + for (Rectangle bounds : cacheRecs) { + if (bounds.y == top || bounds.y + bounds.height == top) { + line.setSecondLine(top); + } + if (bounds.y + bounds.height / 2 == middle) { + line.setMidLine(middle); + } + updateHorizontalLine(selfHorizontal, iterator, line); + if (line.isFull()) { + break; + } + } + } + designer.setYAbsorptionline(line); + } + + private static void createEquidistantLine(PlacePointing px, PlacePointing py, Rectangle operatingRectangle, RectangleDesigner designer) { + processEquidistantLinesList(px, py, operatingRectangle); + Absorptionline line = null; + if (equidistantLines.size() > 0) { + int top = -1; + int left = -1; + int bottom = -1; + int right = -1; + for (int i = 0; i < equidistantLines.size(); i++) { + if (equidistantLines.get(i).getDirection() == SwingConstants.TOP) { + top = equidistantLines.get(i).getReference(); + } + if (equidistantLines.get(i).getDirection() == SwingConstants.LEFT) { + left = equidistantLines.get(i).getReference(); + } + if (equidistantLines.get(i).getDirection() == SwingConstants.BOTTOM) { + bottom = equidistantLines.get(i).getReference(); + } + if (equidistantLines.get(i).getDirection() == SwingConstants.RIGHT) { + right = equidistantLines.get(i).getReference(); + } + } + operatingRectangle.x -= designer.getDesignerScrollHorizontalValue(); + operatingRectangle.y -= designer.getDesignerScrollVerticalValue(); + line = Absorptionline.createEquidistantAbsorptionline(operatingRectangle, + top - designer.getDesignerScrollVerticalValue(), + left - designer.getDesignerScrollHorizontalValue(), + bottom - designer.getDesignerScrollVerticalValue(), + right - designer.getDesignerScrollHorizontalValue()); + } + designer.setEquidistantLine(line); + } + + private static void processEquidistantLinesList(PlacePointing pEquidistantX, PlacePointing pEquidistantY, Rectangle operatingRectangle) { + EquidistantLine[] equidistantLines1 = new EquidistantLine[EQUIDISTANTLINE_UNIT]; + //先按方向处理,只保留四个方向上距离最近 + for (int count = 0; count < equidistantLines.size(); count++) { + 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 (equidistantLines1[direction] != null + && equidistantLines1[direction].getDistance() > equidistantLines.get(count).getDistance() + || equidistantLines1[direction] == null) { + equidistantLines1[direction] = equidistantLines.get(count); + } + } + } + } + + equidistantLines.clear(); + //找list中横纵分别等距的组合 + if (equidistantLines1[0] != null && equidistantLines1[2] != null) {//top, bottom + int offset = equidistantLines1[0].getDistance() - equidistantLines1[2].getDistance(); + if (Math.abs(offset) <= SORPTION_UNIT * 2) { + pEquidistantY.direction = SwingConstants.TOP; + equidistantLines.add(equidistantLines1[0]); + equidistantLines.add(equidistantLines1[2]); + pEquidistantY.palce = operatingRectangle.y - offset / 2; + operatingRectangle.y = pEquidistantY.palce; + } + } + if (equidistantLines1[1] != null && equidistantLines1[3] != null) {//left, right + int offset = equidistantLines1[1].getDistance() - equidistantLines1[3].getDistance(); + if (Math.abs(offset) <= SORPTION_UNIT * 2) { + pEquidistantX.direction = SwingConstants.LEFT; + equidistantLines.add(equidistantLines1[1]); + equidistantLines.add(equidistantLines1[3]); + pEquidistantX.palce = operatingRectangle.x - offset / 2; + operatingRectangle.x = pEquidistantX.palce; + } + } + } + + //更新纵向行列线 + private static void updateVerticalLine(int[] selfVertical, RectangleIterator iterator, Absorptionline line) { + int[] targetArray = iterator.getVerticalLine(); + if (intersectArrays(targetArray, selfVertical)) { + line.setVerticalLines(targetArray); + } + } + + //更新横向行列线 + private static void updateHorizontalLine(int[] selfHorizontal, RectangleIterator iterator, Absorptionline line) { + int[] targetArray = iterator.getHorizontalLine(); + if (intersectArrays(targetArray, selfHorizontal)) { + line.setHorizontalLines(targetArray); + } + } + + //检测两个数组是否有相交的部分 + private static boolean intersectArrays(int[] targetArray, int[] selfArray) { + for (int i : targetArray) { + for (int j : selfArray) { + if (i == j) { + return true; + } + } + } + + return false; + } + + private static class EquidistantLine { + //与操作rectangle的距离 + private int distance; + //参考rectangle的位置 + private int reference; + //等距线的方向 + private int direction; + + EquidistantLine(int distance, int reference, int direction) { + this.distance = distance; + this.reference = reference; + this.direction = direction; + } + + public void setDistance(int distance) { + this.distance = distance; + } + + public int getDistance() { + return this.distance; + } + + public void setReference(int reference) { + this.reference = reference; + } + + public int getReference() { + return this.reference; + } + + public void setDirection(int direction) { + this.direction = direction; + } + + public int getDirection() { + return this.direction; + } + } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/beans/location/WidgetForbidWindow.java b/designer_base/src/com/fr/design/beans/location/WidgetForbidWindow.java index 9ff080afb..7c645d0ad 100644 --- a/designer_base/src/com/fr/design/beans/location/WidgetForbidWindow.java +++ b/designer_base/src/com/fr/design/beans/location/WidgetForbidWindow.java @@ -17,32 +17,29 @@ public class WidgetForbidWindow extends JWindow { private UIButton promptButton = new UIButton(Inter.getLocText("FR-Designer_Forbid_Widgets_Intersects"), BaseUtils.readIcon(IconPathConstants.FORBID_ICON_PATH)); -// /** -// * 构造函数 -// */ -// public WidgetForbidWindow() { -// this.add(promptButton); -// -// this.setSize(WIDTH, HEIGHT); -// } -// -// /** -// * 在指定位置显示窗口, 默认将window的中心点放到指定位置上 -// * -// * @param x x坐标 -// * @param y y坐标 -// * -// */ -// public void showWindow(int x, int y){ -// this.setLocation(x - WIDTH / 2, y - HEIGHT / 2); -// this.setVisible(true); -// } -// -// /** -// * 隐藏当前窗口 -// * -// */ -// public void hideWindow(){ -// this.setVisible(false); -// } + /** + * 构造函数 + */ + public WidgetForbidWindow() { + this.add(promptButton); + this.setSize(WIDTH, HEIGHT); + } + + /** + * 在指定位置显示窗口, 默认将window的中心点放到指定位置上 + * + * @param x x坐标 + * @param y y坐标 + */ + public void showWindow(int x, int y) { + this.setLocation(x - WIDTH / 2, y - HEIGHT / 2); + this.setVisible(true); + } + + /** + * 隐藏当前窗口 + */ + public void hideWindow() { + this.setVisible(false); + } } diff --git a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java index aa7d9932c..5f3c3ac82 100644 --- a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java +++ b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java @@ -123,7 +123,6 @@ public class SelectionModel { if (selection.getSelectedCreator().getClass().equals(XWTabFitLayout.class)) { Rectangle rec = selection.getRelativeBounds(); //Tab布局 - System.out.println("ADD: " + (rec.x + rec.width / 2) + "\t" + (rec.y + BORDER_PROPORTION)); FormSelectionUtils.paste2Container(designer, (XLayoutContainer) selection.getSelectedCreator(), CLIP_BOARD, rec.x + rec.width / 2, diff --git a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java index d1c088d40..f52af750f 100644 --- a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java +++ b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java @@ -1,19 +1,18 @@ package com.fr.design.mainframe; -import java.awt.*; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - import com.fr.base.FRContext; +import com.fr.design.designer.beans.LayoutAdapter; import com.fr.design.designer.beans.adapters.layout.AbstractLayoutAdapter; +import com.fr.design.designer.beans.events.DesignerEvent; import com.fr.design.designer.creator.*; -import com.fr.form.ui.container.WLayout; +import com.fr.form.ui.Widget; import com.fr.form.ui.container.WTitleLayout; import com.fr.general.ComparatorUtils; -import com.fr.design.designer.beans.LayoutAdapter; -import com.fr.design.designer.beans.events.DesignerEvent; -import com.fr.form.ui.Widget; + +import java.awt.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; public class FormSelectionUtils { @@ -22,10 +21,14 @@ public class FormSelectionUtils { private static final int DELAY_Y = 20; //组件复制时是否已经向左上偏移 - private static boolean BACK_OFFSET = false; + private static boolean backoffset = false; //组件重命名后缀 - private static final String postfix = "_c"; + private static final String POSTFIX = "_c"; + + private FormSelectionUtils() { + + } /** * @param designer 编辑器 @@ -67,12 +70,10 @@ public class FormSelectionUtils { } else if (parent instanceof XWFitLayout) { //相对布局 designer.getSelectionModel().getSelection().reset(); - Rectangle rec = clipBoard.getSelctionBounds(); for (XCreator creator : clipBoard.getSelectedCreators()) { try { Widget copied = copyWidget(designer, creator); XCreator copiedCreator = XCreatorUtils.createXCreator(copied, creator.getSize()); - // TODO 获取位置 boolean addSuccess = adapter.addBean(copiedCreator, x, y); if (addSuccess) { @@ -104,14 +105,14 @@ public class FormSelectionUtils { */ private static Point getPasteLocation(AbstractLayoutAdapter layoutAdapter, XCreator copiedCreator, int x, int y) { //当宽度为奇数时 设置偏移 - int x_offset = (copiedCreator.getWidth() & 1) == 1 ? 1 : 0; + int xoffset = (copiedCreator.getWidth() & 1) == 1 ? 1 : 0; //当高度为奇数时 设置偏移 - int y_offset = (copiedCreator.getHeight() & 1) == 1 ? 1 : 0; + int yoffset = (copiedCreator.getHeight() & 1) == 1 ? 1 : 0; if (!layoutAdapter.accept(copiedCreator, x, y)) { XLayoutContainer container = layoutAdapter.getContainer(); - boolean xOut = x < 0 || x + copiedCreator.getWidth() / 2 + x_offset > container.getWidth(); - boolean yOut = y < 0 || y + copiedCreator.getHeight() / 2 + y_offset > container.getHeight(); + boolean xOut = x < 0 || x + copiedCreator.getWidth() / 2 + xoffset > container.getWidth(); + boolean yOut = y < 0 || y + copiedCreator.getHeight() / 2 + yoffset > container.getHeight(); /* * 组件原始位置位于布局的右下角, * 和布局右下边界线紧挨, @@ -119,12 +120,12 @@ public class FormSelectionUtils { * x,y同时越界 */ if (xOut && yOut) { - x = BACK_OFFSET ? container.getWidth() - copiedCreator.getWidth() / 2 - x_offset - : container.getWidth() - copiedCreator.getWidth() / 2 - DELAY_X - x_offset; - y = BACK_OFFSET ? - container.getHeight() - copiedCreator.getHeight() / 2 - y_offset - : container.getHeight() - copiedCreator.getHeight() / 2 - DELAY_Y - y_offset; - BACK_OFFSET = !BACK_OFFSET; + x = backoffset ? container.getWidth() - copiedCreator.getWidth() / 2 - xoffset + : container.getWidth() - copiedCreator.getWidth() / 2 - DELAY_X - xoffset; + y = backoffset ? + container.getHeight() - copiedCreator.getHeight() / 2 - yoffset + : container.getHeight() - copiedCreator.getHeight() / 2 - DELAY_Y - yoffset; + backoffset = !backoffset; return new Point(x, y); } /* @@ -134,8 +135,8 @@ public class FormSelectionUtils { * x,y中只有一个越界 */ else if ((xOut || yOut)) { - x = xOut ? container.getWidth() - copiedCreator.getWidth() / 2 - x_offset : x; - y = yOut ? container.getHeight() - copiedCreator.getHeight() / 2 - y_offset : y; + x = xOut ? container.getWidth() - copiedCreator.getWidth() / 2 - xoffset : x; + y = yOut ? container.getHeight() - copiedCreator.getHeight() / 2 - yoffset : y; return new Point(x, y); } } @@ -143,6 +144,14 @@ public class FormSelectionUtils { } + /** + * 拷贝组件 + * + * @param formDesigner + * @param xCreator + * @return + * @throws CloneNotSupportedException + */ private static Widget copyWidget(FormDesigner formDesigner, XCreator xCreator) throws CloneNotSupportedException { ArrayList nameSpace = new ArrayList(); @@ -155,11 +164,6 @@ public class FormSelectionUtils { } else { copied.setWidgetName(name); } -// if (copied instanceof WLayout) { -// for (int i = 0; i < ((WLayout) copied).getWidgetCount(); i++) { -// setCopiedName(formDesigner, ((WLayout) copied).getWidget(i), clonedNameList); -// } -// } return copied; } @@ -172,12 +176,12 @@ public class FormSelectionUtils { * @return name */ private static String getCopiedName(FormDesigner formDesigner, Widget copied, ArrayList nameSpace) { - String name = copied.getWidgetName(); + StringBuffer name = new StringBuffer(copied.getWidgetName()); do { - name += postfix; - } while (formDesigner.getTarget().isNameExist(name) || nameSpace.contains(name)); - nameSpace.add(name); - return name; + name.append(POSTFIX); + } while (formDesigner.getTarget().isNameExist(name.toString()) || nameSpace.contains(name.toString())); + nameSpace.add(name.toString()); + return name.toString(); } public static void rebuildSelection(FormDesigner designer) { From abfaad3b71fbc650e95cffb0b7b9a28d0f3389e0 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Tue, 28 Mar 2017 15:53:49 +0800 Subject: [PATCH 218/343] =?UTF-8?q?=E6=97=A0=E4=BB=BB=E5=8A=A1=EF=BC=8C?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mainframe/BaseJForm.java | 67 ++++++++++++++++++- 1 file changed, 66 insertions(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/mainframe/BaseJForm.java b/designer_base/src/com/fr/design/mainframe/BaseJForm.java index a666af38b..559387b20 100644 --- a/designer_base/src/com/fr/design/mainframe/BaseJForm.java +++ b/designer_base/src/com/fr/design/mainframe/BaseJForm.java @@ -1 +1,66 @@ -package com.fr.design.mainframe; import javax.swing.JComponent; import com.fr.form.FormElementCaseContainerProvider; /** * Author : Shockway * Date: 13-7-15 * Time: 上午10:28 */ public interface BaseJForm extends JTemplateProvider { String XML_TAG = "JForm"; int FORM_TAB = 0; int ELEMENTCASE_TAB = 1; int ELEMENTCASE_CHANGE_TAB = 2; /** * 刷新所有控件 */ void refreshAllNameWidgets(); /** * 刷新参数 */ void populateParameter(); /** * 刷新选中的控件 */ void refreshSelectedWidget(); /** * 获取当前的Target */ Object getTarget(); /** * 执行撤销 * * @param o 之前保存的状态 */ void applyUndoState4Form(BaseUndoState o); /** * 获取当前编辑的组件 */ JComponent getEditingPane(); /** * 只在Form和ElementCase之间切换 * * @param index 切换位置 */ void tabChanged(int index); /** * 在Form和ElementCase, 以及ElementCase和ElementCase之间切换 * * @param index 切换位置 * @param ecContainer ElementCase所在container */ void tabChanged(int index, FormElementCaseContainerProvider ecContainer); } \ No newline at end of file +package com.fr.design.mainframe; + +import javax.swing.JComponent; + +import com.fr.form.FormElementCaseContainerProvider; + + +/** + * Author : Shockway + * Date: 13-7-15 + * Time: 上午10:28 + */ +public interface BaseJForm extends JTemplateProvider { + + String XML_TAG = "JForm"; + int FORM_TAB = 0; + int ELEMENTCASE_TAB = 1; + int ELEMENTCASE_CHANGE_TAB = 2; + + /** + * 刷新所有控件 + */ + void refreshAllNameWidgets(); + + /** + * 刷新参数 + */ + void populateParameter(); + + /** + * 刷新选中的控件 + */ + void refreshSelectedWidget(); + + /** + * 获取当前的Target + */ + Object getTarget(); + + /** + * 执行撤销 + * + * @param o 之前保存的状态 + */ + void applyUndoState4Form(BaseUndoState o); + + /** + * 获取当前编辑的组件 + */ + JComponent getEditingPane(); + + /** + * 只在Form和ElementCase之间切换 + * + * @param index 切换位置 + */ + void tabChanged(int index); + + /** + * 在Form和ElementCase, 以及ElementCase和ElementCase之间切换 + * + * @param index 切换位置 + * @param ecContainer ElementCase所在container + */ + void tabChanged(int index, FormElementCaseContainerProvider ecContainer); +} \ No newline at end of file From 68c5cc1e52017ee6f399ef83e3266bd5a2781b91 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Tue, 28 Mar 2017 16:01:36 +0800 Subject: [PATCH 219/343] =?UTF-8?q?=E6=97=A0=E4=BB=BB=E5=8A=A1=EF=BC=8C?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/beans/location/MoveUtils.java | 1086 ++++++++--------- .../designer/beans/models/SelectionModel.java | 818 ++++++------- .../design/mainframe/FormSelectionUtils.java | 490 ++++---- 3 files changed, 1197 insertions(+), 1197 deletions(-) diff --git a/designer_base/src/com/fr/design/beans/location/MoveUtils.java b/designer_base/src/com/fr/design/beans/location/MoveUtils.java index f96782ba8..da5b0fa97 100644 --- a/designer_base/src/com/fr/design/beans/location/MoveUtils.java +++ b/designer_base/src/com/fr/design/beans/location/MoveUtils.java @@ -1,544 +1,544 @@ -/* - * Copyright(c) 2001-2011, FineReport Inc, All Rights Reserved. - */ -package com.fr.design.beans.location; - -import javax.swing.*; -import java.awt.*; -import java.util.ArrayList; - -/** - * Created by IntelliJ IDEA. - * - * @author: Richer - * @since : 6.5.5 Date: 11-7-1 Time: 下午2:22 - */ -public class MoveUtils { - - public static final int SORPTION_UNIT = 5; - private static final int EQUIDISTANTLINE_UNIT = 4; - - public static ArrayList equidistantLines = new ArrayList<>(); - - private MoveUtils() { - - } - - public interface RectangleDesigner { - - /** - * 获取块边界的迭代器 - * - * @return 块边界的迭代器 - * @date 2015-2-12-下午2:43:47 - */ - RectangleIterator createRectangleIterator(); - - /** - * 设置X轴的线 - * - * @param line 连接线 - * @date 2015-2-12-下午2:44:04 - */ - void setXAbsorptionline(Absorptionline line); - - /** - * 设置Y轴的线 - * - * @param line 连接线 - * @date 2015-2-12-下午2:44:04 - */ - void setYAbsorptionline(Absorptionline line); - - /** - * 获取当前选中块的垂直线数组 - * - * @return 块的垂直线数组 - */ - int[] getVerticalLine(); - - /** - * 获取当前选中块的水平线数组 - * - * @return 块的水平线数组 - */ - int[] getHorizontalLine(); - - /** - * 设置designer内部组件是否重叠的标志位 - * - * @param isIntersects 是否重叠 - */ - void setWidgetsIntersected(boolean isIntersects); - - /** - * 获取designer内部组件是否重叠的标志位 - * - * @return 重叠 - */ - boolean isWidgetsIntersected(); - - /** - * 获取designer相对屏幕的位置 - * - * @return 位置 - */ - Point getDesignerLocationOnScreen(); - - /** - * 设置等距线 - * - * @param line 吸附线 - */ - void setEquidistantLine(Absorptionline line); - - /** - * 获取设计器垂直滚动条的值 - * - * @return 滚动条的值 - */ - int getDesignerScrollVerticalValue(); - - /** - * 获取设计器水平滚动条的值 - * - * @return 滚动条的值 - */ - int getDesignerScrollHorizontalValue(); - } - - public interface RectangleIterator { - - /** - * 是否存在下一个块 - * - * @return 是否存在下一个块 - * @date 2015-2-12-下午2:41:32 - */ - boolean hasNext(); - - /** - * 获取下一个块的bounds - * - * @return 下一个块的bounds - * @date 2015-2-12-下午2:41:55 - */ - Rectangle nextRectangle(); - - /** - * 获取块的垂直线数组 - * - * @return 块的垂直线数组 - * @date 2015-2-12-下午2:42:27 - */ - int[] getVerticalLine(); - - /** - * 获取块的水平线数组 - * - * @return 块的水平线数组 - * @date 2015-2-12-下午2:42:27 - */ - int[] getHorizontalLine(); - } - - private static class PlacePointing { - public PlacePointing(int x) { - this.palce = x; - } - - private boolean isFind() { - return direction != -1; - } - - private int palce; - private int direction = -1; - } - - private static void findX(PlacePointing px, Rectangle bounds, int left, int right, int width) { - if (px.isFind()) { - return; - } - if (Math.abs(bounds.x + bounds.width / 2 - (left + right) / 2) <= SORPTION_UNIT) { - px.palce = bounds.x + bounds.width / 2 - width / 2; - px.direction = SwingConstants.CENTER; - } - int x1 = bounds.x; - if (Math.abs(x1 - left) <= SORPTION_UNIT) { - px.palce = x1; - px.direction = SwingConstants.LEFT; - } - if (Math.abs(x1 - right) <= SORPTION_UNIT) { - px.palce = x1 - width; - px.direction = SwingConstants.RIGHT; - } - int x2 = bounds.x + bounds.width; - if (Math.abs(x2 - left) <= SORPTION_UNIT) { - px.palce = x2; - px.direction = SwingConstants.LEFT; - } - if (Math.abs(x2 - right) <= SORPTION_UNIT) { - px.palce = x2 - width; - px.direction = SwingConstants.RIGHT; - } - if (Math.abs(bounds.x + bounds.width / 2 - left) <= SORPTION_UNIT) { - px.palce = bounds.x + bounds.width / 2; - px.direction = SwingConstants.LEFT; - } - if (Math.abs(bounds.x + bounds.width / 2 - right) <= SORPTION_UNIT) { - px.palce = bounds.x + bounds.width / 2 - width; - px.direction = SwingConstants.RIGHT; - } - } - - private static void findY(PlacePointing py, Rectangle bounds, int top, int bottom, int height) { - if (py.isFind()) { - return; - } - - if (Math.abs(bounds.y + bounds.height / 2 - (top + bottom) / 2) <= SORPTION_UNIT) { - py.palce = bounds.y + bounds.height / 2 - height / 2; - py.direction = SwingConstants.CENTER; - } - int y1 = bounds.y; - if (Math.abs(y1 - top) <= SORPTION_UNIT) { - py.palce = y1; - py.direction = SwingConstants.TOP; - } - if (Math.abs(y1 - bottom) <= SORPTION_UNIT) { - py.palce = y1 - height; - py.direction = SwingConstants.BOTTOM; - } - int y2 = bounds.y + bounds.height; - if (Math.abs(y2 - top) <= SORPTION_UNIT) { - py.palce = y2; - py.direction = SwingConstants.TOP; - } - if (Math.abs(y2 - bottom) <= SORPTION_UNIT) { - py.palce = y2 - height; - py.direction = SwingConstants.BOTTOM; - } - if (Math.abs(bounds.y + bounds.height / 2 - top) <= SORPTION_UNIT) { - py.palce = bounds.y + bounds.height / 2; - py.direction = SwingConstants.TOP; - } - if (Math.abs(bounds.y + bounds.height / 2 - bottom) <= SORPTION_UNIT) { - py.palce = bounds.y + bounds.height / 2 - height; - py.direction = SwingConstants.BOTTOM; - } - } - - private static void findEquidistantLine(Rectangle bounds, int left, int top, int height, int width) { - //最近的距离与坐标 - EquidistantLine equidistantLineInfo = new EquidistantLine(0, 0, 0); - //等距线从各边中点画出,先要判断是不是在范围内 - int topMiddleX = left + width / 2; - int leftMiddleY = top + height / 2; - if ((topMiddleX > bounds.getX()) && (topMiddleX < (bounds.getX() + bounds.getWidth()))) { - //当前操作rec在bounds的下方 - if (top > (bounds.getY() + bounds.getHeight())) { - equidistantLineInfo.setDistance(top - (bounds.y + bounds.height)); - equidistantLineInfo.setReference(bounds.y + bounds.height); - equidistantLineInfo.setDirection(SwingConstants.TOP); - } - //当前操作rec在bounds上方 - if ((top + height) < bounds.getY()) { - equidistantLineInfo.setDistance(bounds.y - (top + height)); - equidistantLineInfo.setReference(bounds.y); - equidistantLineInfo.setDirection(SwingConstants.BOTTOM); - } - } else if ((leftMiddleY > bounds.getY()) && (leftMiddleY < (bounds.getY() + bounds.getHeight()))) { - //当前操作rec在bounds的右侧 - if (left > (bounds.getX() + bounds.getWidth())) { - equidistantLineInfo.setDistance(left - (bounds.x + bounds.width)); - equidistantLineInfo.setReference(bounds.x + bounds.width); - equidistantLineInfo.setDirection(SwingConstants.LEFT); - } - //当前操作rec在bounds的左侧 - if ((left + width) < bounds.getX()) { - equidistantLineInfo.setDistance(bounds.x - (left + width)); - equidistantLineInfo.setReference(bounds.x); - equidistantLineInfo.setDirection(SwingConstants.RIGHT); - } - } - if (equidistantLineInfo.getDistance() > 0) { - equidistantLines.add(equidistantLineInfo); - } - } - - - /** - * 吸附 - * - * @param x x坐标 - * @param y y坐标 - * @param width 宽度 - * @param height 高度 - * @param designer 块设计器 - * @return 吸附后坐标 - * @date 2015-2-12-下午2:39:16 - */ - public static Point sorption(int x, int y, int width, int height, RectangleDesigner designer, boolean isParameterLayout) { - - int left = x, top = y, bottom = top + height, right = left + width; - - Rectangle operatingRectangle = new Rectangle(x, y, width, height); - - equidistantLines.clear(); - - PlacePointing px = new PlacePointing(x); - PlacePointing py = new PlacePointing(y); - - PlacePointing pEquidistantX = new PlacePointing(x); - PlacePointing pEquidistantY = new PlacePointing(y); - - RectangleIterator iterator = designer.createRectangleIterator(); - - java.util.List cacheRecs = new ArrayList(); - while (iterator.hasNext()) { - Rectangle bounds = iterator.nextRectangle(); - cacheRecs.add(bounds); - findX(px, bounds, left, right, width); - findY(py, bounds, top, bottom, height); - - if (!isParameterLayout) { - findEquidistantLine(bounds, left, top, height, width); - } - } - - createXAbsorptionline(px, designer, width, cacheRecs); - createYAbsorptionline(py, designer, height, cacheRecs); - operatingRectangle.x = px.palce; - operatingRectangle.y = py.palce; - createEquidistantLine(pEquidistantX, pEquidistantY, operatingRectangle, designer); - Point sorptionPoint = new Point(px.palce, py.palce); - if (!px.isFind()) { - sorptionPoint.x = pEquidistantX.palce; - } - if (!py.isFind()) { - sorptionPoint.y = pEquidistantY.palce; - } - return sorptionPoint; - } - - - private static void createXAbsorptionline(PlacePointing px, RectangleDesigner designer, int width, java.util.List cacheRecs) { - Absorptionline line = null; - RectangleIterator iterator = designer.createRectangleIterator(); - int[] selfVertical = designer.getVerticalLine(); - if (px.direction == SwingConstants.CENTER) { - line = Absorptionline.createXMidAbsorptionline(px.palce + width / 2); - int left = px.palce; - int right = px.palce + width; - for (Rectangle bounds : cacheRecs) { - if (bounds.x == left || bounds.x + bounds.width == left) { - line.setFirstLine(left); - } - if (bounds.x == right || bounds.x + bounds.width == right) { - line.setSecondLine(right); - } - updateVerticalLine(selfVertical, iterator, line); - if (line.isFull()) { - break; - } - } - } else if (px.direction == SwingConstants.LEFT || px.direction == SwingConstants.RIGHT) { - int left = px.direction == SwingConstants.LEFT ? px.palce + width : px.palce; - line = Absorptionline.createXAbsorptionline(px.direction == SwingConstants.LEFT ? px.palce : px.palce + width); - int middle = px.palce + width / 2; - for (Rectangle bounds : cacheRecs) { - if (bounds.x == left || bounds.x + bounds.width == left) { - line.setSecondLine(left); - } - if (bounds.x + bounds.width / 2 == middle) { - line.setMidLine(middle); - } - updateVerticalLine(selfVertical, iterator, line); - if (line.isFull()) { - break; - } - } - } - designer.setXAbsorptionline(line); - } - - private static void createYAbsorptionline(PlacePointing py, RectangleDesigner designer, int height, java.util.List cacheRecs) { - Absorptionline line = null; - RectangleIterator iterator = designer.createRectangleIterator(); - int[] selfHorizontal = designer.getHorizontalLine(); - if (py.direction == SwingConstants.CENTER) { - line = Absorptionline.createYMidAbsorptionline(py.palce + height / 2); - int top = py.palce; - int bottom = py.palce + height; - for (Rectangle bounds : cacheRecs) { - if (bounds.y == top || bounds.y + bounds.height == top) { - line.setFirstLine(top); - } - if (bounds.y == bottom || bounds.y + bounds.height == bottom) { - line.setSecondLine(bottom); - } - updateHorizontalLine(selfHorizontal, iterator, line); - if (line.isFull()) { - break; - } - } - } else if (py.direction == SwingConstants.TOP || py.direction == SwingConstants.BOTTOM) { - int top = py.direction == SwingConstants.TOP ? py.palce + height : py.palce; - line = Absorptionline.createYAbsorptionline(py.direction == SwingConstants.TOP ? py.palce : py.palce + height); - int middle = py.palce + height / 2; - for (Rectangle bounds : cacheRecs) { - if (bounds.y == top || bounds.y + bounds.height == top) { - line.setSecondLine(top); - } - if (bounds.y + bounds.height / 2 == middle) { - line.setMidLine(middle); - } - updateHorizontalLine(selfHorizontal, iterator, line); - if (line.isFull()) { - break; - } - } - } - designer.setYAbsorptionline(line); - } - - private static void createEquidistantLine(PlacePointing px, PlacePointing py, Rectangle operatingRectangle, RectangleDesigner designer) { - processEquidistantLinesList(px, py, operatingRectangle); - Absorptionline line = null; - if (equidistantLines.size() > 0) { - int top = -1; - int left = -1; - int bottom = -1; - int right = -1; - for (int i = 0; i < equidistantLines.size(); i++) { - if (equidistantLines.get(i).getDirection() == SwingConstants.TOP) { - top = equidistantLines.get(i).getReference(); - } - if (equidistantLines.get(i).getDirection() == SwingConstants.LEFT) { - left = equidistantLines.get(i).getReference(); - } - if (equidistantLines.get(i).getDirection() == SwingConstants.BOTTOM) { - bottom = equidistantLines.get(i).getReference(); - } - if (equidistantLines.get(i).getDirection() == SwingConstants.RIGHT) { - right = equidistantLines.get(i).getReference(); - } - } - operatingRectangle.x -= designer.getDesignerScrollHorizontalValue(); - operatingRectangle.y -= designer.getDesignerScrollVerticalValue(); - line = Absorptionline.createEquidistantAbsorptionline(operatingRectangle, - top - designer.getDesignerScrollVerticalValue(), - left - designer.getDesignerScrollHorizontalValue(), - bottom - designer.getDesignerScrollVerticalValue(), - right - designer.getDesignerScrollHorizontalValue()); - } - designer.setEquidistantLine(line); - } - - private static void processEquidistantLinesList(PlacePointing pEquidistantX, PlacePointing pEquidistantY, Rectangle operatingRectangle) { - EquidistantLine[] equidistantLines1 = new EquidistantLine[EQUIDISTANTLINE_UNIT]; - //先按方向处理,只保留四个方向上距离最近 - for (int count = 0; count < equidistantLines.size(); count++) { - 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 (equidistantLines1[direction] != null - && equidistantLines1[direction].getDistance() > equidistantLines.get(count).getDistance() - || equidistantLines1[direction] == null) { - equidistantLines1[direction] = equidistantLines.get(count); - } - } - } - } - - equidistantLines.clear(); - //找list中横纵分别等距的组合 - if (equidistantLines1[0] != null && equidistantLines1[2] != null) {//top, bottom - int offset = equidistantLines1[0].getDistance() - equidistantLines1[2].getDistance(); - if (Math.abs(offset) <= SORPTION_UNIT * 2) { - pEquidistantY.direction = SwingConstants.TOP; - equidistantLines.add(equidistantLines1[0]); - equidistantLines.add(equidistantLines1[2]); - pEquidistantY.palce = operatingRectangle.y - offset / 2; - operatingRectangle.y = pEquidistantY.palce; - } - } - if (equidistantLines1[1] != null && equidistantLines1[3] != null) {//left, right - int offset = equidistantLines1[1].getDistance() - equidistantLines1[3].getDistance(); - if (Math.abs(offset) <= SORPTION_UNIT * 2) { - pEquidistantX.direction = SwingConstants.LEFT; - equidistantLines.add(equidistantLines1[1]); - equidistantLines.add(equidistantLines1[3]); - pEquidistantX.palce = operatingRectangle.x - offset / 2; - operatingRectangle.x = pEquidistantX.palce; - } - } - } - - //更新纵向行列线 - private static void updateVerticalLine(int[] selfVertical, RectangleIterator iterator, Absorptionline line) { - int[] targetArray = iterator.getVerticalLine(); - if (intersectArrays(targetArray, selfVertical)) { - line.setVerticalLines(targetArray); - } - } - - //更新横向行列线 - private static void updateHorizontalLine(int[] selfHorizontal, RectangleIterator iterator, Absorptionline line) { - int[] targetArray = iterator.getHorizontalLine(); - if (intersectArrays(targetArray, selfHorizontal)) { - line.setHorizontalLines(targetArray); - } - } - - //检测两个数组是否有相交的部分 - private static boolean intersectArrays(int[] targetArray, int[] selfArray) { - for (int i : targetArray) { - for (int j : selfArray) { - if (i == j) { - return true; - } - } - } - - return false; - } - - private static class EquidistantLine { - //与操作rectangle的距离 - private int distance; - //参考rectangle的位置 - private int reference; - //等距线的方向 - private int direction; - - EquidistantLine(int distance, int reference, int direction) { - this.distance = distance; - this.reference = reference; - this.direction = direction; - } - - public void setDistance(int distance) { - this.distance = distance; - } - - public int getDistance() { - return this.distance; - } - - public void setReference(int reference) { - this.reference = reference; - } - - public int getReference() { - return this.reference; - } - - public void setDirection(int direction) { - this.direction = direction; - } - - public int getDirection() { - return this.direction; - } - } +/* + * Copyright(c) 2001-2011, FineReport Inc, All Rights Reserved. + */ +package com.fr.design.beans.location; + +import javax.swing.*; +import java.awt.*; +import java.util.ArrayList; + +/** + * Created by IntelliJ IDEA. + * + * @author: Richer + * @since : 6.5.5 Date: 11-7-1 Time: 下午2:22 + */ +public class MoveUtils { + + public static final int SORPTION_UNIT = 5; + private static final int EQUIDISTANTLINE_UNIT = 4; + + public static ArrayList equidistantLines = new ArrayList<>(); + + private MoveUtils() { + + } + + public interface RectangleDesigner { + + /** + * 获取块边界的迭代器 + * + * @return 块边界的迭代器 + * @date 2015-2-12-下午2:43:47 + */ + RectangleIterator createRectangleIterator(); + + /** + * 设置X轴的线 + * + * @param line 连接线 + * @date 2015-2-12-下午2:44:04 + */ + void setXAbsorptionline(Absorptionline line); + + /** + * 设置Y轴的线 + * + * @param line 连接线 + * @date 2015-2-12-下午2:44:04 + */ + void setYAbsorptionline(Absorptionline line); + + /** + * 获取当前选中块的垂直线数组 + * + * @return 块的垂直线数组 + */ + int[] getVerticalLine(); + + /** + * 获取当前选中块的水平线数组 + * + * @return 块的水平线数组 + */ + int[] getHorizontalLine(); + + /** + * 设置designer内部组件是否重叠的标志位 + * + * @param isIntersects 是否重叠 + */ + void setWidgetsIntersected(boolean isIntersects); + + /** + * 获取designer内部组件是否重叠的标志位 + * + * @return 重叠 + */ + boolean isWidgetsIntersected(); + + /** + * 获取designer相对屏幕的位置 + * + * @return 位置 + */ + Point getDesignerLocationOnScreen(); + + /** + * 设置等距线 + * + * @param line 吸附线 + */ + void setEquidistantLine(Absorptionline line); + + /** + * 获取设计器垂直滚动条的值 + * + * @return 滚动条的值 + */ + int getDesignerScrollVerticalValue(); + + /** + * 获取设计器水平滚动条的值 + * + * @return 滚动条的值 + */ + int getDesignerScrollHorizontalValue(); + } + + public interface RectangleIterator { + + /** + * 是否存在下一个块 + * + * @return 是否存在下一个块 + * @date 2015-2-12-下午2:41:32 + */ + boolean hasNext(); + + /** + * 获取下一个块的bounds + * + * @return 下一个块的bounds + * @date 2015-2-12-下午2:41:55 + */ + Rectangle nextRectangle(); + + /** + * 获取块的垂直线数组 + * + * @return 块的垂直线数组 + * @date 2015-2-12-下午2:42:27 + */ + int[] getVerticalLine(); + + /** + * 获取块的水平线数组 + * + * @return 块的水平线数组 + * @date 2015-2-12-下午2:42:27 + */ + int[] getHorizontalLine(); + } + + private static class PlacePointing { + public PlacePointing(int x) { + this.palce = x; + } + + private boolean isFind() { + return direction != -1; + } + + private int palce; + private int direction = -1; + } + + private static void findX(PlacePointing px, Rectangle bounds, int left, int right, int width) { + if (px.isFind()) { + return; + } + if (Math.abs(bounds.x + bounds.width / 2 - (left + right) / 2) <= SORPTION_UNIT) { + px.palce = bounds.x + bounds.width / 2 - width / 2; + px.direction = SwingConstants.CENTER; + } + int x1 = bounds.x; + if (Math.abs(x1 - left) <= SORPTION_UNIT) { + px.palce = x1; + px.direction = SwingConstants.LEFT; + } + if (Math.abs(x1 - right) <= SORPTION_UNIT) { + px.palce = x1 - width; + px.direction = SwingConstants.RIGHT; + } + int x2 = bounds.x + bounds.width; + if (Math.abs(x2 - left) <= SORPTION_UNIT) { + px.palce = x2; + px.direction = SwingConstants.LEFT; + } + if (Math.abs(x2 - right) <= SORPTION_UNIT) { + px.palce = x2 - width; + px.direction = SwingConstants.RIGHT; + } + if (Math.abs(bounds.x + bounds.width / 2 - left) <= SORPTION_UNIT) { + px.palce = bounds.x + bounds.width / 2; + px.direction = SwingConstants.LEFT; + } + if (Math.abs(bounds.x + bounds.width / 2 - right) <= SORPTION_UNIT) { + px.palce = bounds.x + bounds.width / 2 - width; + px.direction = SwingConstants.RIGHT; + } + } + + private static void findY(PlacePointing py, Rectangle bounds, int top, int bottom, int height) { + if (py.isFind()) { + return; + } + + if (Math.abs(bounds.y + bounds.height / 2 - (top + bottom) / 2) <= SORPTION_UNIT) { + py.palce = bounds.y + bounds.height / 2 - height / 2; + py.direction = SwingConstants.CENTER; + } + int y1 = bounds.y; + if (Math.abs(y1 - top) <= SORPTION_UNIT) { + py.palce = y1; + py.direction = SwingConstants.TOP; + } + if (Math.abs(y1 - bottom) <= SORPTION_UNIT) { + py.palce = y1 - height; + py.direction = SwingConstants.BOTTOM; + } + int y2 = bounds.y + bounds.height; + if (Math.abs(y2 - top) <= SORPTION_UNIT) { + py.palce = y2; + py.direction = SwingConstants.TOP; + } + if (Math.abs(y2 - bottom) <= SORPTION_UNIT) { + py.palce = y2 - height; + py.direction = SwingConstants.BOTTOM; + } + if (Math.abs(bounds.y + bounds.height / 2 - top) <= SORPTION_UNIT) { + py.palce = bounds.y + bounds.height / 2; + py.direction = SwingConstants.TOP; + } + if (Math.abs(bounds.y + bounds.height / 2 - bottom) <= SORPTION_UNIT) { + py.palce = bounds.y + bounds.height / 2 - height; + py.direction = SwingConstants.BOTTOM; + } + } + + private static void findEquidistantLine(Rectangle bounds, int left, int top, int height, int width) { + //最近的距离与坐标 + EquidistantLine equidistantLineInfo = new EquidistantLine(0, 0, 0); + //等距线从各边中点画出,先要判断是不是在范围内 + int topMiddleX = left + width / 2; + int leftMiddleY = top + height / 2; + if ((topMiddleX > bounds.getX()) && (topMiddleX < (bounds.getX() + bounds.getWidth()))) { + //当前操作rec在bounds的下方 + if (top > (bounds.getY() + bounds.getHeight())) { + equidistantLineInfo.setDistance(top - (bounds.y + bounds.height)); + equidistantLineInfo.setReference(bounds.y + bounds.height); + equidistantLineInfo.setDirection(SwingConstants.TOP); + } + //当前操作rec在bounds上方 + if ((top + height) < bounds.getY()) { + equidistantLineInfo.setDistance(bounds.y - (top + height)); + equidistantLineInfo.setReference(bounds.y); + equidistantLineInfo.setDirection(SwingConstants.BOTTOM); + } + } else if ((leftMiddleY > bounds.getY()) && (leftMiddleY < (bounds.getY() + bounds.getHeight()))) { + //当前操作rec在bounds的右侧 + if (left > (bounds.getX() + bounds.getWidth())) { + equidistantLineInfo.setDistance(left - (bounds.x + bounds.width)); + equidistantLineInfo.setReference(bounds.x + bounds.width); + equidistantLineInfo.setDirection(SwingConstants.LEFT); + } + //当前操作rec在bounds的左侧 + if ((left + width) < bounds.getX()) { + equidistantLineInfo.setDistance(bounds.x - (left + width)); + equidistantLineInfo.setReference(bounds.x); + equidistantLineInfo.setDirection(SwingConstants.RIGHT); + } + } + if (equidistantLineInfo.getDistance() > 0) { + equidistantLines.add(equidistantLineInfo); + } + } + + + /** + * 吸附 + * + * @param x x坐标 + * @param y y坐标 + * @param width 宽度 + * @param height 高度 + * @param designer 块设计器 + * @return 吸附后坐标 + * @date 2015-2-12-下午2:39:16 + */ + public static Point sorption(int x, int y, int width, int height, RectangleDesigner designer, boolean isParameterLayout) { + + int left = x, top = y, bottom = top + height, right = left + width; + + Rectangle operatingRectangle = new Rectangle(x, y, width, height); + + equidistantLines.clear(); + + PlacePointing px = new PlacePointing(x); + PlacePointing py = new PlacePointing(y); + + PlacePointing pEquidistantX = new PlacePointing(x); + PlacePointing pEquidistantY = new PlacePointing(y); + + RectangleIterator iterator = designer.createRectangleIterator(); + + java.util.List cacheRecs = new ArrayList(); + while (iterator.hasNext()) { + Rectangle bounds = iterator.nextRectangle(); + cacheRecs.add(bounds); + findX(px, bounds, left, right, width); + findY(py, bounds, top, bottom, height); + + if (!isParameterLayout) { + findEquidistantLine(bounds, left, top, height, width); + } + } + + createXAbsorptionline(px, designer, width, cacheRecs); + createYAbsorptionline(py, designer, height, cacheRecs); + operatingRectangle.x = px.palce; + operatingRectangle.y = py.palce; + createEquidistantLine(pEquidistantX, pEquidistantY, operatingRectangle, designer); + Point sorptionPoint = new Point(px.palce, py.palce); + if (!px.isFind()) { + sorptionPoint.x = pEquidistantX.palce; + } + if (!py.isFind()) { + sorptionPoint.y = pEquidistantY.palce; + } + return sorptionPoint; + } + + + private static void createXAbsorptionline(PlacePointing px, RectangleDesigner designer, int width, java.util.List cacheRecs) { + Absorptionline line = null; + RectangleIterator iterator = designer.createRectangleIterator(); + int[] selfVertical = designer.getVerticalLine(); + if (px.direction == SwingConstants.CENTER) { + line = Absorptionline.createXMidAbsorptionline(px.palce + width / 2); + int left = px.palce; + int right = px.palce + width; + for (Rectangle bounds : cacheRecs) { + if (bounds.x == left || bounds.x + bounds.width == left) { + line.setFirstLine(left); + } + if (bounds.x == right || bounds.x + bounds.width == right) { + line.setSecondLine(right); + } + updateVerticalLine(selfVertical, iterator, line); + if (line.isFull()) { + break; + } + } + } else if (px.direction == SwingConstants.LEFT || px.direction == SwingConstants.RIGHT) { + int left = px.direction == SwingConstants.LEFT ? px.palce + width : px.palce; + line = Absorptionline.createXAbsorptionline(px.direction == SwingConstants.LEFT ? px.palce : px.palce + width); + int middle = px.palce + width / 2; + for (Rectangle bounds : cacheRecs) { + if (bounds.x == left || bounds.x + bounds.width == left) { + line.setSecondLine(left); + } + if (bounds.x + bounds.width / 2 == middle) { + line.setMidLine(middle); + } + updateVerticalLine(selfVertical, iterator, line); + if (line.isFull()) { + break; + } + } + } + designer.setXAbsorptionline(line); + } + + private static void createYAbsorptionline(PlacePointing py, RectangleDesigner designer, int height, java.util.List cacheRecs) { + Absorptionline line = null; + RectangleIterator iterator = designer.createRectangleIterator(); + int[] selfHorizontal = designer.getHorizontalLine(); + if (py.direction == SwingConstants.CENTER) { + line = Absorptionline.createYMidAbsorptionline(py.palce + height / 2); + int top = py.palce; + int bottom = py.palce + height; + for (Rectangle bounds : cacheRecs) { + if (bounds.y == top || bounds.y + bounds.height == top) { + line.setFirstLine(top); + } + if (bounds.y == bottom || bounds.y + bounds.height == bottom) { + line.setSecondLine(bottom); + } + updateHorizontalLine(selfHorizontal, iterator, line); + if (line.isFull()) { + break; + } + } + } else if (py.direction == SwingConstants.TOP || py.direction == SwingConstants.BOTTOM) { + int top = py.direction == SwingConstants.TOP ? py.palce + height : py.palce; + line = Absorptionline.createYAbsorptionline(py.direction == SwingConstants.TOP ? py.palce : py.palce + height); + int middle = py.palce + height / 2; + for (Rectangle bounds : cacheRecs) { + if (bounds.y == top || bounds.y + bounds.height == top) { + line.setSecondLine(top); + } + if (bounds.y + bounds.height / 2 == middle) { + line.setMidLine(middle); + } + updateHorizontalLine(selfHorizontal, iterator, line); + if (line.isFull()) { + break; + } + } + } + designer.setYAbsorptionline(line); + } + + private static void createEquidistantLine(PlacePointing px, PlacePointing py, Rectangle operatingRectangle, RectangleDesigner designer) { + processEquidistantLinesList(px, py, operatingRectangle); + Absorptionline line = null; + if (equidistantLines.size() > 0) { + int top = -1; + int left = -1; + int bottom = -1; + int right = -1; + for (int i = 0; i < equidistantLines.size(); i++) { + if (equidistantLines.get(i).getDirection() == SwingConstants.TOP) { + top = equidistantLines.get(i).getReference(); + } + if (equidistantLines.get(i).getDirection() == SwingConstants.LEFT) { + left = equidistantLines.get(i).getReference(); + } + if (equidistantLines.get(i).getDirection() == SwingConstants.BOTTOM) { + bottom = equidistantLines.get(i).getReference(); + } + if (equidistantLines.get(i).getDirection() == SwingConstants.RIGHT) { + right = equidistantLines.get(i).getReference(); + } + } + operatingRectangle.x -= designer.getDesignerScrollHorizontalValue(); + operatingRectangle.y -= designer.getDesignerScrollVerticalValue(); + line = Absorptionline.createEquidistantAbsorptionline(operatingRectangle, + top - designer.getDesignerScrollVerticalValue(), + left - designer.getDesignerScrollHorizontalValue(), + bottom - designer.getDesignerScrollVerticalValue(), + right - designer.getDesignerScrollHorizontalValue()); + } + designer.setEquidistantLine(line); + } + + private static void processEquidistantLinesList(PlacePointing pEquidistantX, PlacePointing pEquidistantY, Rectangle operatingRectangle) { + EquidistantLine[] equidistantLines1 = new EquidistantLine[EQUIDISTANTLINE_UNIT]; + //先按方向处理,只保留四个方向上距离最近 + for (int count = 0; count < equidistantLines.size(); count++) { + 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 (equidistantLines1[direction] != null + && equidistantLines1[direction].getDistance() > equidistantLines.get(count).getDistance() + || equidistantLines1[direction] == null) { + equidistantLines1[direction] = equidistantLines.get(count); + } + } + } + } + + equidistantLines.clear(); + //找list中横纵分别等距的组合 + if (equidistantLines1[0] != null && equidistantLines1[2] != null) {//top, bottom + int offset = equidistantLines1[0].getDistance() - equidistantLines1[2].getDistance(); + if (Math.abs(offset) <= SORPTION_UNIT * 2) { + pEquidistantY.direction = SwingConstants.TOP; + equidistantLines.add(equidistantLines1[0]); + equidistantLines.add(equidistantLines1[2]); + pEquidistantY.palce = operatingRectangle.y - offset / 2; + operatingRectangle.y = pEquidistantY.palce; + } + } + if (equidistantLines1[1] != null && equidistantLines1[3] != null) {//left, right + int offset = equidistantLines1[1].getDistance() - equidistantLines1[3].getDistance(); + if (Math.abs(offset) <= SORPTION_UNIT * 2) { + pEquidistantX.direction = SwingConstants.LEFT; + equidistantLines.add(equidistantLines1[1]); + equidistantLines.add(equidistantLines1[3]); + pEquidistantX.palce = operatingRectangle.x - offset / 2; + operatingRectangle.x = pEquidistantX.palce; + } + } + } + + //更新纵向行列线 + private static void updateVerticalLine(int[] selfVertical, RectangleIterator iterator, Absorptionline line) { + int[] targetArray = iterator.getVerticalLine(); + if (intersectArrays(targetArray, selfVertical)) { + line.setVerticalLines(targetArray); + } + } + + //更新横向行列线 + private static void updateHorizontalLine(int[] selfHorizontal, RectangleIterator iterator, Absorptionline line) { + int[] targetArray = iterator.getHorizontalLine(); + if (intersectArrays(targetArray, selfHorizontal)) { + line.setHorizontalLines(targetArray); + } + } + + //检测两个数组是否有相交的部分 + private static boolean intersectArrays(int[] targetArray, int[] selfArray) { + for (int i : targetArray) { + for (int j : selfArray) { + if (i == j) { + return true; + } + } + } + + return false; + } + + private static class EquidistantLine { + //与操作rectangle的距离 + private int distance; + //参考rectangle的位置 + private int reference; + //等距线的方向 + private int direction; + + EquidistantLine(int distance, int reference, int direction) { + this.distance = distance; + this.reference = reference; + this.direction = direction; + } + + public void setDistance(int distance) { + this.distance = distance; + } + + public int getDistance() { + return this.distance; + } + + public void setReference(int reference) { + this.reference = reference; + } + + public int getReference() { + return this.reference; + } + + public void setDirection(int direction) { + this.direction = direction; + } + + public int getDirection() { + return this.direction; + } + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java index 5f3c3ac82..610581357 100644 --- a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java +++ b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java @@ -1,410 +1,410 @@ -package com.fr.design.designer.beans.models; - -import java.awt.LayoutManager; -import java.awt.Rectangle; -import java.awt.Toolkit; -import java.awt.event.MouseEvent; -import java.util.ArrayList; - -import com.fr.design.designer.beans.AdapterBus; -import com.fr.design.designer.beans.LayoutAdapter; -import com.fr.design.designer.beans.events.DesignerEvent; -import com.fr.design.designer.beans.location.Direction; -import com.fr.design.designer.beans.location.Location; -import com.fr.design.designer.creator.*; -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.form.util.XCreatorConstants; -import com.fr.design.mainframe.FormDesigner; -import com.fr.design.mainframe.FormSelection; -import com.fr.design.mainframe.FormSelectionUtils; -import com.fr.design.utils.gui.LayoutUtils; -import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; -import com.fr.stable.ArrayUtils; - -/** - * 该model保存当前选择的组件和剪切版信息 - */ -public class SelectionModel { - //被粘贴组件在所选组件位置处往下、往右各错开20像素。执行多次粘贴时,在上一次粘贴的位置处错开20像素。 - private static final int DELTA_X_Y = 20; //粘贴时候的偏移距离 - private static final int BORDER_PROPORTION = 20; - private static FormSelection CLIP_BOARD = new FormSelection(); - private FormDesigner designer; - private FormSelection selection; - private Rectangle hotspot_bounds; - - public SelectionModel(FormDesigner designer) { - this.designer = designer; - selection = new FormSelection(); - } - - /** - * 重置。清空formSelction以及选择区域 - */ - public void reset() { - selection.reset(); - hotspot_bounds = null; - } - - /** - * formSelction是否为空 - * - * @return 是否为空 - */ - public static boolean isEmpty() { - return CLIP_BOARD.isEmpty(); - } - - /** - * 鼠标点击一下,所选中的单个组件。按下Ctrl或者shift键时鼠标可以进行多选 - * - * @param e 鼠标事件 - */ - public void selectACreatorAtMouseEvent(MouseEvent e) { - if (!e.isControlDown() && !e.isShiftDown()) { - // 如果Ctrl或者Shift键盘没有按下,则清除已经选择的组件 - selection.reset(); - } - - // 获取e所在的组件 - XCreator comp = designer.getComponentAt(e); - - //布局组件的顶层布局如不可编辑,要获取其顶层布局 - XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer(comp).getTopLayout(); - if (topLayout != null && !topLayout.isEditable()) { - comp = topLayout; - } - - // 如果父层是scale和title两个专属容器,返回其父层,组件本身是不让被选中的 - if (comp != designer.getRootComponent() && comp != designer.getParaComponent()) { - XCreator parentContainer = (XCreator) comp.getParent(); - comp = parentContainer.isDedicateContainer() ? parentContainer : comp; - } - if (selection.removeSelectedCreator(comp) || selection.addSelectedCreator(comp)) { - designer.getEditListenerTable().fireCreatorModified(comp, DesignerEvent.CREATOR_SELECTED); - designer.repaint(); - } - } - - /** - * 将所选组件剪切到剪切板上 - */ - public void cutSelectedCreator2ClipBoard() { - if (hasSelectionComponent()) { - selection.cut2ClipBoard(CLIP_BOARD); - designer.getEditListenerTable().fireCreatorModified(DesignerEvent.CREATOR_CUTED); - designer.repaint(); - } - } - - /** - * 复制当前选中的组件到剪切板 - */ - public void copySelectedCreator2ClipBoard() { - if (!selection.isEmpty()) { - selection.copy2ClipBoard(CLIP_BOARD); - } - } - - /** - * 从剪切板粘帖组件 - * - * @return 否 - */ - public boolean pasteFromClipBoard() { - if (!CLIP_BOARD.isEmpty()) { - XLayoutContainer parent = null; - //未选 - if (!hasSelectionComponent()) { - if (designer.getClass().equals(FormDesigner.class)) { - if (selection.getSelectedCreator() instanceof XWFitLayout) { - if (selection.getSelectedCreator().getClass().equals(XWTabFitLayout.class)) { - Rectangle rec = selection.getRelativeBounds(); - //Tab布局 - FormSelectionUtils.paste2Container(designer, (XLayoutContainer) selection.getSelectedCreator(), - CLIP_BOARD, - rec.x + rec.width / 2, - rec.y + BORDER_PROPORTION); - } else { - Rectangle rec = selection.getRelativeBounds(); - //自适应布局 - FormSelectionUtils.paste2Container(designer, designer.getRootComponent(), - CLIP_BOARD, - rec.x + rec.width / 2, - rec.y + BORDER_PROPORTION); - } - } else { - //绝对布局 - //编辑器外面还有两层容器,使用designer.getRootComponent()获取到的是编辑器中层的容器,不是编辑器表层 - //当前选择的就是编辑器表层 - FormSelectionUtils.paste2Container(designer, (XLayoutContainer) selection.getSelectedCreator(), - CLIP_BOARD, - DELTA_X_Y, - DELTA_X_Y); - } - } else { - //cpt本地组件复用,编辑器就一层,是最底层,使用designer.getRootComponent()就可以获取到 - //使用selection.getSelectedCreator()也应该是可以获取到的。 - FormSelectionUtils.paste2Container(designer, designer.getRootComponent(), - CLIP_BOARD, - DELTA_X_Y, - DELTA_X_Y); - } - } - //已选 - else { - //获取到编辑器的表层容器(已选的组件的父容器就是表层容器) - parent = XCreatorUtils.getParentXLayoutContainer(selection.getSelectedCreator()); - if (selection.getSelectedCreator().getParent() instanceof XWFitLayout) { - //自适应布局 - if (parent != null) { - Rectangle rec = selection.getRelativeBounds(); - FormSelectionUtils.paste2Container(designer, parent, CLIP_BOARD, rec.x + rec.width / 2, rec.y + - rec.height - BORDER_PROPORTION); - } - } else if (selection.getSelectedCreator().getParent() instanceof XWAbsoluteLayout) { - //绝对布局 - if (parent != null) { - Rectangle rec = selection.getSelctionBounds(); - FormSelectionUtils.paste2Container(designer, parent, CLIP_BOARD, rec.x + DELTA_X_Y, rec.y + DELTA_X_Y); - } - } - } - } else { - Toolkit.getDefaultToolkit().beep(); - } - return false; - } - - public FormSelection getSelection() { - return selection; - } - - /** - * 删除当前所有选择的组件 - */ - public void deleteSelection() { - XCreator[] roots = selection.getSelectedCreators(); - - if (roots.length > 0) { - for (XCreator creator : roots) { - if (creator.acceptType(XWParameterLayout.class)) { - designer.removeParaComponent(); - } - - removeCreatorFromContainer(creator, creator.getWidth(), creator.getHeight()); - creator.removeAll(); - // 清除被选中的组件 - selection.reset(); - } - setSelectedCreator(designer.getRootComponent()); - // 触发事件 - designer.getEditListenerTable().fireCreatorModified(DesignerEvent.CREATOR_DELETED); - designer.repaint(); - } - } - - /** - * 从选择组件中删除某组件 - * - * @param creator 组件 - * @param creatorWidth 组件之前宽度 - * @param creatorHeight 组件之前高度 - */ - public void removeCreator(XCreator creator, int creatorWidth, int creatorHeight) { - selection.removeCreator(creator); - removeCreatorFromContainer(creator, creatorWidth, creatorHeight); - designer.repaint(); - } - - /** - * 设置选择区域 - */ - public void setHotspotBounds(Rectangle rect) { - hotspot_bounds = rect; - } - - /** - * 获得当前选择区域 - */ - public Rectangle getHotspotBounds() { - return hotspot_bounds; - } - - private void removeCreatorFromContainer(XCreator creator, int creatorWidth, int creatorHeight) { - XLayoutContainer parent = XCreatorUtils.getParentXLayoutContainer(creator); - if (parent == null) { - return; - } - boolean changeCreator = creator.shouldScaleCreator() || creator.hasTitleStyle(); - if (parent.acceptType(XWFitLayout.class) && changeCreator) { - creator = (XCreator) creator.getParent(); - } - parent.getLayoutAdapter().removeBean(creator, creatorWidth, creatorHeight); - // 删除其根组件,同时就删除了同时被选择的叶子组件 - parent.remove(creator); - LayoutManager layout = parent.getLayout(); - - if (layout != null) { - // 刷新组件容器的布局 - LayoutUtils.layoutContainer(parent); - } - } - - /** - * 是否有组件被选择。如果所选组件是最底层容器,也视为无选择 - * - * @return 是则返回true - * yaoh.wu 不应该通过判断是否是最底层容器来判断是否选择了组件 - * 而是应该判断选择的容器是否是编辑器的最表层容器,也就是点击空白地方选择的容器 - * 但是直接判断选择的容器是否是编辑器最表层类型又会引发拖动时选不上的情况, - * 因此通过判断父容器来实现 - *

- * 举例:frm组件复用 绝对布局情况下,不选择时有三层容器: - * 底层@see {@link com.fr.design.designer.creator.XWBorderLayout} - * 中层@see {@link XWFitLayout} - * 表层@see {@link com.fr.design.designer.creator.XWAbsoluteBodyLayout} - *

- * 但是编辑窗口的最外层其实是表层@see {@link com.fr.design.designer.creator.XWAbsoluteBodyLayout}, - * 其他两层不是靠添加组件就可以编辑的。 - */ - public boolean hasSelectionComponent() { - if (designer.getClass().equals(FormDesigner.class)) { - //frm本地组件复用 - return selection.getSelectedCreator() != null - && !( - //frm绝对布局编辑器 - selection.getSelectedCreator().getClass().equals(XWAbsoluteBodyLayout.class) - //Tab布局编辑器 - || selection.getSelectedCreator().getClass().equals(XWCardMainBorderLayout.class) - || selection.getSelectedCreator().getClass().equals(XWCardLayout.class) - || selection.getSelectedCreator().getClass().equals(XWTabFitLayout.class) - //自适应布局编辑器 - || selection.getSelectedCreator().getClass().equals(XWFitLayout.class) - ); - } else { - //cpt本地组件复用,selection.getSelectedCreator().getParent()=@XWParameterLayout instanceof @XWAbsoluteLayout - return selection.getSelectedCreator() != null && selection.getSelectedCreator().getParent() != null; - } - } - - /** - * 移动组件至指定位置 - * - * @param x 坐标x - * @param y 坐标y - */ - public void move(int x, int y) { - for (XCreator creator : selection.getSelectedCreators()) { - creator.setLocation(creator.getX() + x, creator.getY() + y); - LayoutAdapter layoutAdapter = AdapterBus.searchLayoutAdapter(designer, creator); - if (layoutAdapter != null) { - layoutAdapter.fix(creator); - } - } - designer.getEditListenerTable().fireCreatorModified(selection.getSelectedCreator(), - DesignerEvent.CREATOR_SELECTED); - } - - /** - * 释放捕获 - */ - public void releaseDragging() { - designer.setPainter(null); - selection.fixCreator(designer); - designer.getEditListenerTable().fireCreatorModified(selection.getSelectedCreator(), - DesignerEvent.CREATOR_RESIZED); - } - - public Direction getDirectionAt(MouseEvent e) { - Direction dir; - if (e.isControlDown() || e.isShiftDown()) { - XCreator creator = designer.getComponentAt(e.getX(), e.getY(), selection.getSelectedCreators()); - if (creator != designer.getRootComponent() && selection.addedable(creator)) { - return Location.add; - } - } - if (hasSelectionComponent()) { - int x = e.getX() + designer.getArea().getHorizontalValue(); - int y = e.getY() + designer.getArea().getVerticalValue(); - dir = getDirection(selection.getRelativeBounds(), x, y); - if (selection.size() == 1) { - if (!ArrayUtils.contains(selection.getSelectedCreator().getDirections(), dir.getActual())) { - dir = Location.outer; - } - } - } else { - dir = Location.outer; - } - - if (designer.getDesignerMode().isFormParameterEditor() && dir == Location.outer) { - dir = designer.getLoc2Root(e); - } - return dir; - } - - private Direction getDirection(Rectangle bounds, int x, int y) { - if (x < (bounds.x - XCreatorConstants.RESIZE_BOX_SIZ)) { - return Location.outer; - } else if ((x >= (bounds.x - XCreatorConstants.RESIZE_BOX_SIZ)) && (x <= bounds.x)) { - if (y < (bounds.y - XCreatorConstants.RESIZE_BOX_SIZ)) { - return Location.outer; - } else if ((y >= (bounds.y - XCreatorConstants.RESIZE_BOX_SIZ)) && (y <= bounds.y)) { - return Location.left_top; - } else if ((y > bounds.y) && (y < (bounds.y + bounds.height))) { - return Location.left; - } else if ((y >= (bounds.y + bounds.height)) - && (y <= (bounds.y + bounds.height + XCreatorConstants.RESIZE_BOX_SIZ))) { - return Location.left_bottom; - } else { - return Location.outer; - } - } else if ((x > bounds.x) && (x < (bounds.x + bounds.width))) { - if (y < (bounds.y - XCreatorConstants.RESIZE_BOX_SIZ)) { - return Location.outer; - } else if ((y >= (bounds.y - XCreatorConstants.RESIZE_BOX_SIZ)) && (y <= bounds.y)) { - return Location.top; - } else if ((y > bounds.y) && (y < (bounds.y + bounds.height))) { - return Location.inner; - } else if ((y >= (bounds.y + bounds.height)) - && (y <= (bounds.y + bounds.height + XCreatorConstants.RESIZE_BOX_SIZ))) { - return Location.bottom; - } else { - return Location.outer; - } - } else if ((x >= (bounds.x + bounds.width)) - && (x <= (bounds.x + bounds.width + XCreatorConstants.RESIZE_BOX_SIZ))) { - if (y < (bounds.y - XCreatorConstants.RESIZE_BOX_SIZ)) { - return Location.outer; - } else if ((y >= (bounds.y - XCreatorConstants.RESIZE_BOX_SIZ)) && (y <= bounds.y)) { - return Location.right_top; - } else if ((y > bounds.y) && (y < (bounds.y + bounds.height))) { - return Location.right; - } else if ((y >= (bounds.y + bounds.height)) - && (y <= (bounds.y + bounds.height + XCreatorConstants.RESIZE_BOX_SIZ))) { - return Location.right_bottom; - } else { - return Location.outer; - } - } else { - return Location.outer; - } - } - - private void fireCreatorSelected() { - designer.getEditListenerTable().fireCreatorModified(selection.getSelectedCreator(), - DesignerEvent.CREATOR_SELECTED); - } - - public void setSelectedCreator(XCreator rootComponent) { - selection.setSelectedCreator(rootComponent); - fireCreatorSelected(); - } - - public void setSelectedCreators(ArrayList rebuildSelection) { - selection.setSelectedCreators(rebuildSelection); - fireCreatorSelected(); - } +package com.fr.design.designer.beans.models; + +import java.awt.LayoutManager; +import java.awt.Rectangle; +import java.awt.Toolkit; +import java.awt.event.MouseEvent; +import java.util.ArrayList; + +import com.fr.design.designer.beans.AdapterBus; +import com.fr.design.designer.beans.LayoutAdapter; +import com.fr.design.designer.beans.events.DesignerEvent; +import com.fr.design.designer.beans.location.Direction; +import com.fr.design.designer.beans.location.Location; +import com.fr.design.designer.creator.*; +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.form.util.XCreatorConstants; +import com.fr.design.mainframe.FormDesigner; +import com.fr.design.mainframe.FormSelection; +import com.fr.design.mainframe.FormSelectionUtils; +import com.fr.design.utils.gui.LayoutUtils; +import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; +import com.fr.stable.ArrayUtils; + +/** + * 该model保存当前选择的组件和剪切版信息 + */ +public class SelectionModel { + //被粘贴组件在所选组件位置处往下、往右各错开20像素。执行多次粘贴时,在上一次粘贴的位置处错开20像素。 + private static final int DELTA_X_Y = 20; //粘贴时候的偏移距离 + private static final int BORDER_PROPORTION = 20; + private static FormSelection CLIP_BOARD = new FormSelection(); + private FormDesigner designer; + private FormSelection selection; + private Rectangle hotspot_bounds; + + public SelectionModel(FormDesigner designer) { + this.designer = designer; + selection = new FormSelection(); + } + + /** + * 重置。清空formSelction以及选择区域 + */ + public void reset() { + selection.reset(); + hotspot_bounds = null; + } + + /** + * formSelction是否为空 + * + * @return 是否为空 + */ + public static boolean isEmpty() { + return CLIP_BOARD.isEmpty(); + } + + /** + * 鼠标点击一下,所选中的单个组件。按下Ctrl或者shift键时鼠标可以进行多选 + * + * @param e 鼠标事件 + */ + public void selectACreatorAtMouseEvent(MouseEvent e) { + if (!e.isControlDown() && !e.isShiftDown()) { + // 如果Ctrl或者Shift键盘没有按下,则清除已经选择的组件 + selection.reset(); + } + + // 获取e所在的组件 + XCreator comp = designer.getComponentAt(e); + + //布局组件的顶层布局如不可编辑,要获取其顶层布局 + XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer(comp).getTopLayout(); + if (topLayout != null && !topLayout.isEditable()) { + comp = topLayout; + } + + // 如果父层是scale和title两个专属容器,返回其父层,组件本身是不让被选中的 + if (comp != designer.getRootComponent() && comp != designer.getParaComponent()) { + XCreator parentContainer = (XCreator) comp.getParent(); + comp = parentContainer.isDedicateContainer() ? parentContainer : comp; + } + if (selection.removeSelectedCreator(comp) || selection.addSelectedCreator(comp)) { + designer.getEditListenerTable().fireCreatorModified(comp, DesignerEvent.CREATOR_SELECTED); + designer.repaint(); + } + } + + /** + * 将所选组件剪切到剪切板上 + */ + public void cutSelectedCreator2ClipBoard() { + if (hasSelectionComponent()) { + selection.cut2ClipBoard(CLIP_BOARD); + designer.getEditListenerTable().fireCreatorModified(DesignerEvent.CREATOR_CUTED); + designer.repaint(); + } + } + + /** + * 复制当前选中的组件到剪切板 + */ + public void copySelectedCreator2ClipBoard() { + if (!selection.isEmpty()) { + selection.copy2ClipBoard(CLIP_BOARD); + } + } + + /** + * 从剪切板粘帖组件 + * + * @return 否 + */ + public boolean pasteFromClipBoard() { + if (!CLIP_BOARD.isEmpty()) { + XLayoutContainer parent = null; + //未选 + if (!hasSelectionComponent()) { + if (designer.getClass().equals(FormDesigner.class)) { + if (selection.getSelectedCreator() instanceof XWFitLayout) { + if (selection.getSelectedCreator().getClass().equals(XWTabFitLayout.class)) { + Rectangle rec = selection.getRelativeBounds(); + //Tab布局 + FormSelectionUtils.paste2Container(designer, (XLayoutContainer) selection.getSelectedCreator(), + CLIP_BOARD, + rec.x + rec.width / 2, + rec.y + BORDER_PROPORTION); + } else { + Rectangle rec = selection.getRelativeBounds(); + //自适应布局 + FormSelectionUtils.paste2Container(designer, designer.getRootComponent(), + CLIP_BOARD, + rec.x + rec.width / 2, + rec.y + BORDER_PROPORTION); + } + } else { + //绝对布局 + //编辑器外面还有两层容器,使用designer.getRootComponent()获取到的是编辑器中层的容器,不是编辑器表层 + //当前选择的就是编辑器表层 + FormSelectionUtils.paste2Container(designer, (XLayoutContainer) selection.getSelectedCreator(), + CLIP_BOARD, + DELTA_X_Y, + DELTA_X_Y); + } + } else { + //cpt本地组件复用,编辑器就一层,是最底层,使用designer.getRootComponent()就可以获取到 + //使用selection.getSelectedCreator()也应该是可以获取到的。 + FormSelectionUtils.paste2Container(designer, designer.getRootComponent(), + CLIP_BOARD, + DELTA_X_Y, + DELTA_X_Y); + } + } + //已选 + else { + //获取到编辑器的表层容器(已选的组件的父容器就是表层容器) + parent = XCreatorUtils.getParentXLayoutContainer(selection.getSelectedCreator()); + if (selection.getSelectedCreator().getParent() instanceof XWFitLayout) { + //自适应布局 + if (parent != null) { + Rectangle rec = selection.getRelativeBounds(); + FormSelectionUtils.paste2Container(designer, parent, CLIP_BOARD, rec.x + rec.width / 2, rec.y + + rec.height - BORDER_PROPORTION); + } + } else if (selection.getSelectedCreator().getParent() instanceof XWAbsoluteLayout) { + //绝对布局 + if (parent != null) { + Rectangle rec = selection.getSelctionBounds(); + FormSelectionUtils.paste2Container(designer, parent, CLIP_BOARD, rec.x + DELTA_X_Y, rec.y + DELTA_X_Y); + } + } + } + } else { + Toolkit.getDefaultToolkit().beep(); + } + return false; + } + + public FormSelection getSelection() { + return selection; + } + + /** + * 删除当前所有选择的组件 + */ + public void deleteSelection() { + XCreator[] roots = selection.getSelectedCreators(); + + if (roots.length > 0) { + for (XCreator creator : roots) { + if (creator.acceptType(XWParameterLayout.class)) { + designer.removeParaComponent(); + } + + removeCreatorFromContainer(creator, creator.getWidth(), creator.getHeight()); + creator.removeAll(); + // 清除被选中的组件 + selection.reset(); + } + setSelectedCreator(designer.getRootComponent()); + // 触发事件 + designer.getEditListenerTable().fireCreatorModified(DesignerEvent.CREATOR_DELETED); + designer.repaint(); + } + } + + /** + * 从选择组件中删除某组件 + * + * @param creator 组件 + * @param creatorWidth 组件之前宽度 + * @param creatorHeight 组件之前高度 + */ + public void removeCreator(XCreator creator, int creatorWidth, int creatorHeight) { + selection.removeCreator(creator); + removeCreatorFromContainer(creator, creatorWidth, creatorHeight); + designer.repaint(); + } + + /** + * 设置选择区域 + */ + public void setHotspotBounds(Rectangle rect) { + hotspot_bounds = rect; + } + + /** + * 获得当前选择区域 + */ + public Rectangle getHotspotBounds() { + return hotspot_bounds; + } + + private void removeCreatorFromContainer(XCreator creator, int creatorWidth, int creatorHeight) { + XLayoutContainer parent = XCreatorUtils.getParentXLayoutContainer(creator); + if (parent == null) { + return; + } + boolean changeCreator = creator.shouldScaleCreator() || creator.hasTitleStyle(); + if (parent.acceptType(XWFitLayout.class) && changeCreator) { + creator = (XCreator) creator.getParent(); + } + parent.getLayoutAdapter().removeBean(creator, creatorWidth, creatorHeight); + // 删除其根组件,同时就删除了同时被选择的叶子组件 + parent.remove(creator); + LayoutManager layout = parent.getLayout(); + + if (layout != null) { + // 刷新组件容器的布局 + LayoutUtils.layoutContainer(parent); + } + } + + /** + * 是否有组件被选择。如果所选组件是最底层容器,也视为无选择 + * + * @return 是则返回true + * yaoh.wu 不应该通过判断是否是最底层容器来判断是否选择了组件 + * 而是应该判断选择的容器是否是编辑器的最表层容器,也就是点击空白地方选择的容器 + * 但是直接判断选择的容器是否是编辑器最表层类型又会引发拖动时选不上的情况, + * 因此通过判断父容器来实现 + *

+ * 举例:frm组件复用 绝对布局情况下,不选择时有三层容器: + * 底层@see {@link com.fr.design.designer.creator.XWBorderLayout} + * 中层@see {@link XWFitLayout} + * 表层@see {@link com.fr.design.designer.creator.XWAbsoluteBodyLayout} + *

+ * 但是编辑窗口的最外层其实是表层@see {@link com.fr.design.designer.creator.XWAbsoluteBodyLayout}, + * 其他两层不是靠添加组件就可以编辑的。 + */ + public boolean hasSelectionComponent() { + if (designer.getClass().equals(FormDesigner.class)) { + //frm本地组件复用 + return selection.getSelectedCreator() != null + && !( + //frm绝对布局编辑器 + selection.getSelectedCreator().getClass().equals(XWAbsoluteBodyLayout.class) + //Tab布局编辑器 + || selection.getSelectedCreator().getClass().equals(XWCardMainBorderLayout.class) + || selection.getSelectedCreator().getClass().equals(XWCardLayout.class) + || selection.getSelectedCreator().getClass().equals(XWTabFitLayout.class) + //自适应布局编辑器 + || selection.getSelectedCreator().getClass().equals(XWFitLayout.class) + ); + } else { + //cpt本地组件复用,selection.getSelectedCreator().getParent()=@XWParameterLayout instanceof @XWAbsoluteLayout + return selection.getSelectedCreator() != null && selection.getSelectedCreator().getParent() != null; + } + } + + /** + * 移动组件至指定位置 + * + * @param x 坐标x + * @param y 坐标y + */ + public void move(int x, int y) { + for (XCreator creator : selection.getSelectedCreators()) { + creator.setLocation(creator.getX() + x, creator.getY() + y); + LayoutAdapter layoutAdapter = AdapterBus.searchLayoutAdapter(designer, creator); + if (layoutAdapter != null) { + layoutAdapter.fix(creator); + } + } + designer.getEditListenerTable().fireCreatorModified(selection.getSelectedCreator(), + DesignerEvent.CREATOR_SELECTED); + } + + /** + * 释放捕获 + */ + public void releaseDragging() { + designer.setPainter(null); + selection.fixCreator(designer); + designer.getEditListenerTable().fireCreatorModified(selection.getSelectedCreator(), + DesignerEvent.CREATOR_RESIZED); + } + + public Direction getDirectionAt(MouseEvent e) { + Direction dir; + if (e.isControlDown() || e.isShiftDown()) { + XCreator creator = designer.getComponentAt(e.getX(), e.getY(), selection.getSelectedCreators()); + if (creator != designer.getRootComponent() && selection.addedable(creator)) { + return Location.add; + } + } + if (hasSelectionComponent()) { + int x = e.getX() + designer.getArea().getHorizontalValue(); + int y = e.getY() + designer.getArea().getVerticalValue(); + dir = getDirection(selection.getRelativeBounds(), x, y); + if (selection.size() == 1) { + if (!ArrayUtils.contains(selection.getSelectedCreator().getDirections(), dir.getActual())) { + dir = Location.outer; + } + } + } else { + dir = Location.outer; + } + + if (designer.getDesignerMode().isFormParameterEditor() && dir == Location.outer) { + dir = designer.getLoc2Root(e); + } + return dir; + } + + private Direction getDirection(Rectangle bounds, int x, int y) { + if (x < (bounds.x - XCreatorConstants.RESIZE_BOX_SIZ)) { + return Location.outer; + } else if ((x >= (bounds.x - XCreatorConstants.RESIZE_BOX_SIZ)) && (x <= bounds.x)) { + if (y < (bounds.y - XCreatorConstants.RESIZE_BOX_SIZ)) { + return Location.outer; + } else if ((y >= (bounds.y - XCreatorConstants.RESIZE_BOX_SIZ)) && (y <= bounds.y)) { + return Location.left_top; + } else if ((y > bounds.y) && (y < (bounds.y + bounds.height))) { + return Location.left; + } else if ((y >= (bounds.y + bounds.height)) + && (y <= (bounds.y + bounds.height + XCreatorConstants.RESIZE_BOX_SIZ))) { + return Location.left_bottom; + } else { + return Location.outer; + } + } else if ((x > bounds.x) && (x < (bounds.x + bounds.width))) { + if (y < (bounds.y - XCreatorConstants.RESIZE_BOX_SIZ)) { + return Location.outer; + } else if ((y >= (bounds.y - XCreatorConstants.RESIZE_BOX_SIZ)) && (y <= bounds.y)) { + return Location.top; + } else if ((y > bounds.y) && (y < (bounds.y + bounds.height))) { + return Location.inner; + } else if ((y >= (bounds.y + bounds.height)) + && (y <= (bounds.y + bounds.height + XCreatorConstants.RESIZE_BOX_SIZ))) { + return Location.bottom; + } else { + return Location.outer; + } + } else if ((x >= (bounds.x + bounds.width)) + && (x <= (bounds.x + bounds.width + XCreatorConstants.RESIZE_BOX_SIZ))) { + if (y < (bounds.y - XCreatorConstants.RESIZE_BOX_SIZ)) { + return Location.outer; + } else if ((y >= (bounds.y - XCreatorConstants.RESIZE_BOX_SIZ)) && (y <= bounds.y)) { + return Location.right_top; + } else if ((y > bounds.y) && (y < (bounds.y + bounds.height))) { + return Location.right; + } else if ((y >= (bounds.y + bounds.height)) + && (y <= (bounds.y + bounds.height + XCreatorConstants.RESIZE_BOX_SIZ))) { + return Location.right_bottom; + } else { + return Location.outer; + } + } else { + return Location.outer; + } + } + + private void fireCreatorSelected() { + designer.getEditListenerTable().fireCreatorModified(selection.getSelectedCreator(), + DesignerEvent.CREATOR_SELECTED); + } + + public void setSelectedCreator(XCreator rootComponent) { + selection.setSelectedCreator(rootComponent); + fireCreatorSelected(); + } + + public void setSelectedCreators(ArrayList rebuildSelection) { + selection.setSelectedCreators(rebuildSelection); + fireCreatorSelected(); + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java index f52af750f..dc40b0e18 100644 --- a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java +++ b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java @@ -1,246 +1,246 @@ -package com.fr.design.mainframe; - -import com.fr.base.FRContext; -import com.fr.design.designer.beans.LayoutAdapter; -import com.fr.design.designer.beans.adapters.layout.AbstractLayoutAdapter; -import com.fr.design.designer.beans.events.DesignerEvent; -import com.fr.design.designer.creator.*; -import com.fr.form.ui.Widget; -import com.fr.form.ui.container.WTitleLayout; -import com.fr.general.ComparatorUtils; - -import java.awt.*; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -public class FormSelectionUtils { - - //组件复制时坐标偏移 - private static final int DELAY_X = 20; - private static final int DELAY_Y = 20; - - //组件复制时是否已经向左上偏移 - private static boolean backoffset = false; - - //组件重命名后缀 - private static final String POSTFIX = "_c"; - - private FormSelectionUtils() { - - } - - /** - * @param designer 编辑器 - * @param parent 粘贴依据的组件 - * @param clipBoard 剪贴板内容 - * @param x x - * @param y y - */ - public static void paste2Container(FormDesigner designer, XLayoutContainer parent, - FormSelection clipBoard, int x, int y) { - LayoutAdapter adapter = parent.getLayoutAdapter(); - if (parent instanceof XWAbsoluteLayout) { - //绝对布局 - designer.getSelectionModel().getSelection().reset(); - Rectangle rec = clipBoard.getSelctionBounds(); - for (XCreator creator : clipBoard.getSelectedCreators()) { - try { - Widget copied = copyWidget(designer, creator); - XCreator copiedCreator = XCreatorUtils.createXCreator(copied, creator.getSize()); - // 获取位置 - Point point = getPasteLocation((AbstractLayoutAdapter) adapter, - copiedCreator, - x + creator.getX() - rec.x + copiedCreator.getWidth() / 2, - y + creator.getY() - rec.y + copiedCreator.getHeight() / 2); - boolean addSuccess = adapter.addBean(copiedCreator, point.x, point.y); - - if (addSuccess) { - designer.getSelectionModel().getSelection().addSelectedCreator(copiedCreator); - } - - } catch (CloneNotSupportedException e) { - FRContext.getLogger().error(e.getMessage(), e); - } - } - rebuildSelection(designer); - designer.getEditListenerTable().fireCreatorModified( - designer.getSelectionModel().getSelection().getSelectedCreator(), DesignerEvent.CREATOR_PASTED); - return; - } else if (parent instanceof XWFitLayout) { - //相对布局 - designer.getSelectionModel().getSelection().reset(); - for (XCreator creator : clipBoard.getSelectedCreators()) { - try { - Widget copied = copyWidget(designer, creator); - XCreator copiedCreator = XCreatorUtils.createXCreator(copied, creator.getSize()); - boolean addSuccess = adapter.addBean(copiedCreator, x, y); - - if (addSuccess) { - designer.getSelectionModel().getSelection().addSelectedCreator(copiedCreator); - } - - } catch (CloneNotSupportedException e) { - FRContext.getLogger().error(e.getMessage(), e); - } - } - rebuildSelection(designer); - designer.getEditListenerTable().fireCreatorModified( - designer.getSelectionModel().getSelection().getSelectedCreator(), DesignerEvent.CREATOR_PASTED); - return; - } - Toolkit.getDefaultToolkit().beep(); - } - - /** - * 组件复用绝对布局获取粘贴组件位置 - * - * @param layoutAdapter 绝对布局容器AbstractLayoutAdapter - * @param copiedCreator 复制的组件 - * @param x x=组件x + clonedCreator.getWidth() / 2 - * @param y y=组件y + clonedCreator.getHeight() / 2 - * 除2的步骤会导致当宽度或者高度为奇数是,中心点向左上各偏移一个像素 - * 由于中心点向左上各偏移一个像素,依赖中心点计算的右下点就会相应的想做上偏移一个像素,导致结果不准确 - * @return 新位置坐标 - */ - private static Point getPasteLocation(AbstractLayoutAdapter layoutAdapter, XCreator copiedCreator, int x, int y) { - //当宽度为奇数时 设置偏移 - int xoffset = (copiedCreator.getWidth() & 1) == 1 ? 1 : 0; - //当高度为奇数时 设置偏移 - int yoffset = (copiedCreator.getHeight() & 1) == 1 ? 1 : 0; - - if (!layoutAdapter.accept(copiedCreator, x, y)) { - XLayoutContainer container = layoutAdapter.getContainer(); - boolean xOut = x < 0 || x + copiedCreator.getWidth() / 2 + xoffset > container.getWidth(); - boolean yOut = y < 0 || y + copiedCreator.getHeight() / 2 + yoffset > container.getHeight(); - /* - * 组件原始位置位于布局的右下角, - * 和布局右下边界线紧挨, - * 粘贴时组件在原始位置向左错开20像素。 - * x,y同时越界 - */ - if (xOut && yOut) { - x = backoffset ? container.getWidth() - copiedCreator.getWidth() / 2 - xoffset - : container.getWidth() - copiedCreator.getWidth() / 2 - DELAY_X - xoffset; - y = backoffset ? - container.getHeight() - copiedCreator.getHeight() / 2 - yoffset - : container.getHeight() - copiedCreator.getHeight() / 2 - DELAY_Y - yoffset; - backoffset = !backoffset; - return new Point(x, y); - } - /* - * 组件原始位置与布局边界距离小于20像素(下边界&右边界同时小于或者任意一个边界小于), - * 则粘贴时距离小于20像素一侧直接贴近布局边界, - * 距离大于20像素的一侧正常错开。 - * x,y中只有一个越界 - */ - else if ((xOut || yOut)) { - x = xOut ? container.getWidth() - copiedCreator.getWidth() / 2 - xoffset : x; - y = yOut ? container.getHeight() - copiedCreator.getHeight() / 2 - yoffset : y; - return new Point(x, y); - } - } - return new Point(x, y); - } - - - /** - * 拷贝组件 - * - * @param formDesigner - * @param xCreator - * @return - * @throws CloneNotSupportedException - */ - private static Widget copyWidget(FormDesigner formDesigner, XCreator xCreator) throws - CloneNotSupportedException { - ArrayList nameSpace = new ArrayList(); - Widget copied = (Widget) xCreator.toData().clone(); - //重命名拷贝的组件 - String name = getCopiedName(formDesigner, copied, nameSpace); - if (copied instanceof WTitleLayout) { - XWTitleLayout xwTitleLayout = new XWTitleLayout((WTitleLayout) copied, xCreator.getSize()); - xwTitleLayout.resetCreatorName(name); - } else { - copied.setWidgetName(name); - } - return copied; - } - - /** - * 组件拷贝命名规则 - * - * @param formDesigner - * @param copied - * @param nameSpace - * @return name - */ - private static String getCopiedName(FormDesigner formDesigner, Widget copied, ArrayList nameSpace) { - StringBuffer name = new StringBuffer(copied.getWidgetName()); - do { - name.append(POSTFIX); - } while (formDesigner.getTarget().isNameExist(name.toString()) || nameSpace.contains(name.toString())); - nameSpace.add(name.toString()); - return name.toString(); - } - - public static void rebuildSelection(FormDesigner designer) { - ArrayList newSelection = new ArrayList(); - List widgetList = new ArrayList(); - for (XCreator comp : designer.getSelectionModel().getSelection().getSelectedCreators()) { - widgetList.add(comp.toData()); - } - designer.getSelectionModel().setSelectedCreators( - rebuildSelection(designer.getRootComponent(), widgetList, newSelection)); - } - - public static ArrayList rebuildSelection(XCreator rootComponent, Widget[] selectWidgets) { - List selectionWidget = new ArrayList(); - if (selectWidgets != null) { - selectionWidget.addAll(Arrays.asList(selectWidgets)); - } - return FormSelectionUtils.rebuildSelection(rootComponent, selectionWidget, new ArrayList()); - } - - private static ArrayList rebuildSelection(XCreator rootComponent, List selectionWidget, - ArrayList newSelection) { - FormSelectionUtils._rebuild(rootComponent, selectionWidget, newSelection); - if (newSelection.isEmpty()) { - newSelection.add(rootComponent); - } - return newSelection; - } - - private static void _rebuild(XCreator root, List selectionWidget, List newSelection) { - if (selectionWidget.isEmpty()) { - return; - } - for (Widget x : selectionWidget) { - if (ComparatorUtils.equals(x, root.toData())) { - if (!newSelection.contains(root)) { - newSelection.add(root); - selectionWidget.remove(x); - } - break; - } - } - - int count = root.getComponentCount(); - for (int i = 0; i < count && !selectionWidget.isEmpty(); i++) { - Component c = root.getComponent(i); - if (c instanceof XCreator) { - XCreator creator = (XCreator) c; - for (Widget x : selectionWidget) { - if (ComparatorUtils.equals(x, creator.toData())) { - newSelection.add(creator); - selectionWidget.remove(x); - break; - } - } - if (c instanceof XLayoutContainer) { - _rebuild((XLayoutContainer) c, selectionWidget, newSelection); - } - } - } - } +package com.fr.design.mainframe; + +import com.fr.base.FRContext; +import com.fr.design.designer.beans.LayoutAdapter; +import com.fr.design.designer.beans.adapters.layout.AbstractLayoutAdapter; +import com.fr.design.designer.beans.events.DesignerEvent; +import com.fr.design.designer.creator.*; +import com.fr.form.ui.Widget; +import com.fr.form.ui.container.WTitleLayout; +import com.fr.general.ComparatorUtils; + +import java.awt.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class FormSelectionUtils { + + //组件复制时坐标偏移 + private static final int DELAY_X = 20; + private static final int DELAY_Y = 20; + + //组件复制时是否已经向左上偏移 + private static boolean backoffset = false; + + //组件重命名后缀 + private static final String POSTFIX = "_c"; + + private FormSelectionUtils() { + + } + + /** + * @param designer 编辑器 + * @param parent 粘贴依据的组件 + * @param clipBoard 剪贴板内容 + * @param x x + * @param y y + */ + public static void paste2Container(FormDesigner designer, XLayoutContainer parent, + FormSelection clipBoard, int x, int y) { + LayoutAdapter adapter = parent.getLayoutAdapter(); + if (parent instanceof XWAbsoluteLayout) { + //绝对布局 + designer.getSelectionModel().getSelection().reset(); + Rectangle rec = clipBoard.getSelctionBounds(); + for (XCreator creator : clipBoard.getSelectedCreators()) { + try { + Widget copied = copyWidget(designer, creator); + XCreator copiedCreator = XCreatorUtils.createXCreator(copied, creator.getSize()); + // 获取位置 + Point point = getPasteLocation((AbstractLayoutAdapter) adapter, + copiedCreator, + x + creator.getX() - rec.x + copiedCreator.getWidth() / 2, + y + creator.getY() - rec.y + copiedCreator.getHeight() / 2); + boolean addSuccess = adapter.addBean(copiedCreator, point.x, point.y); + + if (addSuccess) { + designer.getSelectionModel().getSelection().addSelectedCreator(copiedCreator); + } + + } catch (CloneNotSupportedException e) { + FRContext.getLogger().error(e.getMessage(), e); + } + } + rebuildSelection(designer); + designer.getEditListenerTable().fireCreatorModified( + designer.getSelectionModel().getSelection().getSelectedCreator(), DesignerEvent.CREATOR_PASTED); + return; + } else if (parent instanceof XWFitLayout) { + //相对布局 + designer.getSelectionModel().getSelection().reset(); + for (XCreator creator : clipBoard.getSelectedCreators()) { + try { + Widget copied = copyWidget(designer, creator); + XCreator copiedCreator = XCreatorUtils.createXCreator(copied, creator.getSize()); + boolean addSuccess = adapter.addBean(copiedCreator, x, y); + + if (addSuccess) { + designer.getSelectionModel().getSelection().addSelectedCreator(copiedCreator); + } + + } catch (CloneNotSupportedException e) { + FRContext.getLogger().error(e.getMessage(), e); + } + } + rebuildSelection(designer); + designer.getEditListenerTable().fireCreatorModified( + designer.getSelectionModel().getSelection().getSelectedCreator(), DesignerEvent.CREATOR_PASTED); + return; + } + Toolkit.getDefaultToolkit().beep(); + } + + /** + * 组件复用绝对布局获取粘贴组件位置 + * + * @param layoutAdapter 绝对布局容器AbstractLayoutAdapter + * @param copiedCreator 复制的组件 + * @param x x=组件x + clonedCreator.getWidth() / 2 + * @param y y=组件y + clonedCreator.getHeight() / 2 + * 除2的步骤会导致当宽度或者高度为奇数是,中心点向左上各偏移一个像素 + * 由于中心点向左上各偏移一个像素,依赖中心点计算的右下点就会相应的想做上偏移一个像素,导致结果不准确 + * @return 新位置坐标 + */ + private static Point getPasteLocation(AbstractLayoutAdapter layoutAdapter, XCreator copiedCreator, int x, int y) { + //当宽度为奇数时 设置偏移 + int xoffset = (copiedCreator.getWidth() & 1) == 1 ? 1 : 0; + //当高度为奇数时 设置偏移 + int yoffset = (copiedCreator.getHeight() & 1) == 1 ? 1 : 0; + + if (!layoutAdapter.accept(copiedCreator, x, y)) { + XLayoutContainer container = layoutAdapter.getContainer(); + boolean xOut = x < 0 || x + copiedCreator.getWidth() / 2 + xoffset > container.getWidth(); + boolean yOut = y < 0 || y + copiedCreator.getHeight() / 2 + yoffset > container.getHeight(); + /* + * 组件原始位置位于布局的右下角, + * 和布局右下边界线紧挨, + * 粘贴时组件在原始位置向左错开20像素。 + * x,y同时越界 + */ + if (xOut && yOut) { + x = backoffset ? container.getWidth() - copiedCreator.getWidth() / 2 - xoffset + : container.getWidth() - copiedCreator.getWidth() / 2 - DELAY_X - xoffset; + y = backoffset ? + container.getHeight() - copiedCreator.getHeight() / 2 - yoffset + : container.getHeight() - copiedCreator.getHeight() / 2 - DELAY_Y - yoffset; + backoffset = !backoffset; + return new Point(x, y); + } + /* + * 组件原始位置与布局边界距离小于20像素(下边界&右边界同时小于或者任意一个边界小于), + * 则粘贴时距离小于20像素一侧直接贴近布局边界, + * 距离大于20像素的一侧正常错开。 + * x,y中只有一个越界 + */ + else if ((xOut || yOut)) { + x = xOut ? container.getWidth() - copiedCreator.getWidth() / 2 - xoffset : x; + y = yOut ? container.getHeight() - copiedCreator.getHeight() / 2 - yoffset : y; + return new Point(x, y); + } + } + return new Point(x, y); + } + + + /** + * 拷贝组件 + * + * @param formDesigner + * @param xCreator + * @return + * @throws CloneNotSupportedException + */ + private static Widget copyWidget(FormDesigner formDesigner, XCreator xCreator) throws + CloneNotSupportedException { + ArrayList nameSpace = new ArrayList(); + Widget copied = (Widget) xCreator.toData().clone(); + //重命名拷贝的组件 + String name = getCopiedName(formDesigner, copied, nameSpace); + if (copied instanceof WTitleLayout) { + XWTitleLayout xwTitleLayout = new XWTitleLayout((WTitleLayout) copied, xCreator.getSize()); + xwTitleLayout.resetCreatorName(name); + } else { + copied.setWidgetName(name); + } + return copied; + } + + /** + * 组件拷贝命名规则 + * + * @param formDesigner + * @param copied + * @param nameSpace + * @return name + */ + private static String getCopiedName(FormDesigner formDesigner, Widget copied, ArrayList nameSpace) { + StringBuffer name = new StringBuffer(copied.getWidgetName()); + do { + name.append(POSTFIX); + } while (formDesigner.getTarget().isNameExist(name.toString()) || nameSpace.contains(name.toString())); + nameSpace.add(name.toString()); + return name.toString(); + } + + public static void rebuildSelection(FormDesigner designer) { + ArrayList newSelection = new ArrayList(); + List widgetList = new ArrayList(); + for (XCreator comp : designer.getSelectionModel().getSelection().getSelectedCreators()) { + widgetList.add(comp.toData()); + } + designer.getSelectionModel().setSelectedCreators( + rebuildSelection(designer.getRootComponent(), widgetList, newSelection)); + } + + public static ArrayList rebuildSelection(XCreator rootComponent, Widget[] selectWidgets) { + List selectionWidget = new ArrayList(); + if (selectWidgets != null) { + selectionWidget.addAll(Arrays.asList(selectWidgets)); + } + return FormSelectionUtils.rebuildSelection(rootComponent, selectionWidget, new ArrayList()); + } + + private static ArrayList rebuildSelection(XCreator rootComponent, List selectionWidget, + ArrayList newSelection) { + FormSelectionUtils._rebuild(rootComponent, selectionWidget, newSelection); + if (newSelection.isEmpty()) { + newSelection.add(rootComponent); + } + return newSelection; + } + + private static void _rebuild(XCreator root, List selectionWidget, List newSelection) { + if (selectionWidget.isEmpty()) { + return; + } + for (Widget x : selectionWidget) { + if (ComparatorUtils.equals(x, root.toData())) { + if (!newSelection.contains(root)) { + newSelection.add(root); + selectionWidget.remove(x); + } + break; + } + } + + int count = root.getComponentCount(); + for (int i = 0; i < count && !selectionWidget.isEmpty(); i++) { + Component c = root.getComponent(i); + if (c instanceof XCreator) { + XCreator creator = (XCreator) c; + for (Widget x : selectionWidget) { + if (ComparatorUtils.equals(x, creator.toData())) { + newSelection.add(creator); + selectionWidget.remove(x); + break; + } + } + if (c instanceof XLayoutContainer) { + _rebuild((XLayoutContainer) c, selectionWidget, newSelection); + } + } + } + } } \ No newline at end of file From 98d9e39fe2a50135ca3ef8104304b6d40658fca1 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Tue, 28 Mar 2017 16:07:47 +0800 Subject: [PATCH 220/343] =?UTF-8?q?=E6=97=A0=E4=BB=BB=E5=8A=A1=EF=BC=8C?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../form/parameter/FormParaDesigner.java | 1400 ++++++++--------- 1 file changed, 700 insertions(+), 700 deletions(-) diff --git a/designer_form/src/com/fr/design/form/parameter/FormParaDesigner.java b/designer_form/src/com/fr/design/form/parameter/FormParaDesigner.java index 1c6150d36..fcda0c684 100644 --- a/designer_form/src/com/fr/design/form/parameter/FormParaDesigner.java +++ b/designer_form/src/com/fr/design/form/parameter/FormParaDesigner.java @@ -1,701 +1,701 @@ -/* - * Copyright(c) 2001-2011, FineReport Inc, All Rights Reserved. - */ -package com.fr.design.form.parameter; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Image; -import java.awt.Insets; -import java.awt.Rectangle; -import java.util.ArrayList; -import java.util.List; - -import javax.swing.Action; -import javax.swing.BorderFactory; -import javax.swing.JComponent; -import javax.swing.JPanel; - -import com.fr.base.BaseUtils; -import com.fr.base.Parameter; -import com.fr.base.parameter.ParameterUI; -import com.fr.design.DesignModelAdapter; -import com.fr.design.designer.beans.actions.CopyAction; -import com.fr.design.designer.beans.actions.CutAction; -import com.fr.design.designer.beans.actions.FormDeleteAction; -import com.fr.design.designer.beans.actions.PasteAction; -import com.fr.design.designer.beans.adapters.layout.FRAbsoluteLayoutAdapter; -import com.fr.design.designer.beans.events.DesignerEditListener; -import com.fr.design.designer.beans.events.DesignerEvent; -import com.fr.design.designer.beans.location.Direction; -import com.fr.design.designer.creator.XCreator; -import com.fr.design.designer.creator.XCreatorUtils; -import com.fr.design.designer.creator.XLayoutContainer; -import com.fr.design.designer.creator.XWAbsoluteLayout; -import com.fr.design.designer.creator.XWParameterLayout; -import com.fr.design.designer.properties.FormWidgetAuthorityEditPane; -import com.fr.design.form.util.XCreatorConstants; -import com.fr.design.mainframe.AuthorityEditPane; -import com.fr.design.mainframe.DesignerContext; -import com.fr.design.mainframe.EastRegionContainerPane; -import com.fr.design.mainframe.FormArea; -import com.fr.design.mainframe.FormDesigner; -import com.fr.design.mainframe.FormDesignerModeForSpecial; -import com.fr.design.mainframe.FormParaPane; -import com.fr.design.mainframe.FormWidgetDetailPane; -import com.fr.design.mainframe.WidgetPropertyPane; -import com.fr.design.mainframe.WidgetToolBarPane; -import com.fr.design.parameter.ParaDefinitePane; -import com.fr.design.parameter.ParameterDesignerProvider; -import com.fr.design.parameter.ParameterPropertyPane; -import com.fr.form.main.Form; -import com.fr.form.main.parameter.FormParameterUI; -import com.fr.form.parameter.FormSubmitButton; -import com.fr.form.ui.EditorHolder; -import com.fr.form.ui.WidgetValue; -import com.fr.form.ui.container.WAbsoluteLayout; -import com.fr.form.ui.container.WLayout; -import com.fr.form.ui.container.WParameterLayout; -import com.fr.general.Inter; -import com.fr.stable.ArrayUtils; - -/** - * Created by IntelliJ IDEA. - * User : Richer - * Version: 6.5.5 - * Date : 11-7-5 - * Time : 下午7:46 - * 表单类型的参数设计器 - */ -// TODO ALEX_SEP FormDesigner和FormParaDesignEditor应该共用Form的编辑,但是FormParaDesignEditor不应该直接就是FormDesigner -public class FormParaDesigner extends FormDesigner implements ParameterDesignerProvider { - private static final int NUM_IN_A_LINE = 4; - private static final int H_COMPONENT_GAP = 165; - private static final int V_COMPONENT_GAP = 25; - private static final int FIRST_V_LOCATION = 35; - private static final int FIRST_H_LOCATION = 90; - private static final int SECOND_H_LOCATION = 170; - private static final int ADD_HEIGHT = 20; - private static final int H_GAP = 105; - - private static Image paraImage = BaseUtils.readImage("/com/fr/design/images/form/parameter.png"); - - public FormParaDesigner() { - this(new FormParameterUI()); - } - - public FormParaDesigner(FormParameterUI ui) { - super(gen(ui)); - } - - private static Form gen(Form form) { - WLayout container = form.getContainer(); - if (container == null) { - container = new WParameterLayout(); - } - container.setWidgetName("para"); - form.setContainer(container); - return form; - } - - protected FormDesignerModeForSpecial createFormDesignerTargetMode() { - return new FormParaTargetMode(this); - } - - /** - * 开始编辑参数面板的时候进行的初始化 - */ - public void initBeforeUpEdit() { - WidgetToolBarPane.getInstance(this); - EastRegionContainerPane.getInstance().replaceDownPane( - FormWidgetDetailPane.getInstance(this)); - if (!BaseUtils.isAuthorityEditing()) { - EastRegionContainerPane.getInstance().addParameterPane(ParameterPropertyPane.getInstance(this)); - EastRegionContainerPane.getInstance().setParameterHeight(ParameterPropertyPane.getInstance(this).getPreferredSize().height); - EastRegionContainerPane.getInstance().replaceUpPane( - WidgetPropertyPane.getInstance(this)); - } else { - EastRegionContainerPane.getInstance().removeParameterPane(); - showAuthorityEditPane(); - } - - } - - /** - * 创建权限编辑面板 - * - * @return 面板 - */ - public AuthorityEditPane createAuthorityEditPane() { - return new FormWidgetAuthorityEditPane(this); - } - - /** - * 内容属性表面板 - * - * @return 内容属性表面板 - */ - public JPanel getEastUpPane() { - return WidgetPropertyPane.getInstance(this); - } - - /** - * 参数属性表 - * - * @return 参数属性表 - */ - - public JPanel getEastDownPane() { - return FormWidgetDetailPane.getInstance(this); - } - - /** - * 权限编辑面板 - * - * @return 权限编辑面板 - */ - public AuthorityEditPane getAuthorityEditPane() { - FormWidgetAuthorityEditPane formWidgetAuthorityEditPane = new FormWidgetAuthorityEditPane(this); - formWidgetAuthorityEditPane.populateDetials(); - return formWidgetAuthorityEditPane; - } - - /** - * 给包含此FormParaDesigner的ParameterDefinitePane添加事件 - * - * @param paraDefinitePane 面板 - */ - public void addListener(final ParaDefinitePane paraDefinitePane) { - this.getEditListenerTable().addListener(new DesignerEditListener() { - - @Override - public void fireCreatorModified(DesignerEvent evt) { - if (evt.getCreatorEventID() == DesignerEvent.CREATOR_ADDED - || evt.getCreatorEventID() == DesignerEvent.CREATOR_CUTED - || evt.getCreatorEventID() == DesignerEvent.CREATOR_PASTED - || evt.getCreatorEventID() == DesignerEvent.CREATOR_DELETED - || evt.getCreatorEventID() == DesignerEvent.CREATOR_EDITED - || evt.getCreatorEventID() == DesignerEvent.CREATOR_RENAMED) { - paraDefinitePane.setParameterArray( - paraDefinitePane.getNoRepeatParas(DesignModelAdapter.getCurrentModelAdapter().getParameters())); - paraDefinitePane.refreshParameter(); - } - } - }); - } - - /** - * 包裹一层FormArea - * - * @return 区域 - */ - public Component createWrapper() { - FormArea area = new FormArea(this, false); - area.setBorder(BorderFactory.createEmptyBorder(0, 13, 0, 0)); - return area; - } - - /** - * 刷新控件 - */ - public void refreshAllNameWidgets() { - XCreatorUtils.refreshAllNameWidgets(this.getRootComponent()); - } - - /** - * 刷新tableData - * - * @param oldName 旧名称 - * @param newName 新名称 - */ - public void refresh4TableData(String oldName, String newName) { - this.getTarget().renameTableData(oldName, newName); - this.getEditListenerTable().fireCreatorModified(DesignerEvent.CREATOR_SELECTED); - } - - /** - * 刷新参数 - * - * @param p 参数面板 - */ - public void refreshParameter(ParaDefinitePane p) { - XLayoutContainer rootContainer = this.getRootComponent(); - java.util.List namelist = getAllXCreatorNameList(rootContainer); - // parameterArray是报表的所有参数, nameList是已经在参数面板添加过控件的参数名 - // 与已有的参数列表比较 如果已经存在 就除去 - Parameter[] ps = p.getParameterArray(); - if (ps != null) { - for (Parameter parameter : ps) { - for (String name : namelist) { - if (name.equalsIgnoreCase(parameter.getName())) { - p.setParameterArray((Parameter[]) ArrayUtils.removeElement(p.getParameterArray(), parameter)); - } - } - } - } - ParameterPropertyPane.getInstance().getParameterToolbarPane().populateBean( - p.getParameterArray() == null ? new Parameter[0] : p.getParameterArray()); - EastRegionContainerPane.getInstance().setParameterHeight(ParameterPropertyPane.getInstance().getPreferredSize().height); - - } - - /** - * 判断这个参数面板是否没有控件 - * - * @return 参数面板是否没有控件 - */ - public boolean isBlank() { - XLayoutContainer rootContainer = this.getRootComponent(); - List xx = getAllXCreatorNameList(rootContainer); - return xx.isEmpty(); - } - - protected void setToolbarButtons(boolean flag) { - DesignerContext.getDesignerFrame().checkCombineUp(!flag, NAME_ARRAY_LIST); - } - - /** - * 看看参数面板中的控件是否有和模板参数同名的 - * - * @param allParameters 参数 - * @return 是否有同名 - */ - public boolean isWithoutParaXCreator(Parameter[] allParameters) { - XLayoutContainer rootContainer = this.getRootComponent(); - List xx = getAllXCreatorNameList(rootContainer); - for (Parameter parameter : allParameters) { - for (String name : xx) { - if (name.equalsIgnoreCase(parameter.getName())) { - return false; - } - } - } - - return true; - } - - /** - * 参数面板控件的名字 - * - * @return 名字 - */ - public List getAllXCreatorNameList() { - XLayoutContainer rootContainer = this.getRootComponent(); - List namelist = new ArrayList(); - for (int i = 0; i < rootContainer.getXCreatorCount(); i++) { - if (rootContainer.getXCreator(i) instanceof XLayoutContainer) { - namelist.addAll(getAllXCreatorNameList((XLayoutContainer) rootContainer.getXCreator(i))); - } else { - namelist.add(rootContainer.getXCreator(i).toData().getWidgetName()); - } - } - return namelist; - } - - private List getAllXCreatorNameList(XLayoutContainer rootContainer) { - List namelist = new ArrayList(); - for (int i = 0; i < rootContainer.getXCreatorCount(); i++) { - if (rootContainer.getXCreator(i) instanceof XLayoutContainer) { - namelist.addAll(getAllXCreatorNameList((XLayoutContainer) rootContainer.getXCreator(i))); - } else { - namelist.add(rootContainer.getXCreator(i).toData().getWidgetName()); - } - } - return namelist; - } - - /** - * 是否有查询按钮 - * - * @return 有无查询按钮 - */ - public boolean isWithQueryButton() { - XLayoutContainer rootContainer = this.getRootComponent(); - return SearchQueryCreators(rootContainer); - } - - /** - * 返回复制粘贴删除等动作 - * - * @return 同上 - */ - public Action[] getActions() { - if (designer_actions == null) { - designer_actions = new Action[]{new CutAction(this), new CopyAction(this), new PasteAction(this), - new FormDeleteAction(this)}; - } - return designer_actions; - } - - private boolean SearchQueryCreators(XLayoutContainer rootContainer) { - boolean b = false; - for (int i = 0; i < rootContainer.getXCreatorCount(); i++) { - if (rootContainer.getXCreator(i) instanceof XLayoutContainer) { - b = SearchQueryCreators((XLayoutContainer) rootContainer.getXCreator(i)); - } else if (rootContainer.getXCreator(i) instanceof XFormSubmit) { - b = true; - } - } - return b; - } - - /** - * 就是getTarget 为了返回ParameterUI接口而不冲突另写个 - * - * @return - */ - public ParameterUI getParaTarget() { - return (FormParameterUI) super.getTarget(); - } - - /** - * ParameterDefinitePane通过ParaDesigner来调用ParameterPropertyPane - * - * @param p 面板 - */ - public void populateParameterPropertyPane(ParaDefinitePane p) { - ParameterPropertyPane.getInstance().populateBean(p); - } - - /** - * 初始化 - */ - public void initWidgetToolbarPane() { - WidgetToolBarPane.getInstance(this); - } - - /** - * populate - * - * @param ui - */ - public void populate(ParameterUI ui) { - if (ui == null) { - return; - } - if (this.getTarget() == ui) { - repaint(); - return; - } - this.setTarget((FormParameterUI) ui.convert()); - this.refreshRoot(); - } - - /** - * 报表直接判断底层是否是绝对布局 - * - * @return 是则返回true - */ - public boolean hasWAbsoluteLayout() { - return this.getTarget().getContainer() instanceof WAbsoluteLayout; - } - - /** - * 刷新底层容器 - */ - public void refreshRoot() { - XLayoutContainer layoutContainer = (XLayoutContainer) XCreatorUtils.createXCreator(this.getTarget() - .getContainer()); - if (layoutContainer == null) { - layoutContainer = new XWParameterLayout(); - } - layoutContainer.setSize(LARGE_PREFERRED_SIZE); - setRootComponent(layoutContainer); - } - - /** - * 是否是报表的参数面板 - * - * @return 是 - */ - public boolean isFormParaDesigner() { - return true; - } - - public XLayoutContainer getParaComponent() { - return getRootComponent(); - } - - private void paintLinkParameters(Graphics clipg) { - Parameter[] paras = DesignModelAdapter.getCurrentModelAdapter().getParameters(); - if (paras == null || paras.length == 0) { - return; - } - Graphics g = clipg.create(); - g.setColor(Color.RED); - if (!(this.getRootComponent() instanceof XWAbsoluteLayout)) { - return; - } - XWAbsoluteLayout layout = (XWAbsoluteLayout) this.getRootComponent(); - for (int i = 0; i < layout.getXCreatorCount(); i++) { - XCreator creator = layout.getXCreator(i); - if (!creator.isVisible()) { - continue; - } - for (Parameter p : paras) { - if (p.getName().equalsIgnoreCase(creator.toData().getWidgetName())) { - g.drawImage(paraImage, creator.getX() - 4, creator.getY() + 2, null); - break; - } - } - } - } - - /** - * 得到合适的大小 - * - * @return - */ - public Dimension getPreferredSize() { - return getDesignSize(); - } - - public Dimension getDesignSize() { - return ((FormParameterUI) getTarget()).getDesignSize(); - } - - /** - * 设置高度 - * - * @param height - */ - public void setDesignHeight(int height) { - Dimension dim = getPreferredSize(); - dim.height = height; - ((FormParameterUI) getTarget()).setDesignSize(dim); - } - - /** - * paintContent - * - * @param clipg - */ - public void paintContent(Graphics clipg) { - Dimension dim; - dim = ((FormParameterUI) getTarget()).getDesignSize(); - getRootComponent().setSize(dim); - getRootComponent().paint(clipg); - paintLinkParameters(clipg); - paintOp(clipg, getOutlineBounds()); - } - - private void paintOp(Graphics offg, Rectangle bounds) { - Color oldColor = offg.getColor(); - Insets insets = getOutlineInsets(); - offg.setColor(XCreatorConstants.OP_COLOR); - offg.fillRect(bounds.x, bounds.y + bounds.height, bounds.width + insets.right, insets.bottom); - offg.fillRect(bounds.x + bounds.width, bounds.y, insets.right, bounds.height); - offg.setColor(oldColor); - } - - protected void setRootComponent(XLayoutContainer component) { - component.setDirections(new int[]{Direction.BOTTOM, Direction.RIGHT}); - super.setRootComponent(component); - } - - /** - * 刷新尺寸 - */ - public void populateRootSize() { - ((FormParameterUI) getTarget()).setDesignSize(getRootComponent().getSize()); - if (getParaComponent().acceptType(XWParameterLayout.class)) { - WParameterLayout layout = (WParameterLayout) getParaComponent().toData(); - layout.setDesignWidth(getRootComponent().getWidth()); - } - } - - /** - * 保存参数界面的宽度 - * - * @param width 指定的宽度 - */ - public void updateWidth(int width) { - FormParameterUI parameterUI = ((FormParameterUI) getTarget()); - parameterUI.setDesignSize(new Dimension(width, parameterUI.getDesignSize().height)); - } - - /** - * 保存参数界面的高度 - * - * @param height 指定的高度 - */ - public void updateHeight(int height) { - FormParameterUI parameterUI = ((FormParameterUI) getTarget()); - parameterUI.setDesignSize(new Dimension(parameterUI.getDesignSize().width, height)); - } - - /** - * 在参数很多时,全部添加的时候,可以向下一次排版,若去掉就会在参数面板堆到一起 - * - * @param creator 组件 z - * @param x 长度 - * @param y 长度 c - * @param layout 布局 - * @return 是否扩展 - */ - public boolean prepareForAdd(XCreator creator, int x, int y, XWAbsoluteLayout layout) { - // 参数界面,自动扩展 - if (!isRoot(layout)) { - return false; - } - - Dimension size = layout.getSize(); - Boolean needResize = false; - - if (creator.getWidth() / 2 + x > layout.getWidth()) { - size.width = creator.getWidth() / 2 + x + ADD_HEIGHT; - needResize = true; - } - if (creator.getHeight() / 2 + y > layout.getHeight()) { - size.height = creator.getHeight() / 2 + y + ADD_HEIGHT; - needResize = true; - } - if (needResize) { - layout.setSize(size); - populateRootSize(); - } - return true; - } - - /** - * 加入参数 - * - * @param parameter 参数 c - * @param currentIndex 位置 w - * @return 是否加入 s - */ - public boolean addingParameter2Editor(Parameter parameter, int currentIndex) { - com.fr.form.ui.Label label = new com.fr.form.ui.Label(); - String name = parameter.getName(); - label.setWidgetName("Label" + name); - label.setWidgetValue(new WidgetValue(name + ":")); - XCreator xCreator = XCreatorUtils.createXCreator(label); - if (!(this.autoAddComponent(xCreator, H_COMPONENT_GAP * (currentIndex % NUM_IN_A_LINE) - + FIRST_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE)))) { - return false; - } - EditorHolder editor = new EditorHolder(parameter); - xCreator = XCreatorUtils.createXCreator(editor); - if (!(this.autoAddComponent(xCreator, H_COMPONENT_GAP * (currentIndex % NUM_IN_A_LINE) - + SECOND_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE)))) { - return false; - } - return true; - } - - - /** - * 加入参数 - * - * @param parameter 参数 c - * @param currentIndex 位置 w - * @return 是否加入 s - */ - public boolean addingParameter2EditorWithQueryButton(Parameter parameter, int currentIndex) { - com.fr.form.ui.Label label = new com.fr.form.ui.Label(); - String name = parameter.getName(); - label.setWidgetName("Label" + name); - label.setWidgetValue(new WidgetValue(name + ":")); - XCreator xCreator = XCreatorUtils.createXCreator(label); - if (!(this.autoAddComponent(xCreator, FIRST_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP - * (currentIndex / NUM_IN_A_LINE)))) { - return false; - } - EditorHolder editor = new EditorHolder(parameter); - editor.setWidgetName(name); - xCreator = XCreatorUtils.createXCreator(editor); - if (!(this.autoAddComponent(xCreator, SECOND_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP - * (currentIndex / NUM_IN_A_LINE)))) { - return false; - } - FormSubmitButton formSubmitButton = new FormSubmitButton(); - formSubmitButton.setWidgetName("Search"); - formSubmitButton.setText(Inter.getLocText("FR-Designer_Query")); - xCreator = XCreatorUtils.createXCreator(formSubmitButton); - if (!(this.autoAddComponent(xCreator, 270, FIRST_V_LOCATION + V_COMPONENT_GAP - * (currentIndex / NUM_IN_A_LINE)))) { - return false; - } - return true; - } - - /** - * 加入参数 - * - * @param parameterArray 参数 c - * @param currentIndex 位置 w - * @return 是否加入 s - */ - public void addingAllParameter2Editor(Parameter[] parameterArray, int currentIndex) { - for (int i = 0; i < parameterArray.length; i++) { - com.fr.form.ui.Label label = new com.fr.form.ui.Label(); - label.setWidgetName("Label" + parameterArray[i].getName()); - label.setWidgetValue(new WidgetValue(parameterArray[i].getName() + ":")); - XCreator xCreator = XCreatorUtils.createXCreator(label); - - if (!(this.autoAddComponent(xCreator, H_COMPONENT_GAP * (currentIndex % NUM_IN_A_LINE) - + FIRST_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE)))) { - break; - } - // 每行显示5组 - EditorHolder editor = new EditorHolder(parameterArray[i]); - editor.setWidgetName(parameterArray[i].getName()); - xCreator = XCreatorUtils.createXCreator(editor); - if (!(this.autoAddComponent(xCreator, H_COMPONENT_GAP * (currentIndex % NUM_IN_A_LINE) - + SECOND_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE)))) { - break; - } - currentIndex++; - } - if (!isWithQueryButton()) { - FormSubmitButton formSubmitButton = new FormSubmitButton(); - formSubmitButton.setWidgetName("Search"); - formSubmitButton.setText(Inter.getLocText("FR-Designer_Query")); - XCreator xCreator = XCreatorUtils.createXCreator(formSubmitButton); - if (!(this.autoAddComponent(xCreator, H_COMPONENT_GAP * 3 + H_GAP, FIRST_V_LOCATION - + V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE)))) { - return; - } - } - } - - /** - * 自动添加 - * - * @param xCreator 组件 z - * @param x 位置 w - * @param y 位置 - * @return 是否添加 s - */ - public boolean autoAddComponent(XCreator xCreator, int x, int y) { - XWAbsoluteLayout layout = (XWAbsoluteLayout) this.getRootComponent(); - FRAbsoluteLayoutAdapter adapter = (FRAbsoluteLayoutAdapter) layout.getLayoutAdapter(); - if (prepareForAdd(xCreator, x, y, layout)) { - adapter.addBean(xCreator, x, y); - } - this.getSelectionModel().setSelectedCreator(xCreator); - repaint(); - return true; - } - - /** - * 工具栏 - * - * @return 工具栏面板 g - */ - public JPanel[] toolbarPanes4Form() { - return new JPanel[]{FormParaPane.getInstance(this)}; - } - - /** - * 复制等按钮 - * - * @return 按钮组 a - */ - public JComponent[] toolBarButton4Form() { - return new JComponent[]{new CutAction(this).createToolBarComponent(), new CopyAction(this).createToolBarComponent(), new PasteAction(this).createToolBarComponent(), - new FormDeleteAction(this).createToolBarComponent()}; - } +/* + * Copyright(c) 2001-2011, FineReport Inc, All Rights Reserved. + */ +package com.fr.design.form.parameter; + +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Image; +import java.awt.Insets; +import java.awt.Rectangle; +import java.util.ArrayList; +import java.util.List; + +import javax.swing.Action; +import javax.swing.BorderFactory; +import javax.swing.JComponent; +import javax.swing.JPanel; + +import com.fr.base.BaseUtils; +import com.fr.base.Parameter; +import com.fr.base.parameter.ParameterUI; +import com.fr.design.DesignModelAdapter; +import com.fr.design.designer.beans.actions.CopyAction; +import com.fr.design.designer.beans.actions.CutAction; +import com.fr.design.designer.beans.actions.FormDeleteAction; +import com.fr.design.designer.beans.actions.PasteAction; +import com.fr.design.designer.beans.adapters.layout.FRAbsoluteLayoutAdapter; +import com.fr.design.designer.beans.events.DesignerEditListener; +import com.fr.design.designer.beans.events.DesignerEvent; +import com.fr.design.designer.beans.location.Direction; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XCreatorUtils; +import com.fr.design.designer.creator.XLayoutContainer; +import com.fr.design.designer.creator.XWAbsoluteLayout; +import com.fr.design.designer.creator.XWParameterLayout; +import com.fr.design.designer.properties.FormWidgetAuthorityEditPane; +import com.fr.design.form.util.XCreatorConstants; +import com.fr.design.mainframe.AuthorityEditPane; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.EastRegionContainerPane; +import com.fr.design.mainframe.FormArea; +import com.fr.design.mainframe.FormDesigner; +import com.fr.design.mainframe.FormDesignerModeForSpecial; +import com.fr.design.mainframe.FormParaPane; +import com.fr.design.mainframe.FormWidgetDetailPane; +import com.fr.design.mainframe.WidgetPropertyPane; +import com.fr.design.mainframe.WidgetToolBarPane; +import com.fr.design.parameter.ParaDefinitePane; +import com.fr.design.parameter.ParameterDesignerProvider; +import com.fr.design.parameter.ParameterPropertyPane; +import com.fr.form.main.Form; +import com.fr.form.main.parameter.FormParameterUI; +import com.fr.form.parameter.FormSubmitButton; +import com.fr.form.ui.EditorHolder; +import com.fr.form.ui.WidgetValue; +import com.fr.form.ui.container.WAbsoluteLayout; +import com.fr.form.ui.container.WLayout; +import com.fr.form.ui.container.WParameterLayout; +import com.fr.general.Inter; +import com.fr.stable.ArrayUtils; + +/** + * Created by IntelliJ IDEA. + * User : Richer + * Version: 6.5.5 + * Date : 11-7-5 + * Time : 下午7:46 + * 表单类型的参数设计器 + */ +// TODO ALEX_SEP FormDesigner和FormParaDesignEditor应该共用Form的编辑,但是FormParaDesignEditor不应该直接就是FormDesigner +public class FormParaDesigner extends FormDesigner implements ParameterDesignerProvider { + private static final int NUM_IN_A_LINE = 4; + private static final int H_COMPONENT_GAP = 165; + private static final int V_COMPONENT_GAP = 25; + private static final int FIRST_V_LOCATION = 35; + private static final int FIRST_H_LOCATION = 90; + private static final int SECOND_H_LOCATION = 170; + private static final int ADD_HEIGHT = 20; + private static final int H_GAP = 105; + + private static Image paraImage = BaseUtils.readImage("/com/fr/design/images/form/parameter.png"); + + public FormParaDesigner() { + this(new FormParameterUI()); + } + + public FormParaDesigner(FormParameterUI ui) { + super(gen(ui)); + } + + private static Form gen(Form form) { + WLayout container = form.getContainer(); + if (container == null) { + container = new WParameterLayout(); + } + container.setWidgetName("para"); + form.setContainer(container); + return form; + } + + protected FormDesignerModeForSpecial createFormDesignerTargetMode() { + return new FormParaTargetMode(this); + } + + /** + * 开始编辑参数面板的时候进行的初始化 + */ + public void initBeforeUpEdit() { + WidgetToolBarPane.getInstance(this); + EastRegionContainerPane.getInstance().replaceDownPane( + FormWidgetDetailPane.getInstance(this)); + if (!BaseUtils.isAuthorityEditing()) { + EastRegionContainerPane.getInstance().addParameterPane(ParameterPropertyPane.getInstance(this)); + EastRegionContainerPane.getInstance().setParameterHeight(ParameterPropertyPane.getInstance(this).getPreferredSize().height); + EastRegionContainerPane.getInstance().replaceUpPane( + WidgetPropertyPane.getInstance(this)); + } else { + EastRegionContainerPane.getInstance().removeParameterPane(); + showAuthorityEditPane(); + } + + } + + /** + * 创建权限编辑面板 + * + * @return 面板 + */ + public AuthorityEditPane createAuthorityEditPane() { + return new FormWidgetAuthorityEditPane(this); + } + + /** + * 内容属性表面板 + * + * @return 内容属性表面板 + */ + public JPanel getEastUpPane() { + return WidgetPropertyPane.getInstance(this); + } + + /** + * 参数属性表 + * + * @return 参数属性表 + */ + + public JPanel getEastDownPane() { + return FormWidgetDetailPane.getInstance(this); + } + + /** + * 权限编辑面板 + * + * @return 权限编辑面板 + */ + public AuthorityEditPane getAuthorityEditPane() { + FormWidgetAuthorityEditPane formWidgetAuthorityEditPane = new FormWidgetAuthorityEditPane(this); + formWidgetAuthorityEditPane.populateDetials(); + return formWidgetAuthorityEditPane; + } + + /** + * 给包含此FormParaDesigner的ParameterDefinitePane添加事件 + * + * @param paraDefinitePane 面板 + */ + public void addListener(final ParaDefinitePane paraDefinitePane) { + this.getEditListenerTable().addListener(new DesignerEditListener() { + + @Override + public void fireCreatorModified(DesignerEvent evt) { + if (evt.getCreatorEventID() == DesignerEvent.CREATOR_ADDED + || evt.getCreatorEventID() == DesignerEvent.CREATOR_CUTED + || evt.getCreatorEventID() == DesignerEvent.CREATOR_PASTED + || evt.getCreatorEventID() == DesignerEvent.CREATOR_DELETED + || evt.getCreatorEventID() == DesignerEvent.CREATOR_EDITED + || evt.getCreatorEventID() == DesignerEvent.CREATOR_RENAMED) { + paraDefinitePane.setParameterArray( + paraDefinitePane.getNoRepeatParas(DesignModelAdapter.getCurrentModelAdapter().getParameters())); + paraDefinitePane.refreshParameter(); + } + } + }); + } + + /** + * 包裹一层FormArea + * + * @return 区域 + */ + public Component createWrapper() { + FormArea area = new FormArea(this, false); + area.setBorder(BorderFactory.createEmptyBorder(0, 13, 0, 0)); + return area; + } + + /** + * 刷新控件 + */ + public void refreshAllNameWidgets() { + XCreatorUtils.refreshAllNameWidgets(this.getRootComponent()); + } + + /** + * 刷新tableData + * + * @param oldName 旧名称 + * @param newName 新名称 + */ + public void refresh4TableData(String oldName, String newName) { + this.getTarget().renameTableData(oldName, newName); + this.getEditListenerTable().fireCreatorModified(DesignerEvent.CREATOR_SELECTED); + } + + /** + * 刷新参数 + * + * @param p 参数面板 + */ + public void refreshParameter(ParaDefinitePane p) { + XLayoutContainer rootContainer = this.getRootComponent(); + java.util.List namelist = getAllXCreatorNameList(rootContainer); + // parameterArray是报表的所有参数, nameList是已经在参数面板添加过控件的参数名 + // 与已有的参数列表比较 如果已经存在 就除去 + Parameter[] ps = p.getParameterArray(); + if (ps != null) { + for (Parameter parameter : ps) { + for (String name : namelist) { + if (name.equalsIgnoreCase(parameter.getName())) { + p.setParameterArray((Parameter[]) ArrayUtils.removeElement(p.getParameterArray(), parameter)); + } + } + } + } + ParameterPropertyPane.getInstance().getParameterToolbarPane().populateBean( + p.getParameterArray() == null ? new Parameter[0] : p.getParameterArray()); + EastRegionContainerPane.getInstance().setParameterHeight(ParameterPropertyPane.getInstance().getPreferredSize().height); + + } + + /** + * 判断这个参数面板是否没有控件 + * + * @return 参数面板是否没有控件 + */ + public boolean isBlank() { + XLayoutContainer rootContainer = this.getRootComponent(); + List xx = getAllXCreatorNameList(rootContainer); + return xx.isEmpty(); + } + + protected void setToolbarButtons(boolean flag) { + DesignerContext.getDesignerFrame().checkCombineUp(!flag, NAME_ARRAY_LIST); + } + + /** + * 看看参数面板中的控件是否有和模板参数同名的 + * + * @param allParameters 参数 + * @return 是否有同名 + */ + public boolean isWithoutParaXCreator(Parameter[] allParameters) { + XLayoutContainer rootContainer = this.getRootComponent(); + List xx = getAllXCreatorNameList(rootContainer); + for (Parameter parameter : allParameters) { + for (String name : xx) { + if (name.equalsIgnoreCase(parameter.getName())) { + return false; + } + } + } + + return true; + } + + /** + * 参数面板控件的名字 + * + * @return 名字 + */ + public List getAllXCreatorNameList() { + XLayoutContainer rootContainer = this.getRootComponent(); + List namelist = new ArrayList(); + for (int i = 0; i < rootContainer.getXCreatorCount(); i++) { + if (rootContainer.getXCreator(i) instanceof XLayoutContainer) { + namelist.addAll(getAllXCreatorNameList((XLayoutContainer) rootContainer.getXCreator(i))); + } else { + namelist.add(rootContainer.getXCreator(i).toData().getWidgetName()); + } + } + return namelist; + } + + private List getAllXCreatorNameList(XLayoutContainer rootContainer) { + List namelist = new ArrayList(); + for (int i = 0; i < rootContainer.getXCreatorCount(); i++) { + if (rootContainer.getXCreator(i) instanceof XLayoutContainer) { + namelist.addAll(getAllXCreatorNameList((XLayoutContainer) rootContainer.getXCreator(i))); + } else { + namelist.add(rootContainer.getXCreator(i).toData().getWidgetName()); + } + } + return namelist; + } + + /** + * 是否有查询按钮 + * + * @return 有无查询按钮 + */ + public boolean isWithQueryButton() { + XLayoutContainer rootContainer = this.getRootComponent(); + return SearchQueryCreators(rootContainer); + } + + /** + * 返回复制粘贴删除等动作 + * + * @return 同上 + */ + public Action[] getActions() { + if (designer_actions == null) { + designer_actions = new Action[]{new CutAction(this), new CopyAction(this), new PasteAction(this), + new FormDeleteAction(this)}; + } + return designer_actions; + } + + private boolean SearchQueryCreators(XLayoutContainer rootContainer) { + boolean b = false; + for (int i = 0; i < rootContainer.getXCreatorCount(); i++) { + if (rootContainer.getXCreator(i) instanceof XLayoutContainer) { + b = SearchQueryCreators((XLayoutContainer) rootContainer.getXCreator(i)); + } else if (rootContainer.getXCreator(i) instanceof XFormSubmit) { + b = true; + } + } + return b; + } + + /** + * 就是getTarget 为了返回ParameterUI接口而不冲突另写个 + * + * @return + */ + public ParameterUI getParaTarget() { + return (FormParameterUI) super.getTarget(); + } + + /** + * ParameterDefinitePane通过ParaDesigner来调用ParameterPropertyPane + * + * @param p 面板 + */ + public void populateParameterPropertyPane(ParaDefinitePane p) { + ParameterPropertyPane.getInstance().populateBean(p); + } + + /** + * 初始化 + */ + public void initWidgetToolbarPane() { + WidgetToolBarPane.getInstance(this); + } + + /** + * populate + * + * @param ui + */ + public void populate(ParameterUI ui) { + if (ui == null) { + return; + } + if (this.getTarget() == ui) { + repaint(); + return; + } + this.setTarget((FormParameterUI) ui.convert()); + this.refreshRoot(); + } + + /** + * 报表直接判断底层是否是绝对布局 + * + * @return 是则返回true + */ + public boolean hasWAbsoluteLayout() { + return this.getTarget().getContainer() instanceof WAbsoluteLayout; + } + + /** + * 刷新底层容器 + */ + public void refreshRoot() { + XLayoutContainer layoutContainer = (XLayoutContainer) XCreatorUtils.createXCreator(this.getTarget() + .getContainer()); + if (layoutContainer == null) { + layoutContainer = new XWParameterLayout(); + } + layoutContainer.setSize(LARGE_PREFERRED_SIZE); + setRootComponent(layoutContainer); + } + + /** + * 是否是报表的参数面板 + * + * @return 是 + */ + public boolean isFormParaDesigner() { + return true; + } + + public XLayoutContainer getParaComponent() { + return getRootComponent(); + } + + private void paintLinkParameters(Graphics clipg) { + Parameter[] paras = DesignModelAdapter.getCurrentModelAdapter().getParameters(); + if (paras == null || paras.length == 0) { + return; + } + Graphics g = clipg.create(); + g.setColor(Color.RED); + if (!(this.getRootComponent() instanceof XWAbsoluteLayout)) { + return; + } + XWAbsoluteLayout layout = (XWAbsoluteLayout) this.getRootComponent(); + for (int i = 0; i < layout.getXCreatorCount(); i++) { + XCreator creator = layout.getXCreator(i); + if (!creator.isVisible()) { + continue; + } + for (Parameter p : paras) { + if (p.getName().equalsIgnoreCase(creator.toData().getWidgetName())) { + g.drawImage(paraImage, creator.getX() - 4, creator.getY() + 2, null); + break; + } + } + } + } + + /** + * 得到合适的大小 + * + * @return + */ + public Dimension getPreferredSize() { + return getDesignSize(); + } + + public Dimension getDesignSize() { + return ((FormParameterUI) getTarget()).getDesignSize(); + } + + /** + * 设置高度 + * + * @param height + */ + public void setDesignHeight(int height) { + Dimension dim = getPreferredSize(); + dim.height = height; + ((FormParameterUI) getTarget()).setDesignSize(dim); + } + + /** + * paintContent + * + * @param clipg + */ + public void paintContent(Graphics clipg) { + Dimension dim; + dim = ((FormParameterUI) getTarget()).getDesignSize(); + getRootComponent().setSize(dim); + getRootComponent().paint(clipg); + paintLinkParameters(clipg); + paintOp(clipg, getOutlineBounds()); + } + + private void paintOp(Graphics offg, Rectangle bounds) { + Color oldColor = offg.getColor(); + Insets insets = getOutlineInsets(); + offg.setColor(XCreatorConstants.OP_COLOR); + offg.fillRect(bounds.x, bounds.y + bounds.height, bounds.width + insets.right, insets.bottom); + offg.fillRect(bounds.x + bounds.width, bounds.y, insets.right, bounds.height); + offg.setColor(oldColor); + } + + protected void setRootComponent(XLayoutContainer component) { + component.setDirections(new int[]{Direction.BOTTOM, Direction.RIGHT}); + super.setRootComponent(component); + } + + /** + * 刷新尺寸 + */ + public void populateRootSize() { + ((FormParameterUI) getTarget()).setDesignSize(getRootComponent().getSize()); + if (getParaComponent().acceptType(XWParameterLayout.class)) { + WParameterLayout layout = (WParameterLayout) getParaComponent().toData(); + layout.setDesignWidth(getRootComponent().getWidth()); + } + } + + /** + * 保存参数界面的宽度 + * + * @param width 指定的宽度 + */ + public void updateWidth(int width) { + FormParameterUI parameterUI = ((FormParameterUI) getTarget()); + parameterUI.setDesignSize(new Dimension(width, parameterUI.getDesignSize().height)); + } + + /** + * 保存参数界面的高度 + * + * @param height 指定的高度 + */ + public void updateHeight(int height) { + FormParameterUI parameterUI = ((FormParameterUI) getTarget()); + parameterUI.setDesignSize(new Dimension(parameterUI.getDesignSize().width, height)); + } + + /** + * 在参数很多时,全部添加的时候,可以向下一次排版,若去掉就会在参数面板堆到一起 + * + * @param creator 组件 z + * @param x 长度 + * @param y 长度 c + * @param layout 布局 + * @return 是否扩展 + */ + public boolean prepareForAdd(XCreator creator, int x, int y, XWAbsoluteLayout layout) { + // 参数界面,自动扩展 + if (!isRoot(layout)) { + return false; + } + + Dimension size = layout.getSize(); + Boolean needResize = false; + + if (creator.getWidth() / 2 + x > layout.getWidth()) { + size.width = creator.getWidth() / 2 + x + ADD_HEIGHT; + needResize = true; + } + if (creator.getHeight() / 2 + y > layout.getHeight()) { + size.height = creator.getHeight() / 2 + y + ADD_HEIGHT; + needResize = true; + } + if (needResize) { + layout.setSize(size); + populateRootSize(); + } + return true; + } + + /** + * 加入参数 + * + * @param parameter 参数 c + * @param currentIndex 位置 w + * @return 是否加入 s + */ + public boolean addingParameter2Editor(Parameter parameter, int currentIndex) { + com.fr.form.ui.Label label = new com.fr.form.ui.Label(); + String name = parameter.getName(); + label.setWidgetName("Label" + name); + label.setWidgetValue(new WidgetValue(name + ":")); + XCreator xCreator = XCreatorUtils.createXCreator(label); + if (!(this.autoAddComponent(xCreator, H_COMPONENT_GAP * (currentIndex % NUM_IN_A_LINE) + + FIRST_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE)))) { + return false; + } + EditorHolder editor = new EditorHolder(parameter); + xCreator = XCreatorUtils.createXCreator(editor); + if (!(this.autoAddComponent(xCreator, H_COMPONENT_GAP * (currentIndex % NUM_IN_A_LINE) + + SECOND_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE)))) { + return false; + } + return true; + } + + + /** + * 加入参数 + * + * @param parameter 参数 c + * @param currentIndex 位置 w + * @return 是否加入 s + */ + public boolean addingParameter2EditorWithQueryButton(Parameter parameter, int currentIndex) { + com.fr.form.ui.Label label = new com.fr.form.ui.Label(); + String name = parameter.getName(); + label.setWidgetName("Label" + name); + label.setWidgetValue(new WidgetValue(name + ":")); + XCreator xCreator = XCreatorUtils.createXCreator(label); + if (!(this.autoAddComponent(xCreator, FIRST_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP + * (currentIndex / NUM_IN_A_LINE)))) { + return false; + } + EditorHolder editor = new EditorHolder(parameter); + editor.setWidgetName(name); + xCreator = XCreatorUtils.createXCreator(editor); + if (!(this.autoAddComponent(xCreator, SECOND_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP + * (currentIndex / NUM_IN_A_LINE)))) { + return false; + } + FormSubmitButton formSubmitButton = new FormSubmitButton(); + formSubmitButton.setWidgetName("Search"); + formSubmitButton.setText(Inter.getLocText("FR-Designer_Query")); + xCreator = XCreatorUtils.createXCreator(formSubmitButton); + if (!(this.autoAddComponent(xCreator, 270, FIRST_V_LOCATION + V_COMPONENT_GAP + * (currentIndex / NUM_IN_A_LINE)))) { + return false; + } + return true; + } + + /** + * 加入参数 + * + * @param parameterArray 参数 c + * @param currentIndex 位置 w + * @return 是否加入 s + */ + public void addingAllParameter2Editor(Parameter[] parameterArray, int currentIndex) { + for (int i = 0; i < parameterArray.length; i++) { + com.fr.form.ui.Label label = new com.fr.form.ui.Label(); + label.setWidgetName("Label" + parameterArray[i].getName()); + label.setWidgetValue(new WidgetValue(parameterArray[i].getName() + ":")); + XCreator xCreator = XCreatorUtils.createXCreator(label); + + if (!(this.autoAddComponent(xCreator, H_COMPONENT_GAP * (currentIndex % NUM_IN_A_LINE) + + FIRST_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE)))) { + break; + } + // 每行显示5组 + EditorHolder editor = new EditorHolder(parameterArray[i]); + editor.setWidgetName(parameterArray[i].getName()); + xCreator = XCreatorUtils.createXCreator(editor); + if (!(this.autoAddComponent(xCreator, H_COMPONENT_GAP * (currentIndex % NUM_IN_A_LINE) + + SECOND_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE)))) { + break; + } + currentIndex++; + } + if (!isWithQueryButton()) { + FormSubmitButton formSubmitButton = new FormSubmitButton(); + formSubmitButton.setWidgetName("Search"); + formSubmitButton.setText(Inter.getLocText("FR-Designer_Query")); + XCreator xCreator = XCreatorUtils.createXCreator(formSubmitButton); + if (!(this.autoAddComponent(xCreator, H_COMPONENT_GAP * 3 + H_GAP, FIRST_V_LOCATION + + V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE)))) { + return; + } + } + } + + /** + * 自动添加 + * + * @param xCreator 组件 z + * @param x 位置 w + * @param y 位置 + * @return 是否添加 s + */ + public boolean autoAddComponent(XCreator xCreator, int x, int y) { + XWAbsoluteLayout layout = (XWAbsoluteLayout) this.getRootComponent(); + FRAbsoluteLayoutAdapter adapter = (FRAbsoluteLayoutAdapter) layout.getLayoutAdapter(); + if (prepareForAdd(xCreator, x, y, layout)) { + adapter.addBean(xCreator, x, y); + } + this.getSelectionModel().setSelectedCreator(xCreator); + repaint(); + return true; + } + + /** + * 工具栏 + * + * @return 工具栏面板 g + */ + public JPanel[] toolbarPanes4Form() { + return new JPanel[]{FormParaPane.getInstance(this)}; + } + + /** + * 复制等按钮 + * + * @return 按钮组 a + */ + public JComponent[] toolBarButton4Form() { + return new JComponent[]{new CutAction(this).createToolBarComponent(), new CopyAction(this).createToolBarComponent(), new PasteAction(this).createToolBarComponent(), + new FormDeleteAction(this).createToolBarComponent()}; + } } \ No newline at end of file From 2715c3c598f1567a9f647d13b5c194705111d222 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Tue, 28 Mar 2017 20:43:41 +0800 Subject: [PATCH 221/343] =?UTF-8?q?=E6=97=A0=E4=BB=BB=E5=8A=A1=20=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/actions/edit/CopyAction.java | 70 +- .../fr/design/beans/location/MoveUtils.java | 2 +- .../parameter/ParameterDesignerProvider.java | 73 +- .../com/fr/design/utils/ComponentUtils.java | 303 +-- .../design/designer/beans/LayoutAdapter.java | 186 +- .../designer/beans/actions/CopyAction.java | 59 +- .../layout/AbstractLayoutAdapter.java | 376 +-- .../layout/FRAbsoluteLayoutAdapter.java | 710 +++-- .../adapters/layout/FRFitLayoutAdapter.java | 2386 ++++++++--------- .../layout/FRTabFitLayoutAdapter.java | 209 +- .../beans/location/AccessDirection.java | 327 ++- .../designer/beans/models/SelectionModel.java | 92 +- .../creator/DedicateLayoutContainer.java | 190 +- .../form/parameter/FormParaDesigner.java | 12 +- .../fr/design/mainframe/ConnectorHelper.java | 170 +- .../mainframe/EditingMouseListener.java | 1239 ++++----- .../com/fr/design/mainframe/FormDesigner.java | 23 +- .../design/mainframe/FormSelectionUtils.java | 6 +- .../src/com/fr/design/mainframe/JForm.java | 1581 ++++++----- .../design/mainframe/MobileWidgetTable.java | 693 ++--- .../design/mainframe/WidgetPropertyPane.java | 742 ++--- 21 files changed, 4736 insertions(+), 4713 deletions(-) diff --git a/designer_base/src/com/fr/design/actions/edit/CopyAction.java b/designer_base/src/com/fr/design/actions/edit/CopyAction.java index a9e685552..d0579a579 100644 --- a/designer_base/src/com/fr/design/actions/edit/CopyAction.java +++ b/designer_base/src/com/fr/design/actions/edit/CopyAction.java @@ -1,37 +1,35 @@ -/* - * Copyright(c) 2001-2010, FineReport Inc, All Rights Reserved. - */ -package com.fr.design.actions.edit; - -import java.awt.event.KeyEvent; - -import javax.swing.KeyStroke; - -import com.fr.base.BaseUtils; -import com.fr.design.actions.TemplateComponentAction; -import com.fr.design.designer.TargetComponent; -import com.fr.general.Inter; - -/** - * Copy. - */ -public class CopyAction extends TemplateComponentAction { - public CopyAction(TargetComponent t) { - super(t); - - this.setName(Inter.getLocText("M_Edit-Copy")); - this.setMnemonic('C'); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_edit/copy.png")); - this.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, KeyEvent.CTRL_MASK)); - } - - @Override - public boolean executeActionReturnUndoRecordNeeded() { - TargetComponent tc = getEditingComponent(); - if (tc != null) { - tc.copy(); - } - - return false; - } +/* + * Copyright(c) 2001-2010, FineReport Inc, All Rights Reserved. + */ +package com.fr.design.actions.edit; + +import com.fr.base.BaseUtils; +import com.fr.design.actions.TemplateComponentAction; +import com.fr.design.designer.TargetComponent; +import com.fr.general.Inter; + +import javax.swing.*; +import java.awt.event.KeyEvent; + +/** + * Copy. + */ +public class CopyAction extends TemplateComponentAction { + public CopyAction(TargetComponent t) { + super(t); + + this.setName(Inter.getLocText("M_Edit-Copy")); + this.setMnemonic('C'); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_edit/copy.png")); + this.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, KeyEvent.CTRL_MASK)); + } + + @Override + public boolean executeActionReturnUndoRecordNeeded() { + TargetComponent tc = getEditingComponent(); + if (tc != null) { + tc.copy(); + } + return false; + } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/beans/location/MoveUtils.java b/designer_base/src/com/fr/design/beans/location/MoveUtils.java index da5b0fa97..91a62ed5f 100644 --- a/designer_base/src/com/fr/design/beans/location/MoveUtils.java +++ b/designer_base/src/com/fr/design/beans/location/MoveUtils.java @@ -18,7 +18,7 @@ public class MoveUtils { public static final int SORPTION_UNIT = 5; private static final int EQUIDISTANTLINE_UNIT = 4; - public static ArrayList equidistantLines = new ArrayList<>(); + private static ArrayList equidistantLines = new ArrayList<>(); private MoveUtils() { diff --git a/designer_base/src/com/fr/design/parameter/ParameterDesignerProvider.java b/designer_base/src/com/fr/design/parameter/ParameterDesignerProvider.java index a812238b7..3ba3d610d 100644 --- a/designer_base/src/com/fr/design/parameter/ParameterDesignerProvider.java +++ b/designer_base/src/com/fr/design/parameter/ParameterDesignerProvider.java @@ -1 +1,72 @@ -package com.fr.design.parameter; import com.fr.base.Parameter; import com.fr.base.parameter.ParameterUI; import com.fr.design.mainframe.AuthorityEditPane; import javax.swing.*; import java.awt.*; /** * 参数设计界面接口 */ public interface ParameterDesignerProvider { void addListener(ParaDefinitePane paraDefinitePane); Component createWrapper(); void setDesignHeight(int height); Dimension getDesignSize(); Dimension getPreferredSize(); void populate(ParameterUI p); void refreshAllNameWidgets(); void refresh4TableData(String oldName, String newName); void refreshParameter(ParaDefinitePane paraDefinitePane); boolean isWithQueryButton(); java.util.List getAllXCreatorNameList(); boolean isWithoutParaXCreator(Parameter[] ps); boolean isBlank(); ParameterUI getParaTarget(); boolean addingParameter2Editor(Parameter parameter, int index); boolean addingParameter2EditorWithQueryButton(Parameter parameter, int index); void addingAllParameter2Editor(Parameter[] parameterArray, int currentIndex); JPanel[] toolbarPanes4Form(); JComponent[] toolBarButton4Form(); void initBeforeUpEdit(); void populateParameterPropertyPane(ParaDefinitePane p); void initWidgetToolbarPane(); AuthorityEditPane getAuthorityEditPane(); JPanel getEastUpPane(); JPanel getEastDownPane(); boolean isSupportAuthority(); void removeSelection(); ParameterBridge getParaComponent(); } \ No newline at end of file +package com.fr.design.parameter; + +import com.fr.base.Parameter; +import com.fr.base.parameter.ParameterUI; +import com.fr.design.mainframe.AuthorityEditPane; + +import javax.swing.*; +import java.awt.*; + + +/** + * 参数设计界面接口 + */ +public interface ParameterDesignerProvider { + + void addListener(ParaDefinitePane paraDefinitePane); + + Component createWrapper(); + + void setDesignHeight(int height); + + Dimension getDesignSize(); + + Dimension getPreferredSize(); + + void populate(ParameterUI p); + + void refreshAllNameWidgets(); + + void refresh4TableData(String oldName, String newName); + + void refreshParameter(ParaDefinitePane paraDefinitePane); + + boolean isWithQueryButton(); + + java.util.List getAllXCreatorNameList(); + + boolean isWithoutParaXCreator(Parameter[] ps); + + boolean isBlank(); + + ParameterUI getParaTarget(); + + boolean addingParameter2Editor(Parameter parameter, int index); + + boolean addingParameter2EditorWithQueryButton(Parameter parameter, int index); + + void addingAllParameter2Editor(Parameter[] parameterArray, int currentIndex); + + JPanel[] toolbarPanes4Form(); + + JComponent[] toolBarButton4Form(); + + void initBeforeUpEdit(); + + void populateParameterPropertyPane(ParaDefinitePane p); + + void initWidgetToolbarPane(); + + AuthorityEditPane getAuthorityEditPane(); + + JPanel getEastUpPane(); + + JPanel getEastDownPane(); + + boolean isSupportAuthority(); + + void removeSelection(); + + ParameterBridge getParaComponent(); + +} \ No newline at end of file diff --git a/designer_base/src/com/fr/design/utils/ComponentUtils.java b/designer_base/src/com/fr/design/utils/ComponentUtils.java index 4f15323f7..1d9361138 100644 --- a/designer_base/src/com/fr/design/utils/ComponentUtils.java +++ b/designer_base/src/com/fr/design/utils/ComponentUtils.java @@ -1,151 +1,154 @@ -package com.fr.design.utils; - -import com.fr.general.ComparatorUtils; - -import javax.swing.*; -import java.awt.*; -import java.awt.geom.Rectangle2D; -import java.util.ArrayList; - -/** - * 工具类,提供常用的工具方法 - */ -public class ComponentUtils { - - public static boolean isComponentVisible(Component comp) { - if (!comp.isVisible() && !isRootComponent(comp)) { - return false; - } - Component parent = comp.getParent(); - - return parent == null || isComponentVisible(parent); - - } - - /** - * 获取component所在的容器的绝对位置 - */ - public static Rectangle getRelativeBounds(Component component) { - Rectangle bounds = new Rectangle(0, 0, component.getWidth(), component.getHeight()); - Container parent = component.getParent(); - - while (parent != null) { - bounds.x += component.getX(); - bounds.y += component.getY(); - component = parent; - parent = component.getParent(); - } - - return bounds; - } - - /** - * 恢复双缓冲状态,dbcomponents保存着初始状态为启动双缓冲的组件 - */ - public static void resetBuffer(ArrayList dbcomponents) { - for (JComponent jcomponent : dbcomponents) { - jcomponent.setDoubleBuffered(true); - } - } - - /** - * 禁止双缓冲状态,并将初始状态为启动双缓冲的组件保存到dbcomponents中 - */ - public static void disableBuffer(Component comp, ArrayList dbcomponents) { - if ((comp instanceof JComponent) && comp.isDoubleBuffered()) { - JComponent jcomponent = (JComponent) comp; - - dbcomponents.add(jcomponent); - jcomponent.setDoubleBuffered(false); - } - - if (comp instanceof Container) { - Container container = (Container) comp; - int count = container.getComponentCount(); - - if (count > 0) { - for (int i = 0; i < count; i++) { - Component component = container.getComponent(i); - - disableBuffer(component, dbcomponents); - } - } - } - } - - public static int indexOfComponent(Container container, Component target) { - int count = container.getComponentCount(); - - for (int i = 0; i < count; i++) { - Component child = container.getComponent(i); - - if (child == target) { - return i; - } - } - - return -1; - } - - /** - * 计算组件root相对于其顶层容器的可见区域 - */ - public static Rectangle computeVisibleRectRel2Root(Component root) { - Container container = findAncestorScrollPane(root); - - if (container == null) { - return getRelativeBounds(root); - } else { - // 如果是JScrollPane的子组件,需要计算其viewport与改组件的交叉的可见区域 - return getBoundsRel2Parent(root, container); - } - } - - /** - * 计算组件root相对于其顶层容器的可见区域 - */ - public static Rectangle computeVisibleRect(JComponent root) { - Rectangle root_bounds = ComponentUtils.getRelativeBounds(root); - Rectangle rect = computeVisibleRectRel2Root(root); - rect.x -= root_bounds.x; - rect.y -= root_bounds.y; - - return rect; - } - - private static Rectangle getBoundsRel2Parent(Component child, Container parent) { - Rectangle cRect = getRelativeBounds(child); - Rectangle pRect = getRelativeBounds(parent); - Rectangle bounds = new Rectangle(); - Rectangle2D.intersect(cRect, pRect, bounds); - - return bounds; - } - - public static Container findAncestorScrollPane(Component p) { - if ((p == null) || !(p instanceof Container)) { - return null; - } - - Container c = p.getParent(); - - return findAncestorScrollPane(c); - } - - public static boolean isRootComponent(Component root) { - Container parent = root.getParent(); - return parent == null; - } - - public static boolean isChildOf(Component component, Class parent) { - Container container = component.getParent(); - if (container != null) { - if (ComparatorUtils.equals(container.getClass(), parent)) { - return true; - } else { - return isChildOf(container, parent); - } - } - return false; - } +package com.fr.design.utils; + +import com.fr.general.ComparatorUtils; + +import javax.swing.*; +import java.awt.*; +import java.awt.geom.Rectangle2D; +import java.util.ArrayList; + +/** + * 工具类,提供常用的工具方法 + */ +public class ComponentUtils { + + private ComponentUtils() { + } + + public static boolean isComponentVisible(Component comp) { + if (!comp.isVisible() && !isRootComponent(comp)) { + return false; + } + Component parent = comp.getParent(); + + return parent == null || isComponentVisible(parent); + + } + + /** + * 获取component所在的容器的绝对位置 + */ + public static Rectangle getRelativeBounds(Component component) { + Rectangle bounds = new Rectangle(0, 0, component.getWidth(), component.getHeight()); + Container parent = component.getParent(); + + while (parent != null) { + bounds.x += component.getX(); + bounds.y += component.getY(); + component = parent; + parent = component.getParent(); + } + + return bounds; + } + + /** + * 恢复双缓冲状态,dbcomponents保存着初始状态为启动双缓冲的组件 + */ + public static void resetBuffer(ArrayList dbcomponents) { + for (JComponent jcomponent : dbcomponents) { + jcomponent.setDoubleBuffered(true); + } + } + + /** + * 禁止双缓冲状态,并将初始状态为启动双缓冲的组件保存到dbcomponents中 + */ + public static void disableBuffer(Component comp, ArrayList dbcomponents) { + if ((comp instanceof JComponent) && comp.isDoubleBuffered()) { + JComponent jcomponent = (JComponent) comp; + + dbcomponents.add(jcomponent); + jcomponent.setDoubleBuffered(false); + } + + if (comp instanceof Container) { + Container container = (Container) comp; + int count = container.getComponentCount(); + + if (count > 0) { + for (int i = 0; i < count; i++) { + Component component = container.getComponent(i); + + disableBuffer(component, dbcomponents); + } + } + } + } + + public static int indexOfComponent(Container container, Component target) { + int count = container.getComponentCount(); + + for (int i = 0; i < count; i++) { + Component child = container.getComponent(i); + + if (child.equals(target)) { + return i; + } + } + + return -1; + } + + /** + * 计算组件root相对于其顶层容器的可见区域 + */ + public static Rectangle computeVisibleRectRel2Root(Component root) { + Container container = findAncestorScrollPane(root); + + if (container == null) { + return getRelativeBounds(root); + } else { + // 如果是JScrollPane的子组件,需要计算其viewport与改组件的交叉的可见区域 + return getBoundsRel2Parent(root, container); + } + } + + /** + * 计算组件root相对于其顶层容器的可见区域 + */ + public static Rectangle computeVisibleRect(JComponent root) { + Rectangle rootBounds = ComponentUtils.getRelativeBounds(root); + Rectangle rect = computeVisibleRectRel2Root(root); + rect.x -= rootBounds.x; + rect.y -= rootBounds.y; + + return rect; + } + + private static Rectangle getBoundsRel2Parent(Component child, Container parent) { + Rectangle cRect = getRelativeBounds(child); + Rectangle pRect = getRelativeBounds(parent); + Rectangle bounds = new Rectangle(); + Rectangle2D.intersect(cRect, pRect, bounds); + + return bounds; + } + + public static Container findAncestorScrollPane(Component p) { + if ((p == null) || !(p instanceof Container)) { + return null; + } + + Container c = p.getParent(); + + return findAncestorScrollPane(c); + } + + public static boolean isRootComponent(Component root) { + Container parent = root.getParent(); + return parent == null; + } + + public static boolean isChildOf(Component component, Class parent) { + Container container = component.getParent(); + if (container != null) { + if (ComparatorUtils.equals(container.getClass(), parent)) { + return true; + } else { + return isChildOf(container, parent); + } + } + return false; + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/LayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/LayoutAdapter.java index e814c7892..c087d78fe 100644 --- a/designer_form/src/com/fr/design/designer/beans/LayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/LayoutAdapter.java @@ -1,94 +1,94 @@ -package com.fr.design.designer.beans; - -import com.fr.design.beans.GroupModel; -import com.fr.design.designer.creator.XCreator; - -/** - * 该接口是LayoutManager的BeanInfo类。标准Java平台没有提供布局管理器的BeanInfo类, - * 对于界面设计工具来说还需一些特殊的行为。 - * - * @since 6.5.3 - */ -public interface LayoutAdapter { - - /** - * 在添加组件状态时,当鼠标移动到某个容器上方时,如果该容器有布局管理器,则会调用该布局 - * 管理适配器的accept来决定当前位置是否可以放置,并提供特殊的标识,比如红色区域标识。比 - * 如在BorderLayout中,如果某个方位已经放置了组件,则此时应该返回false标识该区域不可以 - * 放置。 - * - * @param creator 组件 - * @param x 添加的位置x,该位置是相对于container的 - * @param y 添加的位置y,该位置是相对于container的 - * @return 是否可以放置 - */ - boolean accept(XCreator creator, int x, int y); - - /** - * 有的控件在拖拽调整大小后需要根据自身内容重新计算下当前的尺寸是否合适,如果不合适,就需要重新fix一下 - * - * @param creator 组件 - */ - void fix(XCreator creator); - - /** - * 组件的ComponentAdapter在添加组件时,如果发现布局管理器不为空,会继而调用该布局管理器的 - * addComp方法来完成组件的具体添加。在该方法内,布局管理器可以提供额外的功能。 - * - * @param creator 被添加的新组件 - * @param x 添加的位置x,该位置是相对于container的 - * @param y 添加的位置y,该位置是相对于container的 - * @return 是否添加成功,成功返回true,否则false - */ - boolean addBean(XCreator creator, int x, int y); - - /** - * 返回该布局管理适配器的Painter,为容器提供放置位置的标识。 - */ - HoverPainter getPainter(); - - /** - * 显示parent的字组件child,解决CardLayout中显示某个非显示组件的特殊情况 - * - * @param child 组件 - */ - void showComponent(XCreator child); - - void addNextComponent(XCreator dragged); - - /** - * 组件叠放顺序前插入 - * - * @param target 目标组件 - * @param added 插入组件 - */ - void addBefore(XCreator target, XCreator added); - - /** - * 组件叠放顺序后插入 - * - * @param target 目标组件 - * @param added 放置组件 - */ - void addAfter(XCreator target, XCreator added); - - /** - * 能否放置更多组件 - * - * @return 能则返回true - */ - boolean canAcceptMoreComponent(); - - ConstraintsGroupModel getLayoutConstraints(XCreator creator); - - GroupModel getLayoutProperties(); - - /** - * 删除组件 - * - * @param creator 组件 - * @param initWidth 组件之前宽度 - * @param initHeight 组件之前高度 - */ - void removeBean(XCreator creator, int initWidth, int initHeight); +package com.fr.design.designer.beans; + +import com.fr.design.beans.GroupModel; +import com.fr.design.designer.creator.XCreator; + +/** + * 该接口是LayoutManager的BeanInfo类。标准Java平台没有提供布局管理器的BeanInfo类, + * 对于界面设计工具来说还需一些特殊的行为。 + * + * @since 6.5.3 + */ +public interface LayoutAdapter { + + /** + * 在添加组件状态时,当鼠标移动到某个容器上方时,如果该容器有布局管理器,则会调用该布局 + * 管理适配器的accept来决定当前位置是否可以放置,并提供特殊的标识,比如红色区域标识。比 + * 如在BorderLayout中,如果某个方位已经放置了组件,则此时应该返回false标识该区域不可以 + * 放置。 + * + * @param creator 组件 + * @param x 添加的位置x,该位置是相对于container的 + * @param y 添加的位置y,该位置是相对于container的 + * @return 是否可以放置 + */ + boolean accept(XCreator creator, int x, int y); + + /** + * 有的控件在拖拽调整大小后需要根据自身内容重新计算下当前的尺寸是否合适,如果不合适,就需要重新fix一下 + * + * @param creator 组件 + */ + void fix(XCreator creator); + + /** + * 组件的ComponentAdapter在添加组件时,如果发现布局管理器不为空,会继而调用该布局管理器的 + * addComp方法来完成组件的具体添加。在该方法内,布局管理器可以提供额外的功能。 + * + * @param creator 被添加的新组件 + * @param x 添加的位置x,该位置是相对于container的 + * @param y 添加的位置y,该位置是相对于container的 + * @return 是否添加成功,成功返回true,否则false + */ + boolean addBean(XCreator creator, int x, int y); + + /** + * 返回该布局管理适配器的Painter,为容器提供放置位置的标识。 + */ + HoverPainter getPainter(); + + /** + * 显示parent的字组件child,解决CardLayout中显示某个非显示组件的特殊情况 + * + * @param child 组件 + */ + void showComponent(XCreator child); + + void addNextComponent(XCreator dragged); + + /** + * 组件叠放顺序前插入 + * + * @param target 目标组件 + * @param added 插入组件 + */ + void addBefore(XCreator target, XCreator added); + + /** + * 组件叠放顺序后插入 + * + * @param target 目标组件 + * @param added 放置组件 + */ + void addAfter(XCreator target, XCreator added); + + /** + * 能否放置更多组件 + * + * @return 能则返回true + */ + boolean canAcceptMoreComponent(); + + ConstraintsGroupModel getLayoutConstraints(XCreator creator); + + GroupModel getLayoutProperties(); + + /** + * 删除组件 + * + * @param creator 组件 + * @param initWidth 组件之前宽度 + * @param initHeight 组件之前高度 + */ + void removeBean(XCreator creator, int initWidth, int initHeight); } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/actions/CopyAction.java b/designer_form/src/com/fr/design/designer/beans/actions/CopyAction.java index de36cde9b..23686f651 100644 --- a/designer_form/src/com/fr/design/designer/beans/actions/CopyAction.java +++ b/designer_form/src/com/fr/design/designer/beans/actions/CopyAction.java @@ -1,31 +1,30 @@ -package com.fr.design.designer.beans.actions; - -import java.awt.event.InputEvent; -import java.awt.event.KeyEvent; - -import javax.swing.KeyStroke; - -import com.fr.base.BaseUtils; -import com.fr.general.Inter; -import com.fr.design.mainframe.FormDesigner; - -public class CopyAction extends FormEditAction { - - public CopyAction(FormDesigner t) { - super(t); - this.setName(Inter.getLocText("M_Edit-Copy")); - this.setMnemonic('C'); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_edit/copy.png")); - this.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK)); - } - - @Override - public boolean executeActionReturnUndoRecordNeeded() { - FormDesigner tc = getEditingComponent(); - if (tc != null) { - tc.copy(); - } - return false; - } - +package com.fr.design.designer.beans.actions; + +import com.fr.base.BaseUtils; +import com.fr.design.mainframe.FormDesigner; +import com.fr.general.Inter; + +import javax.swing.*; +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; + +public class CopyAction extends FormEditAction { + + public CopyAction(FormDesigner t) { + super(t); + this.setName(Inter.getLocText("M_Edit-Copy")); + this.setMnemonic('C'); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_edit/copy.png")); + this.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK)); + } + + @Override + public boolean executeActionReturnUndoRecordNeeded() { + FormDesigner tc = getEditingComponent(); + if (tc != null) { + tc.copy(); + } + return false; + } + } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/AbstractLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/AbstractLayoutAdapter.java index 54d6abab4..493dd02aa 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/AbstractLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/AbstractLayoutAdapter.java @@ -1,189 +1,189 @@ -package com.fr.design.designer.beans.adapters.layout; - -import java.awt.LayoutManager; - -import com.fr.general.ComparatorUtils; -import com.fr.design.beans.GroupModel; -import com.fr.design.designer.beans.ConstraintsGroupModel; -import com.fr.design.designer.beans.HoverPainter; -import com.fr.design.designer.beans.LayoutAdapter; -import com.fr.design.designer.beans.painters.NullPainter; -import com.fr.design.designer.creator.XCreator; -import com.fr.design.designer.creator.XLayoutContainer; -import com.fr.design.designer.creator.XWidgetCreator; -import com.fr.design.utils.ComponentUtils; -import com.fr.design.utils.gui.LayoutUtils; - -public abstract class AbstractLayoutAdapter implements LayoutAdapter { - - protected XLayoutContainer container; - protected LayoutManager layout; - - public AbstractLayoutAdapter(XLayoutContainer container) { - this.container = container; - this.layout = container.getLayout(); - } - - /** - * 是否使用控件备份大小 - * - * @param xCreator 控件 - * @return 所在容器相同,且支持备份的话返回true - */ - public boolean whetherUseBackupSize(XCreator xCreator) { - Class clazz = container.getClass(); - Class bkClazz = null; - if (xCreator.getBackupParent() != null) { - bkClazz = xCreator.getBackupParent().getClass(); - } - return ComparatorUtils.equals(bkClazz, clazz) - && supportBackupSize(); - } - - /** - * 是否支持用备份大小 - * - * @return 否 - */ - public boolean supportBackupSize() { - return false; - } - - /** - * 有的控件在拖拽调整大小后需要根据自身内容重新计算下当前的尺寸是否合适,如果不合适,就需要重新fix一下 - * - * @param creator 组件 - */ - public void fix(XCreator creator) { - } - - /** - * 显示parent的字组件child,解决CardLayout中显示某个非显示组件的特殊情况 - * - * @param child 组件 - */ - @Override - public void showComponent(XCreator child) { - child.setVisible(true); - } - - /** - * 组件的ComponentAdapter在添加组件时,如果发现布局管理器不为空,会继而调用该布局管理器的 - * addComp方法来完成组件的具体添加。在该方法内,布局管理器可以提供额外的功能。 - * - * @param creator 被添加的新组件 - * @param x 添加的位置x,该位置是相对于container的 - * @param y 添加的位置y,该位置是相对于container的 - * @return 是否添加成功,成功返回true,否则false - */ - @Override - public boolean addBean(XCreator creator, int x, int y) { - if (!accept(creator, x, y)) { - return false; - } - addComp(creator, x, y); - ((XWidgetCreator) creator).recalculateChildrenSize(); - return true; - } - - /** - * 删除组件 - * - * @param creator 组件 - * @param creatorWidth - * @param creatorHeight - */ - public void removeBean(XCreator creator, int creatorWidth, int creatorHeight) { - delete(creator, creatorWidth, creatorHeight); - } - - protected void delete(XCreator creator, int creatorWidth, int creatorHeight) { - } - - protected abstract void addComp(XCreator creator, int x, int y); - - /** - * 增加下一个组件 - * - * @param dragged 组件 - */ - @Override - public void addNextComponent(XCreator dragged) { - container.add(dragged); - LayoutUtils.layoutRootContainer(container); - } - - /** - * 目标控件位置插入组件 - * - * @param target 目标 - * @param added 增加组件 - */ - @Override - public void addBefore(XCreator target, XCreator added) { - int index = ComponentUtils.indexOfComponent(container, target); - - if (index == -1) { - container.add(added, 0); - } else { - container.add(added, index); - } - - LayoutUtils.layoutRootContainer(container); - } - - /** - * 插在目标组件后面 - * - * @param target 目标 - * @param added 增加组件 - */ - @Override - public void addAfter(XCreator target, XCreator added) { - int index = ComponentUtils.indexOfComponent(container, target); - - if (index == -1) { - container.add(added); - } else { - index++; - - if (index >= container.getComponentCount()) { - container.add(added); - } else { - container.add(added, index); - } - } - - LayoutUtils.layoutRootContainer(container); - } - - @Override - public HoverPainter getPainter() { - return new NullPainter(container); - } - - /** - * 是否能接收更多的组件 - * - * @return 能则返回true - */ - @Override - public boolean canAcceptMoreComponent() { - return true; - } - - @Override - public ConstraintsGroupModel getLayoutConstraints(XCreator creator) { - return null; - } - - @Override - public GroupModel getLayoutProperties() { - return null; - } - - - public XLayoutContainer getContainer() { - return this.container; - } +package com.fr.design.designer.beans.adapters.layout; + +import com.fr.design.beans.GroupModel; +import com.fr.design.designer.beans.ConstraintsGroupModel; +import com.fr.design.designer.beans.HoverPainter; +import com.fr.design.designer.beans.LayoutAdapter; +import com.fr.design.designer.beans.painters.NullPainter; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XLayoutContainer; +import com.fr.design.designer.creator.XWidgetCreator; +import com.fr.design.utils.ComponentUtils; +import com.fr.design.utils.gui.LayoutUtils; +import com.fr.general.ComparatorUtils; + +import java.awt.*; + +public abstract class AbstractLayoutAdapter implements LayoutAdapter { + + protected XLayoutContainer container; + protected LayoutManager layout; + + public AbstractLayoutAdapter(XLayoutContainer container) { + this.container = container; + this.layout = container.getLayout(); + } + + /** + * 是否使用控件备份大小 + * + * @param xCreator 控件 + * @return 所在容器相同,且支持备份的话返回true + */ + public boolean whetherUseBackupSize(XCreator xCreator) { + Class clazz = container.getClass(); + Class bkClazz = null; + if (xCreator.getBackupParent() != null) { + bkClazz = xCreator.getBackupParent().getClass(); + } + return ComparatorUtils.equals(bkClazz, clazz) + && supportBackupSize(); + } + + /** + * 是否支持用备份大小 + * + * @return 否 + */ + public boolean supportBackupSize() { + return false; + } + + /** + * 有的控件在拖拽调整大小后需要根据自身内容重新计算下当前的尺寸是否合适,如果不合适,就需要重新fix一下 + * + * @param creator 组件 + */ + public void fix(XCreator creator) { + } + + /** + * 显示parent的字组件child,解决CardLayout中显示某个非显示组件的特殊情况 + * + * @param child 组件 + */ + @Override + public void showComponent(XCreator child) { + child.setVisible(true); + } + + /** + * 组件的ComponentAdapter在添加组件时,如果发现布局管理器不为空,会继而调用该布局管理器的 + * addComp方法来完成组件的具体添加。在该方法内,布局管理器可以提供额外的功能。 + * + * @param creator 被添加的新组件 + * @param x 添加的位置x,该位置是相对于container的 + * @param y 添加的位置y,该位置是相对于container的 + * @return 是否添加成功,成功返回true,否则false + */ + @Override + public boolean addBean(XCreator creator, int x, int y) { + if (!accept(creator, x, y)) { + return false; + } + addComp(creator, x, y); + ((XWidgetCreator) creator).recalculateChildrenSize(); + return true; + } + + /** + * 删除组件 + * + * @param creator 组件 + * @param creatorWidth + * @param creatorHeight + */ + public void removeBean(XCreator creator, int creatorWidth, int creatorHeight) { + delete(creator, creatorWidth, creatorHeight); + } + + protected void delete(XCreator creator, int creatorWidth, int creatorHeight) { + } + + protected abstract void addComp(XCreator creator, int x, int y); + + /** + * 增加下一个组件 + * + * @param dragged 组件 + */ + @Override + public void addNextComponent(XCreator dragged) { + container.add(dragged); + LayoutUtils.layoutRootContainer(container); + } + + /** + * 目标控件位置插入组件 + * + * @param target 目标 + * @param added 增加组件 + */ + @Override + public void addBefore(XCreator target, XCreator added) { + int index = ComponentUtils.indexOfComponent(container, target); + + if (index == -1) { + container.add(added, 0); + } else { + container.add(added, index); + } + + LayoutUtils.layoutRootContainer(container); + } + + /** + * 插在目标组件后面 + * + * @param target 目标 + * @param added 增加组件 + */ + @Override + public void addAfter(XCreator target, XCreator added) { + int index = ComponentUtils.indexOfComponent(container, target); + + if (index == -1) { + container.add(added); + } else { + index++; + + if (index >= container.getComponentCount()) { + container.add(added); + } else { + container.add(added, index); + } + } + + LayoutUtils.layoutRootContainer(container); + } + + @Override + public HoverPainter getPainter() { + return new NullPainter(container); + } + + /** + * 是否能接收更多的组件 + * + * @return 能则返回true + */ + @Override + public boolean canAcceptMoreComponent() { + return true; + } + + @Override + public ConstraintsGroupModel getLayoutConstraints(XCreator creator) { + return null; + } + + @Override + public GroupModel getLayoutProperties() { + return null; + } + + + public XLayoutContainer getContainer() { + return this.container; + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java index 58c07b045..b8a8e8ad1 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java @@ -1,363 +1,349 @@ -package com.fr.design.designer.beans.adapters.layout; - -import java.awt.*; - -import com.fr.design.beans.GroupModel; -import com.fr.design.designer.beans.ConstraintsGroupModel; -import com.fr.design.designer.beans.HoverPainter; -import com.fr.design.designer.beans.painters.FRAbsoluteLayoutPainter; -import com.fr.design.designer.creator.*; -import com.fr.design.designer.properties.BoundsGroupModel; -import com.fr.design.designer.properties.FRAbsoluteLayoutPropertiesGroupModel; -import com.fr.form.ui.container.WAbsoluteLayout; -import com.fr.design.utils.ComponentUtils; -import com.fr.design.utils.gui.LayoutUtils; -import com.fr.form.ui.widget.BoundsWidget; -import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; - -public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { - //是不是添加到父容器上 - private boolean isAdd2ParentLayout = false; - private HoverPainter painter; - - public FRAbsoluteLayoutAdapter(XLayoutContainer container) { - super(container); - painter = new FRAbsoluteLayoutPainter(container); - initMinSize(); - } - - private void initMinSize() { - XWAbsoluteLayout layout = (XWAbsoluteLayout) container; - minWidth = layout.getActualMinWidth(); - minHeight = layout.getActualMinHeight(); - actualVal = layout.getAcualInterval(); - margin = layout.toData().getMargin(); - } - - @Override - public HoverPainter getPainter() { - return painter; - } - - /** - * 是否能在指定位置添加组件 - * - * @param creator 组件 - * @param x 坐标x - * @param y 坐标y - * @return 能则返回true - */ - //这个地方的逻辑非常复杂, - // 1.当前绝对布局是不可编辑且是最外层,那么其他控件添加在它周围, - // 2.当前绝对布局是不可编辑且不是最外层,那么控件不可添加,(嵌套) - // 3.当前绝对布局可编辑,那么控件添加 - @Override - public boolean accept(XCreator creator, int x, int y) { - Component comp = container.getComponentAt(x, y); - //布局控件要先判断是不是可编辑 - //可以编辑,按原有逻辑判断 - //不可编辑,当成一整个控件处理 - if (comp == null) { - return false; - } - //参数面板内的组件不允许拖往绝对布局中 - if (creator.getParent() != null && ((XCreator) creator.getParent()).acceptType(XWParameterLayout.class)) { - Rectangle rec = creator.getBounds(); - rec.y = creator.getParent().getHeight() - rec.height; - creator.setBounds(rec); - return false; - } - //判断组件能不能拖入绝对布局 - if (!creator.canEnterIntoAbsolutePane()) { - return false; - } - XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer((XCreator) comp).getTopLayout(); - if (topLayout != null) { - if (topLayout.isEditable()) { - return topLayoutAccept(creator, x, y, topLayout); - } - //绝对布局嵌套,处于内层,不可编辑,不添加,topLayout只能获取到最外层可编辑的布局 - else if (((XLayoutContainer) topLayout.getParent()).acceptType(XWAbsoluteLayout.class)) { - return false; - } else { - return acceptWidget(creator, x, y); - } - } else { - FRLogger.getLogger().error("top layout is null!"); - } - - return false; - } - - //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); - creatorX = creatorRectangle.x; - creatorY = creatorRectangle.y; - } else { - //这边计算得到的组件其实位置是正确的, - //因为传入的x和y已经加上了宽度或者高度的一半,再减去相同的宽度和高度的一半是没区别的, - // 例如高度为21,那么就是+10-10; - // 高度为20,那么就是+10-10; 没区别 - int w = creator.getWidth() / 2; - int h = creator.getHeight() / 2; - creatorX = x - w; - creatorY = y - h; - } - //frm 组件复用允许组件重叠 - //无须再判断和布局中其他控件重叠 - //Rectangle curRec = new Rectangle(creatorX, creatorY, creator.getWidth(), creator.getHeight()); - //WAbsoluteLayout wAbsoluteLayout = (WAbsoluteLayout) topLayout.toData(); - //for (int i = 0, count = wAbsoluteLayout.getWidgetCount(); i < count; i++) { - //BoundsWidget temp = (BoundsWidget) wAbsoluteLayout.getWidget(i); - //Rectangle rectangle = temp.getBounds(); - //if (curRec.intersects(rectangle)) { - //允许组件重叠 - //return false; - //} - //} - if (creatorX < 0 || creatorX + creator.getWidth() > container.getWidth()) { - return false; - } - if (creatorY < 0 || creatorY + creator.getHeight() > container.getHeight()) { - return false; - } - return x >= 0 && y >= 0 && creator.getHeight() <= container.getHeight() - && creator.getWidth() <= container.getWidth(); - } - - /** - * 判断是否鼠标在组件的三等分区域,如果组件在布局管理器中间,上下左右都可能会三等分 - * - * @param parentComp 鼠标所在区域的组件 - * @param x 坐标x - * @param y 坐标y - * @return 是则返回true - */ - public boolean isTrisectionArea(Component parentComp, int x, int y) { - XCreator creator = (XCreator) parentComp; - trisectAreaDirect = 0; - if (container.getComponentCount() <= 1) { - return false; - } - int maxWidth = parentComp.getWidth(); - int maxHeight = parentComp.getHeight(); - int xL = parentComp.getX(); - int yL = parentComp.getY(); - // 组件宽高的十分之一和默认值取大 - int minRangeWidth = Math.max(maxWidth / BORDER_PROPORTION, DEFAULT_AREA_LENGTH); - int minRangeHeight = Math.max(maxHeight / BORDER_PROPORTION, DEFAULT_AREA_LENGTH); - if (y < yL + minRangeHeight) { - // 在组件上侧三等分 - trisectAreaDirect = COMP_TOP; - } else if (y > yL + maxHeight - minRangeHeight) { - // 在组件下侧三等分 - trisectAreaDirect = COMP_BOTTOM; - } else if (x < xL + minRangeWidth) { - // 在组件左侧三等分 - trisectAreaDirect = COMP_LEFT; - } else if (x > xL + maxWidth - minRangeWidth) { - // 在组件右侧三等分 - trisectAreaDirect = COMP_RIGHT; - } - // tab布局的边界特殊处理,不进行三等分 - if (!creator.getTargetChildrenList().isEmpty()) { - return false; - } - - return !ComparatorUtils.equals(trisectAreaDirect, 0); - } - - //当前绝对布局不可编辑,就当成一个控件,组件添加在周围 - private boolean acceptWidget(XCreator creator, int x, int y) { - isFindRelatedComps = false; - //拖入组件判断时,先判断是否为交叉点区域,其次三等分区域,再次平分区域 - Component comp = container.getComponentAt(x, y); - boolean isMatchEdge = false; - //如果当前处于边缘地带, 那么就把他贴到父容器上 - XLayoutContainer parent = container.findNearestFit(); - container = parent != null ? parent : container; - isAdd2ParentLayout = true; - - int componentHeight = comp.getHeight(); - int componentWidth = comp.getWidth(); - //上半部分高度 - int upHeight = (int) (componentHeight * TOP_HALF) + comp.getY(); - //下半部分高度 - int downHeight = (int) (componentHeight * BOTTOM_HALF) + comp.getY(); - - if (isCrossPointArea(comp, x, y)) { - return canAcceptWhileCrossPoint(comp, x, y); - } - - if (isTrisectionArea(comp, x, y)) { - return canAcceptWhileTrisection(comp, x, y); - } - - boolean horizonValid = componentWidth >= minWidth * 2 + actualVal; - boolean verticalValid = componentHeight >= minHeight * 2 + actualVal; - return y > upHeight && y < downHeight ? horizonValid : verticalValid; - } - - /** - * 组件的ComponentAdapter在添加组件时,如果发现布局管理器不为空,会继而调用该布局管理器的 - * addComp方法来完成组件的具体添加。在该方法内,布局管理器可以提供额外的功能。 - * - * @param creator 被添加的新组件 - * @param x 添加的位置x,该位置是相对于container的 - * @param y 添加的位置y,该位置是相对于container的 - * @return 是否添加成功,成功返回true,否则false - */ - @Override - public boolean addBean(XCreator creator, int x, int y) { - Rectangle rect = ComponentUtils.getRelativeBounds(container); - - int posX = x + rect.x; - int posY = y + rect.y; - if (!accept(creator, x, y)) { - return false; - } - addComp(creator, posX, posY); - ((XWidgetCreator) creator).recalculateChildrenSize(); - return true; - } - - @Override - protected void addComp(XCreator creator, int x, int y) { - if (!isAdd2ParentLayout) { - Rectangle r = ComponentUtils.getRelativeBounds(container); - x = x - r.x; - y = y - r.y; - if (XCreatorUtils.getParentXLayoutContainer(creator) != null) { - - Rectangle creatorRectangle = ComponentUtils.getRelativeBounds(creator); - x = creatorRectangle.x - r.x; - y = creatorRectangle.y - r.y; - } else { - int w = creator.getWidth() / 2; - int h = creator.getHeight() / 2; - x = x - w; - y = y - h; - } - fix(creator, x, y); - - if (creator.hasTitleStyle()) { - addParentCreator(creator); - } else { - container.add(creator, creator.toData().getWidgetName()); - } - XWAbsoluteLayout layout = (XWAbsoluteLayout) container; - layout.updateBoundsWidget(creator); - updateCreatorBackBound(); - LayoutUtils.layoutRootContainer(container); - } else { - fixAbsolute(creator, x, y); - if (creator.shouldScaleCreator() || creator.hasTitleStyle()) { - addParentCreator(creator); - } else { - container.add(creator, creator.toData().getWidgetName()); - } - XWFitLayout layout = (XWFitLayout) container; - // 更新对应的BoundsWidget - layout.updateBoundsWidget(); - updateCreatorBackBound(); - } - } - - private void updateCreatorBackBound() { - for (int i = 0, size = container.getComponentCount(); i < size; i++) { - XCreator creator = (XCreator) container.getComponent(i); - creator.updateChildBound(minHeight); - creator.setBackupBound(creator.getBounds()); - } - } - - private void addParentCreator(XCreator child) { - XLayoutContainer parentPanel = child.initCreatorWrapper(child.getHeight()); - container.add(parentPanel, child.toData().getWidgetName()); - } - - /** - * 新拖入组件时,计算调整其他关联组件位置大小 - * - * @param child 新拖入的组件 - * @param x 鼠标所在x坐标 - * @param y 鼠标所在y坐标 - */ - 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()); - } else if (isCrossPointArea(parentComp, x, y)) { - //交叉区域插入组件时,根据具体位置进行上下或者左右或者相邻三个组件的位置大小插入 - fixCrossPointArea(parentComp, child, x, y); - //TODO 尽量不要出现这种写法吧?if else条件要么互斥,要么多个if判断return,不要在一条if else语句里面return吧? - return; - } else if (isTrisectionArea(parentComp, x, y)) { - // 在边界三等分区域,就不再和组件二等分了 - fixTrisect(parentComp, child, x, y); - return; - } else { - fixHalve(parentComp, child, x, y); - } - } - - /** - * 组件拖拽后调整大小 - * - * @param creator 组件 - */ - @Override - public void fix(XCreator creator) { - WAbsoluteLayout wabs = (WAbsoluteLayout) container.toData(); - fix(creator, creator.getX(), creator.getY()); - wabs.setBounds(creator.toData(), creator.getBounds()); - - XWAbsoluteLayout layout = (XWAbsoluteLayout) container; - layout.updateBoundsWidget(creator); - } - - /** - * 调整组件大小到合适尺寸位置 - * - * @param creator 组件 - * @param x 坐标x - * @param y 坐标y - */ - public void fix(XCreator creator, int x, int y) { - int height = creator.getHeight(); - int width = creator.getWidth(); - if (x < 0) { - width += x; - x = 0; - } else if (x + creator.getWidth() > container.getWidth()) { - width = container.getWidth() - x; - } - - if (y < 0) { - height += y; - y = 0; - } else if (y + creator.getHeight() > container.getHeight()) { - height = container.getHeight() - y; - } - - creator.setBounds(x, y, width, height); - } - - @Override - public ConstraintsGroupModel getLayoutConstraints(XCreator creator) { - return new BoundsGroupModel((XWAbsoluteLayout) container, creator); - } - - @Override - public GroupModel getLayoutProperties() { - XWAbsoluteLayout xwAbsoluteLayout = (XWAbsoluteLayout) container; - return new FRAbsoluteLayoutPropertiesGroupModel(xwAbsoluteLayout); - } +package com.fr.design.designer.beans.adapters.layout; + +import com.fr.design.beans.GroupModel; +import com.fr.design.designer.beans.ConstraintsGroupModel; +import com.fr.design.designer.beans.HoverPainter; +import com.fr.design.designer.beans.painters.FRAbsoluteLayoutPainter; +import com.fr.design.designer.creator.*; +import com.fr.design.designer.properties.BoundsGroupModel; +import com.fr.design.designer.properties.FRAbsoluteLayoutPropertiesGroupModel; +import com.fr.design.utils.ComponentUtils; +import com.fr.design.utils.gui.LayoutUtils; +import com.fr.form.ui.container.WAbsoluteLayout; +import com.fr.general.ComparatorUtils; +import com.fr.general.FRLogger; + +import java.awt.*; + +public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { + //是不是添加到父容器上 + private boolean isAdd2ParentLayout = false; + private HoverPainter painter; + + public FRAbsoluteLayoutAdapter(XLayoutContainer container) { + super(container); + painter = new FRAbsoluteLayoutPainter(container); + initMinSize(); + } + + private void initMinSize() { + XWAbsoluteLayout layout = (XWAbsoluteLayout) container; + minWidth = layout.getActualMinWidth(); + minHeight = layout.getActualMinHeight(); + actualVal = layout.getAcualInterval(); + margin = layout.toData().getMargin(); + } + + @Override + public HoverPainter getPainter() { + return painter; + } + + /** + * 是否能在指定位置添加组件 + * + * @param creator 组件 + * @param x 坐标x + * @param y 坐标y + * @return 能则返回true + */ + //这个地方的逻辑非常复杂, + // 1.当前绝对布局是不可编辑且是最外层,那么其他控件添加在它周围, + // 2.当前绝对布局是不可编辑且不是最外层,那么控件不可添加,(嵌套) + // 3.当前绝对布局可编辑,那么控件添加 + @Override + public boolean accept(XCreator creator, int x, int y) { + Component comp = container.getComponentAt(x, y); + //布局控件要先判断是不是可编辑 + //可以编辑,按原有逻辑判断 + //不可编辑,当成一整个控件处理 + if (comp == null) { + return false; + } + //参数面板内的组件不允许拖往绝对布局中 + if (creator.getParent() != null && ((XCreator) creator.getParent()).acceptType(XWParameterLayout.class)) { + Rectangle rec = creator.getBounds(); + rec.y = creator.getParent().getHeight() - rec.height; + creator.setBounds(rec); + return false; + } + //判断组件能不能拖入绝对布局 + if (!creator.canEnterIntoAbsolutePane()) { + return false; + } + XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer((XCreator) comp).getTopLayout(); + if (topLayout != null) { + if (topLayout.isEditable()) { + return topLayoutAccept(creator, x, y); + } + //绝对布局嵌套,处于内层,不可编辑,不添加,topLayout只能获取到最外层可编辑的布局 + else if (((XLayoutContainer) topLayout.getParent()).acceptType(XWAbsoluteLayout.class)) { + return false; + } else { + return acceptWidget(x, y); + } + } else { + FRLogger.getLogger().error("top layout is null!"); + } + + return false; + } + + //topLayout假如可以编辑的话就往里面添加组件 + private boolean topLayoutAccept(XCreator creator, int x, int y) { + //允许组件重叠,可以不判断有没有和当前控件重叠 + //先计算当前控件的位置 + int creatorX, creatorY; + if (XCreatorUtils.getParentXLayoutContainer(creator) != null) { + Rectangle creatorRectangle = ComponentUtils.getRelativeBounds(creator); + creatorX = creatorRectangle.x; + creatorY = creatorRectangle.y; + } else { + //这边计算得到的组件其实位置是正确的, + //因为传入的x和y已经加上了宽度或者高度的一半,再减去相同的宽度和高度的一半是没区别的, + // 例如高度为21,那么就是+10-10; + // 高度为20,那么就是+10-10; 没区别 + int w = creator.getWidth() / 2; + int h = creator.getHeight() / 2; + creatorX = x - w; + creatorY = y - h; + } + if (creatorX < 0 || creatorX + creator.getWidth() > container.getWidth()) { + return false; + } + if (creatorY < 0 || creatorY + creator.getHeight() > container.getHeight()) { + return false; + } + return x >= 0 && y >= 0 && creator.getHeight() <= container.getHeight() + && creator.getWidth() <= container.getWidth(); + } + + /** + * 判断是否鼠标在组件的三等分区域,如果组件在布局管理器中间,上下左右都可能会三等分 + * + * @param parentComp 鼠标所在区域的组件 + * @param x 坐标x + * @param y 坐标y + * @return 是则返回true + */ + public boolean isTrisectionArea(Component parentComp, int x, int y) { + XCreator creator = (XCreator) parentComp; + trisectAreaDirect = 0; + if (container.getComponentCount() <= 1) { + return false; + } + int maxWidth = parentComp.getWidth(); + int maxHeight = parentComp.getHeight(); + int xL = parentComp.getX(); + int yL = parentComp.getY(); + // 组件宽高的十分之一和默认值取大 + int minRangeWidth = Math.max(maxWidth / BORDER_PROPORTION, DEFAULT_AREA_LENGTH); + int minRangeHeight = Math.max(maxHeight / BORDER_PROPORTION, DEFAULT_AREA_LENGTH); + if (y < yL + minRangeHeight) { + // 在组件上侧三等分 + trisectAreaDirect = COMP_TOP; + } else if (y > yL + maxHeight - minRangeHeight) { + // 在组件下侧三等分 + trisectAreaDirect = COMP_BOTTOM; + } else if (x < xL + minRangeWidth) { + // 在组件左侧三等分 + trisectAreaDirect = COMP_LEFT; + } else if (x > xL + maxWidth - minRangeWidth) { + // 在组件右侧三等分 + trisectAreaDirect = COMP_RIGHT; + } + // tab布局的边界特殊处理,不进行三等分 + if (!creator.getTargetChildrenList().isEmpty()) { + return false; + } + + return !ComparatorUtils.equals(trisectAreaDirect, 0); + } + + //当前绝对布局不可编辑,就当成一个控件,组件添加在周围 + private boolean acceptWidget(int x, int y) { + isFindRelatedComps = false; + //拖入组件判断时,先判断是否为交叉点区域,其次三等分区域,再次平分区域 + Component comp = container.getComponentAt(x, y); + //如果当前处于边缘地带, 那么就把他贴到父容器上 + XLayoutContainer parent = container.findNearestFit(); + container = parent != null ? parent : container; + isAdd2ParentLayout = true; + + int componentHeight = comp.getHeight(); + int componentWidth = comp.getWidth(); + //上半部分高度 + int upHeight = (int) (componentHeight * TOP_HALF) + comp.getY(); + //下半部分高度 + int downHeight = (int) (componentHeight * BOTTOM_HALF) + comp.getY(); + + if (isCrossPointArea(comp, x, y)) { + return canAcceptWhileCrossPoint(comp, x, y); + } + + if (isTrisectionArea(comp, x, y)) { + return canAcceptWhileTrisection(comp, x, y); + } + + boolean horizonValid = componentWidth >= minWidth * 2 + actualVal; + boolean verticalValid = componentHeight >= minHeight * 2 + actualVal; + return y > upHeight && y < downHeight ? horizonValid : verticalValid; + } + + /** + * 组件的ComponentAdapter在添加组件时,如果发现布局管理器不为空,会继而调用该布局管理器的 + * addComp方法来完成组件的具体添加。在该方法内,布局管理器可以提供额外的功能。 + * + * @param creator 被添加的新组件 + * @param x 添加的位置x,该位置是相对于container的 + * @param y 添加的位置y,该位置是相对于container的 + * @return 是否添加成功,成功返回true,否则false + */ + @Override + public boolean addBean(XCreator creator, int x, int y) { + Rectangle rect = ComponentUtils.getRelativeBounds(container); + + int posX = x + rect.x; + int posY = y + rect.y; + if (!accept(creator, x, y)) { + return false; + } + addComp(creator, posX, posY); + ((XWidgetCreator) creator).recalculateChildrenSize(); + return true; + } + + @Override + protected void addComp(XCreator creator, int x, int y) { + if (!isAdd2ParentLayout) { + Rectangle r = ComponentUtils.getRelativeBounds(container); + x = x - r.x; + y = y - r.y; + if (XCreatorUtils.getParentXLayoutContainer(creator) != null) { + + Rectangle creatorRectangle = ComponentUtils.getRelativeBounds(creator); + x = creatorRectangle.x - r.x; + y = creatorRectangle.y - r.y; + } else { + int w = creator.getWidth() / 2; + int h = creator.getHeight() / 2; + x = x - w; + y = y - h; + } + fix(creator, x, y); + + if (creator.hasTitleStyle()) { + addParentCreator(creator); + } else { + container.add(creator, creator.toData().getWidgetName()); + } + XWAbsoluteLayout layout = (XWAbsoluteLayout) container; + layout.updateBoundsWidget(creator); + updateCreatorBackBound(); + LayoutUtils.layoutRootContainer(container); + } else { + fixAbsolute(creator, x, y); + if (creator.shouldScaleCreator() || creator.hasTitleStyle()) { + addParentCreator(creator); + } else { + container.add(creator, creator.toData().getWidgetName()); + } + XWFitLayout layout = (XWFitLayout) container; + // 更新对应的BoundsWidget + layout.updateBoundsWidget(); + updateCreatorBackBound(); + } + } + + private void updateCreatorBackBound() { + for (int i = 0, size = container.getComponentCount(); i < size; i++) { + XCreator creator = (XCreator) container.getComponent(i); + creator.updateChildBound(minHeight); + creator.setBackupBound(creator.getBounds()); + } + } + + private void addParentCreator(XCreator child) { + XLayoutContainer parentPanel = child.initCreatorWrapper(child.getHeight()); + container.add(parentPanel, child.toData().getWidgetName()); + } + + /** + * 新拖入组件时,计算调整其他关联组件位置大小 + * + * @param child 新拖入的组件 + * @param x 鼠标所在x坐标 + * @param y 鼠标所在y坐标 + */ + 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()); + } else if (isCrossPointArea(parentComp, x, y)) { + //交叉区域插入组件时,根据具体位置进行上下或者左右或者相邻三个组件的位置大小插入 + fixCrossPointArea(parentComp, child, x, y); + //TODO 尽量不要出现这种写法吧?if else条件要么互斥,要么多个if判断return,不要在一条if else语句里面return吧? + return; + } else if (isTrisectionArea(parentComp, x, y)) { + // 在边界三等分区域,就不再和组件二等分了 + fixTrisect(parentComp, child, x, y); + return; + } else { + fixHalve(parentComp, child, x, y); + } + } + + /** + * 组件拖拽后调整大小 + * + * @param creator 组件 + */ + @Override + public void fix(XCreator creator) { + WAbsoluteLayout wabs = (WAbsoluteLayout) container.toData(); + fix(creator, creator.getX(), creator.getY()); + wabs.setBounds(creator.toData(), creator.getBounds()); + + XWAbsoluteLayout layout = (XWAbsoluteLayout) container; + layout.updateBoundsWidget(creator); + } + + /** + * 调整组件大小到合适尺寸位置 + * + * @param creator 组件 + * @param x 坐标x + * @param y 坐标y + */ + public void fix(XCreator creator, int x, int y) { + int height = creator.getHeight(); + int width = creator.getWidth(); + if (x < 0) { + width += x; + x = 0; + } else if (x + creator.getWidth() > container.getWidth()) { + width = container.getWidth() - x; + } + + if (y < 0) { + height += y; + y = 0; + } else if (y + creator.getHeight() > container.getHeight()) { + height = container.getHeight() - y; + } + + creator.setBounds(x, y, width, height); + } + + @Override + public ConstraintsGroupModel getLayoutConstraints(XCreator creator) { + return new BoundsGroupModel((XWAbsoluteLayout) container, creator); + } + + @Override + public GroupModel getLayoutProperties() { + XWAbsoluteLayout xwAbsoluteLayout = (XWAbsoluteLayout) container; + return new FRAbsoluteLayoutPropertiesGroupModel(xwAbsoluteLayout); + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java index 417e95c35..e31ee6a5d 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java @@ -1,1199 +1,1189 @@ -/** - * - */ -package com.fr.design.designer.beans.adapters.layout; - -import java.awt.Component; -import java.awt.Dimension; -import java.awt.Rectangle; -import java.util.ArrayList; -import java.util.List; - -import com.fr.design.beans.GroupModel; -import com.fr.design.designer.beans.ConstraintsGroupModel; -import com.fr.design.designer.beans.HoverPainter; -import com.fr.design.designer.beans.painters.FRFitLayoutPainter; -import com.fr.design.designer.creator.XCreator; -import com.fr.design.designer.creator.XCreatorUtils; -import com.fr.design.designer.creator.XLayoutContainer; -import com.fr.design.designer.creator.XWFitLayout; -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.properties.FRFitLayoutConstraints; -import com.fr.design.designer.properties.FRFitLayoutPropertiesGroupModel; -import com.fr.design.file.HistoryTemplateListPane; -import com.fr.design.mainframe.JForm; -import com.fr.design.utils.ComponentUtils; -import com.fr.form.ui.LayoutBorderStyle; -import com.fr.form.ui.container.WLayout; -import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; -import com.fr.form.ui.widget.BoundsWidget; -import com.fr.general.ComparatorUtils; - -/** - * 自适应布局的容器适配器 - * - * @author jim - * @date 2014-6-24 - */ -public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { - - public static final String WIDGETPANEICONPATH = "/com/fr/web/images/form/resources/layout_absolute.png"; - private static final int DEPENDING_SCOPE = 3; - private HoverPainter painter; - //区分拖拽和编辑宽高 - private boolean isEdit; - - public boolean isEdit() { - return isEdit; - } - - public void setEdit(boolean edit) { - isEdit = edit; - } - - /** - * 构造函数 - * - * @param container XWFitLayout容器 - */ - public FRFitLayoutAdapter(XLayoutContainer container) { - super(container); - painter = new FRFitLayoutPainter(container); - initMinSize(); - } - - private void initMinSize() { - XWFitLayout layout = (XWFitLayout) container; - minWidth = layout.getActualMinWidth(); - minHeight = layout.getActualMinHeight(); - actualVal = layout.getAcualInterval(); - margin = layout.toData().getMargin(); - } - - @Override - public HoverPainter getPainter() { - return painter; - } - - /** - * 返回布局自身属性,方便一些特有设置在layout刷新时处理 - */ - @Override - public GroupModel getLayoutProperties() { - XWFitLayout xfl = (XWFitLayout) container; - return new FRFitLayoutPropertiesGroupModel(xfl); - } - - /** - * 添加组件 - * - * @param child 待添加的组件 - * @param x 坐标x - * @param y 坐标y - */ - @Override - public void addComp(XCreator child, int x, int y) { - fix(child, x, y); - if (child.shouldScaleCreator() || child.hasTitleStyle()) { - addParentCreator(child); - } else { - container.add(child, child.toData().getWidgetName()); - } - XWFitLayout layout = (XWFitLayout) container; - // 更新对应的BoundsWidget - layout.updateBoundsWidget(); - updateCreatorBackBound(); - } - - public void updateCreatorBackBound() { - for (int i = 0, size = container.getComponentCount(); i < size; i++) { - XCreator creator = (XCreator) container.getComponent(i); - creator.updateChildBound(minHeight); - creator.setBackupBound(creator.getBounds()); - } - } - - - private void addParentCreator(XCreator child) { - XLayoutContainer parentPanel = child.initCreatorWrapper(minHeight); - container.add(parentPanel, child.toData().getWidgetName()); - } - - /** - * 能否对应位置放置当前组件 - * - * @param creator 组件 - * @param x 添加的位置x,该位置是相对于container的 - * @param y 添加的位置y,该位置是相对于container的 - * @return 是否可以放置 - */ - @Override - public boolean accept(XCreator creator, int x, int y) { - // 计算是否能拖入鼠标区域时,会用到fix 的方法 - isFindRelatedComps = false; - //拖入组件判断时,先判断是否为交叉点区域,其次三等分区域,再次平分区域 - Component comp = container.getComponentAt(x, y); - if (checkInterval(comp)) { - return false; - } - //如果当前处于边缘地带, 那么就把他贴到父容器上 - boolean isMatchEdge = matchEdge(x, y); - - int componentHeight = comp.getHeight(); - int componentWidth = comp.getWidth(); - //上半部分高度 - int upHeight = (int) (componentHeight * TOP_HALF) + comp.getY(); - //下半部分高度 - int downHeight = (int) (componentHeight * BOTTOM_HALF) + comp.getY(); - - //布局控件要先判断是不是可编辑 - XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer((XCreator) comp).getTopLayout(); - if (topLayout != null && !isMatchEdge && !topLayout.isEditable()) { - return false; - } - - if (isCrossPointArea(comp, x, y)) { - return canAcceptWhileCrossPoint(comp, x, y); - } - - if (isTrisectionArea(comp, x, y)) { - return canAcceptWhileTrisection(comp, x, y); - } - - boolean horizonValid = componentWidth >= minWidth * 2 + actualVal; - boolean verticalValid = componentHeight >= minHeight * 2 + actualVal; - return y > upHeight && y < downHeight ? horizonValid : verticalValid; - } - - // 间隔区域 - private boolean checkInterval(Component comp) { - return container.getComponentCount() > 0 && comp == container; - } - - /** - * 是否在组件边缘 - * - * @param x 横坐标 - * @param y 纵坐标 - * @return 是否在组件边缘 - */ - public boolean matchEdge(int x, int y) { - if (intersectsEdge(x, y, container)) { - //寻找最近的fit, 在边缘地段添加的控件, 将其送给该fit - XLayoutContainer parent = container.findNearestFit(); - container = parent != null ? parent : container; - return true; - } - return false; - } - - /** - * 是否在组件边缘 - * - * @param x 横坐标 - * @param y 纵坐标 - * @param container 参照组件 - * @return 是否在组件边缘 - */ - //是否包含于边缘地段, 按顺序上, 下, 左, 右检测 - public boolean intersectsEdge(int x, int y, XLayoutContainer container) { - int containerX = container.getX(); - int containerY = container.getY(); - int containerWidth = container.getWidth(); - int containerHeight = container.getHeight(); - - // 当前坐标点 - Rectangle currentXY = new Rectangle(x, y, 1, 1); - // 上边缘 - Rectangle upEdge = new Rectangle(containerX, containerY, containerWidth, BORDER_PROPORTION); - if (upEdge.intersects(currentXY)) { - return true; - } - - int bottomY = containerY + containerHeight - BORDER_PROPORTION; - // 下边缘 - Rectangle bottomEdge = new Rectangle(containerX, bottomY, containerWidth, BORDER_PROPORTION); - if (bottomEdge.intersects(currentXY)) { - return true; - } - - //左右边缘的高度 -10*2 是为了不和上下边缘重合 - int verticalHeight = containerHeight - BORDER_PROPORTION * 2; - int leftY = containerY + BORDER_PROPORTION; - // 左边缘 - Rectangle leftEdge = new Rectangle(containerX, leftY, BORDER_PROPORTION, verticalHeight); - if (leftEdge.intersects(currentXY)) { - return true; - } - - int rightY = containerY + BORDER_PROPORTION; - int rightX = containerX + containerWidth - BORDER_PROPORTION; - // 右边缘 - Rectangle rightEdge = new Rectangle(rightX, rightY, BORDER_PROPORTION, verticalHeight); - return rightEdge.intersects(currentXY); - } - - /** - * 交叉点区域时,能否对应位置放入组件 - */ - protected boolean canAcceptWhileCrossPoint(Component comp, int x, int y) { - return super.canAcceptWhileCrossPoint(comp, x, y); - } - - protected boolean canAcceptWhileTrisection(Component comp, int x, int y) { - return super.canAcceptWhileTrisection(comp, x, y); - } - - /** - * 判断是否鼠标在组件的三等分区域,如果组件在布局管理器中间,上下左右都可能会三等分 - * - * @param parentComp 鼠标所在区域的组件 - * @param x 坐标x - * @param y 坐标y - * @return 是则返回true - */ - public boolean isTrisectionArea(Component parentComp, int x, int y) { - return super.isTrisectionArea(parentComp, x, y); - } - - /** - * 是否为组件交叉点区域 或者是相邻三组建中间点 - * - * @param currentComp 当前组件 - * @param x 坐标x - * @param y 坐标y - * @return 是则返回true - */ - public boolean isCrossPointArea(Component currentComp, int x, int y) { - return super.isCrossPointArea(currentComp, x, y); - } - - protected void initCompsList() { - super.initCompsList(); - } - - protected void clearCompsList() { - super.clearCompsList(); - } - - protected Rectangle getLayoutBound(XWCardMainBorderLayout mainLayout) { - return mainLayout.getBounds(); - } - - private Rectangle adjustBackupBound(Rectangle backupBound, XWCardMainBorderLayout mainLayout) { - // 参数界面高度对纵坐标产生的影响 - JForm jform = (JForm) (HistoryTemplateListPane.getInstance().getCurrentEditingTemplate()); - if (jform.getFormDesign().getParaComponent() != null) { - backupBound.y -= jform.getFormDesign().getParaHeight(); - } - - Rectangle rec = getLayoutBound(mainLayout); - // XWTabLayout里面的横纵坐标收到外层XWCardMainBorderLayout的横纵坐标影响 - // 减掉之后可以按照它原来的逻辑执行 - backupBound.x -= rec.x; - backupBound.y -= rec.y; - XWCardLayout cardLayout = mainLayout.getCardPart(); - LayoutBorderStyle style = cardLayout.toData().getBorderStyle(); - // 当tab布局为标题样式时,才需要处理标题栏高度产生的影响 - if (ComparatorUtils.equals(style.getType(), LayoutBorderStyle.TITLE)) { - backupBound.y -= WCardMainBorderLayout.TAB_HEIGHT; - } - return backupBound; - } - - /** - * 拖拽控件边框后,根据控件的大小尺寸,进行相关组件的调整 - * - * @param creator 组件 - */ - @Override - public void fix(XCreator creator) { - //拖拽组件原大小、位置 - Rectangle backupBound = creator.getBackupBound(); - backupBound.x -= container.getX(); - backupBound.y -= container.getY(); - //当前拖拽组件的位置 - int x = creator.getX(); - int y = creator.getY(); - - // 获取容器所有内部组件横坐标 - int[] posXs = container.getHors(); - // 获取容器所有内部组件纵坐标 - int[] posYs = container.getVeris(); - - XLayoutContainer outerLayout = container.getOuterLayout(); - if (!ComparatorUtils.equals(outerLayout, container.getBackupParent())) { - XWCardMainBorderLayout mainLayout = (XWCardMainBorderLayout) outerLayout; - backupBound = adjustBackupBound(backupBound, mainLayout); - } - - //拖拽组件拖拽以后的大小 - int w = creator.getWidth(); - int h = creator.getHeight(); - initCompsList(); - creator.setBounds(backupBound); - int difference = 0; - if (x != backupBound.x) { - dealLeft(backupBound, x, posXs, difference, creator); - } else if (w != backupBound.width) { - dealRight(backupBound, x, w, posXs, difference, creator); - } else if (y != backupBound.y) { - dealTop(backupBound, y, posYs, difference, creator); - } else if (h != backupBound.height) { - dealButtom(backupBound, y, h, posYs, difference, creator); - } - clearCompsList(); - XWFitLayout layout = (XWFitLayout) container; - layout.updateBoundsWidget(); // 更新对应的BoundsWidget - updateCreatorBackBound(); - } - - /** - * 拖拽控件边框后,根据控件的大小尺寸,进行相关组件的调整 - * - * @param backupBound 边界备份 - * @param bounds 组件边界 - * @param xCreator 组件 - * @param row 选中的行 - * @param difference 偏移量 - */ - public void calculateBounds(Rectangle backupBound, Rectangle bounds, XCreator xCreator, int row, int difference) { - Rectangle rc = new Rectangle(0, 0, 0, 0); - XLayoutContainer parent = XCreatorUtils.getParentXLayoutContainer(xCreator); - if (parent != null) { - Rectangle rec = ComponentUtils.getRelativeBounds(parent); - rc.x = rec.x; - rc.y = rec.y; - } - int x = backupBound.x - rc.x, y = backupBound.y - rc.y; - //处理左右延伸 - switch (row) { - case 0: - if (backupBound.width + backupBound.x == container.getWidth() - margin.getRight() + rc.x) { - x += difference; - } - break; - case 1: - if (backupBound.y + backupBound.height == container.getHeight() - margin.getBottom() + rc.y) { - y += difference; - } - break; - } - bounds.setLocation(x, y); - xCreator.setBackupBound(backupBound); - xCreator.setBounds(bounds); - this.fix(xCreator); - } - - private void dealLeft(Rectangle backupBound, int x, int[] posXs, int difference, XCreator creator) { - if (backupBound.x == margin.getLeft()) { - return; - } - x = adjustCoordinateByDependingLine(x, posXs); - difference = x - backupBound.x; - dealDirectionAtLeft(backupBound, difference, creator); - } - - private void dealRight(Rectangle backupBound, int x, int w, int[] posXs, int difference, XCreator creator) { - if (backupBound.width + backupBound.x == container.getWidth() - margin.getRight()) { - return; - } - w = adjustDiffByDependingLine(x, posXs, w); - difference = w - backupBound.width; //拖拽长度 - dealDirectionAtRight(backupBound, difference, creator); - } - - private void dealTop(Rectangle backupBound, int y, int[] posYs, int difference, XCreator creator) { - if (backupBound.y == margin.getTop()) { - return; - } - y = adjustCoordinateByDependingLine(y, posYs); - difference = y - backupBound.y; - dealDirectionAtTop(backupBound, difference, creator); - } - - private void dealButtom(Rectangle backupBound, int y, int h, int[] posYs, int difference, XCreator creator) { - if (backupBound.y + backupBound.height == container.getHeight() - margin.getBottom()) { - return; - } - h = adjustDiffByDependingLine(y, posYs, h); - difference = h - backupBound.height; - dealDirectionABottom(backupBound, difference, creator); - } - - // 根据需要依附的位置调整拖拽的坐标值 - private int adjustCoordinateByDependingLine(int coordinate, int[] coordinates) { - if (!isEdit) { - for (int i = 0; i < coordinates.length; i++) { - if (coordinate == coordinates[i]) { - continue; - } - if (coordinate > coordinates[i] - DEPENDING_SCOPE && coordinate < coordinates[i] + DEPENDING_SCOPE) { - coordinate = coordinates[i]; - break; - } - } - } - return coordinate; - } - - // 根据需要依附的位置调整拖拽的距离 - private int adjustDiffByDependingLine(int coordinate, int[] coordinates, int diff) { - if (!isEdit) { - for (int i = 0; i < coordinates.length; i++) { - if (coordinate + diff > coordinates[i] - DEPENDING_SCOPE && coordinate + diff < coordinates[i] + DEPENDING_SCOPE) { - diff = coordinates[i] - coordinate; - break; - } - } - } - return diff; - } - - // 左侧边框拉伸,循环找出对齐的两侧控件 - private void dealDirectionAtLeft(Rectangle backupBound, int difference, Component creator) { - rightComps.add(creator); - Component rightComp = null; - int leftx = backupBound.x - DEFAULT_AREA_LENGTH - actualVal; - // 取左侧边框右面的组件x值 - int rightx = backupBound.x + DEFAULT_AREA_LENGTH; - Component leftComp = container.getLeftComp(backupBound.x, backupBound.y); - leftComps.add(leftComp); - //先找上侧对齐时(y相等)的左右两边组件 - int ry = backupBound.y; - int ly = leftComp.getY(); - int min = margin.getTop(); - int max = container.getHeight() - margin.getBottom(); - while (ry >= min && ly >= min) { - if (ry == ly) { - break; - } else { - if (ry > ly) { - rightComp = container.getTopComp(rightx, ry); - ry = rightComp.getY(); - rightComps.add(rightComp); - } else { - leftComp = container.getTopComp(leftx, ly); - ly = leftComp.getY(); - leftComps.add(leftComp); - } - } - } - // 下侧对齐时(y+h相等)两边组件 - ry = backupBound.y + backupBound.height; - ly = leftComps.get(0).getY() + leftComps.get(0).getHeight(); - while (ry <= max && ly <= max) { - if (ry == ly) { - break; - } else { - if (ry > ly) { - leftComp = container.getComponentAt(leftx, ly + DEFAULT_AREA_LENGTH + actualVal); - ly = leftComp.getY() + leftComp.getHeight(); - leftComps.add(leftComp); - } else { - rightComp = container.getComponentAt(rightx, ry + DEFAULT_AREA_LENGTH + actualVal); - ry = rightComp.getY() + rightComp.getHeight(); - rightComps.add(rightComp); - } - } - } - dealHorDirection(backupBound.x, difference); - } - - // 右侧边框拉伸,循环找出对齐的两侧控件 - private void dealDirectionAtRight(Rectangle backupBound, int difference, Component creator) { - leftComps.add(creator); - Component leftComp = null; - int leftx = backupBound.x + backupBound.width - DEFAULT_AREA_LENGTH; - // 取右侧边框右面的组件x值 - int rightx = backupBound.x + backupBound.width + DEFAULT_AREA_LENGTH + actualVal; - Component rightComp = container.getRightComp(backupBound.x, backupBound.y, backupBound.width); - rightComps.add(rightComp); - int ly = backupBound.y, ry = rightComp.getY(); - int min = margin.getTop(); - int max = container.getHeight() - margin.getBottom(); - while (ry >= min && ly >= min) { - if (ry == ly) { - break; - } else { - if (ry > ly) { - rightComp = container.getTopComp(rightx, ry); - ry = rightComp.getY(); - rightComps.add(rightComp); - } else { - leftComp = container.getTopComp(leftx, ly); - ly = leftComp.getY(); - leftComps.add(leftComp); - } - } - } - ly = backupBound.y + backupBound.height; - ry = rightComps.get(0).getY() + rightComps.get(0).getHeight(); - while (ry <= max && ly <= max) { - if (ry == ly) { - break; - } else { - if (ry > ly) { - leftComp = container.getComponentAt(leftx, ly + DEFAULT_AREA_LENGTH + actualVal); - ly = leftComp.getY() + leftComp.getHeight(); - leftComps.add(leftComp); - } else { - rightComp = container.getComponentAt(rightx, ry + DEFAULT_AREA_LENGTH + actualVal); - ry = rightComp.getY() + rightComp.getHeight(); - rightComps.add(rightComp); - } - } - } - dealHorDirection(backupBound.x + backupBound.width + actualVal, difference); - } - - /** - * 水平方向上拉伸边框的处理 - */ - private void dealHorDirection(int objx, int difference) { - if (difference > 0) { - difference = Math.min(getMinWidth(rightComps) - minWidth, difference); - } else { - difference = Math.max(difference, minWidth - getMinWidth(leftComps)); - } - //重新计算左右两侧组件size、point - if (CalculateLefttRelatComponent(difference)) { - CalculateRightRelatComponent(objx + difference, -difference); - } - } - - // 上侧边框拉伸,循环找出对齐的两侧控件 - private void dealDirectionAtTop(Rectangle backupBound, int difference, Component creator) { - downComps.add(creator); - // 取上侧边框上面的组件用的y值 - int topy = backupBound.y - DEFAULT_AREA_LENGTH - actualVal; - // 上侧边框下面的组件y值 - int bottomy = backupBound.y + DEFAULT_AREA_LENGTH; - Component topComp = container.getTopComp(backupBound.x, backupBound.y); - upComps.add(topComp); - Component bottomComp = null; - int min = margin.getLeft(); - int max = container.getWidth() - margin.getRight(); - //先找左侧侧对齐时(x相等)的上下两边组件 - int ux = topComp.getX(); - int dx = backupBound.x; - while (ux >= min && dx >= min) { - if (ux == dx) { - break; - } else { - if (ux < dx) { - bottomComp = container.getLeftComp(dx, bottomy); - dx = bottomComp.getX(); - downComps.add(bottomComp); - } else { - topComp = container.getLeftComp(ux, topy); - ux = topComp.getX(); - upComps.add(topComp); - } - } - } - // 右侧对齐时(x+w相等)两边组件 - ux = upComps.get(0).getX() + upComps.get(0).getWidth(); - dx = backupBound.x + backupBound.width; - while (ux <= max && dx <= max) { - if (ux == dx) { - break; - } else { - if (ux < dx) { - topComp = container.getComponentAt(ux + DEFAULT_AREA_LENGTH + actualVal, topy); - ux = topComp.getX() + topComp.getWidth(); - upComps.add(topComp); - } else { - bottomComp = container.getComponentAt(dx + DEFAULT_AREA_LENGTH + actualVal, bottomy); - dx = bottomComp.getX() + bottomComp.getWidth(); - downComps.add(bottomComp); - } - } - } - - dealVertiDirection(backupBound.y, difference); - } - - // 下侧边框拉伸,循环找出对齐的两侧控件 - private void dealDirectionABottom(Rectangle backupBound, int difference, Component creator) { - upComps.add(creator); - Component topComp = null; - Component bottomComp = container.getBottomComp(backupBound.x, backupBound.y, backupBound.height); - // 下侧边框下面的组件y坐标 - int bottomy = backupBound.y + backupBound.height + DEFAULT_AREA_LENGTH + actualVal; - // 取下侧边框上面的组件用的y值 - int topy = backupBound.y + backupBound.height - DEFAULT_AREA_LENGTH; - downComps.add(bottomComp); - int dx = bottomComp.getX(); - int ux = backupBound.x; - int min = margin.getLeft(); - int max = container.getWidth() - margin.getRight(); - while (ux >= min && dx >= min) { - if (ux == dx) { - break; - } else { - if (ux < dx) { - bottomComp = container.getLeftComp(dx, bottomy); - dx = bottomComp.getX(); - downComps.add(bottomComp); - } else { - topComp = container.getLeftComp(ux, topy); - ux = topComp.getX(); - upComps.add(topComp); - } - } - } - dx = downComps.get(0).getX() + downComps.get(0).getWidth(); - ux = backupBound.x + backupBound.width; - while (ux <= max && dx <= max) { - if (ux == dx) { - break; - } else { - if (ux < dx) { - topComp = container.getComponentAt(ux + DEFAULT_AREA_LENGTH + actualVal, topy); - ux = topComp.getX() + topComp.getWidth(); - upComps.add(topComp); - } else { - bottomComp = container.getComponentAt(dx + DEFAULT_AREA_LENGTH + actualVal, bottomy); - dx = bottomComp.getX() + bottomComp.getWidth(); - downComps.add(bottomComp); - } - } - } - dealVertiDirection(backupBound.y + backupBound.height + actualVal, difference); - } - - /** - * 垂直方向上拉伸边框的处理 - */ - private void dealVertiDirection(int objY, int difference) { - if (difference > 0) { - difference = Math.min(getMinHeight(downComps) - minHeight, difference); - } else { - difference = Math.max(difference, minHeight - getMinHeight(upComps)); - } - //重新计算上下两侧组件size、point - if (CalculateUpRelatComponent(difference)) { - CalculateDownRelatComponent(objY + difference, -difference); - } - ; - } - - /** - * 新拖入组件时,计算调整其他关联组件位置大小 - * - * @param child 新拖入的组件 - * @param x 鼠标所在x坐标 - * @param y 鼠标所在y坐标 - */ - public void fix(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()); - } else if (isCrossPointArea(parentComp, x, y)) { - //交叉区域插入组件时,根据具体位置进行上下或者左右或者相邻三个组件的位置大小插入 - fixCrossPointArea(parentComp, child, x, y); - return; - } else if (isTrisectionArea(parentComp, x, y)) { - // 在边界三等分区域,就不再和组件二等分了 - fixTrisect(parentComp, child, x, y); - return; - } else { - fixHalve(parentComp, child, x, y); - } - } - - /** - * 平分,正常情况拖入组件时,按照上1/4区域、下1/4区域为上下平分,中左侧1/2区域、中右侧1/2区域为左右平分 - */ - protected void fixHalve(Component currentComp, XCreator child, int x, int y) { - super.fixHalve(currentComp, child, x, y); - } - - /** - * 组件交叉区域进行插入时,调整受到变动的其他组件,之前是交叉区域插入也按照三等分逻辑,后面测试中发现有bug,改为和bi一样的鼠标所在侧平分 - * 默认左上角、右下角区域是垂直方向插入组件 - * 右上角和左下角是水平方向插入组件,这样避免田字块时重复 - */ - protected void fixCrossPointArea(Component currentComp, XCreator child, int x, int y) { - super.fixCrossPointArea(currentComp, child, x, y); - } - - /** - * 三等分区域时,调整相关联的组件 - * - * @param currentComp 鼠标所在组件 - * @param child 待插入组件 - */ - protected void fixTrisect(Component currentComp, XCreator child, int x, int y) { - super.fixTrisect(currentComp, child, x, y); - } - - /** - * 删除组件或者重新拖动时,其它组件重新计算位置大小 - */ - protected void delete(XCreator creator, int creatorWidth, int creatorHeight) { - int x = creator.getX(); - int y = creator.getY(); - recalculateChildrenSize(x, y, creatorWidth, creatorHeight); - } - - /** - * 重新计算内部组件大小 - * - * @param x 坐标x - * @param y 坐标y - * @param creatorWidth 删除的组件之前所在布局的宽度 - * @param creatorHeight 删除的组件之前所在布局的高度 - */ - public void recalculateChildrenSize(int x, int y, int creatorWidth, int creatorHeight) { - if (container.getComponentCount() == 0) { - return; - } else { - initCompsList(); - int width = creatorWidth; - int height = creatorHeight; - calculateRelatedComponent(x, y, width, height); - if (!rightComps.isEmpty() && getAllHeight(rightComps) == height) { - CalculateRightRelatComponent(x, width + actualVal); - } else if (!leftComps.isEmpty() && getAllHeight(leftComps) == height) { - CalculateLefttRelatComponent(width + actualVal); - } else if (!downComps.isEmpty() && getAllWidth(downComps) == width) { - CalculateDownRelatComponent(y, height + actualVal); - } else if (!upComps.isEmpty() && getAllWidth(upComps) == width) { - CalculateUpRelatComponent(height + actualVal); - } else { - // 由于布局三等分的存在,可能会出现删除组件时,找不到关联的组件填充,此时特殊处理 - calculateNoRelatedComponent(x, y, width, height); - } - } - clearCompsList(); - } - - /** - * 四侧边框都没有对齐的,此时每侧有且只有一个方向不对齐 - * 比如右侧不对齐,那么必然右上或右下没对齐,不会同时不对齐,否则不会出现此情况 - * 正常删除是右左下上优先原则,这边目前只调整右侧以至填充完整, - * 右侧不对齐时的组件先上下微调,再向左侧填充。 - */ - private void calculateNoRelatedComponent(int x, int y, int width, int height) { - // 只有最后一个组件了,直接删除 - if (container.getComponentCount() <= 1) { - return; - } - // 删除当前组件时,由于没有刚好边框对齐的其他组件,这时候需要调整的组件 - Component rightComp = container.getRightComp(x, y, width); - if (rightComp == null) { - return; - } - - int ry = rightComp.getY(); - clearCompsList(); - initCompsList(); - Rectangle rec = new Rectangle(x, y, width, height); - if (ry != y) { - calculateNoRelatedWhileRightTop(rec, rightComp); - } else { - calculateNoRelatedWhileRightBott(rec, rightComp); - } - - } - - private void calculateNoRelatedWhileRightTop(Rectangle bound, Component rcomp) { - if (rcomp == null) { - return; - } - - int ry = rcomp.getY(); - int rh = rcomp.getHeight(); - int rw = rcomp.getWidth(); - int dh = bound.y - ry - actualVal; - // 没法缩小高度 - if (dh < minHeight) { - // 没法缩小时则拉伸rcomp的上边框 - dealDirectionAtTop(rcomp.getBounds(), dh + actualVal, rcomp); - //调整的时候可能有组件达到最小高度,判断下 - if (rcomp.getY() != bound.y) { - clearCompsList(); - initCompsList(); - dealDirectionAtTop(rcomp.getBounds(), bound.y - rcomp.getY() - minHeight - actualVal, rcomp); - ry = rcomp.getY(); - int rx = rcomp.getX(); - rcomp.setBounds(rx, ry, rw, minHeight); - recalculateChildrenSize(rx, bound.y, rw, rh - dh - actualVal); - recalculateChildrenSize(bound.x, bound.y, bound.width, bound.height); - return; - } - } else { - // 右侧控件底部对齐 - if (rh + ry == bound.y + bound.height) { - rcomp.setSize(rw, dh); - bound.width += rw; - bound.width += actualVal; - } else { - recalculateChildrenSize(bound.x, ry + rh + actualVal, bound.width, bound.height + bound.y - rh - ry - actualVal); - recalculateChildrenSize(bound.x, bound.y, bound.width, ry + rh - bound.y); - return; - } - } - recalculateChildrenSize(bound.x, bound.y, bound.width, bound.height); - } - - private void calculateNoRelatedWhileRightBott(Rectangle bound, Component rcomp) { - rcomp = container.getBottomRightComp(bound.x, bound.y, bound.height, bound.width); - int ry = rcomp.getY(); - int rh = rcomp.getHeight(); - int rw = rcomp.getWidth(); - int dh = ry + rh - bound.y - bound.height - actualVal; - if (dh < minHeight) { - dealDirectionABottom(rcomp.getBounds(), -dh - actualVal, rcomp); - //调整的时候可能有组件达到最小高度,判断下 - if (rcomp.getHeight() + ry != bound.y + bound.height) { - clearCompsList(); - initCompsList(); - dh = ry + rcomp.getHeight() - bound.y - bound.height - actualVal; - dealDirectionABottom(rcomp.getBounds(), minHeight - dh, rcomp); - rh = rcomp.getHeight(); - int rx = rcomp.getX(); - rcomp.setBounds(rx, bound.y + bound.height + actualVal, rw, minHeight); - recalculateChildrenSize(rx, ry, rw, rh - minHeight - actualVal); - recalculateChildrenSize(bound.x, bound.y, bound.width, bound.height); - return; - } - } else { - if (ry == bound.y) { - rcomp.setBounds(rcomp.getX(), bound.y + bound.height + actualVal, rw, dh); - bound.width += rw; - bound.width += actualVal; - } else { - recalculateChildrenSize(bound.x, bound.y, bound.width, ry - bound.y - actualVal); - recalculateChildrenSize(bound.x, ry, bound.width, bound.height - ry + bound.y); - return; - } - } - recalculateChildrenSize(bound.x, bound.y, bound.width, bound.height); - } - - private int getMinWidth(List comps) { - if (comps.isEmpty()) { - return 0; - } - int minWidth = container.getWidth() - margin.getLeft() - margin.getRight(); - for (int i = 0, size = comps.size(); i < size; i++) { - minWidth = minWidth > comps.get(i).getWidth() ? comps.get(i).getWidth() : minWidth; - } - return minWidth; - } - - private int getMinHeight(List comps) { - if (comps.isEmpty()) { - return 0; - } - int minH = container.getHeight() - margin.getTop() - margin.getBottom(); - for (int i = 0, size = comps.size(); i < size; i++) { - minH = minH > comps.get(i).getHeight() ? comps.get(i).getHeight() : minH; - } - return minH; - } - - // 删除时计算待删除组件上下侧的组件是否何其对齐 - private int getAllHeight(List comps) { - int allHeight = 0; - if (comps.isEmpty()) { - return allHeight; - } - int n = comps.size(); - for (int i = 0; i < n; i++) { - allHeight += comps.get(i).getHeight(); - } - allHeight += (n - 1) * actualVal; - return allHeight; - } - - private int getAllWidth(List comps) { - int allWidth = 0; - if (comps.isEmpty()) { - return allWidth; - } - int n = comps.size(); - for (int i = 0; i < n; i++) { - allWidth += comps.get(i).getWidth(); - } - allWidth += (n - 1) * actualVal; - return allWidth; - } - - /** - * 获取有哪些相关联的组件 - */ - protected void calculateRelatedComponent(int objX, int objY, int objWidth, int objHeight) { - int count = container.getComponentCount(); - for (int i = 0; i < count; i++) { - Component relatComp = container.getComponent(i); - int rx = relatComp.getX(); - int ry = relatComp.getY(); - int rwidth = relatComp.getWidth(); - int rheight = relatComp.getHeight(); - int verti = ry - objY; - int hori = rx - objX; - boolean isHori = verti >= 0 && objHeight >= (rheight + verti); - boolean isVerti = hori >= 0 && objWidth >= (rwidth + hori); - if (isHori && (objX + objWidth + actualVal) == rx) { - rightComps.add(relatComp); - } else if (isHori && objX == (rx + rwidth + actualVal)) { - leftComps.add(relatComp); - } else if (isVerti && (objY + objHeight + actualVal) == ry) { - downComps.add(relatComp); - } else if (isVerti && objY == (ry + rheight + actualVal)) { - upComps.add(relatComp); - } - } - } - - /** - * 拖拽组件时遍历某一侧组件得到该侧组件能够缩放的最小宽度,tab布局最小宽度 = 内部组件数 * 单个组件最小宽度 - * - * @param list 某一侧组件的集合 如:leftComps - * @return int 最小宽度 - */ - private int getCompsMinWidth(List list) { - return getMaxCompsNum(list, true) * WLayout.MIN_WIDTH; - } - - /** - * 拖拽组件遍历某一侧得到该侧组件能够缩放的最小高度,tab布局最小高度 = 内部组件数 * 单个组件最小高度 + 标题高度 - * - * @param list 某一侧组件集合 - * @return int 最小高度 - */ - private int getCompsMinHeight(List list) { - for (int i = 0; i < list.size(); i++) { - XCreator creator = (XCreator) list.get(i); - ArrayList childrenList = creator.getTargetChildrenList(); - if (!childrenList.isEmpty()) { - return getMaxCompsNum(list, false) * WLayout.MIN_HEIGHT + WCardMainBorderLayout.TAB_HEIGHT; - } - } - return WLayout.MIN_HEIGHT; - } - - /** - * 根据子组件的横(纵)坐标获取某一侧组件的最大内部组件数 - * - * @param list 某一侧组件集合 - * @param isHor 是否以横坐标为准 - * @return int 最大内部组件数 - */ - private int getMaxCompsNum(List list, boolean isHor) { - int maxCompNums = 1; - for (int i = 0, size = list.size(); i < size; i++) { - XCreator creator = (XCreator) list.get(i); - ArrayList childrenList = creator.getTargetChildrenList(); - int count = childrenList.size(); - if (count > 0) { - for (int j = 0; j < count; j++) { - XWTabFitLayout tabLayout = (XWTabFitLayout) childrenList.get(j); - int[] positions = isHor ? tabLayout.getHors(true) : tabLayout.getVeris(true); - int compNums = positions.length - 1; - maxCompNums = Math.max(compNums, maxCompNums); - } - } - } - return maxCompNums; - } - - /** - * 根据偏移量缩放内部组件大小,(tab布局用到) - * - * @param creator tab布局 - * @param offset 偏移量 - * @param isHor 是否为横向拖拽 - */ - private void adjustCompsSize(XCreator creator, int offset, boolean isHor) { - ArrayList childrenList = creator.getTargetChildrenList(); - int size = childrenList.size(); - if (size > 0) { - for (int j = 0; j < size; j++) { - XWTabFitLayout tabLayout = (XWTabFitLayout) childrenList.get(j); - tabLayout.setBackupBound(tabLayout.getBounds()); - int refSize = isHor ? tabLayout.getWidth() : tabLayout.getHeight(); - double percent = (double) offset / refSize; - if (percent < 0 && !tabLayout.canReduce(percent)) { - return; - } - setAdjustedSize(tabLayout, offset, isHor); - for (int m = 0; m < tabLayout.getComponentCount(); m++) { - XCreator childCreator = tabLayout.getXCreator(m); - BoundsWidget wgt = tabLayout.toData().getBoundsWidget(childCreator.toData()); - wgt.setBounds(tabLayout.getComponent(m).getBounds()); - } - adjustCreatorsSize(percent, tabLayout, isHor); - } - - } - } - - // 纵向拖拽,先将tab布局的高度设置为拖拽后的实际高度 - private void setAdjustedHeight(XWTabFitLayout tabLayout, int offset) { - tabLayout.setSize(tabLayout.getWidth(), tabLayout.getHeight() + offset); - } - - // 横向拖拽,先将tab布局的宽度设置为拖拽后的实际宽度 - private void setAdjustedSize(XWTabFitLayout tabLayout, int offset, boolean isHor) { - if (offset < 0) { - // 缩放时需要备份原tab布局宽高 - tabLayout.setReferDim(new Dimension(tabLayout.getWidth(), tabLayout.getHeight())); - } - if (isHor) { - tabLayout.setSize(tabLayout.getWidth() + offset, tabLayout.getHeight()); - return; - } - setAdjustedHeight(tabLayout, offset); - } - - // 按照拖拽偏移量,对tab布局进行缩放 - private void adjustCreatorsSize(double percent, XWTabFitLayout tabLayout, boolean isHor) { - if (isHor) { - tabLayout.adjustCreatorsWidth(percent); - return; - } - tabLayout.adjustCreatorsHeight(percent); - } - - - /** - * 删除或拉伸控件右边框 调整右侧组件位置大小 - * - * @param objX 调整后的坐标x - * @param objWidth 调整后的宽度 - */ - protected void CalculateRightRelatComponent(int objX, int objWidth) { - int count = rightComps.size(); - for (int i = 0; i < count; i++) { - XCreator creator = (XCreator) rightComps.get(i); - adjustCompsSize(creator, objWidth, true); - int ry = creator.getY(); - int rwidth = creator.getWidth(); - int rheight = creator.getHeight(); - creator.setLocation(objX, ry); - creator.setSize(rwidth + objWidth, rheight); - } - } - - /** - * 实际拖拽偏移量是否超出了可调整的宽度范围 - * - * @param offset 实际偏移量 - * @return boolean 是否超出调整范围 - */ - private boolean isBeyondAdjustWidthScope(int offset) { - boolean isBeyondScope = false; - isBeyondScope = offset < 0 ? isBeyondWidthScope(offset, leftComps) : isBeyondWidthScope(offset, rightComps); - return isBeyondScope; - } - - // 实际拖拽偏移量是否超出某一侧的可调整宽度 - private boolean isBeyondWidthScope(int offset, List compsList) { - int compMinWidth = getCompsMinWidth(compsList); - for (int i = 0; i < compsList.size(); i++) { - XCreator creator = (XCreator) compsList.get(i); - if (Math.abs(offset) > (creator.getWidth() - compMinWidth)) { - return true; - } - } - return false; - } - - /** - * 删除或拉伸控件左边框时 调整左侧的组件位置大小; - */ - protected boolean CalculateLefttRelatComponent(int objWidth) { - if (isBeyondAdjustWidthScope(objWidth)) { - return false; - } - int count = leftComps.size(); - for (int i = 0; i < count; i++) { - XCreator creator = (XCreator) leftComps.get(i); - adjustCompsSize(creator, objWidth, true); - int rwidth = creator.getWidth(); - int rheight = creator.getHeight(); - creator.setSize(rwidth + objWidth, rheight); - } - return true; - } - - /** - * 删除或拉伸下边框 调整下方的组件位置大小 - */ - protected void CalculateDownRelatComponent(int objY, int objHeight) { - int count = downComps.size(); - for (int i = 0; i < count; i++) { - XCreator creator = (XCreator) downComps.get(i); - adjustCompsSize(creator, objHeight, false); - int rx = creator.getX(); - int rwidth = creator.getWidth(); - int rheight = creator.getHeight(); - creator.setLocation(rx, objY); - creator.setSize(rwidth, rheight + objHeight); - } - } - - /** - * 实际拖拽偏移量是否超出了可调整的高度范围 - * - * @param offset 实际偏移量 - * @return boolean 是否超出调整范围 - */ - private boolean isBeyondAdjustHeightScope(int offset) { - boolean isBeyondScope = false; - isBeyondScope = offset < 0 ? isBeyondHeightScope(offset, upComps) : isBeyondHeightScope(offset, downComps); - return isBeyondScope; - } - - // 实际拖拽偏移量是否超出某一侧的可调整高度 - private boolean isBeyondHeightScope(int offset, List compsList) { - int minHeight = getCompsMinHeight(compsList); - for (int i = 0; i < compsList.size(); i++) { - XCreator creator = (XCreator) compsList.get(i); - if (Math.abs(offset) > (creator.getHeight() - minHeight)) { - return true; - } - } - return false; - } - - /** - * 删除或拉伸上边框 调整上方的组件位置大小 - */ - protected boolean CalculateUpRelatComponent(int objHeight) { - if (isBeyondAdjustHeightScope(objHeight)) { - return false; - } - int count = upComps.size(); - for (int i = 0; i < count; i++) { - XCreator creator = (XCreator) upComps.get(i); - adjustCompsSize(creator, objHeight, false); - int rwidth = creator.getWidth(); - int rheight = creator.getHeight(); - creator.setSize(rwidth, rheight + objHeight); - } - return true; - } - - /** - * 不调整,只计算位置 - * - * @return child的位置 - */ - public int[] getChildPosition(Component currentComp, XCreator child, int x, int y) { - return super.getChildPosition(currentComp, child, x, y); - } - - @Override - public ConstraintsGroupModel getLayoutConstraints(XCreator creator) { - return new FRFitLayoutConstraints((XWFitLayout) container, creator); - } +/** + * + */ +package com.fr.design.designer.beans.adapters.layout; + +import com.fr.design.beans.GroupModel; +import com.fr.design.designer.beans.ConstraintsGroupModel; +import com.fr.design.designer.beans.HoverPainter; +import com.fr.design.designer.beans.painters.FRFitLayoutPainter; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XCreatorUtils; +import com.fr.design.designer.creator.XLayoutContainer; +import com.fr.design.designer.creator.XWFitLayout; +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.properties.FRFitLayoutConstraints; +import com.fr.design.designer.properties.FRFitLayoutPropertiesGroupModel; +import com.fr.design.file.HistoryTemplateListPane; +import com.fr.design.mainframe.JForm; +import com.fr.design.utils.ComponentUtils; +import com.fr.form.ui.LayoutBorderStyle; +import com.fr.form.ui.container.WLayout; +import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; +import com.fr.form.ui.widget.BoundsWidget; +import com.fr.general.ComparatorUtils; + +import java.awt.*; +import java.util.ArrayList; +import java.util.List; + +/** + * 自适应布局的容器适配器 + * + * @author jim + * @date 2014-6-24 + */ +public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { + + public static final String WIDGETPANEICONPATH = "/com/fr/web/images/form/resources/layout_absolute.png"; + private static final int DEPENDING_SCOPE = 3; + private HoverPainter painter; + //区分拖拽和编辑宽高 + private boolean isEdit; + + public boolean isEdit() { + return isEdit; + } + + public void setEdit(boolean edit) { + isEdit = edit; + } + + /** + * 构造函数 + * + * @param container XWFitLayout容器 + */ + public FRFitLayoutAdapter(XLayoutContainer container) { + super(container); + painter = new FRFitLayoutPainter(container); + initMinSize(); + } + + private void initMinSize() { + XWFitLayout layout = (XWFitLayout) container; + minWidth = layout.getActualMinWidth(); + minHeight = layout.getActualMinHeight(); + actualVal = layout.getAcualInterval(); + margin = layout.toData().getMargin(); + } + + @Override + public HoverPainter getPainter() { + return painter; + } + + /** + * 返回布局自身属性,方便一些特有设置在layout刷新时处理 + */ + @Override + public GroupModel getLayoutProperties() { + XWFitLayout xfl = (XWFitLayout) container; + return new FRFitLayoutPropertiesGroupModel(xfl); + } + + /** + * 添加组件 + * + * @param child 待添加的组件 + * @param x 坐标x + * @param y 坐标y + */ + @Override + public void addComp(XCreator child, int x, int y) { + fix(child, x, y); + if (child.shouldScaleCreator() || child.hasTitleStyle()) { + addParentCreator(child); + } else { + container.add(child, child.toData().getWidgetName()); + } + XWFitLayout layout = (XWFitLayout) container; + // 更新对应的BoundsWidget + layout.updateBoundsWidget(); + updateCreatorBackBound(); + } + + public void updateCreatorBackBound() { + for (int i = 0, size = container.getComponentCount(); i < size; i++) { + XCreator creator = (XCreator) container.getComponent(i); + creator.updateChildBound(minHeight); + creator.setBackupBound(creator.getBounds()); + } + } + + + private void addParentCreator(XCreator child) { + XLayoutContainer parentPanel = child.initCreatorWrapper(minHeight); + container.add(parentPanel, child.toData().getWidgetName()); + } + + /** + * 能否对应位置放置当前组件 + * + * @param creator 组件 + * @param x 添加的位置x,该位置是相对于container的 + * @param y 添加的位置y,该位置是相对于container的 + * @return 是否可以放置 + */ + @Override + public boolean accept(XCreator creator, int x, int y) { + // 计算是否能拖入鼠标区域时,会用到fix 的方法 + isFindRelatedComps = false; + //拖入组件判断时,先判断是否为交叉点区域,其次三等分区域,再次平分区域 + Component comp = container.getComponentAt(x, y); + if (checkInterval(comp)) { + return false; + } + //如果当前处于边缘地带, 那么就把他贴到父容器上 + boolean isMatchEdge = matchEdge(x, y); + + int componentHeight = comp.getHeight(); + int componentWidth = comp.getWidth(); + //上半部分高度 + int upHeight = (int) (componentHeight * TOP_HALF) + comp.getY(); + //下半部分高度 + int downHeight = (int) (componentHeight * BOTTOM_HALF) + comp.getY(); + + //布局控件要先判断是不是可编辑 + XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer((XCreator) comp).getTopLayout(); + if (topLayout != null && !isMatchEdge && !topLayout.isEditable()) { + return false; + } + + if (isCrossPointArea(comp, x, y)) { + return canAcceptWhileCrossPoint(comp, x, y); + } + + if (isTrisectionArea(comp, x, y)) { + return canAcceptWhileTrisection(comp, x, y); + } + + boolean horizonValid = componentWidth >= minWidth * 2 + actualVal; + boolean verticalValid = componentHeight >= minHeight * 2 + actualVal; + return y > upHeight && y < downHeight ? horizonValid : verticalValid; + } + + // 间隔区域 + private boolean checkInterval(Component comp) { + return container.getComponentCount() > 0 && comp == container; + } + + /** + * 是否在组件边缘 + * + * @param x 横坐标 + * @param y 纵坐标 + * @return 是否在组件边缘 + */ + public boolean matchEdge(int x, int y) { + if (intersectsEdge(x, y, container)) { + //寻找最近的fit, 在边缘地段添加的控件, 将其送给该fit + XLayoutContainer parent = container.findNearestFit(); + container = parent != null ? parent : container; + return true; + } + return false; + } + + /** + * 是否在组件边缘 + * + * @param x 横坐标 + * @param y 纵坐标 + * @param container 参照组件 + * @return 是否在组件边缘 + */ + //是否包含于边缘地段, 按顺序上, 下, 左, 右检测 + public boolean intersectsEdge(int x, int y, XLayoutContainer container) { + int containerX = container.getX(); + int containerY = container.getY(); + int containerWidth = container.getWidth(); + int containerHeight = container.getHeight(); + + // 当前坐标点 + Rectangle currentXY = new Rectangle(x, y, 1, 1); + // 上边缘 + Rectangle upEdge = new Rectangle(containerX, containerY, containerWidth, BORDER_PROPORTION); + if (upEdge.intersects(currentXY)) { + return true; + } + + int bottomY = containerY + containerHeight - BORDER_PROPORTION; + // 下边缘 + Rectangle bottomEdge = new Rectangle(containerX, bottomY, containerWidth, BORDER_PROPORTION); + if (bottomEdge.intersects(currentXY)) { + return true; + } + + //左右边缘的高度 -10*2 是为了不和上下边缘重合 + int verticalHeight = containerHeight - BORDER_PROPORTION * 2; + int leftY = containerY + BORDER_PROPORTION; + // 左边缘 + Rectangle leftEdge = new Rectangle(containerX, leftY, BORDER_PROPORTION, verticalHeight); + if (leftEdge.intersects(currentXY)) { + return true; + } + + int rightY = containerY + BORDER_PROPORTION; + int rightX = containerX + containerWidth - BORDER_PROPORTION; + // 右边缘 + Rectangle rightEdge = new Rectangle(rightX, rightY, BORDER_PROPORTION, verticalHeight); + return rightEdge.intersects(currentXY); + } + + /** + * 交叉点区域时,能否对应位置放入组件 + */ + protected boolean canAcceptWhileCrossPoint(Component comp, int x, int y) { + return super.canAcceptWhileCrossPoint(comp, x, y); + } + + protected boolean canAcceptWhileTrisection(Component comp, int x, int y) { + return super.canAcceptWhileTrisection(comp, x, y); + } + + /** + * 判断是否鼠标在组件的三等分区域,如果组件在布局管理器中间,上下左右都可能会三等分 + * + * @param parentComp 鼠标所在区域的组件 + * @param x 坐标x + * @param y 坐标y + * @return 是则返回true + */ + public boolean isTrisectionArea(Component parentComp, int x, int y) { + return super.isTrisectionArea(parentComp, x, y); + } + + /** + * 是否为组件交叉点区域 或者是相邻三组建中间点 + * + * @param currentComp 当前组件 + * @param x 坐标x + * @param y 坐标y + * @return 是则返回true + */ + public boolean isCrossPointArea(Component currentComp, int x, int y) { + return super.isCrossPointArea(currentComp, x, y); + } + + + protected Rectangle getLayoutBound(XWCardMainBorderLayout mainLayout) { + return mainLayout.getBounds(); + } + + private Rectangle adjustBackupBound(Rectangle backupBound, XWCardMainBorderLayout mainLayout) { + // 参数界面高度对纵坐标产生的影响 + JForm jform = (JForm) (HistoryTemplateListPane.getInstance().getCurrentEditingTemplate()); + if (jform.getFormDesign().getParaComponent() != null) { + backupBound.y -= jform.getFormDesign().getParaHeight(); + } + + Rectangle rec = getLayoutBound(mainLayout); + // XWTabLayout里面的横纵坐标收到外层XWCardMainBorderLayout的横纵坐标影响 + // 减掉之后可以按照它原来的逻辑执行 + backupBound.x -= rec.x; + backupBound.y -= rec.y; + XWCardLayout cardLayout = mainLayout.getCardPart(); + LayoutBorderStyle style = cardLayout.toData().getBorderStyle(); + // 当tab布局为标题样式时,才需要处理标题栏高度产生的影响 + if (ComparatorUtils.equals(style.getType(), LayoutBorderStyle.TITLE)) { + backupBound.y -= WCardMainBorderLayout.TAB_HEIGHT; + } + return backupBound; + } + + /** + * 拖拽控件边框后,根据控件的大小尺寸,进行相关组件的调整 + * + * @param creator 组件 + */ + @Override + public void fix(XCreator creator) { + //拖拽组件原大小、位置 + Rectangle backupBound = creator.getBackupBound(); + backupBound.x -= container.getX(); + backupBound.y -= container.getY(); + //当前拖拽组件的位置 + int x = creator.getX(); + int y = creator.getY(); + + // 获取容器所有内部组件横坐标 + int[] posXs = container.getHors(); + // 获取容器所有内部组件纵坐标 + int[] posYs = container.getVeris(); + + XLayoutContainer outerLayout = container.getOuterLayout(); + if (!ComparatorUtils.equals(outerLayout, container.getBackupParent())) { + XWCardMainBorderLayout mainLayout = (XWCardMainBorderLayout) outerLayout; + backupBound = adjustBackupBound(backupBound, mainLayout); + } + + //拖拽组件拖拽以后的大小 + int w = creator.getWidth(); + int h = creator.getHeight(); + initCompsList(); + creator.setBounds(backupBound); + int difference = 0; + if (x != backupBound.x) { + dealLeft(backupBound, x, posXs, difference, creator); + } else if (w != backupBound.width) { + dealRight(backupBound, x, w, posXs, difference, creator); + } else if (y != backupBound.y) { + dealTop(backupBound, y, posYs, difference, creator); + } else if (h != backupBound.height) { + dealButtom(backupBound, y, h, posYs, difference, creator); + } + clearCompsList(); + XWFitLayout layout = (XWFitLayout) container; + layout.updateBoundsWidget(); // 更新对应的BoundsWidget + updateCreatorBackBound(); + } + + /** + * 拖拽控件边框后,根据控件的大小尺寸,进行相关组件的调整 + * + * @param backupBound 边界备份 + * @param bounds 组件边界 + * @param xCreator 组件 + * @param row 选中的行 + * @param difference 偏移量 + */ + public void calculateBounds(Rectangle backupBound, Rectangle bounds, XCreator xCreator, int row, int difference) { + Rectangle rc = new Rectangle(0, 0, 0, 0); + XLayoutContainer parent = XCreatorUtils.getParentXLayoutContainer(xCreator); + if (parent != null) { + Rectangle rec = ComponentUtils.getRelativeBounds(parent); + rc.x = rec.x; + rc.y = rec.y; + } + int x = backupBound.x - rc.x, y = backupBound.y - rc.y; + //处理左右延伸 + switch (row) { + case 0: + if (backupBound.width + backupBound.x == container.getWidth() - margin.getRight() + rc.x) { + x += difference; + } + break; + case 1: + if (backupBound.y + backupBound.height == container.getHeight() - margin.getBottom() + rc.y) { + y += difference; + } + break; + } + bounds.setLocation(x, y); + xCreator.setBackupBound(backupBound); + xCreator.setBounds(bounds); + this.fix(xCreator); + } + + private void dealLeft(Rectangle backupBound, int x, int[] posXs, int difference, XCreator creator) { + if (backupBound.x == margin.getLeft()) { + return; + } + x = adjustCoordinateByDependingLine(x, posXs); + difference = x - backupBound.x; + dealDirectionAtLeft(backupBound, difference, creator); + } + + private void dealRight(Rectangle backupBound, int x, int w, int[] posXs, int difference, XCreator creator) { + if (backupBound.width + backupBound.x == container.getWidth() - margin.getRight()) { + return; + } + w = adjustDiffByDependingLine(x, posXs, w); + difference = w - backupBound.width; //拖拽长度 + dealDirectionAtRight(backupBound, difference, creator); + } + + private void dealTop(Rectangle backupBound, int y, int[] posYs, int difference, XCreator creator) { + if (backupBound.y == margin.getTop()) { + return; + } + y = adjustCoordinateByDependingLine(y, posYs); + difference = y - backupBound.y; + dealDirectionAtTop(backupBound, difference, creator); + } + + private void dealButtom(Rectangle backupBound, int y, int h, int[] posYs, int difference, XCreator creator) { + if (backupBound.y + backupBound.height == container.getHeight() - margin.getBottom()) { + return; + } + h = adjustDiffByDependingLine(y, posYs, h); + difference = h - backupBound.height; + dealDirectionABottom(backupBound, difference, creator); + } + + // 根据需要依附的位置调整拖拽的坐标值 + private int adjustCoordinateByDependingLine(int coordinate, int[] coordinates) { + if (!isEdit) { + for (int i = 0; i < coordinates.length; i++) { + if (coordinate == coordinates[i]) { + continue; + } + if (coordinate > coordinates[i] - DEPENDING_SCOPE && coordinate < coordinates[i] + DEPENDING_SCOPE) { + coordinate = coordinates[i]; + break; + } + } + } + return coordinate; + } + + // 根据需要依附的位置调整拖拽的距离 + private int adjustDiffByDependingLine(int coordinate, int[] coordinates, int diff) { + if (!isEdit) { + for (int i = 0; i < coordinates.length; i++) { + if (coordinate + diff > coordinates[i] - DEPENDING_SCOPE && coordinate + diff < coordinates[i] + DEPENDING_SCOPE) { + diff = coordinates[i] - coordinate; + break; + } + } + } + return diff; + } + + // 左侧边框拉伸,循环找出对齐的两侧控件 + private void dealDirectionAtLeft(Rectangle backupBound, int difference, Component creator) { + rightComps.add(creator); + Component rightComp = null; + int leftx = backupBound.x - DEFAULT_AREA_LENGTH - actualVal; + // 取左侧边框右面的组件x值 + int rightx = backupBound.x + DEFAULT_AREA_LENGTH; + Component leftComp = container.getLeftComp(backupBound.x, backupBound.y); + leftComps.add(leftComp); + //先找上侧对齐时(y相等)的左右两边组件 + int ry = backupBound.y; + int ly = leftComp.getY(); + int min = margin.getTop(); + int max = container.getHeight() - margin.getBottom(); + while (ry >= min && ly >= min) { + if (ry == ly) { + break; + } else { + if (ry > ly) { + rightComp = container.getTopComp(rightx, ry); + ry = rightComp.getY(); + rightComps.add(rightComp); + } else { + leftComp = container.getTopComp(leftx, ly); + ly = leftComp.getY(); + leftComps.add(leftComp); + } + } + } + // 下侧对齐时(y+h相等)两边组件 + ry = backupBound.y + backupBound.height; + ly = leftComps.get(0).getY() + leftComps.get(0).getHeight(); + while (ry <= max && ly <= max) { + if (ry == ly) { + break; + } else { + if (ry > ly) { + leftComp = container.getComponentAt(leftx, ly + DEFAULT_AREA_LENGTH + actualVal); + ly = leftComp.getY() + leftComp.getHeight(); + leftComps.add(leftComp); + } else { + rightComp = container.getComponentAt(rightx, ry + DEFAULT_AREA_LENGTH + actualVal); + ry = rightComp.getY() + rightComp.getHeight(); + rightComps.add(rightComp); + } + } + } + dealHorDirection(backupBound.x, difference); + } + + // 右侧边框拉伸,循环找出对齐的两侧控件 + private void dealDirectionAtRight(Rectangle backupBound, int difference, Component creator) { + leftComps.add(creator); + Component leftComp = null; + int leftx = backupBound.x + backupBound.width - DEFAULT_AREA_LENGTH; + // 取右侧边框右面的组件x值 + int rightx = backupBound.x + backupBound.width + DEFAULT_AREA_LENGTH + actualVal; + Component rightComp = container.getRightComp(backupBound.x, backupBound.y, backupBound.width); + rightComps.add(rightComp); + int ly = backupBound.y, ry = rightComp.getY(); + int min = margin.getTop(); + int max = container.getHeight() - margin.getBottom(); + while (ry >= min && ly >= min) { + if (ry == ly) { + break; + } else { + if (ry > ly) { + rightComp = container.getTopComp(rightx, ry); + ry = rightComp.getY(); + rightComps.add(rightComp); + } else { + leftComp = container.getTopComp(leftx, ly); + ly = leftComp.getY(); + leftComps.add(leftComp); + } + } + } + ly = backupBound.y + backupBound.height; + ry = rightComps.get(0).getY() + rightComps.get(0).getHeight(); + while (ry <= max && ly <= max) { + if (ry == ly) { + break; + } else { + if (ry > ly) { + leftComp = container.getComponentAt(leftx, ly + DEFAULT_AREA_LENGTH + actualVal); + ly = leftComp.getY() + leftComp.getHeight(); + leftComps.add(leftComp); + } else { + rightComp = container.getComponentAt(rightx, ry + DEFAULT_AREA_LENGTH + actualVal); + ry = rightComp.getY() + rightComp.getHeight(); + rightComps.add(rightComp); + } + } + } + dealHorDirection(backupBound.x + backupBound.width + actualVal, difference); + } + + /** + * 水平方向上拉伸边框的处理 + */ + private void dealHorDirection(int objx, int difference) { + if (difference > 0) { + difference = Math.min(getMinWidth(rightComps) - minWidth, difference); + } else { + difference = Math.max(difference, minWidth - getMinWidth(leftComps)); + } + //重新计算左右两侧组件size、point + if (calculateLefttRelatComponent(difference)) { + calculateRightRelatComponent(objx + difference, -difference); + } + } + + // 上侧边框拉伸,循环找出对齐的两侧控件 + private void dealDirectionAtTop(Rectangle backupBound, int difference, Component creator) { + downComps.add(creator); + // 取上侧边框上面的组件用的y值 + int topy = backupBound.y - DEFAULT_AREA_LENGTH - actualVal; + // 上侧边框下面的组件y值 + int bottomy = backupBound.y + DEFAULT_AREA_LENGTH; + Component topComp = container.getTopComp(backupBound.x, backupBound.y); + upComps.add(topComp); + Component bottomComp = null; + int min = margin.getLeft(); + int max = container.getWidth() - margin.getRight(); + //先找左侧侧对齐时(x相等)的上下两边组件 + int ux = topComp.getX(); + int dx = backupBound.x; + while (ux >= min && dx >= min) { + if (ux == dx) { + break; + } else { + if (ux < dx) { + bottomComp = container.getLeftComp(dx, bottomy); + dx = bottomComp.getX(); + downComps.add(bottomComp); + } else { + topComp = container.getLeftComp(ux, topy); + ux = topComp.getX(); + upComps.add(topComp); + } + } + } + // 右侧对齐时(x+w相等)两边组件 + ux = upComps.get(0).getX() + upComps.get(0).getWidth(); + dx = backupBound.x + backupBound.width; + while (ux <= max && dx <= max) { + if (ux == dx) { + break; + } else { + if (ux < dx) { + topComp = container.getComponentAt(ux + DEFAULT_AREA_LENGTH + actualVal, topy); + ux = topComp.getX() + topComp.getWidth(); + upComps.add(topComp); + } else { + bottomComp = container.getComponentAt(dx + DEFAULT_AREA_LENGTH + actualVal, bottomy); + dx = bottomComp.getX() + bottomComp.getWidth(); + downComps.add(bottomComp); + } + } + } + + dealVertiDirection(backupBound.y, difference); + } + + // 下侧边框拉伸,循环找出对齐的两侧控件 + private void dealDirectionABottom(Rectangle backupBound, int difference, Component creator) { + upComps.add(creator); + Component topComp = null; + Component bottomComp = container.getBottomComp(backupBound.x, backupBound.y, backupBound.height); + // 下侧边框下面的组件y坐标 + int bottomy = backupBound.y + backupBound.height + DEFAULT_AREA_LENGTH + actualVal; + // 取下侧边框上面的组件用的y值 + int topy = backupBound.y + backupBound.height - DEFAULT_AREA_LENGTH; + downComps.add(bottomComp); + int dx = bottomComp.getX(); + int ux = backupBound.x; + int min = margin.getLeft(); + int max = container.getWidth() - margin.getRight(); + while (ux >= min && dx >= min) { + if (ux == dx) { + break; + } else { + if (ux < dx) { + bottomComp = container.getLeftComp(dx, bottomy); + dx = bottomComp.getX(); + downComps.add(bottomComp); + } else { + topComp = container.getLeftComp(ux, topy); + ux = topComp.getX(); + upComps.add(topComp); + } + } + } + dx = downComps.get(0).getX() + downComps.get(0).getWidth(); + ux = backupBound.x + backupBound.width; + while (ux <= max && dx <= max) { + if (ux == dx) { + break; + } else { + if (ux < dx) { + topComp = container.getComponentAt(ux + DEFAULT_AREA_LENGTH + actualVal, topy); + ux = topComp.getX() + topComp.getWidth(); + upComps.add(topComp); + } else { + bottomComp = container.getComponentAt(dx + DEFAULT_AREA_LENGTH + actualVal, bottomy); + dx = bottomComp.getX() + bottomComp.getWidth(); + downComps.add(bottomComp); + } + } + } + dealVertiDirection(backupBound.y + backupBound.height + actualVal, difference); + } + + /** + * 垂直方向上拉伸边框的处理 + */ + private void dealVertiDirection(int objY, int difference) { + if (difference > 0) { + difference = Math.min(getMinHeight(downComps) - minHeight, difference); + } else { + difference = Math.max(difference, minHeight - getMinHeight(upComps)); + } + //重新计算上下两侧组件size、point + if (calculateUpRelatComponent(difference)) { + calculateDownRelatComponent(objY + difference, -difference); + } + } + + /** + * 新拖入组件时,计算调整其他关联组件位置大小 + * + * @param child 新拖入的组件 + * @param x 鼠标所在x坐标 + * @param y 鼠标所在y坐标 + */ + public void fix(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()); + } else if (isCrossPointArea(parentComp, x, y)) { + //交叉区域插入组件时,根据具体位置进行上下或者左右或者相邻三个组件的位置大小插入 + fixCrossPointArea(parentComp, child, x, y); + return; + } else if (isTrisectionArea(parentComp, x, y)) { + // 在边界三等分区域,就不再和组件二等分了 + fixTrisect(parentComp, child, x, y); + return; + } else { + fixHalve(parentComp, child, x, y); + } + } + + /** + * 平分,正常情况拖入组件时,按照上1/4区域、下1/4区域为上下平分,中左侧1/2区域、中右侧1/2区域为左右平分 + */ + protected void fixHalve(Component currentComp, XCreator child, int x, int y) { + super.fixHalve(currentComp, child, x, y); + } + + /** + * 组件交叉区域进行插入时,调整受到变动的其他组件,之前是交叉区域插入也按照三等分逻辑,后面测试中发现有bug,改为和bi一样的鼠标所在侧平分 + * 默认左上角、右下角区域是垂直方向插入组件 + * 右上角和左下角是水平方向插入组件,这样避免田字块时重复 + */ + protected void fixCrossPointArea(Component currentComp, XCreator child, int x, int y) { + super.fixCrossPointArea(currentComp, child, x, y); + } + + /** + * 三等分区域时,调整相关联的组件 + * + * @param currentComp 鼠标所在组件 + * @param child 待插入组件 + */ + protected void fixTrisect(Component currentComp, XCreator child, int x, int y) { + super.fixTrisect(currentComp, child, x, y); + } + + /** + * 删除组件或者重新拖动时,其它组件重新计算位置大小 + */ + protected void delete(XCreator creator, int creatorWidth, int creatorHeight) { + int x = creator.getX(); + int y = creator.getY(); + recalculateChildrenSize(x, y, creatorWidth, creatorHeight); + } + + /** + * 重新计算内部组件大小 + * + * @param x 坐标x + * @param y 坐标y + * @param creatorWidth 删除的组件之前所在布局的宽度 + * @param creatorHeight 删除的组件之前所在布局的高度 + */ + public void recalculateChildrenSize(int x, int y, int creatorWidth, int creatorHeight) { + if (container.getComponentCount() == 0) { + return; + } else { + initCompsList(); + int width = creatorWidth; + int height = creatorHeight; + calculateRelatedComponent(x, y, width, height); + if (!rightComps.isEmpty() && getAllHeight(rightComps) == height) { + calculateRightRelatComponent(x, width + actualVal); + } else if (!leftComps.isEmpty() && getAllHeight(leftComps) == height) { + calculateLefttRelatComponent(width + actualVal); + } else if (!downComps.isEmpty() && getAllWidth(downComps) == width) { + calculateDownRelatComponent(y, height + actualVal); + } else if (!upComps.isEmpty() && getAllWidth(upComps) == width) { + calculateUpRelatComponent(height + actualVal); + } else { + // 由于布局三等分的存在,可能会出现删除组件时,找不到关联的组件填充,此时特殊处理 + calculateNoRelatedComponent(x, y, width, height); + } + } + clearCompsList(); + } + + /** + * 四侧边框都没有对齐的,此时每侧有且只有一个方向不对齐 + * 比如右侧不对齐,那么必然右上或右下没对齐,不会同时不对齐,否则不会出现此情况 + * 正常删除是右左下上优先原则,这边目前只调整右侧以至填充完整, + * 右侧不对齐时的组件先上下微调,再向左侧填充。 + */ + private void calculateNoRelatedComponent(int x, int y, int width, int height) { + // 只有最后一个组件了,直接删除 + if (container.getComponentCount() <= 1) { + return; + } + // 删除当前组件时,由于没有刚好边框对齐的其他组件,这时候需要调整的组件 + Component rightComp = container.getRightComp(x, y, width); + if (rightComp == null) { + return; + } + + int ry = rightComp.getY(); + clearCompsList(); + initCompsList(); + Rectangle rec = new Rectangle(x, y, width, height); + if (ry != y) { + calculateNoRelatedWhileRightTop(rec, rightComp); + } else { + calculateNoRelatedWhileRightBott(rec, rightComp); + } + + } + + private void calculateNoRelatedWhileRightTop(Rectangle bound, Component rcomp) { + if (rcomp == null) { + return; + } + + int ry = rcomp.getY(); + int rh = rcomp.getHeight(); + int rw = rcomp.getWidth(); + int dh = bound.y - ry - actualVal; + // 没法缩小高度 + if (dh < minHeight) { + // 没法缩小时则拉伸rcomp的上边框 + dealDirectionAtTop(rcomp.getBounds(), dh + actualVal, rcomp); + //调整的时候可能有组件达到最小高度,判断下 + if (rcomp.getY() != bound.y) { + clearCompsList(); + initCompsList(); + dealDirectionAtTop(rcomp.getBounds(), bound.y - rcomp.getY() - minHeight - actualVal, rcomp); + ry = rcomp.getY(); + int rx = rcomp.getX(); + rcomp.setBounds(rx, ry, rw, minHeight); + recalculateChildrenSize(rx, bound.y, rw, rh - dh - actualVal); + recalculateChildrenSize(bound.x, bound.y, bound.width, bound.height); + return; + } + } else { + // 右侧控件底部对齐 + if (rh + ry == bound.y + bound.height) { + rcomp.setSize(rw, dh); + bound.width += rw; + bound.width += actualVal; + } else { + recalculateChildrenSize(bound.x, ry + rh + actualVal, bound.width, bound.height + bound.y - rh - ry - actualVal); + recalculateChildrenSize(bound.x, bound.y, bound.width, ry + rh - bound.y); + return; + } + } + recalculateChildrenSize(bound.x, bound.y, bound.width, bound.height); + } + + private void calculateNoRelatedWhileRightBott(Rectangle bound, Component rcomp) { + rcomp = container.getBottomRightComp(bound.x, bound.y, bound.height, bound.width); + int ry = rcomp.getY(); + int rh = rcomp.getHeight(); + int rw = rcomp.getWidth(); + int dh = ry + rh - bound.y - bound.height - actualVal; + if (dh < minHeight) { + dealDirectionABottom(rcomp.getBounds(), -dh - actualVal, rcomp); + //调整的时候可能有组件达到最小高度,判断下 + if (rcomp.getHeight() + ry != bound.y + bound.height) { + clearCompsList(); + initCompsList(); + dh = ry + rcomp.getHeight() - bound.y - bound.height - actualVal; + dealDirectionABottom(rcomp.getBounds(), minHeight - dh, rcomp); + rh = rcomp.getHeight(); + int rx = rcomp.getX(); + rcomp.setBounds(rx, bound.y + bound.height + actualVal, rw, minHeight); + recalculateChildrenSize(rx, ry, rw, rh - minHeight - actualVal); + recalculateChildrenSize(bound.x, bound.y, bound.width, bound.height); + return; + } + } else { + if (ry == bound.y) { + rcomp.setBounds(rcomp.getX(), bound.y + bound.height + actualVal, rw, dh); + bound.width += rw; + bound.width += actualVal; + } else { + recalculateChildrenSize(bound.x, bound.y, bound.width, ry - bound.y - actualVal); + recalculateChildrenSize(bound.x, ry, bound.width, bound.height - ry + bound.y); + return; + } + } + recalculateChildrenSize(bound.x, bound.y, bound.width, bound.height); + } + + private int getMinWidth(List comps) { + if (comps.isEmpty()) { + return 0; + } + int minWidth = container.getWidth() - margin.getLeft() - margin.getRight(); + for (int i = 0, size = comps.size(); i < size; i++) { + minWidth = minWidth > comps.get(i).getWidth() ? comps.get(i).getWidth() : minWidth; + } + return minWidth; + } + + private int getMinHeight(List comps) { + if (comps.isEmpty()) { + return 0; + } + int minH = container.getHeight() - margin.getTop() - margin.getBottom(); + for (int i = 0, size = comps.size(); i < size; i++) { + minH = minH > comps.get(i).getHeight() ? comps.get(i).getHeight() : minH; + } + return minH; + } + + // 删除时计算待删除组件上下侧的组件是否何其对齐 + private int getAllHeight(List comps) { + int allHeight = 0; + if (comps.isEmpty()) { + return allHeight; + } + int n = comps.size(); + for (int i = 0; i < n; i++) { + allHeight += comps.get(i).getHeight(); + } + allHeight += (n - 1) * actualVal; + return allHeight; + } + + private int getAllWidth(List comps) { + int allWidth = 0; + if (comps.isEmpty()) { + return allWidth; + } + int n = comps.size(); + for (int i = 0; i < n; i++) { + allWidth += comps.get(i).getWidth(); + } + allWidth += (n - 1) * actualVal; + return allWidth; + } + + /** + * 获取有哪些相关联的组件 + */ + protected void calculateRelatedComponent(int objX, int objY, int objWidth, int objHeight) { + int count = container.getComponentCount(); + for (int i = 0; i < count; i++) { + Component relatComp = container.getComponent(i); + int rx = relatComp.getX(); + int ry = relatComp.getY(); + int rwidth = relatComp.getWidth(); + int rheight = relatComp.getHeight(); + int verti = ry - objY; + int hori = rx - objX; + boolean isHori = verti >= 0 && objHeight >= (rheight + verti); + boolean isVerti = hori >= 0 && objWidth >= (rwidth + hori); + if (isHori && (objX + objWidth + actualVal) == rx) { + rightComps.add(relatComp); + } else if (isHori && objX == (rx + rwidth + actualVal)) { + leftComps.add(relatComp); + } else if (isVerti && (objY + objHeight + actualVal) == ry) { + downComps.add(relatComp); + } else if (isVerti && objY == (ry + rheight + actualVal)) { + upComps.add(relatComp); + } + } + } + + /** + * 拖拽组件时遍历某一侧组件得到该侧组件能够缩放的最小宽度,tab布局最小宽度 = 内部组件数 * 单个组件最小宽度 + * + * @param list 某一侧组件的集合 如:leftComps + * @return int 最小宽度 + */ + private int getCompsMinWidth(List list) { + return getMaxCompsNum(list, true) * WLayout.MIN_WIDTH; + } + + /** + * 拖拽组件遍历某一侧得到该侧组件能够缩放的最小高度,tab布局最小高度 = 内部组件数 * 单个组件最小高度 + 标题高度 + * + * @param list 某一侧组件集合 + * @return int 最小高度 + */ + private int getCompsMinHeight(List list) { + for (int i = 0; i < list.size(); i++) { + XCreator creator = (XCreator) list.get(i); + ArrayList childrenList = creator.getTargetChildrenList(); + if (!childrenList.isEmpty()) { + return getMaxCompsNum(list, false) * WLayout.MIN_HEIGHT + WCardMainBorderLayout.TAB_HEIGHT; + } + } + return WLayout.MIN_HEIGHT; + } + + /** + * 根据子组件的横(纵)坐标获取某一侧组件的最大内部组件数 + * + * @param list 某一侧组件集合 + * @param isHor 是否以横坐标为准 + * @return int 最大内部组件数 + */ + private int getMaxCompsNum(List list, boolean isHor) { + int maxCompNums = 1; + for (int i = 0, size = list.size(); i < size; i++) { + XCreator creator = (XCreator) list.get(i); + ArrayList childrenList = creator.getTargetChildrenList(); + int count = childrenList.size(); + if (count > 0) { + for (int j = 0; j < count; j++) { + XWTabFitLayout tabLayout = (XWTabFitLayout) childrenList.get(j); + int[] positions = isHor ? tabLayout.getHors(true) : tabLayout.getVeris(true); + int compNums = positions.length - 1; + maxCompNums = Math.max(compNums, maxCompNums); + } + } + } + return maxCompNums; + } + + /** + * 根据偏移量缩放内部组件大小,(tab布局用到) + * + * @param creator tab布局 + * @param offset 偏移量 + * @param isHor 是否为横向拖拽 + */ + private void adjustCompsSize(XCreator creator, int offset, boolean isHor) { + ArrayList childrenList = creator.getTargetChildrenList(); + int size = childrenList.size(); + if (size > 0) { + for (int j = 0; j < size; j++) { + XWTabFitLayout tabLayout = (XWTabFitLayout) childrenList.get(j); + tabLayout.setBackupBound(tabLayout.getBounds()); + int refSize = isHor ? tabLayout.getWidth() : tabLayout.getHeight(); + double percent = (double) offset / refSize; + if (percent < 0 && !tabLayout.canReduce(percent)) { + return; + } + setAdjustedSize(tabLayout, offset, isHor); + for (int m = 0; m < tabLayout.getComponentCount(); m++) { + XCreator childCreator = tabLayout.getXCreator(m); + BoundsWidget wgt = tabLayout.toData().getBoundsWidget(childCreator.toData()); + wgt.setBounds(tabLayout.getComponent(m).getBounds()); + } + adjustCreatorsSize(percent, tabLayout, isHor); + } + + } + } + + // 纵向拖拽,先将tab布局的高度设置为拖拽后的实际高度 + private void setAdjustedHeight(XWTabFitLayout tabLayout, int offset) { + tabLayout.setSize(tabLayout.getWidth(), tabLayout.getHeight() + offset); + } + + // 横向拖拽,先将tab布局的宽度设置为拖拽后的实际宽度 + private void setAdjustedSize(XWTabFitLayout tabLayout, int offset, boolean isHor) { + if (offset < 0) { + // 缩放时需要备份原tab布局宽高 + tabLayout.setReferDim(new Dimension(tabLayout.getWidth(), tabLayout.getHeight())); + } + if (isHor) { + tabLayout.setSize(tabLayout.getWidth() + offset, tabLayout.getHeight()); + return; + } + setAdjustedHeight(tabLayout, offset); + } + + // 按照拖拽偏移量,对tab布局进行缩放 + private void adjustCreatorsSize(double percent, XWTabFitLayout tabLayout, boolean isHor) { + if (isHor) { + tabLayout.adjustCreatorsWidth(percent); + return; + } + tabLayout.adjustCreatorsHeight(percent); + } + + + /** + * 删除或拉伸控件右边框 调整右侧组件位置大小 + * + * @param objX 调整后的坐标x + * @param objWidth 调整后的宽度 + */ + protected void calculateRightRelatComponent(int objX, int objWidth) { + int count = rightComps.size(); + for (int i = 0; i < count; i++) { + XCreator creator = (XCreator) rightComps.get(i); + adjustCompsSize(creator, objWidth, true); + int ry = creator.getY(); + int rwidth = creator.getWidth(); + int rheight = creator.getHeight(); + creator.setLocation(objX, ry); + creator.setSize(rwidth + objWidth, rheight); + } + } + + /** + * 实际拖拽偏移量是否超出了可调整的宽度范围 + * + * @param offset 实际偏移量 + * @return boolean 是否超出调整范围 + */ + private boolean isBeyondAdjustWidthScope(int offset) { + boolean isBeyondScope = false; + isBeyondScope = offset < 0 ? isBeyondWidthScope(offset, leftComps) : isBeyondWidthScope(offset, rightComps); + return isBeyondScope; + } + + // 实际拖拽偏移量是否超出某一侧的可调整宽度 + private boolean isBeyondWidthScope(int offset, List compsList) { + int compMinWidth = getCompsMinWidth(compsList); + for (int i = 0; i < compsList.size(); i++) { + XCreator creator = (XCreator) compsList.get(i); + if (Math.abs(offset) > (creator.getWidth() - compMinWidth)) { + return true; + } + } + return false; + } + + /** + * 删除或拉伸控件左边框时 调整左侧的组件位置大小; + */ + protected boolean calculateLefttRelatComponent(int objWidth) { + if (isBeyondAdjustWidthScope(objWidth)) { + return false; + } + int count = leftComps.size(); + for (int i = 0; i < count; i++) { + XCreator creator = (XCreator) leftComps.get(i); + adjustCompsSize(creator, objWidth, true); + int rwidth = creator.getWidth(); + int rheight = creator.getHeight(); + creator.setSize(rwidth + objWidth, rheight); + } + return true; + } + + /** + * 删除或拉伸下边框 调整下方的组件位置大小 + */ + protected void calculateDownRelatComponent(int objY, int objHeight) { + int count = downComps.size(); + for (int i = 0; i < count; i++) { + XCreator creator = (XCreator) downComps.get(i); + adjustCompsSize(creator, objHeight, false); + int rx = creator.getX(); + int rwidth = creator.getWidth(); + int rheight = creator.getHeight(); + creator.setLocation(rx, objY); + creator.setSize(rwidth, rheight + objHeight); + } + } + + /** + * 实际拖拽偏移量是否超出了可调整的高度范围 + * + * @param offset 实际偏移量 + * @return boolean 是否超出调整范围 + */ + private boolean isBeyondAdjustHeightScope(int offset) { + boolean isBeyondScope = false; + isBeyondScope = offset < 0 ? isBeyondHeightScope(offset, upComps) : isBeyondHeightScope(offset, downComps); + return isBeyondScope; + } + + // 实际拖拽偏移量是否超出某一侧的可调整高度 + private boolean isBeyondHeightScope(int offset, List compsList) { + int minHeight = getCompsMinHeight(compsList); + for (int i = 0; i < compsList.size(); i++) { + XCreator creator = (XCreator) compsList.get(i); + if (Math.abs(offset) > (creator.getHeight() - minHeight)) { + return true; + } + } + return false; + } + + /** + * 删除或拉伸上边框 调整上方的组件位置大小 + */ + protected boolean calculateUpRelatComponent(int objHeight) { + if (isBeyondAdjustHeightScope(objHeight)) { + return false; + } + int count = upComps.size(); + for (int i = 0; i < count; i++) { + XCreator creator = (XCreator) upComps.get(i); + adjustCompsSize(creator, objHeight, false); + int rwidth = creator.getWidth(); + int rheight = creator.getHeight(); + creator.setSize(rwidth, rheight + objHeight); + } + return true; + } + + /** + * 不调整,只计算位置 + * + * @return child的位置 + */ + public int[] getChildPosition(Component currentComp, XCreator child, int x, int y) { + return super.getChildPosition(currentComp, child, x, y); + } + + @Override + public ConstraintsGroupModel getLayoutConstraints(XCreator creator) { + return new FRFitLayoutConstraints((XWFitLayout) container, creator); + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRTabFitLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRTabFitLayoutAdapter.java index 12a5ad55b..352a3ba7a 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRTabFitLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRTabFitLayoutAdapter.java @@ -1,107 +1,104 @@ -/** - * - */ -package com.fr.design.designer.beans.adapters.layout; - - -import com.fr.design.beans.GroupModel; -import com.fr.design.designer.creator.XCreator; -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.cardlayout.XWCardLayout; -import com.fr.design.designer.creator.cardlayout.XWCardMainBorderLayout; -import com.fr.design.designer.creator.cardlayout.XWTabFitLayout; -import com.fr.design.designer.properties.FRTabFitLayoutPropertiesGroupModel; -import com.fr.design.utils.ComponentUtils; -import com.fr.form.ui.LayoutBorderStyle; -import com.fr.form.ui.container.WBorderLayout; -import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; -import com.fr.general.ComparatorUtils; - -import java.awt.*; - -/** - * tab布局tabFit适配器 - * - * @author focus - * @date 2014-6-24 - */ -public class FRTabFitLayoutAdapter extends FRFitLayoutAdapter { - //标题栏高度对tab布局内部组件的y坐标造成了偏移 - private static int TAB_HEIGHT = 40; - - /** - * 构造函数 - * - * @param container XWTabFitLayout容器 - */ - public FRTabFitLayoutAdapter(XLayoutContainer container) { - super(container); - } - - /** - * 返回布局自身属性,方便一些特有设置在layout刷新时处理 - */ - @Override - public GroupModel getLayoutProperties() { - XWTabFitLayout xfl = (XWTabFitLayout) container; - return new FRTabFitLayoutPropertiesGroupModel(xfl); - } - - /** - * 组件的ComponentAdapter在添加组件时,如果发现布局管理器不为空,会继而调用该布局管理器的 - * addComp方法来完成组件的具体添加。在该方法内,布局管理器可以提供额外的功能。 - * - * @param creator 被添加的新组件 - * @param x 添加的位置x,该位置是相对于container的 - * @param y 添加的位置y,该位置是相对于container的 - * @return 是否添加成功,成功返回true,否则false - */ - @Override - public boolean addBean(XCreator creator, int x, int y) { - // 经过accept判断后,container会被改变,先备份 - XLayoutContainer backUpContainer = container; - Rectangle rect = ComponentUtils.getRelativeBounds(container); - int posX = x - rect.x; - int posY = y - rect.y; - if (!accept(creator, posX, posY)) { - return false; - } - // posX,posY是新拖入组件相对于容器的位置,若在tab布局的边缘,则需要把新组件添加到l - // 父层自适应布局中,这时候的添加位置就是tab布局所在的位置 - if (this.intersectsEdge(posX, posY, backUpContainer)) { - if (!ComparatorUtils.equals(backUpContainer.getOuterLayout(), backUpContainer.getBackupParent())) { - XWTabFitLayout tabLayout = (XWTabFitLayout) backUpContainer; - y = adjustY(y, tabLayout); - } - addComp(creator, x, y); - ((XWidgetCreator) creator).recalculateChildrenSize(); - return true; - } - // 如果不在边缘,容器为本自适应布局,增加组件的位置就是相对于容器的位置 - addComp(creator, posX, posY); - ((XWidgetCreator) creator).recalculateChildrenSize(); - return true; - } - - // tab布局的纵坐标受到tab高度的影响,判断的上边界取得是里面XWTabFitLayout的上边界, - // 实际计算的时候的纵坐标用了外层的CardMainBorerLayout,需要将tab高度减掉 - //将y值变为相对坐标以实现获取到鼠标drop位置的控件 - //TODO 可以直接在这边将x,y都变成相对坐标,这样在后面判断拖进来的新控件放置方式的时候就不用再判断了 - private int adjustY(int y, XWTabFitLayout tabLayout) { - XWCardLayout cardLayout = (XWCardLayout) tabLayout.getBackupParent(); - LayoutBorderStyle style = cardLayout.toData().getBorderStyle(); - if (container.getLocation().y == WBorderLayout.DEFAULT_SIZE) { - 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); - } +/** + * + */ +package com.fr.design.designer.beans.adapters.layout; + + +import com.fr.design.beans.GroupModel; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XLayoutContainer; +import com.fr.design.designer.creator.XWidgetCreator; +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.properties.FRTabFitLayoutPropertiesGroupModel; +import com.fr.design.utils.ComponentUtils; +import com.fr.form.ui.LayoutBorderStyle; +import com.fr.form.ui.container.WBorderLayout; +import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; +import com.fr.general.ComparatorUtils; + +import java.awt.*; + +/** + * tab布局tabFit适配器 + * + * @author focus + * @date 2014-6-24 + */ +public class FRTabFitLayoutAdapter extends FRFitLayoutAdapter { + + /** + * 构造函数 + * + * @param container XWTabFitLayout容器 + */ + public FRTabFitLayoutAdapter(XLayoutContainer container) { + super(container); + } + + /** + * 返回布局自身属性,方便一些特有设置在layout刷新时处理 + */ + @Override + public GroupModel getLayoutProperties() { + XWTabFitLayout xfl = (XWTabFitLayout) container; + return new FRTabFitLayoutPropertiesGroupModel(xfl); + } + + /** + * 组件的ComponentAdapter在添加组件时,如果发现布局管理器不为空,会继而调用该布局管理器的 + * addComp方法来完成组件的具体添加。在该方法内,布局管理器可以提供额外的功能。 + * + * @param creator 被添加的新组件 + * @param x 添加的位置x,该位置是相对于container的 + * @param y 添加的位置y,该位置是相对于container的 + * @return 是否添加成功,成功返回true,否则false + */ + @Override + public boolean addBean(XCreator creator, int x, int y) { + // 经过accept判断后,container会被改变,先备份 + XLayoutContainer backUpContainer = container; + Rectangle rect = ComponentUtils.getRelativeBounds(container); + int posX = x - rect.x; + int posY = y - rect.y; + if (!accept(creator, posX, posY)) { + return false; + } + // posX,posY是新拖入组件相对于容器的位置,若在tab布局的边缘,则需要把新组件添加到l + // 父层自适应布局中,这时候的添加位置就是tab布局所在的位置 + if (this.intersectsEdge(posX, posY, backUpContainer)) { + if (!ComparatorUtils.equals(backUpContainer.getOuterLayout(), backUpContainer.getBackupParent())) { + XWTabFitLayout tabLayout = (XWTabFitLayout) backUpContainer; + y = adjustY(y, tabLayout); + } + addComp(creator, x, y); + ((XWidgetCreator) creator).recalculateChildrenSize(); + return true; + } + // 如果不在边缘,容器为本自适应布局,增加组件的位置就是相对于容器的位置 + addComp(creator, posX, posY); + ((XWidgetCreator) creator).recalculateChildrenSize(); + return true; + } + + // tab布局的纵坐标受到tab高度的影响,判断的上边界取得是里面XWTabFitLayout的上边界, + // 实际计算的时候的纵坐标用了外层的CardMainBorerLayout,需要将tab高度减掉 + //将y值变为相对坐标以实现获取到鼠标drop位置的控件 + //TODO 可以直接在这边将x,y都变成相对坐标,这样在后面判断拖进来的新控件放置方式的时候就不用再判断了 + private int adjustY(int y, XWTabFitLayout tabLayout) { + XWCardLayout cardLayout = (XWCardLayout) tabLayout.getBackupParent(); + LayoutBorderStyle style = cardLayout.toData().getBorderStyle(); + if (container.getLocation().y == WBorderLayout.DEFAULT_SIZE) { + 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); + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java b/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java index 161fe6bd5..088f29a0a 100644 --- a/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java +++ b/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java @@ -3,19 +3,17 @@ */ package com.fr.design.designer.beans.location; -import java.awt.*; - import com.fr.design.beans.location.Absorptionline; import com.fr.design.beans.location.MoveUtils; import com.fr.design.designer.creator.*; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.FormSelection; 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.WParameterLayout; import com.fr.form.ui.widget.BoundsWidget; +import java.awt.*; + /** * @author richer * @since 6.5.3 @@ -26,197 +24,184 @@ public abstract class AccessDirection implements Direction { private int ymin; private int xmin; - abstract int getCursor(); - - protected abstract Rectangle getDraggedBounds(int dx, int dy, Rectangle current_bounds, FormDesigner designer, - Rectangle oldbounds); - - protected int[] sorption(int x, int y,Rectangle current_bounds, FormDesigner designer) { - // 自适应布局不需要吸附线,但需要对齐线,对齐线后面处理 - if (!designer.hasWAbsoluteLayout()) { - designer.getStateModel().setEquidistantLine(null); - designer.getStateModel().setXAbsorptionline(null); - designer.getStateModel().setYAbsorptionline(null); - return new int[] { x, y }; - } else { - int posy = current_bounds.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 current_bounds,FormDesigner designer) { - if (x < 0) { - x = 0; - } else if (x > designer.getRootComponent().getWidth() && designer.getSelectionModel().hasSelectionComponent()) { - x = designer.getRootComponent().getWidth(); - } + abstract int getCursor(); + + protected abstract Rectangle getDraggedBounds(int dx, int dy, Rectangle currentBounds, FormDesigner designer, + Rectangle oldBounds); + + protected int[] sorption(int x, int y, Rectangle currentBounds, FormDesigner designer) { + // 自适应布局不需要吸附线,但需要对齐线,对齐线后面处理 + if (!designer.hasWAbsoluteLayout()) { + designer.getStateModel().setEquidistantLine(null); + designer.getStateModel().setXAbsorptionline(null); + designer.getStateModel().setYAbsorptionline(null); + return new int[]{x, y}; + } else { + Point relativePoint = getRelativePoint(x, y, currentBounds, designer); + sorptionPoint(relativePoint, currentBounds, designer); + return new int[]{relativePoint.x, relativePoint.y}; + } + + } + + protected Point getRelativePoint(int x, int y, Rectangle currentBounds, FormDesigner designer) { + if (x < 0) { + x = 0; + } else if (x > designer.getRootComponent().getWidth() && designer.getSelectionModel().hasSelectionComponent()) { + x = designer.getRootComponent().getWidth(); + } //参数面板可以无下限拉长 - if (y < 0) { - y = 0; - } else if (y > designer.getRootComponent().getHeight() + designer.getParaHeight() && designer.getSelectionModel().hasSelectionComponent() + if (y < 0) { + y = 0; + } else if (y > designer.getRootComponent().getHeight() + designer.getParaHeight() && designer.getSelectionModel().hasSelectionComponent() && !designer.getSelectionModel().getSelection().getSelectedCreator().acceptType(XWParameterLayout.class)) { - y = designer.getRootComponent().getHeight() + designer.getParaHeight(); - } - return new Point(x, y); - } - - protected void sorptionPoint(Point point, Rectangle current_bounds,FormDesigner designer) { - boolean findInX = current_bounds.getWidth() <= MoveUtils.SORPTION_UNIT ? true : false; - boolean findInY = current_bounds.getHeight() <= MoveUtils.SORPTION_UNIT ? true : false; - WAbsoluteLayout layout =getLayout(designer); - FormSelection selection = designer.getSelectionModel().getSelection(); -// boolean isWidgetsIntersect = false; - for (int i = 0, count = layout.getWidgetCount(); i < count; i++) { - BoundsWidget temp = (BoundsWidget) layout.getWidget(i); - if (!temp.isVisible() || selection.contains(temp.getWidget())) { - continue; - } - Rectangle bounds = getWidgetRelativeBounds(temp.getBounds(), selection); - if (!findInX) { - int x1 = bounds.x; - if (Math.abs(x1 - point.x) <= MoveUtils.SORPTION_UNIT) { - point.x = x1; - findInX = true; - } - int x2 = bounds.x + bounds.width; - if (Math.abs(x2 - point.x) <= MoveUtils.SORPTION_UNIT) { - point.x = x2; - findInX = true; - } - } - if (!findInY) { - int y1 = bounds.y; - if (Math.abs(y1 - point.y) <= MoveUtils.SORPTION_UNIT) { - point.y = y1; - findInY = true; - } - int y2 = bounds.y + bounds.height; - if (Math.abs(y2 - point.y) <= MoveUtils.SORPTION_UNIT) { - point.y = y2; - findInY = true; - } - - } - if (findInX && findInY) { - break; - } - -// if (current_bounds.intersects(bounds) && !(layout instanceof WParameterLayout)) { -// isWidgetsIntersect = true; -// } + y = designer.getRootComponent().getHeight() + designer.getParaHeight(); } -// processRectangleIntersects(designer, point.x, point.y, isWidgetsIntersect); - setDesignerStateModelProperties(designer, findInX, findInY, current_bounds, point); + return new Point(x, y); + } + + protected void sorptionPoint(Point point, Rectangle currentBounds, FormDesigner designer) { + boolean findInX = currentBounds.getWidth() <= MoveUtils.SORPTION_UNIT; + boolean findInY = currentBounds.getHeight() <= MoveUtils.SORPTION_UNIT; + WAbsoluteLayout layout = getLayout(designer); + FormSelection selection = designer.getSelectionModel().getSelection(); + for (int i = 0, count = layout.getWidgetCount(); i < count; i++) { + BoundsWidget temp = (BoundsWidget) layout.getWidget(i); + if (!temp.isVisible() || selection.contains(temp.getWidget())) { + continue; + } + Rectangle bounds = getWidgetRelativeBounds(temp.getBounds(), selection); + if (!findInX) { + int x1 = bounds.x; + if (Math.abs(x1 - point.x) <= MoveUtils.SORPTION_UNIT) { + point.x = x1; + findInX = true; + } + int x2 = bounds.x + bounds.width; + if (Math.abs(x2 - point.x) <= MoveUtils.SORPTION_UNIT) { + point.x = x2; + findInX = true; + } + } + if (!findInY) { + int y1 = bounds.y; + if (Math.abs(y1 - point.y) <= MoveUtils.SORPTION_UNIT) { + point.y = y1; + findInY = true; + } + int y2 = bounds.y + bounds.height; + if (Math.abs(y2 - point.y) <= MoveUtils.SORPTION_UNIT) { + point.y = y2; + findInY = true; + } + + } + if (findInX && findInY) { + break; + } + + } + setDesignerStateModelProperties(designer, findInX, findInY, currentBounds, point); + } + + private void setDesignerStateModelProperties(FormDesigner designer, boolean findInX, boolean findInY, Rectangle + currentBounds, Point point) { + designer.getStateModel().setXAbsorptionline(findInX && currentBounds.getWidth() > MoveUtils.SORPTION_UNIT ? Absorptionline.createXAbsorptionline(point.x) : null); + 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); - designer.getStateModel().setYAbsorptionline(findInY && current_bounds.getHeight() > MoveUtils.SORPTION_UNIT ? Absorptionline.createYAbsorptionline(point.y) : null); - designer.getStateModel().setEquidistantLine(null); - } - - private Rectangle getWidgetRelativeBounds(Rectangle bounds, FormSelection selection){ - Rectangle relativeRec = new Rectangle(bounds.x, bounds.y, bounds.width, bounds.height); - XLayoutContainer parent = XCreatorUtils.getParentXLayoutContainer(selection.getSelectedCreator()); - if (parent == null) { - return relativeRec; - } - Rectangle rec = ComponentUtils.getRelativeBounds(parent); - relativeRec.x += rec.x; - relativeRec.y += rec.y; - 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){ + private Rectangle getWidgetRelativeBounds(Rectangle bounds, FormSelection selection) { + Rectangle relativeRec = new Rectangle(bounds.x, bounds.y, bounds.width, bounds.height); + XLayoutContainer parent = XCreatorUtils.getParentXLayoutContainer(selection.getSelectedCreator()); + if (parent == null) { + return relativeRec; + } + Rectangle rec = ComponentUtils.getRelativeBounds(parent); + relativeRec.x += rec.x; + relativeRec.y += rec.y; + return relativeRec; + } + + + private WAbsoluteLayout getLayout(final FormDesigner designer) { XLayoutContainer formLayoutContainer = (XLayoutContainer) XCreatorUtils.createXCreator( designer.getTarget().getContainer()); WAbsoluteLayout layout; - if (formLayoutContainer.acceptType(XWBorderLayout.class)){//看起来这边的作用应该是为了区别cpt(得到XWParameterLayout)还是frm(得到XWBorderLayout)的参数界面 - Container container = designer.getSelectionModel().getSelection().getSelectedCreator().getParent(); - if(container instanceof XWAbsoluteLayout){ - layout = ((XWAbsoluteLayout)container).toData(); - } - else { - layout = (WAbsoluteLayout) designer.getParaComponent().toData(); - } - } else{ + if (formLayoutContainer.acceptType(XWBorderLayout.class)) {//看起来这边的作用应该是为了区别cpt(得到XWParameterLayout)还是frm(得到XWBorderLayout)的参数界面 + Container container = designer.getSelectionModel().getSelection().getSelectedCreator().getParent(); + if (container instanceof XWAbsoluteLayout) { + layout = ((XWAbsoluteLayout) container).toData(); + } else { + layout = (WAbsoluteLayout) designer.getParaComponent().toData(); + } + } else { layout = (WAbsoluteLayout) designer.getTarget().getContainer(); } - return layout; + return layout; } - /** - * 拖拽 - * @param dx 坐标x - * @param dy 坐标y - * @param designer 设计界面 - */ - public void drag(int dx, int dy, FormDesigner designer) { - Rectangle rec = getDraggedBounds(dx, dy, designer.getSelectionModel().getSelection().getRelativeBounds(), designer, designer.getSelectionModel().getSelection().getBackupBounds()); + /** + * 拖拽 + * + * @param dx 坐标x + * @param dy 坐标y + * @param designer 设计界面 + */ + public void drag(int dx, int dy, FormDesigner designer) { + 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的变化使得控件不停的向上或向下移动。 - if(rec.height == MINHEIGHT){ + if (rec.height == MINHEIGHT) { ymin = rec.y; } - if(rec.height == MINHEIGHT - 1){ + if (rec.height == MINHEIGHT - 1) { ymin = ymin == rec.y ? rec.y : rec.y - 1; } - if(rec.height < MINHEIGHT){ + if (rec.height < MINHEIGHT) { rec.height = MINHEIGHT; rec.y = ymin; } // 增加下宽度也设最小为21 if (rec.width == MINWIDTH) { - xmin = rec.x; + xmin = rec.x; } - if(rec.width == MINWIDTH - 1){ - xmin = xmin == rec.x ? rec.x : rec.x - 1; + if (rec.width == MINWIDTH - 1) { + xmin = xmin == rec.x ? rec.x : rec.x - 1; } if (rec.width < MINWIDTH) { - rec.width = MINWIDTH; - rec.x = xmin; + rec.width = MINWIDTH; + 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); - } - } - - /** - * 更新鼠标指针形状 - * @param formEditor 设计界面组件 - */ - 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(); - } + } + + /** + * 生成组件备用的bound + * + * @param formEditor 设计界面组件 + */ + public void backupBounds(FormDesigner formEditor) { + formEditor.getSelectionModel().getSelection().backupBounds(); + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java index 610581357..171ec465f 100644 --- a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java +++ b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java @@ -1,11 +1,5 @@ package com.fr.design.designer.beans.models; -import java.awt.LayoutManager; -import java.awt.Rectangle; -import java.awt.Toolkit; -import java.awt.event.MouseEvent; -import java.util.ArrayList; - import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.LayoutAdapter; import com.fr.design.designer.beans.events.DesignerEvent; @@ -20,9 +14,12 @@ import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.FormSelection; import com.fr.design.mainframe.FormSelectionUtils; import com.fr.design.utils.gui.LayoutUtils; -import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; import com.fr.stable.ArrayUtils; +import java.awt.*; +import java.awt.event.MouseEvent; +import java.util.ArrayList; + /** * 该model保存当前选择的组件和剪切版信息 */ @@ -30,10 +27,10 @@ public class SelectionModel { //被粘贴组件在所选组件位置处往下、往右各错开20像素。执行多次粘贴时,在上一次粘贴的位置处错开20像素。 private static final int DELTA_X_Y = 20; //粘贴时候的偏移距离 private static final int BORDER_PROPORTION = 20; - private static FormSelection CLIP_BOARD = new FormSelection(); + private static FormSelection clipboard = new FormSelection(); private FormDesigner designer; private FormSelection selection; - private Rectangle hotspot_bounds; + private Rectangle hotspotBounds; public SelectionModel(FormDesigner designer) { this.designer = designer; @@ -45,7 +42,7 @@ public class SelectionModel { */ public void reset() { selection.reset(); - hotspot_bounds = null; + hotspotBounds = null; } /** @@ -54,7 +51,7 @@ public class SelectionModel { * @return 是否为空 */ public static boolean isEmpty() { - return CLIP_BOARD.isEmpty(); + return clipboard.isEmpty(); } /** @@ -67,7 +64,6 @@ public class SelectionModel { // 如果Ctrl或者Shift键盘没有按下,则清除已经选择的组件 selection.reset(); } - // 获取e所在的组件 XCreator comp = designer.getComponentAt(e); @@ -93,7 +89,7 @@ public class SelectionModel { */ public void cutSelectedCreator2ClipBoard() { if (hasSelectionComponent()) { - selection.cut2ClipBoard(CLIP_BOARD); + selection.cut2ClipBoard(clipboard); designer.getEditListenerTable().fireCreatorModified(DesignerEvent.CREATOR_CUTED); designer.repaint(); } @@ -104,7 +100,7 @@ public class SelectionModel { */ public void copySelectedCreator2ClipBoard() { if (!selection.isEmpty()) { - selection.copy2ClipBoard(CLIP_BOARD); + selection.copy2ClipBoard(clipboard); } } @@ -114,7 +110,7 @@ public class SelectionModel { * @return 否 */ public boolean pasteFromClipBoard() { - if (!CLIP_BOARD.isEmpty()) { + if (!clipboard.isEmpty()) { XLayoutContainer parent = null; //未选 if (!hasSelectionComponent()) { @@ -124,14 +120,14 @@ public class SelectionModel { Rectangle rec = selection.getRelativeBounds(); //Tab布局 FormSelectionUtils.paste2Container(designer, (XLayoutContainer) selection.getSelectedCreator(), - CLIP_BOARD, + clipboard, rec.x + rec.width / 2, rec.y + BORDER_PROPORTION); } else { Rectangle rec = selection.getRelativeBounds(); //自适应布局 FormSelectionUtils.paste2Container(designer, designer.getRootComponent(), - CLIP_BOARD, + clipboard, rec.x + rec.width / 2, rec.y + BORDER_PROPORTION); } @@ -140,7 +136,7 @@ public class SelectionModel { //编辑器外面还有两层容器,使用designer.getRootComponent()获取到的是编辑器中层的容器,不是编辑器表层 //当前选择的就是编辑器表层 FormSelectionUtils.paste2Container(designer, (XLayoutContainer) selection.getSelectedCreator(), - CLIP_BOARD, + clipboard, DELTA_X_Y, DELTA_X_Y); } @@ -148,7 +144,7 @@ public class SelectionModel { //cpt本地组件复用,编辑器就一层,是最底层,使用designer.getRootComponent()就可以获取到 //使用selection.getSelectedCreator()也应该是可以获取到的。 FormSelectionUtils.paste2Container(designer, designer.getRootComponent(), - CLIP_BOARD, + clipboard, DELTA_X_Y, DELTA_X_Y); } @@ -157,19 +153,16 @@ public class SelectionModel { else { //获取到编辑器的表层容器(已选的组件的父容器就是表层容器) parent = XCreatorUtils.getParentXLayoutContainer(selection.getSelectedCreator()); - if (selection.getSelectedCreator().getParent() instanceof XWFitLayout) { + if (parent != null && selection.getSelectedCreator().getParent() instanceof XWFitLayout) { //自适应布局 - if (parent != null) { - Rectangle rec = selection.getRelativeBounds(); - FormSelectionUtils.paste2Container(designer, parent, CLIP_BOARD, rec.x + rec.width / 2, rec.y + - rec.height - BORDER_PROPORTION); - } - } else if (selection.getSelectedCreator().getParent() instanceof XWAbsoluteLayout) { + Rectangle rec = selection.getRelativeBounds(); + FormSelectionUtils.paste2Container(designer, parent, clipboard, rec.x + rec.width / 2, rec.y + + rec.height - BORDER_PROPORTION); + + } else if (parent != null && selection.getSelectedCreator().getParent() instanceof XWAbsoluteLayout) { //绝对布局 - if (parent != null) { - Rectangle rec = selection.getSelctionBounds(); - FormSelectionUtils.paste2Container(designer, parent, CLIP_BOARD, rec.x + DELTA_X_Y, rec.y + DELTA_X_Y); - } + Rectangle rec = selection.getSelctionBounds(); + FormSelectionUtils.paste2Container(designer, parent, clipboard, rec.x + DELTA_X_Y, rec.y + DELTA_X_Y); } } } else { @@ -223,14 +216,14 @@ public class SelectionModel { * 设置选择区域 */ public void setHotspotBounds(Rectangle rect) { - hotspot_bounds = rect; + hotspotBounds = rect; } /** * 获得当前选择区域 */ public Rectangle getHotspotBounds() { - return hotspot_bounds; + return hotspotBounds; } private void removeCreatorFromContainer(XCreator creator, int creatorWidth, int creatorHeight) { @@ -271,22 +264,28 @@ public class SelectionModel { * 其他两层不是靠添加组件就可以编辑的。 */ public boolean hasSelectionComponent() { + XCreator selectionXCreator = selection.getSelectedCreator(); if (designer.getClass().equals(FormDesigner.class)) { //frm本地组件复用 - return selection.getSelectedCreator() != null - && !( + if (selectionXCreator != null) { + if (selectionXCreator.getClass().equals(XWAbsoluteBodyLayout.class)) { //frm绝对布局编辑器 - selection.getSelectedCreator().getClass().equals(XWAbsoluteBodyLayout.class) - //Tab布局编辑器 - || selection.getSelectedCreator().getClass().equals(XWCardMainBorderLayout.class) - || selection.getSelectedCreator().getClass().equals(XWCardLayout.class) - || selection.getSelectedCreator().getClass().equals(XWTabFitLayout.class) - //自适应布局编辑器 - || selection.getSelectedCreator().getClass().equals(XWFitLayout.class) - ); + return false; + } else if (selectionXCreator.getClass().equals(XWCardMainBorderLayout.class) + || selectionXCreator.getClass().equals(XWCardLayout.class) + || selectionXCreator.getClass().equals(XWTabFitLayout.class)) { + //Tab布局编辑器 + return false; + } else { + //自适应布局编辑器 + return !selectionXCreator.getClass().equals(XWFitLayout.class); + } + } else { + return false; + } } else { //cpt本地组件复用,selection.getSelectedCreator().getParent()=@XWParameterLayout instanceof @XWAbsoluteLayout - return selection.getSelectedCreator() != null && selection.getSelectedCreator().getParent() != null; + return selectionXCreator != null && selectionXCreator.getParent() != null; } } @@ -330,10 +329,9 @@ public class SelectionModel { int x = e.getX() + designer.getArea().getHorizontalValue(); int y = e.getY() + designer.getArea().getVerticalValue(); dir = getDirection(selection.getRelativeBounds(), x, y); - if (selection.size() == 1) { - if (!ArrayUtils.contains(selection.getSelectedCreator().getDirections(), dir.getActual())) { - dir = Location.outer; - } + if (selection.size() == 1 && !ArrayUtils.contains(selection.getSelectedCreator().getDirections(), dir + .getActual())) { + dir = Location.outer; } } else { dir = Location.outer; diff --git a/designer_form/src/com/fr/design/designer/creator/DedicateLayoutContainer.java b/designer_form/src/com/fr/design/designer/creator/DedicateLayoutContainer.java index d929399d4..f223e5d8f 100644 --- a/designer_form/src/com/fr/design/designer/creator/DedicateLayoutContainer.java +++ b/designer_form/src/com/fr/design/designer/creator/DedicateLayoutContainer.java @@ -1,96 +1,96 @@ -/** - * - */ -package com.fr.design.designer.creator; - -import com.fr.form.ui.container.WLayout; - -import java.awt.*; -import java.beans.IntrospectionException; -import java.util.ArrayList; - -/** - * 一些控件专属的容器,如标题容器,sclae容器 - * - * @author jim - * @date 2014-11-7 - */ -public abstract class DedicateLayoutContainer extends XLayoutContainer { - - public DedicateLayoutContainer(WLayout widget, Dimension initSize) { - super(widget, initSize); - } - - /** - * 得到属性名 - * - * @return 属性名 - * @throws IntrospectionException - */ - public CRPropertyDescriptor[] supportedDescriptor() throws IntrospectionException { - return new CRPropertyDescriptor[0]; - } - - /** - * 返回容器图标 - * - * @return - */ - @Override - public String getIconPath() { - if (this.getXCreator(XWScaleLayout.INDEX) != null) { - return this.getXCreator(XWScaleLayout.INDEX).getIconPath(); - } - return "/com/fr/web/images/form/resources/text_field_16.png"; - } - - - /** - * 控件树不显示此组件 - * - * @param path 控件树list - */ - public void notShowInComponentTree(ArrayList path) { - path.remove(path.size() - 1); - } - - /** - * 重置组件的名称 - * - * @param name 名称 - */ - public void resetCreatorName(String name) { - super.resetCreatorName(name); - XCreator child = getXCreator(XWScaleLayout.INDEX); - //实现WTitleLayout的SetWidgetName - child.toData().setWidgetName(name); - } - - /** - * 返回对应属性表的组件,scale和title返回其子组件 - * - * @return 组件 - */ - public XCreator getPropertyDescriptorCreator() { - return getXCreator(XWScaleLayout.INDEX); - } - - /** - * 是否作为控件树的叶子节点 - * - * @return 是则返回true - */ - public boolean isComponentTreeLeaf() { - return true; - } - - /** - * 是否为sclae和title专属容器 - * - * @return 是则返回true - */ - public boolean isDedicateContainer() { - return true; - } - +/** + * + */ +package com.fr.design.designer.creator; + +import com.fr.form.ui.container.WLayout; + +import java.awt.*; +import java.beans.IntrospectionException; +import java.util.ArrayList; + +/** + * 一些控件专属的容器,如标题容器,sclae容器 + * + * @author jim + * @date 2014-11-7 + */ +public abstract class DedicateLayoutContainer extends XLayoutContainer { + + public DedicateLayoutContainer(WLayout widget, Dimension initSize) { + super(widget, initSize); + } + + /** + * 得到属性名 + * + * @return 属性名 + * @throws IntrospectionException + */ + public CRPropertyDescriptor[] supportedDescriptor() throws IntrospectionException { + return new CRPropertyDescriptor[0]; + } + + /** + * 返回容器图标 + * + * @return + */ + @Override + public String getIconPath() { + if (this.getXCreator(XWScaleLayout.INDEX) != null) { + return this.getXCreator(XWScaleLayout.INDEX).getIconPath(); + } + return "/com/fr/web/images/form/resources/text_field_16.png"; + } + + + /** + * 控件树不显示此组件 + * + * @param path 控件树list + */ + public void notShowInComponentTree(ArrayList path) { + path.remove(path.size() - 1); + } + + /** + * 重置组件的名称 + * + * @param name 名称 + */ + public void resetCreatorName(String name) { + super.resetCreatorName(name); + XCreator child = getXCreator(XWScaleLayout.INDEX); + //实现WTitleLayout的SetWidgetName + child.toData().setWidgetName(name); + } + + /** + * 返回对应属性表的组件,scale和title返回其子组件 + * + * @return 组件 + */ + public XCreator getPropertyDescriptorCreator() { + return getXCreator(XWScaleLayout.INDEX); + } + + /** + * 是否作为控件树的叶子节点 + * + * @return 是则返回true + */ + public boolean isComponentTreeLeaf() { + return true; + } + + /** + * 是否为sclae和title专属容器 + * + * @return 是则返回true + */ + public boolean isDedicateContainer() { + return true; + } + } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/form/parameter/FormParaDesigner.java b/designer_form/src/com/fr/design/form/parameter/FormParaDesigner.java index fcda0c684..589be7e83 100644 --- a/designer_form/src/com/fr/design/form/parameter/FormParaDesigner.java +++ b/designer_form/src/com/fr/design/form/parameter/FormParaDesigner.java @@ -313,7 +313,7 @@ public class FormParaDesigner extends FormDesigner implements ParameterDesignerP */ public boolean isWithQueryButton() { XLayoutContainer rootContainer = this.getRootComponent(); - return SearchQueryCreators(rootContainer); + return searchQueryCreators(rootContainer); } /** @@ -322,18 +322,18 @@ public class FormParaDesigner extends FormDesigner implements ParameterDesignerP * @return 同上 */ public Action[] getActions() { - if (designer_actions == null) { - designer_actions = new Action[]{new CutAction(this), new CopyAction(this), new PasteAction(this), + if (designerActions == null) { + designerActions = new Action[]{new CutAction(this), new CopyAction(this), new PasteAction(this), new FormDeleteAction(this)}; } - return designer_actions; + return designerActions; } - private boolean SearchQueryCreators(XLayoutContainer rootContainer) { + private boolean searchQueryCreators(XLayoutContainer rootContainer) { boolean b = false; for (int i = 0; i < rootContainer.getXCreatorCount(); i++) { if (rootContainer.getXCreator(i) instanceof XLayoutContainer) { - b = SearchQueryCreators((XLayoutContainer) rootContainer.getXCreator(i)); + b = searchQueryCreators((XLayoutContainer) rootContainer.getXCreator(i)); } else if (rootContainer.getXCreator(i) instanceof XFormSubmit) { b = true; } diff --git a/designer_form/src/com/fr/design/mainframe/ConnectorHelper.java b/designer_form/src/com/fr/design/mainframe/ConnectorHelper.java index 2bc38699e..a64005812 100644 --- a/designer_form/src/com/fr/design/mainframe/ConnectorHelper.java +++ b/designer_form/src/com/fr/design/mainframe/ConnectorHelper.java @@ -15,96 +15,96 @@ import com.fr.design.designer.creator.XWAbsoluteLayout; import com.fr.form.ui.Connector; public class ConnectorHelper { - //这个类是用来画连接线的,暂时用不到 - - public static final int NEAR = 5; - private static double ratio = 0.5; - private final static int ADSORPTION = 15; // 吸附距离 - private ArrayList drawingPoint; - private FormDesigner designer; - private boolean drawing; + //这个类是用来画连接线的,暂时用不到 - public ConnectorHelper(FormDesigner formEditor) { - this.designer = formEditor; - } - - public void resetConnector(Connector connector) { - ConnectorCreator cc = new ConnectorCreator(designer.getTarget().getContainer(),connector.getStartPoint(),connector.getEndPoint()); - connector.addAll(cc.createPointList()); - } - - public boolean drawLining() { - return this.drawing; - } + public static final int NEAR = 5; + private static double ratio = 0.5; + private final static int ADSORPTION = 15; // 吸附距离 + private ArrayList drawingPoint; + private FormDesigner designer; + private boolean drawing; - public void setDrawLine(boolean d) { - this.drawing = d; - } - - private boolean near(Point p1, Point p2) { - return p1.x - p2.x < NEAR && p2.x - p1.x < NEAR && p1.y - p2.y < NEAR && p2.y - p1.y < NEAR; - } + public ConnectorHelper(FormDesigner formEditor) { + this.designer = formEditor; + } - private Point getNearPoint(MouseEvent e, Rectangle r) { - Point p1 = new Point((int) (r.x + r.getWidth() * ratio), r.y); - Point p2 = new Point((int) (r.x + r.getWidth()), (int) (r.y + r.getHeight() * ratio)); - Point p3 = new Point((int) (r.x + r.getWidth() * (1 - ratio)), (int) (r.y + r.getHeight())); - Point p4 = new Point(r.x, (int) (r.y + r.getHeight() * (1 - ratio))); - Point p = new Point(e.getX() + designer.getArea().getHorizontalValue(), e.getY() + designer.getArea().getVerticalValue()); - if (near(p, p1)) { - return p1; - } else if (near(p, p2)) { - return p2; - } else if (near(p, p3)) { - return p3; - } else if (near(p, p4)) { - return p4; - } - return null; - } - - private ArrayList createDefalutNode(Point startPoint, Point endPoint) { - long s = System.currentTimeMillis(); - ConnectorCreator cc = new ConnectorCreator(designer.getTarget().getContainer(), new Point(startPoint), new Point(endPoint)); - ArrayList p = cc.createPointList(); - long e = System.currentTimeMillis(); - return p; - } + public void resetConnector(Connector connector) { + ConnectorCreator cc = new ConnectorCreator(designer.getTarget().getContainer(), connector.getStartPoint(), connector.getEndPoint()); + connector.addAll(cc.createPointList()); + } - public void drawAuxiliaryLine(Graphics g) { - Point startPoint = designer.getStateModel().getStartPoint(); - Point endPoint = designer.getStateModel().getEndPoint(); - drawingPoint = createDefalutNode(startPoint, endPoint); - Point[] p = drawingPoint.toArray(new Point[drawingPoint.size()]); - g.setColor(Color.green); - for (int i = 0; i < p.length - 1; i++) { - GraphHelper.drawLine(g, p[i].x - designer.getArea().getHorizontalValue(), p[i].y - - designer.getArea().getVerticalValue(), p[i + 1].x - designer.getArea().getHorizontalValue(), - p[i + 1].y - designer.getArea().getVerticalValue(), Constants.LINE_HAIR); - } - } + public boolean drawLining() { + return this.drawing; + } - public void createDefalutLine() { - if (drawingPoint != null - && drawingPoint.size() > 1 - && ConnectorCreator.getMinimumDistance(drawingPoint.get(0), drawingPoint.get(drawingPoint.size() - 1)) > ADSORPTION) { - ((XWAbsoluteLayout) designer.getRootComponent()).addConnector(new Connector().addAll(drawingPoint)); - } - drawingPoint = null; - } + public void setDrawLine(boolean d) { + this.drawing = d; + } - public Point getNearWidgetPoint(MouseEvent e) { - BoundsWidget widget; - Point p = null; - for (int i = 0, size = designer.getTarget().getContainer().getWidgetCount(); i < size; i++) { - widget = ((BoundsWidget) designer.getTarget().getContainer().getWidget(i)); - if (widget.isVisible()) { - if ((p = getNearPoint(e, widget.getBounds())) != null) { - break; - } - } - } - return p; - } + private boolean near(Point p1, Point p2) { + return p1.x - p2.x < NEAR && p2.x - p1.x < NEAR && p1.y - p2.y < NEAR && p2.y - p1.y < NEAR; + } + + private Point getNearPoint(MouseEvent e, Rectangle r) { + Point p1 = new Point((int) (r.x + r.getWidth() * ratio), r.y); + Point p2 = new Point((int) (r.x + r.getWidth()), (int) (r.y + r.getHeight() * ratio)); + Point p3 = new Point((int) (r.x + r.getWidth() * (1 - ratio)), (int) (r.y + r.getHeight())); + Point p4 = new Point(r.x, (int) (r.y + r.getHeight() * (1 - ratio))); + Point p = new Point(e.getX() + designer.getArea().getHorizontalValue(), e.getY() + designer.getArea().getVerticalValue()); + if (near(p, p1)) { + return p1; + } else if (near(p, p2)) { + return p2; + } else if (near(p, p3)) { + return p3; + } else if (near(p, p4)) { + return p4; + } + return null; + } + + private ArrayList createDefalutNode(Point startPoint, Point endPoint) { + long s = System.currentTimeMillis(); + ConnectorCreator cc = new ConnectorCreator(designer.getTarget().getContainer(), new Point(startPoint), new Point(endPoint)); + ArrayList p = cc.createPointList(); + long e = System.currentTimeMillis(); + return p; + } + + public void drawAuxiliaryLine(Graphics g) { + Point startPoint = designer.getStateModel().getStartPoint(); + Point endPoint = designer.getStateModel().getEndPoint(); + drawingPoint = createDefalutNode(startPoint, endPoint); + Point[] p = drawingPoint.toArray(new Point[drawingPoint.size()]); + g.setColor(Color.green); + for (int i = 0; i < p.length - 1; i++) { + GraphHelper.drawLine(g, p[i].x - designer.getArea().getHorizontalValue(), p[i].y + - designer.getArea().getVerticalValue(), p[i + 1].x - designer.getArea().getHorizontalValue(), + p[i + 1].y - designer.getArea().getVerticalValue(), Constants.LINE_HAIR); + } + } + + public void createDefalutLine() { + if (drawingPoint != null + && drawingPoint.size() > 1 + && ConnectorCreator.getMinimumDistance(drawingPoint.get(0), drawingPoint.get(drawingPoint.size() - 1)) > ADSORPTION) { + ((XWAbsoluteLayout) designer.getRootComponent()).addConnector(new Connector().addAll(drawingPoint)); + } + drawingPoint = null; + } + + public Point getNearWidgetPoint(MouseEvent e) { + BoundsWidget widget; + Point p = null; + for (int i = 0, size = designer.getTarget().getContainer().getWidgetCount(); i < size; i++) { + widget = ((BoundsWidget) designer.getTarget().getContainer().getWidget(i)); + if (widget.isVisible()) { + if ((p = getNearPoint(e, widget.getBounds())) != null) { + break; + } + } + } + return p; + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java b/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java index 9b4ccfeeb..61323f4b7 100644 --- a/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java +++ b/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java @@ -1,620 +1,621 @@ -package com.fr.design.mainframe; - -import com.fr.base.BaseUtils; -import com.fr.design.beans.location.MoveUtils; -import com.fr.design.designer.beans.AdapterBus; -import com.fr.design.designer.beans.ComponentAdapter; -import com.fr.design.designer.beans.events.DesignerEditor; -import com.fr.design.designer.beans.events.DesignerEvent; -import com.fr.design.designer.beans.location.Direction; -import com.fr.design.designer.beans.location.Location; -import com.fr.design.designer.beans.models.SelectionModel; -import com.fr.design.designer.beans.models.StateModel; -import com.fr.design.designer.creator.*; -import com.fr.design.designer.creator.cardlayout.XCardSwitchButton; -import com.fr.design.form.util.XCreatorConstants; -import com.fr.design.gui.ibutton.UIButton; -import com.fr.design.gui.xpane.ToolTipEditor; -import com.fr.design.icon.IconPathConstants; -import com.fr.design.utils.ComponentUtils; -import com.fr.design.utils.gui.LayoutUtils; -import com.fr.general.Inter; -import com.fr.stable.Constants; - -import javax.swing.*; -import javax.swing.event.MouseInputAdapter; -import java.awt.*; -import java.awt.event.MouseEvent; - -/** - * 普通模式下的鼠标点击、位置处理器 - */ -public class EditingMouseListener extends MouseInputAdapter { - - private static final int INDEX = 0; - private FormDesigner designer; - - /** - * 普通模式下对应的model - */ - private StateModel stateModel; - - - private XLayoutContainer xTopLayoutContainer; - private XLayoutContainer clickTopLayout; - - /** - * 获取表单设计器 - * - * @return 表单设计器 - */ - public FormDesigner getDesigner() { - return designer; - } - - /** - * 选择模型,存储当前选择的组件和剪切板 - */ - private SelectionModel selectionModel; - /** - * 获取选择模型 - * - * @return 选择 - */ - public SelectionModel getSelectionModel() { - return selectionModel; - } - - private XCreator last_creator; - private MouseEvent lastPressEvent; - private DesignerEditor current_editor; - private XCreator current_creator; - - //备份开始拖动的位置和大小 - private Rectangle dragBackupBounds; - - /** - * 获取最小移动距离 - * - * @return 最小移动距离 - */ - public int getMinMoveSize() { - return minMoveSize; - } - - private int minDragSize = 5; - private int minMoveSize = 8; - - private static final int EDIT_BTN_WIDTH = 60; - private static final int EDIT_BTN_HEIGHT = 24; - //报表块的编辑按钮不灵敏,范围扩大一点 - private static final int GAP = 10; - - private XElementCase xElementCase; - private XChartEditor xChartEditor; - - private JWindow promptWindow = new JWindow(); - - public EditingMouseListener(FormDesigner designer) { - this.designer = designer; - stateModel = designer.getStateModel(); - selectionModel = designer.getSelectionModel(); - UIButton promptButton = new UIButton(Inter.getLocText("FR-Designer_Forbid_Drag_into_Adapt_Pane"), BaseUtils.readIcon(IconPathConstants.FORBID_ICON_PATH)); - this.promptWindow.add(promptButton); - } - - private void promptUser(int x, int y, XLayoutContainer container){ - if (!selectionModel.getSelection().getSelectedCreator().canEnterIntoAdaptPane() && container.acceptType(XWFitLayout.class)){ - promptWidgetForbidEnter(x ,y , container); - } else { - cancelPromptWidgetForbidEnter(); - } - } - - private void promptWidgetForbidEnter(int x,int y, XLayoutContainer container){ - container.setBorder(BorderFactory.createLineBorder(Color.RED, Constants.LINE_MEDIUM)); - int screen_X = (int)designer.getArea().getLocationOnScreen().getX(); - int screen_Y = (int)designer.getArea().getLocationOnScreen().getY(); - this.promptWindow.setSize(promptWindow.getPreferredSize()); - this.promptWindow.setPreferredSize(promptWindow.getPreferredSize()); - promptWindow.setLocation(screen_X + x + GAP, screen_Y + y + GAP); - promptWindow.setVisible(true); - } - - private void cancelPromptWidgetForbidEnter(){ - designer.getRootComponent().setBorder(BorderFactory.createLineBorder(XCreatorConstants.LAYOUT_SEP_COLOR, Constants.LINE_THIN)); - promptWindow.setVisible(false); - } - - - /** - * 按下 - * @param e 鼠标事件 - */ - public void mousePressed(MouseEvent e) { - if (!stopEditing()) { - return; - } - if (!designer.isFocusOwner()) { - // 获取焦点,以便获取热键 - designer.requestFocus(); - } - if (e.isPopupTrigger()) { - // 为触发上下文菜单预留 - } else if (e.getButton() == MouseEvent.BUTTON1) { - - Direction dir = selectionModel.getDirectionAt(e); - if (!BaseUtils.isAuthorityEditing()) { - stateModel.setDirection(dir); - } - - if (dir == Location.outer) { - if (designer.isDrawLineMode()) { - designer.updateDrawLineMode(e); - } else { - if (selectionModel.hasSelectionComponent() - && selectionModel.getSelection().getRelativeBounds().contains( - designer.getArea().getHorizontalValue() + e.getX(), - designer.getArea().getVerticalValue() + e.getY())) { - lastPressEvent = e; - last_creator = selectionModel.getSelection().getSelectedCreator(); - } else { - stateModel.startSelecting(e); - } - } - } else { - stateModel.startResizing(e); - } - } - } - - /** - * 释放 - * @param e 鼠标事件 - */ - public void mouseReleased(MouseEvent e) { - if (e.isPopupTrigger()) { - if (stateModel.isDragging()) { - stateModel.draggingCancel(); - } - } else { - if (designer.isDrawLineMode()) { - if (stateModel.prepareForDrawLining()) { - designer.getDrawLineHelper().setDrawLine(false); - designer.getDrawLineHelper().createDefalutLine(); - } - } else if (stateModel.isSelecting()) { - // 如果当前是区域选择状态,则选择该区域所含的组件 - designer.selectComponents(e); - } - if (stateModel.isDragging()) { - mouseDraggingRelease(e); - } - } - lastPressEvent = null; - last_creator = null; - } - - private void mouseDraggingRelease(MouseEvent e) { - // 当前鼠标所在的组件 - XCreator hoveredComponent = designer.getComponentAt(e.getX(), e.getY()); - if(designer.isWidgetsIntersect() && dragBackupBounds != null && hoveredComponent != null){ - XCreator selectionXCreator = designer.getSelectionModel().getSelection().getSelectedCreator(); - if(selectionXCreator != null){ - selectionXCreator.setBounds(dragBackupBounds.x, dragBackupBounds.y, dragBackupBounds.width, dragBackupBounds.height); -// MoveUtils.hideForbidWindow(); - } - } - dragBackupBounds = null; - // 拉伸时鼠标拖动过快,导致所在组件获取会为空 - if (hoveredComponent == null && e.getY() < 0) { - // bug63538 - // 不是拖动过快导致的,而是纵坐标为负值导致的,这时参照横坐标为负值时的做法,取边界位置的组件,为鼠标所在点的组件 - // 如果直接return,界面上已经进行了拖拽不能恢复 - hoveredComponent = designer.getComponentAt(0, 0); - } - // 获取该组件所在的焦点容器 - XLayoutContainer container = XCreatorUtils.getHotspotContainer(hoveredComponent); - - if (container != null) { - boolean formSubmit2Adapt = !selectionModel.getSelection().getSelectedCreator().canEnterIntoAdaptPane() - && container.acceptType(XWFitLayout.class); - if ( !formSubmit2Adapt) { - // 如果是处于拖拽状态,则释放组件 - stateModel.releaseDragging(e); - } else { - selectionModel.deleteSelection(); - designer.setPainter(null); - } - cancelPromptWidgetForbidEnter(); - } - } - - /** - * 激活上下文菜单,待完善 - * 6.56暂时不支持右键 bugid 8777 - */ - private void trigger_popup(MouseEvent e) { - - XCreator creator = selectionModel.getSelection().getSelectedCreator(); - - if (creator == null) { - return; - } - - JPopupMenu popupMenu = null; - ComponentAdapter adapter = AdapterBus.getComponentAdapter(designer, creator); - popupMenu = adapter.getContextPopupMenu(e); - - if (popupMenu != null) { - popupMenu.show(designer, e.getX(), e.getY()); - } - // 通知组件已经被选择了 - designer.getEditListenerTable().fireCreatorModified(creator, DesignerEvent.CREATOR_SELECTED); - } - - /** - * 移动 - * @param e 鼠标事件 - */ - public void mouseMoved(MouseEvent e) { - XCreator component = designer.getComponentAt(e); - - setCoverPaneNotDisplay(e, false); - - if(processTopLayoutMouseMove(component, e)){ - return; - } - if (component instanceof XEditorHolder) { - XEditorHolder xcreator = (XEditorHolder) component; - Rectangle rect = xcreator.getBounds(); - int min = rect.x + rect.width / 2 - minMoveSize; - int max = rect.x + rect.width / 2 + minMoveSize; - if (e.getX() > min && e.getX() < max) { - if (designer.getCursor().getType() != Cursor.HAND_CURSOR) { - designer.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); - } - return; - } else { - if (designer.getCursor().getType() == Cursor.HAND_CURSOR) { - designer.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); - } - } - } - Direction dir = selectionModel.getDirectionAt(e); - if (designer.isDrawLineMode() && stateModel.getDirection() == Location.outer) { - designer.updateDrawLineMode(e); - } - if (!BaseUtils.isAuthorityEditing()) { - stateModel.setDirection(dir); - } - - if (component.isReport()) { - elementCaseMouseMoved(e, component); - designer.repaint(); - return; - } - - processChartEditorMouseMove(component, e); - - designer.repaint(); - } - - private void elementCaseMouseMoved(MouseEvent e, XCreator component) { - xElementCase = (XElementCase)component; - UIButton button = (UIButton)xElementCase.getCoverPane().getComponent(0); - if(designer.getCursor().getType() == Cursor.HAND_CURSOR) { - designer.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); - } // component.getParent() 是报表块所在的XWTitleLayout - int minX = button.getX() + getParentPositionX(component, 0) - designer.getArea().getHorizontalValue(); - int minY = button.getY() + getParentPositionY(component, 0) - designer.getArea().getVerticalValue(); - if (e.getX() + GAP - xElementCase.getInsets().left > minX && e.getX() - GAP - xElementCase.getInsets().left < minX + button.getWidth()) { - if (e.getY() + GAP - xElementCase.getInsets().top > minY && e.getY() - GAP - xElementCase.getInsets().top < minY + button.getHeight()) { - designer.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); - } - } - xElementCase.setHelpBtnOnFocus(false); - if (xElementCase.getCoverPane().getComponentCount() > 1) { - JComponent button1 = (JComponent) xElementCase.getCoverPane().getComponent(1); - int minX1 = button1.getX() + getParentPositionX(component, 0) - designer.getArea().getHorizontalValue(); - int minY1 = button1.getY() + getParentPositionY(component, 0) - designer.getArea().getVerticalValue(); - if (e.getX() + GAP - xElementCase.getInsets().left > minX1 && e.getX() - GAP - xElementCase.getInsets().left < minX1 + button1.getWidth()) { - if (e.getY() + GAP - xElementCase.getInsets().top > minY1 && e.getY() - GAP - xElementCase.getInsets().top < minY1 + button1.getHeight()) { - designer.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); - xElementCase.setHelpBtnOnFocus(true); - } - } - } - xElementCase.displayCoverPane(true); - xElementCase.setDirections(Direction.TOP_BOTTOM_LEFT_RIGHT); - } - - private void setCoverPaneNotDisplay(MouseEvent e, boolean isLinkedHelpDialog) { - if (xElementCase != null) { - int x = getParentPositionX(xElementCase, 0) - designer.getArea().getHorizontalValue(); - int y = getParentPositionY(xElementCase, 0) - designer.getArea().getVerticalValue(); - Rectangle rect = new Rectangle(x, y, xElementCase.getWidth(), xElementCase.getHeight()); - if (rect.contains(e.getPoint())) { - return; - } - if(isLinkedHelpDialog){ - xElementCase.destroyHelpDialog(); - } - xElementCase.displayCoverPane(false); - } - if (xChartEditor != null){ - xChartEditor.displayCoverPane(false); - } - - if (xTopLayoutContainer != null) { - xTopLayoutContainer.setMouseEnter(false); - } - designer.repaint(); - } - - private boolean processTopLayoutMouseMove(XCreator component, MouseEvent e){ - XLayoutContainer parent = XCreatorUtils.getHotspotContainer(component).getTopLayout(); - if (parent != null){ - xTopLayoutContainer = parent; - xTopLayoutContainer.setMouseEnter(true); - designer.repaint(); - if(!xTopLayoutContainer.isEditable()) { - if (designer.getCursor().getType() == Cursor.HAND_CURSOR) { - designer.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); - } - int minX = getParentPositionX(parent, parent.getX()) + parent.getWidth() / 2; - int minY = getParentPositionY(parent, parent.getY()) + parent.getHeight() / 2; - int offsetX = EDIT_BTN_WIDTH / 2 + GAP; - int offsetY = EDIT_BTN_HEIGHT / 2 + GAP; - if (e.getX() > (minX - offsetX) && e.getX() < (minX + offsetX)) { - if (e.getY() > (minY - offsetY) && e.getY() < (minY + offsetY + designer.getParaHeight())) { - designer.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); - } - } - return true; - } - } - return false; - } - - private void processChartEditorMouseMove(XCreator component, MouseEvent e){ - if (component instanceof XChartEditor) { - xChartEditor = (XChartEditor)component; - UIButton button = (UIButton)xChartEditor.getCoverPane().getComponent(0); - if(designer.getCursor().getType() ==Cursor.HAND_CURSOR) { - designer.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); - } - int minX = button.getX() + getParentPositionX(component, 0) - designer.getArea().getHorizontalValue(); - int minY = button.getY() + getParentPositionY(component, 0) - designer.getArea().getVerticalValue(); - if(e.getX() + GAP > minX && e.getX() - GAP < minX + button.getWidth()){ - if( e.getY() + GAP > minY && e.getY() - GAP < minY + button.getHeight()){ - designer.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); - } - } - xChartEditor.displayCoverPane(true); - xChartEditor.setDirections(Direction.TOP_BOTTOM_LEFT_RIGHT); - designer.repaint(); - } - } - - private int getParentPositionX(XCreator comp, int x){ - return comp.getParent() == null ? - x : getParentPositionX((XCreator)comp.getParent(), comp.getParent().getX() + x); - } - - private int getParentPositionY(XCreator comp, int y) { - return comp.getParent() == null ? - y : getParentPositionY((XCreator) comp.getParent(), comp.getParent().getY() + y); - } - - /** - * 拖拽 - * @param e 鼠标事件 - */ - public void mouseDragged(MouseEvent e) { - if (BaseUtils.isAuthorityEditing()) { - return; - } - // 如果当前是左键拖拽状态,拖拽组件 - if (stateModel.dragable()) { - if (SwingUtilities.isRightMouseButton(e)) { - return; - } else { - stateModel.dragging(e); - // 获取e所在的焦点组件 - XCreator hotspot = designer.getComponentAt(e.getX(), e.getY()); - if(dragBackupBounds == null) { - XCreator selectingXCreator = designer.getSelectionModel().getSelection().getSelectedCreator(); - if(selectingXCreator != null){ - dragBackupBounds = new Rectangle(selectingXCreator.getX(), selectingXCreator.getY(), selectingXCreator.getWidth(), selectingXCreator.getHeight()); - } - } - // 拉伸时鼠标拖动过快,导致所在组件获取会为空 - if (hotspot == null) { - return; - } - // 获取焦点组件所在的焦点容器 - XLayoutContainer container = XCreatorUtils.getHotspotContainer(hotspot); - //提示组件是否可以拖入 - promptUser(e.getX(), e.getY(), container); - } - } else if (designer.isDrawLineMode()) { - if (stateModel.prepareForDrawLining()) { - stateModel.drawLine(e); - } - } else if (stateModel.isSelecting() && (selectionModel.getHotspotBounds() != null)) { - // 如果是拖拽选择区域状态,则更新选择区域 - stateModel.changeSelection(e); - } else { - if ((lastPressEvent == null) || (last_creator == null)) { - return; - } - if (e.getPoint().distance(lastPressEvent.getPoint()) > minDragSize) { - //参数面板和自适应布局不支持拖拽 - if (last_creator.isSupportDrag()){ - designer.startDraggingComponent(last_creator, lastPressEvent, e.getX(), e.getY()); - } - e.consume(); - lastPressEvent = null; - } - } - designer.repaint(); - } - - //当前编辑的组件是在布局中,鼠标点击布局外部,需要一次性将布局及其父布局都置为不可编辑 - private void setTopLayoutUnEditable(XLayoutContainer clickedTopLayout, XLayoutContainer clickingTopLayout){ - //双击的前后点击click为相同对象,过滤掉 - if (clickedTopLayout == null || clickedTopLayout == clickingTopLayout){ - return; - } - //位于同一层级的控件,父布局相同,过滤掉 - if (clickingTopLayout != null && clickedTopLayout.getParent() == clickingTopLayout.getParent()){ - return; - } - //前后点击的位于不同层级,要置为不可编辑 - XLayoutContainer xLayoutContainer = (XLayoutContainer)clickedTopLayout.getParent(); - if (xLayoutContainer == clickingTopLayout){ - return; - } - if (xLayoutContainer != null){ - xLayoutContainer.setEditable(false); - setTopLayoutUnEditable((XLayoutContainer) clickedTopLayout.getParent(), clickingTopLayout); - } - } - - private boolean isCreatorInLayout(XCreator creator, XCreator layout){ - if (creator == layout){ - return true; - } - if(layout.getParent() != null){ - return isCreatorInLayout(creator, (XCreator)layout.getParent()); - } - return false; - } - - private XCreator processTopLayoutMouseClick(XCreator creator){ - XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer(creator).getTopLayout(); - if(topLayout != null){ - if (clickTopLayout != null && clickTopLayout != topLayout && !isCreatorInLayout(clickTopLayout, topLayout)){ - clickTopLayout.setEditable(false); - setTopLayoutUnEditable(clickTopLayout, topLayout); - } - clickTopLayout = topLayout; - if(!topLayout.isEditable()) { - creator = topLayout; - } - } - else{ - if(clickTopLayout != null){ - clickTopLayout.setEditable(false); - setTopLayoutUnEditable(clickTopLayout, null); - } - } - - return creator; - } - /** - * 点击 - * @param e 鼠标事件 - */ - public void mouseClicked(MouseEvent e) { - XCreator creator = designer.getComponentAt(e); - - if (e.getButton() != MouseEvent.BUTTON1 && !creator.acceptType(XCardSwitchButton.class)) { - return; - } - - creator = processTopLayoutMouseClick(creator); - - if(creator != null){ - creator.respondClick(this, e); - } - creator.doLayout(); - LayoutUtils.layoutRootContainer(designer.getRootComponent()); - } - - - - /** - * 离开 - * @param e 鼠标事件 - */ - public void mouseExited(MouseEvent e) { - if (designer.getCursor().getType() != Cursor.DEFAULT_CURSOR) { - designer.setCursor(Cursor.getDefaultCursor()); - } - - setCoverPaneNotDisplay(e, true); - - cancelPromptWidgetForbidEnter(); - } - - /** - * 开始编辑 - * @param creator 容器 - * @param designerEditor 设计器 - * @param adapter 适配器 - */ - public void startEditing(XCreator creator, DesignerEditor designerEditor, ComponentAdapter adapter) { - if (designerEditor != null) { - Rectangle rect = ComponentUtils.getRelativeBounds(creator); - current_editor = designerEditor; - current_creator = creator; - Rectangle bounds = new Rectangle(1, 1, creator.getWidth() - 2, creator.getHeight() - 2); - bounds.x += (rect.x - designer.getArea().getHorizontalValue()); - bounds.y += (rect.y - designer.getArea().getVerticalValue()); - designerEditor.getEditorTarget().setBounds(bounds); - designer.add(designerEditor.getEditorTarget()); - designer.invalidate(); - designer.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); - designerEditor.getEditorTarget().requestFocus(); - designer.repaint(); - } - } - - /** - * 停止编辑 - * @return 是否编辑成功 - */ - public boolean stopEditing() { - if (current_editor != null) { - designer.remove(current_editor.getEditorTarget()); - current_editor.fireEditStoped(); - - Container container = current_creator.getParent(); - - if (container != null) { - LayoutUtils.layoutRootContainer(container); - } - designer.invalidate(); - designer.repaint(); - current_creator = null; - current_editor = null; - return true; - } - return true; - } - - /** - * 重置编辑控件大小 - */ - public void resetEditorComponentBounds() { - if (current_editor == null) { - return; - } - - if (current_creator.getParent() == null) { - stopEditing(); - return; - } - - Rectangle rect = ComponentUtils.getRelativeBounds(current_creator); - Rectangle bounds = new Rectangle(1, 1, current_creator.getWidth() - 2, current_creator.getHeight() - 2); - bounds.x += (rect.x - designer.getArea().getHorizontalValue()); - bounds.y += (rect.y - designer.getArea().getVerticalValue()); - if (current_creator instanceof XEditorHolder) { - ToolTipEditor.getInstance().resetBounds((XEditorHolder) current_creator, bounds, current_editor.getEditorTarget().getBounds()); - } - current_editor.getEditorTarget().setBounds(bounds); - } +package com.fr.design.mainframe; + +import com.fr.base.BaseUtils; +import com.fr.design.designer.beans.AdapterBus; +import com.fr.design.designer.beans.ComponentAdapter; +import com.fr.design.designer.beans.events.DesignerEditor; +import com.fr.design.designer.beans.events.DesignerEvent; +import com.fr.design.designer.beans.location.Direction; +import com.fr.design.designer.beans.location.Location; +import com.fr.design.designer.beans.models.SelectionModel; +import com.fr.design.designer.beans.models.StateModel; +import com.fr.design.designer.creator.*; +import com.fr.design.designer.creator.cardlayout.XCardSwitchButton; +import com.fr.design.form.util.XCreatorConstants; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.xpane.ToolTipEditor; +import com.fr.design.icon.IconPathConstants; +import com.fr.design.utils.ComponentUtils; +import com.fr.design.utils.gui.LayoutUtils; +import com.fr.general.Inter; +import com.fr.stable.Constants; + +import javax.swing.*; +import javax.swing.event.MouseInputAdapter; +import java.awt.*; +import java.awt.event.MouseEvent; + +/** + * 普通模式下的鼠标点击、位置处理器 + */ +public class EditingMouseListener extends MouseInputAdapter { + + private FormDesigner designer; + + /** + * 普通模式下对应的model + */ + private StateModel stateModel; + + + private XLayoutContainer xTopLayoutContainer; + private XLayoutContainer clickTopLayout; + + /** + * 获取表单设计器 + * + * @return 表单设计器 + */ + public FormDesigner getDesigner() { + return designer; + } + + /** + * 选择模型,存储当前选择的组件和剪切板 + */ + private SelectionModel selectionModel; + + /** + * 获取选择模型 + * + * @return 选择 + */ + public SelectionModel getSelectionModel() { + return selectionModel; + } + + private XCreator lastXCreator; + private MouseEvent lastPressEvent; + private DesignerEditor currentEditor; + private XCreator currentXCreator; + + //备份开始拖动的位置和大小 + private Rectangle dragBackupBounds; + + /** + * 获取最小移动距离 + * + * @return 最小移动距离 + */ + public int getMinMoveSize() { + return minMoveSize; + } + + private int minDragSize = 5; + private int minMoveSize = 8; + + private static final int EDIT_BTN_WIDTH = 60; + private static final int EDIT_BTN_HEIGHT = 24; + //报表块的编辑按钮不灵敏,范围扩大一点 + private static final int GAP = 10; + + private XElementCase xElementCase; + private XChartEditor xChartEditor; + + private JWindow promptWindow = new JWindow(); + + public EditingMouseListener(FormDesigner designer) { + this.designer = designer; + stateModel = designer.getStateModel(); + selectionModel = designer.getSelectionModel(); + UIButton promptButton = new UIButton(Inter.getLocText("FR-Designer_Forbid_Drag_into_Adapt_Pane"), BaseUtils.readIcon(IconPathConstants.FORBID_ICON_PATH)); + this.promptWindow.add(promptButton); + } + + private void promptUser(int x, int y, XLayoutContainer container) { + if (!selectionModel.getSelection().getSelectedCreator().canEnterIntoAdaptPane() && container.acceptType(XWFitLayout.class)) { + promptWidgetForbidEnter(x, y, container); + } else { + cancelPromptWidgetForbidEnter(); + } + } + + private void promptWidgetForbidEnter(int x, int y, XLayoutContainer container) { + container.setBorder(BorderFactory.createLineBorder(Color.RED, Constants.LINE_MEDIUM)); + int screenX = (int) designer.getArea().getLocationOnScreen().getX(); + int screenY = (int) designer.getArea().getLocationOnScreen().getY(); + this.promptWindow.setSize(promptWindow.getPreferredSize()); + this.promptWindow.setPreferredSize(promptWindow.getPreferredSize()); + promptWindow.setLocation(screenX + x + GAP, screenY + y + GAP); + promptWindow.setVisible(true); + } + + private void cancelPromptWidgetForbidEnter() { + designer.getRootComponent().setBorder(BorderFactory.createLineBorder(XCreatorConstants.LAYOUT_SEP_COLOR, Constants.LINE_THIN)); + promptWindow.setVisible(false); + } + + + /** + * 按下 + * + * @param e 鼠标事件 + */ + public void mousePressed(MouseEvent e) { + if (!stopEditing()) { + return; + } + if (!designer.isFocusOwner()) { + // 获取焦点,以便获取热键 + designer.requestFocus(); + } + if (e.getButton() == MouseEvent.BUTTON1) { + + Direction dir = selectionModel.getDirectionAt(e); + if (!BaseUtils.isAuthorityEditing()) { + stateModel.setDirection(dir); + } + + if (dir == Location.outer) { + if (designer.isDrawLineMode()) { + designer.updateDrawLineMode(e); + } else { + if (selectionModel.hasSelectionComponent() + && selectionModel.getSelection().getRelativeBounds().contains( + designer.getArea().getHorizontalValue() + e.getX(), + designer.getArea().getVerticalValue() + e.getY())) { + lastPressEvent = e; + lastXCreator = selectionModel.getSelection().getSelectedCreator(); + } else { + stateModel.startSelecting(e); + } + } + } else { + stateModel.startResizing(e); + } + } + } + + /** + * 释放 + * + * @param e 鼠标事件 + */ + public void mouseReleased(MouseEvent e) { + if (e.isPopupTrigger()) { + if (stateModel.isDragging()) { + stateModel.draggingCancel(); + } + } else { + if (designer.isDrawLineMode()) { + if (stateModel.prepareForDrawLining()) { + designer.getDrawLineHelper().setDrawLine(false); + designer.getDrawLineHelper().createDefalutLine(); + } + } else if (stateModel.isSelecting()) { + // 如果当前是区域选择状态,则选择该区域所含的组件 + designer.selectComponents(e); + } + if (stateModel.isDragging()) { + mouseDraggingRelease(e); + } + } + lastPressEvent = null; + lastXCreator = null; + } + + private void mouseDraggingRelease(MouseEvent e) { + // 当前鼠标所在的组件 + XCreator hoveredComponent = designer.getComponentAt(e.getX(), e.getY()); + if (designer.isWidgetsIntersect() && dragBackupBounds != null && hoveredComponent != null) { + XCreator selectionXCreator = designer.getSelectionModel().getSelection().getSelectedCreator(); + if (selectionXCreator != null) { + selectionXCreator.setBounds(dragBackupBounds.x, dragBackupBounds.y, dragBackupBounds.width, dragBackupBounds.height); + } + } + dragBackupBounds = null; + // 拉伸时鼠标拖动过快,导致所在组件获取会为空 + if (hoveredComponent == null && e.getY() < 0) { + // bug63538 + // 不是拖动过快导致的,而是纵坐标为负值导致的,这时参照横坐标为负值时的做法,取边界位置的组件,为鼠标所在点的组件 + // 如果直接return,界面上已经进行了拖拽不能恢复 + hoveredComponent = designer.getComponentAt(0, 0); + } + // 获取该组件所在的焦点容器 + XLayoutContainer container = XCreatorUtils.getHotspotContainer(hoveredComponent); + + if (container != null) { + boolean formSubmit2Adapt = !selectionModel.getSelection().getSelectedCreator().canEnterIntoAdaptPane() + && container.acceptType(XWFitLayout.class); + if (!formSubmit2Adapt) { + // 如果是处于拖拽状态,则释放组件 + stateModel.releaseDragging(e); + } else { + selectionModel.deleteSelection(); + designer.setPainter(null); + } + cancelPromptWidgetForbidEnter(); + } + } + + /** + * TODO 激活上下文菜单,待完善 + * 6.56暂时不支持右键 bugid 8777 + */ + private void triggerPopup(MouseEvent e) { + XCreator creator = selectionModel.getSelection().getSelectedCreator(); + if (creator == null) { + return; + } + JPopupMenu popupMenu = null; + ComponentAdapter adapter = AdapterBus.getComponentAdapter(designer, creator); + popupMenu = adapter.getContextPopupMenu(e); + + if (popupMenu != null) { + popupMenu.show(designer, e.getX(), e.getY()); + } + // 通知组件已经被选择了 + designer.getEditListenerTable().fireCreatorModified(creator, DesignerEvent.CREATOR_SELECTED); + } + + /** + * 移动 + * + * @param e 鼠标事件 + */ + public void mouseMoved(MouseEvent e) { + XCreator component = designer.getComponentAt(e); + + setCoverPaneNotDisplay(e, false); + + if (processTopLayoutMouseMove(component, e)) { + return; + } + if (component instanceof XEditorHolder) { + XEditorHolder xcreator = (XEditorHolder) component; + Rectangle rect = xcreator.getBounds(); + int min = rect.x + rect.width / 2 - minMoveSize; + int max = rect.x + rect.width / 2 + minMoveSize; + if (e.getX() > min && e.getX() < max) { + if (designer.getCursor().getType() != Cursor.HAND_CURSOR) { + designer.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + } + return; + } else { + if (designer.getCursor().getType() == Cursor.HAND_CURSOR) { + designer.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + } + } + } + Direction dir = selectionModel.getDirectionAt(e); + if (designer.isDrawLineMode() && stateModel.getDirection() == Location.outer) { + designer.updateDrawLineMode(e); + } + if (!BaseUtils.isAuthorityEditing()) { + stateModel.setDirection(dir); + } + + if (component.isReport()) { + elementCaseMouseMoved(e, component); + designer.repaint(); + return; + } + + processChartEditorMouseMove(component, e); + + designer.repaint(); + } + + private void elementCaseMouseMoved(MouseEvent e, XCreator component) { + xElementCase = (XElementCase) component; + UIButton button = (UIButton) xElementCase.getCoverPane().getComponent(0); + if (designer.getCursor().getType() == Cursor.HAND_CURSOR) { + designer.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + } // component.getParent() 是报表块所在的XWTitleLayout + int minX = button.getX() + getParentPositionX(component, 0) - designer.getArea().getHorizontalValue(); + int minY = button.getY() + getParentPositionY(component, 0) - designer.getArea().getVerticalValue(); + if (e.getX() + GAP - xElementCase.getInsets().left > minX && e.getX() - GAP - xElementCase.getInsets().left < minX + button.getWidth()) { + if (e.getY() + GAP - xElementCase.getInsets().top > minY && e.getY() - GAP - xElementCase.getInsets().top < minY + button.getHeight()) { + designer.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + } + } + xElementCase.setHelpBtnOnFocus(false); + if (xElementCase.getCoverPane().getComponentCount() > 1) { + JComponent button1 = (JComponent) xElementCase.getCoverPane().getComponent(1); + int minX1 = button1.getX() + getParentPositionX(component, 0) - designer.getArea().getHorizontalValue(); + int minY1 = button1.getY() + getParentPositionY(component, 0) - designer.getArea().getVerticalValue(); + if (e.getX() + GAP - xElementCase.getInsets().left > minX1 && e.getX() - GAP - xElementCase.getInsets().left < minX1 + button1.getWidth()) { + if (e.getY() + GAP - xElementCase.getInsets().top > minY1 && e.getY() - GAP - xElementCase.getInsets().top < minY1 + button1.getHeight()) { + designer.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + xElementCase.setHelpBtnOnFocus(true); + } + } + } + xElementCase.displayCoverPane(true); + xElementCase.setDirections(Direction.TOP_BOTTOM_LEFT_RIGHT); + } + + private void setCoverPaneNotDisplay(MouseEvent e, boolean isLinkedHelpDialog) { + if (xElementCase != null) { + int x = getParentPositionX(xElementCase, 0) - designer.getArea().getHorizontalValue(); + int y = getParentPositionY(xElementCase, 0) - designer.getArea().getVerticalValue(); + Rectangle rect = new Rectangle(x, y, xElementCase.getWidth(), xElementCase.getHeight()); + if (rect.contains(e.getPoint())) { + return; + } + if (isLinkedHelpDialog) { + xElementCase.destroyHelpDialog(); + } + xElementCase.displayCoverPane(false); + } + if (xChartEditor != null) { + xChartEditor.displayCoverPane(false); + } + + if (xTopLayoutContainer != null) { + xTopLayoutContainer.setMouseEnter(false); + } + designer.repaint(); + } + + private boolean processTopLayoutMouseMove(XCreator component, MouseEvent e) { + XLayoutContainer parent = XCreatorUtils.getHotspotContainer(component).getTopLayout(); + if (parent != null) { + xTopLayoutContainer = parent; + xTopLayoutContainer.setMouseEnter(true); + designer.repaint(); + if (!xTopLayoutContainer.isEditable()) { + if (designer.getCursor().getType() == Cursor.HAND_CURSOR) { + designer.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + } + int minX = getParentPositionX(parent, parent.getX()) + parent.getWidth() / 2; + int minY = getParentPositionY(parent, parent.getY()) + parent.getHeight() / 2; + int offsetX = EDIT_BTN_WIDTH / 2 + GAP; + int offsetY = EDIT_BTN_HEIGHT / 2 + GAP; + if (e.getX() > (minX - offsetX) && e.getX() < (minX + offsetX)) { + if (e.getY() > (minY - offsetY) && e.getY() < (minY + offsetY + designer.getParaHeight())) { + designer.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + } + } + return true; + } + } + return false; + } + + private void processChartEditorMouseMove(XCreator component, MouseEvent e) { + if (component instanceof XChartEditor) { + xChartEditor = (XChartEditor) component; + UIButton button = (UIButton) xChartEditor.getCoverPane().getComponent(0); + if (designer.getCursor().getType() == Cursor.HAND_CURSOR) { + designer.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + } + int minX = button.getX() + getParentPositionX(component, 0) - designer.getArea().getHorizontalValue(); + int minY = button.getY() + getParentPositionY(component, 0) - designer.getArea().getVerticalValue(); + if (e.getX() + GAP > minX && e.getX() - GAP < minX + button.getWidth()) { + if (e.getY() + GAP > minY && e.getY() - GAP < minY + button.getHeight()) { + designer.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + } + } + xChartEditor.displayCoverPane(true); + xChartEditor.setDirections(Direction.TOP_BOTTOM_LEFT_RIGHT); + designer.repaint(); + } + } + + private int getParentPositionX(XCreator comp, int x) { + return comp.getParent() == null ? + x : getParentPositionX((XCreator) comp.getParent(), comp.getParent().getX() + x); + } + + private int getParentPositionY(XCreator comp, int y) { + return comp.getParent() == null ? + y : getParentPositionY((XCreator) comp.getParent(), comp.getParent().getY() + y); + } + + /** + * 拖拽 + * + * @param e 鼠标事件 + */ + public void mouseDragged(MouseEvent e) { + if (BaseUtils.isAuthorityEditing()) { + return; + } + // 如果当前是左键拖拽状态,拖拽组件 + if (stateModel.dragable()) { + if (SwingUtilities.isRightMouseButton(e)) { + return; + } else { + stateModel.dragging(e); + // 获取e所在的焦点组件 + XCreator hotspot = designer.getComponentAt(e.getX(), e.getY()); + if (dragBackupBounds == null) { + XCreator selectingXCreator = designer.getSelectionModel().getSelection().getSelectedCreator(); + if (selectingXCreator != null) { + dragBackupBounds = new Rectangle(selectingXCreator.getX(), selectingXCreator.getY(), selectingXCreator.getWidth(), selectingXCreator.getHeight()); + } + } + // 拉伸时鼠标拖动过快,导致所在组件获取会为空 + if (hotspot == null) { + return; + } + // 获取焦点组件所在的焦点容器 + XLayoutContainer container = XCreatorUtils.getHotspotContainer(hotspot); + //提示组件是否可以拖入 + promptUser(e.getX(), e.getY(), container); + } + } else if (designer.isDrawLineMode()) { + if (stateModel.prepareForDrawLining()) { + stateModel.drawLine(e); + } + } else if (stateModel.isSelecting() && (selectionModel.getHotspotBounds() != null)) { + // 如果是拖拽选择区域状态,则更新选择区域 + stateModel.changeSelection(e); + } else { + if ((lastPressEvent == null) || (lastXCreator == null)) { + return; + } + if (e.getPoint().distance(lastPressEvent.getPoint()) > minDragSize) { + //参数面板和自适应布局不支持拖拽 + if (lastXCreator.isSupportDrag()) { + designer.startDraggingComponent(lastXCreator, lastPressEvent, e.getX(), e.getY()); + } + e.consume(); + lastPressEvent = null; + } + } + designer.repaint(); + } + + //当前编辑的组件是在布局中,鼠标点击布局外部,需要一次性将布局及其父布局都置为不可编辑 + private void setTopLayoutUnEditable(XLayoutContainer clickedTopLayout, XLayoutContainer clickingTopLayout) { + //双击的前后点击click为相同对象,过滤掉 + if (clickedTopLayout == null || clickedTopLayout == clickingTopLayout) { + return; + } + //位于同一层级的控件,父布局相同,过滤掉 + if (clickingTopLayout != null && clickedTopLayout.getParent() == clickingTopLayout.getParent()) { + return; + } + //前后点击的位于不同层级,要置为不可编辑 + XLayoutContainer xLayoutContainer = (XLayoutContainer) clickedTopLayout.getParent(); + if (xLayoutContainer == clickingTopLayout) { + return; + } + if (xLayoutContainer != null) { + xLayoutContainer.setEditable(false); + setTopLayoutUnEditable((XLayoutContainer) clickedTopLayout.getParent(), clickingTopLayout); + } + } + + private boolean isCreatorInLayout(XCreator creator, XCreator layout) { + if (creator.equals(layout)) { + return true; + } + if (layout.getParent() != null) { + return isCreatorInLayout(creator, (XCreator) layout.getParent()); + } + return false; + } + + private XCreator processTopLayoutMouseClick(XCreator creator) { + XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer(creator).getTopLayout(); + if (topLayout != null) { + if (clickTopLayout != null && !clickTopLayout.equals(topLayout) && !isCreatorInLayout(clickTopLayout, + topLayout)) { + clickTopLayout.setEditable(false); + setTopLayoutUnEditable(clickTopLayout, topLayout); + } + clickTopLayout = topLayout; + if (!topLayout.isEditable()) { + creator = topLayout; + } + } else { + if (clickTopLayout != null) { + clickTopLayout.setEditable(false); + setTopLayoutUnEditable(clickTopLayout, null); + } + } + + return creator; + } + + /** + * 点击 + * + * @param e 鼠标事件 + */ + public void mouseClicked(MouseEvent e) { + XCreator creator = designer.getComponentAt(e); + + if (e.getButton() != MouseEvent.BUTTON1 && !creator.acceptType(XCardSwitchButton.class)) { + return; + } + + creator = processTopLayoutMouseClick(creator); + + if (creator != null) { + creator.respondClick(this, e); + } + creator.doLayout(); + LayoutUtils.layoutRootContainer(designer.getRootComponent()); + } + + + /** + * 离开 + * + * @param e 鼠标事件 + */ + public void mouseExited(MouseEvent e) { + if (designer.getCursor().getType() != Cursor.DEFAULT_CURSOR) { + designer.setCursor(Cursor.getDefaultCursor()); + } + + setCoverPaneNotDisplay(e, true); + + cancelPromptWidgetForbidEnter(); + } + + /** + * 开始编辑 + * + * @param creator 容器 + * @param designerEditor 设计器 + * @param adapter 适配器 + */ + public void startEditing(XCreator creator, DesignerEditor designerEditor, ComponentAdapter adapter) { + if (designerEditor != null) { + Rectangle rect = ComponentUtils.getRelativeBounds(creator); + currentEditor = designerEditor; + currentXCreator = creator; + Rectangle bounds = new Rectangle(1, 1, creator.getWidth() - 2, creator.getHeight() - 2); + bounds.x += (rect.x - designer.getArea().getHorizontalValue()); + bounds.y += (rect.y - designer.getArea().getVerticalValue()); + designerEditor.getEditorTarget().setBounds(bounds); + designer.add(designerEditor.getEditorTarget()); + designer.invalidate(); + designer.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + designerEditor.getEditorTarget().requestFocus(); + designer.repaint(); + } + } + + /** + * 停止编辑 + * + * @return 是否编辑成功 + */ + public boolean stopEditing() { + if (currentEditor != null) { + designer.remove(currentEditor.getEditorTarget()); + currentEditor.fireEditStoped(); + + Container container = currentXCreator.getParent(); + + if (container != null) { + LayoutUtils.layoutRootContainer(container); + } + designer.invalidate(); + designer.repaint(); + currentXCreator = null; + currentEditor = null; + return true; + } + return true; + } + + /** + * 重置编辑控件大小 + */ + public void resetEditorComponentBounds() { + if (currentEditor == null) { + return; + } + + if (currentXCreator.getParent() == null) { + stopEditing(); + return; + } + + Rectangle rect = ComponentUtils.getRelativeBounds(currentXCreator); + Rectangle bounds = new Rectangle(1, 1, currentXCreator.getWidth() - 2, currentXCreator.getHeight() - 2); + bounds.x += (rect.x - designer.getArea().getHorizontalValue()); + bounds.y += (rect.y - designer.getArea().getVerticalValue()); + if (currentXCreator instanceof XEditorHolder) { + ToolTipEditor.getInstance().resetBounds((XEditorHolder) currentXCreator, bounds, currentEditor.getEditorTarget().getBounds()); + } + currentEditor.getEditorTarget().setBounds(bounds); + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/mainframe/FormDesigner.java b/designer_form/src/com/fr/design/mainframe/FormDesigner.java index d78cb5557..1dd61c559 100644 --- a/designer_form/src/com/fr/design/mainframe/FormDesigner.java +++ b/designer_form/src/com/fr/design/mainframe/FormDesigner.java @@ -46,7 +46,6 @@ import com.fr.form.ui.container.WFitLayout; import com.fr.general.ComparatorUtils; import com.fr.general.FRLogger; import com.fr.general.Inter; -import com.fr.plugin.ExtraClassManager; import com.fr.stable.ArrayUtils; import com.fr.stable.bridge.StableFactory; @@ -72,7 +71,6 @@ public class FormDesigner extends TargetComponent implements TreeSelection protected static final ArrayList NAME_ARRAY_LIST = new ArrayList( Arrays.asList(new String[]{Inter.getLocText("M_Edit-Cut"), Inter.getLocText("M_Edit-Copy"), Inter.getLocText("M_Edit-Delete")}) ); - private static final int BORDER_WIDTH = 6; //底层容器的默认大小 protected static final Dimension LARGE_PREFERRED_SIZE = new Dimension(WBorderLayout.DEFAULT_WIDTH, WBorderLayout.DEFAULT_HEIGHT); private int paraHeight = 0; @@ -84,7 +82,7 @@ public class FormDesigner extends TargetComponent implements TreeSelection private XLayoutContainer paraComponent; private boolean drawLineMode; private FormArea formArea; - private ConnectorHelper ConnectorHelper; + private ConnectorHelper connectorHelper; private boolean isReportBlockEditing = false; //组件重叠 @@ -107,7 +105,7 @@ public class FormDesigner extends TargetComponent implements TreeSelection // 编辑状态的事件表 private CreatorEventListenerTable edit; - protected Action[] designer_actions; + protected Action[] designerActions; private FormDesignerModeForSpecial desigerMode; private Action switchAction; private FormElementCaseContainerProvider elementCaseContainer; @@ -763,12 +761,9 @@ public class FormDesigner extends TargetComponent implements TreeSelection * @param e 鼠标事件 */ public void updateDrawLineMode(MouseEvent e) { - Point p = ConnectorHelper.getNearWidgetPoint(e); - if (p == null) { - XComponent comp = getComponentAt(e); - if (comp == rootComponent) { - p = new Point(e.getX() + formArea.getHorizontalValue(), e.getY() + formArea.getVerticalValue()); - } + Point p = connectorHelper.getNearWidgetPoint(e); + if (p == null && getComponentAt(e) == rootComponent) { + p = new Point(e.getX() + formArea.getHorizontalValue(), e.getY() + formArea.getVerticalValue()); } stateModel.startDrawLine(p); } @@ -1120,11 +1115,11 @@ public class FormDesigner extends TargetComponent implements TreeSelection * @return 同上 */ public Action[] getActions() { - if (designer_actions == null) { - designer_actions = new Action[]{new CutAction(this), new CopyAction(this), new PasteAction(this), + if (designerActions == null) { + designerActions = new Action[]{new CutAction(this), new CopyAction(this), new PasteAction(this), new FormDeleteAction(this)}; } - return designer_actions; + return designerActions; } protected Border getOuterBorder() { @@ -1191,7 +1186,7 @@ public class FormDesigner extends TargetComponent implements TreeSelection * @return ConnectorHelper类 */ public ConnectorHelper getDrawLineHelper() { - return ConnectorHelper; + return connectorHelper; } /** diff --git a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java index dc40b0e18..4f6c937bc 100644 --- a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java +++ b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java @@ -204,14 +204,14 @@ public class FormSelectionUtils { private static ArrayList rebuildSelection(XCreator rootComponent, List selectionWidget, ArrayList newSelection) { - FormSelectionUtils._rebuild(rootComponent, selectionWidget, newSelection); + FormSelectionUtils.rebuild(rootComponent, selectionWidget, newSelection); if (newSelection.isEmpty()) { newSelection.add(rootComponent); } return newSelection; } - private static void _rebuild(XCreator root, List selectionWidget, List newSelection) { + private static void rebuild(XCreator root, List selectionWidget, List newSelection) { if (selectionWidget.isEmpty()) { return; } @@ -238,7 +238,7 @@ public class FormSelectionUtils { } } if (c instanceof XLayoutContainer) { - _rebuild((XLayoutContainer) c, selectionWidget, newSelection); + rebuild((XLayoutContainer) c, selectionWidget, newSelection); } } } diff --git a/designer_form/src/com/fr/design/mainframe/JForm.java b/designer_form/src/com/fr/design/mainframe/JForm.java index eb8c90f3a..ba491e351 100644 --- a/designer_form/src/com/fr/design/mainframe/JForm.java +++ b/designer_form/src/com/fr/design/mainframe/JForm.java @@ -1,792 +1,791 @@ -package com.fr.design.mainframe; - -import com.fr.base.BaseUtils; -import com.fr.design.DesignState; -import com.fr.design.actions.core.WorkBookSupportable; -import com.fr.design.actions.file.WebPreviewUtils; -import com.fr.design.cell.FloatElementsProvider; -import com.fr.design.constants.UIConstants; -import com.fr.design.designer.beans.actions.CopyAction; -import com.fr.design.designer.beans.actions.CutAction; -import com.fr.design.designer.beans.actions.FormDeleteAction; -import com.fr.design.designer.beans.actions.PasteAction; -import com.fr.design.designer.beans.events.DesignerEditListener; -import com.fr.design.designer.beans.events.DesignerEvent; -import com.fr.design.designer.creator.*; -import com.fr.design.designer.properties.FormWidgetAuthorityEditPane; -import com.fr.design.event.TargetModifiedEvent; -import com.fr.design.event.TargetModifiedListener; -import com.fr.design.gui.frpane.HyperlinkGroupPane; -import com.fr.design.gui.ilable.UILabel; -import com.fr.design.gui.imenu.UIMenuItem; -import com.fr.design.gui.xpane.FormHyperlinkGroupPane; -import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.design.mainframe.actions.EmbeddedFormExportExportAction; -import com.fr.design.mainframe.actions.FormMobileAttrAction; -import com.fr.design.mainframe.actions.TemplateParameterAction; -import com.fr.design.mainframe.form.FormECCompositeProvider; -import com.fr.design.mainframe.form.FormECDesignerProvider; -import com.fr.design.mainframe.templateinfo.JFormProcessInfo; -import com.fr.design.mainframe.templateinfo.TemplateProcessInfo; -import com.fr.design.mainframe.toolbar.ToolBarMenuDock; -import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; -import com.fr.design.menu.KeySetUtils; -import com.fr.design.menu.MenuDef; -import com.fr.design.menu.ShortCut; -import com.fr.design.menu.ToolBarDef; -import com.fr.design.parameter.ParameterPropertyPane; -import com.fr.design.roleAuthority.RolesAlreadyEditedPane; -import com.fr.design.utils.gui.LayoutUtils; -import com.fr.file.FILE; -import com.fr.form.FormElementCaseContainerProvider; -import com.fr.form.FormElementCaseProvider; -import com.fr.form.main.Form; -import com.fr.form.ui.Widget; -import com.fr.form.ui.container.WBorderLayout; -import com.fr.form.ui.container.WFitLayout; -import com.fr.form.ui.container.WLayout; -import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; -import com.fr.general.Inter; -import com.fr.stable.ArrayUtils; -import com.fr.stable.Constants; -import com.fr.stable.bridge.StableFactory; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.image.BufferedImage; -import java.util.HashMap; - -public class JForm extends JTemplate implements BaseJForm { - private static final String FORM_CARD = "FORM"; - private static final String ELEMENTCASE_CARD = "ELEMENTCASE"; - - private static final String[] CARDNAME = new String[]{FORM_CARD, ELEMENTCASE_CARD}; - private static final int TOOLBARPANEDIMHEIGHT_FORM = 60; - - //表单设计器 - private FormDesigner formDesign; - //格子设计器 - private FormECDesignerProvider elementCaseDesign; - - //中间编辑区域, carllayout布局 - private JPanel tabCenterPane; - private CardLayout cardLayout; - //当前编辑的组件对象 - private JComponent editingComponent; - private FormECCompositeProvider reportComposite; - - //FORM_TAB代表是否点击编辑,用于点击编辑前后菜单的显示 - protected int index = FORM_TAB; - - public JForm() { - super(new Form(new WBorderLayout("form")), "Form"); - } - - public JForm(Form form, FILE file) { - super(form, file); - } - - public int getMenuState() { - - return DesignState.JFORM; - } - - public TemplateProcessInfo getProcessInfo() { - if (processInfo == null) { - processInfo = new JFormProcessInfo(template); - } - return processInfo; - } - - @Override - protected boolean accept(Object o) { - return !(o instanceof FloatElementsProvider); - } - - /** - * 是否是报表 - * - * @return 否 - */ - public boolean isJWorkBook() { - return false; - } - - /** - * 返回当前支持的超链界面pane - * - * @return 超链连接界面 - */ - public HyperlinkGroupPane getHyperLinkPane() { - return new FormHyperlinkGroupPane(); - } - - //表单返回 FORM_TAB or ELEMENTCASE_TAB - public int getEditingReportIndex() { - return this.index; - } - - public void setAuthorityMode(boolean isUpMode) { - return; - } - - public int getToolBarHeight() { - return TOOLBARPANEDIMHEIGHT_FORM; - } - - /** - * 菜单栏上的文件按钮 - * - * @return 菜单数组 - */ - public ShortCut[] shortcut4FileMenu() { - return (ShortCut[]) ArrayUtils.addAll( - super.shortcut4FileMenu(), new ShortCut[]{this.createWorkBookExportMenu()} - ); - } - - private MenuDef createWorkBookExportMenu() { - MenuDef exportMenuDef = new MenuDef(KeySetUtils.EXPORT.getMenuName()); - exportMenuDef.setIconPath("/com/fr/design/images/m_file/export.png"); - exportMenuDef.addShortCut(new EmbeddedFormExportExportAction(this)); - - return exportMenuDef; - } - - /** - * 取消格式 - */ - public void cancelFormat() { - return; - } - - /** - * 重新计算大小 - */ - public void doResize() { - formDesign.getRootComponent().setSize(formDesign.getSize()); - LayoutUtils.layoutRootContainer(formDesign.getRootComponent()); - } - - @Override - protected JPanel createCenterPane() { - tabCenterPane = FRGUIPaneFactory.createCardLayout_S_Pane(); - cardLayout = (CardLayout) tabCenterPane.getLayout(); - - JPanel centerPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); - centerPane.setBorder(BorderFactory.createMatteBorder(0, 0, 0, 0, new Color(85, 85, 85))); - formDesign = new FormDesigner(this.getTarget(), new TabChangeAction(BaseJForm.ELEMENTCASE_TAB, this)); - WidgetToolBarPane.getInstance(formDesign); - FormArea area = new FormArea(formDesign); - centerPane.add(area, BorderLayout.CENTER); - tabCenterPane.add(centerPane, FORM_CARD, FORM_TAB); - - this.add(tabCenterPane, BorderLayout.CENTER); - - formDesign.addTargetModifiedListener(new TargetModifiedListener() { - - @Override - public void targetModified(TargetModifiedEvent e) { - JForm.this.fireTargetModified();// 调用保存*, 调用刷新界面, 刷新工具栏按钮 - } - }); - formDesign.addDesignerEditListener(new DesignerEditListener() { - - @Override - public void fireCreatorModified(DesignerEvent evt) { - if (evt.getCreatorEventID() == DesignerEvent.CREATOR_CUTED - || evt.getCreatorEventID() == DesignerEvent.CREATOR_DELETED) { - setPropertyPaneChange(formDesign.getRootComponent()); - } else if (evt.getCreatorEventID() == DesignerEvent.CREATOR_SELECTED) { - setPropertyPaneChange(evt.getAffectedCreator()); - } - } - }); - return tabCenterPane; - } - - public FormDesigner getFormDesign() { - return formDesign; - } - - public void setFormDesign(FormDesigner formDesign) { - this.formDesign = formDesign; - } - - /** - * 去除选择 - */ - public void removeTemplateSelection() { - return; - } - - public void setSheetCovered(boolean isCovered) { - - } - - /** - * 刷新容器 - */ - public void refreshContainer() { - - } - - /** - * 去除参数面板选择 - */ - public void removeParameterPaneSelection() { - return; - } - - /** - * 创建权限细粒度编辑面板 - * - * @return 权限细粒度编辑面板 - */ - public AuthorityEditPane createAuthorityEditPane() { - FormWidgetAuthorityEditPane formWidgetAuthorityEditPane = new FormWidgetAuthorityEditPane(formDesign); - formWidgetAuthorityEditPane.populateDetials(); - return formWidgetAuthorityEditPane; - } - - - private void setPropertyPaneChange(XComponent comp) { - if (comp == null) { - return; - } - editingComponent = comp.createToolPane(this, formDesign); - if (BaseUtils.isAuthorityEditing()) { - EastRegionContainerPane.getInstance().replaceUpPane( - ComparatorUtils.equals(editingComponent.getClass(), NoSupportAuthorityEdit.class) ? editingComponent : createAuthorityEditPane()); - } else { - EastRegionContainerPane.getInstance().replaceUpPane(editingComponent); - - } - } - - public JComponent getEditingPane() { - return editingComponent; - } - - - public ToolBarMenuDockPlus getToolBarMenuDockPlus() { - return this; - } - - - /** - * 焦点放到JForm - */ - @Override - public void requestFocus() { - super.requestFocus(); - formDesign.requestFocus(); - } - - /** - * 焦点放到JForm - */ - public void requestGridFocus() { - super.requestFocus(); - formDesign.requestFocus(); - } - - /** - * 保存文件的后缀名 - * - * @return 返回后缀名 - */ - @Override - public String suffix() { - // daniel改成三个字 - return ".frm"; - } - - /** - * 刷新 - */ - public void refreshRoot() { - // formDesign子类的target重置 - this.formDesign.setTarget(this.getTarget()); - this.formDesign.refreshRoot(); - FormHierarchyTreePane.getInstance().refreshRoot(); - } - - /** - * 刷新s - */ - public void refreshAllNameWidgets() { - if (formDesign.getParaComponent() != null) { - XCreatorUtils.refreshAllNameWidgets(formDesign.getParaComponent()); - } - XCreatorUtils.refreshAllNameWidgets(formDesign.getRootComponent()); - } - - /** - * 刷新 - */ - public void refreshSelectedWidget() { - formDesign.getEditListenerTable().fireCreatorModified(DesignerEvent.CREATOR_SELECTED); - } - - - /** - * 复制 - */ - @Override - public void copy() { - this.formDesign.copy(); - } - - - /** - * 粘贴 - * - * @return 是否成功 - */ - @Override - public boolean paste() { - return this.formDesign.paste(); - } - - - /** - * 剪切 - * - * @return 是否成功 - */ - @Override - public boolean cut() { - return this.formDesign.cut(); - } - - // //////////////////////////////////////////////////////////////////// - // ////////////////for toolbarMenuAdapter////////////////////////////// - // //////////////////////////////////////////////////////////////////// - - - /** - * 目标菜单 - * - * @return 菜单 - */ - @Override - public MenuDef[] menus4Target() { - return this.index == FORM_TAB ? - (MenuDef[]) ArrayUtils.addAll(super.menus4Target(), this.formDesign.menus4Target()) : - (MenuDef[]) ArrayUtils.addAll(super.menus4Target(), this.elementCaseDesign.menus4Target()); - } - - - /** - * 模板的工具 - * - * @return 工具 - */ - @Override - public ToolBarDef[] toolbars4Target() { - return this.index == FORM_TAB ? - this.formDesign.toolbars4Target() : - this.elementCaseDesign.toolbars4Target(); - } - - - /** - * 模板菜单 - * - * @return 返回菜单 - */ - @Override - public ShortCut[] shortcut4TemplateMenu() { - if (this.index == FORM_TAB) { - return (ShortCut[]) ArrayUtils.addAll(new ShortCut[]{ - new TemplateParameterAction(this), - new FormMobileAttrAction(this) - }, new ShortCut[0]); - } else { - return (ShortCut[]) ArrayUtils.addAll(new ShortCut[]{ - new TemplateParameterAction(this), - new FormMobileAttrAction(this) - }, this.elementCaseDesign.shortcut4TemplateMenu()); - } - } - - /** - * 权限细粒度模板菜单 - * 表单中去掉此菜单项 - * - * @return 菜单 - */ - public ShortCut[] shortCuts4Authority() { - return new ShortCut[0]; - } - - @Override - protected FormUndoState createUndoState() { - FormUndoState cur = new FormUndoState(this, this.formDesign.getArea()); - if (this.formDesign.isReportBlockEditing()) { - cur.setFormReportType(BaseUndoState.STATE_FORM_REPORT); - } - return cur; - } - - /** - * 应用UndoState - * - * @param o undo的状态 - */ - public void applyUndoState4Form(BaseUndoState o) { - this.applyUndoState((FormUndoState) o); - } - - /** - * 可以撤销 - * - * @return 是则返回true - */ - public boolean canUndo() { - //报表块最多撤销至编辑报表块的第一步,不能撤销表单中的操作 - boolean inECUndoForm = undoState.getFormReportType() == BaseUndoState.STATE_BEFORE_FORM_REPORT && formDesign.isReportBlockEditing(); - return !inECUndoForm && this.getUndoManager().canUndo(); - } - - // 返回当前的body, - // 假如当前body是自适应的话就沿用, - // 假如当前body是绝对布局的话就返回绝对布局body - private XLayoutContainer selectedBodyLayout() { - XLayoutContainer rootLayout = formDesign.getRootComponent(); - for (int i = 0; i < rootLayout.getComponentCount(); i++) { - if (rootLayout.getXCreator(i).acceptType(XWAbsoluteBodyLayout.class)) { - rootLayout = (XWAbsoluteBodyLayout) rootLayout.getXCreator(i); - } - } - return rootLayout; - } - - @Override - protected void applyUndoState(FormUndoState u) { - try { - //JForm的target重置 - this.setTarget((Form) u.getForm().clone()); - if (this.index == FORM_TAB) { - JForm.this.refreshRoot(); - this.formDesign.getArea().setAreaSize(u.getAreaSize(), u.getHorizontalValue(), u.getVerticalValue(), u.getWidthValue(), u.getHeightValue(), u.getSlideValue()); - //撤销的时候要重新选择的body布局 - this.formDesign.getSelectionModel().setSelectedCreators(FormSelectionUtils.rebuildSelection(formDesign.getRootComponent(), - formDesign.getRootComponent() == selectedBodyLayout() ? u.getSelectWidgets() : new Widget[]{selectedBodyLayout().toData()})); - } else { - String widgetName = this.formDesign.getElementCaseContainerName(); - //这儿太坑了,u.getForm() 与 getTarget内容不一样 - FormElementCaseProvider dataTable = getTarget().getElementCaseByName(widgetName); - this.reportComposite.setSelectedWidget(dataTable); - //下面这句话是防止撤销之后直接退出编辑再编辑撤销的东西会回来,因为撤销不会保存EC - formDesign.setElementCase(dataTable); - } - } catch (CloneNotSupportedException e) { - throw new RuntimeException(e); - } - - if (BaseUtils.isAuthorityEditing()) { - this.authorityUndoState = u; - } else { - this.undoState = u; - } - - } - - @Override - protected FormModelAdapter createDesignModel() { - return new FormModelAdapter(this); - } - - @Override - public JPanel[] toolbarPanes4Form() { - return this.index == FORM_TAB ? - new JPanel[]{FormParaWidgetPane.getInstance(formDesign)} : - new JPanel[0]; - } - - /** - * 表单的工具按钮 - * - * @return 工具按钮 - */ - public JComponent[] toolBarButton4Form() { - return this.index == FORM_TAB ? - new JComponent[]{ - new CutAction(formDesign).createToolBarComponent(), - new CopyAction(formDesign).createToolBarComponent(), - new PasteAction(formDesign).createToolBarComponent(), - new FormDeleteAction(formDesign).createToolBarComponent()} : - elementCaseDesign.toolBarButton4Form(); - } - - /** - * 权限细粒度状态下的工具面板 - * - * @return 工具面板 - */ - public JComponent toolBar4Authority() { - JPanel panel = new JPanel(new BorderLayout()) { - public Dimension getPreferredSize() { - Dimension dim = super.getPreferredSize(); - dim.height = ToolBarMenuDock.PANLE_HEIGNT; - return dim; - } - }; - UILabel uiLabel = new UILabel(Inter.getLocText(new String[]{"DashBoard-FormBook", "Privilege", "Edit"})); - uiLabel.setHorizontalAlignment(SwingConstants.CENTER); - uiLabel.setFont(new Font(Inter.getLocText("FR-Designer-All_MSBold"), 0, 14)); - uiLabel.setForeground(new Color(150, 150, 150)); - panel.add(uiLabel, BorderLayout.CENTER); - return panel; - } - - - public JPanel getEastUpPane() { - if (BaseUtils.isAuthorityEditing()) { - if (formDesign.isSupportAuthority()) { - return new AuthorityPropertyPane(this); - } else { - return new NoSupportAuthorityEdit(); - } - } else { - if (editingComponent == null) { - editingComponent = formDesign.getRootComponent().createToolPane(this, formDesign); - } - return (JPanel) editingComponent; - } - } - - public JPanel getEastDownPane() { - return formDesign.getEastDownPane(); - } - - @Override - /** - * - */ - public Icon getPreviewLargeIcon() { - return UIConstants.RUN_BIG_ICON; - } - - @Override - /** - * 创建菜单项Preview - * - * @return 菜单 - */ - public UIMenuItem[] createMenuItem4Preview() { - UIMenuItem form = new UIMenuItem(Inter.getLocText("M-Form_Preview"), UIConstants.RUN_SMALL_ICON); - form.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - WebPreviewUtils.onFormPreview(JForm.this); - } - }); - return new UIMenuItem[]{form}; - } - - /** - * 刷新参数 - */ - public void populateParameter() { - formDesign.populateParameterPropertyPane(); - } - - @Override - /** - * 刷新工具区域 - */ - public void refreshToolArea() { - populateParameter(); - DesignerContext.getDesignerFrame().resetToolkitByPlus(JForm.this); - //表单切换后拖不进去组件是因为找不到designer - WidgetToolBarPane.getInstance(formDesign); - if (BaseUtils.isAuthorityEditing()) { - if (formDesign.isSupportAuthority()) { - EastRegionContainerPane.getInstance().replaceUpPane(new AuthorityPropertyPane(this)); - } else { - EastRegionContainerPane.getInstance().replaceUpPane(new NoSupportAuthorityEdit()); - } - EastRegionContainerPane.getInstance().replaceDownPane(RolesAlreadyEditedPane.getInstance()); - return; - } - - if (formDesign.isReportBlockEditing()) { - if (elementCaseDesign != null) { - EastRegionContainerPane.getInstance().removeParameterPane(); - EastRegionContainerPane.getInstance().replaceDownPane(elementCaseDesign.getEastDownPane()); - EastRegionContainerPane.getInstance().replaceUpPane(elementCaseDesign.getEastUpPane()); - return; - } - } - - EastRegionContainerPane.getInstance().replaceUpPane(WidgetPropertyPane.getInstance(formDesign)); - EastRegionContainerPane.getInstance().addParameterPane(ParameterPropertyPane.getInstance(formDesign)); - EastRegionContainerPane.getInstance().setParameterHeight(ParameterPropertyPane.getInstance(formDesign).getPreferredSize().height); - if (EastRegionContainerPane.getInstance().getDownPane() == null) { - new Thread() { - public void run() { - try { - Thread.sleep(1500); - } catch (InterruptedException e) { - FRLogger.getLogger().error(e.getMessage(), e); - } - JPanel pane = new JPanel(); - pane.setLayout(new BorderLayout()); - pane.add(FormWidgetDetailPane.getInstance(formDesign), BorderLayout.CENTER); - EastRegionContainerPane.getInstance().replaceDownPane(pane); - } - }.start(); - } else { - JPanel pane = new JPanel(); - pane.setLayout(new BorderLayout()); - pane.add(FormWidgetDetailPane.getInstance(formDesign), BorderLayout.CENTER); - EastRegionContainerPane.getInstance().replaceDownPane(pane); - - } - } - - public String getEditingCreatorName() { - return formDesign.getSelectionModel().getSelection().getSelectedCreator().toData().getWidgetName(); - } - - public WLayout getRootLayout() { - return formDesign.getRootComponent().toData(); - } - - /** - * 选择的是否是表单主体 - * - * @return 是则返回true - */ - public boolean isSelectRootPane() { - return (formDesign.getRootComponent() == formDesign.getSelectionModel().getSelection().getSelectedCreator()) - || (formDesign.getSelectionModel().getSelection().getSelectedCreator().acceptType(XWAbsoluteBodyLayout.class)); - - } - - /** - * 只在Form和ElementCase之间切换 - * - * @param index 切换位置 - */ - public void tabChanged(int index) { - if (index == ELEMENTCASE_TAB) { - formDesign.setReportBlockEditing(true); - ecTabAction(); - } else { - formDesign.setReportBlockEditing(false); - formTabAction(); - } - this.index = index; - refreshToolArea(); - this.cardLayout.show(tabCenterPane, CARDNAME[index]); - if (elementCaseDesign != null && index == ELEMENTCASE_TAB) { - //报表块编辑失焦,进入报表块可直接编辑A1 - elementCaseDesign.requestFocus(); - //进入编辑报表块,触发一次保存,记住编辑报表块前的表单状态 - //防止报表块中撤销到表单 - JForm.this.fireTargetModified(); - } - } - - /** - * 在Form和ElementCase, 以及ElementCase和ElementCase之间切换 - * - * @param index 切换位置 - * @param ecContainer ElementCase所在container - */ - public void tabChanged(int index, FormElementCaseContainerProvider ecContainer) { - if (index == ELEMENTCASE_CHANGE_TAB) { - saveImage(); - //更新FormDesign中的控件容器 - formDesign.setElementCaseContainer(ecContainer); - //如果只是内部ElementCase之间的切换, 那么不需要下面的界面变动 - return; - } - - tabChanged(index); - } - - /** - * 格子编辑组件 - */ - private FormECDesignerProvider initElementCaseDesign() { - HashMap designerClass = new HashMap(); - designerClass.put(Constants.ARG_0, FormElementCaseProvider.class); - - Object[] designerArg = new Object[]{formDesign.getElementCase()}; - return StableFactory.getMarkedInstanceObjectFromClass(FormECDesignerProvider.XML_TAG, designerArg, designerClass, FormECDesignerProvider.class); - } - - /** - * 整个报表块编辑区域 - */ - private FormECCompositeProvider initComposite() { - Object[] compositeArg = new Object[]{this, elementCaseDesign, formDesign.getElementCaseContainer()}; - HashMap compoClass = new HashMap(); - compoClass.put(Constants.ARG_0, BaseJForm.class); - compoClass.put(Constants.ARG_2, FormElementCaseContainerProvider.class); - return StableFactory.getMarkedInstanceObjectFromClass(FormECCompositeProvider.XML_TAG, compositeArg, compoClass, FormECCompositeProvider.class); - } - - /** - * 切换格子编辑 - */ - private void ecTabAction() { - elementCaseDesign = initElementCaseDesign(); - reportComposite = initComposite(); - - tabCenterPane.add((Component) reportComposite, ELEMENTCASE_CARD, 1); - reportComposite.addTargetModifiedListener(new TargetModifiedListener() { - - @Override - public void targetModified(TargetModifiedEvent e) { - JForm.this.fireTargetModified(); - FormElementCaseProvider te = elementCaseDesign.getEditingElementCase(); - formDesign.setElementCase(te); - } - }); - } - - private void saveImage() { - //触发一次保存, 把缩略图保存起来 - JForm.this.fireTargetModified(); - //用formDesign的size是为了当报表块被拉伸时, 它对应的背景图片需要足够大才不会显示成空白 - BufferedImage image = elementCaseDesign.getElementCaseImage(formDesign.getSize()); - formDesign.setElementCaseBackground(image); - } - - /** - * 切换form编辑 - */ - private void formTabAction() { - saveImage(); - } - - /** - * 取小图标,主要用于多TAB标签栏 - * - * @return 图表 - */ - public Icon getIcon() { - return BaseUtils.readIcon("/com/fr/web/images/form/new_form3.png"); - } - - @Override - public boolean acceptToolbarItem(Class clazz) { - return WorkBookSupportable.class.isAssignableFrom(clazz); - } - - @Override - public Widget getSelectElementCase() { - FormSelection selection = formDesign.getSelectionModel().getSelection(); - XCreator creator = selection.getSelectedCreator(); - return creator.toData(); - } +package com.fr.design.mainframe; + +import com.fr.base.BaseUtils; +import com.fr.design.DesignState; +import com.fr.design.actions.core.WorkBookSupportable; +import com.fr.design.actions.file.WebPreviewUtils; +import com.fr.design.cell.FloatElementsProvider; +import com.fr.design.constants.UIConstants; +import com.fr.design.designer.beans.actions.CopyAction; +import com.fr.design.designer.beans.actions.CutAction; +import com.fr.design.designer.beans.actions.FormDeleteAction; +import com.fr.design.designer.beans.actions.PasteAction; +import com.fr.design.designer.beans.events.DesignerEditListener; +import com.fr.design.designer.beans.events.DesignerEvent; +import com.fr.design.designer.creator.*; +import com.fr.design.designer.properties.FormWidgetAuthorityEditPane; +import com.fr.design.event.TargetModifiedEvent; +import com.fr.design.event.TargetModifiedListener; +import com.fr.design.gui.frpane.HyperlinkGroupPane; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.imenu.UIMenuItem; +import com.fr.design.gui.xpane.FormHyperlinkGroupPane; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.actions.EmbeddedFormExportExportAction; +import com.fr.design.mainframe.actions.FormMobileAttrAction; +import com.fr.design.mainframe.actions.TemplateParameterAction; +import com.fr.design.mainframe.form.FormECCompositeProvider; +import com.fr.design.mainframe.form.FormECDesignerProvider; +import com.fr.design.mainframe.templateinfo.JFormProcessInfo; +import com.fr.design.mainframe.templateinfo.TemplateProcessInfo; +import com.fr.design.mainframe.toolbar.ToolBarMenuDock; +import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; +import com.fr.design.menu.KeySetUtils; +import com.fr.design.menu.MenuDef; +import com.fr.design.menu.ShortCut; +import com.fr.design.menu.ToolBarDef; +import com.fr.design.parameter.ParameterPropertyPane; +import com.fr.design.roleAuthority.RolesAlreadyEditedPane; +import com.fr.design.utils.gui.LayoutUtils; +import com.fr.file.FILE; +import com.fr.form.FormElementCaseContainerProvider; +import com.fr.form.FormElementCaseProvider; +import com.fr.form.main.Form; +import com.fr.form.ui.Widget; +import com.fr.form.ui.container.WBorderLayout; +import com.fr.form.ui.container.WLayout; +import com.fr.general.ComparatorUtils; +import com.fr.general.FRLogger; +import com.fr.general.Inter; +import com.fr.stable.ArrayUtils; +import com.fr.stable.Constants; +import com.fr.stable.bridge.StableFactory; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.image.BufferedImage; +import java.util.HashMap; + +public class JForm extends JTemplate implements BaseJForm { + private static final String FORM_CARD = "FORM"; + private static final String ELEMENTCASE_CARD = "ELEMENTCASE"; + + private static final String[] CARDNAME = new String[]{FORM_CARD, ELEMENTCASE_CARD}; + private static final int TOOLBARPANEDIMHEIGHT_FORM = 60; + + //表单设计器 + private FormDesigner formDesign; + //格子设计器 + private FormECDesignerProvider elementCaseDesign; + + //中间编辑区域, carllayout布局 + private JPanel tabCenterPane; + private CardLayout cardLayout; + //当前编辑的组件对象 + private JComponent editingComponent; + private FormECCompositeProvider reportComposite; + + //FORM_TAB代表是否点击编辑,用于点击编辑前后菜单的显示 + protected int index = FORM_TAB; + + public JForm() { + super(new Form(new WBorderLayout("form")), "Form"); + } + + public JForm(Form form, FILE file) { + super(form, file); + } + + public int getMenuState() { + + return DesignState.JFORM; + } + + public TemplateProcessInfo getProcessInfo() { + if (processInfo == null) { + processInfo = new JFormProcessInfo(template); + } + return processInfo; + } + + @Override + protected boolean accept(Object o) { + return !(o instanceof FloatElementsProvider); + } + + /** + * 是否是报表 + * + * @return 否 + */ + public boolean isJWorkBook() { + return false; + } + + /** + * 返回当前支持的超链界面pane + * + * @return 超链连接界面 + */ + public HyperlinkGroupPane getHyperLinkPane() { + return new FormHyperlinkGroupPane(); + } + + //表单返回 FORM_TAB or ELEMENTCASE_TAB + public int getEditingReportIndex() { + return this.index; + } + + public void setAuthorityMode(boolean isUpMode) { + return; + } + + public int getToolBarHeight() { + return TOOLBARPANEDIMHEIGHT_FORM; + } + + /** + * 菜单栏上的文件按钮 + * + * @return 菜单数组 + */ + public ShortCut[] shortcut4FileMenu() { + return (ShortCut[]) ArrayUtils.addAll( + super.shortcut4FileMenu(), new ShortCut[]{this.createWorkBookExportMenu()} + ); + } + + private MenuDef createWorkBookExportMenu() { + MenuDef exportMenuDef = new MenuDef(KeySetUtils.EXPORT.getMenuName()); + exportMenuDef.setIconPath("/com/fr/design/images/m_file/export.png"); + exportMenuDef.addShortCut(new EmbeddedFormExportExportAction(this)); + + return exportMenuDef; + } + + /** + * 取消格式 + */ + public void cancelFormat() { + return; + } + + /** + * 重新计算大小 + */ + public void doResize() { + formDesign.getRootComponent().setSize(formDesign.getSize()); + LayoutUtils.layoutRootContainer(formDesign.getRootComponent()); + } + + @Override + protected JPanel createCenterPane() { + tabCenterPane = FRGUIPaneFactory.createCardLayout_S_Pane(); + cardLayout = (CardLayout) tabCenterPane.getLayout(); + + JPanel centerPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + centerPane.setBorder(BorderFactory.createMatteBorder(0, 0, 0, 0, new Color(85, 85, 85))); + formDesign = new FormDesigner(this.getTarget(), new TabChangeAction(BaseJForm.ELEMENTCASE_TAB, this)); + WidgetToolBarPane.getInstance(formDesign); + FormArea area = new FormArea(formDesign); + centerPane.add(area, BorderLayout.CENTER); + tabCenterPane.add(centerPane, FORM_CARD, FORM_TAB); + + this.add(tabCenterPane, BorderLayout.CENTER); + + formDesign.addTargetModifiedListener(new TargetModifiedListener() { + + @Override + public void targetModified(TargetModifiedEvent e) { + JForm.this.fireTargetModified();// 调用保存*, 调用刷新界面, 刷新工具栏按钮 + } + }); + formDesign.addDesignerEditListener(new DesignerEditListener() { + + @Override + public void fireCreatorModified(DesignerEvent evt) { + if (evt.getCreatorEventID() == DesignerEvent.CREATOR_CUTED + || evt.getCreatorEventID() == DesignerEvent.CREATOR_DELETED) { + setPropertyPaneChange(formDesign.getRootComponent()); + } else if (evt.getCreatorEventID() == DesignerEvent.CREATOR_SELECTED) { + setPropertyPaneChange(evt.getAffectedCreator()); + } + } + }); + return tabCenterPane; + } + + public FormDesigner getFormDesign() { + return formDesign; + } + + public void setFormDesign(FormDesigner formDesign) { + this.formDesign = formDesign; + } + + /** + * 去除选择 + */ + public void removeTemplateSelection() { + return; + } + + public void setSheetCovered(boolean isCovered) { + + } + + /** + * 刷新容器 + */ + public void refreshContainer() { + + } + + /** + * 去除参数面板选择 + */ + public void removeParameterPaneSelection() { + return; + } + + /** + * 创建权限细粒度编辑面板 + * + * @return 权限细粒度编辑面板 + */ + public AuthorityEditPane createAuthorityEditPane() { + FormWidgetAuthorityEditPane formWidgetAuthorityEditPane = new FormWidgetAuthorityEditPane(formDesign); + formWidgetAuthorityEditPane.populateDetials(); + return formWidgetAuthorityEditPane; + } + + + private void setPropertyPaneChange(XComponent comp) { + if (comp == null) { + return; + } + editingComponent = comp.createToolPane(this, formDesign); + if (BaseUtils.isAuthorityEditing()) { + EastRegionContainerPane.getInstance().replaceUpPane( + ComparatorUtils.equals(editingComponent.getClass(), NoSupportAuthorityEdit.class) ? editingComponent : createAuthorityEditPane()); + } else { + EastRegionContainerPane.getInstance().replaceUpPane(editingComponent); + + } + } + + public JComponent getEditingPane() { + return editingComponent; + } + + + public ToolBarMenuDockPlus getToolBarMenuDockPlus() { + return this; + } + + + /** + * 焦点放到JForm + */ + @Override + public void requestFocus() { + super.requestFocus(); + formDesign.requestFocus(); + } + + /** + * 焦点放到JForm + */ + public void requestGridFocus() { + super.requestFocus(); + formDesign.requestFocus(); + } + + /** + * 保存文件的后缀名 + * + * @return 返回后缀名 + */ + @Override + public String suffix() { + // daniel改成三个字 + return ".frm"; + } + + /** + * 刷新 + */ + public void refreshRoot() { + // formDesign子类的target重置 + this.formDesign.setTarget(this.getTarget()); + this.formDesign.refreshRoot(); + FormHierarchyTreePane.getInstance().refreshRoot(); + } + + /** + * 刷新s + */ + public void refreshAllNameWidgets() { + if (formDesign.getParaComponent() != null) { + XCreatorUtils.refreshAllNameWidgets(formDesign.getParaComponent()); + } + XCreatorUtils.refreshAllNameWidgets(formDesign.getRootComponent()); + } + + /** + * 刷新 + */ + public void refreshSelectedWidget() { + formDesign.getEditListenerTable().fireCreatorModified(DesignerEvent.CREATOR_SELECTED); + } + + + /** + * 复制 + */ + @Override + public void copy() { + this.formDesign.copy(); + } + + + /** + * 粘贴 + * + * @return 是否成功 + */ + @Override + public boolean paste() { + return this.formDesign.paste(); + } + + + /** + * 剪切 + * + * @return 是否成功 + */ + @Override + public boolean cut() { + return this.formDesign.cut(); + } + + // //////////////////////////////////////////////////////////////////// + // ////////////////for toolbarMenuAdapter////////////////////////////// + // //////////////////////////////////////////////////////////////////// + + + /** + * 目标菜单 + * + * @return 菜单 + */ + @Override + public MenuDef[] menus4Target() { + return this.index == FORM_TAB ? + (MenuDef[]) ArrayUtils.addAll(super.menus4Target(), this.formDesign.menus4Target()) : + (MenuDef[]) ArrayUtils.addAll(super.menus4Target(), this.elementCaseDesign.menus4Target()); + } + + + /** + * 模板的工具 + * + * @return 工具 + */ + @Override + public ToolBarDef[] toolbars4Target() { + return this.index == FORM_TAB ? + this.formDesign.toolbars4Target() : + this.elementCaseDesign.toolbars4Target(); + } + + + /** + * 模板菜单 + * + * @return 返回菜单 + */ + @Override + public ShortCut[] shortcut4TemplateMenu() { + if (this.index == FORM_TAB) { + return (ShortCut[]) ArrayUtils.addAll(new ShortCut[]{ + new TemplateParameterAction(this), + new FormMobileAttrAction(this) + }, new ShortCut[0]); + } else { + return (ShortCut[]) ArrayUtils.addAll(new ShortCut[]{ + new TemplateParameterAction(this), + new FormMobileAttrAction(this) + }, this.elementCaseDesign.shortcut4TemplateMenu()); + } + } + + /** + * 权限细粒度模板菜单 + * 表单中去掉此菜单项 + * + * @return 菜单 + */ + public ShortCut[] shortCuts4Authority() { + return new ShortCut[0]; + } + + @Override + protected FormUndoState createUndoState() { + FormUndoState cur = new FormUndoState(this, this.formDesign.getArea()); + if (this.formDesign.isReportBlockEditing()) { + cur.setFormReportType(BaseUndoState.STATE_FORM_REPORT); + } + return cur; + } + + /** + * 应用UndoState + * + * @param o undo的状态 + */ + public void applyUndoState4Form(BaseUndoState o) { + this.applyUndoState((FormUndoState) o); + } + + /** + * 可以撤销 + * + * @return 是则返回true + */ + public boolean canUndo() { + //报表块最多撤销至编辑报表块的第一步,不能撤销表单中的操作 + boolean inECUndoForm = undoState.getFormReportType() == BaseUndoState.STATE_BEFORE_FORM_REPORT && formDesign.isReportBlockEditing(); + return !inECUndoForm && this.getUndoManager().canUndo(); + } + + // 返回当前的body, + // 假如当前body是自适应的话就沿用, + // 假如当前body是绝对布局的话就返回绝对布局body + private XLayoutContainer selectedBodyLayout() { + XLayoutContainer rootLayout = formDesign.getRootComponent(); + for (int i = 0; i < rootLayout.getComponentCount(); i++) { + if (rootLayout.getXCreator(i).acceptType(XWAbsoluteBodyLayout.class)) { + rootLayout = (XWAbsoluteBodyLayout) rootLayout.getXCreator(i); + } + } + return rootLayout; + } + + @Override + protected void applyUndoState(FormUndoState u) { + try { + //JForm的target重置 + this.setTarget((Form) u.getForm().clone()); + if (this.index == FORM_TAB) { + JForm.this.refreshRoot(); + this.formDesign.getArea().setAreaSize(u.getAreaSize(), u.getHorizontalValue(), u.getVerticalValue(), u.getWidthValue(), u.getHeightValue(), u.getSlideValue()); + //撤销的时候要重新选择的body布局 + this.formDesign.getSelectionModel().setSelectedCreators(FormSelectionUtils.rebuildSelection(formDesign.getRootComponent(), + formDesign.getRootComponent() == selectedBodyLayout() ? u.getSelectWidgets() : new Widget[]{selectedBodyLayout().toData()})); + } else { + String widgetName = this.formDesign.getElementCaseContainerName(); + //这儿太坑了,u.getForm() 与 getTarget内容不一样 + FormElementCaseProvider dataTable = getTarget().getElementCaseByName(widgetName); + this.reportComposite.setSelectedWidget(dataTable); + //下面这句话是防止撤销之后直接退出编辑再编辑撤销的东西会回来,因为撤销不会保存EC + formDesign.setElementCase(dataTable); + } + } catch (CloneNotSupportedException e) { + throw new RuntimeException(e); + } + + if (BaseUtils.isAuthorityEditing()) { + this.authorityUndoState = u; + } else { + this.undoState = u; + } + + } + + @Override + protected FormModelAdapter createDesignModel() { + return new FormModelAdapter(this); + } + + @Override + public JPanel[] toolbarPanes4Form() { + return this.index == FORM_TAB ? + new JPanel[]{FormParaWidgetPane.getInstance(formDesign)} : + new JPanel[0]; + } + + /** + * 表单的工具按钮 + * + * @return 工具按钮 + */ + public JComponent[] toolBarButton4Form() { + return this.index == FORM_TAB ? + new JComponent[]{ + new CutAction(formDesign).createToolBarComponent(), + new CopyAction(formDesign).createToolBarComponent(), + new PasteAction(formDesign).createToolBarComponent(), + new FormDeleteAction(formDesign).createToolBarComponent()} : + elementCaseDesign.toolBarButton4Form(); + } + + /** + * 权限细粒度状态下的工具面板 + * + * @return 工具面板 + */ + public JComponent toolBar4Authority() { + JPanel panel = new JPanel(new BorderLayout()) { + public Dimension getPreferredSize() { + Dimension dim = super.getPreferredSize(); + dim.height = ToolBarMenuDock.PANLE_HEIGNT; + return dim; + } + }; + UILabel uiLabel = new UILabel(Inter.getLocText(new String[]{"DashBoard-FormBook", "Privilege", "Edit"})); + uiLabel.setHorizontalAlignment(SwingConstants.CENTER); + uiLabel.setFont(new Font(Inter.getLocText("FR-Designer-All_MSBold"), 0, 14)); + uiLabel.setForeground(new Color(150, 150, 150)); + panel.add(uiLabel, BorderLayout.CENTER); + return panel; + } + + + public JPanel getEastUpPane() { + if (BaseUtils.isAuthorityEditing()) { + if (formDesign.isSupportAuthority()) { + return new AuthorityPropertyPane(this); + } else { + return new NoSupportAuthorityEdit(); + } + } else { + if (editingComponent == null) { + editingComponent = formDesign.getRootComponent().createToolPane(this, formDesign); + } + return (JPanel) editingComponent; + } + } + + public JPanel getEastDownPane() { + return formDesign.getEastDownPane(); + } + + @Override + /** + * + */ + public Icon getPreviewLargeIcon() { + return UIConstants.RUN_BIG_ICON; + } + + @Override + /** + * 创建菜单项Preview + * + * @return 菜单 + */ + public UIMenuItem[] createMenuItem4Preview() { + UIMenuItem form = new UIMenuItem(Inter.getLocText("M-Form_Preview"), UIConstants.RUN_SMALL_ICON); + form.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + WebPreviewUtils.onFormPreview(JForm.this); + } + }); + return new UIMenuItem[]{form}; + } + + /** + * 刷新参数 + */ + public void populateParameter() { + formDesign.populateParameterPropertyPane(); + } + + @Override + /** + * 刷新工具区域 + */ + public void refreshToolArea() { + populateParameter(); + DesignerContext.getDesignerFrame().resetToolkitByPlus(JForm.this); + //表单切换后拖不进去组件是因为找不到designer + WidgetToolBarPane.getInstance(formDesign); + if (BaseUtils.isAuthorityEditing()) { + if (formDesign.isSupportAuthority()) { + EastRegionContainerPane.getInstance().replaceUpPane(new AuthorityPropertyPane(this)); + } else { + EastRegionContainerPane.getInstance().replaceUpPane(new NoSupportAuthorityEdit()); + } + EastRegionContainerPane.getInstance().replaceDownPane(RolesAlreadyEditedPane.getInstance()); + return; + } + + if (formDesign.isReportBlockEditing()) { + if (elementCaseDesign != null) { + EastRegionContainerPane.getInstance().removeParameterPane(); + EastRegionContainerPane.getInstance().replaceDownPane(elementCaseDesign.getEastDownPane()); + EastRegionContainerPane.getInstance().replaceUpPane(elementCaseDesign.getEastUpPane()); + return; + } + } + + EastRegionContainerPane.getInstance().replaceUpPane(WidgetPropertyPane.getInstance(formDesign)); + EastRegionContainerPane.getInstance().addParameterPane(ParameterPropertyPane.getInstance(formDesign)); + EastRegionContainerPane.getInstance().setParameterHeight(ParameterPropertyPane.getInstance(formDesign).getPreferredSize().height); + if (EastRegionContainerPane.getInstance().getDownPane() == null) { + new Thread() { + public void run() { + try { + Thread.sleep(1500); + } catch (InterruptedException e) { + FRLogger.getLogger().error(e.getMessage(), e); + } + JPanel pane = new JPanel(); + pane.setLayout(new BorderLayout()); + pane.add(FormWidgetDetailPane.getInstance(formDesign), BorderLayout.CENTER); + EastRegionContainerPane.getInstance().replaceDownPane(pane); + } + }.start(); + } else { + JPanel pane = new JPanel(); + pane.setLayout(new BorderLayout()); + pane.add(FormWidgetDetailPane.getInstance(formDesign), BorderLayout.CENTER); + EastRegionContainerPane.getInstance().replaceDownPane(pane); + + } + } + + public String getEditingCreatorName() { + return formDesign.getSelectionModel().getSelection().getSelectedCreator().toData().getWidgetName(); + } + + public WLayout getRootLayout() { + return formDesign.getRootComponent().toData(); + } + + /** + * 选择的是否是表单主体 + * + * @return 是则返回true + */ + public boolean isSelectRootPane() { + return (formDesign.getRootComponent() == formDesign.getSelectionModel().getSelection().getSelectedCreator()) + || (formDesign.getSelectionModel().getSelection().getSelectedCreator().acceptType(XWAbsoluteBodyLayout.class)); + + } + + /** + * 只在Form和ElementCase之间切换 + * + * @param index 切换位置 + */ + public void tabChanged(int index) { + if (index == ELEMENTCASE_TAB) { + formDesign.setReportBlockEditing(true); + ecTabAction(); + } else { + formDesign.setReportBlockEditing(false); + formTabAction(); + } + this.index = index; + refreshToolArea(); + this.cardLayout.show(tabCenterPane, CARDNAME[index]); + if (elementCaseDesign != null && index == ELEMENTCASE_TAB) { + //报表块编辑失焦,进入报表块可直接编辑A1 + elementCaseDesign.requestFocus(); + //进入编辑报表块,触发一次保存,记住编辑报表块前的表单状态 + //防止报表块中撤销到表单 + JForm.this.fireTargetModified(); + } + } + + /** + * 在Form和ElementCase, 以及ElementCase和ElementCase之间切换 + * + * @param index 切换位置 + * @param ecContainer ElementCase所在container + */ + public void tabChanged(int index, FormElementCaseContainerProvider ecContainer) { + if (index == ELEMENTCASE_CHANGE_TAB) { + saveImage(); + //更新FormDesign中的控件容器 + formDesign.setElementCaseContainer(ecContainer); + //如果只是内部ElementCase之间的切换, 那么不需要下面的界面变动 + return; + } + + tabChanged(index); + } + + /** + * 格子编辑组件 + */ + private FormECDesignerProvider initElementCaseDesign() { + HashMap designerClass = new HashMap(); + designerClass.put(Constants.ARG_0, FormElementCaseProvider.class); + + Object[] designerArg = new Object[]{formDesign.getElementCase()}; + return StableFactory.getMarkedInstanceObjectFromClass(FormECDesignerProvider.XML_TAG, designerArg, designerClass, FormECDesignerProvider.class); + } + + /** + * 整个报表块编辑区域 + */ + private FormECCompositeProvider initComposite() { + Object[] compositeArg = new Object[]{this, elementCaseDesign, formDesign.getElementCaseContainer()}; + HashMap compoClass = new HashMap(); + compoClass.put(Constants.ARG_0, BaseJForm.class); + compoClass.put(Constants.ARG_2, FormElementCaseContainerProvider.class); + return StableFactory.getMarkedInstanceObjectFromClass(FormECCompositeProvider.XML_TAG, compositeArg, compoClass, FormECCompositeProvider.class); + } + + /** + * 切换格子编辑 + */ + private void ecTabAction() { + elementCaseDesign = initElementCaseDesign(); + reportComposite = initComposite(); + + tabCenterPane.add((Component) reportComposite, ELEMENTCASE_CARD, 1); + reportComposite.addTargetModifiedListener(new TargetModifiedListener() { + + @Override + public void targetModified(TargetModifiedEvent e) { + JForm.this.fireTargetModified(); + FormElementCaseProvider te = elementCaseDesign.getEditingElementCase(); + formDesign.setElementCase(te); + } + }); + } + + private void saveImage() { + //触发一次保存, 把缩略图保存起来 + JForm.this.fireTargetModified(); + //用formDesign的size是为了当报表块被拉伸时, 它对应的背景图片需要足够大才不会显示成空白 + BufferedImage image = elementCaseDesign.getElementCaseImage(formDesign.getSize()); + formDesign.setElementCaseBackground(image); + } + + /** + * 切换form编辑 + */ + private void formTabAction() { + saveImage(); + } + + /** + * 取小图标,主要用于多TAB标签栏 + * + * @return 图表 + */ + public Icon getIcon() { + return BaseUtils.readIcon("/com/fr/web/images/form/new_form3.png"); + } + + @Override + public boolean acceptToolbarItem(Class clazz) { + return WorkBookSupportable.class.isAssignableFrom(clazz); + } + + @Override + public Widget getSelectElementCase() { + FormSelection selection = formDesign.getSelectionModel().getSelection(); + XCreator creator = selection.getSelectedCreator(); + return creator.toData(); + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java b/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java index ac46da031..c9a858797 100644 --- a/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java +++ b/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java @@ -1,347 +1,348 @@ -package com.fr.design.mainframe; - -import java.awt.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.util.List; - -import javax.swing.BorderFactory; -import javax.swing.JLabel; -import javax.swing.JTable; -import javax.swing.ListSelectionModel; -import javax.swing.table.*; - -import com.fr.design.designer.creator.XCreator; -import com.fr.design.gui.ilable.UILabel; -import com.fr.design.gui.itable.GroupRenderer; -import com.fr.form.ui.Widget; -import com.fr.form.ui.container.*; -import com.fr.general.ComparatorUtils; -import com.fr.general.Inter; -import com.fr.stable.StringUtils; - -/** - * MobileWidgetTable类主要显示各种容器的控件列表(body,tab,绝对布局快,不包括参数面板) - * Created with IntelliJ IDEA. - * User: zx - * Date: 14-9-15 - * Time: 下午4:52 - * Modified by fanglei at 2017/01/23 - */ -public class MobileWidgetTable extends JTable { - - private FormDesigner designer; - private String[][] cellData; - private String[] headers = {Inter.getLocText("Form-Widget_Name")}; - private static final int WIDGET_TABLE_ROW_HEIGHT = 22; - private UILabel moveComponent = new UILabel(); // 作为拖动时候随鼠标移动的那个半透明控件 - private int selectedRow = -1; - private int GAP = 11; - private boolean draging = false; - private boolean collapsed = false; // 控件列表是否折叠 - - @Override - public TableCellRenderer getCellRenderer(int row, int column) { - //第一行渲染成为标题的样子 - if (row == 0) { - return new GroupRenderer(); - } - return super.getCellRenderer(row, column); - } - - - public MobileWidgetTable(FormDesigner designer) { - this.designer = designer; - cellData = getData(); - this.setTableProperties(); - TableModel defaultModel = new BeanTableModel(); - this.setModel(defaultModel); - this.repaint(); - this.setDefaultRenderer(Object.class,new DefaultTableCellRenderer()); - refreshData(); - this.addMouseListener(mouseAdapter); - this.addMouseMotionListener(mouseAdapter); - add(moveComponent); - } - - private void setTableProperties() { - JTableHeader header = getTableHeader(); - header.setReorderingAllowed(false); - header.setPreferredSize(new Dimension(0, 0)); // 隐藏表头 - GroupRenderer headerRenderer = new GroupRenderer(); - headerRenderer.setPreferredSize(new Dimension(0, 0)); //这行代码隐藏表头。因为要实现折叠效果,表头不好监听事件 - headerRenderer.setHorizontalAlignment(JLabel.LEFT); - header.setDefaultRenderer(headerRenderer); - - this.setRowHeight(WIDGET_TABLE_ROW_HEIGHT); - this.setGridColor(new Color(212, 208, 200)); - this.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - this.setColumnSelectionAllowed(false); - this.setRowSelectionAllowed(false); - this.setFillsViewportHeight(false); - this.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); - } - - private MouseAdapter mouseAdapter = new MouseAdapter() { - /** - * 鼠标按下时处理的事件(设置当前选中的行列) - * @param e - */ - @Override - public void mousePressed(MouseEvent e) { - getInstance().setCellSelected(); - if (selectedRow == 0 && !e.isPopupTrigger() && e.getClickCount() == 1 && e.getX() < WIDGET_TABLE_ROW_HEIGHT / 2){ // 如果是点击在第一行 - toggleCollapse(); - } - } - - /** - * 鼠标放开时处理的事件(如果是正在拖动则执行换位操作,重新绘制属性表,如果不是则什么也不做) - * 所谓的换行就是简单的重新拿到一次表格数据然后重新绘制表格 - * @param e - */ - @Override - public void mouseReleased(MouseEvent e) { - if(!draging){ - return; - } - draging = false; - moveComponent.setVisible(false); - int toIndex = e.getY() < GAP ? 0 : (int)Math.rint((e.getY() - GAP)/WIDGET_TABLE_ROW_HEIGHT) + 1; - //当鼠标放开时,将选中的容器调整至新的顺序 - ((WSortLayout)designer.getSelectionModel().getSelection().getSelectedCreator().toData()).adjustOrder(selectedRow - 1, toIndex - 1); - //拿取排序后表格数据,然后重绘表格 - getInstance().refreshData(); - getInstance().repaint(); - designer.fireTargetModified(); - getInstance().setCellSelected(); - } - - /** - * 设置鼠标在属性表区域移动时候的事件 - * @param e - */ - @Override - public void mouseMoved(MouseEvent e) { - int overRow = 0; - for (int i = 0;i < getRowCount();i++) { - if (e.getY() > i * WIDGET_TABLE_ROW_HEIGHT && e.getY() <= (i + 1) * WIDGET_TABLE_ROW_HEIGHT){ - overRow = i; //判断鼠标在哪一行 - } - } - //如果鼠标移动到当前选中的行上面的时候 - if (overRow == selectedRow && selectedRow > 0) { - //把当前选中的那一行的光标改成(除了第一列)移动样式MOVE_CURSOR - setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); - } else { - setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); - } - } - - /** - * 鼠标拖动事件(如果鼠标当前是MOVE_CURSOR状态则执行开始拖动的代码, - * 绘制一个moveComponent来跟随鼠标移动) - * @param e - */ - @Override - public void mouseDragged(MouseEvent e) { - int width = getColumnModel().getColumn(0).getWidth(); - //如果当前选中的行的范围是合理的话,就可以拖动 - if (selectedRow < getRowCount() && selectedRow > 0){ - setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); - draging = true; - moveComponent.setText(getValueAt(selectedRow,0).toString()); - moveComponent.setLocation(0, e.getY() - GAP); - moveComponent.setSize(new Dimension(width, WIDGET_TABLE_ROW_HEIGHT)); - moveComponent.setVisible(true); - moveComponent.setForeground(Color.lightGray); - moveComponent.setBorder(BorderFactory.createLineBorder(Color.lightGray)); - } - } - - /** - * 设置鼠标单击时处理的事件(单击控件列表进入控件属性表) - * @param e - */ - @Override - public void mouseClicked(MouseEvent e) { - if(selectedRow > 0){ - //当前点击的控件的名字 - String widgetName = cellData[selectedRow][0]; - if (StringUtils.isNotEmpty(widgetName)){ - //当前选择的容器 - XCreator selectedContainer = designer.getSelectionModel().getSelection().getSelectedCreator(); - WLayout selectedWidget = (WLayout)selectedContainer.toData(); - //当前选择的容器中的控件数量 - int count = selectedWidget.getWidgetCount(); - for (int i = 0;i < count ;i++){ - XCreator xCreator = (XCreator) selectedContainer.getComponent(i); - Widget widget = xCreator.toData(); - if (ComparatorUtils.equals(widgetName, widget.getWidgetName())) { - getEditingDesigner().getSelectionModel().setSelectedCreator(xCreator); - } - } - } - } else if (selectedRow == 0){ // 如果是点击在第一行 - if (!e.isPopupTrigger() && e.getClickCount() > 1) { - toggleCollapse(); - } - } - } - - /** - * 鼠标离开属性表区域事件 - * @param e - */ - public void mouseExited(MouseEvent e) { - draging = false; - moveComponent.setVisible(false); - setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); - } - }; - - public MobileWidgetTable getInstance(){ - return this; - } - - public FormDesigner getEditingDesigner(){ - return designer; - } - - /** - * 设置当前get到的行列的单元格为选中状态 - */ - private void setCellSelected() { - selectedRow = getSelectedRow(); - if (selectedRow != -1) { - this.setRowSelectionInterval(selectedRow, selectedRow); - this.setColumnSelectionInterval(0, 0); - } - } - - /** - * 切换属性组折叠属性true/false - */ - private void toggleCollapse() { - this.setCollapsed(!this.isCollapsed()); - //这里获取表格的父控件是为了当表格被折叠了后,装表格的父控件也要相应的重新布局一下 - //比如折叠之后表格行数应该比原来的少,占用父容器空间应该小点,不重新布局父容器,表格大小不会改变 - Container parent = MobileWidgetTable.this.getParent(); - if (parent != null) { - parent.revalidate(); - } - repaint(); - } - - /** - * 重新get排序后的数据 - */ - public void refreshData(){ - cellData = getData(); - } - - /** - * 获取选中控件的控件列表 - * - * @return String[][] 二维数组,[0][0]widgetName - */ - private String[][] getData(){ - if(designer.isFormParaDesigner()){ - return new String[0][0]; - } - - //选择的控件 - XCreator selectedCreator = designer.getSelectionModel().getSelection().getSelectedCreator(); - Widget selectedModel = selectedCreator != null ? selectedCreator.toData() : null; - - if(selectedModel == null){ - return new String[0][0]; - } - - // 选择的控件有两种类型,一种是WLayout,代表容器,一种是Widget,代表控件 - if (selectedModel.acceptType(WSortLayout.class)) { - List mobileWidgetList = ((WSortLayout)selectedModel).getOrderedMobileWidgetList(); - String[][] widgetName = new String[mobileWidgetList.size() + 1][1]; - widgetName[0][0] = Inter.getLocText("FR-Designer_WidgetOrder"); - for (int i = 0; i < mobileWidgetList.size(); i++) { - widgetName[i + 1][0] = mobileWidgetList.get(i); - } - return widgetName; - } else { - return new String[0][0]; - } - } - - public boolean isCollapsed() { - return collapsed; - } - - public void setCollapsed(boolean collapsed) { - this.collapsed = collapsed; - } - - /** - * 自定义的tableEditor类 - */ - public class BeanTableModel extends DefaultTableModel { - public BeanTableModel() { - super(cellData,headers); - } - - @Override - public int getRowCount() { - if (isCollapsed()) { - return 1; - } - return cellData.length; - } - - @Override - public int getColumnCount() { - return 1; - } - - - @Override - public Object getValueAt(int row, int column) { - if (row >= getRowCount() || column >= getColumnCount()) { - return null; - } - if (row == 0) { - return (isCollapsed()? "+" : "-") + cellData[row][0]; - } - - return cellData[row][0]; - } - - @Override - public String getColumnName(int column) { - return headers[0]; - } - - - @Override - public void setValueAt(Object aValue, int row, int column) { - if (row >= getRowCount() || column >= getColumnCount()) { - return; - } - if (aValue == null) { - cellData[row] = null; - return; - } - cellData[row][0] = aValue.toString(); - } - - /** - * 是否可编辑 - * @param row 行号 - * @param column 列号 - * @return 是否可编辑 - */ - public boolean isCellEditable(int row, int column) { - return false; - } - - } - +package com.fr.design.mainframe; + +import java.awt.*; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.List; + +import javax.swing.BorderFactory; +import javax.swing.JLabel; +import javax.swing.JTable; +import javax.swing.ListSelectionModel; +import javax.swing.table.*; + +import com.fr.design.designer.creator.XCreator; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.itable.GroupRenderer; +import com.fr.form.ui.Widget; +import com.fr.form.ui.container.*; +import com.fr.general.ComparatorUtils; +import com.fr.general.Inter; +import com.fr.stable.StringUtils; + +/** + * MobileWidgetTable类主要显示各种容器的控件列表(body,tab,绝对布局快,不包括参数面板) + * Created with IntelliJ IDEA. + * User: zx + * Date: 14-9-15 + * Time: 下午4:52 + * Modified by fanglei at 2017/01/23 + */ +public class MobileWidgetTable extends JTable { + + private FormDesigner designer; + private String[][] cellData; + private String[] headers = {Inter.getLocText("Form-Widget_Name")}; + private static final int WIDGET_TABLE_ROW_HEIGHT = 22; + private UILabel moveComponent = new UILabel(); // 作为拖动时候随鼠标移动的那个半透明控件 + private int selectedRow = -1; + private static final int GAP = 11; + private boolean draging = false; + private boolean collapsed = false; // 控件列表是否折叠 + + @Override + public TableCellRenderer getCellRenderer(int row, int column) { + //第一行渲染成为标题的样子 + if (row == 0) { + return new GroupRenderer(); + } + return super.getCellRenderer(row, column); + } + + + public MobileWidgetTable(FormDesigner designer) { + this.designer = designer; + cellData = getData(); + this.setTableProperties(); + TableModel defaultModel = new BeanTableModel(); + this.setModel(defaultModel); + this.repaint(); + this.setDefaultRenderer(Object.class, new DefaultTableCellRenderer()); + refreshData(); + this.addMouseListener(mouseAdapter); + this.addMouseMotionListener(mouseAdapter); + add(moveComponent); + } + + private void setTableProperties() { + JTableHeader header = getTableHeader(); + header.setReorderingAllowed(false); + header.setPreferredSize(new Dimension(0, 0)); // 隐藏表头 + GroupRenderer headerRenderer = new GroupRenderer(); + headerRenderer.setPreferredSize(new Dimension(0, 0)); //这行代码隐藏表头。因为要实现折叠效果,表头不好监听事件 + headerRenderer.setHorizontalAlignment(JLabel.LEFT); + header.setDefaultRenderer(headerRenderer); + + this.setRowHeight(WIDGET_TABLE_ROW_HEIGHT); + this.setGridColor(new Color(212, 208, 200)); + this.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + this.setColumnSelectionAllowed(false); + this.setRowSelectionAllowed(false); + this.setFillsViewportHeight(false); + this.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); + } + + private MouseAdapter mouseAdapter = new MouseAdapter() { + /** + * 鼠标按下时处理的事件(设置当前选中的行列) + * @param e + */ + @Override + public void mousePressed(MouseEvent e) { + getInstance().setCellSelected(); + if (selectedRow == 0 && !e.isPopupTrigger() && e.getClickCount() == 1 && e.getX() < WIDGET_TABLE_ROW_HEIGHT / 2) { // 如果是点击在第一行 + toggleCollapse(); + } + } + + /** + * 鼠标放开时处理的事件(如果是正在拖动则执行换位操作,重新绘制属性表,如果不是则什么也不做) + * 所谓的换行就是简单的重新拿到一次表格数据然后重新绘制表格 + * @param e + */ + @Override + public void mouseReleased(MouseEvent e) { + if (!draging) { + return; + } + draging = false; + moveComponent.setVisible(false); + int toIndex = e.getY() < GAP ? 0 : (int) Math.rint((e.getY() - GAP) / WIDGET_TABLE_ROW_HEIGHT) + 1; + //当鼠标放开时,将选中的容器调整至新的顺序 + ((WSortLayout) designer.getSelectionModel().getSelection().getSelectedCreator().toData()).adjustOrder(selectedRow - 1, toIndex - 1); + //拿取排序后表格数据,然后重绘表格 + getInstance().refreshData(); + getInstance().repaint(); + designer.fireTargetModified(); + getInstance().setCellSelected(); + } + + /** + * 设置鼠标在属性表区域移动时候的事件 + * @param e + */ + @Override + public void mouseMoved(MouseEvent e) { + int overRow = 0; + for (int i = 0; i < getRowCount(); i++) { + if (e.getY() > i * WIDGET_TABLE_ROW_HEIGHT && e.getY() <= (i + 1) * WIDGET_TABLE_ROW_HEIGHT) { + overRow = i; //判断鼠标在哪一行 + } + } + //如果鼠标移动到当前选中的行上面的时候 + if (overRow == selectedRow && selectedRow > 0) { + //把当前选中的那一行的光标改成(除了第一列)移动样式MOVE_CURSOR + setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); + } else { + setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + } + } + + /** + * 鼠标拖动事件(如果鼠标当前是MOVE_CURSOR状态则执行开始拖动的代码, + * 绘制一个moveComponent来跟随鼠标移动) + * @param e + */ + @Override + public void mouseDragged(MouseEvent e) { + int width = getColumnModel().getColumn(0).getWidth(); + //如果当前选中的行的范围是合理的话,就可以拖动 + if (selectedRow < getRowCount() && selectedRow > 0) { + setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); + draging = true; + moveComponent.setText(getValueAt(selectedRow, 0).toString()); + moveComponent.setLocation(0, e.getY() - GAP); + moveComponent.setSize(new Dimension(width, WIDGET_TABLE_ROW_HEIGHT)); + moveComponent.setVisible(true); + moveComponent.setForeground(Color.lightGray); + moveComponent.setBorder(BorderFactory.createLineBorder(Color.lightGray)); + } + } + + /** + * 设置鼠标单击时处理的事件(单击控件列表进入控件属性表) + * @param e + */ + @Override + public void mouseClicked(MouseEvent e) { + if (selectedRow > 0) { + //当前点击的控件的名字 + String widgetName = cellData[selectedRow][0]; + if (StringUtils.isNotEmpty(widgetName)) { + //当前选择的容器 + XCreator selectedContainer = designer.getSelectionModel().getSelection().getSelectedCreator(); + WLayout selectedWidget = (WLayout) selectedContainer.toData(); + //当前选择的容器中的控件数量 + int count = selectedWidget.getWidgetCount(); + for (int i = 0; i < count; i++) { + XCreator xCreator = (XCreator) selectedContainer.getComponent(i); + Widget widget = xCreator.toData(); + if (ComparatorUtils.equals(widgetName, widget.getWidgetName())) { + getEditingDesigner().getSelectionModel().setSelectedCreator(xCreator); + } + } + } + } else if (selectedRow == 0) { // 如果是点击在第一行 + if (!e.isPopupTrigger() && e.getClickCount() > 1) { + toggleCollapse(); + } + } + } + + /** + * 鼠标离开属性表区域事件 + * @param e + */ + public void mouseExited(MouseEvent e) { + draging = false; + moveComponent.setVisible(false); + setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + } + }; + + public MobileWidgetTable getInstance() { + return this; + } + + public FormDesigner getEditingDesigner() { + return designer; + } + + /** + * 设置当前get到的行列的单元格为选中状态 + */ + private void setCellSelected() { + selectedRow = getSelectedRow(); + if (selectedRow != -1) { + this.setRowSelectionInterval(selectedRow, selectedRow); + this.setColumnSelectionInterval(0, 0); + } + } + + /** + * 切换属性组折叠属性true/false + */ + private void toggleCollapse() { + this.setCollapsed(!this.isCollapsed()); + //这里获取表格的父控件是为了当表格被折叠了后,装表格的父控件也要相应的重新布局一下 + //比如折叠之后表格行数应该比原来的少,占用父容器空间应该小点,不重新布局父容器,表格大小不会改变 + Container parent = MobileWidgetTable.this.getParent(); + if (parent != null) { + parent.revalidate(); + } + repaint(); + } + + /** + * 重新get排序后的数据 + */ + public void refreshData() { + cellData = getData(); + } + + /** + * 获取选中控件的控件列表 + * + * @return String[][] 二维数组,[0][0]widgetName + */ + private String[][] getData() { + if (designer.isFormParaDesigner()) { + return new String[0][0]; + } + + //选择的控件 + XCreator selectedCreator = designer.getSelectionModel().getSelection().getSelectedCreator(); + Widget selectedModel = selectedCreator != null ? selectedCreator.toData() : null; + + if (selectedModel == null) { + return new String[0][0]; + } + + // 选择的控件有两种类型,一种是WLayout,代表容器,一种是Widget,代表控件 + if (selectedModel.acceptType(WSortLayout.class)) { + List mobileWidgetList = ((WSortLayout) selectedModel).getOrderedMobileWidgetList(); + String[][] widgetName = new String[mobileWidgetList.size() + 1][1]; + widgetName[0][0] = Inter.getLocText("FR-Designer_WidgetOrder"); + for (int i = 0; i < mobileWidgetList.size(); i++) { + widgetName[i + 1][0] = mobileWidgetList.get(i); + } + return widgetName; + } else { + return new String[0][0]; + } + } + + public boolean isCollapsed() { + return collapsed; + } + + public void setCollapsed(boolean collapsed) { + this.collapsed = collapsed; + } + + /** + * 自定义的tableEditor类 + */ + public class BeanTableModel extends DefaultTableModel { + public BeanTableModel() { + super(cellData, headers); + } + + @Override + public int getRowCount() { + if (isCollapsed()) { + return 1; + } + return cellData.length; + } + + @Override + public int getColumnCount() { + return 1; + } + + + @Override + public Object getValueAt(int row, int column) { + if (row >= getRowCount() || column >= getColumnCount()) { + return null; + } + if (row == 0) { + return (isCollapsed() ? "+" : "-") + cellData[row][0]; + } + + return cellData[row][0]; + } + + @Override + public String getColumnName(int column) { + return headers[0]; + } + + + @Override + public void setValueAt(Object aValue, int row, int column) { + if (row >= getRowCount() || column >= getColumnCount()) { + return; + } + if (aValue == null) { + cellData[row] = null; + return; + } + cellData[row][0] = aValue.toString(); + } + + /** + * 是否可编辑 + * + * @param row 行号 + * @param column 列号 + * @return 是否可编辑 + */ + public boolean isCellEditable(int row, int column) { + return false; + } + + } + } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java b/designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java index 533ca9dc0..6a8480206 100644 --- a/designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java +++ b/designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java @@ -1,372 +1,372 @@ -package com.fr.design.mainframe; - -import com.fr.base.BaseUtils; -import com.fr.design.ExtraDesignClassManager; -import com.fr.design.designer.beans.events.DesignerEditListener; -import com.fr.design.designer.beans.events.DesignerEvent; -import com.fr.design.designer.creator.XCreator; -import com.fr.design.designer.creator.XCreatorUtils; -import com.fr.design.designer.creator.XLayoutContainer; -import com.fr.design.designer.creator.XWParameterLayout; -import com.fr.design.designer.properties.EventPropertyTable; -import com.fr.design.designer.properties.WidgetPropertyTable; -import com.fr.design.fun.WidgetPropertyUIProvider; -import com.fr.design.gui.frpane.UITabbedPane; -import com.fr.design.gui.icontainer.UIScrollPane; -import com.fr.design.gui.itable.AbstractPropertyTable; -import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.form.ui.Widget; -import com.fr.general.Inter; -import com.fr.stable.ArrayUtils; - -import javax.swing.*; -import javax.swing.border.LineBorder; -import javax.swing.table.JTableHeader; -import java.awt.*; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; - -/** - * 控件属性表绘制 - * Modified by fanglei - */ -public class WidgetPropertyPane extends FormDockView implements BaseWidgetPropertyPane { - - private static final String PARA = "para"; - private static final String BODY = "body"; - private WidgetPropertyTable propertyTable; // 控件的属性表 - private EventPropertyTable eventTable; // 控件的事件表 - private List widgetPropertyTables; // 这个变量应该是保存控件拓展的属性tab - private FormDesigner designer; // 当前designer - private UIScrollPane psp; // 用来装载属性表table的容器 - private UIScrollPane esp; //用来装载事件table的容器 - private JPanel wsp; // 装载移动端tab的容器,包括移动端属性表和控件拓展的移动端属性表 - private MobileParaWidgetTable mobileParaWidgetTable; // 参数面板的移动端属性tab(和body的移动端属性tab区别是没有标签名column) - private MobileWidgetTable mobileWidgetTable; // body的移动端属性tab - private UIScrollPane downPanel; // 这个滚动容器是用于装载centerPane的 - private JPanel centerPane; // 此centerPane采用的是cardLayout布局,装载着mobileWidgetTable和mobileBodyWidgetTable - private CardLayout cardLayout; // 卡片布局,选中参数面板时显示mobileWidgetTable,选中body时显示mobileBodyWidgetTable - private JTableHeader header;//把表头单独get出来作为一个组件 - - public static WidgetPropertyPane getInstance() { - if (HOLDER.singleton == null) { - HOLDER.singleton = new WidgetPropertyPane(); - } - return HOLDER.singleton; - } - - public static WidgetPropertyPane getInstance(FormDesigner formEditor) { - HOLDER.singleton.setEditingFormDesigner(formEditor); - HOLDER.singleton.refreshDockingView(); - return HOLDER.singleton; - } - - private static class HOLDER { - private static WidgetPropertyPane singleton = new WidgetPropertyPane(); - } - - private WidgetPropertyPane() { - setLayout(FRGUIPaneFactory.createBorderLayout()); - } - - @Override - public String getViewTitle() { - return Inter.getLocText("Form-Widget_Property_Table"); - } - - @Override - public Icon getViewIcon() { - return BaseUtils.readIcon("/com/fr/design/images/m_report/attributes.png"); - } - - @Override - /** - * 绘制属性表tab - */ - public void refreshDockingView() { - designer = this.getEditingFormDesigner(); - removeAll(); - if (designer == null) { - clearDockingView(); - return; - } - widgetPropertyTables = new ArrayList(); - - //依次创建属性表、事件表、移动端表,再将它们整合到TabPane中去 - this.createPropertyTable(); - this.createEventTable(); - this.createMobileWidgetTable(); - this.createTabPane(); - - this.initTables(); - } - - /** - * 初始化属性表,事件表,移动端拓展的属性表 - */ - private void initTables() { - propertyTable.initPropertyGroups(null); - eventTable.refresh(); - for (AbstractPropertyTable propertyTable : widgetPropertyTables) { - propertyTable.initPropertyGroups(designer); - } - } - - /** - * 创建属性表table - */ - private void createPropertyTable() { - propertyTable = new WidgetPropertyTable(designer); - designer.addDesignerEditListener(new WidgetPropertyDesignerAdapter(propertyTable)); - propertyTable.setBorder(null); - psp = new UIScrollPane(propertyTable); // 用来装载属性表table - psp.setBorder(null); - } - - /** - * 创建事件表(事件选项卡不是JTable) - */ - private void createEventTable() { - eventTable = new EventPropertyTable(designer); - designer.addDesignerEditListener(new EventPropertyDesignerAdapter(eventTable)); - eventTable.setBorder(null); - esp = new UIScrollPane(eventTable); //用来装载事件table - esp.setBorder(null); - } - - /** - * 创建移动端控件列表 - */ - private void createMobileWidgetTable() { - //加上表头后,这里不再使用borderLayout布局,而采用BoxLayout布局 - wsp = FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane(); - wsp.setBorder(null); - mobileParaWidgetTable = new MobileParaWidgetTable(designer); - mobileWidgetTable = new MobileWidgetTable(designer); - designer.addDesignerEditListener(new mobileWidgetDesignerAdapter()); - centerPane = FRGUIPaneFactory.createCardLayout_S_Pane(); - cardLayout = (CardLayout) centerPane.getLayout(); - centerPane.add(mobileParaWidgetTable, PARA); - // 采用卡片布局的容器必须指定卡片名字,如果没有卡片名字 - // 就会出现:Exception in thread "main" java.lang.IllegalArgumentException: - // cannot add to layout: constraint must be a string - // 第二个参数代表卡片的名字。后来show方法调用时通过名字找到要显示的卡片 - centerPane.add(mobileWidgetTable, BODY); //这两句代码,是把JTable放到一个JPanel中去了,表头不会显示, - //只有放到JScrollPanel中去表头才能正常显示,这就是MobileWidgetTable中定义了表头却没有显示的原因! - //解决方案:MobileWidgetTable实在无法直接放到JScrollPanel中去的时候,应该把表头get出来单独作为一个组件显示 - - if (hasSelectParaPane(designer)) { - cardLayout.show(centerPane, PARA); - header = mobileParaWidgetTable.getTableHeader(); - } else { - cardLayout.show(centerPane, BODY); - header = mobileWidgetTable.getTableHeader(); - } - downPanel = new UIScrollPane(centerPane); - downPanel.setBorder(new LineBorder(Color.GRAY)); - - //获取拓展移动端属性tab - WidgetPropertyUIProvider[] widgetAttrProviders = getExtraPropertyUIProviders(); - - addWidgetAttr(widgetAttrProviders); - } - - /** - * 将属性表,事件表,移动端控件列表整合到TabPane里面去 - */ - private void createTabPane() { - UITabbedPane tabbedPane = new UITabbedPane(); // tab选项卡容器 - initTabPane(tabbedPane); - add(tabbedPane, BorderLayout.CENTER); - } - - /** - * 获取当前控件扩展的属性tab - * 来源有两个: - * 1, 各个控件从各自的Xcreator里扩展(例如手机重布局的tab就是从Xcreator中扩展的); - * 2, 所有的控件从插件里扩展. - * - * @return 扩展的tab - */ - private WidgetPropertyUIProvider[] getExtraPropertyUIProviders() { - FormSelection selection = designer.getSelectionModel().getSelection(); - WidgetPropertyUIProvider[] embeddedPropertyUIProviders = null; - if (selection != null && selection.getSelectedCreator() != null) { - embeddedPropertyUIProviders = selection.getSelectedCreator().getWidgetPropertyUIProviders(); - } - Set set = ExtraDesignClassManager.getInstance().getArray(WidgetPropertyUIProvider.XML_TAG); - return ArrayUtils.addAll(embeddedPropertyUIProviders, set.toArray(new WidgetPropertyUIProvider[set.size()])); - } - - /** - * 判断是将拓展的tab放入属性表还是将原来的tab放入属性表 - * - * @param widgetAttrProviders 拓展的tab - */ - private void addWidgetAttr(WidgetPropertyUIProvider[] widgetAttrProviders) { - if (widgetAttrProviders.length == 0) { // 判断有没有拓展的tab,没有就使用原来的 - wsp.add(header); - wsp.add(downPanel); - } else { - for (WidgetPropertyUIProvider widgetAttrProvider : widgetAttrProviders) { - AbstractPropertyTable propertyTable = widgetAttrProvider.createWidgetAttrTable(); - widgetPropertyTables.add(propertyTable); - designer.addDesignerEditListener(new WidgetPropertyDesignerAdapter(propertyTable)); - UIScrollPane uiScrollPane = new UIScrollPane(getExtraBodyTable(propertyTable)); - wsp.add(uiScrollPane); - } - } - } - - /** - * 如果是body的拓展属性表,那么要额外加上一张控件顺序表 - * - * @return - */ - private Component getExtraBodyTable(AbstractPropertyTable abstractPropertyTable) { - Widget selection = designer.getSelectionModel().getSelection().getSelectedCreator().toData(); - if (selection.getWidgetName().equals("body")) { - JPanel jPanel = FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane(); - jPanel.add(abstractPropertyTable); - MobileWidgetTable mobileWidgetTable = new MobileWidgetTable(designer); - jPanel.add(mobileWidgetTable.getTableHeader()); - jPanel.add(mobileWidgetTable); - return jPanel; - } - return abstractPropertyTable; - } - - private void initTabPane(UITabbedPane tabbedPane) { - tabbedPane.setOpaque(true); - tabbedPane.setBorder(null); - tabbedPane.setTabPlacement(SwingConstants.BOTTOM); - tabbedPane.addTab(Inter.getLocText("FR-Designer_Properties"), psp); - tabbedPane.addTab(Inter.getLocText("FR-Designer_Event"), esp); - tabbedPane.addTab(Inter.getLocText("FR-Widget_Mobile_Terminal"), wsp); - } - - - /** - * 选中的组件是否在参数面板里 - * - * @param designer 设计器 - * @return 是则返回true - */ - public boolean hasSelectParaPane(FormDesigner designer) { - XCreator xCreator = designer.getSelectionModel().getSelection().getSelectedCreator(); - if (xCreator == null) { - xCreator = designer.getRootComponent(); - } - XLayoutContainer container = XCreatorUtils.getHotspotContainer(xCreator); - //TODO container可能为空,引发空指针异常 - return xCreator.acceptType(XWParameterLayout.class) || container.acceptType(XWParameterLayout.class); - } - - public void setEditingFormDesigner(BaseFormDesigner editor) { - FormDesigner fd = (FormDesigner) editor; - super.setEditingFormDesigner(fd); - } - - private void clearDockingView() { - propertyTable = null; - eventTable = null; - if (widgetPropertyTables != null) { - widgetPropertyTables.clear(); - } - JScrollPane psp = new JScrollPane(); - psp.setBorder(null); - this.add(psp, BorderLayout.CENTER); - } - - /** - * 属性表监听界面事件(编辑,删除,选中,改变大小) - */ - private class WidgetPropertyDesignerAdapter implements DesignerEditListener { - AbstractPropertyTable propertyTable; - - WidgetPropertyDesignerAdapter(AbstractPropertyTable propertyTable) { - this.propertyTable = propertyTable; - } - - @Override - public void fireCreatorModified(DesignerEvent evt) { - if (evt.getCreatorEventID() == DesignerEvent.CREATOR_EDITED - || evt.getCreatorEventID() == DesignerEvent.CREATOR_DELETED - || evt.getCreatorEventID() == DesignerEvent.CREATOR_SELECTED) { - propertyTable.initPropertyGroups(designer); - } else if (evt.getCreatorEventID() == DesignerEvent.CREATOR_RESIZED) { - repaint(); - } - } - - @Override - public boolean equals(Object o) { - return o instanceof WidgetPropertyDesignerAdapter && ((WidgetPropertyDesignerAdapter) o).propertyTable == this.propertyTable; - } - } - - /** - * 事件表监听界面事件(编辑,选中) - */ - private class EventPropertyDesignerAdapter implements DesignerEditListener { - EventPropertyTable propertyTable; - - EventPropertyDesignerAdapter(EventPropertyTable eventTable) { - this.propertyTable = eventTable; - } - - @Override - public void fireCreatorModified(DesignerEvent evt) { - if (evt.getCreatorEventID() == DesignerEvent.CREATOR_EDITED - || evt.getCreatorEventID() == DesignerEvent.CREATOR_SELECTED) { - propertyTable.refresh(); - } - } - - @Override - public boolean equals(Object o) { - return o instanceof EventPropertyDesignerAdapter; - } - } - - /** - * 移动端属性表监听界面事件(改变大小,编辑,选中,增加控件) - */ - private class mobileWidgetDesignerAdapter implements DesignerEditListener { - - mobileWidgetDesignerAdapter() { - } - - /** - * 响应界面改变事件 - * - * @param evt 事件 - */ - public void fireCreatorModified(DesignerEvent evt) { - if (evt.getCreatorEventID() == DesignerEvent.CREATOR_RESIZED - || evt.getCreatorEventID() == DesignerEvent.CREATOR_EDITED - || evt.getCreatorEventID() == DesignerEvent.CREATOR_SELECTED - || evt.getCreatorEventID() == DesignerEvent.CREATOR_ADDED) { - int value = downPanel.getVerticalScrollBar().getValue(); - if (hasSelectParaPane(getEditingFormDesigner())) { - cardLayout.show(centerPane, PARA); - mobileParaWidgetTable.refreshData(); - } else { - cardLayout.show(centerPane, BODY); - mobileWidgetTable.refreshData(); - } - //出现滚动条 - downPanel.doLayout(); - //控件列表选中某组件,触发表单中选中控件,选中事件又触发列表刷新,滚动条回到0 - //此处设置滚动条值为刷新前 - downPanel.getVerticalScrollBar().setValue(value); - } - } - } - - @Override - public Location preferredLocation() { - return Location.WEST_BELOW; - } +package com.fr.design.mainframe; + +import com.fr.base.BaseUtils; +import com.fr.design.ExtraDesignClassManager; +import com.fr.design.designer.beans.events.DesignerEditListener; +import com.fr.design.designer.beans.events.DesignerEvent; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XCreatorUtils; +import com.fr.design.designer.creator.XLayoutContainer; +import com.fr.design.designer.creator.XWParameterLayout; +import com.fr.design.designer.properties.EventPropertyTable; +import com.fr.design.designer.properties.WidgetPropertyTable; +import com.fr.design.fun.WidgetPropertyUIProvider; +import com.fr.design.gui.frpane.UITabbedPane; +import com.fr.design.gui.icontainer.UIScrollPane; +import com.fr.design.gui.itable.AbstractPropertyTable; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.form.ui.Widget; +import com.fr.general.Inter; +import com.fr.stable.ArrayUtils; + +import javax.swing.*; +import javax.swing.border.LineBorder; +import javax.swing.table.JTableHeader; +import java.awt.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +/** + * 控件属性表绘制 + * Modified by fanglei + */ +public class WidgetPropertyPane extends FormDockView implements BaseWidgetPropertyPane { + + private static final String PARA = "para"; + private static final String BODY = "body"; + private WidgetPropertyTable propertyTable; // 控件的属性表 + private EventPropertyTable eventTable; // 控件的事件表 + private List widgetPropertyTables; // 这个变量应该是保存控件拓展的属性tab + private FormDesigner designer; // 当前designer + private UIScrollPane psp; // 用来装载属性表table的容器 + private UIScrollPane esp; //用来装载事件table的容器 + private JPanel wsp; // 装载移动端tab的容器,包括移动端属性表和控件拓展的移动端属性表 + private MobileParaWidgetTable mobileParaWidgetTable; // 参数面板的移动端属性tab(和body的移动端属性tab区别是没有标签名column) + private MobileWidgetTable mobileWidgetTable; // body的移动端属性tab + private UIScrollPane downPanel; // 这个滚动容器是用于装载centerPane的 + private JPanel centerPane; // 此centerPane采用的是cardLayout布局,装载着mobileWidgetTable和mobileBodyWidgetTable + private CardLayout cardLayout; // 卡片布局,选中参数面板时显示mobileWidgetTable,选中body时显示mobileBodyWidgetTable + private JTableHeader header;//把表头单独get出来作为一个组件 + + public static WidgetPropertyPane getInstance() { + if (HOLDER.singleton == null) { + HOLDER.singleton = new WidgetPropertyPane(); + } + return HOLDER.singleton; + } + + public static WidgetPropertyPane getInstance(FormDesigner formEditor) { + HOLDER.singleton.setEditingFormDesigner(formEditor); + HOLDER.singleton.refreshDockingView(); + return HOLDER.singleton; + } + + private static class HOLDER { + private static WidgetPropertyPane singleton = new WidgetPropertyPane(); + } + + private WidgetPropertyPane() { + setLayout(FRGUIPaneFactory.createBorderLayout()); + } + + @Override + public String getViewTitle() { + return Inter.getLocText("Form-Widget_Property_Table"); + } + + @Override + public Icon getViewIcon() { + return BaseUtils.readIcon("/com/fr/design/images/m_report/attributes.png"); + } + + @Override + /** + * 绘制属性表tab + */ + public void refreshDockingView() { + designer = this.getEditingFormDesigner(); + removeAll(); + if (designer == null) { + clearDockingView(); + return; + } + widgetPropertyTables = new ArrayList(); + + //依次创建属性表、事件表、移动端表,再将它们整合到TabPane中去 + this.createPropertyTable(); + this.createEventTable(); + this.createMobileWidgetTable(); + this.createTabPane(); + + this.initTables(); + } + + /** + * 初始化属性表,事件表,移动端拓展的属性表 + */ + private void initTables() { + propertyTable.initPropertyGroups(null); + eventTable.refresh(); + for (AbstractPropertyTable propertyTable : widgetPropertyTables) { + propertyTable.initPropertyGroups(designer); + } + } + + /** + * 创建属性表table + */ + private void createPropertyTable() { + propertyTable = new WidgetPropertyTable(designer); + designer.addDesignerEditListener(new WidgetPropertyDesignerAdapter(propertyTable)); + propertyTable.setBorder(null); + psp = new UIScrollPane(propertyTable); // 用来装载属性表table + psp.setBorder(null); + } + + /** + * 创建事件表(事件选项卡不是JTable) + */ + private void createEventTable() { + eventTable = new EventPropertyTable(designer); + designer.addDesignerEditListener(new EventPropertyDesignerAdapter(eventTable)); + eventTable.setBorder(null); + esp = new UIScrollPane(eventTable); //用来装载事件table + esp.setBorder(null); + } + + /** + * 创建移动端控件列表 + */ + private void createMobileWidgetTable() { + //加上表头后,这里不再使用borderLayout布局,而采用BoxLayout布局 + wsp = FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane(); + wsp.setBorder(null); + mobileParaWidgetTable = new MobileParaWidgetTable(designer); + mobileWidgetTable = new MobileWidgetTable(designer); + designer.addDesignerEditListener(new mobileWidgetDesignerAdapter()); + centerPane = FRGUIPaneFactory.createCardLayout_S_Pane(); + cardLayout = (CardLayout) centerPane.getLayout(); + centerPane.add(mobileParaWidgetTable, PARA); + // 采用卡片布局的容器必须指定卡片名字,如果没有卡片名字 + // 就会出现:Exception in thread "main" java.lang.IllegalArgumentException: + // cannot add to layout: constraint must be a string + // 第二个参数代表卡片的名字。后来show方法调用时通过名字找到要显示的卡片 + centerPane.add(mobileWidgetTable, BODY); //这两句代码,是把JTable放到一个JPanel中去了,表头不会显示, + //只有放到JScrollPanel中去表头才能正常显示,这就是MobileWidgetTable中定义了表头却没有显示的原因! + //解决方案:MobileWidgetTable实在无法直接放到JScrollPanel中去的时候,应该把表头get出来单独作为一个组件显示 + + if (hasSelectParaPane(designer)) { + cardLayout.show(centerPane, PARA); + header = mobileParaWidgetTable.getTableHeader(); + } else { + cardLayout.show(centerPane, BODY); + header = mobileWidgetTable.getTableHeader(); + } + downPanel = new UIScrollPane(centerPane); + downPanel.setBorder(new LineBorder(Color.GRAY)); + + //获取拓展移动端属性tab + WidgetPropertyUIProvider[] widgetAttrProviders = getExtraPropertyUIProviders(); + + addWidgetAttr(widgetAttrProviders); + } + + /** + * 将属性表,事件表,移动端控件列表整合到TabPane里面去 + */ + private void createTabPane() { + UITabbedPane tabbedPane = new UITabbedPane(); // tab选项卡容器 + initTabPane(tabbedPane); + add(tabbedPane, BorderLayout.CENTER); + } + + /** + * 获取当前控件扩展的属性tab + * 来源有两个: + * 1, 各个控件从各自的Xcreator里扩展(例如手机重布局的tab就是从Xcreator中扩展的); + * 2, 所有的控件从插件里扩展. + * + * @return 扩展的tab + */ + private WidgetPropertyUIProvider[] getExtraPropertyUIProviders() { + FormSelection selection = designer.getSelectionModel().getSelection(); + WidgetPropertyUIProvider[] embeddedPropertyUIProviders = null; + if (selection != null && selection.getSelectedCreator() != null) { + embeddedPropertyUIProviders = selection.getSelectedCreator().getWidgetPropertyUIProviders(); + } + Set set = ExtraDesignClassManager.getInstance().getArray(WidgetPropertyUIProvider.XML_TAG); + return ArrayUtils.addAll(embeddedPropertyUIProviders, set.toArray(new WidgetPropertyUIProvider[set.size()])); + } + + /** + * 判断是将拓展的tab放入属性表还是将原来的tab放入属性表 + * + * @param widgetAttrProviders 拓展的tab + */ + private void addWidgetAttr(WidgetPropertyUIProvider[] widgetAttrProviders) { + if (widgetAttrProviders.length == 0) { // 判断有没有拓展的tab,没有就使用原来的 + wsp.add(header); + wsp.add(downPanel); + } else { + for (WidgetPropertyUIProvider widgetAttrProvider : widgetAttrProviders) { + AbstractPropertyTable propertyTable = widgetAttrProvider.createWidgetAttrTable(); + widgetPropertyTables.add(propertyTable); + designer.addDesignerEditListener(new WidgetPropertyDesignerAdapter(propertyTable)); + UIScrollPane uiScrollPane = new UIScrollPane(getExtraBodyTable(propertyTable)); + wsp.add(uiScrollPane); + } + } + } + + /** + * 如果是body的拓展属性表,那么要额外加上一张控件顺序表 + * + * @return + */ + private Component getExtraBodyTable(AbstractPropertyTable abstractPropertyTable) { + Widget selection = designer.getSelectionModel().getSelection().getSelectedCreator().toData(); + if (selection.getWidgetName().equals("body")) { + JPanel jPanel = FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane(); + jPanel.add(abstractPropertyTable); + MobileWidgetTable mobileWidgetTable = new MobileWidgetTable(designer); + jPanel.add(mobileWidgetTable.getTableHeader()); + jPanel.add(mobileWidgetTable); + return jPanel; + } + return abstractPropertyTable; + } + + private void initTabPane(UITabbedPane tabbedPane) { + tabbedPane.setOpaque(true); + tabbedPane.setBorder(null); + tabbedPane.setTabPlacement(SwingConstants.BOTTOM); + tabbedPane.addTab(Inter.getLocText("FR-Designer_Properties"), psp); + tabbedPane.addTab(Inter.getLocText("FR-Designer_Event"), esp); + tabbedPane.addTab(Inter.getLocText("FR-Widget_Mobile_Terminal"), wsp); + } + + + /** + * 选中的组件是否在参数面板里 + * + * @param designer 设计器 + * @return 是则返回true + */ + public boolean hasSelectParaPane(FormDesigner designer) { + XCreator xCreator = designer.getSelectionModel().getSelection().getSelectedCreator(); + if (xCreator == null) { + xCreator = designer.getRootComponent(); + } + XLayoutContainer container = XCreatorUtils.getHotspotContainer(xCreator); + //TODO container可能为空,引发空指针异常 + return xCreator.acceptType(XWParameterLayout.class) || container.acceptType(XWParameterLayout.class); + } + + public void setEditingFormDesigner(BaseFormDesigner editor) { + FormDesigner fd = (FormDesigner) editor; + super.setEditingFormDesigner(fd); + } + + private void clearDockingView() { + propertyTable = null; + eventTable = null; + if (widgetPropertyTables != null) { + widgetPropertyTables.clear(); + } + JScrollPane psp = new JScrollPane(); + psp.setBorder(null); + this.add(psp, BorderLayout.CENTER); + } + + /** + * 属性表监听界面事件(编辑,删除,选中,改变大小) + */ + private class WidgetPropertyDesignerAdapter implements DesignerEditListener { + AbstractPropertyTable propertyTable; + + WidgetPropertyDesignerAdapter(AbstractPropertyTable propertyTable) { + this.propertyTable = propertyTable; + } + + @Override + public void fireCreatorModified(DesignerEvent evt) { + if (evt.getCreatorEventID() == DesignerEvent.CREATOR_EDITED + || evt.getCreatorEventID() == DesignerEvent.CREATOR_DELETED + || evt.getCreatorEventID() == DesignerEvent.CREATOR_SELECTED) { + propertyTable.initPropertyGroups(designer); + } else if (evt.getCreatorEventID() == DesignerEvent.CREATOR_RESIZED) { + repaint(); + } + } + + @Override + public boolean equals(Object o) { + return o instanceof WidgetPropertyDesignerAdapter && ((WidgetPropertyDesignerAdapter) o).propertyTable == this.propertyTable; + } + } + + /** + * 事件表监听界面事件(编辑,选中) + */ + private class EventPropertyDesignerAdapter implements DesignerEditListener { + EventPropertyTable propertyTable; + + EventPropertyDesignerAdapter(EventPropertyTable eventTable) { + this.propertyTable = eventTable; + } + + @Override + public void fireCreatorModified(DesignerEvent evt) { + if (evt.getCreatorEventID() == DesignerEvent.CREATOR_EDITED + || evt.getCreatorEventID() == DesignerEvent.CREATOR_SELECTED) { + propertyTable.refresh(); + } + } + + @Override + public boolean equals(Object o) { + return o instanceof EventPropertyDesignerAdapter; + } + } + + /** + * 移动端属性表监听界面事件(改变大小,编辑,选中,增加控件) + */ + private class mobileWidgetDesignerAdapter implements DesignerEditListener { + + mobileWidgetDesignerAdapter() { + } + + /** + * 响应界面改变事件 + * + * @param evt 事件 + */ + public void fireCreatorModified(DesignerEvent evt) { + if (evt.getCreatorEventID() == DesignerEvent.CREATOR_RESIZED + || evt.getCreatorEventID() == DesignerEvent.CREATOR_EDITED + || evt.getCreatorEventID() == DesignerEvent.CREATOR_SELECTED + || evt.getCreatorEventID() == DesignerEvent.CREATOR_ADDED) { + int value = downPanel.getVerticalScrollBar().getValue(); + if (hasSelectParaPane(getEditingFormDesigner())) { + cardLayout.show(centerPane, PARA); + mobileParaWidgetTable.refreshData(); + } else { + cardLayout.show(centerPane, BODY); + mobileWidgetTable.refreshData(); + } + //出现滚动条 + downPanel.doLayout(); + //控件列表选中某组件,触发表单中选中控件,选中事件又触发列表刷新,滚动条回到0 + //此处设置滚动条值为刷新前 + downPanel.getVerticalScrollBar().setValue(value); + } + } + } + + @Override + public Location preferredLocation() { + return Location.WEST_BELOW; + } } \ No newline at end of file From 32ea80b862f4a2f728fade109b651a1af0c7d8d4 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Wed, 29 Mar 2017 09:27:06 +0800 Subject: [PATCH 222/343] =?UTF-8?q?=E6=97=A0=E4=BB=BB=E5=8A=A1=20=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/FormSelectionUtils.java | 110 +++++++++++------- 1 file changed, 67 insertions(+), 43 deletions(-) diff --git a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java index 4f6c937bc..ff976ef77 100644 --- a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java +++ b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java @@ -33,63 +33,87 @@ public class FormSelectionUtils { /** * @param designer 编辑器 * @param parent 粘贴依据的组件 - * @param clipBoard 剪贴板内容 + * @param clipboard 剪贴板内容 * @param x x * @param y y */ public static void paste2Container(FormDesigner designer, XLayoutContainer parent, - FormSelection clipBoard, int x, int y) { + FormSelection clipboard, int x, int y) { LayoutAdapter adapter = parent.getLayoutAdapter(); if (parent instanceof XWAbsoluteLayout) { //绝对布局 - designer.getSelectionModel().getSelection().reset(); - Rectangle rec = clipBoard.getSelctionBounds(); - for (XCreator creator : clipBoard.getSelectedCreators()) { - try { - Widget copied = copyWidget(designer, creator); - XCreator copiedCreator = XCreatorUtils.createXCreator(copied, creator.getSize()); - // 获取位置 - Point point = getPasteLocation((AbstractLayoutAdapter) adapter, - copiedCreator, - x + creator.getX() - rec.x + copiedCreator.getWidth() / 2, - y + creator.getY() - rec.y + copiedCreator.getHeight() / 2); - boolean addSuccess = adapter.addBean(copiedCreator, point.x, point.y); - - if (addSuccess) { - designer.getSelectionModel().getSelection().addSelectedCreator(copiedCreator); - } - - } catch (CloneNotSupportedException e) { - FRContext.getLogger().error(e.getMessage(), e); - } - } - rebuildSelection(designer); - designer.getEditListenerTable().fireCreatorModified( - designer.getSelectionModel().getSelection().getSelectedCreator(), DesignerEvent.CREATOR_PASTED); + absolutePaste(designer, clipboard, adapter, x, y); return; } else if (parent instanceof XWFitLayout) { //相对布局 - designer.getSelectionModel().getSelection().reset(); - for (XCreator creator : clipBoard.getSelectedCreators()) { - try { - Widget copied = copyWidget(designer, creator); - XCreator copiedCreator = XCreatorUtils.createXCreator(copied, creator.getSize()); - boolean addSuccess = adapter.addBean(copiedCreator, x, y); - - if (addSuccess) { - designer.getSelectionModel().getSelection().addSelectedCreator(copiedCreator); - } + relativePaste(designer, clipboard, adapter, x, y); + return; + } + Toolkit.getDefaultToolkit().beep(); + } + + /** + * 绝对布局粘贴 + * + * @param designer + * @param clipboard + * @param adapter + * @param x + * @param y + */ + private static void absolutePaste(FormDesigner designer, FormSelection clipboard, LayoutAdapter adapter, int x, int y) { - } catch (CloneNotSupportedException e) { - FRContext.getLogger().error(e.getMessage(), e); + designer.getSelectionModel().getSelection().reset(); + Rectangle rec = clipboard.getSelctionBounds(); + for (XCreator creator : clipboard.getSelectedCreators()) { + try { + Widget copied = copyWidget(designer, creator); + XCreator copiedCreator = XCreatorUtils.createXCreator(copied, creator.getSize()); + // 获取位置 + Point point = getPasteLocation((AbstractLayoutAdapter) adapter, + copiedCreator, + x + creator.getX() - rec.x + copiedCreator.getWidth() / 2, + y + creator.getY() - rec.y + copiedCreator.getHeight() / 2); + boolean addSuccess = adapter.addBean(copiedCreator, point.x, point.y); + if (addSuccess) { + designer.getSelectionModel().getSelection().addSelectedCreator(copiedCreator); } + } catch (CloneNotSupportedException e) { + FRContext.getLogger().error(e.getMessage(), e); } - rebuildSelection(designer); - designer.getEditListenerTable().fireCreatorModified( - designer.getSelectionModel().getSelection().getSelectedCreator(), DesignerEvent.CREATOR_PASTED); - return; } - Toolkit.getDefaultToolkit().beep(); + rebuildSelection(designer); + designer.getEditListenerTable().fireCreatorModified( + designer.getSelectionModel().getSelection().getSelectedCreator(), DesignerEvent.CREATOR_PASTED); + + } + + /** + * 相对布局粘贴 + * + * @param designer + * @param clipboard + * @param adapter + * @param x + * @param y + */ + private static void relativePaste(FormDesigner designer, FormSelection clipboard, LayoutAdapter adapter, int x, int y) { + designer.getSelectionModel().getSelection().reset(); + for (XCreator creator : clipboard.getSelectedCreators()) { + try { + Widget copied = copyWidget(designer, creator); + XCreator copiedCreator = XCreatorUtils.createXCreator(copied, creator.getSize()); + boolean addSuccess = adapter.addBean(copiedCreator, x, y); + if (addSuccess) { + designer.getSelectionModel().getSelection().addSelectedCreator(copiedCreator); + } + } catch (CloneNotSupportedException e) { + FRContext.getLogger().error(e.getMessage(), e); + } + } + rebuildSelection(designer); + designer.getEditListenerTable().fireCreatorModified( + designer.getSelectionModel().getSelection().getSelectedCreator(), DesignerEvent.CREATOR_PASTED); } /** From d6047fbd869afbdd44e4f14cb8431c8f2e825a85 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Wed, 29 Mar 2017 09:55:38 +0800 Subject: [PATCH 223/343] =?UTF-8?q?=E6=97=A0=E4=BB=BB=E5=8A=A1=20=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E4=BB=A3=E7=A0=81=E9=80=9A=E8=BF=87pmd?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer/beans/models/SelectionModel.java | 136 ++++++++++-------- 1 file changed, 73 insertions(+), 63 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java index 171ec465f..c364317f1 100644 --- a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java +++ b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java @@ -111,59 +111,12 @@ public class SelectionModel { */ public boolean pasteFromClipBoard() { if (!clipboard.isEmpty()) { - XLayoutContainer parent = null; - //未选 if (!hasSelectionComponent()) { - if (designer.getClass().equals(FormDesigner.class)) { - if (selection.getSelectedCreator() instanceof XWFitLayout) { - if (selection.getSelectedCreator().getClass().equals(XWTabFitLayout.class)) { - Rectangle rec = selection.getRelativeBounds(); - //Tab布局 - FormSelectionUtils.paste2Container(designer, (XLayoutContainer) selection.getSelectedCreator(), - clipboard, - rec.x + rec.width / 2, - rec.y + BORDER_PROPORTION); - } else { - Rectangle rec = selection.getRelativeBounds(); - //自适应布局 - FormSelectionUtils.paste2Container(designer, designer.getRootComponent(), - clipboard, - rec.x + rec.width / 2, - rec.y + BORDER_PROPORTION); - } - } else { - //绝对布局 - //编辑器外面还有两层容器,使用designer.getRootComponent()获取到的是编辑器中层的容器,不是编辑器表层 - //当前选择的就是编辑器表层 - FormSelectionUtils.paste2Container(designer, (XLayoutContainer) selection.getSelectedCreator(), - clipboard, - DELTA_X_Y, - DELTA_X_Y); - } - } else { - //cpt本地组件复用,编辑器就一层,是最底层,使用designer.getRootComponent()就可以获取到 - //使用selection.getSelectedCreator()也应该是可以获取到的。 - FormSelectionUtils.paste2Container(designer, designer.getRootComponent(), - clipboard, - DELTA_X_Y, - DELTA_X_Y); - } - } - //已选 - else { - //获取到编辑器的表层容器(已选的组件的父容器就是表层容器) - parent = XCreatorUtils.getParentXLayoutContainer(selection.getSelectedCreator()); - if (parent != null && selection.getSelectedCreator().getParent() instanceof XWFitLayout) { - //自适应布局 - Rectangle rec = selection.getRelativeBounds(); - FormSelectionUtils.paste2Container(designer, parent, clipboard, rec.x + rec.width / 2, rec.y + - rec.height - BORDER_PROPORTION); - - } else if (parent != null && selection.getSelectedCreator().getParent() instanceof XWAbsoluteLayout) { - //绝对布局 - Rectangle rec = selection.getSelctionBounds(); - FormSelectionUtils.paste2Container(designer, parent, clipboard, rec.x + DELTA_X_Y, rec.y + DELTA_X_Y); - } + //未选 + unselectedPaste(); + } else { + //已选 + selectedPaste(); } } else { Toolkit.getDefaultToolkit().beep(); @@ -175,6 +128,65 @@ public class SelectionModel { return selection; } + /** + * 粘贴时未选择组件 + */ + private void unselectedPaste() { + if (designer.getClass().equals(FormDesigner.class)) { + if (selection.getSelectedCreator() instanceof XWFitLayout) { + if (selection.getSelectedCreator().getClass().equals(XWTabFitLayout.class)) { + Rectangle rec = selection.getRelativeBounds(); + //Tab布局 + FormSelectionUtils.paste2Container(designer, (XLayoutContainer) selection.getSelectedCreator(), + clipboard, + rec.x + rec.width / 2, + rec.y + BORDER_PROPORTION); + } else { + Rectangle rec = selection.getRelativeBounds(); + //自适应布局 + FormSelectionUtils.paste2Container(designer, designer.getRootComponent(), + clipboard, + rec.x + rec.width / 2, + rec.y + BORDER_PROPORTION); + } + } else { + //绝对布局 + //编辑器外面还有两层容器,使用designer.getRootComponent()获取到的是编辑器中层的容器,不是编辑器表层 + //当前选择的就是编辑器表层 + FormSelectionUtils.paste2Container(designer, (XLayoutContainer) selection.getSelectedCreator(), + clipboard, + DELTA_X_Y, + DELTA_X_Y); + } + } else { + //cpt本地组件复用,编辑器就一层,是最底层,使用designer.getRootComponent()就可以获取到 + //使用selection.getSelectedCreator()也应该是可以获取到的。 + FormSelectionUtils.paste2Container(designer, designer.getRootComponent(), + clipboard, + DELTA_X_Y, + DELTA_X_Y); + } + } + + /** + * 粘贴时选择组件 + */ + private void selectedPaste() { + XLayoutContainer parent = null; + //获取到编辑器的表层容器(已选的组件的父容器就是表层容器) + parent = XCreatorUtils.getParentXLayoutContainer(selection.getSelectedCreator()); + if (parent != null && selection.getSelectedCreator().getParent() instanceof XWFitLayout) { + //自适应布局 + Rectangle rec = selection.getRelativeBounds(); + FormSelectionUtils.paste2Container(designer, parent, clipboard, rec.x + rec.width / 2, rec.y + + rec.height - BORDER_PROPORTION); + } else if (parent != null && selection.getSelectedCreator().getParent() instanceof XWAbsoluteLayout) { + //绝对布局 + Rectangle rec = selection.getSelctionBounds(); + FormSelectionUtils.paste2Container(designer, parent, clipboard, rec.x + DELTA_X_Y, rec.y + DELTA_X_Y); + } + } + /** * 删除当前所有选择的组件 */ @@ -268,18 +280,16 @@ public class SelectionModel { if (designer.getClass().equals(FormDesigner.class)) { //frm本地组件复用 if (selectionXCreator != null) { - if (selectionXCreator.getClass().equals(XWAbsoluteBodyLayout.class)) { - //frm绝对布局编辑器 - return false; - } else if (selectionXCreator.getClass().equals(XWCardMainBorderLayout.class) + //选中的是否是tab布局编辑器本身 + boolean tabEditor = selectionXCreator.getClass().equals(XWCardMainBorderLayout.class) || selectionXCreator.getClass().equals(XWCardLayout.class) - || selectionXCreator.getClass().equals(XWTabFitLayout.class)) { - //Tab布局编辑器 - return false; - } else { - //自适应布局编辑器 - return !selectionXCreator.getClass().equals(XWFitLayout.class); - } + || selectionXCreator.getClass().equals(XWTabFitLayout.class); + //选中的是否是frm绝对布局编辑器本身 + boolean absoluteEditor = selectionXCreator.getClass().equals(XWAbsoluteBodyLayout.class); + //选中的是否是相对布局编辑器本身 + boolean relativeEditor = selectionXCreator.getClass().equals(XWFitLayout.class); + + return !(tabEditor || absoluteEditor || relativeEditor); } else { return false; } From 0d69862fabc66b19f8792decfd384b74a711fcf1 Mon Sep 17 00:00:00 2001 From: fanglei <294531121> Date: Wed, 29 Mar 2017 15:30:54 +0800 Subject: [PATCH 224/343] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=8D=E8=83=BD?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E5=8F=82=E6=95=B0=E9=9D=A2=E6=9D=BF?= =?UTF-8?q?=E6=8E=A7=E4=BB=B6=E6=A0=87=E7=AD=BE=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/mainframe/MobileParaWidgetTable.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/designer_form/src/com/fr/design/mainframe/MobileParaWidgetTable.java b/designer_form/src/com/fr/design/mainframe/MobileParaWidgetTable.java index a39d3d94a..80fa7f895 100644 --- a/designer_form/src/com/fr/design/mainframe/MobileParaWidgetTable.java +++ b/designer_form/src/com/fr/design/mainframe/MobileParaWidgetTable.java @@ -305,9 +305,12 @@ class MobileParaWidgetTable extends JTable { /** * cell改变,相应的nametag改变 */ + private void firePropertyChange(){ ((WParameterLayout) designer.getParaComponent().toData()).add2NameTagMap(uiTableTextField.getText(), cellData[getSelectedRow()][1]); + ((WParameterLayout) designer.getParaComponent().toData()).setNameTagModified(cellData[getSelectedRow()][1], + true); } @Override From 2e01132b6ac761728d302236dfdef2c0d041e81c Mon Sep 17 00:00:00 2001 From: fr_shine Date: Fri, 31 Mar 2017 15:28:05 +0800 Subject: [PATCH 225/343] =?UTF-8?q?=E5=BD=93=E5=89=8D=E8=A1=A8=E5=8D=95?= =?UTF-8?q?=E5=AF=B9=E8=B1=A1=20=E5=88=A0=E9=99=A4=E6=9C=80=E5=90=8E?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chart/series/SeriesCondition/impl/FormHyperlinkPane.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/FormHyperlinkPane.java b/designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/FormHyperlinkPane.java index 52607e72e..01754ce2a 100644 --- a/designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/FormHyperlinkPane.java +++ b/designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/FormHyperlinkPane.java @@ -95,6 +95,8 @@ public class FormHyperlinkPane extends BasicBeanPane { parameterList.toArray(parameters); formHyperlink.setParameters(parameters); + } else { + formHyperlink.setParameters(null); } } From 1fac2c6a378facec90de207c6579d9f2e1bf04c7 Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 31 Mar 2017 15:39:25 +0800 Subject: [PATCH 226/343] =?UTF-8?q?REPORT-1916=20=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E8=80=97=E6=97=B6=3D=E3=80=8B=E8=A7=A3=E5=86=B3=E5=B8=A6?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E8=A1=A8=E5=8D=95=E6=97=A0=E6=B3=95=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/templateinfo/JFormProcessInfo.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/JFormProcessInfo.java b/designer_base/src/com/fr/design/mainframe/templateinfo/JFormProcessInfo.java index 4fa516929..d4a5bbf7a 100644 --- a/designer_base/src/com/fr/design/mainframe/templateinfo/JFormProcessInfo.java +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/JFormProcessInfo.java @@ -2,6 +2,7 @@ package com.fr.design.mainframe.templateinfo; import com.fr.form.main.Form; import com.fr.form.ui.container.WFitLayout; +import com.fr.form.ui.container.WLayout; /** * Created by plough on 2017/3/17. @@ -32,11 +33,9 @@ public class JFormProcessInfo extends TemplateProcessInfo { public int getWidgetCount() { int widgetCount = 0; for (int i = 0; i < template.getContainer().getWidgetCount(); i++) { - WFitLayout wf = (WFitLayout) template.getContainer().getWidget(i); - widgetCount += wf.getWidgetCount(); + WLayout wl = (WLayout) template.getContainer().getWidget(i); + widgetCount += wl.getWidgetCount(); } - int a = 1; - int b = 2; return widgetCount; } } From 78fc5760fdc97de6c35c7ced9a3e3f8640035f80 Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 31 Mar 2017 15:41:25 +0800 Subject: [PATCH 227/343] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mainframe/templateinfo/JFormProcessInfo.java | 1 - 1 file changed, 1 deletion(-) diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/JFormProcessInfo.java b/designer_base/src/com/fr/design/mainframe/templateinfo/JFormProcessInfo.java index d4a5bbf7a..15f501b13 100644 --- a/designer_base/src/com/fr/design/mainframe/templateinfo/JFormProcessInfo.java +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/JFormProcessInfo.java @@ -1,7 +1,6 @@ package com.fr.design.mainframe.templateinfo; import com.fr.form.main.Form; -import com.fr.form.ui.container.WFitLayout; import com.fr.form.ui.container.WLayout; /** From 9014f648299a8d25be5ae9a9c7ab65848f73f843 Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 31 Mar 2017 16:06:02 +0800 Subject: [PATCH 228/343] =?UTF-8?q?REPORT-1916=20=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E8=80=97=E6=97=B6=3D=E3=80=8B=E8=A7=A3=E5=86=B3=E5=B8=A6?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E8=A1=A8=E5=8D=95=E6=97=A0=E6=B3=95=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/templateinfo/JFormProcessInfo.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/JFormProcessInfo.java b/designer_base/src/com/fr/design/mainframe/templateinfo/JFormProcessInfo.java index 4fa516929..00b4d3f77 100644 --- a/designer_base/src/com/fr/design/mainframe/templateinfo/JFormProcessInfo.java +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/JFormProcessInfo.java @@ -1,7 +1,7 @@ package com.fr.design.mainframe.templateinfo; import com.fr.form.main.Form; -import com.fr.form.ui.container.WFitLayout; +import com.fr.form.ui.container.WLayout; /** * Created by plough on 2017/3/17. @@ -32,8 +32,8 @@ public class JFormProcessInfo extends TemplateProcessInfo { public int getWidgetCount() { int widgetCount = 0; for (int i = 0; i < template.getContainer().getWidgetCount(); i++) { - WFitLayout wf = (WFitLayout) template.getContainer().getWidget(i); - widgetCount += wf.getWidgetCount(); + WLayout wl = (WLayout) template.getContainer().getWidget(i); + widgetCount += wl.getWidgetCount(); } int a = 1; int b = 2; From 7d57afb46e8f044d14898287d3d600cd78d71b60 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Sat, 1 Apr 2017 20:57:39 +0800 Subject: [PATCH 229/343] =?UTF-8?q?report-1945=20frm=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E5=A4=8D=E7=94=A8=E7=BB=9D=E5=AF=B9=E5=B8=83=E5=B1=80bug?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../layout/FRAbsoluteLayoutAdapter.java | 11 +- .../adapters/layout/FRFitLayoutAdapter.java | 2 +- .../designer/beans/models/AddingModel.java | 272 +++--- .../designer/beans/models/SelectionModel.java | 17 +- .../designer/beans/models/StateModel.java | 920 +++++++++--------- .../designer/creator/XLayoutContainer.java | 435 +++++---- .../creator/cardlayout/XWCardTagLayout.java | 338 ++++--- .../mainframe/FormCreatorDropTarget.java | 17 +- .../com/fr/design/mainframe/FormDesigner.java | 6 + .../design/mainframe/FormSelectionUtils.java | 70 +- 10 files changed, 1059 insertions(+), 1029 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java index b8a8e8ad1..603626e13 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java @@ -283,7 +283,6 @@ public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { } else if (isCrossPointArea(parentComp, x, y)) { //交叉区域插入组件时,根据具体位置进行上下或者左右或者相邻三个组件的位置大小插入 fixCrossPointArea(parentComp, child, x, y); - //TODO 尽量不要出现这种写法吧?if else条件要么互斥,要么多个if判断return,不要在一条if else语句里面return吧? return; } else if (isTrisectionArea(parentComp, x, y)) { // 在边界三等分区域,就不再和组件二等分了 @@ -320,17 +319,15 @@ public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { int height = creator.getHeight(); int width = creator.getWidth(); if (x < 0) { - width += x; - x = 0; + x = container.getX(); } else if (x + creator.getWidth() > container.getWidth()) { - width = container.getWidth() - x; + x = container.getWidth() - width; } if (y < 0) { - height += y; - y = 0; + y = container.getY(); } else if (y + creator.getHeight() > container.getHeight()) { - height = container.getHeight() - y; + y = container.getHeight() - height; } creator.setBounds(x, y, width, height); diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java index e31ee6a5d..eca82e502 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java @@ -133,7 +133,7 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { isFindRelatedComps = false; //拖入组件判断时,先判断是否为交叉点区域,其次三等分区域,再次平分区域 Component comp = container.getComponentAt(x, y); - if (checkInterval(comp)) { + if (comp == null || checkInterval(comp)) { return false; } //如果当前处于边缘地带, 那么就把他贴到父容器上 diff --git a/designer_form/src/com/fr/design/designer/beans/models/AddingModel.java b/designer_form/src/com/fr/design/designer/beans/models/AddingModel.java index 46798f4d9..9d308b9d4 100644 --- a/designer_form/src/com/fr/design/designer/beans/models/AddingModel.java +++ b/designer_form/src/com/fr/design/designer/beans/models/AddingModel.java @@ -1,133 +1,141 @@ -package com.fr.design.designer.beans.models; - -import java.awt.Rectangle; - -import com.fr.design.designer.creator.XWAbsoluteLayout; -import com.fr.design.mainframe.FormDesigner; -import com.fr.design.designer.beans.AdapterBus; -import com.fr.design.designer.beans.ComponentAdapter; -import com.fr.design.designer.beans.adapters.component.CompositeComponentAdapter; -import com.fr.design.designer.creator.XCreator; -import com.fr.design.designer.creator.XLayoutContainer; -import com.fr.design.designer.creator.XWParameterLayout; -import com.fr.design.utils.ComponentUtils; -import com.fr.general.ComparatorUtils; - -/** - * 添加状态下的model - */ -public class AddingModel { - - // 当前要添加的组件 - private XCreator creator; - // 记录当前鼠标的位置信息 - private int current_x; - private int current_y; - private boolean added; - - public AddingModel(FormDesigner designer, XCreator xCreator) { - String creatorName = getXCreatorName(designer, xCreator); - this.creator = xCreator; - instantiateCreator(designer, creatorName); - // 初始的时候隐藏该组件的图标 - current_x = -this.creator.getWidth(); - current_y = -this.creator.getHeight(); - } - - /** - * 待说明 - * @param designer 设计器 - * @param creatorName 组件名 - */ - public void instantiateCreator(FormDesigner designer, String creatorName) { - creator.toData().setWidgetName(creatorName); - ComponentAdapter adapter = new CompositeComponentAdapter(designer, creator); - adapter.initialize(); - creator.addNotify(); - creator.putClientProperty(AdapterBus.CLIENT_PROPERTIES, adapter); - } - - public AddingModel(XCreator xCreator, int x, int y) { - this.creator = xCreator; - this.creator.backupCurrentSize(); - this.creator.backupParent(); - this.creator.setSize(xCreator.initEditorSize()); - current_x = x - (xCreator.getWidth() / 2); - current_y = y - (xCreator.getHeight() / 2); - } - - /** - * 隐藏当前组件的图标 - */ - public void reset() { - current_x = -this.creator.getWidth(); - current_y = -this.creator.getHeight(); - } - - public String getXCreatorName(FormDesigner designer,XCreator x){ - String def= x.createDefaultName(); - if (x.acceptType(XWParameterLayout.class)) { - return def; - } - int i = 0; - while (designer.getTarget().isNameExist(def + i)) { - i++; - } - return def+i; - } - - public int getCurrentX() { - return current_x; - } - - public int getCurrentY() { - return current_y; - } - - - /** - * 移动组件图标到鼠标事件发生的位置 - * @param x 坐标 - * @param y 坐标 - */ - public void moveTo(int x, int y) { - current_x = x - (this.creator.getWidth() / 2); - current_y = y - (this.creator.getHeight() / 2); - } - - public XCreator getXCreator() { - return this.creator; - } - - /** - * 当前组件是否已经添加到某个容器中 - * @return 是返回true - */ - public boolean isCreatorAdded() { - return added; - } - - /** - * 加入容器 - * @param designer 设计器 - * @param container 容器 - * @param x 坐标 - * @param y 坐标 - * @return 成功返回true - */ - public boolean add2Container(FormDesigner designer, XLayoutContainer container, int x, int y) { - //考虑不同布局嵌套的情况,获取顶层容器 - XLayoutContainer xLayoutContainer = container.getTopLayout(); - if(xLayoutContainer != null && xLayoutContainer.acceptType(XWAbsoluteLayout.class)){ - container = xLayoutContainer; - } - - Rectangle rect = ComponentUtils.getRelativeBounds(container); - if(!ComparatorUtils.equals(container.getOuterLayout(), container.getBackupParent())){ - return added = container.getLayoutAdapter().addBean(creator, x + designer.getArea().getHorizontalValue(), y + designer.getArea().getVerticalValue()); - } - return added = container.getLayoutAdapter().addBean(creator, - x + designer.getArea().getHorizontalValue() - rect.x, - y + designer.getArea().getVerticalValue() - rect.y); - } +package com.fr.design.designer.beans.models; + +import java.awt.Rectangle; + +import com.fr.design.designer.creator.XWAbsoluteLayout; +import com.fr.design.mainframe.FormDesigner; +import com.fr.design.designer.beans.AdapterBus; +import com.fr.design.designer.beans.ComponentAdapter; +import com.fr.design.designer.beans.adapters.component.CompositeComponentAdapter; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XLayoutContainer; +import com.fr.design.designer.creator.XWParameterLayout; +import com.fr.design.utils.ComponentUtils; +import com.fr.general.ComparatorUtils; + +/** + * 添加状态下的model + */ +public class AddingModel { + + // 当前要添加的组件 + private XCreator creator; + // 记录当前鼠标的位置信息 + private int currentX; + private int currentY; + private boolean added; + + public AddingModel(FormDesigner designer, XCreator xCreator) { + String creatorName = getXCreatorName(designer, xCreator); + this.creator = xCreator; + instantiateCreator(designer, creatorName); + // 初始的时候隐藏该组件的图标 + currentY = -this.creator.getWidth(); + currentX = -this.creator.getHeight(); + } + + /** + * 待说明 + * + * @param designer 设计器 + * @param creatorName 组件名 + */ + public void instantiateCreator(FormDesigner designer, String creatorName) { + creator.toData().setWidgetName(creatorName); + ComponentAdapter adapter = new CompositeComponentAdapter(designer, creator); + adapter.initialize(); + creator.addNotify(); + creator.putClientProperty(AdapterBus.CLIENT_PROPERTIES, adapter); + } + + public AddingModel(XCreator xCreator, int x, int y) { + this.creator = xCreator; + this.creator.backupCurrentSize(); + this.creator.backupParent(); + this.creator.setSize(xCreator.initEditorSize()); + currentX = x - (xCreator.getWidth() / 2); + currentY = y - (xCreator.getHeight() / 2); + } + + /** + * 隐藏当前组件的图标 + */ + public void reset() { + currentX = -this.creator.getWidth(); + currentY = -this.creator.getHeight(); + } + + public String getXCreatorName(FormDesigner designer, XCreator x) { + String def = x.createDefaultName(); + if (x.acceptType(XWParameterLayout.class)) { + return def; + } + int i = 0; + while (designer.getTarget().isNameExist(def + i)) { + i++; + } + return def + i; + } + + public int getCurrentX() { + return currentX; + } + + public int getCurrentY() { + return currentY; + } + + + /** + * 移动组件图标到鼠标事件发生的位置 + * + * @param x 坐标 + * @param y 坐标 + */ + public void moveTo(int x, int y) { + currentX = x - (this.creator.getWidth() / 2); + currentY = y - (this.creator.getHeight() / 2); + } + + public XCreator getXCreator() { + return this.creator; + } + + /** + * 当前组件是否已经添加到某个容器中 + * + * @return 是返回true + */ + public boolean isCreatorAdded() { + return added; + } + + /** + * 加入容器 + * + * @param designer 设计器 + * @param container 容器 + * @param x 坐标 + * @param y 坐标 + * @return 成功返回true + */ + public boolean add2Container(FormDesigner designer, XLayoutContainer container, int x, int y) { + //考虑不同布局嵌套的情况,获取顶层容器 + XLayoutContainer xLayoutContainer = container.getTopLayout(); + if (xLayoutContainer != null && xLayoutContainer.acceptType(XWAbsoluteLayout.class)) { + container = xLayoutContainer; + } + + Rectangle rect = ComponentUtils.getRelativeBounds(container); + if (!ComparatorUtils.equals(container.getOuterLayout(), container.getBackupParent())) { + added = container.getLayoutAdapter().addBean(creator, + x + designer.getArea().getHorizontalValue(), + y + designer.getArea().getVerticalValue()); + return added; + } + added = container.getLayoutAdapter().addBean(creator, + x + designer.getArea().getHorizontalValue() - rect.x, + y + designer.getArea().getVerticalValue() - rect.y); + return added; + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java index c364317f1..1748fef4b 100644 --- a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java +++ b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java @@ -111,7 +111,7 @@ public class SelectionModel { */ public boolean pasteFromClipBoard() { if (!clipboard.isEmpty()) { - if (!hasSelectionComponent()) { + if (!hasSelectedPasteSource()) { //未选 unselectedPaste(); } else { @@ -275,7 +275,7 @@ public class SelectionModel { * 但是编辑窗口的最外层其实是表层@see {@link com.fr.design.designer.creator.XWAbsoluteBodyLayout}, * 其他两层不是靠添加组件就可以编辑的。 */ - public boolean hasSelectionComponent() { + public boolean hasSelectedPasteSource() { XCreator selectionXCreator = selection.getSelectedCreator(); if (designer.getClass().equals(FormDesigner.class)) { //frm本地组件复用 @@ -286,10 +286,12 @@ public class SelectionModel { || selectionXCreator.getClass().equals(XWTabFitLayout.class); //选中的是否是frm绝对布局编辑器本身 boolean absoluteEditor = selectionXCreator.getClass().equals(XWAbsoluteBodyLayout.class); + //选中是否是frm绝对画布块编辑器本身 + boolean absoluteCanvas = selectionXCreator.getClass().equals(XWAbsoluteLayout.class); //选中的是否是相对布局编辑器本身 boolean relativeEditor = selectionXCreator.getClass().equals(XWFitLayout.class); - return !(tabEditor || absoluteEditor || relativeEditor); + return !(tabEditor || absoluteEditor || absoluteCanvas || relativeEditor); } else { return false; } @@ -299,6 +301,15 @@ public class SelectionModel { } } + /** + * 是否有组件被选择。如果所选组件是最底层容器,也视为无选择 + * + * @return 是则返回true + */ + public boolean hasSelectionComponent() { + return !selection.isEmpty() && selection.getSelectedCreator().getParent() != null; + } + /** * 移动组件至指定位置 * diff --git a/designer_form/src/com/fr/design/designer/beans/models/StateModel.java b/designer_form/src/com/fr/design/designer/beans/models/StateModel.java index a623caddc..ff3fcbedc 100644 --- a/designer_form/src/com/fr/design/designer/beans/models/StateModel.java +++ b/designer_form/src/com/fr/design/designer/beans/models/StateModel.java @@ -1,446 +1,476 @@ -package com.fr.design.designer.beans.models; - -import java.awt.Component; -import java.awt.Cursor; -import java.awt.Graphics; -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.Toolkit; -import java.awt.event.MouseEvent; -import java.util.ArrayList; - -import com.fr.design.beans.location.Absorptionline; -import com.fr.design.mainframe.FormDesigner; -import com.fr.design.mainframe.FormSelectionUtils; -import com.fr.design.designer.beans.AdapterBus; -import com.fr.design.designer.beans.HoverPainter; -import com.fr.design.designer.beans.LayoutAdapter; -import com.fr.design.designer.beans.events.DesignerEvent; -import com.fr.design.designer.beans.location.Direction; -import com.fr.design.designer.beans.location.Location; -import com.fr.design.designer.creator.XConnector; -import com.fr.design.designer.creator.XCreator; -import com.fr.design.designer.creator.XCreatorUtils; -import com.fr.design.designer.creator.XLayoutContainer; -import com.fr.design.designer.creator.XWAbsoluteLayout; -import com.fr.design.utils.ComponentUtils; - -/** - * 普通模式下的状态model - */ -public class StateModel { - // 对应的selection model - - private SelectionModel selectionModel; - // 当前鼠标进入拖拽区域的位置类型 - private Direction driection; - - // 当前拖拽的起始位置 - private int current_x; - private int current_y; - - private Point startPoint = new Point(); - private Point currentPoint = new Point(); - - private Absorptionline lineInX; - private Absorptionline lineInY; - //等距线 - private Absorptionline lineEquidistant; - - // 当前是否处于拖拽选择状态 - private boolean selecting; - private boolean dragging; - - private boolean addable; - - private FormDesigner designer; - - public StateModel(FormDesigner designer) { - this.designer = designer; - selectionModel = designer.getSelectionModel(); - } - - /** - * 返回direction - * @return direction方向 - */ - public Direction getDirection() { - return driection; - } - - /** - * 是否有组件正被选中 - * - * @return true 如果至少一个组件被选中 - */ - public boolean isSelecting() { - return selecting; - } - - /** - *是否能拖拽 - * @return 非outer且选中为空 - */ - public boolean dragable() { - return ((driection != Location.outer) && !selecting); - } - - /** - * 拖拽中是否可以转换为添加模式: - * 如果拖拽组件只有一个,鼠标当前所在位置的最底层表单容器与这个组件的容器不同; - * 如果拖拽组件为多个,鼠标当前所在位置的最底层表单容器除了要求要跟这些组件的容器不同外,还必须是绝对定位布局 - */ - private void checkAddable(MouseEvent e) { - addable = false; - designer.setPainter(null); - - if (driection != Location.inner) { - return; - } - - XCreator comp = designer.getComponentAt(e.getX(), e.getY(), selectionModel.getSelection().getSelectedCreators()); - XLayoutContainer container = XCreatorUtils.getHotspotContainer(comp); - XCreator creator = selectionModel.getSelection().getSelectedCreator(); - Component creatorContainer = XCreatorUtils.getParentXLayoutContainer(creator); - if (creatorContainer != null && creatorContainer != container - && (selectionModel.getSelection().size() == 1 || container instanceof XWAbsoluteLayout)) { - HoverPainter painter = AdapterBus.getContainerPainter(designer, container); - designer.setPainter(painter); - if (painter != null) { - Rectangle rect = ComponentUtils.getRelativeBounds(container); - rect.x -= designer.getArea().getHorizontalValue(); - rect.y -= designer.getArea().getVerticalValue(); - painter.setRenderingBounds(rect); - painter.setHotspot(new Point(e.getX(), e.getY())); - painter.setCreator(creator); - } - addable = true; - } - } - - private boolean addBean(XLayoutContainer container, int x, int y) { - LayoutAdapter adapter = container.getLayoutAdapter(); - Rectangle r = ComponentUtils.getRelativeBounds(container); - if (selectionModel.getSelection().size() == 1) { - return adapter.addBean(selectionModel.getSelection().getSelectedCreator(), x - + designer.getArea().getHorizontalValue() - r.x, y + designer.getArea().getVerticalValue() - r.y); - } - for (XCreator creator : selectionModel.getSelection().getSelectedCreators()) { - adapter.addBean(creator, x + designer.getArea().getHorizontalValue() - r.x, y + designer.getArea().getVerticalValue()- r.y); - } - return true; - } - - private void adding(int x, int y) { - // 当前鼠标所在的组件 - XCreator hoveredComponent = designer.getComponentAt(x, y, selectionModel.getSelection().getSelectedCreators()); - - // 获取该组件所在的焦点容器 - XLayoutContainer container = XCreatorUtils.getHotspotContainer(hoveredComponent); - - boolean success = false; - - if (container != null) { - // 如果是容器,则调用其acceptComponent接受组件 - success = addBean(container, x, y); - } - - if (success) { - FormSelectionUtils.rebuildSelection(designer); - designer.getEditListenerTable().fireCreatorModified( - selectionModel.getSelection().getSelectedCreator(), DesignerEvent.CREATOR_ADDED); - } else { - Toolkit.getDefaultToolkit().beep(); - } - - // 取消提示 - designer.setPainter(null); - } - - /** - *是否拖拽 - * @return dragging状态 - */ - public boolean isDragging() { - return dragging; - } - - /** - *是否可以开始画线 - * @return startPoint不为空返回true - */ - public boolean prepareForDrawLining() { - return startPoint != null; - } - - /** - *设置开始位置 - * @param p point位置 - */ - public void setStartPoint(Point p) { - this.startPoint = p; - } - - /** - *返回开始位置 - * @return 点位置 - */ - public Point getStartPoint() { - return startPoint; - } - - /** - *返回当前点位置 - * @return 点位置 - */ - public Point getEndPoint() { - return currentPoint; - } - - /** - *当前选中组件 - * @param e 鼠标事件 - */ - public void startSelecting(MouseEvent e) { - selecting = true; - selectionModel.setHotspotBounds(new Rectangle()); - current_x = getMouseXY(e).x; - current_y = getMouseXY(e).y; - } - - /** - *当前鼠标的xy - * @param e 鼠标事件 - */ - public void startResizing(MouseEvent e) { - if (!selectionModel.getSelection().isEmpty()) { - driection.backupBounds(designer); - } - current_x = getMouseXY(e).x; - current_y = getMouseXY(e).y; - } - - /** - *起始点开始DrawLine - * @param p 点位置 - */ - public void startDrawLine(Point p) { - this.startPoint = p; - if(p != null) { - try { - designer.setCursor(XConnector.connectorCursor); - } catch (Exception e) { - } - } else { - designer.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); - } - } - - /** - *鼠标释放时所在的区域及圈中的组件 - * @param e 鼠标事件 - */ - public void selectCreators(MouseEvent e) { - int x = getMouseXY(e).x; - int y = getMouseXY(e).y; - - Rectangle bounds = createCurrentBounds(x, y); - - if ((x != current_x) || (y != current_y)) { - selectionModel.setSelectedCreators(getHotspotCreators(bounds, designer.getRootComponent())); - } - selectionModel.setHotspotBounds(null); - } - - /** - *画所在区域线 - * @param e 鼠标事件 - */ - public void drawLine(MouseEvent e) { - designer.getDrawLineHelper().setDrawLine(true); - Point p = designer.getDrawLineHelper().getNearWidgetPoint(e); - if (p != null) { - currentPoint = p; - } else { - currentPoint.x = e.getX() + designer.getArea().getHorizontalValue(); - currentPoint.y = e.getY() + designer.getArea().getVerticalValue(); - } - } - - private Rectangle createCurrentBounds(int x, int y) { - Rectangle bounds = new Rectangle(); - - bounds.x = Math.min(x, current_x); - bounds.y = Math.min(y, current_y); - bounds.width = Math.max(x, current_x) - bounds.x; - bounds.height = Math.max(y, current_y) - bounds.y; - - return bounds; - } - - private ArrayList getHotspotCreators(Rectangle selection, XCreator root) { - ArrayList creators = new ArrayList(); - - if (!root.isVisible() && !designer.isRoot(root)) { - return creators; - } - - if (root instanceof XLayoutContainer) { - XLayoutContainer container = (XLayoutContainer) root; - int count = container.getXCreatorCount(); - Rectangle clipped = new Rectangle(selection); - - for (int i = count - 1; i >= 0; i--) { - XCreator child = container.getXCreator(i); - - if (selection.contains(child.getBounds())) { - creators.add(child); - } else { - clipped.x = selection.x - child.getX(); - clipped.y = selection.y - child.getY(); - creators.addAll(getHotspotCreators(clipped, child)); - } - } - } - - return creators; - } - - - /** - *重置model - */ - public void resetModel() { - dragging = false; - selecting = false; - } - - /** - *重置 - */ - public void reset() { - driection = Location.outer; - dragging = false; - selecting = false; - } - - /** - *取消拖拽 - */ - public void draggingCancel() { - designer.repaint(); - reset(); - } - - /** - *设置可拉伸方向 - * @param dir 拉伸方向 - */ - public void setDirection(Direction dir) { - if(driection != dir) { - this.driection = dir; - driection.updateCursor(designer); - } - } - - /** - *x吸附线赋值 - * @param line 线 - */ - public void setXAbsorptionline(Absorptionline line) { - this.lineInX = line; - } - - /** - *y吸附线赋值 - * @param line 线 - */ - public void setYAbsorptionline(Absorptionline line) { - this.lineInY = line; - } - - /** - * 等距线赋值 - * @param line 线 - */ - public void setEquidistantLine(Absorptionline line){ - this.lineEquidistant = line; - } - - /** - *画吸附线 - * @param g Graphics类 - */ - public void paintAbsorptionline(Graphics g) { - if(lineInX != null) { - lineInX.paint(g,designer.getArea()); - } - if(lineInY != null) { - lineInY.paint(g,designer.getArea()); - } - if(lineEquidistant != null){ - lineEquidistant.paint(g,designer.getArea()); - } - } - - /** - *拖拽 - * @param e 鼠标事件 - */ - public void dragging(MouseEvent e) { - checkAddable(e); - setDependLinePainter(e); - driection.drag(getMouseXY(e).x-current_x, getMouseXY(e).y-current_y, designer); - this.dragging = true; - } - - // 拖拽时画依附线用到的painter - private void setDependLinePainter(MouseEvent e){ - XCreator comp = designer.getComponentAt(e.getX(), e.getY(), selectionModel.getSelection().getSelectedCreators()); - XLayoutContainer container = XCreatorUtils.getHotspotContainer(comp); - XCreator creator = selectionModel.getSelection().getSelectedCreator(); - HoverPainter painter = AdapterBus.getContainerPainter(designer, container); - designer.setPainter(painter); - if (painter != null) { - painter.setHotspot(new Point(e.getX(), e.getY())); - painter.setCreator(creator); - } - } - - /** - *释放捕获 - * @param e 鼠标事件 - */ - public void releaseDragging(MouseEvent e) { - this.dragging = false; - if (addable) { - adding(e.getX(), e.getY()); - } else if (!selectionModel.getSelection().isEmpty()) { - selectionModel.releaseDragging(); - } - designer.repaint(); - } - - /** - *改变选择区域 - * - * @param e 鼠标事件 - */ - public void changeSelection(MouseEvent e) { - Rectangle bounds = createCurrentBounds(getMouseXY(e).x, getMouseXY(e).y); - selectionModel.setHotspotBounds(bounds); - } - - /** - *返回鼠标所在的x、y 考虑滚动条的值 - * - * @param e 鼠标事件 - * @return xy值 - */ - public Point getMouseXY(MouseEvent e) { - Point p1 = new Point(e.getX() + designer.getArea().getHorizontalValue(), e.getY() - + designer.getArea().getVerticalValue()); - return p1; - } - +package com.fr.design.designer.beans.models; + +import com.fr.design.beans.location.Absorptionline; +import com.fr.design.designer.beans.AdapterBus; +import com.fr.design.designer.beans.HoverPainter; +import com.fr.design.designer.beans.LayoutAdapter; +import com.fr.design.designer.beans.events.DesignerEvent; +import com.fr.design.designer.beans.location.Direction; +import com.fr.design.designer.beans.location.Location; +import com.fr.design.designer.creator.*; +import com.fr.design.mainframe.FormDesigner; +import com.fr.design.mainframe.FormSelectionUtils; +import com.fr.design.utils.ComponentUtils; + +import java.awt.*; +import java.awt.event.MouseEvent; +import java.util.ArrayList; + +/** + * 普通模式下的状态model + */ +public class StateModel { + // 对应的selection model + + private SelectionModel selectionModel; + // 当前鼠标进入拖拽区域的位置类型 + private Direction driection; + + // 当前拖拽的起始位置 + private int currentX; + private int currentY; + + //拖拽组件原始位置大小备份 + private Rectangle selectedPositionBackup; + + private Point startPoint = new Point(); + private Point currentPoint = new Point(); + + private Absorptionline lineInX; + private Absorptionline lineInY; + //等距线 + private Absorptionline lineEquidistant; + + // 当前是否处于拖拽选择状态 + private boolean selecting; + private boolean dragging; + + private boolean addable; + + private FormDesigner designer; + + public StateModel(FormDesigner designer) { + this.designer = designer; + selectionModel = designer.getSelectionModel(); + } + + /** + * 返回direction + * + * @return direction方向 + */ + public Direction getDirection() { + return driection; + } + + /** + * 是否有组件正被选中 + * + * @return true 如果至少一个组件被选中 + */ + public boolean isSelecting() { + return selecting; + } + + /** + * 是否能拖拽 + * + * @return 非outer且选中为空 + */ + public boolean dragable() { + return ((driection != Location.outer) && !selecting); + } + + /** + * 拖拽中是否可以转换为添加模式: + * 如果拖拽组件只有一个,鼠标当前所在位置的最底层表单容器与这个组件的容器不同; + * 如果拖拽组件为多个,鼠标当前所在位置的最底层表单容器除了要求要跟这些组件的容器不同外,还必须是绝对定位布局 + */ + private void checkAddable(MouseEvent e) { + addable = false; + designer.setPainter(null); + + if (driection != Location.inner) { + return; + } + + XCreator comp = designer.getComponentAt(e.getX(), e.getY(), selectionModel.getSelection().getSelectedCreators()); + XLayoutContainer container = XCreatorUtils.getHotspotContainer(comp); + XCreator creator = selectionModel.getSelection().getSelectedCreator(); + Component creatorContainer = XCreatorUtils.getParentXLayoutContainer(creator); + if (creatorContainer != null && creatorContainer != container + && (selectionModel.getSelection().size() == 1 || container instanceof XWAbsoluteLayout)) { + HoverPainter painter = AdapterBus.getContainerPainter(designer, container); + designer.setPainter(painter); + if (painter != null) { + Rectangle rect = ComponentUtils.getRelativeBounds(container); + rect.x -= designer.getArea().getHorizontalValue(); + rect.y -= designer.getArea().getVerticalValue(); + painter.setRenderingBounds(rect); + painter.setHotspot(new Point(e.getX(), e.getY())); + painter.setCreator(creator); + } + addable = true; + } + } + + /** + * @param container 容器 + * @param mouseX 鼠标释放位置X + * @param mouseY 鼠标释放位置Y + * @return 是否成功 + */ + private boolean addBean(XLayoutContainer container, int mouseX, int mouseY) { + LayoutAdapter adapter = container.getLayoutAdapter(); + Rectangle rectangleContainer = ComponentUtils.getRelativeBounds(container); + if (selectionModel.getSelection().size() == 1) { + return adapter.addBean(selectionModel.getSelection().getSelectedCreator(), + mouseX + designer.getArea().getHorizontalValue() - rectangleContainer.x, + mouseY + designer.getArea().getVerticalValue() - rectangleContainer.y); + } + for (XCreator creator : selectionModel.getSelection().getSelectedCreators()) { + adapter.addBean(creator, + mouseX + designer.getArea().getHorizontalValue() - rectangleContainer.x, + mouseY + designer.getArea().getVerticalValue() - rectangleContainer.y); + } + return true; + } + + /** + * @param mouseReleasedX 鼠标释放位置X + * @param mouseReleasedY 鼠标释放位置Y + */ + private void adding(int mouseReleasedX, int mouseReleasedY) { + // 当前鼠标所在的组件 + XCreator hoveredComponent = designer.getComponentAt(mouseReleasedX, mouseReleasedY, selectionModel.getSelection().getSelectedCreators()); + + // 获取该组件所在的焦点容器 + XLayoutContainer container = XCreatorUtils.getHotspotContainer(hoveredComponent); + + boolean success = false; + + if (container != null) { + // 如果是容器,则调用其acceptComponent接受组件 + success = addBean(container, mouseReleasedX, mouseReleasedY); + } + + if (success) { + FormSelectionUtils.rebuildSelection(designer); + designer.getEditListenerTable().fireCreatorModified( + selectionModel.getSelection().getSelectedCreator(), DesignerEvent.CREATOR_ADDED); + } else { + selectionModel.getSelection().setSelectionBounds(selectedPositionBackup, designer); + Toolkit.getDefaultToolkit().beep(); + } + // 取消提示 + designer.setPainter(null); + } + + /** + * 是否拖拽 + * + * @return dragging状态 + */ + public boolean isDragging() { + return dragging; + } + + /** + * 是否可以开始画线 + * + * @return startPoint不为空返回true + */ + public boolean prepareForDrawLining() { + return startPoint != null; + } + + /** + * 设置开始位置 + * + * @param p point位置 + */ + public void setStartPoint(Point p) { + this.startPoint = p; + } + + /** + * 返回开始位置 + * + * @return 点位置 + */ + public Point getStartPoint() { + return startPoint; + } + + /** + * 返回当前点位置 + * + * @return 点位置 + */ + public Point getEndPoint() { + return currentPoint; + } + + /** + * 当前选中组件 + * + * @param e 鼠标事件 + */ + public void startSelecting(MouseEvent e) { + selecting = true; + selectionModel.setHotspotBounds(new Rectangle()); + currentX = getMouseXY(e).x; + currentY = getMouseXY(e).y; + } + + /** + * 当前鼠标的xy + * + * @param e 鼠标事件 + */ + public void startResizing(MouseEvent e) { + if (!selectionModel.getSelection().isEmpty()) { + driection.backupBounds(designer); + } + currentX = getMouseXY(e).x; + currentY = getMouseXY(e).y; + } + + /** + * 起始点开始DrawLine + * + * @param p 点位置 + */ + public void startDrawLine(Point p) { + this.startPoint = p; + if (p != null) { + try { + designer.setCursor(XConnector.connectorCursor); + } catch (Exception e) { + } + } else { + designer.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + } + } + + /** + * 鼠标释放时所在的区域及圈中的组件 + * + * @param e 鼠标事件 + */ + public void selectCreators(MouseEvent e) { + int x = getMouseXY(e).x; + int y = getMouseXY(e).y; + + Rectangle bounds = createCurrentBounds(x, y); + + if ((x != currentX) || (y != currentY)) { + selectionModel.setSelectedCreators(getHotspotCreators(bounds, designer.getRootComponent())); + } + selectionModel.setHotspotBounds(null); + } + + /** + * 画所在区域线 + * + * @param e 鼠标事件 + */ + public void drawLine(MouseEvent e) { + designer.getDrawLineHelper().setDrawLine(true); + Point p = designer.getDrawLineHelper().getNearWidgetPoint(e); + if (p != null) { + currentPoint = p; + } else { + currentPoint.x = e.getX() + designer.getArea().getHorizontalValue(); + currentPoint.y = e.getY() + designer.getArea().getVerticalValue(); + } + } + + private Rectangle createCurrentBounds(int x, int y) { + Rectangle bounds = new Rectangle(); + + bounds.x = Math.min(x, currentX); + bounds.y = Math.min(y, currentY); + bounds.width = Math.max(x, currentX) - bounds.x; + bounds.height = Math.max(y, currentY) - bounds.y; + + return bounds; + } + + private ArrayList getHotspotCreators(Rectangle selection, XCreator root) { + ArrayList creators = new ArrayList<>(); + + if (!root.isVisible() && !designer.isRoot(root)) { + return creators; + } + + if (root instanceof XLayoutContainer) { + XLayoutContainer container = (XLayoutContainer) root; + int count = container.getXCreatorCount(); + Rectangle clipped = new Rectangle(selection); + + for (int i = count - 1; i >= 0; i--) { + XCreator child = container.getXCreator(i); + + if (selection.contains(child.getBounds())) { + creators.add(child); + } else { + clipped.x = selection.x - child.getX(); + clipped.y = selection.y - child.getY(); + creators.addAll(getHotspotCreators(clipped, child)); + } + } + } + + return creators; + } + + + /** + * 重置model + */ + public void resetModel() { + dragging = false; + selecting = false; + } + + /** + * 重置 + */ + public void reset() { + driection = Location.outer; + dragging = false; + selecting = false; + } + + /** + * 取消拖拽 + */ + public void draggingCancel() { + designer.repaint(); + reset(); + } + + /** + * 设置可拉伸方向 + * + * @param dir 拉伸方向 + */ + public void setDirection(Direction dir) { + if (driection != dir) { + this.driection = dir; + driection.updateCursor(designer); + } + } + + /** + * x吸附线赋值 + * + * @param line 线 + */ + public void setXAbsorptionline(Absorptionline line) { + this.lineInX = line; + } + + /** + * y吸附线赋值 + * + * @param line 线 + */ + public void setYAbsorptionline(Absorptionline line) { + this.lineInY = line; + } + + /** + * 等距线赋值 + * + * @param line 线 + */ + public void setEquidistantLine(Absorptionline line) { + this.lineEquidistant = line; + } + + /** + * 画吸附线 + * + * @param g Graphics类 + */ + public void paintAbsorptionline(Graphics g) { + if (lineInX != null) { + lineInX.paint(g, designer.getArea()); + } + if (lineInY != null) { + lineInY.paint(g, designer.getArea()); + } + if (lineEquidistant != null) { + lineEquidistant.paint(g, designer.getArea()); + } + } + + /** + * 拖拽 + * + * @param e 鼠标事件 + */ + public void dragging(MouseEvent e) { + //进入dragging状态时备份组件大小和位置 + if (!dragging) { + selectedPositionBackup = selectionModel.getSelection().getRelativeBounds(); + } + checkAddable(e); + setDependLinePainter(e); + driection.drag(getMouseXY(e).x - currentX, getMouseXY(e).y - currentY, designer); + this.dragging = true; + } + + // 拖拽时画依附线用到的painter + private void setDependLinePainter(MouseEvent e) { + XCreator comp = designer.getComponentAt(e.getX(), e.getY(), selectionModel.getSelection().getSelectedCreators()); + XLayoutContainer container = XCreatorUtils.getHotspotContainer(comp); + XCreator creator = selectionModel.getSelection().getSelectedCreator(); + HoverPainter painter = AdapterBus.getContainerPainter(designer, container); + designer.setPainter(painter); + if (painter != null) { + painter.setHotspot(new Point(e.getX(), e.getY())); + painter.setCreator(creator); + } + } + + /** + * 释放捕获 + * + * @param e 鼠标事件 + */ + public void releaseDragging(MouseEvent e) { + this.dragging = false; + if (addable) { + adding(e.getX(), e.getY()); + } else if (!selectionModel.getSelection().isEmpty()) { + selectionModel.releaseDragging(); + } + designer.repaint(); + } + + /** + * 改变选择区域 + * + * @param e 鼠标事件 + */ + public void changeSelection(MouseEvent e) { + Rectangle bounds = createCurrentBounds(getMouseXY(e).x, getMouseXY(e).y); + selectionModel.setHotspotBounds(bounds); + } + + /** + * 返回鼠标所在的x、y 考虑滚动条的值 + * + * @param e 鼠标事件 + * @return xy值 + */ + public Point getMouseXY(MouseEvent e) { + Point p1 = new Point(e.getX() + designer.getArea().getHorizontalValue(), e.getY() + + designer.getArea().getVerticalValue()); + return p1; + } + } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/creator/XLayoutContainer.java b/designer_form/src/com/fr/design/designer/creator/XLayoutContainer.java index 254e9a918..edd1c69f0 100644 --- a/designer_form/src/com/fr/design/designer/creator/XLayoutContainer.java +++ b/designer_form/src/com/fr/design/designer/creator/XLayoutContainer.java @@ -30,12 +30,12 @@ import java.util.List; * @since 6.5.3 */ public abstract class XLayoutContainer extends XBorderStyleWidgetCreator implements ContainerListener, ParameterBridge { - - // 布局内部组件默认最小宽度36,最小高度21 - public static int MIN_WIDTH = 36; - public static int MIN_HEIGHT = 21; - - protected static final Dimension LARGEPREFERREDSIZE = new Dimension(200, 200); + + // 布局内部组件默认最小宽度36,最小高度21 + public static int MIN_WIDTH = 36; + public static int MIN_HEIGHT = 21; + + protected static final Dimension LARGEPREFERREDSIZE = new Dimension(200, 200); protected boolean isRefreshing; protected int default_Length = 5; // 取指定点坐在的组件,默认为5保证取四侧相邻的组件时x、y在组件内非边框上 @@ -45,6 +45,7 @@ public abstract class XLayoutContainer extends XBorderStyleWidgetCreator impleme protected boolean editable = false; //鼠标移动到布局画出编辑层 protected boolean isMouseEnter = false; + public void setMouseEnter(boolean mouseEnter) { isMouseEnter = mouseEnter; } @@ -55,12 +56,13 @@ public abstract class XLayoutContainer extends XBorderStyleWidgetCreator impleme } /** - * 得到属性名 + * 得到属性名 + * * @return 属性名 * @throws IntrospectionException */ - public CRPropertyDescriptor[] supportedDescriptor() throws IntrospectionException { - return new CRPropertyDescriptor[] { + public CRPropertyDescriptor[] supportedDescriptor() throws IntrospectionException { + return new CRPropertyDescriptor[]{ new CRPropertyDescriptor("widgetName", this.data.getClass()).setI18NName(Inter .getLocText("FR-Designer_Form-Widget_Name")), new CRPropertyDescriptor("borderStyle", this.data.getClass()).setEditorClass( @@ -68,19 +70,20 @@ public abstract class XLayoutContainer extends XBorderStyleWidgetCreator impleme Inter.getLocText("FR-Engine_Style")).putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced") .setPropertyChangeListener(new PropertyChangeAdapter() { - @Override - public void propertyChange() { - initStyle(); - } - }), + @Override + public void propertyChange() { + initStyle(); + } + }), new CRPropertyDescriptor("margin", this.data.getClass()).setEditorClass(PaddingMarginEditor.class) .setI18NName(Inter.getLocText("FR-Designer_Layout-Padding")) .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced"), - }; - } + }; + } /** * 控件名属性 + * * @return * @throws IntrospectionException */ @@ -91,6 +94,7 @@ public abstract class XLayoutContainer extends XBorderStyleWidgetCreator impleme /** * 边距属性 + * * @return * @throws IntrospectionException */ @@ -101,47 +105,50 @@ public abstract class XLayoutContainer extends XBorderStyleWidgetCreator impleme } /** - * 返回对应的wlayout + * 返回对应的wlayout + * * @return wlayout控件 */ public WLayout toData() { return (WLayout) data; } - @Override - protected void initXCreatorProperties() { - super.initXCreatorProperties(); - initBorderStyle(); - this.initLayoutManager(); - this.convert(); - } + @Override + protected void initXCreatorProperties() { + super.initXCreatorProperties(); + initBorderStyle(); + this.initLayoutManager(); + this.convert(); + } @Override - protected JComponent initEditor() { - return this; - } - - /** - * 当前组件zorder位置替换新的控件 - * @param widget 控件 - * @param oldcreator 旧组件 - * @return 组件 - */ - public XCreator replace(Widget widget, XCreator oldcreator) { - int i = this.getComponentZOrder(oldcreator); - if (i != -1) { - this.toData().replace(widget, oldcreator.toData()); - this.convert(); - XCreator creator = (XCreator) this.getComponent(i); - creator.setSize(oldcreator.getSize()); - return creator; - } - return null; - } - - /** - * 初始化时默认的组件大小 - * @return 默认Dimension + protected JComponent initEditor() { + return this; + } + + /** + * 当前组件zorder位置替换新的控件 + * + * @param widget 控件 + * @param oldcreator 旧组件 + * @return 组件 + */ + public XCreator replace(Widget widget, XCreator oldcreator) { + int i = this.getComponentZOrder(oldcreator); + if (i != -1) { + this.toData().replace(widget, oldcreator.toData()); + this.convert(); + XCreator creator = (XCreator) this.getComponent(i); + creator.setSize(oldcreator.getSize()); + return creator; + } + return null; + } + + /** + * 初始化时默认的组件大小 + * + * @return 默认Dimension */ public Dimension initEditorSize() { return LARGEPREFERREDSIZE; @@ -172,7 +179,8 @@ public abstract class XLayoutContainer extends XBorderStyleWidgetCreator impleme /** * 设计界面中有组件添加时,要通知WLayout容器重新paint - * @param e 待说明 + * + * @param e 待说明 */ @Override public void componentAdded(ContainerEvent e) { @@ -188,7 +196,8 @@ public abstract class XLayoutContainer extends XBorderStyleWidgetCreator impleme /** * 设计界面中有组件添加时,要通知WLayout容器重新paint - * @param e 待说明 + * + * @param e 待说明 */ @Override public void componentRemoved(ContainerEvent e) { @@ -203,6 +212,7 @@ public abstract class XLayoutContainer extends XBorderStyleWidgetCreator impleme /** * 根据widget的属性值来获取 + * * @param wgt * @return */ @@ -226,30 +236,32 @@ public abstract class XLayoutContainer extends XBorderStyleWidgetCreator impleme public int getXCreatorCount() { return getComponentCount(); } - + public XCreator getXCreator(int i) { return (XCreator) getComponent(i); } /** * 该组件是否可以拖入参数面板 + * * @return 是则返回true */ - public boolean canEnterIntoParaPane(){ + public boolean canEnterIntoParaPane() { return false; } - + /** - * 是否作为控件树的叶子节点 - * @return 是则返回true - */ - public boolean isComponentTreeLeaf() { - return false; - } + * 是否作为控件树的叶子节点 + * + * @return 是则返回true + */ + public boolean isComponentTreeLeaf() { + return false; + } - public List getAllXCreatorNameList(XCreator xCreator, List namelist){ - for (int i = 0; i < ((XLayoutContainer)xCreator).getXCreatorCount(); i++) { - XCreator creatorSon = ((XLayoutContainer)xCreator).getXCreator(i); + public List getAllXCreatorNameList(XCreator xCreator, List namelist) { + for (int i = 0; i < ((XLayoutContainer) xCreator).getXCreatorCount(); i++) { + XCreator creatorSon = ((XLayoutContainer) xCreator).getXCreator(i); creatorSon.getAllXCreatorNameList(creatorSon, namelist); } return namelist; @@ -257,19 +269,20 @@ public abstract class XLayoutContainer extends XBorderStyleWidgetCreator impleme /** * 是否有查询按钮 - * @param xCreator 控件或容器 - * @return 有无查询按钮 + * + * @param xCreator 控件或容器 + * @return 有无查询按钮 */ public boolean SearchQueryCreators(XCreator xCreator) { - for (int i = 0; i < ((XLayoutContainer)xCreator).getXCreatorCount(); i++) { - XCreator creatorSon = ((XLayoutContainer)xCreator).getXCreator(i); - if(creatorSon.SearchQueryCreators(creatorSon)){ + for (int i = 0; i < ((XLayoutContainer) xCreator).getXCreatorCount(); i++) { + XCreator creatorSon = ((XLayoutContainer) xCreator).getXCreator(i); + if (creatorSon.SearchQueryCreators(creatorSon)) { return true; } } return false; } - + public FRLayoutManager getFRLayout() { LayoutManager layout = getLayout(); if (layout instanceof FRLayoutManager) { @@ -279,111 +292,120 @@ public abstract class XLayoutContainer extends XBorderStyleWidgetCreator impleme return null; } - public abstract LayoutAdapter getLayoutAdapter(); - - public int getIndexOfChild(Object child) { - int count = getComponentCount(); - for (int i = 0; i < count; i++) { - Component comp = getComponent(i); - if (comp == child) { - return i; - } - } - return -1; - } - - /** - * 主要为自适应用 - * 返回指定point的上方组件 - * @param x x位置 - * @param y y位置 - * @return 指定位置的组件 - */ - public Component getTopComp(int x, int y) { - return this.getComponentAt(x, y-default_Length); - } - - /** - * 主要为自适应用 - * 返回指定point的左方组件 - * @param x x位置 - * @param y y位置 - * @return 指定位置的组件 - */ - public Component getLeftComp(int x, int y) { - return this.getComponentAt(x-default_Length, y); - } - - /** - * 返回指定point的右方组件 - * @param x x位置 - * @param y y位置 - * @param w 宽度 - * @return 指定位置的组件 - */ - public Component getRightComp(int x, int y, int w) { - return this.getComponentAt(x+w+default_Length, y); - } - - /** - * 返回指定point的下方组件 - * @param x x位置 - * @param y y位置 - * @param h 高度 - * @return 指定位置的组件 - */ - public Component getBottomComp(int x, int y, int h) { - return this.getComponentAt(x, y+h+default_Length); - } - - /** - * 返回指定point的上方且是右侧的组件 - * @param x x位置 - * @param y y位置 - * @param w 宽度 - * @return 指定位置的组件 - */ - public Component getRightTopComp(int x, int y, int w) { - return this.getComponentAt(x+w-default_Length, y-default_Length); - } - - /** - * 返回指定point的左方且是下侧的组件 - * @param x x位置 - * @param y y位置 - * @param h 高度 - * @return 指定位置的组件 - */ - public Component getBottomLeftComp(int x, int y, int h) { - return this.getComponentAt(x-default_Length, y+h-default_Length); - } - - /** - * 返回指定point的右方且是下侧的组件 - * @param x x位置 - * @param y y位置 - * @param h 高度 - * @param w 宽度 - * @return 指定位置的组件 - */ - public Component getBottomRightComp(int x, int y, int h, int w) { - return this.getComponentAt(x+w+default_Length, y+h-default_Length); - } - - /** - * 返回指定point的下方且是右侧的组件 - * @param x x位置 - * @param y y位置 - * @param h 高度 - * @param w 宽度 - * @return 指定位置的组件 - */ - public Component getRightBottomComp(int x, int y, int h, int w) { - return this.getComponentAt(x+w-default_Length, y+h+default_Length); - } + public abstract LayoutAdapter getLayoutAdapter(); + + public int getIndexOfChild(Object child) { + int count = getComponentCount(); + for (int i = 0; i < count; i++) { + Component comp = getComponent(i); + if (comp == child) { + return i; + } + } + return -1; + } + + /** + * 主要为自适应用 + * 返回指定point的上方组件 + * + * @param x x位置 + * @param y y位置 + * @return 指定位置的组件 + */ + public Component getTopComp(int x, int y) { + return this.getComponentAt(x, y - default_Length); + } + + /** + * 主要为自适应用 + * 返回指定point的左方组件 + * + * @param x x位置 + * @param y y位置 + * @return 指定位置的组件 + */ + public Component getLeftComp(int x, int y) { + return this.getComponentAt(x - default_Length, y); + } + + /** + * 返回指定point的右方组件 + * + * @param x x位置 + * @param y y位置 + * @param w 宽度 + * @return 指定位置的组件 + */ + public Component getRightComp(int x, int y, int w) { + return this.getComponentAt(x + w + default_Length, y); + } + + /** + * 返回指定point的下方组件 + * + * @param x x位置 + * @param y y位置 + * @param h 高度 + * @return 指定位置的组件 + */ + public Component getBottomComp(int x, int y, int h) { + return this.getComponentAt(x, y + h + default_Length); + } + + /** + * 返回指定point的上方且是右侧的组件 + * + * @param x x位置 + * @param y y位置 + * @param w 宽度 + * @return 指定位置的组件 + */ + public Component getRightTopComp(int x, int y, int w) { + return this.getComponentAt(x + w - default_Length, y - default_Length); + } + + /** + * 返回指定point的左方且是下侧的组件 + * + * @param x x位置 + * @param y y位置 + * @param h 高度 + * @return 指定位置的组件 + */ + public Component getBottomLeftComp(int x, int y, int h) { + return this.getComponentAt(x - default_Length, y + h - default_Length); + } + + /** + * 返回指定point的右方且是下侧的组件 + * + * @param x x位置 + * @param y y位置 + * @param h 高度 + * @param w 宽度 + * @return 指定位置的组件 + */ + public Component getBottomRightComp(int x, int y, int h, int w) { + return this.getComponentAt(x + w + default_Length, y + h - default_Length); + } + + /** + * 返回指定point的下方且是右侧的组件 + * + * @param x x位置 + * @param y y位置 + * @param h 高度 + * @param w 宽度 + * @return 指定位置的组件 + */ + public Component getRightBottomComp(int x, int y, int h, int w) { + return this.getComponentAt(x + w - default_Length, y + h + default_Length); + } /** * 是否延迟展示报表内容,也就是说是否要等点击了查询之后才执行报表 + * * @return 如果是true,则表示点击之后才开始计算,false则表示会根据参数默认值直接计算报表并展现 */ public boolean isDelayDisplayContent() { @@ -392,18 +414,20 @@ public abstract class XLayoutContainer extends XBorderStyleWidgetCreator impleme /** * 是否显示参数界面 + * * @return 显示参数界面则返回true,否则返回false */ public boolean isDisplay() { return false; } - public Background getDataBackground(){ + public Background getDataBackground() { return toData().getBackground(); } /** * 获取参数界面的宽度 + * * @return 宽度 */ public int getDesignWidth() { @@ -412,83 +436,82 @@ public abstract class XLayoutContainer extends XBorderStyleWidgetCreator impleme /** * 获取参数面板的对齐方式 + * * @return 左中右三种对齐方式 */ public int getPosition() { return 0; } - + /** * 切换到非添加状态 - * + * * @param designer 表单设计器 */ - public void stopAddingState(FormDesigner designer){ - return; - } - - /** - * 寻找最近的为自适应布局的父容器 - * - * @return 布局容器 - * - * - * @date 2014-12-30-下午3:15:28 - * - */ - public XLayoutContainer findNearestFit(){ - //一层一层网上找, 找到最近的fit那一层就return - XLayoutContainer parent = this.getBackupParent(); - return parent == null ? null : parent.findNearestFit(); - } - + public void stopAddingState(FormDesigner designer) { + } + + /** + * 寻找最近的为自适应布局的父容器 + * + * @return 布局容器 + * @date 2014-12-30-下午3:15:28 + */ + public XLayoutContainer findNearestFit() { + //一层一层网上找, 找到最近的fit那一层就return + XLayoutContainer parent = this.getBackupParent(); + return parent == null ? null : parent.findNearestFit(); + } + /** * 获取容器所有内部组件横坐标值 - * + * * @return 横坐标数组 */ - public int[] getHors(){ - return ArrayUtils.EMPTY_INT_ARRAY; + public int[] getHors() { + return ArrayUtils.EMPTY_INT_ARRAY; } - + /** * 获取容器所有内部组件纵坐标值 - * + * * @return 纵坐标数组 */ - public int[] getVeris(){ - return ArrayUtils.EMPTY_INT_ARRAY; + public int[] getVeris() { + return ArrayUtils.EMPTY_INT_ARRAY; } - public void setDelayDisplayContent(boolean delayPlaying){ + public void setDelayDisplayContent(boolean delayPlaying) { } - public void setPosition(int align){ + public void setPosition(int align) { } - public void setDisplay(boolean showWindow){ + public void setDisplay(boolean showWindow) { } - public void setBackground(Background background){ + public void setBackground(Background background) { } /** * 布局是否可编辑,不可则显示编辑蒙层 + * * @return 可否编辑 */ - public boolean isEditable(){ + public boolean isEditable() { return this.editable; } /** * 设置布局是否可编辑,不可则显示编辑蒙层 + * * @param isEditable 可否编辑 */ - public void setEditable(boolean isEditable){ + public void setEditable(boolean isEditable) { this.editable = isEditable; } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardTagLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardTagLayout.java index 947ec5eab..114ce3240 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardTagLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardTagLayout.java @@ -1,5 +1,5 @@ /** - * + * */ package com.fr.design.designer.creator.cardlayout; @@ -25,114 +25,109 @@ import com.fr.form.ui.container.cardlayout.WCardTagLayout; import com.fr.form.ui.container.cardlayout.WTabFitLayout; /** - * - * * @date: 2014-11-25-下午3:11:14 */ public class XWCardTagLayout extends XWHorizontalBoxLayout { - - private static final int MIN_SIZE = 1; - - private String tagName = "Tab"; - - private boolean switchingTab = false; - - //增加一个tabNameIndex防止tabFitLayout重名 - private int tabFitIndex = 0; - private CardSwitchButton currentCard; - - public CardSwitchButton getCurrentCard() { - return currentCard; - } - - public void setCurrentCard(CardSwitchButton currentCard) { - this.currentCard = currentCard; - } - - public int getTabFitIndex() { - return tabFitIndex; - } - - public void setTabFitIndex(int tabFitIndex) { - this.tabFitIndex = tabFitIndex; - } - - public String getTagName() { - return tagName; - } - - public void setTagName(String tagName) { - this.tagName = tagName; - } - - public boolean isSwitchingTab() { - return switchingTab; - } - - public void setSwitchingTab(boolean switchingTab) { - this.switchingTab = switchingTab; - } - - private XWCardLayout cardLayout; - - public XWCardTagLayout(WCardTagLayout widget, Dimension initSize){ - super(widget, initSize); - } - - /** - * 构造函数 - */ - public XWCardTagLayout(WCardTagLayout widget, Dimension initSize, XWCardLayout cardLayout) { - super(widget, initSize); - - this.cardLayout = cardLayout; - } - - /** - * 添加组件的监听事件 - * - * @param e 事件 - * - * - * @date 2014-11-25-下午6:20:10 - * - */ - public void componentAdded(ContainerEvent e) { - super.componentAdded(e); - - if (isSwitchingTab()){ - return; - } - - if(this.cardLayout == null){ - initCardLayout(); - } - - int index = this.cardLayout.toData().getWidgetCount(); - //新加一个card - String widgetName = tagName+getTabNameIndex(); - WTabFitLayout fitLayout = new WTabFitLayout(widgetName,tabFitIndex,currentCard); - fitLayout.setTabNameIndex(getTabNameIndex()); - XWTabFitLayout tabFitLayout = new XWTabFitLayout(fitLayout, new Dimension()); - tabFitLayout.setBackupParent(cardLayout); - cardLayout.add(tabFitLayout, widgetName); - this.cardLayout.toData().setShowIndex(index); - cardLayout.showCard(); - } - - private void initCardLayout(){ - XWCardTitleLayout titleLayout = (XWCardTitleLayout)this.getBackupParent(); - XWCardMainBorderLayout borderLayout = (XWCardMainBorderLayout)titleLayout.getBackupParent(); - - this.cardLayout = borderLayout.getCardPart(); - } - + + private static final int MIN_SIZE = 1; + + private String tagName = "Tab"; + + private boolean switchingTab = false; + + //增加一个tabNameIndex防止tabFitLayout重名 + private int tabFitIndex = 0; + private CardSwitchButton currentCard; + + public CardSwitchButton getCurrentCard() { + return currentCard; + } + + public void setCurrentCard(CardSwitchButton currentCard) { + this.currentCard = currentCard; + } + + public int getTabFitIndex() { + return tabFitIndex; + } + + public void setTabFitIndex(int tabFitIndex) { + this.tabFitIndex = tabFitIndex; + } + + public String getTagName() { + return tagName; + } + + public void setTagName(String tagName) { + this.tagName = tagName; + } + + public boolean isSwitchingTab() { + return switchingTab; + } + + public void setSwitchingTab(boolean switchingTab) { + this.switchingTab = switchingTab; + } + + private XWCardLayout cardLayout; + + public XWCardTagLayout(WCardTagLayout widget, Dimension initSize) { + super(widget, initSize); + } + + /** + * 构造函数 + */ + public XWCardTagLayout(WCardTagLayout widget, Dimension initSize, XWCardLayout cardLayout) { + super(widget, initSize); + + this.cardLayout = cardLayout; + } + + /** + * 添加组件的监听事件 + * + * @param e 事件 + * @date 2014-11-25-下午6:20:10 + */ + public void componentAdded(ContainerEvent e) { + super.componentAdded(e); + + if (isSwitchingTab()) { + return; + } + + if (this.cardLayout == null) { + initCardLayout(); + } + + int index = this.cardLayout.toData().getWidgetCount(); + //新加一个card + String widgetName = tagName + getTabNameIndex(); + WTabFitLayout fitLayout = new WTabFitLayout(widgetName, tabFitIndex, currentCard); + fitLayout.setTabNameIndex(getTabNameIndex()); + XWTabFitLayout tabFitLayout = new XWTabFitLayout(fitLayout, new Dimension()); + tabFitLayout.setBackupParent(cardLayout); + cardLayout.add(tabFitLayout, widgetName); + this.cardLayout.toData().setShowIndex(index); + cardLayout.showCard(); + } + + private void initCardLayout() { + XWCardTitleLayout titleLayout = (XWCardTitleLayout) this.getBackupParent(); + XWCardMainBorderLayout borderLayout = (XWCardMainBorderLayout) titleLayout.getBackupParent(); + + this.cardLayout = borderLayout.getCardPart(); + } + /** * 将WLayout转换为XLayoutContainer */ public void convert() { isRefreshing = true; - WCardTagLayout layout = (WCardTagLayout)this.toData(); + WCardTagLayout layout = (WCardTagLayout) this.toData(); this.removeAll(); for (int i = 0; i < layout.getWidgetCount(); i++) { Widget wgt = layout.getWidget(i); @@ -144,82 +139,81 @@ public class XWCardTagLayout extends XWHorizontalBoxLayout { } isRefreshing = false; } - + /** * 切换到非添加状态 - * + * * @return designer 表单设计器 */ - public void stopAddingState(FormDesigner designer){ - designer.stopAddingState(); - return; + public void stopAddingState(FormDesigner designer) { + designer.stopAddingState(); } - + //新增时去tabFitLayout名字中最大的Index+1,防止重名 - private int getTabNameIndex(){ - int tabNameIndex = 0; - WCardLayout layout = this.cardLayout.toData(); - int size = layout.getWidgetCount(); - if(size < MIN_SIZE){ - return tabNameIndex; - } - for(int i=0;i + * void + */ + public void adjustComponentWidth() { + } + + + /** + * 该布局需要隐藏,无需对边框进行操作 + * + * @param + */ public void setBorder(Border border) { - return; - } - - @Override - /** - * 该布局隐藏,点击该布局时选中相应的tab布局主体 - * @param editingMouseListener 监听 - * @param e 鼠标点击事件 - * - */ - public void respondClick(EditingMouseListener editingMouseListener, - MouseEvent e) { - FormDesigner designer = editingMouseListener.getDesigner(); - SelectionModel selectionModel = editingMouseListener.getSelectionModel(); - - XWCardTitleLayout titleLayout = (XWCardTitleLayout) this.getBackupParent(); - if(titleLayout != null){ - XWCardMainBorderLayout mainLayout = (XWCardMainBorderLayout)titleLayout.getBackupParent(); - if(mainLayout != null){ - XWCardLayout cardLayout = mainLayout.getCardPart(); - selectionModel.setSelectedCreator(cardLayout); - } - } - - if (editingMouseListener.stopEditing()) { - if (this != designer.getRootComponent()) { - ComponentAdapter adapter = AdapterBus.getComponentAdapter(designer, this); - editingMouseListener.startEditing(this, adapter.getDesignerEditor(), adapter); - } - } - } - - @Override - public XLayoutContainer getTopLayout() { - return this.getBackupParent().getTopLayout(); - } + + } + + @Override + /** + * 该布局隐藏,点击该布局时选中相应的tab布局主体 + * @param editingMouseListener 监听 + * @param e 鼠标点击事件 + * + */ + public void respondClick(EditingMouseListener editingMouseListener, + MouseEvent e) { + FormDesigner designer = editingMouseListener.getDesigner(); + SelectionModel selectionModel = editingMouseListener.getSelectionModel(); + + XWCardTitleLayout titleLayout = (XWCardTitleLayout) this.getBackupParent(); + if (titleLayout != null) { + XWCardMainBorderLayout mainLayout = (XWCardMainBorderLayout) titleLayout.getBackupParent(); + if (mainLayout != null) { + XWCardLayout cardLayout = mainLayout.getCardPart(); + selectionModel.setSelectedCreator(cardLayout); + } + } + + if (editingMouseListener.stopEditing()) { + if (this != designer.getRootComponent()) { + ComponentAdapter adapter = AdapterBus.getComponentAdapter(designer, this); + editingMouseListener.startEditing(this, adapter.getDesignerEditor(), adapter); + } + } + } + + @Override + public XLayoutContainer getTopLayout() { + return this.getBackupParent().getTopLayout(); + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/mainframe/FormCreatorDropTarget.java b/designer_form/src/com/fr/design/mainframe/FormCreatorDropTarget.java index 6390b64f8..486ad2694 100644 --- a/designer_form/src/com/fr/design/mainframe/FormCreatorDropTarget.java +++ b/designer_form/src/com/fr/design/mainframe/FormCreatorDropTarget.java @@ -43,7 +43,7 @@ public class FormCreatorDropTarget extends DropTarget { * 当前添加模式对应的model */ private AddingModel addingModel; - private final static int GAP = 30; + private static final int GAP = 30; private JWindow promptWindow = new JWindow(); private UIButton promptButton = new UIButton("", BaseUtils.readIcon(IconPathConstants.FORBID_ICON_PATH)); @@ -59,10 +59,11 @@ public class FormCreatorDropTarget extends DropTarget { XCreator hoveredComponent = designer.getComponentAt(x, y); // 获取该组件所在的焦点容器 XLayoutContainer container = XCreatorUtils.getHotspotContainer(hoveredComponent); - //cardTagLayout里用到 - container.stopAddingState(designer); boolean success = false; if (container != null) { + //XWCardTagLayout 切换添加状态到普通状态 + container.stopAddingState(designer); + // 如果是容器,则调用其acceptComponent接受组件 AddingModel model = designer.getAddingModel(); @@ -129,9 +130,7 @@ public class FormCreatorDropTarget extends DropTarget { //提示组件是否可以拖入 promptUser(x, y, container); if (container != null) { - dealWithContainer(x, y, container); - } else { // 如果鼠标不在任何组件上,则取消提示器 designer.setPainter(null); @@ -197,11 +196,9 @@ public class FormCreatorDropTarget extends DropTarget { private void promptWidgetForbidEnter(int x, int y, XLayoutContainer container) { container.setBorder(BorderFactory.createLineBorder(Color.RED, Constants.LINE_MEDIUM)); - int screen_X = (int) designer.getArea().getLocationOnScreen().getX(); - int screen_Y = (int) designer.getArea().getLocationOnScreen().getY(); - this.promptWindow.setSize(promptWindow.getPreferredSize()); - this.promptWindow.setPreferredSize(promptWindow.getPreferredSize()); - promptWindow.setLocation(screen_X + x + GAP, screen_Y + y + GAP); + int screenX = designer.getArea().getLocationOnScreen().x; + int screenY = designer.getArea().getLocationOnScreen().y; + promptWindow.setLocation(screenX + x + GAP, screenY + y + GAP); promptWindow.setVisible(true); } diff --git a/designer_form/src/com/fr/design/mainframe/FormDesigner.java b/designer_form/src/com/fr/design/mainframe/FormDesigner.java index 1dd61c559..0c7705993 100644 --- a/designer_form/src/com/fr/design/mainframe/FormDesigner.java +++ b/designer_form/src/com/fr/design/mainframe/FormDesigner.java @@ -612,6 +612,12 @@ public class FormDesigner extends TargetComponent implements TreeSelection return true; } + public void showMessageDialog(String message) { + JOptionPane.showMessageDialog(this, message, Inter.getLocText("FR-Designer_Alert"), JOptionPane.WARNING_MESSAGE); + FormSelectionUtils.rebuildSelection(this); + repaint(); + } + /** * 保存参数界面的宽度 * diff --git a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java index ff976ef77..334c2fc37 100644 --- a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java +++ b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java @@ -17,11 +17,7 @@ import java.util.List; public class FormSelectionUtils { //组件复制时坐标偏移 - private static final int DELAY_X = 20; - private static final int DELAY_Y = 20; - - //组件复制时是否已经向左上偏移 - private static boolean backoffset = false; + private static final int DELAY_X_Y = 20; //组件重命名后缀 private static final String POSTFIX = "_c"; @@ -31,11 +27,7 @@ public class FormSelectionUtils { } /** - * @param designer 编辑器 - * @param parent 粘贴依据的组件 - * @param clipboard 剪贴板内容 - * @param x x - * @param y y + * 粘贴到容器 */ public static void paste2Container(FormDesigner designer, XLayoutContainer parent, FormSelection clipboard, int x, int y) { @@ -54,12 +46,6 @@ public class FormSelectionUtils { /** * 绝对布局粘贴 - * - * @param designer - * @param clipboard - * @param adapter - * @param x - * @param y */ private static void absolutePaste(FormDesigner designer, FormSelection clipboard, LayoutAdapter adapter, int x, int y) { @@ -74,6 +60,10 @@ public class FormSelectionUtils { copiedCreator, x + creator.getX() - rec.x + copiedCreator.getWidth() / 2, y + creator.getY() - rec.y + copiedCreator.getHeight() / 2); + if (!adapter.accept(copiedCreator, point.x, point.y)) { + designer.showMessageDialog("Too large to paste into container"); + return; + } boolean addSuccess = adapter.addBean(copiedCreator, point.x, point.y); if (addSuccess) { designer.getSelectionModel().getSelection().addSelectedCreator(copiedCreator); @@ -90,12 +80,6 @@ public class FormSelectionUtils { /** * 相对布局粘贴 - * - * @param designer - * @param clipboard - * @param adapter - * @param x - * @param y */ private static void relativePaste(FormDesigner designer, FormSelection clipboard, LayoutAdapter adapter, int x, int y) { designer.getSelectionModel().getSelection().reset(); @@ -118,14 +102,6 @@ public class FormSelectionUtils { /** * 组件复用绝对布局获取粘贴组件位置 - * - * @param layoutAdapter 绝对布局容器AbstractLayoutAdapter - * @param copiedCreator 复制的组件 - * @param x x=组件x + clonedCreator.getWidth() / 2 - * @param y y=组件y + clonedCreator.getHeight() / 2 - * 除2的步骤会导致当宽度或者高度为奇数是,中心点向左上各偏移一个像素 - * 由于中心点向左上各偏移一个像素,依赖中心点计算的右下点就会相应的想做上偏移一个像素,导致结果不准确 - * @return 新位置坐标 */ private static Point getPasteLocation(AbstractLayoutAdapter layoutAdapter, XCreator copiedCreator, int x, int y) { //当宽度为奇数时 设置偏移 @@ -144,12 +120,10 @@ public class FormSelectionUtils { * x,y同时越界 */ if (xOut && yOut) { - x = backoffset ? container.getWidth() - copiedCreator.getWidth() / 2 - xoffset - : container.getWidth() - copiedCreator.getWidth() / 2 - DELAY_X - xoffset; - y = backoffset ? - container.getHeight() - copiedCreator.getHeight() / 2 - yoffset - : container.getHeight() - copiedCreator.getHeight() / 2 - DELAY_Y - yoffset; - backoffset = !backoffset; + //向左偏移 + x = container.getWidth() - copiedCreator.getWidth() / 2 - DELAY_X_Y - xoffset; + //紧贴下边界 + y = container.getHeight() - copiedCreator.getHeight() / 2 - yoffset; return new Point(x, y); } /* @@ -158,7 +132,7 @@ public class FormSelectionUtils { * 距离大于20像素的一侧正常错开。 * x,y中只有一个越界 */ - else if ((xOut || yOut)) { + if ((xOut || yOut)) { x = xOut ? container.getWidth() - copiedCreator.getWidth() / 2 - xoffset : x; y = yOut ? container.getHeight() - copiedCreator.getHeight() / 2 - yoffset : y; return new Point(x, y); @@ -170,15 +144,10 @@ public class FormSelectionUtils { /** * 拷贝组件 - * - * @param formDesigner - * @param xCreator - * @return - * @throws CloneNotSupportedException */ private static Widget copyWidget(FormDesigner formDesigner, XCreator xCreator) throws CloneNotSupportedException { - ArrayList nameSpace = new ArrayList(); + ArrayList nameSpace = new ArrayList<>(); Widget copied = (Widget) xCreator.toData().clone(); //重命名拷贝的组件 String name = getCopiedName(formDesigner, copied, nameSpace); @@ -193,14 +162,9 @@ public class FormSelectionUtils { /** * 组件拷贝命名规则 - * - * @param formDesigner - * @param copied - * @param nameSpace - * @return name */ private static String getCopiedName(FormDesigner formDesigner, Widget copied, ArrayList nameSpace) { - StringBuffer name = new StringBuffer(copied.getWidgetName()); + StringBuilder name = new StringBuilder(copied.getWidgetName()); do { name.append(POSTFIX); } while (formDesigner.getTarget().isNameExist(name.toString()) || nameSpace.contains(name.toString())); @@ -209,8 +173,8 @@ public class FormSelectionUtils { } public static void rebuildSelection(FormDesigner designer) { - ArrayList newSelection = new ArrayList(); - List widgetList = new ArrayList(); + ArrayList newSelection = new ArrayList<>(); + List widgetList = new ArrayList<>(); for (XCreator comp : designer.getSelectionModel().getSelection().getSelectedCreators()) { widgetList.add(comp.toData()); } @@ -219,11 +183,11 @@ public class FormSelectionUtils { } public static ArrayList rebuildSelection(XCreator rootComponent, Widget[] selectWidgets) { - List selectionWidget = new ArrayList(); + List selectionWidget = new ArrayList<>(); if (selectWidgets != null) { selectionWidget.addAll(Arrays.asList(selectWidgets)); } - return FormSelectionUtils.rebuildSelection(rootComponent, selectionWidget, new ArrayList()); + return FormSelectionUtils.rebuildSelection(rootComponent, selectionWidget, new ArrayList<>()); } private static ArrayList rebuildSelection(XCreator rootComponent, List selectionWidget, From 552720bc961aae87dbeb6bfdbb0c1586b3eb0ff6 Mon Sep 17 00:00:00 2001 From: mengao <283296419@qq.com> Date: Wed, 5 Apr 2017 09:52:39 +0800 Subject: [PATCH 230/343] =?UTF-8?q?=E8=BF=98=E5=8E=9F=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E9=83=A8=E5=88=86design=E4=BB=A3=E7=A0=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/chart/axis/MinMaxValuePane.java | 26 +++++++++---------- .../chart/gui/style/axis/ChartValuePane.java | 5 ++-- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java index 73235dc31..4bd1aaca7 100644 --- a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java +++ b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java @@ -42,34 +42,34 @@ public class MinMaxValuePane extends JPanel { double p = TableLayout.PREFERRED; double f = TableLayout.FILL; double[] columnSize = { p, f }; - double[] rowSize = { p, p, p, p, p, p, p, p}; + double[] rowSize = { p, p, p, p}; Component[][] components = getPanelComponents(); JPanel panel = TableLayoutHelper.createTableLayoutPane(components ,rowSize,columnSize); this.setLayout(new BorderLayout()); this.add(panel,BorderLayout.CENTER); + addComponentListener(components); + } - for(int i = 0; i < components.length; i+=2) { - ((UICheckBox)components[i][0]).addActionListener(new ActionListener() { + public void addComponentListener(Component[][] components) { + for (int i = 0; i < components.length; i++) { + ((UICheckBox) components[i][0]).addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { checkBoxUse(); } }); - ChartSwingUtils.addListener((UICheckBox)components[i][0], (UITextField)components[i+1][0]); + ChartSwingUtils.addListener((UICheckBox) components[i][0], (UITextField) components[i][1]); } } + protected Component[][] getPanelComponents() { - return new Component[][]{ - new Component[]{minCheckBox}, - new Component[]{minValueField}, - new Component[]{maxCheckBox}, - new Component[]{maxValueField}, - new Component[]{isCustomMainUnitBox}, - new Component[]{mainUnitField}, - new Component[]{isCustomSecUnitBox}, - new Component[]{secUnitField}, + return new Component[][]{ + new Component[]{minCheckBox, minValueField}, + new Component[]{maxCheckBox, maxValueField}, + new Component[]{isCustomMainUnitBox, mainUnitField}, + new Component[]{isCustomSecUnitBox, secUnitField}, }; } diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java index f798a0a07..e497bcb80 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java @@ -151,11 +151,10 @@ public class ChartValuePane extends ChartAxisUsePane{ double p = TableLayout.PREFERRED; double f = TableLayout.FILL; double[] columnSize = { LayoutConstants.CHART_ATTR_TOMARGIN,p,f}; - double[] rowSize = { p, p, p}; + double[] rowSize = { p, p}; Component[][] component = new Component[][]{ new Component[]{null,initMinMaxValue(),null}, - new Component[]{null, addLogarithmicPane2ValuePane(), null}, - new Component[]{null, null, addLogText()}, + new Component[]{null, addLogarithmicPane2ValuePane(), addLogText()}, }; return TableLayoutHelper.createTableLayoutPane(component, rowSize, columnSize); } From 51f1caa26abe0513ec0eb38d3ab83d18ad7a261d Mon Sep 17 00:00:00 2001 From: plough Date: Wed, 5 Apr 2017 14:52:55 +0800 Subject: [PATCH 231/343] =?UTF-8?q?REPORT-1916=20=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E8=80=97=E6=97=B6=3D=E3=80=8B=E8=B0=83=E6=95=B4=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=EF=BC=8C=E8=AE=A9designer=5Fbase=E4=B8=8D=E4=BE=9D?= =?UTF-8?q?=E8=B5=96engine=E5=92=8Cdesigner=5Fform?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/templateinfo/JWorkBookProcessInfo.java | 1 - .../com/fr/design/mainframe/templateinfo/JFormProcessInfo.java | 0 2 files changed, 1 deletion(-) rename {designer_base => designer}/src/com/fr/design/mainframe/templateinfo/JWorkBookProcessInfo.java (98%) rename {designer_base => designer_form}/src/com/fr/design/mainframe/templateinfo/JFormProcessInfo.java (100%) diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/JWorkBookProcessInfo.java b/designer/src/com/fr/design/mainframe/templateinfo/JWorkBookProcessInfo.java similarity index 98% rename from designer_base/src/com/fr/design/mainframe/templateinfo/JWorkBookProcessInfo.java rename to designer/src/com/fr/design/mainframe/templateinfo/JWorkBookProcessInfo.java index 44522b856..bf5d835d2 100644 --- a/designer_base/src/com/fr/design/mainframe/templateinfo/JWorkBookProcessInfo.java +++ b/designer/src/com/fr/design/mainframe/templateinfo/JWorkBookProcessInfo.java @@ -1,6 +1,5 @@ package com.fr.design.mainframe.templateinfo; -import com.fr.base.io.IOFile; import com.fr.base.parameter.ParameterUI; import com.fr.main.impl.WorkBook; import com.fr.report.cellcase.CellCase; diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/JFormProcessInfo.java b/designer_form/src/com/fr/design/mainframe/templateinfo/JFormProcessInfo.java similarity index 100% rename from designer_base/src/com/fr/design/mainframe/templateinfo/JFormProcessInfo.java rename to designer_form/src/com/fr/design/mainframe/templateinfo/JFormProcessInfo.java From ec76806d476de5ea50ceb6fed066ace0ae910e7a Mon Sep 17 00:00:00 2001 From: plough Date: Wed, 5 Apr 2017 15:42:49 +0800 Subject: [PATCH 232/343] =?UTF-8?q?REPORT-1916=20=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E8=80=97=E6=97=B6=3D=E3=80=8B=E8=A7=A3=E5=86=B3=E5=8F=A6?= =?UTF-8?q?=E5=AD=98=E4=B8=BA=E4=B8=8D=E4=BA=A7=E7=94=9F=E6=96=B0=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E7=9A=84bug=EF=BC=9B=E5=BD=93id=E4=B8=BAnull=E6=97=B6?= =?UTF-8?q?=EF=BC=88=E6=97=A7=E6=A8=A1=E6=9D=BF=EF=BC=89=EF=BC=8C=E4=B8=8D?= =?UTF-8?q?=E6=90=9C=E9=9B=86=E6=95=B0=E6=8D=AE=EF=BC=9B=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=89=93=E5=8D=B0=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/mainframe/JTemplate.java | 9 +++++---- .../mainframe/templateinfo/TemplateInfoCollector.java | 9 ++++++++- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/designer_base/src/com/fr/design/mainframe/JTemplate.java b/designer_base/src/com/fr/design/mainframe/JTemplate.java index b0b9f7b5a..d6dc2f0b1 100644 --- a/designer_base/src/com/fr/design/mainframe/JTemplate.java +++ b/designer_base/src/com/fr/design/mainframe/JTemplate.java @@ -111,14 +111,15 @@ public abstract class JTemplate> ex // 为收集模版信息作准备 private void initForCollect() { - if (template.getTemplateID() == null) { - template.initTemplateID(); // 为新模板设置 templateID 属性 - } + template.initTemplateID(); // 为新模板设置 templateID 属性 if (openTime == 0) { openTime = System.currentTimeMillis(); } } private void collectInfo() { // 执行收集操作 + if (template.getTemplateID() == null) { // 旧模板 + return; + } long saveTime = System.currentTimeMillis(); // 保存模板的时间点 tic.collectInfo(template, this, openTime, saveTime); openTime = saveTime; // 更新 openTime,准备下一次计算 @@ -533,7 +534,7 @@ public abstract class JTemplate> ex boolean result = this.saveFile(); if (result) { DesignerFrameFileDealerPane.getInstance().refresh(); - initForCollect(); // 如果是旧模板另存为新模板,则添加 templateID + initForCollect(); // 如果另存为新模板,则添加 templateID collectInfo(); } //更换最近打开 diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java index 4f7069205..39a7e22ab 100644 --- a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java @@ -113,7 +113,14 @@ public class TemplateInfoCollector implements Serializable { private void saveInfo() { try { ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(getInfoFile())); - FRLogger.getLogger().info("writing: " + instance.templateInfoList); + String log = ""; + int count = 1; + for (String key : templateInfoList.keySet()) { + String createTime = ((HashMap)templateInfoList.get(key).get("consumingMap")).get("create_time").toString(); + log += (count + ". id: " + key + " " + createTime + "\n" + templateInfoList.get(key).toString() + "\n"); + count ++; + } + FRLogger.getLogger().info("writing tplInfo: \n" + log); os.writeObject(instance); os.close(); } catch (Exception ex) { From c6c5eb3f4ab49d27e2300d1f4c450f5172e39075 Mon Sep 17 00:00:00 2001 From: unknown <李晓丽> Date: Wed, 5 Apr 2017 16:50:23 +0800 Subject: [PATCH 233/343] =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E7=BF=BB?= =?UTF-8?q?=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/locale/designer_zh_TW.properties | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 10edd2d16..46500f10c 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -563,17 +563,17 @@ FR-Designer_Plugin_Should_Update_Please_Contact_Developer=\u63D2\u4EF6\u7248\u67 FR-Designer_WidgetOrder=\u63A7\u4EF6\u9806\u5E8F FR-Designer_Mobile_Form_Analysis_Annotation=\u6CE8\u91CB\uFF1A\u53EF\u4EE5\u901A\u904E\u8A72\u5C6C\u6027\u63A7\u5236\u8868\u55AE\u5728APP\u4E2D\u7684\u89E3\u6790\u65B9\u5F0F\u3002 FR-Designer_Mobile_Report_Analysis_Annotation=\u6CE8\u91CB\uFF1A\u53EF\u4EE5\u901A\u904E\u8A72\u5C6C\u6027\u63A7\u5236\u5831\u8868\u5728APP\u4E2D\u7684\u89E3\u6790\u65B9\u5F0F\uFF0C\u53EA\u652F\u6301\u5206\u9801\u9810\u89BD\uFF0C\u586B\u5831\u9810\u89BD\u6642\u5C6C\u6027\u7121\u6548\u3002 -FR-Designer_Background_Null= -FR-Designer_Background_Color= -FR-Designer_Background_Texture= -FR-Designer_Background_Pattern= -FR-Designer_Background_Gradient_Color= -FR-Designer_Background_Image= -FR-Designer_Background_Clear= -FR-Designer_Background_Image_Select= -FR-Designer_Initial_Background_Tips= -FR-Designer_Mouse_Move_Tips= -FR-Designer_Mouse_Click_Tips= +FR-Designer_Background_Null=\u6C92\u6709\u80CC\u666F +FR-Designer_Background_Color=\u984F\u8272 +FR-Designer_Background_Texture=\u7D0B\u7406 +FR-Designer_Background_Pattern=\u5716\u6848 +FR-Designer_Background_Gradient_Color=\u6F38\u8B8A\u8272 +FR-Designer_Background_Image=\u5716\u7247 +FR-Designer_Background_Clear=\u6E05\u9664 +FR-Designer_Background_Image_Select=\u9078\u64C7\u5716\u7247 +FR-Designer_Initial_Background_Tips=\u6309\u9215\u7684\u521D\u59CB\u80CC\u666F +FR-Designer_Mouse_Move_Tips=\u6ED1\u9F20\u79FB\u52D5\u5230\u6309\u9215\u4E0A\u7684\u80CC\u666F\uFF0C\u82E5\u7121\u5247\u4E0D\u6539\u8B8A\u80CC\u666F +FR-Designer_Mouse_Click_Tips=\u6ED1\u9F20\u9EDE\u64CA\u6309\u9215\u6642\u80CC\u666F\uFF0C\u82E5\u7121\u5247\u4E0D\u6539\u8B8A\u80CC\u666F FR-Designer-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 From 756670a9c0d4b17c71faae4ccf682f54359edddf Mon Sep 17 00:00:00 2001 From: wanling wang Date: Wed, 5 Apr 2017 16:56:21 +0800 Subject: [PATCH 234/343] =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E7=BF=BB?= =?UTF-8?q?=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + .../design/locale/designer_ja_JP.properties | 30 +++++++++---------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/.gitignore b/.gitignore index a9c6c2320..5cc51f5ed 100644 --- a/.gitignore +++ b/.gitignore @@ -3,5 +3,6 @@ designer_base/bin designer_chart/bin designer_form/bin *.iml +designer_base/src/com/fr/design/locale/.idea diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index 4d68093c7..ffb1757f0 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -541,18 +541,18 @@ 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 -FR-Designer_Background_Null= -FR-Designer_Background_Color= -FR-Designer_Background_Texture= -FR-Designer_Background_Pattern= -FR-Designer_Background_Gradient_Color= -FR-Designer_Background_Image= -FR-Designer_Background_Clear= -FR-Designer_Background_Image_Select= -FR-Designer_Initial_Background_Tips= -FR-Designer_Mouse_Move_Tips= -FR-Designer_Mouse_Click_Tips= -FR-Designer-Move_Tab_First= -FR-Designer-Move_Tab_End= -FR-Designer-Move_Tab_Next= -FR-Designer-Move_Tab_Prev= +FR-Designer_Background_Null=\u80CC\u666F\u306A\u3057 +FR-Designer_Background_Color=\u8272 +FR-Designer_Background_Texture=\u67C4 +FR-Designer_Background_Pattern=\u6A21\u69D8 +FR-Designer_Background_Gradient_Color=\u30B0\u30E9\u30C7\u30FC\u30B7\u30E7\u30F3\u8272 +FR-Designer_Background_Image=\u5199\u771F +FR-Designer_Background_Clear=\u30AF\u30EA\u30A2 +FR-Designer_Background_Image_Select=\u5199\u771F\u3092\u9078\u629E +FR-Designer_Initial_Background_Tips=\u30DC\u30BF\u30F3\u306E\u521D\u671F\u80CC\u666F +FR-Designer_Mouse_Move_Tips=\u30DE\u30A6\u30B9\u304C\u30DC\u30BF\u30F3\u306B\u79FB\u3059\u6642\u306E\u80CC\u666F +FR-Designer_Mouse_Click_Tips=\u30DE\u30A6\u30B9\u304C\u30DC\u30BF\u30F3\u306B\u79FB\u3059\u6642\u306E\u80CC\u666F +FR-Designer-Move_Tab_First=\u30C8\u30C3\u30D7\u306B\u79FB\u3059 +FR-Designer-Move_Tab_End=\u6700\u5F8C\u306B\u79FB\u3059 +FR-Designer-Move_Tab_Next=\u5F8C\u308D\u306B\u79FB\u3059 +FR-Designer-Move_Tab_Prev=\u524D\u306B\u79FB\u3059 From a1a277ff65546753d8beae9434004376cb395f0d Mon Sep 17 00:00:00 2001 From: mengao <283296419@qq.com> Date: Wed, 5 Apr 2017 16:59:49 +0800 Subject: [PATCH 235/343] =?UTF-8?q?=E8=BF=98=E5=8E=9F=E5=86=B2=E7=AA=81?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/chart/axis/MinMaxValuePane.java | 18 +++++++----------- .../chart/gui/style/axis/ChartValuePane.java | 5 ++--- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java index 73235dc31..4a9be221d 100644 --- a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java +++ b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java @@ -42,14 +42,14 @@ public class MinMaxValuePane extends JPanel { double p = TableLayout.PREFERRED; double f = TableLayout.FILL; double[] columnSize = { p, f }; - double[] rowSize = { p, p, p, p, p, p, p, p}; + double[] rowSize = { p, p, p, p}; Component[][] components = getPanelComponents(); JPanel panel = TableLayoutHelper.createTableLayoutPane(components ,rowSize,columnSize); this.setLayout(new BorderLayout()); this.add(panel,BorderLayout.CENTER); - for(int i = 0; i < components.length; i+=2) { + for(int i = 0; i < components.length; i++) { ((UICheckBox)components[i][0]).addActionListener(new ActionListener() { @Override @@ -57,19 +57,15 @@ public class MinMaxValuePane extends JPanel { checkBoxUse(); } }); - ChartSwingUtils.addListener((UICheckBox)components[i][0], (UITextField)components[i+1][0]); + ChartSwingUtils.addListener((UICheckBox)components[i][0], (UITextField)components[i][1]); } } protected Component[][] getPanelComponents() { return new Component[][]{ - new Component[]{minCheckBox}, - new Component[]{minValueField}, - new Component[]{maxCheckBox}, - new Component[]{maxValueField}, - new Component[]{isCustomMainUnitBox}, - new Component[]{mainUnitField}, - new Component[]{isCustomSecUnitBox}, - new Component[]{secUnitField}, + new Component[]{minCheckBox, minValueField}, + new Component[]{maxCheckBox, maxValueField}, + new Component[]{isCustomMainUnitBox, mainUnitField}, + new Component[]{isCustomSecUnitBox, secUnitField}, }; } diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java index f798a0a07..e497bcb80 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java @@ -151,11 +151,10 @@ public class ChartValuePane extends ChartAxisUsePane{ double p = TableLayout.PREFERRED; double f = TableLayout.FILL; double[] columnSize = { LayoutConstants.CHART_ATTR_TOMARGIN,p,f}; - double[] rowSize = { p, p, p}; + double[] rowSize = { p, p}; Component[][] component = new Component[][]{ new Component[]{null,initMinMaxValue(),null}, - new Component[]{null, addLogarithmicPane2ValuePane(), null}, - new Component[]{null, null, addLogText()}, + new Component[]{null, addLogarithmicPane2ValuePane(), addLogText()}, }; return TableLayoutHelper.createTableLayoutPane(component, rowSize, columnSize); } From 28443f0c163bc298d006015392f62a2f810764ab Mon Sep 17 00:00:00 2001 From: plough Date: Wed, 5 Apr 2017 17:42:38 +0800 Subject: [PATCH 236/343] =?UTF-8?q?REPORT-1916=20=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E8=80=97=E6=97=B6=3D=E3=80=8B=E9=98=B2=E6=AD=A2=E9=87=8D?= =?UTF-8?q?=E5=A4=8D=E6=94=B6=E9=9B=86=E6=A8=A1=E6=9D=BF=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mainframe/JTemplate.java | 3 -- .../templateinfo/TemplateInfoCollector.java | 29 ++++++++++++------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/designer_base/src/com/fr/design/mainframe/JTemplate.java b/designer_base/src/com/fr/design/mainframe/JTemplate.java index d6dc2f0b1..37769cdbe 100644 --- a/designer_base/src/com/fr/design/mainframe/JTemplate.java +++ b/designer_base/src/com/fr/design/mainframe/JTemplate.java @@ -117,9 +117,6 @@ public abstract class JTemplate> ex } } private void collectInfo() { // 执行收集操作 - if (template.getTemplateID() == null) { // 旧模板 - return; - } long saveTime = System.currentTimeMillis(); // 保存模板的时间点 tic.collectInfo(template, this, openTime, saveTime); openTime = saveTime; // 更新 openTime,准备下一次计算 diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java index 39a7e22ab..3cbc557f8 100644 --- a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java @@ -15,9 +15,7 @@ import org.json.JSONObject; import java.io.*; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.HashMap; +import java.util.*; /** * 做模板的过程和耗时收集,辅助类 @@ -27,6 +25,7 @@ public class TemplateInfoCollector implements Serializable { private static final String FILE_NAME = "tplInfo.ser"; private static TemplateInfoCollector instance; private HashMap> templateInfoList; + private Set removedTemplates; // 已经从 templateInfoList 中删除过的 id 列表,防止重复收集数据 private String designerOpenDate; //设计器最近一次打开日期 private static final int VALID_CELL_COUNT = 5; // 有效报表模板的格子数 private static final int VALID_WIDGET_COUNT = 5; // 有效报表模板的控件数 @@ -36,6 +35,7 @@ public class TemplateInfoCollector implements Serializable { @SuppressWarnings("unchecked") private TemplateInfoCollector() { templateInfoList = new HashMap<>(); + removedTemplates = new ListSet<>(); setDesignerOpenDate(); } @@ -77,12 +77,15 @@ public class TemplateInfoCollector implements Serializable { return instance; } - private static boolean shouldCollectInfo() { + private boolean shouldCollectInfo(T t) { + if (t.getTemplateID() == null || instance.removedTemplates.contains(t.getTemplateID())) { // 旧模板 + return false; + } return DesignerEnvManager.getEnvManager().isJoinProductImprove() && FRContext.isChineseEnv(); } - public static void appendProcess(String log) { - if (!shouldCollectInfo()) { + public void appendProcess(T t, String log) { + if (!shouldCollectInfo(t)) { return; } // 获取当前编辑的模板 @@ -148,7 +151,7 @@ public class TemplateInfoCollector implements Serializable { */ @SuppressWarnings("unchecked") public void collectInfo(T t, JTemplate jt, long openTime, long saveTime) { - if (!shouldCollectInfo()) { + if (!shouldCollectInfo(t)) { return; } @@ -232,7 +235,7 @@ public class TemplateInfoCollector implements Serializable { if (sendSingleTemplateInfo(consumingUrl, jsonConsumingMap) && sendSingleTemplateInfo(processUrl, jsonProcessMap)) { // 清空记录 FRLogger.getLogger().info("successfully send " + templateInfo.get("templateID")); - templateInfoList.remove(templateInfo.get("templateID")); + removeFromTemplateInfoList(templateInfo.get("templateID")); } } saveInfo(); @@ -284,12 +287,18 @@ public class TemplateInfoCollector implements Serializable { } // 删除测试模板 for (String key : testTemplateKeys) { - templateInfoList.remove(key); -// System.out.println(key + " is removed..."); + removeFromTemplateInfoList(key); } return completeTemplatesInfo; } + private void removeFromTemplateInfoList(String key) { + templateInfoList.remove(key); + removedTemplates.add(key); + FRLogger.getLogger().info(key + " is removed..."); + FRLogger.getLogger().info("removedTemplates: " + removedTemplates); + } + @SuppressWarnings("unchecked") private boolean isTestTemplate(HashMap templateInfo) { HashMap processMap = (HashMap) templateInfo.get("processMap"); From f7d68b85c4450327597b3c56d8a7f2376b700fca Mon Sep 17 00:00:00 2001 From: mengao <283296419@qq.com> Date: Wed, 5 Apr 2017 19:58:39 +0800 Subject: [PATCH 237/343] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=9B=BD=E9=99=85?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/chart/gui/style/axis/ChartValuePane.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java index e497bcb80..8916efe25 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java @@ -72,7 +72,7 @@ public class ChartValuePane extends ChartAxisUsePane{ axisLineStylePane = new ChartAxisLineStylePane(); zeroPane = aliagnZero4Second(); - axisReversed = new UICheckBox(Inter.getLocText("AxisReversed")); + axisReversed = new UICheckBox(Inter.getLocText("FR-Designer_AxisReversed")); unitCombox = new UIComboBox(ChartConstants.UNIT_I18N_VALUES); formatPane = new FormatPane(); axisLabelPane = new ChartAxisLabelPane(); @@ -171,8 +171,8 @@ public class ChartValuePane extends ChartAxisUsePane{ // 返回对数相关界面. 百分比 没有此界面. protected JPanel addLogarithmicPane2ValuePane() { JPanel labelLogPane = FRGUIPaneFactory.createLeftFlowZeroGapBorderPane(); - labelLogPane.add(logBox = new UICheckBox(Inter.getLocText("Logarithmic")+":")); - labelLogPane.add(new UILabel(Inter.getLocText("Chart_Log_Base"))); + labelLogPane.add(logBox = new UICheckBox(Inter.getLocText("FR-Designer_Logarithmic")+":")); + labelLogPane.add(new UILabel(Inter.getLocText("FR-Designer_Chart_Log_Base"))); logBaseField = new UITextField(4); logBaseField.setText("10"); @@ -221,7 +221,7 @@ public class ChartValuePane extends ChartAxisUsePane{ * @return 返回标题. */ public String title4PopupWindow() { - return Inter.getLocText("Chart_F_Radar_Axis"); + return Inter.getLocText("FR-Designer_Chart_F_Radar_Axis"); } @Override From fcf2f0884eec2d13f8eb4b923b164da3a4f01333 Mon Sep 17 00:00:00 2001 From: mengao <283296419@qq.com> Date: Thu, 6 Apr 2017 09:27:41 +0800 Subject: [PATCH 238/343] =?UTF-8?q?=E5=9C=B0=E5=9B=BE=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E7=BC=A9=E6=94=BE=E6=89=8B=E5=8A=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/chart/axis/MinMaxValuePane.java | 77 ++++++++++--------- 1 file changed, 41 insertions(+), 36 deletions(-) diff --git a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java index 4bd1aaca7..17509bd52 100644 --- a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java +++ b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java @@ -30,7 +30,12 @@ public class MinMaxValuePane extends JPanel { protected UICheckBox isCustomSecUnitBox; protected UITextField secUnitField; - public MinMaxValuePane() { + protected double p = TableLayout.PREFERRED; + protected double f = TableLayout.FILL; + protected double[] columnSize = {p, f}; + protected double[] rowSize = {p, p, p, p}; + + public MinMaxValuePane() { minCheckBox = new UICheckBox(Inter.getLocText(new String[]{"Custom", "Min_Value"})); minValueField = new UITextField(6); maxCheckBox = new UICheckBox(Inter.getLocText(new String[]{"Custom", "Max_Value"})); @@ -39,41 +44,41 @@ public class MinMaxValuePane extends JPanel { mainUnitField = new UITextField(6); isCustomSecUnitBox = new UICheckBox(Inter.getLocText("FR-Chart_SecondGraduationUnit")); secUnitField = new UITextField(6); - double p = TableLayout.PREFERRED; - double f = TableLayout.FILL; - double[] columnSize = { p, f }; - double[] rowSize = { p, p, p, p}; - - Component[][] components = getPanelComponents(); - JPanel panel = TableLayoutHelper.createTableLayoutPane(components ,rowSize,columnSize); - this.setLayout(new BorderLayout()); - this.add(panel,BorderLayout.CENTER); - addComponentListener(components); - } - public void addComponentListener(Component[][] components) { - for (int i = 0; i < components.length; i++) { - ((UICheckBox) components[i][0]).addActionListener(new ActionListener() { + Component[][] components = getPanelComponents(); + JPanel panel = TableLayoutHelper.createTableLayoutPane(components, getRowSize(), columnSize); + this.setLayout(new BorderLayout()); + this.add(panel, BorderLayout.CENTER); + addComponentListener(components); + } - @Override - public void actionPerformed(ActionEvent e) { - checkBoxUse(); - } - }); - ChartSwingUtils.addListener((UICheckBox) components[i][0], (UITextField) components[i][1]); - } - } + public double[] getRowSize() { + return rowSize; + } - protected Component[][] getPanelComponents() { - return new Component[][]{ - new Component[]{minCheckBox, minValueField}, - new Component[]{maxCheckBox, maxValueField}, - new Component[]{isCustomMainUnitBox, mainUnitField}, - new Component[]{isCustomSecUnitBox, secUnitField}, - }; - } + public void addComponentListener(Component[][] components) { + for (int i = 0; i < components.length; i++) { + ((UICheckBox) components[i][0]).addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + checkBoxUse(); + } + }); + ChartSwingUtils.addListener((UICheckBox) components[i][0], (UITextField) components[i][1]); + } + } + + protected Component[][] getPanelComponents() { + return new Component[][]{ + new Component[]{minCheckBox, minValueField}, + new Component[]{maxCheckBox, maxValueField}, + new Component[]{isCustomMainUnitBox, mainUnitField}, + new Component[]{isCustomSecUnitBox, secUnitField}, + }; + } - private void checkBoxUse() { + protected void checkBoxUse() { minValueField.setEnabled(minCheckBox.isSelected()); maxValueField.setEnabled(maxCheckBox.isSelected()); @@ -104,7 +109,7 @@ public class MinMaxValuePane extends JPanel { if(axis.getMinValue() != null) { minValueField.setText(axis.getMinValue().toString()); } - } + } // 最大值 if (axis.isCustomMaxValue()) { @@ -112,7 +117,7 @@ public class MinMaxValuePane extends JPanel { if(axis.getMaxValue() != null) { maxValueField.setText(axis.getMaxValue().toString()); } - } + } // 主次刻度单位 if (axis.isCustomMainUnit()) { @@ -120,7 +125,7 @@ public class MinMaxValuePane extends JPanel { if(axis.getMainUnit() != null) { mainUnitField.setText(axis.getMainUnit().toString()); } - } + } if(axis.isCustomSecUnit()) { isCustomSecUnitBox.setSelected(true); @@ -153,7 +158,7 @@ public class MinMaxValuePane extends JPanel { updateUnit(axis); } - private void updateUnit(Axis axis) { + protected void updateUnit(Axis axis) { // 主要刻度 if (isCustomMainUnitBox.isSelected()){ String increment = mainUnitField.getText(); From ab1d6e5cc7ea54fb0696e0cf285e34d935e5f64f Mon Sep 17 00:00:00 2001 From: plough Date: Thu, 6 Apr 2017 10:04:10 +0800 Subject: [PATCH 239/343] =?UTF-8?q?REPORT-1916=20=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E8=80=97=E6=97=B6=3D=E3=80=8B=E8=BF=9C=E7=A8=8B=E8=AE=BE?= =?UTF-8?q?=E8=AE=A1=E6=97=B6=E4=B8=8D=E6=94=B6=E9=9B=86=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/templateinfo/TemplateInfoCollector.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java index 3cbc557f8..f302d9f5e 100644 --- a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java @@ -5,6 +5,7 @@ import com.fr.base.io.IOFile; import com.fr.design.DesignerEnvManager; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.JTemplate; +import com.fr.env.RemoteEnv; import com.fr.general.ComparatorUtils; import com.fr.general.FRLogger; import com.fr.general.GeneralUtils; @@ -78,7 +79,9 @@ public class TemplateInfoCollector implements Serializable { } private boolean shouldCollectInfo(T t) { - if (t.getTemplateID() == null || instance.removedTemplates.contains(t.getTemplateID())) { // 旧模板 + if (FRContext.getCurrentEnv() instanceof RemoteEnv // 远程设计不收集数据 + || t.getTemplateID() == null + || instance.removedTemplates.contains(t.getTemplateID())) { // 旧模板 return false; } return DesignerEnvManager.getEnvManager().isJoinProductImprove() && FRContext.isChineseEnv(); From 4cd9b17bfca1021f81e616f035daef7fc7941851 Mon Sep 17 00:00:00 2001 From: plough Date: Thu, 6 Apr 2017 10:36:56 +0800 Subject: [PATCH 240/343] =?UTF-8?q?REPORT-1916=20=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E8=80=97=E6=97=B6=3D=E3=80=8B=E5=A6=82=E6=9E=9C=20TemplateInfo?= =?UTF-8?q?Collecor=20=E7=B1=BB=E7=BB=93=E6=9E=84=E6=9C=89=E6=94=B9?= =?UTF-8?q?=E5=8A=A8=EF=BC=8C=E5=88=99=E6=94=BE=E5=BC=83=E4=B9=8B=E5=89=8D?= =?UTF-8?q?=E6=94=B6=E9=9B=86=E7=9A=84=E6=95=B0=E6=8D=AE=EF=BC=8C=E4=BF=9D?= =?UTF-8?q?=E8=AF=81=E6=AD=A3=E5=B8=B8=E5=90=AF=E5=8A=A8=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/templateinfo/TemplateInfoCollector.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java index f302d9f5e..76d942e9a 100644 --- a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java @@ -71,7 +71,14 @@ public class TemplateInfoCollector implements Serializable { } catch (FileNotFoundException ex) { // 如果之前没有存储过,则创建新对象 instance = new TemplateInfoCollector(); - } catch (Exception ex) { + } catch (InvalidClassException ex) { + // 如果 TemplateInfoCollecor 类结构有改动,则放弃之前收集的数据(下次保存时覆盖) + // 这种情况主要在开发、测试过程中遇到,正式上线后不应该出现 + FRLogger.getLogger().error(ex.getMessage()); + FRLogger.getLogger().info("use a new instance"); + instance = new TemplateInfoCollector(); + } + catch (Exception ex) { FRLogger.getLogger().error(ex.getMessage(), ex); } } From db32155dadc547402719bc6d62c9276833dbbef3 Mon Sep 17 00:00:00 2001 From: mengao <283296419@qq.com> Date: Thu, 6 Apr 2017 10:55:05 +0800 Subject: [PATCH 241/343] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=9B=BD=E9=99=85?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/chart/gui/style/axis/ChartValuePane.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java index e497bcb80..8916efe25 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java @@ -72,7 +72,7 @@ public class ChartValuePane extends ChartAxisUsePane{ axisLineStylePane = new ChartAxisLineStylePane(); zeroPane = aliagnZero4Second(); - axisReversed = new UICheckBox(Inter.getLocText("AxisReversed")); + axisReversed = new UICheckBox(Inter.getLocText("FR-Designer_AxisReversed")); unitCombox = new UIComboBox(ChartConstants.UNIT_I18N_VALUES); formatPane = new FormatPane(); axisLabelPane = new ChartAxisLabelPane(); @@ -171,8 +171,8 @@ public class ChartValuePane extends ChartAxisUsePane{ // 返回对数相关界面. 百分比 没有此界面. protected JPanel addLogarithmicPane2ValuePane() { JPanel labelLogPane = FRGUIPaneFactory.createLeftFlowZeroGapBorderPane(); - labelLogPane.add(logBox = new UICheckBox(Inter.getLocText("Logarithmic")+":")); - labelLogPane.add(new UILabel(Inter.getLocText("Chart_Log_Base"))); + labelLogPane.add(logBox = new UICheckBox(Inter.getLocText("FR-Designer_Logarithmic")+":")); + labelLogPane.add(new UILabel(Inter.getLocText("FR-Designer_Chart_Log_Base"))); logBaseField = new UITextField(4); logBaseField.setText("10"); @@ -221,7 +221,7 @@ public class ChartValuePane extends ChartAxisUsePane{ * @return 返回标题. */ public String title4PopupWindow() { - return Inter.getLocText("Chart_F_Radar_Axis"); + return Inter.getLocText("FR-Designer_Chart_F_Radar_Axis"); } @Override From cebfc9ef10d1c3411e4bc6a33e3b05d38b158e53 Mon Sep 17 00:00:00 2001 From: plough Date: Thu, 6 Apr 2017 12:47:09 +0800 Subject: [PATCH 242/343] =?UTF-8?q?REPORT-1916=20=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E8=80=97=E6=97=B6=3D=E3=80=8B=E4=BF=AE=E6=94=B9=E7=AE=97?= =?UTF-8?q?=E6=B3=95=EF=BC=8C=E5=B0=86=E4=B8=8A=E4=BC=A0=E5=90=8E=E7=9A=84?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E8=A7=86=E4=B8=BA=E6=97=A7=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=EF=BC=8C=E4=B8=8D=E5=86=8D=E6=94=B6=E9=9B=86=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/mainframe/JTemplate.java | 3 +++ .../templateinfo/TemplateInfoCollector.java | 16 +++++----------- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/designer_base/src/com/fr/design/mainframe/JTemplate.java b/designer_base/src/com/fr/design/mainframe/JTemplate.java index 37769cdbe..7c98fecd1 100644 --- a/designer_base/src/com/fr/design/mainframe/JTemplate.java +++ b/designer_base/src/com/fr/design/mainframe/JTemplate.java @@ -117,6 +117,9 @@ public abstract class JTemplate> ex } } private void collectInfo() { // 执行收集操作 + if (openTime == 0) { // 旧模板,不收集数据 + return; + } long saveTime = System.currentTimeMillis(); // 保存模板的时间点 tic.collectInfo(template, this, openTime, saveTime); openTime = saveTime; // 更新 openTime,准备下一次计算 diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java index 76d942e9a..db1fe312a 100644 --- a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java @@ -26,7 +26,6 @@ public class TemplateInfoCollector implements Serializable { private static final String FILE_NAME = "tplInfo.ser"; private static TemplateInfoCollector instance; private HashMap> templateInfoList; - private Set removedTemplates; // 已经从 templateInfoList 中删除过的 id 列表,防止重复收集数据 private String designerOpenDate; //设计器最近一次打开日期 private static final int VALID_CELL_COUNT = 5; // 有效报表模板的格子数 private static final int VALID_WIDGET_COUNT = 5; // 有效报表模板的控件数 @@ -36,7 +35,6 @@ public class TemplateInfoCollector implements Serializable { @SuppressWarnings("unchecked") private TemplateInfoCollector() { templateInfoList = new HashMap<>(); - removedTemplates = new ListSet<>(); setDesignerOpenDate(); } @@ -85,17 +83,15 @@ public class TemplateInfoCollector implements Serializable { return instance; } - private boolean shouldCollectInfo(T t) { - if (FRContext.getCurrentEnv() instanceof RemoteEnv // 远程设计不收集数据 - || t.getTemplateID() == null - || instance.removedTemplates.contains(t.getTemplateID())) { // 旧模板 + private boolean shouldCollectInfo() { + if (FRContext.getCurrentEnv() instanceof RemoteEnv) { // 远程设计不收集数据 return false; } return DesignerEnvManager.getEnvManager().isJoinProductImprove() && FRContext.isChineseEnv(); } - public void appendProcess(T t, String log) { - if (!shouldCollectInfo(t)) { + public void appendProcess(String log) { + if (!shouldCollectInfo()) { return; } // 获取当前编辑的模板 @@ -161,7 +157,7 @@ public class TemplateInfoCollector implements Serializable { */ @SuppressWarnings("unchecked") public void collectInfo(T t, JTemplate jt, long openTime, long saveTime) { - if (!shouldCollectInfo(t)) { + if (!shouldCollectInfo()) { return; } @@ -304,9 +300,7 @@ public class TemplateInfoCollector implements Serializable { private void removeFromTemplateInfoList(String key) { templateInfoList.remove(key); - removedTemplates.add(key); FRLogger.getLogger().info(key + " is removed..."); - FRLogger.getLogger().info("removedTemplates: " + removedTemplates); } @SuppressWarnings("unchecked") From ae78f289b6c4c4b23c590313e4b9785f77706707 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Thu, 6 Apr 2017 14:40:25 +0800 Subject: [PATCH 243/343] =?UTF-8?q?FRM=E7=BB=84=E4=BB=B6=E5=A4=8D=E7=94=A8?= =?UTF-8?q?=E8=87=AA=E9=80=82=E5=BA=94=E5=B8=83=E5=B1=80bug=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=EF=BC=8C=E4=B8=8D=E8=83=BD=E7=B2=98=E8=B4=B4=E6=97=B6?= =?UTF-8?q?=E5=BC=B9=E7=AA=97=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/locale/designer.properties | 2 + .../design/locale/designer_en_US.properties | 2 + .../design/locale/designer_zh_CN.properties | 2 + .../design/locale/designer_zh_TW.properties | 2 + .../adapters/layout/FRBodyLayoutAdapter.java | 26 ++- .../layout/FRTabFitLayoutAdapter.java | 15 +- .../designer/beans/models/SelectionModel.java | 29 +-- .../beans/painters/AbstractPainter.java | 187 +++++++++--------- .../fr/design/mainframe/FormSelection.java | 12 +- .../design/mainframe/FormSelectionUtils.java | 7 +- 10 files changed, 161 insertions(+), 123 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 7c4847f3c..0eda01dee 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -585,3 +585,5 @@ 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_Too_Large_To_Paste=too large to paste +FR-Designer_Too_Small_To_Paste=Too small to paste diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index fab277ad6..0dc0c050f 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -586,3 +586,5 @@ 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_Too_Large_To_Paste=Too large to paste! +FR-Designer_Too_Small_To_Paste=Too small to paste! diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 5139b301f..563132583 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -590,3 +590,5 @@ 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_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 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 10edd2d16..22d5581e1 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -578,3 +578,5 @@ 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_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 diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRBodyLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRBodyLayoutAdapter.java index b3072667b..75190ba3b 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRBodyLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRBodyLayoutAdapter.java @@ -640,11 +640,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter { * 又通过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; - } + y = y + WCardMainBorderLayout.TAB_HEIGHT + this.getParaEditorYOffset(); int tempX = x - rect.x; int tempY = y - rect.y; int containerX = container.getX(); @@ -675,6 +671,26 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter { return position; } + /** + * 获取因为参数面板导致的Y坐标偏移 + * + * @return 参数面板导致的Y坐标偏移 + */ + protected int getParaEditorYOffset() { + int offset = 0; + if (container.getParent() != null) { + Component components[] = container.getParent().getComponents(); + for (Component component : components) { + if (component instanceof XWParameterLayout) { + offset = component.getY() + component.getHeight(); + break; + } + } + } + return offset; + } + + /** * 组件交叉区域进行插入时,调整受到变动的其他组件,之前是交叉区域插入也按照三等分逻辑,后面测试中发现有bug,改为和bi一样的鼠标所在侧平分 * 默认左上角、右下角区域是垂直方向插入组件 diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRTabFitLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRTabFitLayoutAdapter.java index 352a3ba7a..b1ca803c6 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRTabFitLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRTabFitLayoutAdapter.java @@ -7,11 +7,13 @@ package com.fr.design.designer.beans.adapters.layout; import com.fr.design.beans.GroupModel; import com.fr.design.designer.creator.XCreator; 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.cardlayout.XWCardLayout; import com.fr.design.designer.creator.cardlayout.XWCardMainBorderLayout; import com.fr.design.designer.creator.cardlayout.XWTabFitLayout; import com.fr.design.designer.properties.FRTabFitLayoutPropertiesGroupModel; +import com.fr.design.mainframe.widget.editors.ParameterEditor; import com.fr.design.utils.ComponentUtils; import com.fr.form.ui.LayoutBorderStyle; import com.fr.form.ui.container.WBorderLayout; @@ -82,16 +84,14 @@ public class FRTabFitLayoutAdapter extends FRFitLayoutAdapter { return true; } - // tab布局的纵坐标受到tab高度的影响,判断的上边界取得是里面XWTabFitLayout的上边界, - // 实际计算的时候的纵坐标用了外层的CardMainBorerLayout,需要将tab高度减掉 - //将y值变为相对坐标以实现获取到鼠标drop位置的控件 - //TODO 可以直接在这边将x,y都变成相对坐标,这样在后面判断拖进来的新控件放置方式的时候就不用再判断了 + // tab布局的纵坐标受到tab高度以及参数面板高度的影响,判断的上边界取得是里面XWTabFitLayout的上边界, + // 实际计算的时候的纵坐标用了外层的CardMainBorerLayout,需要将tab高度和参数面板高度减掉 + // 将y值变为相对坐标以实现获取到鼠标drop位置的控件 + // TODO 可以直接在这边将x,y都变成相对坐标,这样在后面判断拖进来的新控件放置方式的时候就不用再判断了 private int adjustY(int y, XWTabFitLayout tabLayout) { XWCardLayout cardLayout = (XWCardLayout) tabLayout.getBackupParent(); LayoutBorderStyle style = cardLayout.toData().getBorderStyle(); - if (container.getLocation().y == WBorderLayout.DEFAULT_SIZE) { - y = y - WBorderLayout.DEFAULT_SIZE; - } + y = y - this.getParaEditorYOffset(); if (ComparatorUtils.equals(style.getType(), LayoutBorderStyle.TITLE)) { y = y - WCardMainBorderLayout.TAB_HEIGHT; } @@ -101,4 +101,5 @@ public class FRTabFitLayoutAdapter extends FRFitLayoutAdapter { protected Rectangle getLayoutBound(XWCardMainBorderLayout mainLayout) { return ComponentUtils.getRelativeBounds(mainLayout); } + } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java index 1748fef4b..a70d9b156 100644 --- a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java +++ b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java @@ -13,6 +13,7 @@ import com.fr.design.form.util.XCreatorConstants; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.FormSelection; import com.fr.design.mainframe.FormSelectionUtils; +import com.fr.design.utils.ComponentUtils; import com.fr.design.utils.gui.LayoutUtils; import com.fr.stable.ArrayUtils; @@ -26,7 +27,7 @@ import java.util.ArrayList; public class SelectionModel { //被粘贴组件在所选组件位置处往下、往右各错开20像素。执行多次粘贴时,在上一次粘贴的位置处错开20像素。 private static final int DELTA_X_Y = 20; //粘贴时候的偏移距离 - private static final int BORDER_PROPORTION = 20; + private static final double OFFSET_RELATIVE = 0.80; private static FormSelection clipboard = new FormSelection(); private FormDesigner designer; private FormSelection selection; @@ -140,14 +141,14 @@ public class SelectionModel { FormSelectionUtils.paste2Container(designer, (XLayoutContainer) selection.getSelectedCreator(), clipboard, rec.x + rec.width / 2, - rec.y + BORDER_PROPORTION); + rec.y + DELTA_X_Y); } else { Rectangle rec = selection.getRelativeBounds(); //自适应布局 FormSelectionUtils.paste2Container(designer, designer.getRootComponent(), clipboard, rec.x + rec.width / 2, - rec.y + BORDER_PROPORTION); + rec.y + DELTA_X_Y); } } else { //绝对布局 @@ -172,18 +173,22 @@ public class SelectionModel { * 粘贴时选择组件 */ private void selectedPaste() { - XLayoutContainer parent = null; + XLayoutContainer container = null; //获取到编辑器的表层容器(已选的组件的父容器就是表层容器) - parent = XCreatorUtils.getParentXLayoutContainer(selection.getSelectedCreator()); - if (parent != null && selection.getSelectedCreator().getParent() instanceof XWFitLayout) { + container = XCreatorUtils.getParentXLayoutContainer(selection.getSelectedCreator()); + if (container != null && selection.getSelectedCreator().getParent() instanceof XWFitLayout) { //自适应布局 - Rectangle rec = selection.getRelativeBounds(); - FormSelectionUtils.paste2Container(designer, parent, clipboard, rec.x + rec.width / 2, rec.y + - rec.height - BORDER_PROPORTION); - } else if (parent != null && selection.getSelectedCreator().getParent() instanceof XWAbsoluteLayout) { + Rectangle selectionRec = selection.getRelativeBounds(); + Rectangle containerRec = ComponentUtils.getRelativeBounds(container); + //计算自适应布局位置 + int positionX = selectionRec.x - containerRec.x + selectionRec.width / 2; + int positionY = (int) (selectionRec.y - containerRec.y + selectionRec.height * OFFSET_RELATIVE); + + FormSelectionUtils.paste2Container(designer, container, clipboard, positionX, positionY); + } else if (container != null && selection.getSelectedCreator().getParent() instanceof XWAbsoluteLayout) { //绝对布局 Rectangle rec = selection.getSelctionBounds(); - FormSelectionUtils.paste2Container(designer, parent, clipboard, rec.x + DELTA_X_Y, rec.y + DELTA_X_Y); + FormSelectionUtils.paste2Container(designer, container, clipboard, rec.x + DELTA_X_Y, rec.y + DELTA_X_Y); } } @@ -198,13 +203,13 @@ public class SelectionModel { if (creator.acceptType(XWParameterLayout.class)) { designer.removeParaComponent(); } - removeCreatorFromContainer(creator, creator.getWidth(), creator.getHeight()); creator.removeAll(); // 清除被选中的组件 selection.reset(); } setSelectedCreator(designer.getRootComponent()); + FormSelectionUtils.rebuildSelection(designer); // 触发事件 designer.getEditListenerTable().fireCreatorModified(DesignerEvent.CREATOR_DELETED); designer.repaint(); diff --git a/designer_form/src/com/fr/design/designer/beans/painters/AbstractPainter.java b/designer_form/src/com/fr/design/designer/beans/painters/AbstractPainter.java index 06565fe4f..fca5197ae 100644 --- a/designer_form/src/com/fr/design/designer/beans/painters/AbstractPainter.java +++ b/designer_form/src/com/fr/design/designer/beans/painters/AbstractPainter.java @@ -1,93 +1,96 @@ -package com.fr.design.designer.beans.painters; - -import java.awt.Color; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.Stroke; - -import com.fr.design.designer.beans.HoverPainter; -import com.fr.design.designer.creator.XCreator; -import com.fr.design.designer.creator.XLayoutContainer; -import com.fr.design.form.util.XCreatorConstants; -import com.fr.general.Inter; - -public abstract class AbstractPainter implements HoverPainter { - - protected Point hotspot; - protected Rectangle hotspot_bounds; - protected XLayoutContainer container; - protected XCreator creator; - - /** - * 构造函数 - * @param container 容器 - */ - public AbstractPainter(XLayoutContainer container) { - this.container = container; - } - - @Override - public void setHotspot(Point p) { - hotspot = p; - } - - /** - * 画初始区域 - * @param g 画图类 - * @param startX 起始x位置 - * @param startY 起始y位置 - */ - public void paint(Graphics g, int startX, int startY) { - if(hotspot_bounds != null){ - drawHotspot(g, hotspot_bounds.x, hotspot_bounds.y, hotspot_bounds.width, hotspot_bounds.height, Color.lightGray, true, false); - } - } - - /** - * 设置边界 - * @param rect 位置 - */ - @Override - public void setRenderingBounds(Rectangle rect) { - hotspot_bounds = rect; - } - - @Override - public void setCreator(XCreator component) { - this.creator = component; - } - - protected void drawHotspot(Graphics g, int x, int y, int width, int height, boolean accept) { - Color bColor = accept ? XCreatorConstants.LAYOUT_HOTSPOT_COLOR : XCreatorConstants.LAYOUT_FORBIDDEN_COLOR; - drawHotspot(g, x, y, width, height, bColor, accept, false); - } - - /** - * 自适应布局那边渲染提示,要画整个背景,不是画边框 - */ - protected void drawRegionBackground(Graphics g, int x, int y, int width, int height, Color bColor, boolean accept) { - drawHotspot(g, x, y, width, height, bColor, accept, true); - } - - protected void drawHotspot(Graphics g, int x, int y, int width, int height, Color bColor, boolean accept, boolean drawBackground) { - Graphics2D g2d = (Graphics2D) g; - Color color = g2d.getColor(); - Stroke backup = g2d.getStroke(); - // 设置线条的样式 - g2d.setStroke(XCreatorConstants.STROKE); - g2d.setColor(bColor); - if (!accept) { - g2d.drawString(Inter.getLocText("Cannot-Add_To_This_Area") + "!", x + width / 3, y + height / 2); - } else if (drawBackground) { - g2d.fillRect(x, y, width, height); - } else { - g2d.drawRect(x, y, width, height); - } - g2d.setStroke(backup); - g2d.setColor(color); - } - - +package com.fr.design.designer.beans.painters; + +import java.awt.Color; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.Stroke; + +import com.fr.design.designer.beans.HoverPainter; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XLayoutContainer; +import com.fr.design.form.util.XCreatorConstants; +import com.fr.general.Inter; + +public abstract class AbstractPainter implements HoverPainter { + + protected Point hotspot; + protected Rectangle hotspot_bounds; + protected XLayoutContainer container; + protected XCreator creator; + + /** + * 构造函数 + * + * @param container 容器 + */ + public AbstractPainter(XLayoutContainer container) { + this.container = container; + } + + @Override + public void setHotspot(Point p) { + hotspot = p; + } + + /** + * 画初始区域 + * + * @param g 画图类 + * @param startX 起始x位置 + * @param startY 起始y位置 + */ + public void paint(Graphics g, int startX, int startY) { + if (hotspot_bounds != null) { + drawHotspot(g, hotspot_bounds.x, hotspot_bounds.y, hotspot_bounds.width, hotspot_bounds.height, Color.lightGray, true, false); + } + } + + /** + * 设置边界 + * + * @param rect 位置 + */ + @Override + public void setRenderingBounds(Rectangle rect) { + hotspot_bounds = rect; + } + + @Override + public void setCreator(XCreator component) { + this.creator = component; + } + + protected void drawHotspot(Graphics g, int x, int y, int width, int height, boolean accept) { + Color bColor = accept ? XCreatorConstants.LAYOUT_HOTSPOT_COLOR : XCreatorConstants.LAYOUT_FORBIDDEN_COLOR; + drawHotspot(g, x, y, width, height, bColor, accept, false); + } + + /** + * 自适应布局那边渲染提示,要画整个背景,不是画边框 + */ + protected void drawRegionBackground(Graphics g, int x, int y, int width, int height, Color bColor, boolean accept) { + drawHotspot(g, x, y, width, height, bColor, accept, true); + } + + protected void drawHotspot(Graphics g, int x, int y, int width, int height, Color bColor, boolean accept, boolean drawBackground) { + Graphics2D g2d = (Graphics2D) g; + Color color = g2d.getColor(); + Stroke backup = g2d.getStroke(); + // 设置线条的样式 + g2d.setStroke(XCreatorConstants.STROKE); + g2d.setColor(bColor); + if (!accept) { + g2d.drawString(Inter.getLocText("Cannot-Add_To_This_Area") + "!", x + width / 3, y + height / 2); + } else if (drawBackground) { + g2d.fillRect(x, y, width, height); + } else { + g2d.drawRect(x, y, width, height); + } + g2d.setStroke(backup); + g2d.setColor(color); + } + + } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/mainframe/FormSelection.java b/designer_form/src/com/fr/design/mainframe/FormSelection.java index f30cf2e84..ff809371c 100644 --- a/designer_form/src/com/fr/design/mainframe/FormSelection.java +++ b/designer_form/src/com/fr/design/mainframe/FormSelection.java @@ -8,12 +8,7 @@ import com.fr.base.FRContext; import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.LayoutAdapter; import com.fr.design.designer.beans.location.Direction; -import com.fr.design.designer.creator.XComponent; -import com.fr.design.designer.creator.XCreator; -import com.fr.design.designer.creator.XCreatorUtils; -import com.fr.design.designer.creator.XLayoutContainer; -import com.fr.design.designer.creator.XWAbsoluteLayout; -import com.fr.design.designer.creator.XWParameterLayout; +import com.fr.design.designer.creator.*; import com.fr.form.ui.Widget; import com.fr.design.utils.ComponentUtils; import com.fr.design.utils.gui.LayoutUtils; @@ -273,6 +268,11 @@ public class FormSelection { if (parent == null) { return; } + boolean changeCreator = creator.shouldScaleCreator() || creator.hasTitleStyle(); + if (parent.acceptType(XWFitLayout.class) && changeCreator) { + creator = (XCreator) creator.getParent(); + } + parent.getLayoutAdapter().removeBean(creator, creator.getWidth(), creator.getHeight()); // 删除其根组件,同时就删除了同时被选择的叶子组件 parent.remove(creator); LayoutManager layout = parent.getLayout(); diff --git a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java index 334c2fc37..3230cd560 100644 --- a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java +++ b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java @@ -8,6 +8,7 @@ import com.fr.design.designer.creator.*; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WTitleLayout; import com.fr.general.ComparatorUtils; +import com.fr.general.Inter; import java.awt.*; import java.util.ArrayList; @@ -61,7 +62,7 @@ public class FormSelectionUtils { x + creator.getX() - rec.x + copiedCreator.getWidth() / 2, y + creator.getY() - rec.y + copiedCreator.getHeight() / 2); if (!adapter.accept(copiedCreator, point.x, point.y)) { - designer.showMessageDialog("Too large to paste into container"); + designer.showMessageDialog(Inter.getLocText("FR-Designer_Too_Large_To_Paste")); return; } boolean addSuccess = adapter.addBean(copiedCreator, point.x, point.y); @@ -87,6 +88,10 @@ public class FormSelectionUtils { try { Widget copied = copyWidget(designer, creator); XCreator copiedCreator = XCreatorUtils.createXCreator(copied, creator.getSize()); + if (!adapter.accept(copiedCreator, x, y)) { + designer.showMessageDialog(Inter.getLocText("FR-Designer_Too_Small_To_Paste")); + return; + } boolean addSuccess = adapter.addBean(copiedCreator, x, y); if (addSuccess) { designer.getSelectionModel().getSelection().addSelectedCreator(copiedCreator); From 88201d9d5c175775f43cb017f3d8b5159ee3bf4f Mon Sep 17 00:00:00 2001 From: plough Date: Thu, 6 Apr 2017 14:42:21 +0800 Subject: [PATCH 244/343] =?UTF-8?q?REPORT-1916=20=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E8=80=97=E6=97=B6=3D=E3=80=8B=E8=B0=83=E6=95=B4=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=EF=BC=9B=E5=8F=91=E9=80=81=E6=95=B0=E6=8D=AE=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E6=97=B6=EF=BC=8C=E8=BE=93=E5=87=BA=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/mainframe/JTemplate.java | 4 ++-- .../design/mainframe/templateinfo/TemplateInfoCollector.java | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/designer_base/src/com/fr/design/mainframe/JTemplate.java b/designer_base/src/com/fr/design/mainframe/JTemplate.java index 7c98fecd1..92dd63e11 100644 --- a/designer_base/src/com/fr/design/mainframe/JTemplate.java +++ b/designer_base/src/com/fr/design/mainframe/JTemplate.java @@ -85,7 +85,7 @@ public abstract class JTemplate> ex public JTemplate(T t, String defaultFileName) { this(t, new MemFILE(newTemplateNameByIndex(defaultFileName)), true); - initForCollect(); + openTime = System.currentTimeMillis(); } public JTemplate(T t, FILE file) { @@ -534,7 +534,7 @@ public abstract class JTemplate> ex boolean result = this.saveFile(); if (result) { DesignerFrameFileDealerPane.getInstance().refresh(); - initForCollect(); // 如果另存为新模板,则添加 templateID + initForCollect(); // 如果保存新模板(新建模板直接保存,或者另存为),则添加 templateID collectInfo(); } //更换最近打开 diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java index db1fe312a..1b57c21fa 100644 --- a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java @@ -242,6 +242,8 @@ public class TemplateInfoCollector implements Serializable { // 清空记录 FRLogger.getLogger().info("successfully send " + templateInfo.get("templateID")); removeFromTemplateInfoList(templateInfo.get("templateID")); + } else { + FRLogger.getLogger().info("模板数据发送服务器失败,下次启动设计器时再尝试:" + templateInfo.get("templateID")); } } saveInfo(); From c425cf94e55e0779c012fba198e06d599739e861 Mon Sep 17 00:00:00 2001 From: mengao <283296419@qq.com> Date: Thu, 6 Apr 2017 14:43:23 +0800 Subject: [PATCH 245/343] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=9B=BD=E9=99=85?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.9.0.gradle | 75 ++++++++++++++++ designer_base/build.9.0.gradle | 69 +++++++++++++++ .../com/fr/design/locale/designer.properties | 4 + .../design/locale/designer_en_US.properties | 4 + .../design/locale/designer_ja_JP.properties | 4 + .../design/locale/designer_ko_KR.properties | 4 + .../design/locale/designer_zh_CN.properties | 4 + .../design/locale/designer_zh_TW.properties | 4 + .../fr/design/chart/axis/MinMaxValuePane.java | 13 +-- .../fun/CustomIndepentChartUIProvider.java | 87 +++++++++++++++++++ designer_form/build.9.0.gradle | 70 +++++++++++++++ .../mainframe/ElementCaseThumbnail.java | 17 ++++ 12 files changed, 349 insertions(+), 6 deletions(-) create mode 100644 build.9.0.gradle create mode 100644 designer_base/build.9.0.gradle create mode 100644 designer_chart/src/com/fr/design/chart/fun/CustomIndepentChartUIProvider.java create mode 100644 designer_form/build.9.0.gradle create mode 100644 designer_form/src/com/fr/design/mainframe/ElementCaseThumbnail.java diff --git a/build.9.0.gradle b/build.9.0.gradle new file mode 100644 index 000000000..132db468f --- /dev/null +++ b/build.9.0.gradle @@ -0,0 +1,75 @@ +apply plugin: "java" +tasks.withType(JavaCompile){ + options.encoding = "UTF-8" +} + +def basicDir="../" +def libDir="${basicDir}/lib" + +task appletJar<<{ + ant{ + mkdir(dir:"./tmp") + mkdir(dir:"build/classes/main") + copy(todir:"build/classes/"){ + fileset(dir:"${basicDir}/core/build/classes/main") + fileset(dir:"${basicDir}/chart/build/classes/main") + fileset(dir:"${basicDir}/report/build/classes/main") + fileset(dir:"${basicDir}/platform/build/classes/main") + } + unjar(src:"${libDir}/3rd.jar",dest:"./tmp") + unjar(src:"${libDir}/servlet-api.jar",dest:"./tmp") + jar(jarfile:"build/libs/fr-applet-8.0.jar"){ + fileset(dir:"build/classes"){ + exclude(name:"*.*") + exclude(name:"bin/*.*") + exclude(name:"classes/**") + exclude(name:"com/fr/schedule/**") + exclude(name:"com/fr/cell/**") + exclude(name:"com/fr/dialog/**") + exclude(name:"com/fr/view/**") + exclude(name:"com/fr/web/**") + exclude(name:"com/fr/fs/**") + exclude(name:"com/fr/design/**") + exclude(name:"com/fr/start/**") + exclude(name:"com/fr/process/**") + } + fileset(dir:"./tmp"){ + include(name:"javax/mail/**") + include(name:"javax/servlet/**") + include(name:"org/freehep/**") + include(name:"com/fr/third/JAI/**") + include(name:"com/fr/third/antlr/**") + include(name:"com/fr/third/javax/**") + include(name:"com/sun/xml/**") + include(name:"javax/xml/**") + + } + fileset(dir:"build/classes"){ + include(name:"com/fr/web/*.class") + include(name:"com/fr/web/attr/*.class") + } + } + delete(dir:"./tmp") + def jdk6home= "D:/FineReport/develop/java/jdk1.6u35" + def keystore="frapplet.store" + def keycert="fr.cert" + def keypassword="123456" + def keyalias="fr" + + exec(executable:"${jdk6home}/bin/keytool"){ + arg(line:"-genkey -dname "CN=FineReport L=NanJing C=China" -keystore ${keystore} -alias ${keyalias} -validity 3650 -storepass ${keypassword}") + } + exec(executable:"${jdk6home}/bin/keytool"){ + arg(line:"-export -keystore ${keystore} -alias ${keyalias} -file ${keycert} -storepass ${keypassword}") + } + + exec(executable:"${jdk6home}/bin/jarsigner"){ + arg(line:"-keystore ${keystore} -storepass ${keypassword} 'build/libs/fr-applet-8.0.jar' ${keyalias}") + } + delete(file:"${keystore}") + delete(file:"${keycert}") + delete(dir:"build/classes") + + } + +} \ No newline at end of file diff --git a/designer_base/build.9.0.gradle b/designer_base/build.9.0.gradle new file mode 100644 index 000000000..af0dc75f0 --- /dev/null +++ b/designer_base/build.9.0.gradle @@ -0,0 +1,69 @@ + +apply plugin: 'java' +tasks.withType(JavaCompile){ + options.encoding = 'UTF-8' +} +//指定构建的jdk版本 +sourceCompatibility=1.7 +//指定生成jar包版本 +version='8.0' +//生成jar包重命名 +jar{ + baseName='fr-designer-core' +} + + +def srcDir="." +def baseDir=".." + +//指定源码路径 +sourceSets{ + main{ + java{ + srcDirs=["${srcDir}/src"] + } + } +} +//获取什么分支名 +FileTree files =fileTree(dir:'./',include:'build.*.gradle') +def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf ('\\')) +buildDir=buildDir.substring(0,buildDir.lastIndexOf ('\\')) +def branchName=buildDir.substring(buildDir.lastIndexOf ('\\')+1) + +//声明外部依赖 +dependencies{ + compile fileTree(dir:"../${baseDir}/lib",include:'**/*.jar') + compile fileTree(dir:"../${baseDir}",include:"**/build/libs/*.jar",exclude:"bi/**/*.jar") + testCompile 'junit:junit:4.12' +} +//复制非.java文件到classes文件夹下参与打包 +task copyFile(type:Copy,dependsOn:compileJava){ + copy{ + from ("${srcDir}/src"){ + exclude '**/.setting/**','.classpath','.project','**/*.java','**/*.db','**/*.g','**/package.html' + } + into 'build/classes/main' + } + +} + + +//压缩项目中的js文件 +task compressJS{ + ant.taskdef(name:'yuicompress',classname:'com.yahoo.platform.yui.compressor.YUICompressTask'){ + classpath { + fileset(dir:"../${baseDir}/lib4build",includes:'**/*.jar') + } + } + ant.yuicompress(linebreak:"500",warn:"false", munge:"yes",preserveallsemicolons:"false",charset:"utf-8",encoding:"utf-8",outputfolder:'build/classes/main'){ + fileset (dir:"${srcDir}/src"){ + include (name:'**/*.js') + include (name:'**/*.css') + } + + } +} +jar.dependsOn compressJS + + + diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 7c4847f3c..8bf32d6a3 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -585,3 +585,7 @@ 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_AxisReversed=Axis Reversed +FR-Designer_Logarithmic=Logarithmic +FR-Designer_Chart_Log_Base=Log Base +FR-Designer_Chart_F_Radar_Axis=Chart_F_Radar_Axis diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index fab277ad6..ae93b97f3 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -586,3 +586,7 @@ 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_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 diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index 4d68093c7..1b1c1a6c0 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -556,3 +556,7 @@ FR-Designer-Move_Tab_First= 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 diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index 14086e881..9df9125a9 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -553,3 +553,7 @@ FR-Designer-Move_Tab_First= 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 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 5139b301f..7c3917275 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -590,3 +590,7 @@ 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 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 10edd2d16..8693d716e 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -578,3 +578,7 @@ 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 diff --git a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java index 17509bd52..2375eb4e6 100644 --- a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java +++ b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java @@ -30,10 +30,6 @@ public class MinMaxValuePane extends JPanel { protected UICheckBox isCustomSecUnitBox; protected UITextField secUnitField; - protected double p = TableLayout.PREFERRED; - protected double f = TableLayout.FILL; - protected double[] columnSize = {p, f}; - protected double[] rowSize = {p, p, p, p}; public MinMaxValuePane() { minCheckBox = new UICheckBox(Inter.getLocText(new String[]{"Custom", "Min_Value"})); @@ -45,14 +41,19 @@ public class MinMaxValuePane extends JPanel { isCustomSecUnitBox = new UICheckBox(Inter.getLocText("FR-Chart_SecondGraduationUnit")); secUnitField = new UITextField(6); + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double[] columnSize = {p, f}; + Component[][] components = getPanelComponents(); - JPanel panel = TableLayoutHelper.createTableLayoutPane(components, getRowSize(), columnSize); + JPanel panel = TableLayoutHelper.createTableLayoutPane(components, getRowSize(p), columnSize); this.setLayout(new BorderLayout()); this.add(panel, BorderLayout.CENTER); addComponentListener(components); } - public double[] getRowSize() { + public double[] getRowSize(double p) { + double[] rowSize = {p, p, p, p}; return rowSize; } diff --git a/designer_chart/src/com/fr/design/chart/fun/CustomIndepentChartUIProvider.java b/designer_chart/src/com/fr/design/chart/fun/CustomIndepentChartUIProvider.java new file mode 100644 index 000000000..1ee82df45 --- /dev/null +++ b/designer_chart/src/com/fr/design/chart/fun/CustomIndepentChartUIProvider.java @@ -0,0 +1,87 @@ +package com.fr.design.chart.fun; + +import com.fr.chart.chartattr.Plot; +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.condition.ConditionAttributesPane; +import com.fr.design.gui.frpane.AttributeChangeListener; +import com.fr.design.mainframe.chart.AbstractChartAttrPane; +import com.fr.design.mainframe.chart.gui.ChartDataPane; +import com.fr.design.mainframe.chart.gui.ChartStylePane; +import com.fr.design.mainframe.chart.gui.data.report.AbstractReportDataContentPane; +import com.fr.design.mainframe.chart.gui.data.table.AbstractTableDataContentPane; +import com.fr.design.mainframe.chart.gui.type.AbstractChartTypePane; + +/** + * Created by mengao on 2017/3/29. + */ +public interface CustomIndepentChartUIProvider { + + String XML_TAG = "CustomIndepentChartUIProvider"; + + int CURRENT_API_LEVEL = 3; + + /** + * 图表的类型定义界面类型,就是属性表的第一个界面 + * + * @return 图表的类型定义界面类型 + */ + AbstractChartTypePane getPlotTypePane(); + + /** + * 数据集数据源的界面 + * + * @return 数据集数据源的界面 + */ + AbstractTableDataContentPane getTableDataSourcePane(Plot plot, ChartDataPane parent); + + + /** + * 单元格数据源的界面 + * + * @return 单元格数据源的界面 + */ + AbstractReportDataContentPane getReportDataSourcePane(Plot plot, ChartDataPane parent); + + /** + * 条件属性界面 + * + * @return 条件属性界面 + */ + ConditionAttributesPane getPlotConditionPane(Plot plot); + + /** + * 系列界面 + * + * @return 系列界面 + */ + BasicBeanPane getPlotSeriesPane(ChartStylePane parent, Plot plot); + + + /** + * 图表的属性界面数组 + * + * @return 属性界面 + */ + AbstractChartAttrPane[] getAttrPaneArray(AttributeChangeListener listener); + + ChartDataPane getChartDataPane(AttributeChangeListener listener); + + /** + * 是否使用默认的界面,为了避免界面来回切换 + * + * @return 是否使用默认的界面 + */ + boolean isUseDefaultPane(); + + /** + * 图标路径 + * + * @return 图标路径 + */ + String getIconPath(); + + /** + * plot面板的标题 + */ + String getPlotTypeTitle4PopupWindow(); +} diff --git a/designer_form/build.9.0.gradle b/designer_form/build.9.0.gradle new file mode 100644 index 000000000..5c14f78a4 --- /dev/null +++ b/designer_form/build.9.0.gradle @@ -0,0 +1,70 @@ + +apply plugin: 'java' +tasks.withType(JavaCompile){ + options.encoding = 'UTF-8' +} +//指定构建的jdk版本 +sourceCompatibility=1.7 +//指定生成jar包版本 +version='8.0' +//生成jar包重命名 +jar{ + baseName='fr-designer-report' +} + + +def srcDir="." +def baseDir=".." + +//指定源码路径 +sourceSets{ + main{ + java{ + srcDirs=["${srcDir}/src", + "${srcDir}/../designer/src"] + } + } +} +//获取什么分支名 +FileTree files =fileTree(dir:'./',include:'build.*.gradle') +def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf ('\\')) +buildDir=buildDir.substring(0,buildDir.lastIndexOf ('\\')) +def branchName=buildDir.substring(buildDir.lastIndexOf ('\\')+1) + +//声明外部依赖 +dependencies{ + compile fileTree(dir:"../${baseDir}/lib",include:'**/*.jar') + compile fileTree(dir:"../${baseDir}",include:"**/build/libs/*.jar",exclude:"bi/**/*.jar") + testCompile 'junit:junit:4.12' +} +//复制非.java文件到classes文件夹下参与打包 +task copyFile(type:Copy,dependsOn:compileJava){ + copy{ + from ("${srcDir}/src"){ + exclude '**/.setting/**','.classpath','.project','**/*.java','**/*.db','**/*.g','**/package.html' + } + into 'build/classes/main' + } + +} + + +//压缩项目中的js文件 +task compressJS{ + ant.taskdef(name:'yuicompress',classname:'com.yahoo.platform.yui.compressor.YUICompressTask'){ + classpath { + fileset(dir:"../${baseDir}/lib4build",includes:'**/*.jar') + } + } + ant.yuicompress(linebreak:"500",warn:"false", munge:"yes",preserveallsemicolons:"false",charset:"utf-8",encoding:"utf-8",outputfolder:'build/classes/main'){ + fileset (dir:"${srcDir}/src"){ + include (name:'**/*.js') + include (name:'**/*.css') + } + + } +} +jar.dependsOn compressJS + + + diff --git a/designer_form/src/com/fr/design/mainframe/ElementCaseThumbnail.java b/designer_form/src/com/fr/design/mainframe/ElementCaseThumbnail.java new file mode 100644 index 000000000..107b6f3e3 --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/ElementCaseThumbnail.java @@ -0,0 +1,17 @@ +package com.fr.design.mainframe; + +//import com.fr.form.stable.fun.AbstractECThumbnailProcessor; +/** + * 报表块缩略图处理 + * 从xml中读取缩略图 + * Created by zhouping on 2017/2/22. + */ +//public class ElementCaseThumbnail extends AbstractECThumbnailProcessor { +// public ElementCaseThumbnail(){ +// } +// +// @Override +// public Image readThumbnail(XMLableReader reader) { +// return GeneralXMLTools.readImage(reader); +// } +//} From 139b3b89e24e57e2bcdf663e1b1940bfbafbe6d8 Mon Sep 17 00:00:00 2001 From: plough Date: Thu, 6 Apr 2017 14:45:08 +0800 Subject: [PATCH 246/343] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/templateinfo/TemplateInfoCollector.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java index 1b57c21fa..37446b3d3 100644 --- a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java @@ -243,7 +243,7 @@ public class TemplateInfoCollector implements Serializable { FRLogger.getLogger().info("successfully send " + templateInfo.get("templateID")); removeFromTemplateInfoList(templateInfo.get("templateID")); } else { - FRLogger.getLogger().info("模板数据发送服务器失败,下次启动设计器时再尝试:" + templateInfo.get("templateID")); + FRLogger.getLogger().info("send template info failed, will try next time, " + templateInfo.get("templateID")); } } saveInfo(); From 7660db78bb2d95762d7eda0b6add6ba7b8bab363 Mon Sep 17 00:00:00 2001 From: mengao <283296419@qq.com> Date: Thu, 6 Apr 2017 14:47:55 +0800 Subject: [PATCH 247/343] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=9B=BD=E9=99=85?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/build.9.0.gradle | 69 --------------------------------- designer_form/build.9.0.gradle | 70 ---------------------------------- 2 files changed, 139 deletions(-) delete mode 100644 designer_base/build.9.0.gradle delete mode 100644 designer_form/build.9.0.gradle diff --git a/designer_base/build.9.0.gradle b/designer_base/build.9.0.gradle deleted file mode 100644 index af0dc75f0..000000000 --- a/designer_base/build.9.0.gradle +++ /dev/null @@ -1,69 +0,0 @@ - -apply plugin: 'java' -tasks.withType(JavaCompile){ - options.encoding = 'UTF-8' -} -//指定构建的jdk版本 -sourceCompatibility=1.7 -//指定生成jar包版本 -version='8.0' -//生成jar包重命名 -jar{ - baseName='fr-designer-core' -} - - -def srcDir="." -def baseDir=".." - -//指定源码路径 -sourceSets{ - main{ - java{ - srcDirs=["${srcDir}/src"] - } - } -} -//获取什么分支名 -FileTree files =fileTree(dir:'./',include:'build.*.gradle') -def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf ('\\')) -buildDir=buildDir.substring(0,buildDir.lastIndexOf ('\\')) -def branchName=buildDir.substring(buildDir.lastIndexOf ('\\')+1) - -//声明外部依赖 -dependencies{ - compile fileTree(dir:"../${baseDir}/lib",include:'**/*.jar') - compile fileTree(dir:"../${baseDir}",include:"**/build/libs/*.jar",exclude:"bi/**/*.jar") - testCompile 'junit:junit:4.12' -} -//复制非.java文件到classes文件夹下参与打包 -task copyFile(type:Copy,dependsOn:compileJava){ - copy{ - from ("${srcDir}/src"){ - exclude '**/.setting/**','.classpath','.project','**/*.java','**/*.db','**/*.g','**/package.html' - } - into 'build/classes/main' - } - -} - - -//压缩项目中的js文件 -task compressJS{ - ant.taskdef(name:'yuicompress',classname:'com.yahoo.platform.yui.compressor.YUICompressTask'){ - classpath { - fileset(dir:"../${baseDir}/lib4build",includes:'**/*.jar') - } - } - ant.yuicompress(linebreak:"500",warn:"false", munge:"yes",preserveallsemicolons:"false",charset:"utf-8",encoding:"utf-8",outputfolder:'build/classes/main'){ - fileset (dir:"${srcDir}/src"){ - include (name:'**/*.js') - include (name:'**/*.css') - } - - } -} -jar.dependsOn compressJS - - - diff --git a/designer_form/build.9.0.gradle b/designer_form/build.9.0.gradle deleted file mode 100644 index 5c14f78a4..000000000 --- a/designer_form/build.9.0.gradle +++ /dev/null @@ -1,70 +0,0 @@ - -apply plugin: 'java' -tasks.withType(JavaCompile){ - options.encoding = 'UTF-8' -} -//指定构建的jdk版本 -sourceCompatibility=1.7 -//指定生成jar包版本 -version='8.0' -//生成jar包重命名 -jar{ - baseName='fr-designer-report' -} - - -def srcDir="." -def baseDir=".." - -//指定源码路径 -sourceSets{ - main{ - java{ - srcDirs=["${srcDir}/src", - "${srcDir}/../designer/src"] - } - } -} -//获取什么分支名 -FileTree files =fileTree(dir:'./',include:'build.*.gradle') -def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf ('\\')) -buildDir=buildDir.substring(0,buildDir.lastIndexOf ('\\')) -def branchName=buildDir.substring(buildDir.lastIndexOf ('\\')+1) - -//声明外部依赖 -dependencies{ - compile fileTree(dir:"../${baseDir}/lib",include:'**/*.jar') - compile fileTree(dir:"../${baseDir}",include:"**/build/libs/*.jar",exclude:"bi/**/*.jar") - testCompile 'junit:junit:4.12' -} -//复制非.java文件到classes文件夹下参与打包 -task copyFile(type:Copy,dependsOn:compileJava){ - copy{ - from ("${srcDir}/src"){ - exclude '**/.setting/**','.classpath','.project','**/*.java','**/*.db','**/*.g','**/package.html' - } - into 'build/classes/main' - } - -} - - -//压缩项目中的js文件 -task compressJS{ - ant.taskdef(name:'yuicompress',classname:'com.yahoo.platform.yui.compressor.YUICompressTask'){ - classpath { - fileset(dir:"../${baseDir}/lib4build",includes:'**/*.jar') - } - } - ant.yuicompress(linebreak:"500",warn:"false", munge:"yes",preserveallsemicolons:"false",charset:"utf-8",encoding:"utf-8",outputfolder:'build/classes/main'){ - fileset (dir:"${srcDir}/src"){ - include (name:'**/*.js') - include (name:'**/*.css') - } - - } -} -jar.dependsOn compressJS - - - From ae6c1291eb37d219fc45f1cb7f3aed2d6d74dbaa Mon Sep 17 00:00:00 2001 From: mengao <283296419@qq.com> Date: Thu, 6 Apr 2017 14:50:03 +0800 Subject: [PATCH 248/343] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=9B=BD=E9=99=85?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.9.0.gradle | 75 ------------------------------------------------ 1 file changed, 75 deletions(-) delete mode 100644 build.9.0.gradle diff --git a/build.9.0.gradle b/build.9.0.gradle deleted file mode 100644 index 132db468f..000000000 --- a/build.9.0.gradle +++ /dev/null @@ -1,75 +0,0 @@ -apply plugin: "java" -tasks.withType(JavaCompile){ - options.encoding = "UTF-8" -} - -def basicDir="../" -def libDir="${basicDir}/lib" - -task appletJar<<{ - ant{ - mkdir(dir:"./tmp") - mkdir(dir:"build/classes/main") - copy(todir:"build/classes/"){ - fileset(dir:"${basicDir}/core/build/classes/main") - fileset(dir:"${basicDir}/chart/build/classes/main") - fileset(dir:"${basicDir}/report/build/classes/main") - fileset(dir:"${basicDir}/platform/build/classes/main") - } - unjar(src:"${libDir}/3rd.jar",dest:"./tmp") - unjar(src:"${libDir}/servlet-api.jar",dest:"./tmp") - jar(jarfile:"build/libs/fr-applet-8.0.jar"){ - fileset(dir:"build/classes"){ - exclude(name:"*.*") - exclude(name:"bin/*.*") - exclude(name:"classes/**") - exclude(name:"com/fr/schedule/**") - exclude(name:"com/fr/cell/**") - exclude(name:"com/fr/dialog/**") - exclude(name:"com/fr/view/**") - exclude(name:"com/fr/web/**") - exclude(name:"com/fr/fs/**") - exclude(name:"com/fr/design/**") - exclude(name:"com/fr/start/**") - exclude(name:"com/fr/process/**") - } - fileset(dir:"./tmp"){ - include(name:"javax/mail/**") - include(name:"javax/servlet/**") - include(name:"org/freehep/**") - include(name:"com/fr/third/JAI/**") - include(name:"com/fr/third/antlr/**") - include(name:"com/fr/third/javax/**") - include(name:"com/sun/xml/**") - include(name:"javax/xml/**") - - } - fileset(dir:"build/classes"){ - include(name:"com/fr/web/*.class") - include(name:"com/fr/web/attr/*.class") - } - } - delete(dir:"./tmp") - def jdk6home= "D:/FineReport/develop/java/jdk1.6u35" - def keystore="frapplet.store" - def keycert="fr.cert" - def keypassword="123456" - def keyalias="fr" - - exec(executable:"${jdk6home}/bin/keytool"){ - arg(line:"-genkey -dname "CN=FineReport L=NanJing C=China" -keystore ${keystore} -alias ${keyalias} -validity 3650 -storepass ${keypassword}") - } - exec(executable:"${jdk6home}/bin/keytool"){ - arg(line:"-export -keystore ${keystore} -alias ${keyalias} -file ${keycert} -storepass ${keypassword}") - } - - exec(executable:"${jdk6home}/bin/jarsigner"){ - arg(line:"-keystore ${keystore} -storepass ${keypassword} 'build/libs/fr-applet-8.0.jar' ${keyalias}") - } - delete(file:"${keystore}") - delete(file:"${keycert}") - delete(dir:"build/classes") - - } - -} \ No newline at end of file From 8d16643d8748aef0fe12acd3cea6a1ef37f3d3c1 Mon Sep 17 00:00:00 2001 From: mengao <283296419@qq.com> Date: Thu, 6 Apr 2017 14:54:19 +0800 Subject: [PATCH 249/343] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=9B=BD=E9=99=85?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/ElementCaseThumbnail.java | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100644 designer_form/src/com/fr/design/mainframe/ElementCaseThumbnail.java diff --git a/designer_form/src/com/fr/design/mainframe/ElementCaseThumbnail.java b/designer_form/src/com/fr/design/mainframe/ElementCaseThumbnail.java deleted file mode 100644 index 107b6f3e3..000000000 --- a/designer_form/src/com/fr/design/mainframe/ElementCaseThumbnail.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.fr.design.mainframe; - -//import com.fr.form.stable.fun.AbstractECThumbnailProcessor; -/** - * 报表块缩略图处理 - * 从xml中读取缩略图 - * Created by zhouping on 2017/2/22. - */ -//public class ElementCaseThumbnail extends AbstractECThumbnailProcessor { -// public ElementCaseThumbnail(){ -// } -// -// @Override -// public Image readThumbnail(XMLableReader reader) { -// return GeneralXMLTools.readImage(reader); -// } -//} From fd561ac02bd77adf1be443b8e728b28888d00ef6 Mon Sep 17 00:00:00 2001 From: mengao <283296419@qq.com> Date: Thu, 6 Apr 2017 14:59:13 +0800 Subject: [PATCH 250/343] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=9B=BD=E9=99=85?= =?UTF-8?q?=E5=8C=96=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fun/CustomIndepentChartUIProvider.java | 87 ------------------- 1 file changed, 87 deletions(-) delete mode 100644 designer_chart/src/com/fr/design/chart/fun/CustomIndepentChartUIProvider.java diff --git a/designer_chart/src/com/fr/design/chart/fun/CustomIndepentChartUIProvider.java b/designer_chart/src/com/fr/design/chart/fun/CustomIndepentChartUIProvider.java deleted file mode 100644 index 1ee82df45..000000000 --- a/designer_chart/src/com/fr/design/chart/fun/CustomIndepentChartUIProvider.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.fr.design.chart.fun; - -import com.fr.chart.chartattr.Plot; -import com.fr.design.beans.BasicBeanPane; -import com.fr.design.condition.ConditionAttributesPane; -import com.fr.design.gui.frpane.AttributeChangeListener; -import com.fr.design.mainframe.chart.AbstractChartAttrPane; -import com.fr.design.mainframe.chart.gui.ChartDataPane; -import com.fr.design.mainframe.chart.gui.ChartStylePane; -import com.fr.design.mainframe.chart.gui.data.report.AbstractReportDataContentPane; -import com.fr.design.mainframe.chart.gui.data.table.AbstractTableDataContentPane; -import com.fr.design.mainframe.chart.gui.type.AbstractChartTypePane; - -/** - * Created by mengao on 2017/3/29. - */ -public interface CustomIndepentChartUIProvider { - - String XML_TAG = "CustomIndepentChartUIProvider"; - - int CURRENT_API_LEVEL = 3; - - /** - * 图表的类型定义界面类型,就是属性表的第一个界面 - * - * @return 图表的类型定义界面类型 - */ - AbstractChartTypePane getPlotTypePane(); - - /** - * 数据集数据源的界面 - * - * @return 数据集数据源的界面 - */ - AbstractTableDataContentPane getTableDataSourcePane(Plot plot, ChartDataPane parent); - - - /** - * 单元格数据源的界面 - * - * @return 单元格数据源的界面 - */ - AbstractReportDataContentPane getReportDataSourcePane(Plot plot, ChartDataPane parent); - - /** - * 条件属性界面 - * - * @return 条件属性界面 - */ - ConditionAttributesPane getPlotConditionPane(Plot plot); - - /** - * 系列界面 - * - * @return 系列界面 - */ - BasicBeanPane getPlotSeriesPane(ChartStylePane parent, Plot plot); - - - /** - * 图表的属性界面数组 - * - * @return 属性界面 - */ - AbstractChartAttrPane[] getAttrPaneArray(AttributeChangeListener listener); - - ChartDataPane getChartDataPane(AttributeChangeListener listener); - - /** - * 是否使用默认的界面,为了避免界面来回切换 - * - * @return 是否使用默认的界面 - */ - boolean isUseDefaultPane(); - - /** - * 图标路径 - * - * @return 图标路径 - */ - String getIconPath(); - - /** - * plot面板的标题 - */ - String getPlotTypeTitle4PopupWindow(); -} From c19c243a73470b5d3298e87f6b122e9fe13ec482 Mon Sep 17 00:00:00 2001 From: plough Date: Thu, 6 Apr 2017 15:43:45 +0800 Subject: [PATCH 251/343] =?UTF-8?q?REPORT-1916=20=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E8=80=97=E6=97=B6=3D=E3=80=8B=E8=B0=83=E6=95=B4=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../templateinfo/JWorkBookProcessInfo.java | 1 - .../com/fr/design/mainframe/JTemplate.java | 111 +++++++++--------- .../templateinfo/TemplateInfoCollector.java | 42 +++++-- .../templateinfo/JFormProcessInfo.java | 0 4 files changed, 88 insertions(+), 66 deletions(-) rename {designer_base => designer}/src/com/fr/design/mainframe/templateinfo/JWorkBookProcessInfo.java (98%) rename {designer_base => designer_form}/src/com/fr/design/mainframe/templateinfo/JFormProcessInfo.java (100%) diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/JWorkBookProcessInfo.java b/designer/src/com/fr/design/mainframe/templateinfo/JWorkBookProcessInfo.java similarity index 98% rename from designer_base/src/com/fr/design/mainframe/templateinfo/JWorkBookProcessInfo.java rename to designer/src/com/fr/design/mainframe/templateinfo/JWorkBookProcessInfo.java index 44522b856..bf5d835d2 100644 --- a/designer_base/src/com/fr/design/mainframe/templateinfo/JWorkBookProcessInfo.java +++ b/designer/src/com/fr/design/mainframe/templateinfo/JWorkBookProcessInfo.java @@ -1,6 +1,5 @@ package com.fr.design.mainframe.templateinfo; -import com.fr.base.io.IOFile; import com.fr.base.parameter.ParameterUI; import com.fr.main.impl.WorkBook; import com.fr.report.cellcase.CellCase; diff --git a/designer_base/src/com/fr/design/mainframe/JTemplate.java b/designer_base/src/com/fr/design/mainframe/JTemplate.java index b0b9f7b5a..48371c787 100644 --- a/designer_base/src/com/fr/design/mainframe/JTemplate.java +++ b/designer_base/src/com/fr/design/mainframe/JTemplate.java @@ -85,7 +85,7 @@ public abstract class JTemplate> ex public JTemplate(T t, String defaultFileName) { this(t, new MemFILE(newTemplateNameByIndex(defaultFileName)), true); - initForCollect(); + openTime = System.currentTimeMillis(); } public JTemplate(T t, FILE file) { @@ -111,14 +111,15 @@ public abstract class JTemplate> ex // 为收集模版信息作准备 private void initForCollect() { - if (template.getTemplateID() == null) { - template.initTemplateID(); // 为新模板设置 templateID 属性 - } + template.initTemplateID(); // 为新模板设置 templateID 属性 if (openTime == 0) { openTime = System.currentTimeMillis(); } } private void collectInfo() { // 执行收集操作 + if (openTime == 0) { // 旧模板,不收集数据 + return; + } long saveTime = System.currentTimeMillis(); // 保存模板的时间点 tic.collectInfo(template, this, openTime, saveTime); openTime = saveTime; // 更新 openTime,准备下一次计算 @@ -371,7 +372,7 @@ public abstract class JTemplate> ex } protected boolean accept(Object o){ - return true; + return true; } private void fireSuperTargetModified() { @@ -487,15 +488,15 @@ public abstract class JTemplate> ex collectInfo(); return this.saveFile(); } - + private boolean isCancelOperation(int operation){ - return operation == FILEChooserPane.CANCEL_OPTION || - operation == FILEChooserPane.JOPTIONPANE_CANCEL_OPTION; + return operation == FILEChooserPane.CANCEL_OPTION || + operation == FILEChooserPane.JOPTIONPANE_CANCEL_OPTION; } - + private boolean isOkOperation(int operation){ - return operation == FILEChooserPane.JOPTIONPANE_OK_OPTION || - operation == FILEChooserPane.OK_OPTION; + return operation == FILEChooserPane.JOPTIONPANE_OK_OPTION || + operation == FILEChooserPane.OK_OPTION; } private boolean saveAsTemplate(boolean isShowLoc) { @@ -512,8 +513,8 @@ public abstract class JTemplate> ex if (isCancelOperation(chooseResult)) { fileChooser = null; return false; - } - + } + if (isOkOperation(chooseResult)) { if (!FRContext.getCurrentEnv().hasFileFolderAllow(fileChooser.getSelectedFILE().getPath()) ) { JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText("FR-Designer_No-Privilege") + "!", Inter.getLocText("FR-Designer_Message"), JOptionPane.WARNING_MESSAGE); @@ -523,40 +524,40 @@ public abstract class JTemplate> ex mkNewFile(editingFILE); fileChooser = null; } - + return saveNewFile(editingFILE, oldName); } - + protected boolean saveNewFile(FILE editingFILE, String oldName){ this.editingFILE = editingFILE; boolean result = this.saveFile(); if (result) { DesignerFrameFileDealerPane.getInstance().refresh(); - initForCollect(); // 如果是旧模板另存为新模板,则添加 templateID + initForCollect(); // 如果保存新模板(新建模板直接保存,或者另存为),则添加 templateID collectInfo(); } //更换最近打开 DesignerEnvManager.getEnvManager().replaceRecentOpenedFilePath(oldName, this.getFullPathName()); return result; } - + protected void mkNewFile(FILE file){ try { - file.mkfile(); + file.mkfile(); } catch (Exception e) { FRContext.getLogger().error(e.getMessage(), e); } } - + /** - * 将模板另存为可以分享出去的混淆后内置数据集模板 - * - * @return 是否另存成功 - * - */ + * 将模板另存为可以分享出去的混淆后内置数据集模板 + * + * @return 是否另存成功 + * + */ public boolean saveShareFile(){ - return true; + return true; } public Widget getSelectElementCase(){ return new NoneWidget(); @@ -761,7 +762,7 @@ public abstract class JTemplate> ex public void revert() { } - + private int getVersionCompare(String versionString){ if (StringUtils.isBlank(versionString)) { return 0; @@ -771,7 +772,7 @@ public abstract class JTemplate> ex return ComparatorUtils.compare(versionString.substring(0, len), ProductConstants.DESIGNER_VERSION.substring(0, len)); } - + private int getVersionCompareHBB(String versionString){ if (StringUtils.isBlank(versionString)) { return 0; @@ -779,17 +780,17 @@ public abstract class JTemplate> ex return ComparatorUtils.compare(versionString, "HBB"); } - + private boolean isHigherThanCurrent(String versionString) { return getVersionCompare(versionString) > 0; } - + private boolean isLowerThanCurrent(String versionString) { - return getVersionCompare(versionString) < 0; + return getVersionCompare(versionString) < 0; } - + private boolean isLowerThanHBB(String versionString) { - return getVersionCompareHBB(versionString) < 0; + return getVersionCompareHBB(versionString) < 0; } /** @@ -799,7 +800,7 @@ public abstract class JTemplate> ex public boolean isNewDesigner() { String xmlDesignerVersion = getTarget().getXMLDesignerVersion(); if (isLowerThanHBB(xmlDesignerVersion)) { - String info = Inter.getLocText("FR-Designer_open-new-form-tip"); + String info = Inter.getLocText("FR-Designer_open-new-form-tip"); String moreInfo = Inter.getLocText("FR-Designer_Server-version-tip-moreInfo"); new InformationWarnPane(info, moreInfo, Inter.getLocText("FR-Designer_Tooltips")).show(); return true; @@ -853,13 +854,13 @@ public abstract class JTemplate> ex * @return 是则返回true */ public abstract boolean isJWorkBook(); - + /** * 返回当前支持的超链界面pane * @return 超链连接界面 */ public HyperlinkGroupPane getHyperLinkPane() { - return new HyperlinkGroupPane(); + return new HyperlinkGroupPane(); } /** @@ -914,29 +915,29 @@ public abstract class JTemplate> ex public void requestGridFocus() { } - + /** - * 创建内置sql提交的pane - * - * @return 内置sql提交的pane - * - * - * @date 2014-10-14-下午7:39:27 - */ + * 创建内置sql提交的pane + * + * @return 内置sql提交的pane + * + * + * @date 2014-10-14-下午7:39:27 + */ public DBManipulationPane createDBManipulationPane(){ - return new DBManipulationPane(); + return new DBManipulationPane(); } - + /** * 创建控件事件里内置sql提交的pane - * + * * @return 内置sql提交的pane - * + * * * @date 2014-10-14-下午7:39:27 */ public DBManipulationPane createDBManipulationPaneInWidget(){ - return new DBManipulationInWidgetEventPane(); + return new DBManipulationInWidgetEventPane(); } /** @@ -964,15 +965,15 @@ public abstract class JTemplate> ex public void styleChange(){ } - + /** - * 创建分享模板的按钮, 目前只有jworkbook实现了 - * - * @return 分享模板按钮 - * - */ + * 创建分享模板的按钮, 目前只有jworkbook实现了 + * + * @return 分享模板按钮 + * + */ public UIButton[] createShareButton(){ - return new UIButton[0]; + return new UIButton[0]; } /** diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java index 4f7069205..37446b3d3 100644 --- a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java @@ -5,6 +5,7 @@ import com.fr.base.io.IOFile; import com.fr.design.DesignerEnvManager; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.JTemplate; +import com.fr.env.RemoteEnv; import com.fr.general.ComparatorUtils; import com.fr.general.FRLogger; import com.fr.general.GeneralUtils; @@ -15,9 +16,7 @@ import org.json.JSONObject; import java.io.*; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.HashMap; +import java.util.*; /** * 做模板的过程和耗时收集,辅助类 @@ -70,18 +69,28 @@ public class TemplateInfoCollector implements Serializable { } catch (FileNotFoundException ex) { // 如果之前没有存储过,则创建新对象 instance = new TemplateInfoCollector(); - } catch (Exception ex) { + } catch (InvalidClassException ex) { + // 如果 TemplateInfoCollecor 类结构有改动,则放弃之前收集的数据(下次保存时覆盖) + // 这种情况主要在开发、测试过程中遇到,正式上线后不应该出现 + FRLogger.getLogger().error(ex.getMessage()); + FRLogger.getLogger().info("use a new instance"); + instance = new TemplateInfoCollector(); + } + catch (Exception ex) { FRLogger.getLogger().error(ex.getMessage(), ex); } } return instance; } - private static boolean shouldCollectInfo() { + private boolean shouldCollectInfo() { + if (FRContext.getCurrentEnv() instanceof RemoteEnv) { // 远程设计不收集数据 + return false; + } return DesignerEnvManager.getEnvManager().isJoinProductImprove() && FRContext.isChineseEnv(); } - public static void appendProcess(String log) { + public void appendProcess(String log) { if (!shouldCollectInfo()) { return; } @@ -113,7 +122,14 @@ public class TemplateInfoCollector implements Serializable { private void saveInfo() { try { ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(getInfoFile())); - FRLogger.getLogger().info("writing: " + instance.templateInfoList); + String log = ""; + int count = 1; + for (String key : templateInfoList.keySet()) { + String createTime = ((HashMap)templateInfoList.get(key).get("consumingMap")).get("create_time").toString(); + log += (count + ". id: " + key + " " + createTime + "\n" + templateInfoList.get(key).toString() + "\n"); + count ++; + } + FRLogger.getLogger().info("writing tplInfo: \n" + log); os.writeObject(instance); os.close(); } catch (Exception ex) { @@ -225,7 +241,9 @@ public class TemplateInfoCollector implements Serializable { if (sendSingleTemplateInfo(consumingUrl, jsonConsumingMap) && sendSingleTemplateInfo(processUrl, jsonProcessMap)) { // 清空记录 FRLogger.getLogger().info("successfully send " + templateInfo.get("templateID")); - templateInfoList.remove(templateInfo.get("templateID")); + removeFromTemplateInfoList(templateInfo.get("templateID")); + } else { + FRLogger.getLogger().info("send template info failed, will try next time, " + templateInfo.get("templateID")); } } saveInfo(); @@ -277,12 +295,16 @@ public class TemplateInfoCollector implements Serializable { } // 删除测试模板 for (String key : testTemplateKeys) { - templateInfoList.remove(key); -// System.out.println(key + " is removed..."); + removeFromTemplateInfoList(key); } return completeTemplatesInfo; } + private void removeFromTemplateInfoList(String key) { + templateInfoList.remove(key); + FRLogger.getLogger().info(key + " is removed..."); + } + @SuppressWarnings("unchecked") private boolean isTestTemplate(HashMap templateInfo) { HashMap processMap = (HashMap) templateInfo.get("processMap"); diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/JFormProcessInfo.java b/designer_form/src/com/fr/design/mainframe/templateinfo/JFormProcessInfo.java similarity index 100% rename from designer_base/src/com/fr/design/mainframe/templateinfo/JFormProcessInfo.java rename to designer_form/src/com/fr/design/mainframe/templateinfo/JFormProcessInfo.java From 7d9891e3574997ead204235878cab8bc26f8fc98 Mon Sep 17 00:00:00 2001 From: mengao <283296419@qq.com> Date: Thu, 6 Apr 2017 17:10:45 +0800 Subject: [PATCH 252/343] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=9B=BD=E9=99=85?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/locale/designer.properties | 4 ++++ .../src/com/fr/design/locale/designer_en_US.properties | 4 ++++ .../src/com/fr/design/locale/designer_ja_JP.properties | 4 ++++ .../src/com/fr/design/locale/designer_ko_KR.properties | 4 ++++ .../src/com/fr/design/locale/designer_zh_CN.properties | 4 ++++ .../src/com/fr/design/locale/designer_zh_TW.properties | 4 ++++ 6 files changed, 24 insertions(+) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 7c4847f3c..829309187 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -585,3 +585,7 @@ 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_AxisReversed=AxisValue +FR-Designer_Logarithmic=Logarithmic +FR-Designer_Chart_Log_Base=Log Base +FR-Designer_Chart_F_Radar_Axis=Chart_F_Radar_Axis \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index fab277ad6..6f602ec4e 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -586,3 +586,7 @@ 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_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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index 4d68093c7..23285ba1d 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -556,3 +556,7 @@ FR-Designer-Move_Tab_First= 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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index 14086e881..0c798b87a 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -553,3 +553,7 @@ FR-Designer-Move_Tab_First= 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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 5139b301f..7c3917275 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -590,3 +590,7 @@ 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 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 10edd2d16..aeb941114 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -578,3 +578,7 @@ 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 \ No newline at end of file From d87f31dc187f4fd9a803306b895815a075452bb0 Mon Sep 17 00:00:00 2001 From: mengao <283296419@qq.com> Date: Thu, 6 Apr 2017 19:18:32 +0800 Subject: [PATCH 253/343] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/chart/axis/MinMaxValuePane.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java index 2375eb4e6..0c61e64f3 100644 --- a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java +++ b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java @@ -52,9 +52,8 @@ public class MinMaxValuePane extends JPanel { addComponentListener(components); } - public double[] getRowSize(double p) { - double[] rowSize = {p, p, p, p}; - return rowSize; + protected double[] getRowSize(double p) { + return new double[]{p, p, p, p}; } public void addComponentListener(Component[][] components) { From 4d9a3f4d8e0699c551329ba70019bcbc4f8755cc Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Fri, 7 Apr 2017 09:44:12 +0800 Subject: [PATCH 254/343] =?UTF-8?q?=E7=BC=96=E8=AF=91=E7=AD=89=E7=BA=A7?= =?UTF-8?q?=E4=B8=BA1.7=20=E9=9B=86=E5=90=88=E4=BD=9C=E4=B8=BA=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E9=9C=80=E6=8C=87=E6=98=8E=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/mainframe/FormSelectionUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java index 3230cd560..79f52519e 100644 --- a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java +++ b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java @@ -192,7 +192,7 @@ public class FormSelectionUtils { if (selectWidgets != null) { selectionWidget.addAll(Arrays.asList(selectWidgets)); } - return FormSelectionUtils.rebuildSelection(rootComponent, selectionWidget, new ArrayList<>()); + return FormSelectionUtils.rebuildSelection(rootComponent, selectionWidget, new ArrayList()); } private static ArrayList rebuildSelection(XCreator rootComponent, List selectionWidget, From 4b04b8e018914bf226baf93179e7cd1cef43946a Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 7 Apr 2017 11:36:39 +0800 Subject: [PATCH 255/343] =?UTF-8?q?REPORT-1916=20=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E8=80=97=E6=97=B6=3D=E3=80=8B=E7=BB=99TemplateInfoCollector?= =?UTF-8?q?=E5=8A=A0=E4=B8=8AserialVersionUID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/templateinfo/TemplateInfoCollector.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java index 37446b3d3..b9b7aa194 100644 --- a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java @@ -31,6 +31,7 @@ public class TemplateInfoCollector implements Serializable { private static final int VALID_WIDGET_COUNT = 5; // 有效报表模板的控件数 private static final int COMPLETE_DAY_COUNT = 15; // 判断模板是否完成的天数 private static final int ONE_THOUSAND = 1000; + static final long serialVersionUID = 2007L; @SuppressWarnings("unchecked") private TemplateInfoCollector() { @@ -72,7 +73,7 @@ public class TemplateInfoCollector implements Serializable { } catch (InvalidClassException ex) { // 如果 TemplateInfoCollecor 类结构有改动,则放弃之前收集的数据(下次保存时覆盖) // 这种情况主要在开发、测试过程中遇到,正式上线后不应该出现 - FRLogger.getLogger().error(ex.getMessage()); + FRLogger.getLogger().info(ex.getMessage()); FRLogger.getLogger().info("use a new instance"); instance = new TemplateInfoCollector(); } From eb465d65f5fefd70787773ced1a97eecada6476d Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 7 Apr 2017 11:43:29 +0800 Subject: [PATCH 256/343] =?UTF-8?q?REPORT-1916=20=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E8=80=97=E6=97=B6=3D=E3=80=8B=E7=BB=99TemplateInfoCollector?= =?UTF-8?q?=E5=8A=A0=E4=B8=8AserialVersionUID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/templateinfo/TemplateInfoCollector.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java index 37446b3d3..b9b7aa194 100644 --- a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java @@ -31,6 +31,7 @@ public class TemplateInfoCollector implements Serializable { private static final int VALID_WIDGET_COUNT = 5; // 有效报表模板的控件数 private static final int COMPLETE_DAY_COUNT = 15; // 判断模板是否完成的天数 private static final int ONE_THOUSAND = 1000; + static final long serialVersionUID = 2007L; @SuppressWarnings("unchecked") private TemplateInfoCollector() { @@ -72,7 +73,7 @@ public class TemplateInfoCollector implements Serializable { } catch (InvalidClassException ex) { // 如果 TemplateInfoCollecor 类结构有改动,则放弃之前收集的数据(下次保存时覆盖) // 这种情况主要在开发、测试过程中遇到,正式上线后不应该出现 - FRLogger.getLogger().error(ex.getMessage()); + FRLogger.getLogger().info(ex.getMessage()); FRLogger.getLogger().info("use a new instance"); instance = new TemplateInfoCollector(); } From 58fbac4e191af1d56f843ac75f020eba3f405c1c Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Fri, 7 Apr 2017 13:58:25 +0800 Subject: [PATCH 257/343] =?UTF-8?q?report-1945=E7=BB=84=E4=BB=B6=E5=A4=8D?= =?UTF-8?q?=E7=94=A8bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/locale/designer.properties | 2 + .../design/locale/designer_en_US.properties | 2 + .../design/locale/designer_zh_CN.properties | 3 +- .../design/locale/designer_zh_TW.properties | 3 +- .../layout/FRAbsoluteLayoutAdapter.java | 11 +- .../adapters/layout/FRBodyLayoutAdapter.java | 26 +- .../adapters/layout/FRFitLayoutAdapter.java | 2 +- .../layout/FRTabFitLayoutAdapter.java | 15 +- .../designer/beans/models/AddingModel.java | 180 ++--- .../designer/beans/models/SelectionModel.java | 46 +- .../designer/beans/models/StateModel.java | 688 +++++++++--------- .../beans/painters/AbstractPainter.java | 45 +- .../designer/creator/XLayoutContainer.java | 435 +++++------ .../creator/cardlayout/XWCardTagLayout.java | 338 +++++---- .../mainframe/FormCreatorDropTarget.java | 17 +- .../com/fr/design/mainframe/FormDesigner.java | 6 + .../fr/design/mainframe/FormSelection.java | 12 +- .../design/mainframe/FormSelectionUtils.java | 73 +- 18 files changed, 985 insertions(+), 919 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 7c4847f3c..0eda01dee 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -585,3 +585,5 @@ 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_Too_Large_To_Paste=too large to paste +FR-Designer_Too_Small_To_Paste=Too small to paste diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index fab277ad6..0dc0c050f 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -586,3 +586,5 @@ 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_Too_Large_To_Paste=Too large to paste! +FR-Designer_Too_Small_To_Paste=Too small to paste! diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 56e695b2c..563132583 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -585,9 +585,10 @@ FR-Designer_Background_Clear=\u6E05\u9664 FR-Designer_Background_Image_Select=\u9009\u62E9\u56FE\u7247 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_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_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 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index df75494c6..dc9916ab1 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -579,4 +579,5 @@ 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_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 diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java index b8a8e8ad1..603626e13 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java @@ -283,7 +283,6 @@ public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { } else if (isCrossPointArea(parentComp, x, y)) { //交叉区域插入组件时,根据具体位置进行上下或者左右或者相邻三个组件的位置大小插入 fixCrossPointArea(parentComp, child, x, y); - //TODO 尽量不要出现这种写法吧?if else条件要么互斥,要么多个if判断return,不要在一条if else语句里面return吧? return; } else if (isTrisectionArea(parentComp, x, y)) { // 在边界三等分区域,就不再和组件二等分了 @@ -320,17 +319,15 @@ public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { int height = creator.getHeight(); int width = creator.getWidth(); if (x < 0) { - width += x; - x = 0; + x = container.getX(); } else if (x + creator.getWidth() > container.getWidth()) { - width = container.getWidth() - x; + x = container.getWidth() - width; } if (y < 0) { - height += y; - y = 0; + y = container.getY(); } else if (y + creator.getHeight() > container.getHeight()) { - height = container.getHeight() - y; + y = container.getHeight() - height; } creator.setBounds(x, y, width, height); diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRBodyLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRBodyLayoutAdapter.java index b3072667b..75190ba3b 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRBodyLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRBodyLayoutAdapter.java @@ -640,11 +640,7 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter { * 又通过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; - } + y = y + WCardMainBorderLayout.TAB_HEIGHT + this.getParaEditorYOffset(); int tempX = x - rect.x; int tempY = y - rect.y; int containerX = container.getX(); @@ -675,6 +671,26 @@ public class FRBodyLayoutAdapter extends AbstractLayoutAdapter { return position; } + /** + * 获取因为参数面板导致的Y坐标偏移 + * + * @return 参数面板导致的Y坐标偏移 + */ + protected int getParaEditorYOffset() { + int offset = 0; + if (container.getParent() != null) { + Component components[] = container.getParent().getComponents(); + for (Component component : components) { + if (component instanceof XWParameterLayout) { + offset = component.getY() + component.getHeight(); + break; + } + } + } + return offset; + } + + /** * 组件交叉区域进行插入时,调整受到变动的其他组件,之前是交叉区域插入也按照三等分逻辑,后面测试中发现有bug,改为和bi一样的鼠标所在侧平分 * 默认左上角、右下角区域是垂直方向插入组件 diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java index e31ee6a5d..eca82e502 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java @@ -133,7 +133,7 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { isFindRelatedComps = false; //拖入组件判断时,先判断是否为交叉点区域,其次三等分区域,再次平分区域 Component comp = container.getComponentAt(x, y); - if (checkInterval(comp)) { + if (comp == null || checkInterval(comp)) { return false; } //如果当前处于边缘地带, 那么就把他贴到父容器上 diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRTabFitLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRTabFitLayoutAdapter.java index 352a3ba7a..b1ca803c6 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRTabFitLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRTabFitLayoutAdapter.java @@ -7,11 +7,13 @@ package com.fr.design.designer.beans.adapters.layout; import com.fr.design.beans.GroupModel; import com.fr.design.designer.creator.XCreator; 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.cardlayout.XWCardLayout; import com.fr.design.designer.creator.cardlayout.XWCardMainBorderLayout; import com.fr.design.designer.creator.cardlayout.XWTabFitLayout; import com.fr.design.designer.properties.FRTabFitLayoutPropertiesGroupModel; +import com.fr.design.mainframe.widget.editors.ParameterEditor; import com.fr.design.utils.ComponentUtils; import com.fr.form.ui.LayoutBorderStyle; import com.fr.form.ui.container.WBorderLayout; @@ -82,16 +84,14 @@ public class FRTabFitLayoutAdapter extends FRFitLayoutAdapter { return true; } - // tab布局的纵坐标受到tab高度的影响,判断的上边界取得是里面XWTabFitLayout的上边界, - // 实际计算的时候的纵坐标用了外层的CardMainBorerLayout,需要将tab高度减掉 - //将y值变为相对坐标以实现获取到鼠标drop位置的控件 - //TODO 可以直接在这边将x,y都变成相对坐标,这样在后面判断拖进来的新控件放置方式的时候就不用再判断了 + // tab布局的纵坐标受到tab高度以及参数面板高度的影响,判断的上边界取得是里面XWTabFitLayout的上边界, + // 实际计算的时候的纵坐标用了外层的CardMainBorerLayout,需要将tab高度和参数面板高度减掉 + // 将y值变为相对坐标以实现获取到鼠标drop位置的控件 + // TODO 可以直接在这边将x,y都变成相对坐标,这样在后面判断拖进来的新控件放置方式的时候就不用再判断了 private int adjustY(int y, XWTabFitLayout tabLayout) { XWCardLayout cardLayout = (XWCardLayout) tabLayout.getBackupParent(); LayoutBorderStyle style = cardLayout.toData().getBorderStyle(); - if (container.getLocation().y == WBorderLayout.DEFAULT_SIZE) { - y = y - WBorderLayout.DEFAULT_SIZE; - } + y = y - this.getParaEditorYOffset(); if (ComparatorUtils.equals(style.getType(), LayoutBorderStyle.TITLE)) { y = y - WCardMainBorderLayout.TAB_HEIGHT; } @@ -101,4 +101,5 @@ public class FRTabFitLayoutAdapter extends FRFitLayoutAdapter { protected Rectangle getLayoutBound(XWCardMainBorderLayout mainLayout) { return ComponentUtils.getRelativeBounds(mainLayout); } + } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/models/AddingModel.java b/designer_form/src/com/fr/design/designer/beans/models/AddingModel.java index 46798f4d9..54033694d 100644 --- a/designer_form/src/com/fr/design/designer/beans/models/AddingModel.java +++ b/designer_form/src/com/fr/design/designer/beans/models/AddingModel.java @@ -18,116 +18,124 @@ import com.fr.general.ComparatorUtils; */ public class AddingModel { - // 当前要添加的组件 - private XCreator creator; - // 记录当前鼠标的位置信息 - private int current_x; - private int current_y; - private boolean added; - - public AddingModel(FormDesigner designer, XCreator xCreator) { - String creatorName = getXCreatorName(designer, xCreator); - this.creator = xCreator; - instantiateCreator(designer, creatorName); - // 初始的时候隐藏该组件的图标 - current_x = -this.creator.getWidth(); - current_y = -this.creator.getHeight(); - } + // 当前要添加的组件 + private XCreator creator; + // 记录当前鼠标的位置信息 + private int currentX; + private int currentY; + private boolean added; + + public AddingModel(FormDesigner designer, XCreator xCreator) { + String creatorName = getXCreatorName(designer, xCreator); + this.creator = xCreator; + instantiateCreator(designer, creatorName); + // 初始的时候隐藏该组件的图标 + currentY = -this.creator.getWidth(); + currentX = -this.creator.getHeight(); + } /** * 待说明 - * @param designer 设计器 - * @param creatorName 组件名 + * + * @param designer 设计器 + * @param creatorName 组件名 */ - public void instantiateCreator(FormDesigner designer, String creatorName) { - creator.toData().setWidgetName(creatorName); - ComponentAdapter adapter = new CompositeComponentAdapter(designer, creator); - adapter.initialize(); - creator.addNotify(); - creator.putClientProperty(AdapterBus.CLIENT_PROPERTIES, adapter); - } - - public AddingModel(XCreator xCreator, int x, int y) { - this.creator = xCreator; - this.creator.backupCurrentSize(); - this.creator.backupParent(); - this.creator.setSize(xCreator.initEditorSize()); - current_x = x - (xCreator.getWidth() / 2); - current_y = y - (xCreator.getHeight() / 2); - } + public void instantiateCreator(FormDesigner designer, String creatorName) { + creator.toData().setWidgetName(creatorName); + ComponentAdapter adapter = new CompositeComponentAdapter(designer, creator); + adapter.initialize(); + creator.addNotify(); + creator.putClientProperty(AdapterBus.CLIENT_PROPERTIES, adapter); + } + + public AddingModel(XCreator xCreator, int x, int y) { + this.creator = xCreator; + this.creator.backupCurrentSize(); + this.creator.backupParent(); + this.creator.setSize(xCreator.initEditorSize()); + currentX = x - (xCreator.getWidth() / 2); + currentY = y - (xCreator.getHeight() / 2); + } /** * 隐藏当前组件的图标 */ - public void reset() { - current_x = -this.creator.getWidth(); - current_y = -this.creator.getHeight(); - } + public void reset() { + currentX = -this.creator.getWidth(); + currentY = -this.creator.getHeight(); + } - public String getXCreatorName(FormDesigner designer,XCreator x){ - String def= x.createDefaultName(); + public String getXCreatorName(FormDesigner designer, XCreator x) { + String def = x.createDefaultName(); if (x.acceptType(XWParameterLayout.class)) { return def; } - int i = 0; - while (designer.getTarget().isNameExist(def + i)) { - i++; - } - return def+i; - } - - public int getCurrentX() { - return current_x; - } - - public int getCurrentY() { - return current_y; - } + int i = 0; + while (designer.getTarget().isNameExist(def + i)) { + i++; + } + return def + i; + } + + public int getCurrentX() { + return currentX; + } + + public int getCurrentY() { + return currentY; + } /** * 移动组件图标到鼠标事件发生的位置 - * @param x 坐标 - * @param y 坐标 + * + * @param x 坐标 + * @param y 坐标 */ - public void moveTo(int x, int y) { - current_x = x - (this.creator.getWidth() / 2); - current_y = y - (this.creator.getHeight() / 2); - } + public void moveTo(int x, int y) { + currentX = x - (this.creator.getWidth() / 2); + currentY = y - (this.creator.getHeight() / 2); + } - public XCreator getXCreator() { - return this.creator; - } + public XCreator getXCreator() { + return this.creator; + } /** * 当前组件是否已经添加到某个容器中 - * @return 是返回true + * + * @return 是返回true */ - public boolean isCreatorAdded() { - return added; - } + public boolean isCreatorAdded() { + return added; + } /** * 加入容器 - * @param designer 设计器 - * @param container 容器 - * @param x 坐标 - * @param y 坐标 - * @return 成功返回true + * + * @param designer 设计器 + * @param container 容器 + * @param x 坐标 + * @param y 坐标 + * @return 成功返回true */ - public boolean add2Container(FormDesigner designer, XLayoutContainer container, int x, int y) { - //考虑不同布局嵌套的情况,获取顶层容器 - XLayoutContainer xLayoutContainer = container.getTopLayout(); - if(xLayoutContainer != null && xLayoutContainer.acceptType(XWAbsoluteLayout.class)){ - container = xLayoutContainer; - } - - Rectangle rect = ComponentUtils.getRelativeBounds(container); - if(!ComparatorUtils.equals(container.getOuterLayout(), container.getBackupParent())){ - return added = container.getLayoutAdapter().addBean(creator, x + designer.getArea().getHorizontalValue(), y + designer.getArea().getVerticalValue()); - } - return added = container.getLayoutAdapter().addBean(creator, - x + designer.getArea().getHorizontalValue() - rect.x, - y + designer.getArea().getVerticalValue() - rect.y); - } + public boolean add2Container(FormDesigner designer, XLayoutContainer container, int x, int y) { + //考虑不同布局嵌套的情况,获取顶层容器 + XLayoutContainer xLayoutContainer = container.getTopLayout(); + if (xLayoutContainer != null && xLayoutContainer.acceptType(XWAbsoluteLayout.class)) { + container = xLayoutContainer; + } + + Rectangle rect = ComponentUtils.getRelativeBounds(container); + if (!ComparatorUtils.equals(container.getOuterLayout(), container.getBackupParent())) { + added = container.getLayoutAdapter().addBean(creator, + x + designer.getArea().getHorizontalValue(), + y + designer.getArea().getVerticalValue()); + return added; + } + added = container.getLayoutAdapter().addBean(creator, + x + designer.getArea().getHorizontalValue() - rect.x, + y + designer.getArea().getVerticalValue() - rect.y); + return added; + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java index c364317f1..a70d9b156 100644 --- a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java +++ b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java @@ -13,6 +13,7 @@ import com.fr.design.form.util.XCreatorConstants; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.FormSelection; import com.fr.design.mainframe.FormSelectionUtils; +import com.fr.design.utils.ComponentUtils; import com.fr.design.utils.gui.LayoutUtils; import com.fr.stable.ArrayUtils; @@ -26,7 +27,7 @@ import java.util.ArrayList; public class SelectionModel { //被粘贴组件在所选组件位置处往下、往右各错开20像素。执行多次粘贴时,在上一次粘贴的位置处错开20像素。 private static final int DELTA_X_Y = 20; //粘贴时候的偏移距离 - private static final int BORDER_PROPORTION = 20; + private static final double OFFSET_RELATIVE = 0.80; private static FormSelection clipboard = new FormSelection(); private FormDesigner designer; private FormSelection selection; @@ -111,7 +112,7 @@ public class SelectionModel { */ public boolean pasteFromClipBoard() { if (!clipboard.isEmpty()) { - if (!hasSelectionComponent()) { + if (!hasSelectedPasteSource()) { //未选 unselectedPaste(); } else { @@ -140,14 +141,14 @@ public class SelectionModel { FormSelectionUtils.paste2Container(designer, (XLayoutContainer) selection.getSelectedCreator(), clipboard, rec.x + rec.width / 2, - rec.y + BORDER_PROPORTION); + rec.y + DELTA_X_Y); } else { Rectangle rec = selection.getRelativeBounds(); //自适应布局 FormSelectionUtils.paste2Container(designer, designer.getRootComponent(), clipboard, rec.x + rec.width / 2, - rec.y + BORDER_PROPORTION); + rec.y + DELTA_X_Y); } } else { //绝对布局 @@ -172,18 +173,22 @@ public class SelectionModel { * 粘贴时选择组件 */ private void selectedPaste() { - XLayoutContainer parent = null; + XLayoutContainer container = null; //获取到编辑器的表层容器(已选的组件的父容器就是表层容器) - parent = XCreatorUtils.getParentXLayoutContainer(selection.getSelectedCreator()); - if (parent != null && selection.getSelectedCreator().getParent() instanceof XWFitLayout) { + container = XCreatorUtils.getParentXLayoutContainer(selection.getSelectedCreator()); + if (container != null && selection.getSelectedCreator().getParent() instanceof XWFitLayout) { //自适应布局 - Rectangle rec = selection.getRelativeBounds(); - FormSelectionUtils.paste2Container(designer, parent, clipboard, rec.x + rec.width / 2, rec.y + - rec.height - BORDER_PROPORTION); - } else if (parent != null && selection.getSelectedCreator().getParent() instanceof XWAbsoluteLayout) { + Rectangle selectionRec = selection.getRelativeBounds(); + Rectangle containerRec = ComponentUtils.getRelativeBounds(container); + //计算自适应布局位置 + int positionX = selectionRec.x - containerRec.x + selectionRec.width / 2; + int positionY = (int) (selectionRec.y - containerRec.y + selectionRec.height * OFFSET_RELATIVE); + + FormSelectionUtils.paste2Container(designer, container, clipboard, positionX, positionY); + } else if (container != null && selection.getSelectedCreator().getParent() instanceof XWAbsoluteLayout) { //绝对布局 Rectangle rec = selection.getSelctionBounds(); - FormSelectionUtils.paste2Container(designer, parent, clipboard, rec.x + DELTA_X_Y, rec.y + DELTA_X_Y); + FormSelectionUtils.paste2Container(designer, container, clipboard, rec.x + DELTA_X_Y, rec.y + DELTA_X_Y); } } @@ -198,13 +203,13 @@ public class SelectionModel { if (creator.acceptType(XWParameterLayout.class)) { designer.removeParaComponent(); } - removeCreatorFromContainer(creator, creator.getWidth(), creator.getHeight()); creator.removeAll(); // 清除被选中的组件 selection.reset(); } setSelectedCreator(designer.getRootComponent()); + FormSelectionUtils.rebuildSelection(designer); // 触发事件 designer.getEditListenerTable().fireCreatorModified(DesignerEvent.CREATOR_DELETED); designer.repaint(); @@ -275,7 +280,7 @@ public class SelectionModel { * 但是编辑窗口的最外层其实是表层@see {@link com.fr.design.designer.creator.XWAbsoluteBodyLayout}, * 其他两层不是靠添加组件就可以编辑的。 */ - public boolean hasSelectionComponent() { + public boolean hasSelectedPasteSource() { XCreator selectionXCreator = selection.getSelectedCreator(); if (designer.getClass().equals(FormDesigner.class)) { //frm本地组件复用 @@ -286,10 +291,12 @@ public class SelectionModel { || selectionXCreator.getClass().equals(XWTabFitLayout.class); //选中的是否是frm绝对布局编辑器本身 boolean absoluteEditor = selectionXCreator.getClass().equals(XWAbsoluteBodyLayout.class); + //选中是否是frm绝对画布块编辑器本身 + boolean absoluteCanvas = selectionXCreator.getClass().equals(XWAbsoluteLayout.class); //选中的是否是相对布局编辑器本身 boolean relativeEditor = selectionXCreator.getClass().equals(XWFitLayout.class); - return !(tabEditor || absoluteEditor || relativeEditor); + return !(tabEditor || absoluteEditor || absoluteCanvas || relativeEditor); } else { return false; } @@ -299,6 +306,15 @@ public class SelectionModel { } } + /** + * 是否有组件被选择。如果所选组件是最底层容器,也视为无选择 + * + * @return 是则返回true + */ + public boolean hasSelectionComponent() { + return !selection.isEmpty() && selection.getSelectedCreator().getParent() != null; + } + /** * 移动组件至指定位置 * diff --git a/designer_form/src/com/fr/design/designer/beans/models/StateModel.java b/designer_form/src/com/fr/design/designer/beans/models/StateModel.java index a623caddc..f3aeb8f90 100644 --- a/designer_form/src/com/fr/design/designer/beans/models/StateModel.java +++ b/designer_form/src/com/fr/design/designer/beans/models/StateModel.java @@ -1,446 +1,476 @@ package com.fr.design.designer.beans.models; -import java.awt.Component; -import java.awt.Cursor; -import java.awt.Graphics; -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.Toolkit; -import java.awt.event.MouseEvent; -import java.util.ArrayList; - import com.fr.design.beans.location.Absorptionline; -import com.fr.design.mainframe.FormDesigner; -import com.fr.design.mainframe.FormSelectionUtils; import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.HoverPainter; import com.fr.design.designer.beans.LayoutAdapter; import com.fr.design.designer.beans.events.DesignerEvent; import com.fr.design.designer.beans.location.Direction; import com.fr.design.designer.beans.location.Location; -import com.fr.design.designer.creator.XConnector; -import com.fr.design.designer.creator.XCreator; -import com.fr.design.designer.creator.XCreatorUtils; -import com.fr.design.designer.creator.XLayoutContainer; -import com.fr.design.designer.creator.XWAbsoluteLayout; +import com.fr.design.designer.creator.*; +import com.fr.design.mainframe.FormDesigner; +import com.fr.design.mainframe.FormSelectionUtils; import com.fr.design.utils.ComponentUtils; +import java.awt.*; +import java.awt.event.MouseEvent; +import java.util.ArrayList; + /** * 普通模式下的状态model */ public class StateModel { - // 对应的selection model - - private SelectionModel selectionModel; - // 当前鼠标进入拖拽区域的位置类型 - private Direction driection; - - // 当前拖拽的起始位置 - private int current_x; - private int current_y; - - private Point startPoint = new Point(); - private Point currentPoint = new Point(); - - private Absorptionline lineInX; - private Absorptionline lineInY; - //等距线 - private Absorptionline lineEquidistant; - - // 当前是否处于拖拽选择状态 - private boolean selecting; - private boolean dragging; - - private boolean addable; - - private FormDesigner designer; - - public StateModel(FormDesigner designer) { - this.designer = designer; - selectionModel = designer.getSelectionModel(); - } - - /** - * 返回direction - * @return direction方向 - */ - public Direction getDirection() { - return driection; - } - - /** - * 是否有组件正被选中 - * - * @return true 如果至少一个组件被选中 - */ - public boolean isSelecting() { - return selecting; - } + // 对应的selection model + + private SelectionModel selectionModel; + // 当前鼠标进入拖拽区域的位置类型 + private Direction driection; + + // 当前拖拽的起始位置 + private int currentX; + private int currentY; + + //拖拽组件原始位置大小备份 + private Rectangle selectedPositionBackup; + + private Point startPoint = new Point(); + private Point currentPoint = new Point(); + + private Absorptionline lineInX; + private Absorptionline lineInY; + //等距线 + private Absorptionline lineEquidistant; + + // 当前是否处于拖拽选择状态 + private boolean selecting; + private boolean dragging; + + private boolean addable; + + private FormDesigner designer; + + public StateModel(FormDesigner designer) { + this.designer = designer; + selectionModel = designer.getSelectionModel(); + } /** - *是否能拖拽 + * 返回direction + * + * @return direction方向 + */ + public Direction getDirection() { + return driection; + } + + /** + * 是否有组件正被选中 + * + * @return true 如果至少一个组件被选中 + */ + public boolean isSelecting() { + return selecting; + } + + /** + * 是否能拖拽 + * * @return 非outer且选中为空 */ - public boolean dragable() { - return ((driection != Location.outer) && !selecting); - } - - /** - * 拖拽中是否可以转换为添加模式: - * 如果拖拽组件只有一个,鼠标当前所在位置的最底层表单容器与这个组件的容器不同; - * 如果拖拽组件为多个,鼠标当前所在位置的最底层表单容器除了要求要跟这些组件的容器不同外,还必须是绝对定位布局 - */ - private void checkAddable(MouseEvent e) { - addable = false; - designer.setPainter(null); - - if (driection != Location.inner) { - return; - } - - XCreator comp = designer.getComponentAt(e.getX(), e.getY(), selectionModel.getSelection().getSelectedCreators()); - XLayoutContainer container = XCreatorUtils.getHotspotContainer(comp); - XCreator creator = selectionModel.getSelection().getSelectedCreator(); - Component creatorContainer = XCreatorUtils.getParentXLayoutContainer(creator); - if (creatorContainer != null && creatorContainer != container - && (selectionModel.getSelection().size() == 1 || container instanceof XWAbsoluteLayout)) { - HoverPainter painter = AdapterBus.getContainerPainter(designer, container); - designer.setPainter(painter); - if (painter != null) { - Rectangle rect = ComponentUtils.getRelativeBounds(container); - rect.x -= designer.getArea().getHorizontalValue(); - rect.y -= designer.getArea().getVerticalValue(); - painter.setRenderingBounds(rect); - painter.setHotspot(new Point(e.getX(), e.getY())); - painter.setCreator(creator); - } - addable = true; - } - } - - private boolean addBean(XLayoutContainer container, int x, int y) { - LayoutAdapter adapter = container.getLayoutAdapter(); - Rectangle r = ComponentUtils.getRelativeBounds(container); - if (selectionModel.getSelection().size() == 1) { - return adapter.addBean(selectionModel.getSelection().getSelectedCreator(), x - + designer.getArea().getHorizontalValue() - r.x, y + designer.getArea().getVerticalValue() - r.y); - } - for (XCreator creator : selectionModel.getSelection().getSelectedCreators()) { - adapter.addBean(creator, x + designer.getArea().getHorizontalValue() - r.x, y + designer.getArea().getVerticalValue()- r.y); - } - return true; - } - - private void adding(int x, int y) { + public boolean dragable() { + return ((driection != Location.outer) && !selecting); + } + + /** + * 拖拽中是否可以转换为添加模式: + * 如果拖拽组件只有一个,鼠标当前所在位置的最底层表单容器与这个组件的容器不同; + * 如果拖拽组件为多个,鼠标当前所在位置的最底层表单容器除了要求要跟这些组件的容器不同外,还必须是绝对定位布局 + */ + private void checkAddable(MouseEvent e) { + addable = false; + designer.setPainter(null); + + if (driection != Location.inner) { + return; + } + + XCreator comp = designer.getComponentAt(e.getX(), e.getY(), selectionModel.getSelection().getSelectedCreators()); + XLayoutContainer container = XCreatorUtils.getHotspotContainer(comp); + XCreator creator = selectionModel.getSelection().getSelectedCreator(); + Component creatorContainer = XCreatorUtils.getParentXLayoutContainer(creator); + if (creatorContainer != null && creatorContainer != container + && (selectionModel.getSelection().size() == 1 || container instanceof XWAbsoluteLayout)) { + HoverPainter painter = AdapterBus.getContainerPainter(designer, container); + designer.setPainter(painter); + if (painter != null) { + Rectangle rect = ComponentUtils.getRelativeBounds(container); + rect.x -= designer.getArea().getHorizontalValue(); + rect.y -= designer.getArea().getVerticalValue(); + painter.setRenderingBounds(rect); + painter.setHotspot(new Point(e.getX(), e.getY())); + painter.setCreator(creator); + } + addable = true; + } + } + + /** + * @param container 容器 + * @param mouseX 鼠标释放位置X + * @param mouseY 鼠标释放位置Y + * @return 是否成功 + */ + private boolean addBean(XLayoutContainer container, int mouseX, int mouseY) { + LayoutAdapter adapter = container.getLayoutAdapter(); + Rectangle rectangleContainer = ComponentUtils.getRelativeBounds(container); + if (selectionModel.getSelection().size() == 1) { + return adapter.addBean(selectionModel.getSelection().getSelectedCreator(), + mouseX + designer.getArea().getHorizontalValue() - rectangleContainer.x, + mouseY + designer.getArea().getVerticalValue() - rectangleContainer.y); + } + for (XCreator creator : selectionModel.getSelection().getSelectedCreators()) { + adapter.addBean(creator, + mouseX + designer.getArea().getHorizontalValue() - rectangleContainer.x, + mouseY + designer.getArea().getVerticalValue() - rectangleContainer.y); + } + return true; + } + + /** + * @param mouseReleasedX 鼠标释放位置X + * @param mouseReleasedY 鼠标释放位置Y + */ + private void adding(int mouseReleasedX, int mouseReleasedY) { // 当前鼠标所在的组件 - XCreator hoveredComponent = designer.getComponentAt(x, y, selectionModel.getSelection().getSelectedCreators()); + XCreator hoveredComponent = designer.getComponentAt(mouseReleasedX, mouseReleasedY, selectionModel.getSelection().getSelectedCreators()); // 获取该组件所在的焦点容器 XLayoutContainer container = XCreatorUtils.getHotspotContainer(hoveredComponent); boolean success = false; - if (container != null) { - // 如果是容器,则调用其acceptComponent接受组件 - success = addBean(container, x, y); - } - - if (success) { - FormSelectionUtils.rebuildSelection(designer); - designer.getEditListenerTable().fireCreatorModified( - selectionModel.getSelection().getSelectedCreator(), DesignerEvent.CREATOR_ADDED); - } else { - Toolkit.getDefaultToolkit().beep(); - } - + if (container != null) { + // 如果是容器,则调用其acceptComponent接受组件 + success = addBean(container, mouseReleasedX, mouseReleasedY); + } + + if (success) { + FormSelectionUtils.rebuildSelection(designer); + designer.getEditListenerTable().fireCreatorModified( + selectionModel.getSelection().getSelectedCreator(), DesignerEvent.CREATOR_ADDED); + } else { + selectionModel.getSelection().setSelectionBounds(selectedPositionBackup, designer); + Toolkit.getDefaultToolkit().beep(); + } // 取消提示 designer.setPainter(null); } /** - *是否拖拽 + * 是否拖拽 + * * @return dragging状态 */ - public boolean isDragging() { - return dragging; - } + public boolean isDragging() { + return dragging; + } /** - *是否可以开始画线 + * 是否可以开始画线 + * * @return startPoint不为空返回true */ - public boolean prepareForDrawLining() { - return startPoint != null; - } + public boolean prepareForDrawLining() { + return startPoint != null; + } /** - *设置开始位置 + * 设置开始位置 + * * @param p point位置 */ - public void setStartPoint(Point p) { - this.startPoint = p; - } + public void setStartPoint(Point p) { + this.startPoint = p; + } /** - *返回开始位置 + * 返回开始位置 + * * @return 点位置 */ - public Point getStartPoint() { - return startPoint; - } + public Point getStartPoint() { + return startPoint; + } /** - *返回当前点位置 + * 返回当前点位置 + * * @return 点位置 */ public Point getEndPoint() { - return currentPoint; - } + return currentPoint; + } /** - *当前选中组件 + * 当前选中组件 + * * @param e 鼠标事件 */ - public void startSelecting(MouseEvent e) { - selecting = true; - selectionModel.setHotspotBounds(new Rectangle()); - current_x = getMouseXY(e).x; - current_y = getMouseXY(e).y; - } + public void startSelecting(MouseEvent e) { + selecting = true; + selectionModel.setHotspotBounds(new Rectangle()); + currentX = getMouseXY(e).x; + currentY = getMouseXY(e).y; + } /** - *当前鼠标的xy + * 当前鼠标的xy + * * @param e 鼠标事件 */ - public void startResizing(MouseEvent e) { - if (!selectionModel.getSelection().isEmpty()) { - driection.backupBounds(designer); - } - current_x = getMouseXY(e).x; - current_y = getMouseXY(e).y; - } + public void startResizing(MouseEvent e) { + if (!selectionModel.getSelection().isEmpty()) { + driection.backupBounds(designer); + } + currentX = getMouseXY(e).x; + currentY = getMouseXY(e).y; + } /** - *起始点开始DrawLine + * 起始点开始DrawLine + * * @param p 点位置 */ - public void startDrawLine(Point p) { - this.startPoint = p; - if(p != null) { - try { - designer.setCursor(XConnector.connectorCursor); - } catch (Exception e) { - } - } else { - designer.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); - } - } + public void startDrawLine(Point p) { + this.startPoint = p; + if (p != null) { + try { + designer.setCursor(XConnector.connectorCursor); + } catch (Exception e) { + } + } else { + designer.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + } + } /** - *鼠标释放时所在的区域及圈中的组件 + * 鼠标释放时所在的区域及圈中的组件 + * * @param e 鼠标事件 */ - public void selectCreators(MouseEvent e) { - int x = getMouseXY(e).x; - int y = getMouseXY(e).y; + public void selectCreators(MouseEvent e) { + int x = getMouseXY(e).x; + int y = getMouseXY(e).y; - Rectangle bounds = createCurrentBounds(x, y); + Rectangle bounds = createCurrentBounds(x, y); - if ((x != current_x) || (y != current_y)) { - selectionModel.setSelectedCreators(getHotspotCreators(bounds, designer.getRootComponent())); - } - selectionModel.setHotspotBounds(null); - } + if ((x != currentX) || (y != currentY)) { + selectionModel.setSelectedCreators(getHotspotCreators(bounds, designer.getRootComponent())); + } + selectionModel.setHotspotBounds(null); + } /** - *画所在区域线 + * 画所在区域线 + * * @param e 鼠标事件 */ - public void drawLine(MouseEvent e) { - designer.getDrawLineHelper().setDrawLine(true); - Point p = designer.getDrawLineHelper().getNearWidgetPoint(e); - if (p != null) { - currentPoint = p; - } else { - currentPoint.x = e.getX() + designer.getArea().getHorizontalValue(); - currentPoint.y = e.getY() + designer.getArea().getVerticalValue(); - } - } - - private Rectangle createCurrentBounds(int x, int y) { - Rectangle bounds = new Rectangle(); - - bounds.x = Math.min(x, current_x); - bounds.y = Math.min(y, current_y); - bounds.width = Math.max(x, current_x) - bounds.x; - bounds.height = Math.max(y, current_y) - bounds.y; - - return bounds; - } - - private ArrayList getHotspotCreators(Rectangle selection, XCreator root) { - ArrayList creators = new ArrayList(); - - if (!root.isVisible() && !designer.isRoot(root)) { - return creators; - } - - if (root instanceof XLayoutContainer) { - XLayoutContainer container = (XLayoutContainer) root; - int count = container.getXCreatorCount(); - Rectangle clipped = new Rectangle(selection); - - for (int i = count - 1; i >= 0; i--) { - XCreator child = container.getXCreator(i); - - if (selection.contains(child.getBounds())) { - creators.add(child); - } else { - clipped.x = selection.x - child.getX(); - clipped.y = selection.y - child.getY(); - creators.addAll(getHotspotCreators(clipped, child)); - } - } - } - - return creators; - } + public void drawLine(MouseEvent e) { + designer.getDrawLineHelper().setDrawLine(true); + Point p = designer.getDrawLineHelper().getNearWidgetPoint(e); + if (p != null) { + currentPoint = p; + } else { + currentPoint.x = e.getX() + designer.getArea().getHorizontalValue(); + currentPoint.y = e.getY() + designer.getArea().getVerticalValue(); + } + } + + private Rectangle createCurrentBounds(int x, int y) { + Rectangle bounds = new Rectangle(); + + bounds.x = Math.min(x, currentX); + bounds.y = Math.min(y, currentY); + bounds.width = Math.max(x, currentX) - bounds.x; + bounds.height = Math.max(y, currentY) - bounds.y; + + return bounds; + } + + private ArrayList getHotspotCreators(Rectangle selection, XCreator root) { + ArrayList creators = new ArrayList<>(); + + if (!root.isVisible() && !designer.isRoot(root)) { + return creators; + } + + if (root instanceof XLayoutContainer) { + XLayoutContainer container = (XLayoutContainer) root; + int count = container.getXCreatorCount(); + Rectangle clipped = new Rectangle(selection); + + for (int i = count - 1; i >= 0; i--) { + XCreator child = container.getXCreator(i); + + if (selection.contains(child.getBounds())) { + creators.add(child); + } else { + clipped.x = selection.x - child.getX(); + clipped.y = selection.y - child.getY(); + creators.addAll(getHotspotCreators(clipped, child)); + } + } + } + + return creators; + } /** - *重置model + * 重置model */ - public void resetModel() { - dragging = false; - selecting = false; - } + public void resetModel() { + dragging = false; + selecting = false; + } /** - *重置 + * 重置 */ - public void reset() { - driection = Location.outer; - dragging = false; - selecting = false; - } + public void reset() { + driection = Location.outer; + dragging = false; + selecting = false; + } /** - *取消拖拽 + * 取消拖拽 */ - public void draggingCancel() { - designer.repaint(); - reset(); - } + public void draggingCancel() { + designer.repaint(); + reset(); + } /** - *设置可拉伸方向 + * 设置可拉伸方向 + * * @param dir 拉伸方向 */ - public void setDirection(Direction dir) { - if(driection != dir) { - this.driection = dir; - driection.updateCursor(designer); - } - } + public void setDirection(Direction dir) { + if (driection != dir) { + this.driection = dir; + driection.updateCursor(designer); + } + } /** - *x吸附线赋值 + * x吸附线赋值 + * * @param line 线 */ - public void setXAbsorptionline(Absorptionline line) { - this.lineInX = line; - } + public void setXAbsorptionline(Absorptionline line) { + this.lineInX = line; + } /** - *y吸附线赋值 + * y吸附线赋值 + * + * @param line 线 + */ + public void setYAbsorptionline(Absorptionline line) { + this.lineInY = line; + } + + /** + * 等距线赋值 + * * @param line 线 */ - public void setYAbsorptionline(Absorptionline line) { - this.lineInY = line; - } - - /** - * 等距线赋值 - * @param line 线 - */ - public void setEquidistantLine(Absorptionline line){ - this.lineEquidistant = line; - } + public void setEquidistantLine(Absorptionline line) { + this.lineEquidistant = line; + } /** - *画吸附线 + * 画吸附线 + * * @param g Graphics类 */ - public void paintAbsorptionline(Graphics g) { - if(lineInX != null) { - lineInX.paint(g,designer.getArea()); - } - if(lineInY != null) { - lineInY.paint(g,designer.getArea()); - } - if(lineEquidistant != null){ - lineEquidistant.paint(g,designer.getArea()); - } - } + public void paintAbsorptionline(Graphics g) { + if (lineInX != null) { + lineInX.paint(g, designer.getArea()); + } + if (lineInY != null) { + lineInY.paint(g, designer.getArea()); + } + if (lineEquidistant != null) { + lineEquidistant.paint(g, designer.getArea()); + } + } /** - *拖拽 + * 拖拽 + * * @param e 鼠标事件 */ - public void dragging(MouseEvent e) { - checkAddable(e); - setDependLinePainter(e); - driection.drag(getMouseXY(e).x-current_x, getMouseXY(e).y-current_y, designer); - this.dragging = true; - } - - // 拖拽时画依附线用到的painter - private void setDependLinePainter(MouseEvent e){ - XCreator comp = designer.getComponentAt(e.getX(), e.getY(), selectionModel.getSelection().getSelectedCreators()); - XLayoutContainer container = XCreatorUtils.getHotspotContainer(comp); - XCreator creator = selectionModel.getSelection().getSelectedCreator(); - HoverPainter painter = AdapterBus.getContainerPainter(designer, container); - designer.setPainter(painter); - if (painter != null) { - painter.setHotspot(new Point(e.getX(), e.getY())); - painter.setCreator(creator); - } - } + public void dragging(MouseEvent e) { + //进入dragging状态时备份组件大小和位置 + if (!dragging) { + selectedPositionBackup = selectionModel.getSelection().getRelativeBounds(); + } + checkAddable(e); + setDependLinePainter(e); + driection.drag(getMouseXY(e).x - currentX, getMouseXY(e).y - currentY, designer); + this.dragging = true; + } + + // 拖拽时画依附线用到的painter + private void setDependLinePainter(MouseEvent e) { + XCreator comp = designer.getComponentAt(e.getX(), e.getY(), selectionModel.getSelection().getSelectedCreators()); + XLayoutContainer container = XCreatorUtils.getHotspotContainer(comp); + XCreator creator = selectionModel.getSelection().getSelectedCreator(); + HoverPainter painter = AdapterBus.getContainerPainter(designer, container); + designer.setPainter(painter); + if (painter != null) { + painter.setHotspot(new Point(e.getX(), e.getY())); + painter.setCreator(creator); + } + } /** - *释放捕获 + * 释放捕获 + * * @param e 鼠标事件 */ - public void releaseDragging(MouseEvent e) { - this.dragging = false; - if (addable) { - adding(e.getX(), e.getY()); - } else if (!selectionModel.getSelection().isEmpty()) { - selectionModel.releaseDragging(); - } - designer.repaint(); - } + public void releaseDragging(MouseEvent e) { + this.dragging = false; + if (addable) { + adding(e.getX(), e.getY()); + } else if (!selectionModel.getSelection().isEmpty()) { + selectionModel.releaseDragging(); + } + designer.repaint(); + } /** - *改变选择区域 + * 改变选择区域 * - * @param e 鼠标事件 + * @param e 鼠标事件 */ - public void changeSelection(MouseEvent e) { - Rectangle bounds = createCurrentBounds(getMouseXY(e).x, getMouseXY(e).y); - selectionModel.setHotspotBounds(bounds); - } + public void changeSelection(MouseEvent e) { + Rectangle bounds = createCurrentBounds(getMouseXY(e).x, getMouseXY(e).y); + selectionModel.setHotspotBounds(bounds); + } /** - *返回鼠标所在的x、y 考虑滚动条的值 + * 返回鼠标所在的x、y 考虑滚动条的值 * * @param e 鼠标事件 * @return xy值 */ - public Point getMouseXY(MouseEvent e) { - Point p1 = new Point(e.getX() + designer.getArea().getHorizontalValue(), e.getY() - + designer.getArea().getVerticalValue()); - return p1; - } - + public Point getMouseXY(MouseEvent e) { + Point p1 = new Point(e.getX() + designer.getArea().getHorizontalValue(), e.getY() + + designer.getArea().getVerticalValue()); + return p1; + } + } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/painters/AbstractPainter.java b/designer_form/src/com/fr/design/designer/beans/painters/AbstractPainter.java index 06565fe4f..cb5c6a4a0 100644 --- a/designer_form/src/com/fr/design/designer/beans/painters/AbstractPainter.java +++ b/designer_form/src/com/fr/design/designer/beans/painters/AbstractPainter.java @@ -22,6 +22,7 @@ public abstract class AbstractPainter implements HoverPainter { /** * 构造函数 + * * @param container 容器 */ public AbstractPainter(XLayoutContainer container) { @@ -32,23 +33,25 @@ public abstract class AbstractPainter implements HoverPainter { public void setHotspot(Point p) { hotspot = p; } - + /** - * 画初始区域 - * @param g 画图类 - * @param startX 起始x位置 - * @param startY 起始y位置 + * 画初始区域 + * + * @param g 画图类 + * @param startX 起始x位置 + * @param startY 起始y位置 + */ + public void paint(Graphics g, int startX, int startY) { + if (hotspot_bounds != null) { + drawHotspot(g, hotspot_bounds.x, hotspot_bounds.y, hotspot_bounds.width, hotspot_bounds.height, Color.lightGray, true, false); + } + } + + /** + * 设置边界 + * + * @param rect 位置 */ - public void paint(Graphics g, int startX, int startY) { - if(hotspot_bounds != null){ - drawHotspot(g, hotspot_bounds.x, hotspot_bounds.y, hotspot_bounds.width, hotspot_bounds.height, Color.lightGray, true, false); - } - } - - /** - * 设置边界 - * @param rect 位置 - */ @Override public void setRenderingBounds(Rectangle rect) { hotspot_bounds = rect; @@ -63,12 +66,12 @@ public abstract class AbstractPainter implements HoverPainter { Color bColor = accept ? XCreatorConstants.LAYOUT_HOTSPOT_COLOR : XCreatorConstants.LAYOUT_FORBIDDEN_COLOR; drawHotspot(g, x, y, width, height, bColor, accept, false); } - + /** * 自适应布局那边渲染提示,要画整个背景,不是画边框 */ protected void drawRegionBackground(Graphics g, int x, int y, int width, int height, Color bColor, boolean accept) { - drawHotspot(g, x, y, width, height, bColor, accept, true); + drawHotspot(g, x, y, width, height, bColor, accept, true); } protected void drawHotspot(Graphics g, int x, int y, int width, int height, Color bColor, boolean accept, boolean drawBackground) { @@ -81,13 +84,13 @@ public abstract class AbstractPainter implements HoverPainter { if (!accept) { g2d.drawString(Inter.getLocText("Cannot-Add_To_This_Area") + "!", x + width / 3, y + height / 2); } else if (drawBackground) { - g2d.fillRect(x, y, width, height); + g2d.fillRect(x, y, width, height); } else { - g2d.drawRect(x, y, width, height); + g2d.drawRect(x, y, width, height); } g2d.setStroke(backup); g2d.setColor(color); } - - + + } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/creator/XLayoutContainer.java b/designer_form/src/com/fr/design/designer/creator/XLayoutContainer.java index 254e9a918..edd1c69f0 100644 --- a/designer_form/src/com/fr/design/designer/creator/XLayoutContainer.java +++ b/designer_form/src/com/fr/design/designer/creator/XLayoutContainer.java @@ -30,12 +30,12 @@ import java.util.List; * @since 6.5.3 */ public abstract class XLayoutContainer extends XBorderStyleWidgetCreator implements ContainerListener, ParameterBridge { - - // 布局内部组件默认最小宽度36,最小高度21 - public static int MIN_WIDTH = 36; - public static int MIN_HEIGHT = 21; - - protected static final Dimension LARGEPREFERREDSIZE = new Dimension(200, 200); + + // 布局内部组件默认最小宽度36,最小高度21 + public static int MIN_WIDTH = 36; + public static int MIN_HEIGHT = 21; + + protected static final Dimension LARGEPREFERREDSIZE = new Dimension(200, 200); protected boolean isRefreshing; protected int default_Length = 5; // 取指定点坐在的组件,默认为5保证取四侧相邻的组件时x、y在组件内非边框上 @@ -45,6 +45,7 @@ public abstract class XLayoutContainer extends XBorderStyleWidgetCreator impleme protected boolean editable = false; //鼠标移动到布局画出编辑层 protected boolean isMouseEnter = false; + public void setMouseEnter(boolean mouseEnter) { isMouseEnter = mouseEnter; } @@ -55,12 +56,13 @@ public abstract class XLayoutContainer extends XBorderStyleWidgetCreator impleme } /** - * 得到属性名 + * 得到属性名 + * * @return 属性名 * @throws IntrospectionException */ - public CRPropertyDescriptor[] supportedDescriptor() throws IntrospectionException { - return new CRPropertyDescriptor[] { + public CRPropertyDescriptor[] supportedDescriptor() throws IntrospectionException { + return new CRPropertyDescriptor[]{ new CRPropertyDescriptor("widgetName", this.data.getClass()).setI18NName(Inter .getLocText("FR-Designer_Form-Widget_Name")), new CRPropertyDescriptor("borderStyle", this.data.getClass()).setEditorClass( @@ -68,19 +70,20 @@ public abstract class XLayoutContainer extends XBorderStyleWidgetCreator impleme Inter.getLocText("FR-Engine_Style")).putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced") .setPropertyChangeListener(new PropertyChangeAdapter() { - @Override - public void propertyChange() { - initStyle(); - } - }), + @Override + public void propertyChange() { + initStyle(); + } + }), new CRPropertyDescriptor("margin", this.data.getClass()).setEditorClass(PaddingMarginEditor.class) .setI18NName(Inter.getLocText("FR-Designer_Layout-Padding")) .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced"), - }; - } + }; + } /** * 控件名属性 + * * @return * @throws IntrospectionException */ @@ -91,6 +94,7 @@ public abstract class XLayoutContainer extends XBorderStyleWidgetCreator impleme /** * 边距属性 + * * @return * @throws IntrospectionException */ @@ -101,47 +105,50 @@ public abstract class XLayoutContainer extends XBorderStyleWidgetCreator impleme } /** - * 返回对应的wlayout + * 返回对应的wlayout + * * @return wlayout控件 */ public WLayout toData() { return (WLayout) data; } - @Override - protected void initXCreatorProperties() { - super.initXCreatorProperties(); - initBorderStyle(); - this.initLayoutManager(); - this.convert(); - } + @Override + protected void initXCreatorProperties() { + super.initXCreatorProperties(); + initBorderStyle(); + this.initLayoutManager(); + this.convert(); + } @Override - protected JComponent initEditor() { - return this; - } - - /** - * 当前组件zorder位置替换新的控件 - * @param widget 控件 - * @param oldcreator 旧组件 - * @return 组件 - */ - public XCreator replace(Widget widget, XCreator oldcreator) { - int i = this.getComponentZOrder(oldcreator); - if (i != -1) { - this.toData().replace(widget, oldcreator.toData()); - this.convert(); - XCreator creator = (XCreator) this.getComponent(i); - creator.setSize(oldcreator.getSize()); - return creator; - } - return null; - } - - /** - * 初始化时默认的组件大小 - * @return 默认Dimension + protected JComponent initEditor() { + return this; + } + + /** + * 当前组件zorder位置替换新的控件 + * + * @param widget 控件 + * @param oldcreator 旧组件 + * @return 组件 + */ + public XCreator replace(Widget widget, XCreator oldcreator) { + int i = this.getComponentZOrder(oldcreator); + if (i != -1) { + this.toData().replace(widget, oldcreator.toData()); + this.convert(); + XCreator creator = (XCreator) this.getComponent(i); + creator.setSize(oldcreator.getSize()); + return creator; + } + return null; + } + + /** + * 初始化时默认的组件大小 + * + * @return 默认Dimension */ public Dimension initEditorSize() { return LARGEPREFERREDSIZE; @@ -172,7 +179,8 @@ public abstract class XLayoutContainer extends XBorderStyleWidgetCreator impleme /** * 设计界面中有组件添加时,要通知WLayout容器重新paint - * @param e 待说明 + * + * @param e 待说明 */ @Override public void componentAdded(ContainerEvent e) { @@ -188,7 +196,8 @@ public abstract class XLayoutContainer extends XBorderStyleWidgetCreator impleme /** * 设计界面中有组件添加时,要通知WLayout容器重新paint - * @param e 待说明 + * + * @param e 待说明 */ @Override public void componentRemoved(ContainerEvent e) { @@ -203,6 +212,7 @@ public abstract class XLayoutContainer extends XBorderStyleWidgetCreator impleme /** * 根据widget的属性值来获取 + * * @param wgt * @return */ @@ -226,30 +236,32 @@ public abstract class XLayoutContainer extends XBorderStyleWidgetCreator impleme public int getXCreatorCount() { return getComponentCount(); } - + public XCreator getXCreator(int i) { return (XCreator) getComponent(i); } /** * 该组件是否可以拖入参数面板 + * * @return 是则返回true */ - public boolean canEnterIntoParaPane(){ + public boolean canEnterIntoParaPane() { return false; } - + /** - * 是否作为控件树的叶子节点 - * @return 是则返回true - */ - public boolean isComponentTreeLeaf() { - return false; - } + * 是否作为控件树的叶子节点 + * + * @return 是则返回true + */ + public boolean isComponentTreeLeaf() { + return false; + } - public List getAllXCreatorNameList(XCreator xCreator, List namelist){ - for (int i = 0; i < ((XLayoutContainer)xCreator).getXCreatorCount(); i++) { - XCreator creatorSon = ((XLayoutContainer)xCreator).getXCreator(i); + public List getAllXCreatorNameList(XCreator xCreator, List namelist) { + for (int i = 0; i < ((XLayoutContainer) xCreator).getXCreatorCount(); i++) { + XCreator creatorSon = ((XLayoutContainer) xCreator).getXCreator(i); creatorSon.getAllXCreatorNameList(creatorSon, namelist); } return namelist; @@ -257,19 +269,20 @@ public abstract class XLayoutContainer extends XBorderStyleWidgetCreator impleme /** * 是否有查询按钮 - * @param xCreator 控件或容器 - * @return 有无查询按钮 + * + * @param xCreator 控件或容器 + * @return 有无查询按钮 */ public boolean SearchQueryCreators(XCreator xCreator) { - for (int i = 0; i < ((XLayoutContainer)xCreator).getXCreatorCount(); i++) { - XCreator creatorSon = ((XLayoutContainer)xCreator).getXCreator(i); - if(creatorSon.SearchQueryCreators(creatorSon)){ + for (int i = 0; i < ((XLayoutContainer) xCreator).getXCreatorCount(); i++) { + XCreator creatorSon = ((XLayoutContainer) xCreator).getXCreator(i); + if (creatorSon.SearchQueryCreators(creatorSon)) { return true; } } return false; } - + public FRLayoutManager getFRLayout() { LayoutManager layout = getLayout(); if (layout instanceof FRLayoutManager) { @@ -279,111 +292,120 @@ public abstract class XLayoutContainer extends XBorderStyleWidgetCreator impleme return null; } - public abstract LayoutAdapter getLayoutAdapter(); - - public int getIndexOfChild(Object child) { - int count = getComponentCount(); - for (int i = 0; i < count; i++) { - Component comp = getComponent(i); - if (comp == child) { - return i; - } - } - return -1; - } - - /** - * 主要为自适应用 - * 返回指定point的上方组件 - * @param x x位置 - * @param y y位置 - * @return 指定位置的组件 - */ - public Component getTopComp(int x, int y) { - return this.getComponentAt(x, y-default_Length); - } - - /** - * 主要为自适应用 - * 返回指定point的左方组件 - * @param x x位置 - * @param y y位置 - * @return 指定位置的组件 - */ - public Component getLeftComp(int x, int y) { - return this.getComponentAt(x-default_Length, y); - } - - /** - * 返回指定point的右方组件 - * @param x x位置 - * @param y y位置 - * @param w 宽度 - * @return 指定位置的组件 - */ - public Component getRightComp(int x, int y, int w) { - return this.getComponentAt(x+w+default_Length, y); - } - - /** - * 返回指定point的下方组件 - * @param x x位置 - * @param y y位置 - * @param h 高度 - * @return 指定位置的组件 - */ - public Component getBottomComp(int x, int y, int h) { - return this.getComponentAt(x, y+h+default_Length); - } - - /** - * 返回指定point的上方且是右侧的组件 - * @param x x位置 - * @param y y位置 - * @param w 宽度 - * @return 指定位置的组件 - */ - public Component getRightTopComp(int x, int y, int w) { - return this.getComponentAt(x+w-default_Length, y-default_Length); - } - - /** - * 返回指定point的左方且是下侧的组件 - * @param x x位置 - * @param y y位置 - * @param h 高度 - * @return 指定位置的组件 - */ - public Component getBottomLeftComp(int x, int y, int h) { - return this.getComponentAt(x-default_Length, y+h-default_Length); - } - - /** - * 返回指定point的右方且是下侧的组件 - * @param x x位置 - * @param y y位置 - * @param h 高度 - * @param w 宽度 - * @return 指定位置的组件 - */ - public Component getBottomRightComp(int x, int y, int h, int w) { - return this.getComponentAt(x+w+default_Length, y+h-default_Length); - } - - /** - * 返回指定point的下方且是右侧的组件 - * @param x x位置 - * @param y y位置 - * @param h 高度 - * @param w 宽度 - * @return 指定位置的组件 - */ - public Component getRightBottomComp(int x, int y, int h, int w) { - return this.getComponentAt(x+w-default_Length, y+h+default_Length); - } + public abstract LayoutAdapter getLayoutAdapter(); + + public int getIndexOfChild(Object child) { + int count = getComponentCount(); + for (int i = 0; i < count; i++) { + Component comp = getComponent(i); + if (comp == child) { + return i; + } + } + return -1; + } + + /** + * 主要为自适应用 + * 返回指定point的上方组件 + * + * @param x x位置 + * @param y y位置 + * @return 指定位置的组件 + */ + public Component getTopComp(int x, int y) { + return this.getComponentAt(x, y - default_Length); + } + + /** + * 主要为自适应用 + * 返回指定point的左方组件 + * + * @param x x位置 + * @param y y位置 + * @return 指定位置的组件 + */ + public Component getLeftComp(int x, int y) { + return this.getComponentAt(x - default_Length, y); + } + + /** + * 返回指定point的右方组件 + * + * @param x x位置 + * @param y y位置 + * @param w 宽度 + * @return 指定位置的组件 + */ + public Component getRightComp(int x, int y, int w) { + return this.getComponentAt(x + w + default_Length, y); + } + + /** + * 返回指定point的下方组件 + * + * @param x x位置 + * @param y y位置 + * @param h 高度 + * @return 指定位置的组件 + */ + public Component getBottomComp(int x, int y, int h) { + return this.getComponentAt(x, y + h + default_Length); + } + + /** + * 返回指定point的上方且是右侧的组件 + * + * @param x x位置 + * @param y y位置 + * @param w 宽度 + * @return 指定位置的组件 + */ + public Component getRightTopComp(int x, int y, int w) { + return this.getComponentAt(x + w - default_Length, y - default_Length); + } + + /** + * 返回指定point的左方且是下侧的组件 + * + * @param x x位置 + * @param y y位置 + * @param h 高度 + * @return 指定位置的组件 + */ + public Component getBottomLeftComp(int x, int y, int h) { + return this.getComponentAt(x - default_Length, y + h - default_Length); + } + + /** + * 返回指定point的右方且是下侧的组件 + * + * @param x x位置 + * @param y y位置 + * @param h 高度 + * @param w 宽度 + * @return 指定位置的组件 + */ + public Component getBottomRightComp(int x, int y, int h, int w) { + return this.getComponentAt(x + w + default_Length, y + h - default_Length); + } + + /** + * 返回指定point的下方且是右侧的组件 + * + * @param x x位置 + * @param y y位置 + * @param h 高度 + * @param w 宽度 + * @return 指定位置的组件 + */ + public Component getRightBottomComp(int x, int y, int h, int w) { + return this.getComponentAt(x + w - default_Length, y + h + default_Length); + } /** * 是否延迟展示报表内容,也就是说是否要等点击了查询之后才执行报表 + * * @return 如果是true,则表示点击之后才开始计算,false则表示会根据参数默认值直接计算报表并展现 */ public boolean isDelayDisplayContent() { @@ -392,18 +414,20 @@ public abstract class XLayoutContainer extends XBorderStyleWidgetCreator impleme /** * 是否显示参数界面 + * * @return 显示参数界面则返回true,否则返回false */ public boolean isDisplay() { return false; } - public Background getDataBackground(){ + public Background getDataBackground() { return toData().getBackground(); } /** * 获取参数界面的宽度 + * * @return 宽度 */ public int getDesignWidth() { @@ -412,83 +436,82 @@ public abstract class XLayoutContainer extends XBorderStyleWidgetCreator impleme /** * 获取参数面板的对齐方式 + * * @return 左中右三种对齐方式 */ public int getPosition() { return 0; } - + /** * 切换到非添加状态 - * + * * @param designer 表单设计器 */ - public void stopAddingState(FormDesigner designer){ - return; - } - - /** - * 寻找最近的为自适应布局的父容器 - * - * @return 布局容器 - * - * - * @date 2014-12-30-下午3:15:28 - * - */ - public XLayoutContainer findNearestFit(){ - //一层一层网上找, 找到最近的fit那一层就return - XLayoutContainer parent = this.getBackupParent(); - return parent == null ? null : parent.findNearestFit(); - } - + public void stopAddingState(FormDesigner designer) { + } + + /** + * 寻找最近的为自适应布局的父容器 + * + * @return 布局容器 + * @date 2014-12-30-下午3:15:28 + */ + public XLayoutContainer findNearestFit() { + //一层一层网上找, 找到最近的fit那一层就return + XLayoutContainer parent = this.getBackupParent(); + return parent == null ? null : parent.findNearestFit(); + } + /** * 获取容器所有内部组件横坐标值 - * + * * @return 横坐标数组 */ - public int[] getHors(){ - return ArrayUtils.EMPTY_INT_ARRAY; + public int[] getHors() { + return ArrayUtils.EMPTY_INT_ARRAY; } - + /** * 获取容器所有内部组件纵坐标值 - * + * * @return 纵坐标数组 */ - public int[] getVeris(){ - return ArrayUtils.EMPTY_INT_ARRAY; + public int[] getVeris() { + return ArrayUtils.EMPTY_INT_ARRAY; } - public void setDelayDisplayContent(boolean delayPlaying){ + public void setDelayDisplayContent(boolean delayPlaying) { } - public void setPosition(int align){ + public void setPosition(int align) { } - public void setDisplay(boolean showWindow){ + public void setDisplay(boolean showWindow) { } - public void setBackground(Background background){ + public void setBackground(Background background) { } /** * 布局是否可编辑,不可则显示编辑蒙层 + * * @return 可否编辑 */ - public boolean isEditable(){ + public boolean isEditable() { return this.editable; } /** * 设置布局是否可编辑,不可则显示编辑蒙层 + * * @param isEditable 可否编辑 */ - public void setEditable(boolean isEditable){ + public void setEditable(boolean isEditable) { this.editable = isEditable; } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardTagLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardTagLayout.java index 947ec5eab..114ce3240 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardTagLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardTagLayout.java @@ -1,5 +1,5 @@ /** - * + * */ package com.fr.design.designer.creator.cardlayout; @@ -25,114 +25,109 @@ import com.fr.form.ui.container.cardlayout.WCardTagLayout; import com.fr.form.ui.container.cardlayout.WTabFitLayout; /** - * - * * @date: 2014-11-25-下午3:11:14 */ public class XWCardTagLayout extends XWHorizontalBoxLayout { - - private static final int MIN_SIZE = 1; - - private String tagName = "Tab"; - - private boolean switchingTab = false; - - //增加一个tabNameIndex防止tabFitLayout重名 - private int tabFitIndex = 0; - private CardSwitchButton currentCard; - - public CardSwitchButton getCurrentCard() { - return currentCard; - } - - public void setCurrentCard(CardSwitchButton currentCard) { - this.currentCard = currentCard; - } - - public int getTabFitIndex() { - return tabFitIndex; - } - - public void setTabFitIndex(int tabFitIndex) { - this.tabFitIndex = tabFitIndex; - } - - public String getTagName() { - return tagName; - } - - public void setTagName(String tagName) { - this.tagName = tagName; - } - - public boolean isSwitchingTab() { - return switchingTab; - } - - public void setSwitchingTab(boolean switchingTab) { - this.switchingTab = switchingTab; - } - - private XWCardLayout cardLayout; - - public XWCardTagLayout(WCardTagLayout widget, Dimension initSize){ - super(widget, initSize); - } - - /** - * 构造函数 - */ - public XWCardTagLayout(WCardTagLayout widget, Dimension initSize, XWCardLayout cardLayout) { - super(widget, initSize); - - this.cardLayout = cardLayout; - } - - /** - * 添加组件的监听事件 - * - * @param e 事件 - * - * - * @date 2014-11-25-下午6:20:10 - * - */ - public void componentAdded(ContainerEvent e) { - super.componentAdded(e); - - if (isSwitchingTab()){ - return; - } - - if(this.cardLayout == null){ - initCardLayout(); - } - - int index = this.cardLayout.toData().getWidgetCount(); - //新加一个card - String widgetName = tagName+getTabNameIndex(); - WTabFitLayout fitLayout = new WTabFitLayout(widgetName,tabFitIndex,currentCard); - fitLayout.setTabNameIndex(getTabNameIndex()); - XWTabFitLayout tabFitLayout = new XWTabFitLayout(fitLayout, new Dimension()); - tabFitLayout.setBackupParent(cardLayout); - cardLayout.add(tabFitLayout, widgetName); - this.cardLayout.toData().setShowIndex(index); - cardLayout.showCard(); - } - - private void initCardLayout(){ - XWCardTitleLayout titleLayout = (XWCardTitleLayout)this.getBackupParent(); - XWCardMainBorderLayout borderLayout = (XWCardMainBorderLayout)titleLayout.getBackupParent(); - - this.cardLayout = borderLayout.getCardPart(); - } - + + private static final int MIN_SIZE = 1; + + private String tagName = "Tab"; + + private boolean switchingTab = false; + + //增加一个tabNameIndex防止tabFitLayout重名 + private int tabFitIndex = 0; + private CardSwitchButton currentCard; + + public CardSwitchButton getCurrentCard() { + return currentCard; + } + + public void setCurrentCard(CardSwitchButton currentCard) { + this.currentCard = currentCard; + } + + public int getTabFitIndex() { + return tabFitIndex; + } + + public void setTabFitIndex(int tabFitIndex) { + this.tabFitIndex = tabFitIndex; + } + + public String getTagName() { + return tagName; + } + + public void setTagName(String tagName) { + this.tagName = tagName; + } + + public boolean isSwitchingTab() { + return switchingTab; + } + + public void setSwitchingTab(boolean switchingTab) { + this.switchingTab = switchingTab; + } + + private XWCardLayout cardLayout; + + public XWCardTagLayout(WCardTagLayout widget, Dimension initSize) { + super(widget, initSize); + } + + /** + * 构造函数 + */ + public XWCardTagLayout(WCardTagLayout widget, Dimension initSize, XWCardLayout cardLayout) { + super(widget, initSize); + + this.cardLayout = cardLayout; + } + + /** + * 添加组件的监听事件 + * + * @param e 事件 + * @date 2014-11-25-下午6:20:10 + */ + public void componentAdded(ContainerEvent e) { + super.componentAdded(e); + + if (isSwitchingTab()) { + return; + } + + if (this.cardLayout == null) { + initCardLayout(); + } + + int index = this.cardLayout.toData().getWidgetCount(); + //新加一个card + String widgetName = tagName + getTabNameIndex(); + WTabFitLayout fitLayout = new WTabFitLayout(widgetName, tabFitIndex, currentCard); + fitLayout.setTabNameIndex(getTabNameIndex()); + XWTabFitLayout tabFitLayout = new XWTabFitLayout(fitLayout, new Dimension()); + tabFitLayout.setBackupParent(cardLayout); + cardLayout.add(tabFitLayout, widgetName); + this.cardLayout.toData().setShowIndex(index); + cardLayout.showCard(); + } + + private void initCardLayout() { + XWCardTitleLayout titleLayout = (XWCardTitleLayout) this.getBackupParent(); + XWCardMainBorderLayout borderLayout = (XWCardMainBorderLayout) titleLayout.getBackupParent(); + + this.cardLayout = borderLayout.getCardPart(); + } + /** * 将WLayout转换为XLayoutContainer */ public void convert() { isRefreshing = true; - WCardTagLayout layout = (WCardTagLayout)this.toData(); + WCardTagLayout layout = (WCardTagLayout) this.toData(); this.removeAll(); for (int i = 0; i < layout.getWidgetCount(); i++) { Widget wgt = layout.getWidget(i); @@ -144,82 +139,81 @@ public class XWCardTagLayout extends XWHorizontalBoxLayout { } isRefreshing = false; } - + /** * 切换到非添加状态 - * + * * @return designer 表单设计器 */ - public void stopAddingState(FormDesigner designer){ - designer.stopAddingState(); - return; + public void stopAddingState(FormDesigner designer) { + designer.stopAddingState(); } - + //新增时去tabFitLayout名字中最大的Index+1,防止重名 - private int getTabNameIndex(){ - int tabNameIndex = 0; - WCardLayout layout = this.cardLayout.toData(); - int size = layout.getWidgetCount(); - if(size < MIN_SIZE){ - return tabNameIndex; - } - for(int i=0;i + * void + */ + public void adjustComponentWidth() { + } + + + /** + * 该布局需要隐藏,无需对边框进行操作 + * + * @param + */ public void setBorder(Border border) { - return; - } - - @Override - /** - * 该布局隐藏,点击该布局时选中相应的tab布局主体 - * @param editingMouseListener 监听 - * @param e 鼠标点击事件 - * - */ - public void respondClick(EditingMouseListener editingMouseListener, - MouseEvent e) { - FormDesigner designer = editingMouseListener.getDesigner(); - SelectionModel selectionModel = editingMouseListener.getSelectionModel(); - - XWCardTitleLayout titleLayout = (XWCardTitleLayout) this.getBackupParent(); - if(titleLayout != null){ - XWCardMainBorderLayout mainLayout = (XWCardMainBorderLayout)titleLayout.getBackupParent(); - if(mainLayout != null){ - XWCardLayout cardLayout = mainLayout.getCardPart(); - selectionModel.setSelectedCreator(cardLayout); - } - } - - if (editingMouseListener.stopEditing()) { - if (this != designer.getRootComponent()) { - ComponentAdapter adapter = AdapterBus.getComponentAdapter(designer, this); - editingMouseListener.startEditing(this, adapter.getDesignerEditor(), adapter); - } - } - } - - @Override - public XLayoutContainer getTopLayout() { - return this.getBackupParent().getTopLayout(); - } + + } + + @Override + /** + * 该布局隐藏,点击该布局时选中相应的tab布局主体 + * @param editingMouseListener 监听 + * @param e 鼠标点击事件 + * + */ + public void respondClick(EditingMouseListener editingMouseListener, + MouseEvent e) { + FormDesigner designer = editingMouseListener.getDesigner(); + SelectionModel selectionModel = editingMouseListener.getSelectionModel(); + + XWCardTitleLayout titleLayout = (XWCardTitleLayout) this.getBackupParent(); + if (titleLayout != null) { + XWCardMainBorderLayout mainLayout = (XWCardMainBorderLayout) titleLayout.getBackupParent(); + if (mainLayout != null) { + XWCardLayout cardLayout = mainLayout.getCardPart(); + selectionModel.setSelectedCreator(cardLayout); + } + } + + if (editingMouseListener.stopEditing()) { + if (this != designer.getRootComponent()) { + ComponentAdapter adapter = AdapterBus.getComponentAdapter(designer, this); + editingMouseListener.startEditing(this, adapter.getDesignerEditor(), adapter); + } + } + } + + @Override + public XLayoutContainer getTopLayout() { + return this.getBackupParent().getTopLayout(); + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/mainframe/FormCreatorDropTarget.java b/designer_form/src/com/fr/design/mainframe/FormCreatorDropTarget.java index 6390b64f8..486ad2694 100644 --- a/designer_form/src/com/fr/design/mainframe/FormCreatorDropTarget.java +++ b/designer_form/src/com/fr/design/mainframe/FormCreatorDropTarget.java @@ -43,7 +43,7 @@ public class FormCreatorDropTarget extends DropTarget { * 当前添加模式对应的model */ private AddingModel addingModel; - private final static int GAP = 30; + private static final int GAP = 30; private JWindow promptWindow = new JWindow(); private UIButton promptButton = new UIButton("", BaseUtils.readIcon(IconPathConstants.FORBID_ICON_PATH)); @@ -59,10 +59,11 @@ public class FormCreatorDropTarget extends DropTarget { XCreator hoveredComponent = designer.getComponentAt(x, y); // 获取该组件所在的焦点容器 XLayoutContainer container = XCreatorUtils.getHotspotContainer(hoveredComponent); - //cardTagLayout里用到 - container.stopAddingState(designer); boolean success = false; if (container != null) { + //XWCardTagLayout 切换添加状态到普通状态 + container.stopAddingState(designer); + // 如果是容器,则调用其acceptComponent接受组件 AddingModel model = designer.getAddingModel(); @@ -129,9 +130,7 @@ public class FormCreatorDropTarget extends DropTarget { //提示组件是否可以拖入 promptUser(x, y, container); if (container != null) { - dealWithContainer(x, y, container); - } else { // 如果鼠标不在任何组件上,则取消提示器 designer.setPainter(null); @@ -197,11 +196,9 @@ public class FormCreatorDropTarget extends DropTarget { private void promptWidgetForbidEnter(int x, int y, XLayoutContainer container) { container.setBorder(BorderFactory.createLineBorder(Color.RED, Constants.LINE_MEDIUM)); - int screen_X = (int) designer.getArea().getLocationOnScreen().getX(); - int screen_Y = (int) designer.getArea().getLocationOnScreen().getY(); - this.promptWindow.setSize(promptWindow.getPreferredSize()); - this.promptWindow.setPreferredSize(promptWindow.getPreferredSize()); - promptWindow.setLocation(screen_X + x + GAP, screen_Y + y + GAP); + int screenX = designer.getArea().getLocationOnScreen().x; + int screenY = designer.getArea().getLocationOnScreen().y; + promptWindow.setLocation(screenX + x + GAP, screenY + y + GAP); promptWindow.setVisible(true); } diff --git a/designer_form/src/com/fr/design/mainframe/FormDesigner.java b/designer_form/src/com/fr/design/mainframe/FormDesigner.java index 1dd61c559..0c7705993 100644 --- a/designer_form/src/com/fr/design/mainframe/FormDesigner.java +++ b/designer_form/src/com/fr/design/mainframe/FormDesigner.java @@ -612,6 +612,12 @@ public class FormDesigner extends TargetComponent implements TreeSelection return true; } + public void showMessageDialog(String message) { + JOptionPane.showMessageDialog(this, message, Inter.getLocText("FR-Designer_Alert"), JOptionPane.WARNING_MESSAGE); + FormSelectionUtils.rebuildSelection(this); + repaint(); + } + /** * 保存参数界面的宽度 * diff --git a/designer_form/src/com/fr/design/mainframe/FormSelection.java b/designer_form/src/com/fr/design/mainframe/FormSelection.java index f30cf2e84..ff809371c 100644 --- a/designer_form/src/com/fr/design/mainframe/FormSelection.java +++ b/designer_form/src/com/fr/design/mainframe/FormSelection.java @@ -8,12 +8,7 @@ import com.fr.base.FRContext; import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.LayoutAdapter; import com.fr.design.designer.beans.location.Direction; -import com.fr.design.designer.creator.XComponent; -import com.fr.design.designer.creator.XCreator; -import com.fr.design.designer.creator.XCreatorUtils; -import com.fr.design.designer.creator.XLayoutContainer; -import com.fr.design.designer.creator.XWAbsoluteLayout; -import com.fr.design.designer.creator.XWParameterLayout; +import com.fr.design.designer.creator.*; import com.fr.form.ui.Widget; import com.fr.design.utils.ComponentUtils; import com.fr.design.utils.gui.LayoutUtils; @@ -273,6 +268,11 @@ public class FormSelection { if (parent == null) { return; } + boolean changeCreator = creator.shouldScaleCreator() || creator.hasTitleStyle(); + if (parent.acceptType(XWFitLayout.class) && changeCreator) { + creator = (XCreator) creator.getParent(); + } + parent.getLayoutAdapter().removeBean(creator, creator.getWidth(), creator.getHeight()); // 删除其根组件,同时就删除了同时被选择的叶子组件 parent.remove(creator); LayoutManager layout = parent.getLayout(); diff --git a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java index ff976ef77..79f52519e 100644 --- a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java +++ b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java @@ -8,6 +8,7 @@ import com.fr.design.designer.creator.*; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WTitleLayout; import com.fr.general.ComparatorUtils; +import com.fr.general.Inter; import java.awt.*; import java.util.ArrayList; @@ -17,11 +18,7 @@ import java.util.List; public class FormSelectionUtils { //组件复制时坐标偏移 - private static final int DELAY_X = 20; - private static final int DELAY_Y = 20; - - //组件复制时是否已经向左上偏移 - private static boolean backoffset = false; + private static final int DELAY_X_Y = 20; //组件重命名后缀 private static final String POSTFIX = "_c"; @@ -31,11 +28,7 @@ public class FormSelectionUtils { } /** - * @param designer 编辑器 - * @param parent 粘贴依据的组件 - * @param clipboard 剪贴板内容 - * @param x x - * @param y y + * 粘贴到容器 */ public static void paste2Container(FormDesigner designer, XLayoutContainer parent, FormSelection clipboard, int x, int y) { @@ -54,12 +47,6 @@ public class FormSelectionUtils { /** * 绝对布局粘贴 - * - * @param designer - * @param clipboard - * @param adapter - * @param x - * @param y */ private static void absolutePaste(FormDesigner designer, FormSelection clipboard, LayoutAdapter adapter, int x, int y) { @@ -74,6 +61,10 @@ public class FormSelectionUtils { copiedCreator, x + creator.getX() - rec.x + copiedCreator.getWidth() / 2, y + creator.getY() - rec.y + copiedCreator.getHeight() / 2); + if (!adapter.accept(copiedCreator, point.x, point.y)) { + designer.showMessageDialog(Inter.getLocText("FR-Designer_Too_Large_To_Paste")); + return; + } boolean addSuccess = adapter.addBean(copiedCreator, point.x, point.y); if (addSuccess) { designer.getSelectionModel().getSelection().addSelectedCreator(copiedCreator); @@ -90,12 +81,6 @@ public class FormSelectionUtils { /** * 相对布局粘贴 - * - * @param designer - * @param clipboard - * @param adapter - * @param x - * @param y */ private static void relativePaste(FormDesigner designer, FormSelection clipboard, LayoutAdapter adapter, int x, int y) { designer.getSelectionModel().getSelection().reset(); @@ -103,6 +88,10 @@ public class FormSelectionUtils { try { Widget copied = copyWidget(designer, creator); XCreator copiedCreator = XCreatorUtils.createXCreator(copied, creator.getSize()); + if (!adapter.accept(copiedCreator, x, y)) { + designer.showMessageDialog(Inter.getLocText("FR-Designer_Too_Small_To_Paste")); + return; + } boolean addSuccess = adapter.addBean(copiedCreator, x, y); if (addSuccess) { designer.getSelectionModel().getSelection().addSelectedCreator(copiedCreator); @@ -118,14 +107,6 @@ public class FormSelectionUtils { /** * 组件复用绝对布局获取粘贴组件位置 - * - * @param layoutAdapter 绝对布局容器AbstractLayoutAdapter - * @param copiedCreator 复制的组件 - * @param x x=组件x + clonedCreator.getWidth() / 2 - * @param y y=组件y + clonedCreator.getHeight() / 2 - * 除2的步骤会导致当宽度或者高度为奇数是,中心点向左上各偏移一个像素 - * 由于中心点向左上各偏移一个像素,依赖中心点计算的右下点就会相应的想做上偏移一个像素,导致结果不准确 - * @return 新位置坐标 */ private static Point getPasteLocation(AbstractLayoutAdapter layoutAdapter, XCreator copiedCreator, int x, int y) { //当宽度为奇数时 设置偏移 @@ -144,12 +125,10 @@ public class FormSelectionUtils { * x,y同时越界 */ if (xOut && yOut) { - x = backoffset ? container.getWidth() - copiedCreator.getWidth() / 2 - xoffset - : container.getWidth() - copiedCreator.getWidth() / 2 - DELAY_X - xoffset; - y = backoffset ? - container.getHeight() - copiedCreator.getHeight() / 2 - yoffset - : container.getHeight() - copiedCreator.getHeight() / 2 - DELAY_Y - yoffset; - backoffset = !backoffset; + //向左偏移 + x = container.getWidth() - copiedCreator.getWidth() / 2 - DELAY_X_Y - xoffset; + //紧贴下边界 + y = container.getHeight() - copiedCreator.getHeight() / 2 - yoffset; return new Point(x, y); } /* @@ -158,7 +137,7 @@ public class FormSelectionUtils { * 距离大于20像素的一侧正常错开。 * x,y中只有一个越界 */ - else if ((xOut || yOut)) { + if ((xOut || yOut)) { x = xOut ? container.getWidth() - copiedCreator.getWidth() / 2 - xoffset : x; y = yOut ? container.getHeight() - copiedCreator.getHeight() / 2 - yoffset : y; return new Point(x, y); @@ -170,15 +149,10 @@ public class FormSelectionUtils { /** * 拷贝组件 - * - * @param formDesigner - * @param xCreator - * @return - * @throws CloneNotSupportedException */ private static Widget copyWidget(FormDesigner formDesigner, XCreator xCreator) throws CloneNotSupportedException { - ArrayList nameSpace = new ArrayList(); + ArrayList nameSpace = new ArrayList<>(); Widget copied = (Widget) xCreator.toData().clone(); //重命名拷贝的组件 String name = getCopiedName(formDesigner, copied, nameSpace); @@ -193,14 +167,9 @@ public class FormSelectionUtils { /** * 组件拷贝命名规则 - * - * @param formDesigner - * @param copied - * @param nameSpace - * @return name */ private static String getCopiedName(FormDesigner formDesigner, Widget copied, ArrayList nameSpace) { - StringBuffer name = new StringBuffer(copied.getWidgetName()); + StringBuilder name = new StringBuilder(copied.getWidgetName()); do { name.append(POSTFIX); } while (formDesigner.getTarget().isNameExist(name.toString()) || nameSpace.contains(name.toString())); @@ -209,8 +178,8 @@ public class FormSelectionUtils { } public static void rebuildSelection(FormDesigner designer) { - ArrayList newSelection = new ArrayList(); - List widgetList = new ArrayList(); + ArrayList newSelection = new ArrayList<>(); + List widgetList = new ArrayList<>(); for (XCreator comp : designer.getSelectionModel().getSelection().getSelectedCreators()) { widgetList.add(comp.toData()); } @@ -219,7 +188,7 @@ public class FormSelectionUtils { } public static ArrayList rebuildSelection(XCreator rootComponent, Widget[] selectWidgets) { - List selectionWidget = new ArrayList(); + List selectionWidget = new ArrayList<>(); if (selectWidgets != null) { selectionWidget.addAll(Arrays.asList(selectWidgets)); } From 19df32d4b03f0e8fb935f9f2116364e1c6f8a7cb Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 7 Apr 2017 17:26:29 +0800 Subject: [PATCH 258/343] =?UTF-8?q?REPORT-1916=20=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E8=80=97=E6=97=B6=3D=E3=80=8B=E4=BF=AE=E5=A4=8D=E5=88=9D?= =?UTF-8?q?=E6=AC=A1=E4=BF=9D=E5=AD=98=E6=A8=A1=E6=9D=BF=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E4=BF=9D=E5=AD=98ID=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/mainframe/JTemplate.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/designer_base/src/com/fr/design/mainframe/JTemplate.java b/designer_base/src/com/fr/design/mainframe/JTemplate.java index 92dd63e11..e28090299 100644 --- a/designer_base/src/com/fr/design/mainframe/JTemplate.java +++ b/designer_base/src/com/fr/design/mainframe/JTemplate.java @@ -529,12 +529,13 @@ public abstract class JTemplate> ex } protected boolean saveNewFile(FILE editingFILE, String oldName){ - this.editingFILE = editingFILE; + // 在保存之前,初始化 templateID + initForCollect(); // 如果保存新模板(新建模板直接保存,或者另存为),则添加 templateID + this.editingFILE = editingFILE; boolean result = this.saveFile(); if (result) { DesignerFrameFileDealerPane.getInstance().refresh(); - initForCollect(); // 如果保存新模板(新建模板直接保存,或者另存为),则添加 templateID collectInfo(); } //更换最近打开 From d9379875b34a38f592a7de7bed159c7ef5f2c4f7 Mon Sep 17 00:00:00 2001 From: fr_shine Date: Mon, 10 Apr 2017 11:22:48 +0800 Subject: [PATCH 259/343] =?UTF-8?q?font=3D=3Dnull=20=E4=B9=9F=E8=A6=81?= =?UTF-8?q?=E6=B3=A8=E5=86=8C=E7=9B=91=E5=90=AC=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chart/gui/style/ChartTextAttrPane.java | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPane.java index 48ef44970..1146d404d 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPane.java @@ -77,17 +77,17 @@ public class ChartTextAttrPane extends BasicPane { public void populate(FRFont frFont) { UIObserverListener listener = fontNameComboBox == null ? null : fontNameComboBox.getUiObserverListener(); removeAllComboBoxListener(); - if (frFont == null) { - return; - } - fontNameComboBox.setSelectedItem(frFont.getFamily()); - bold.setSelected(frFont.isBold()); - italic.setSelected(frFont.isItalic()); - if(fontSizeComboBox != null) { - fontSizeComboBox.setSelectedItem(frFont.getSize()); - } - if (fontColor != null) { - fontColor.setColor(frFont.getForeground()); + + if (frFont != null) { + fontNameComboBox.setSelectedItem(frFont.getFamily()); + bold.setSelected(frFont.isBold()); + italic.setSelected(frFont.isItalic()); + if(fontSizeComboBox != null) { + fontSizeComboBox.setSelectedItem(frFont.getSize()); + } + if (fontColor != null) { + fontColor.setColor(frFont.getForeground()); + } } //更新结束后,注册监听器 From 5eeeaa37e7e2c2a6b4b2e7d4eed3a94386364aed Mon Sep 17 00:00:00 2001 From: zhouping Date: Mon, 10 Apr 2017 14:43:17 +0800 Subject: [PATCH 260/343] =?UTF-8?q?REPORT-2334=20=E8=A1=A8=E5=8D=95tab?= =?UTF-8?q?=E5=B8=83=E5=B1=80=E4=B8=AD=E5=9B=BE=E8=A1=A8=E6=94=BE=E5=A4=A7?= =?UTF-8?q?=E7=BC=A9=E5=B0=8F=E4=BC=9A=E6=98=8E=E6=98=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../beans/adapters/layout/FRFitLayoutAdapter.java | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java index e31ee6a5d..f5aa87a2b 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java @@ -274,12 +274,8 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { } private Rectangle adjustBackupBound(Rectangle backupBound, XWCardMainBorderLayout mainLayout) { - // 参数界面高度对纵坐标产生的影响 - JForm jform = (JForm) (HistoryTemplateListPane.getInstance().getCurrentEditingTemplate()); - if (jform.getFormDesign().getParaComponent() != null) { - backupBound.y -= jform.getFormDesign().getParaHeight(); - } - + // zhouping: REPORT-2334 表单tab布局中图表放大缩小会明显 + // 这边不需要单独处理参数面板高度了,下面的方法中获取的是XWCardMainBorderLayout相对坐标 Rectangle rec = getLayoutBound(mainLayout); // XWTabLayout里面的横纵坐标收到外层XWCardMainBorderLayout的横纵坐标影响 // 减掉之后可以按照它原来的逻辑执行 From df4d2f67863d900d99debcff46834613e409e717 Mon Sep 17 00:00:00 2001 From: neil Date: Mon, 10 Apr 2017 15:53:18 +0800 Subject: [PATCH 261/343] ct --- .../com/fr/design/locale/designer.properties | 19 ++--- .../design/locale/designer_en_US.properties | 18 +++-- .../design/locale/designer_ja_JP.properties | 17 +++-- .../design/locale/designer_ko_KR.properties | 17 +++-- .../design/locale/designer_zh_CN.properties | 20 ++++-- .../design/locale/designer_zh_TW.properties | 22 ++++-- .../fr/design/chart/axis/MinMaxValuePane.java | 71 +++++++++++-------- .../chart/gui/style/axis/ChartValuePane.java | 14 ++-- 8 files changed, 120 insertions(+), 78 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index e3ee03999..caa3e9d35 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -91,6 +91,7 @@ FR-Designer_DS-Dictionary= FR-Designer_Data-confusion= FR-Designer_Data_Type= FR-Designer_Double_Click_Edit_OR_Clear= +FR-Designer_Edit_Button_ToolBar= FR-Designer_Email= FR-Designer_Enabled= FR-Designer_End-Date= @@ -100,7 +101,6 @@ FR-Designer_FS_Close_Other_Templates= FR-Designer_File= FR-Designer_Filter_Conditions= FR-Designer_Finish-Modify-Share= -FR-Designer_Fit= FR-Designer_Fit-App= FR-Designer_Font-Family= FR-Designer_Font-Size= @@ -162,6 +162,7 @@ FR-Designer_Refresh_Parameter_In_SQL= FR-Designer_Reg_Expressions= FR-Designer_Reg_Max_Length= FR-Designer_Reg_Min_Length= +FR-Designer_Remove_Button_ToolBar= FR-Designer_ReportColumns-Columns= FR-Designer_Return-Date= FR-Designer_RichText= @@ -542,14 +543,14 @@ 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_Null=Allow null +FR-Designer_Allow_Null=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=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}' directory.\nAdd the source code(.java file) into the same folder if need.\nExample: {R2}} +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 @@ -563,10 +564,6 @@ FR-Designer_Show_As_Download=Display the binary content using download link FR-Designer_File_Name_For_Download=File Name For Download FR-Designer_No=No FR-Designer_Pagination=Page Break -FR-Designer-Move_Tab_First=move to first -FR-Designer-Move_Tab_End=move to end -FR-Designer-Move_Tab_Next=move to next -FR-Designer-Move_Tab_Prev=move to previous FR-Designer_DS_TableData=Data Set FR-Designer_Parameter-Formula=Formula FR-Designer_Plugin_Should_Update_Please_Contact_Developer=Plugin version is too low, and is not compatible with current API. Please contact the developer to update. @@ -587,4 +584,10 @@ FR-Designer_Mouse_Click_Tips= 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 \ No newline at end of file +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 diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index a86a7fb14..ccf30126a 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -91,6 +91,7 @@ FR-Designer_DS-Dictionary=Data Dictionary FR-Designer_Data-confusion=Data Confusion FR-Designer_Data_Type=Data type FR-Designer_Double_Click_Edit_OR_Clear=Double Click to Edit or Clear +FR-Designer_Edit_Button_ToolBar=Edit Button ToolBar FR-Designer_Email=Mail FR-Designer_Enabled=Enabled FR-Designer_End-Date=End Date @@ -163,6 +164,7 @@ FR-Designer_Refresh_Parameter_In_SQL=Whether to refresh parameters in the SQL FR-Designer_Reg_Expressions=Regular expressions FR-Designer_Reg_Max_Length=max length FR-Designer_Reg_Min_Length=min length +FR-Designer_Remove_Button_ToolBar=Remove Button ToolBar FR-Designer_ReportColumns-Columns=Multi-columns/lines FR-Designer_Return-Date=Return Date FR-Designer_RichText=Insert Rich Text @@ -542,14 +544,14 @@ 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_Null=Allow null +FR-Designer_Allow_Null=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 should be copied to\nJ2EE server '{R1}' directory.\nAdd the source code(.java file) into the same folder if need.\nExample: {R2}} +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 @@ -563,10 +565,6 @@ FR-Designer_Show_As_Download=Display the binary content using download link FR-Designer_File_Name_For_Download=File Name For Download FR-Designer_No=No FR-Designer_Pagination=Page Break -FR-Designer-Move_Tab_First=move to first -FR-Designer-Move_Tab_End=move to end -FR-Designer-Move_Tab_Next=move to next -FR-Designer-Move_Tab_Prev=move to previous FR-Designer_DS_TableData=Data Set FR-Designer_Parameter-Formula=Formula FR-Designer_Plugin_Should_Update_Please_Contact_Developer=Plugin version is too low, and is not compatible with current API. Please contact the developer to update. @@ -587,4 +585,10 @@ 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_End=move to end FR-Designer-Move_Tab_Next=move to next -FR-Designer-Move_Tab_Prev=move to previous \ No newline at end of file +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! diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index 943cf181d..1b1c1a6c0 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -91,6 +91,7 @@ FR-Designer_DS-Dictionary=\u30C7\u30FC\u30BF\u5B57\u5178 FR-Designer_Data-confusion=\u30C7\u30FC\u30BF\u6DF7\u4EA4 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_Edit_Button_ToolBar=\u30DC\u30BF\u30F3\u306B\u3042\u308B\u30C4\u30FC\u30EB\u6B04\u7DE8\u96C6 FR-Designer_Email=\u30E1\u30FC\u30EB FR-Designer_Enabled=\u4F7F\u7528\u53EF\u80FD FR-Designer_End-Date=\u7D42\u4E86\u65E5\u671F @@ -162,6 +163,7 @@ 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_Max_Length=\u6700\u5927\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_Return-Date=\u65E5\u671F\u306B\u623B\u308B FR-Designer_RichText=\u30EA\u30C3\u30C1\u6587\u66F8\u633F\u5165 @@ -523,7 +525,7 @@ 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}" \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_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 @@ -537,10 +539,6 @@ 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_No=\u3044\u3044\u3048 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_Parameter-Formula=\u6570\u5F0F FR-Designer_Background_Null= @@ -554,4 +552,11 @@ FR-Designer_Background_Image_Select= FR-Designer_Initial_Background_Tips= FR-Designer_Mouse_Move_Tips= FR-Designer_Mouse_Click_Tips= -FR-Designer_Plugin_Should_Update_Please_Contact_Developer= +FR-Designer-Move_Tab_First= +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 diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index db796ce43..9df9125a9 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -91,6 +91,7 @@ FR-Designer_DS-Dictionary=\uB370\uC774\uD130\uC0AC\uC804 FR-Designer_Data-confusion=\uB370\uC774\uD130\uD63C\uD569 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_Edit_Button_ToolBar=\uD0A4\uAC00\uC788\uB294\uD234\uBC14\uD3B8\uC9D1 FR-Designer_Email=\uBA54\uC77C FR-Designer_Enabled=\uC0AC\uC6A9\uAC00\uB2A5 FR-Designer_End-Date=\uC885\uB8CC\uB0A0\uC9DC @@ -162,6 +163,7 @@ FR-Designer_Refresh_Parameter_In_SQL=SQL\uC758\uB9E4\uAC1C\uBCC0\uC218\uB97C\uC0 FR-Designer_Reg_Expressions=\uC815\uADDC\uD45C\uD604\uC2DD FR-Designer_Reg_Max_Length=\uCD5C\uB300\uAE38\uC774 FR-Designer_Reg_Min_Length=\uCD5C\uC18C\uAE38\uC774 +FR-Designer_Remove_Button_ToolBar=\uD0A4\uAC00\uC788\uB294\uD234\uBC14\uC81C\uAC70 FR-Designer_ReportColumns-Columns=\uC140\uB098\uB204\uAE30 FR-Designer_Return-Date=\uB0A0\uC9DC\uB3CC\uC544\uAC00\uAE30 FR-Designer_RichText=\uB9AC\uCE58\uD14D\uC2A4\uD2B8\uBC15\uC2A4\uC0BD\uC785 @@ -520,7 +522,7 @@ 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}" \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_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 @@ -534,10 +536,6 @@ 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_No=\uC544\uB2C8\uC624 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_Parameter-Formula=\uC218\uC2DD FR-Designer_Background_Null= @@ -551,4 +549,11 @@ FR-Designer_Background_Image_Select= FR-Designer_Initial_Background_Tips= FR-Designer_Mouse_Move_Tips= FR-Designer_Mouse_Click_Tips= -FR-Designer_Plugin_Should_Update_Please_Contact_Developer= \ No newline at end of file +FR-Designer-Move_Tab_First= +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 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 726a6d0f6..060eddbd7 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -91,6 +91,7 @@ FR-Designer_DS-Dictionary=\u6570\u636E\u5B57\u5178 FR-Designer_Data-confusion=\u6570\u636E\u6DF7\u6DC6 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_Edit_Button_ToolBar=\u7F16\u8F91\u6309\u94AE\u6240\u5728\u5DE5\u5177\u680F FR-Designer_Email=\u90AE\u4EF6 FR-Designer_Enabled=\u53EF\u7528 FR-Designer_End-Date=\u7ED3\u675F\u65E5\u671F @@ -163,6 +164,7 @@ FR-Designer_Refresh_Parameter_In_SQL=\u662F\u5426\u5237\u65B0SQL\u4E2D\u7684\u53 FR-Designer_Reg_Expressions=\u6B63\u5219\u8868\u8FBE\u5F0F FR-Designer_Reg_Max_Length=\u6700\u5927\u957F\u5EA6 FR-Designer_Reg_Min_Length=\u6700\u5C0F\u957F\u5EA6 +FR-Designer_Remove_Button_ToolBar=\u79FB\u9664\u6309\u94AE\u6240\u5728\u5DE5\u5177\u680F FR-Designer_ReportColumns-Columns=\u5206\u680F FR-Designer_Return-Date=\u8FD4\u56DE\u65E5\u671F FR-Designer_RichText=\u63D2\u5165\u5BCC\u6587\u672C @@ -553,7 +555,7 @@ 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}" \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_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 @@ -567,16 +569,12 @@ 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_No=\u5426 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_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 +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_Color=\u989C\u8272 FR-Designer_Background_Texture=\u7EB9\u7406 @@ -588,3 +586,13 @@ FR-Designer_Background_Image_Select=\u9009\u62E9\u56FE\u7247 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_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 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index f8b28dba3..bb7ab2dc6 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -91,6 +91,7 @@ FR-Designer_DS-Dictionary=\u8CC7\u6599\u5B57\u5178 FR-Designer_Data-confusion=\u8CC7\u6599\u6DF7\u6DC6 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_Edit_Button_ToolBar=\u7DE8\u8F2F\u6309\u9215\u6240\u5728\u5DE5\u5177\u6B04 FR-Designer_Email=\u90F5\u4EF6 FR-Designer_Enabled=\u53EF\u7528 FR-Designer_End-Date=\u7D50\u675F\u65E5\u671F @@ -162,6 +163,7 @@ FR-Designer_Refresh_Parameter_In_SQL=\u5728SQL\u4E2D\u91CD\u65B0\u6574\u7406\u76 FR-Designer_Reg_Expressions=\u6B63\u5247\u8868\u9054\u5F0F FR-Designer_Reg_Max_Length=\u6700\u5927\u9577\u5EA6 FR-Designer_Reg_Min_Length=\u6700\u5C0F\u9577\u5EA6 +FR-Designer_Remove_Button_ToolBar=\u79FB\u9664\u6309\u9215\u6240\u5728\u5DE5\u5177\u6B04 FR-Designer_ReportColumns-Columns=\u5831\u8868\u6B04\u4F4D FR-Designer_Return-Date=\u8FD4\u56DE\u65E5\u671F FR-Designer_RichText= RTF @@ -541,7 +543,7 @@ 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}" \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_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 @@ -555,13 +557,9 @@ 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_No=\u5426 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_Parameter-Formula=\u516C\u5F0F -FR-Designer_Plugin_Should_Update_Please_Contact_Developer=\u633F\u4EF6\u7248\u672C\u904E\u4F4E\uFF0C\u5B58\u5728API\u4E0D\u76F8\u5BB9\uFF0C\u8ACB\u806F\u7CFB\u958B\u767C\u8005\u965E\u7D1A\u633F\u4EF6 +FR-Designer_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 @@ -575,4 +573,14 @@ FR-Designer_Background_Clear= FR-Designer_Background_Image_Select= FR-Designer_Initial_Background_Tips= FR-Designer_Mouse_Move_Tips= -FR-Designer_Mouse_Click_Tips= \ No newline at end of file +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 diff --git a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java index 7fc7d9db3..0c61e64f3 100644 --- a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java +++ b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java @@ -30,7 +30,8 @@ public class MinMaxValuePane extends JPanel { protected UICheckBox isCustomSecUnitBox; protected UITextField secUnitField; - public MinMaxValuePane() { + + public MinMaxValuePane() { minCheckBox = new UICheckBox(Inter.getLocText(new String[]{"Custom", "Min_Value"})); minValueField = new UITextField(6); maxCheckBox = new UICheckBox(Inter.getLocText(new String[]{"Custom", "Max_Value"})); @@ -39,37 +40,45 @@ public class MinMaxValuePane extends JPanel { mainUnitField = new UITextField(6); isCustomSecUnitBox = new UICheckBox(Inter.getLocText("FR-Chart_SecondGraduationUnit")); secUnitField = new UITextField(6); - double p = TableLayout.PREFERRED; - double f = TableLayout.FILL; - double[] columnSize = { p, f }; - double[] rowSize = { p, p, p, p}; - - Component[][] components = getPanelComponents(); - JPanel panel = TableLayoutHelper.createTableLayoutPane(components ,rowSize,columnSize); - this.setLayout(new BorderLayout()); - this.add(panel,BorderLayout.CENTER); - - for(int i = 0; i < components.length; i++) { - ((UICheckBox)components[i][0]).addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - checkBoxUse(); - } - }); - ChartSwingUtils.addListener((UICheckBox)components[i][0], (UITextField)components[i][1]); - } - } - protected Component[][] getPanelComponents() { - return new Component[][]{ + + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double[] columnSize = {p, f}; + + Component[][] components = getPanelComponents(); + JPanel panel = TableLayoutHelper.createTableLayoutPane(components, getRowSize(p), columnSize); + this.setLayout(new BorderLayout()); + this.add(panel, BorderLayout.CENTER); + addComponentListener(components); + } + + protected double[] getRowSize(double p) { + return new double[]{p, p, p, p}; + } + + public void addComponentListener(Component[][] components) { + for (int i = 0; i < components.length; i++) { + ((UICheckBox) components[i][0]).addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + checkBoxUse(); + } + }); + ChartSwingUtils.addListener((UICheckBox) components[i][0], (UITextField) components[i][1]); + } + } + + protected Component[][] getPanelComponents() { + return new Component[][]{ new Component[]{minCheckBox, minValueField}, new Component[]{maxCheckBox, maxValueField}, new Component[]{isCustomMainUnitBox, mainUnitField}, new Component[]{isCustomSecUnitBox, secUnitField}, - }; - } + }; + } - private void checkBoxUse() { + protected void checkBoxUse() { minValueField.setEnabled(minCheckBox.isSelected()); maxValueField.setEnabled(maxCheckBox.isSelected()); @@ -100,7 +109,7 @@ public class MinMaxValuePane extends JPanel { if(axis.getMinValue() != null) { minValueField.setText(axis.getMinValue().toString()); } - } + } // 最大值 if (axis.isCustomMaxValue()) { @@ -108,7 +117,7 @@ public class MinMaxValuePane extends JPanel { if(axis.getMaxValue() != null) { maxValueField.setText(axis.getMaxValue().toString()); } - } + } // 主次刻度单位 if (axis.isCustomMainUnit()) { @@ -116,7 +125,7 @@ public class MinMaxValuePane extends JPanel { if(axis.getMainUnit() != null) { mainUnitField.setText(axis.getMainUnit().toString()); } - } + } if(axis.isCustomSecUnit()) { isCustomSecUnitBox.setSelected(true); @@ -149,7 +158,7 @@ public class MinMaxValuePane extends JPanel { updateUnit(axis); } - private void updateUnit(Axis axis) { + protected void updateUnit(Axis axis) { // 主要刻度 if (isCustomMainUnitBox.isSelected()){ String increment = mainUnitField.getText(); diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java index f667a66dd..8916efe25 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java @@ -72,7 +72,7 @@ public class ChartValuePane extends ChartAxisUsePane{ axisLineStylePane = new ChartAxisLineStylePane(); zeroPane = aliagnZero4Second(); - axisReversed = new UICheckBox(Inter.getLocText("AxisReversed")); + axisReversed = new UICheckBox(Inter.getLocText("FR-Designer_AxisReversed")); unitCombox = new UIComboBox(ChartConstants.UNIT_I18N_VALUES); formatPane = new FormatPane(); axisLabelPane = new ChartAxisLabelPane(); @@ -151,10 +151,10 @@ public class ChartValuePane extends ChartAxisUsePane{ double p = TableLayout.PREFERRED; double f = TableLayout.FILL; double[] columnSize = { LayoutConstants.CHART_ATTR_TOMARGIN,p,f}; - double[] rowSize = {p, p}; + double[] rowSize = { p, p}; Component[][] component = new Component[][]{ - new Component[]{null,initMinMaxValue(),null}, - new Component[]{null, addLogarithmicPane2ValuePane(), addLogText()}, + new Component[]{null,initMinMaxValue(),null}, + new Component[]{null, addLogarithmicPane2ValuePane(), addLogText()}, }; return TableLayoutHelper.createTableLayoutPane(component, rowSize, columnSize); } @@ -171,8 +171,8 @@ public class ChartValuePane extends ChartAxisUsePane{ // 返回对数相关界面. 百分比 没有此界面. protected JPanel addLogarithmicPane2ValuePane() { JPanel labelLogPane = FRGUIPaneFactory.createLeftFlowZeroGapBorderPane(); - labelLogPane.add(logBox = new UICheckBox(Inter.getLocText("Logarithmic")+":")); - labelLogPane.add(new UILabel(Inter.getLocText("Chart_Log_Base"))); + labelLogPane.add(logBox = new UICheckBox(Inter.getLocText("FR-Designer_Logarithmic")+":")); + labelLogPane.add(new UILabel(Inter.getLocText("FR-Designer_Chart_Log_Base"))); logBaseField = new UITextField(4); logBaseField.setText("10"); @@ -221,7 +221,7 @@ public class ChartValuePane extends ChartAxisUsePane{ * @return 返回标题. */ public String title4PopupWindow() { - return Inter.getLocText("Chart_F_Radar_Axis"); + return Inter.getLocText("FR-Designer_Chart_F_Radar_Axis"); } @Override From d8daeae4047e1639dbf6e6cfbefec3dc6cc16123 Mon Sep 17 00:00:00 2001 From: neil Date: Mon, 10 Apr 2017 15:58:11 +0800 Subject: [PATCH 262/343] ct --- .../layout/FRAbsoluteLayoutAdapter.java | 698 +++-- .../adapters/layout/FRFitLayoutAdapter.java | 2385 ++++++++--------- .../beans/location/AccessDirection.java | 335 ++- 3 files changed, 1693 insertions(+), 1725 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java index 7810fc9a6..603626e13 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java @@ -1,354 +1,346 @@ -package com.fr.design.designer.beans.adapters.layout; - -import java.awt.*; - -import com.fr.design.beans.GroupModel; -import com.fr.design.designer.beans.ConstraintsGroupModel; -import com.fr.design.designer.beans.HoverPainter; -import com.fr.design.designer.beans.painters.FRAbsoluteLayoutPainter; -import com.fr.design.designer.creator.*; -import com.fr.design.designer.properties.BoundsGroupModel; -import com.fr.design.designer.properties.FRAbsoluteLayoutPropertiesGroupModel; -import com.fr.form.ui.container.WAbsoluteLayout; -import com.fr.design.utils.ComponentUtils; -import com.fr.design.utils.gui.LayoutUtils; -import com.fr.general.ComparatorUtils; -import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; -import com.fr.general.FRLogger; - -public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { - //是不是添加到父容器上 - private boolean isAdd2ParentLayout = false; - private HoverPainter painter; - - public FRAbsoluteLayoutAdapter(XLayoutContainer container) { - super(container); - painter = new FRAbsoluteLayoutPainter(container); - initMinSize(); - } - - private void initMinSize() { - XWAbsoluteLayout layout = (XWAbsoluteLayout) container; - minWidth = layout.getActualMinWidth(); - minHeight = layout.getActualMinHeight(); - actualVal = layout.getAcualInterval(); - margin = layout.toData().getMargin(); - } - - @Override - public HoverPainter getPainter() { - return painter; - } - - /** - * 是否能在指定位置添加组件 - * @param creator 组件 - * @param x 坐标x - * @param y 坐标y - * @return 能则返回true - */ - //这个地方的逻辑非常复杂, - // 1.当前绝对布局是不可编辑且是最外层,那么其他控件添加在它周围, - // 2.当前绝对布局是不可编辑且不是最外层,那么控件不可添加,(嵌套) - // 3.当前绝对布局可编辑,那么控件添加 - @Override - public boolean accept(XCreator creator, int x, int y) { - Component comp = container.getComponentAt(x, y); - //布局控件要先判断是不是可编辑 - //可以编辑,按原有逻辑判断 - //不可编辑,当成一整个控件处理 - if (comp == null){ - return false; - } - //参数面板内的组件不允许拖往绝对布局中 - if (creator.getParent() != null && ((XCreator)creator.getParent()).acceptType(XWParameterLayout.class)){ - Rectangle rec = creator.getBounds(); - rec.y = creator.getParent().getHeight() - rec.height; - creator.setBounds(rec); - return false; - } - //判断下组件能不能拖入绝对布局 - if (!creator.canEnterIntoAbsolutePane()){ - return false; - } - XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer((XCreator)comp).getTopLayout(); - if(topLayout != null){ - if (topLayout.isEditable()){ - return topLayoutAccept(creator, x, y, topLayout); - } - //绝对布局嵌套,处于内层,不可编辑,不添加,topLayout只能获取到最外层可编辑的布局 - else if (((XLayoutContainer)topLayout.getParent()).acceptType(XWAbsoluteLayout.class)) { - return false; - } - else { - return acceptWidget(creator, x, y); - } - } - else{ - FRLogger.getLogger().error("top layout is null!"); - } - - return false; - } - - //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); - creatorX = creatorRectangle.x; - creatorY = creatorRectangle.y; - } else { - int w = creator.getWidth() / 2; - int h = creator.getHeight() / 2; - creatorX = x - w; - creatorY = y - h; - } - //再判断和布局中其他控件重叠 - Rectangle curRec = new Rectangle(creatorX, creatorY, creator.getWidth(), creator.getHeight()); - WAbsoluteLayout wAbsoluteLayout = (WAbsoluteLayout)topLayout.toData(); - for (int i = 0, count = wAbsoluteLayout.getWidgetCount(); i < count; i++) { - BoundsWidget temp = (BoundsWidget) wAbsoluteLayout.getWidget(i); - Rectangle rectangle = temp.getBounds(); - if (curRec.intersects(rectangle)){ - return false; - } - } - if (creatorX < 0 || creatorX + creator.getWidth() > container.getWidth()) { - return false; - } - if (creatorY < 0 || creatorY + creator.getHeight() > container.getHeight()){ - return false; - } - return x >= 0 && y >= 0 && creator.getHeight() <= container.getHeight() - && creator.getWidth() <= container.getWidth(); - } - - /** - * 判断是否鼠标在组件的三等分区域,如果组件在布局管理器中间,上下左右都可能会三等分 - * @param parentComp 鼠标所在区域的组件 - * @param x 坐标x - * @param y 坐标y - * @return 是则返回true - */ - public boolean isTrisectionArea(Component parentComp, int x, int y) { - XCreator creator = (XCreator)parentComp; - trisectAreaDirect = 0; - if (container.getComponentCount()<=1) { - return false; - } - int maxWidth = parentComp.getWidth(); - int maxHeight = parentComp.getHeight(); - int xL = parentComp.getX(); - int yL = parentComp.getY(); - // 组件宽高的十分之一和默认值取大 - int minRangeWidth = Math.max(maxWidth/BORDER_PROPORTION, DEFAULT_AREA_LENGTH); - int minRangeHeight = Math.max(maxHeight/BORDER_PROPORTION, DEFAULT_AREA_LENGTH); - if(yyL+maxHeight-minRangeHeight) { - // 在组件下侧三等分 - trisectAreaDirect = COMP_BOTTOM; - } else if (xxL+maxWidth-minRangeWidth) { - // 在组件右侧三等分 - trisectAreaDirect = COMP_RIGHT; - } - // tab布局的边界特殊处理,不进行三等分 - if(!creator.getTargetChildrenList().isEmpty()){ - return false; - } - - return !ComparatorUtils.equals(trisectAreaDirect, 0); - } - - //当前绝对布局不可编辑,就当成一个控件,组件添加在周围 - private boolean acceptWidget(XCreator creator, int x, int y){ - isFindRelatedComps = false; - //拖入组件判断时,先判断是否为交叉点区域,其次三等分区域,再次平分区域 - Component comp = container.getComponentAt(x, y); - boolean isMatchEdge = false; - //如果当前处于边缘地带, 那么就把他贴到父容器上 - XLayoutContainer parent = container.findNearestFit(); - container = parent != null ? parent : container; - isAdd2ParentLayout = true; - - int componentHeight = comp.getHeight(); - int componentWidth = comp.getWidth(); - //上半部分高度 - int upHeight = (int) (componentHeight * TOP_HALF) + comp.getY(); - //下半部分高度 - int downHeight = (int) (componentHeight * BOTTOM_HALF) + comp.getY(); - - if (isCrossPointArea(comp, x, y)) { - return canAcceptWhileCrossPoint(comp, x, y); - } - - if (isTrisectionArea(comp, x, y)) { - return canAcceptWhileTrisection(comp, x, y); - } - - boolean horizonValid = componentWidth >= minWidth * 2 + actualVal; - boolean verticalValid = componentHeight >= minHeight * 2 + actualVal; - return y > upHeight && y < downHeight ? horizonValid : verticalValid; - } - - /** - * 组件的ComponentAdapter在添加组件时,如果发现布局管理器不为空,会继而调用该布局管理器的 - * addComp方法来完成组件的具体添加。在该方法内,布局管理器可以提供额外的功能。 - * - * @param creator 被添加的新组件 - * @param x 添加的位置x,该位置是相对于container的 - * @param y 添加的位置y,该位置是相对于container的 - * @return 是否添加成功,成功返回true,否则false - */ - @Override - public boolean addBean(XCreator creator, int x, int y) { - Rectangle rect = ComponentUtils.getRelativeBounds(container); - - int posX = x + rect.x; - int posY = y + rect.y; - if (!accept(creator, x, y)) { - return false; - } - addComp(creator, posX, posY); - ((XWidgetCreator) creator).recalculateChildrenSize(); - return true; - } - - @Override - protected void addComp(XCreator creator, int x, int y) { - if(!isAdd2ParentLayout) { - Rectangle r = ComponentUtils.getRelativeBounds(container); - x = x - r.x; - y = y - r.y; - if (XCreatorUtils.getParentXLayoutContainer(creator) != null) { - - Rectangle creatorRectangle = ComponentUtils.getRelativeBounds(creator); - x = creatorRectangle.x - r.x; - y = creatorRectangle.y - r.y; - } else { - int w = creator.getWidth() / 2; - int h = creator.getHeight() / 2; - x = x - w; - y = y - h; - } - fix(creator, x, y); - - if (creator.hasTitleStyle()) { - addParentCreator(creator); - } else { - container.add(creator, creator.toData().getWidgetName()); - } - XWAbsoluteLayout layout = (XWAbsoluteLayout) container; - layout.updateBoundsWidget(creator); - updateCreatorBackBound(); - LayoutUtils.layoutRootContainer(container); - }else{ - fixAbsolute(creator, x, y); - if (creator.shouldScaleCreator() || creator.hasTitleStyle()) { - addParentCreator(creator); - } else { - container.add(creator, creator.toData().getWidgetName()); - } - XWFitLayout layout = (XWFitLayout) container; - // 更新对应的BoundsWidget - layout.updateBoundsWidget(); - updateCreatorBackBound(); - } - } - - private void updateCreatorBackBound() { - for (int i=0,size=container.getComponentCount(); i container.getWidth()) { - width = container.getWidth() - x; - } - - if (y < 0) { - height += y; - y = 0; - } else if (y + creator.getHeight() > container.getHeight()) { - height = container.getHeight() - y; - } - - creator.setBounds(x, y, width, height); - } - - @Override - public ConstraintsGroupModel getLayoutConstraints(XCreator creator) { - return new BoundsGroupModel((XWAbsoluteLayout)container, creator); - } - - @Override - public GroupModel getLayoutProperties() { - XWAbsoluteLayout xwAbsoluteLayout = (XWAbsoluteLayout) container; - return new FRAbsoluteLayoutPropertiesGroupModel(xwAbsoluteLayout); - } +package com.fr.design.designer.beans.adapters.layout; + +import com.fr.design.beans.GroupModel; +import com.fr.design.designer.beans.ConstraintsGroupModel; +import com.fr.design.designer.beans.HoverPainter; +import com.fr.design.designer.beans.painters.FRAbsoluteLayoutPainter; +import com.fr.design.designer.creator.*; +import com.fr.design.designer.properties.BoundsGroupModel; +import com.fr.design.designer.properties.FRAbsoluteLayoutPropertiesGroupModel; +import com.fr.design.utils.ComponentUtils; +import com.fr.design.utils.gui.LayoutUtils; +import com.fr.form.ui.container.WAbsoluteLayout; +import com.fr.general.ComparatorUtils; +import com.fr.general.FRLogger; + +import java.awt.*; + +public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { + //是不是添加到父容器上 + private boolean isAdd2ParentLayout = false; + private HoverPainter painter; + + public FRAbsoluteLayoutAdapter(XLayoutContainer container) { + super(container); + painter = new FRAbsoluteLayoutPainter(container); + initMinSize(); + } + + private void initMinSize() { + XWAbsoluteLayout layout = (XWAbsoluteLayout) container; + minWidth = layout.getActualMinWidth(); + minHeight = layout.getActualMinHeight(); + actualVal = layout.getAcualInterval(); + margin = layout.toData().getMargin(); + } + + @Override + public HoverPainter getPainter() { + return painter; + } + + /** + * 是否能在指定位置添加组件 + * + * @param creator 组件 + * @param x 坐标x + * @param y 坐标y + * @return 能则返回true + */ + //这个地方的逻辑非常复杂, + // 1.当前绝对布局是不可编辑且是最外层,那么其他控件添加在它周围, + // 2.当前绝对布局是不可编辑且不是最外层,那么控件不可添加,(嵌套) + // 3.当前绝对布局可编辑,那么控件添加 + @Override + public boolean accept(XCreator creator, int x, int y) { + Component comp = container.getComponentAt(x, y); + //布局控件要先判断是不是可编辑 + //可以编辑,按原有逻辑判断 + //不可编辑,当成一整个控件处理 + if (comp == null) { + return false; + } + //参数面板内的组件不允许拖往绝对布局中 + if (creator.getParent() != null && ((XCreator) creator.getParent()).acceptType(XWParameterLayout.class)) { + Rectangle rec = creator.getBounds(); + rec.y = creator.getParent().getHeight() - rec.height; + creator.setBounds(rec); + return false; + } + //判断组件能不能拖入绝对布局 + if (!creator.canEnterIntoAbsolutePane()) { + return false; + } + XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer((XCreator) comp).getTopLayout(); + if (topLayout != null) { + if (topLayout.isEditable()) { + return topLayoutAccept(creator, x, y); + } + //绝对布局嵌套,处于内层,不可编辑,不添加,topLayout只能获取到最外层可编辑的布局 + else if (((XLayoutContainer) topLayout.getParent()).acceptType(XWAbsoluteLayout.class)) { + return false; + } else { + return acceptWidget(x, y); + } + } else { + FRLogger.getLogger().error("top layout is null!"); + } + + return false; + } + + //topLayout假如可以编辑的话就往里面添加组件 + private boolean topLayoutAccept(XCreator creator, int x, int y) { + //允许组件重叠,可以不判断有没有和当前控件重叠 + //先计算当前控件的位置 + int creatorX, creatorY; + if (XCreatorUtils.getParentXLayoutContainer(creator) != null) { + Rectangle creatorRectangle = ComponentUtils.getRelativeBounds(creator); + creatorX = creatorRectangle.x; + creatorY = creatorRectangle.y; + } else { + //这边计算得到的组件其实位置是正确的, + //因为传入的x和y已经加上了宽度或者高度的一半,再减去相同的宽度和高度的一半是没区别的, + // 例如高度为21,那么就是+10-10; + // 高度为20,那么就是+10-10; 没区别 + int w = creator.getWidth() / 2; + int h = creator.getHeight() / 2; + creatorX = x - w; + creatorY = y - h; + } + if (creatorX < 0 || creatorX + creator.getWidth() > container.getWidth()) { + return false; + } + if (creatorY < 0 || creatorY + creator.getHeight() > container.getHeight()) { + return false; + } + return x >= 0 && y >= 0 && creator.getHeight() <= container.getHeight() + && creator.getWidth() <= container.getWidth(); + } + + /** + * 判断是否鼠标在组件的三等分区域,如果组件在布局管理器中间,上下左右都可能会三等分 + * + * @param parentComp 鼠标所在区域的组件 + * @param x 坐标x + * @param y 坐标y + * @return 是则返回true + */ + public boolean isTrisectionArea(Component parentComp, int x, int y) { + XCreator creator = (XCreator) parentComp; + trisectAreaDirect = 0; + if (container.getComponentCount() <= 1) { + return false; + } + int maxWidth = parentComp.getWidth(); + int maxHeight = parentComp.getHeight(); + int xL = parentComp.getX(); + int yL = parentComp.getY(); + // 组件宽高的十分之一和默认值取大 + int minRangeWidth = Math.max(maxWidth / BORDER_PROPORTION, DEFAULT_AREA_LENGTH); + int minRangeHeight = Math.max(maxHeight / BORDER_PROPORTION, DEFAULT_AREA_LENGTH); + if (y < yL + minRangeHeight) { + // 在组件上侧三等分 + trisectAreaDirect = COMP_TOP; + } else if (y > yL + maxHeight - minRangeHeight) { + // 在组件下侧三等分 + trisectAreaDirect = COMP_BOTTOM; + } else if (x < xL + minRangeWidth) { + // 在组件左侧三等分 + trisectAreaDirect = COMP_LEFT; + } else if (x > xL + maxWidth - minRangeWidth) { + // 在组件右侧三等分 + trisectAreaDirect = COMP_RIGHT; + } + // tab布局的边界特殊处理,不进行三等分 + if (!creator.getTargetChildrenList().isEmpty()) { + return false; + } + + return !ComparatorUtils.equals(trisectAreaDirect, 0); + } + + //当前绝对布局不可编辑,就当成一个控件,组件添加在周围 + private boolean acceptWidget(int x, int y) { + isFindRelatedComps = false; + //拖入组件判断时,先判断是否为交叉点区域,其次三等分区域,再次平分区域 + Component comp = container.getComponentAt(x, y); + //如果当前处于边缘地带, 那么就把他贴到父容器上 + XLayoutContainer parent = container.findNearestFit(); + container = parent != null ? parent : container; + isAdd2ParentLayout = true; + + int componentHeight = comp.getHeight(); + int componentWidth = comp.getWidth(); + //上半部分高度 + int upHeight = (int) (componentHeight * TOP_HALF) + comp.getY(); + //下半部分高度 + int downHeight = (int) (componentHeight * BOTTOM_HALF) + comp.getY(); + + if (isCrossPointArea(comp, x, y)) { + return canAcceptWhileCrossPoint(comp, x, y); + } + + if (isTrisectionArea(comp, x, y)) { + return canAcceptWhileTrisection(comp, x, y); + } + + boolean horizonValid = componentWidth >= minWidth * 2 + actualVal; + boolean verticalValid = componentHeight >= minHeight * 2 + actualVal; + return y > upHeight && y < downHeight ? horizonValid : verticalValid; + } + + /** + * 组件的ComponentAdapter在添加组件时,如果发现布局管理器不为空,会继而调用该布局管理器的 + * addComp方法来完成组件的具体添加。在该方法内,布局管理器可以提供额外的功能。 + * + * @param creator 被添加的新组件 + * @param x 添加的位置x,该位置是相对于container的 + * @param y 添加的位置y,该位置是相对于container的 + * @return 是否添加成功,成功返回true,否则false + */ + @Override + public boolean addBean(XCreator creator, int x, int y) { + Rectangle rect = ComponentUtils.getRelativeBounds(container); + + int posX = x + rect.x; + int posY = y + rect.y; + if (!accept(creator, x, y)) { + return false; + } + addComp(creator, posX, posY); + ((XWidgetCreator) creator).recalculateChildrenSize(); + return true; + } + + @Override + protected void addComp(XCreator creator, int x, int y) { + if (!isAdd2ParentLayout) { + Rectangle r = ComponentUtils.getRelativeBounds(container); + x = x - r.x; + y = y - r.y; + if (XCreatorUtils.getParentXLayoutContainer(creator) != null) { + + Rectangle creatorRectangle = ComponentUtils.getRelativeBounds(creator); + x = creatorRectangle.x - r.x; + y = creatorRectangle.y - r.y; + } else { + int w = creator.getWidth() / 2; + int h = creator.getHeight() / 2; + x = x - w; + y = y - h; + } + fix(creator, x, y); + + if (creator.hasTitleStyle()) { + addParentCreator(creator); + } else { + container.add(creator, creator.toData().getWidgetName()); + } + XWAbsoluteLayout layout = (XWAbsoluteLayout) container; + layout.updateBoundsWidget(creator); + updateCreatorBackBound(); + LayoutUtils.layoutRootContainer(container); + } else { + fixAbsolute(creator, x, y); + if (creator.shouldScaleCreator() || creator.hasTitleStyle()) { + addParentCreator(creator); + } else { + container.add(creator, creator.toData().getWidgetName()); + } + XWFitLayout layout = (XWFitLayout) container; + // 更新对应的BoundsWidget + layout.updateBoundsWidget(); + updateCreatorBackBound(); + } + } + + private void updateCreatorBackBound() { + for (int i = 0, size = container.getComponentCount(); i < size; i++) { + XCreator creator = (XCreator) container.getComponent(i); + creator.updateChildBound(minHeight); + creator.setBackupBound(creator.getBounds()); + } + } + + private void addParentCreator(XCreator child) { + XLayoutContainer parentPanel = child.initCreatorWrapper(child.getHeight()); + container.add(parentPanel, child.toData().getWidgetName()); + } + + /** + * 新拖入组件时,计算调整其他关联组件位置大小 + * + * @param child 新拖入的组件 + * @param x 鼠标所在x坐标 + * @param y 鼠标所在y坐标 + */ + 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()); + } else if (isCrossPointArea(parentComp, x, y)) { + //交叉区域插入组件时,根据具体位置进行上下或者左右或者相邻三个组件的位置大小插入 + fixCrossPointArea(parentComp, child, x, y); + return; + } else if (isTrisectionArea(parentComp, x, y)) { + // 在边界三等分区域,就不再和组件二等分了 + fixTrisect(parentComp, child, x, y); + return; + } else { + fixHalve(parentComp, child, x, y); + } + } + + /** + * 组件拖拽后调整大小 + * + * @param creator 组件 + */ + @Override + public void fix(XCreator creator) { + WAbsoluteLayout wabs = (WAbsoluteLayout) container.toData(); + fix(creator, creator.getX(), creator.getY()); + wabs.setBounds(creator.toData(), creator.getBounds()); + + XWAbsoluteLayout layout = (XWAbsoluteLayout) container; + layout.updateBoundsWidget(creator); + } + + /** + * 调整组件大小到合适尺寸位置 + * + * @param creator 组件 + * @param x 坐标x + * @param y 坐标y + */ + public void fix(XCreator creator, int x, int y) { + int height = creator.getHeight(); + int width = creator.getWidth(); + if (x < 0) { + x = container.getX(); + } else if (x + creator.getWidth() > container.getWidth()) { + x = container.getWidth() - width; + } + + if (y < 0) { + y = container.getY(); + } else if (y + creator.getHeight() > container.getHeight()) { + y = container.getHeight() - height; + } + + creator.setBounds(x, y, width, height); + } + + @Override + public ConstraintsGroupModel getLayoutConstraints(XCreator creator) { + return new BoundsGroupModel((XWAbsoluteLayout) container, creator); + } + + @Override + public GroupModel getLayoutProperties() { + XWAbsoluteLayout xwAbsoluteLayout = (XWAbsoluteLayout) container; + return new FRAbsoluteLayoutPropertiesGroupModel(xwAbsoluteLayout); + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java index 7401b8d07..eca82e502 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java @@ -1,1198 +1,1189 @@ -/** - * - */ -package com.fr.design.designer.beans.adapters.layout; - -import java.awt.Component; -import java.awt.Dimension; -import java.awt.Rectangle; -import java.util.ArrayList; -import java.util.List; - -import com.fr.design.beans.GroupModel; -import com.fr.design.designer.beans.ConstraintsGroupModel; -import com.fr.design.designer.beans.HoverPainter; -import com.fr.design.designer.beans.painters.FRFitLayoutPainter; -import com.fr.design.designer.creator.XCreator; -import com.fr.design.designer.creator.XCreatorUtils; -import com.fr.design.designer.creator.XLayoutContainer; -import com.fr.design.designer.creator.XWFitLayout; -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.properties.FRFitLayoutConstraints; -import com.fr.design.designer.properties.FRFitLayoutPropertiesGroupModel; -import com.fr.design.file.HistoryTemplateListPane; -import com.fr.design.mainframe.JForm; -import com.fr.design.utils.ComponentUtils; -import com.fr.form.ui.LayoutBorderStyle; -import com.fr.form.ui.container.WLayout; -import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; -import com.fr.general.ComparatorUtils; -import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; - -/** - * 自适应布局的容器适配器 - * - * @author jim - * @date 2014-6-24 - */ -public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { - - public static final String WIDGETPANEICONPATH = "/com/fr/web/images/form/resources/layout_absolute.png"; - private static final int DEPENDING_SCOPE = 3; - private HoverPainter painter; - //区分拖拽和编辑宽高 - private boolean isEdit; - - public boolean isEdit() { - return isEdit; - } - - public void setEdit(boolean edit) { - isEdit = edit; - } - /** - * 构造函数 - * - * @param container XWFitLayout容器 - */ - public FRFitLayoutAdapter(XLayoutContainer container) { - super(container); - painter = new FRFitLayoutPainter(container); - initMinSize(); - } - - private void initMinSize() { - XWFitLayout layout = (XWFitLayout) container; - minWidth = layout.getActualMinWidth(); - minHeight = layout.getActualMinHeight(); - actualVal = layout.getAcualInterval(); - margin = layout.toData().getMargin(); - } - - @Override - public HoverPainter getPainter() { - return painter; - } - - /** - * 返回布局自身属性,方便一些特有设置在layout刷新时处理 - */ - @Override - public GroupModel getLayoutProperties() { - XWFitLayout xfl = (XWFitLayout) container; - return new FRFitLayoutPropertiesGroupModel(xfl); - } - - /** - * 添加组件 - * - * @param child 待添加的组件 - * @param x 坐标x - * @param y 坐标y - */ - @Override - public void addComp(XCreator child, int x, int y) { - fix(child, x, y); - if (child.shouldScaleCreator() || child.hasTitleStyle()) { - addParentCreator(child); - } else { - container.add(child, child.toData().getWidgetName()); - } - XWFitLayout layout = (XWFitLayout) container; - // 更新对应的BoundsWidget - layout.updateBoundsWidget(); - updateCreatorBackBound(); - } - - public void updateCreatorBackBound() { - for (int i = 0, size = container.getComponentCount(); i < size; i++) { - XCreator creator = (XCreator) container.getComponent(i); - creator.updateChildBound(minHeight); - creator.setBackupBound(creator.getBounds()); - } - } - - - private void addParentCreator(XCreator child) { - XLayoutContainer parentPanel = child.initCreatorWrapper(minHeight); - container.add(parentPanel, child.toData().getWidgetName()); - } - - /** - * 能否对应位置放置当前组件 - * - * @param creator 组件 - * @param x 添加的位置x,该位置是相对于container的 - * @param y 添加的位置y,该位置是相对于container的 - * @return 是否可以放置 - */ - @Override - public boolean accept(XCreator creator, int x, int y) { - // 计算是否能拖入鼠标区域时,会用到fix 的方法 - isFindRelatedComps = false; - //拖入组件判断时,先判断是否为交叉点区域,其次三等分区域,再次平分区域 - Component comp = container.getComponentAt(x, y); - if (checkInterval(comp)) { - return false; - } - //如果当前处于边缘地带, 那么就把他贴到父容器上 - boolean isMatchEdge = matchEdge(x, y); - - int componentHeight = comp.getHeight(); - int componentWidth = comp.getWidth(); - //上半部分高度 - int upHeight = (int) (componentHeight * TOP_HALF) + comp.getY(); - //下半部分高度 - int downHeight = (int) (componentHeight * BOTTOM_HALF) + comp.getY(); - - //布局控件要先判断是不是可编辑 - XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer((XCreator) comp).getTopLayout(); - if (topLayout != null && !isMatchEdge && !topLayout.isEditable()) { - return false; - } - - if (isCrossPointArea(comp, x, y)) { - return canAcceptWhileCrossPoint(comp, x, y); - } - - if (isTrisectionArea(comp, x, y)) { - return canAcceptWhileTrisection(comp, x, y); - } - - boolean horizonValid = componentWidth >= minWidth * 2 + actualVal; - boolean verticalValid = componentHeight >= minHeight * 2 + actualVal; - return y > upHeight && y < downHeight ? horizonValid : verticalValid; - } - - // 间隔区域 - private boolean checkInterval(Component comp) { - return container.getComponentCount() > 0 && comp == container; - } - - /** - * 是否在组件边缘 - * - * @param x 横坐标 - * @param y 纵坐标 - * @return 是否在组件边缘 - */ - public boolean matchEdge(int x, int y) { - if (intersectsEdge(x, y, container)) { - //寻找最近的fit, 在边缘地段添加的控件, 将其送给该fit - XLayoutContainer parent = container.findNearestFit(); - container = parent != null ? parent : container; - return true; - } - return false; - } - - /** - * 是否在组件边缘 - * - * @param x 横坐标 - * @param y 纵坐标 - * @param container 参照组件 - * @return 是否在组件边缘 - */ - //是否包含于边缘地段, 按顺序上, 下, 左, 右检测 - public boolean intersectsEdge(int x, int y, XLayoutContainer container) { - int containerX = container.getX(); - int containerY = container.getY(); - int containerWidth = container.getWidth(); - int containerHeight = container.getHeight(); - - // 当前坐标点 - Rectangle currentXY = new Rectangle(x, y, 1, 1); - // 上边缘 - Rectangle upEdge = new Rectangle(containerX, containerY, containerWidth, BORDER_PROPORTION); - if (upEdge.intersects(currentXY)) { - return true; - } - - int bottomY = containerY + containerHeight - BORDER_PROPORTION; - // 下边缘 - Rectangle bottomEdge = new Rectangle(containerX, bottomY, containerWidth, BORDER_PROPORTION); - if (bottomEdge.intersects(currentXY)) { - return true; - } - - //左右边缘的高度 -10*2 是为了不和上下边缘重合 - int verticalHeight = containerHeight - BORDER_PROPORTION * 2; - int leftY = containerY + BORDER_PROPORTION; - // 左边缘 - Rectangle leftEdge = new Rectangle(containerX, leftY, BORDER_PROPORTION, verticalHeight); - if (leftEdge.intersects(currentXY)) { - return true; - } - - int rightY = containerY + BORDER_PROPORTION; - int rightX = containerX + containerWidth - BORDER_PROPORTION; - // 右边缘 - Rectangle rightEdge = new Rectangle(rightX, rightY, BORDER_PROPORTION, verticalHeight); - return rightEdge.intersects(currentXY); - } - - /** - * 交叉点区域时,能否对应位置放入组件 - */ - protected boolean canAcceptWhileCrossPoint(Component comp, int x, int y) { - return super.canAcceptWhileCrossPoint(comp, x, y); - } - - protected boolean canAcceptWhileTrisection(Component comp, int x, int y) { - return super.canAcceptWhileTrisection(comp, x, y); - } - - /** - * 判断是否鼠标在组件的三等分区域,如果组件在布局管理器中间,上下左右都可能会三等分 - * - * @param parentComp 鼠标所在区域的组件 - * @param x 坐标x - * @param y 坐标y - * @return 是则返回true - */ - public boolean isTrisectionArea(Component parentComp, int x, int y) { - return super.isTrisectionArea(parentComp, x, y); - } - - /** - * 是否为组件交叉点区域 或者是相邻三组建中间点 - * - * @param currentComp 当前组件 - * @param x 坐标x - * @param y 坐标y - * @return 是则返回true - */ - public boolean isCrossPointArea(Component currentComp, int x, int y) { - return super.isCrossPointArea(currentComp, x, y); - } - - protected void initCompsList() { - super.initCompsList(); - } - - protected void clearCompsList() { - super.clearCompsList(); - } - - protected Rectangle getLayoutBound(XWCardMainBorderLayout mainLayout){ - return mainLayout.getBounds(); - } - - private Rectangle adjustBackupBound(Rectangle backupBound, XWCardMainBorderLayout mainLayout) { - // 参数界面高度对纵坐标产生的影响 - JForm jform = (JForm) (HistoryTemplateListPane.getInstance().getCurrentEditingTemplate()); - if (jform.getFormDesign().getParaComponent() != null) { - backupBound.y -= jform.getFormDesign().getParaHeight(); - } - - Rectangle rec = getLayoutBound(mainLayout); - // XWTabLayout里面的横纵坐标收到外层XWCardMainBorderLayout的横纵坐标影响 - // 减掉之后可以按照它原来的逻辑执行 - backupBound.x -= rec.x; - backupBound.y -= rec.y; - XWCardLayout cardLayout = mainLayout.getCardPart(); - LayoutBorderStyle style = cardLayout.toData().getBorderStyle(); - // 当tab布局为标题样式时,才需要处理标题栏高度产生的影响 - if (ComparatorUtils.equals(style.getType(), LayoutBorderStyle.TITLE)) { - backupBound.y -= WCardMainBorderLayout.TAB_HEIGHT; - } - return backupBound; - } - - /** - * 拖拽控件边框后,根据控件的大小尺寸,进行相关组件的调整 - * - * @param creator 组件 - */ - @Override - public void fix(XCreator creator) { - //拖拽组件原大小、位置 - Rectangle backupBound = creator.getBackupBound(); - backupBound.x -= container.getX(); - backupBound.y -= container.getY(); - //当前拖拽组件的位置 - int x = creator.getX(); - int y = creator.getY(); - - // 获取容器所有内部组件横坐标 - int[] posXs = container.getHors(); - // 获取容器所有内部组件纵坐标 - int[] posYs = container.getVeris(); - - XLayoutContainer outerLayout = container.getOuterLayout(); - if (!ComparatorUtils.equals(outerLayout, container.getBackupParent())) { - XWCardMainBorderLayout mainLayout = (XWCardMainBorderLayout) outerLayout; - backupBound = adjustBackupBound(backupBound, mainLayout); - } - - //拖拽组件拖拽以后的大小 - int w = creator.getWidth(); - int h = creator.getHeight(); - initCompsList(); - creator.setBounds(backupBound); - int difference = 0; - if (x != backupBound.x) { - dealLeft(backupBound, x, posXs, difference, creator); - } else if (w != backupBound.width) { - dealRight(backupBound, x, w, posXs, difference, creator); - } else if (y != backupBound.y) { - dealTop(backupBound, y, posYs, difference, creator); - } else if (h != backupBound.height) { - dealButtom(backupBound, y, h, posYs, difference, creator); - } - clearCompsList(); - XWFitLayout layout = (XWFitLayout) container; - layout.updateBoundsWidget(); // 更新对应的BoundsWidget - updateCreatorBackBound(); - } - - /** - * 拖拽控件边框后,根据控件的大小尺寸,进行相关组件的调整 - * - * @param backupBound 边界备份 - * @param bounds 组件边界 - * @param xCreator 组件 - * @param row 选中的行 - * @param difference 偏移量 - */ - public void calculateBounds(Rectangle backupBound, Rectangle bounds, XCreator xCreator, int row, int difference) { - Rectangle rc = new Rectangle(0,0,0,0); - XLayoutContainer parent = XCreatorUtils.getParentXLayoutContainer(xCreator); - if (parent != null) { - Rectangle rec = ComponentUtils.getRelativeBounds(parent); - rc.x = rec.x; - rc.y = rec.y; - } - int x = backupBound.x - rc.x, y = backupBound.y - rc.y; - //处理左右延伸 - switch (row) { - case 0: - if (backupBound.width + backupBound.x == container.getWidth() - margin.getRight() +rc.x) { - x += difference; - } - break; - case 1: - if(backupBound.y + backupBound.height == container.getHeight() - margin.getBottom() +rc.y){ - y += difference; - } - break; - } - bounds.setLocation(x,y); - xCreator.setBackupBound(backupBound); - xCreator.setBounds(bounds); - this.fix(xCreator); - } - - private void dealLeft(Rectangle backupBound, int x, int[] posXs, int difference, XCreator creator) { - if (backupBound.x == margin.getLeft()) { - return; - } - x = adjustCoordinateByDependingLine(x, posXs); - difference = x - backupBound.x; - dealDirectionAtLeft(backupBound, difference, creator); - } - - private void dealRight(Rectangle backupBound, int x, int w, int[] posXs, int difference, XCreator creator) { - if (backupBound.width + backupBound.x == container.getWidth() - margin.getRight()) { - return; - } - w = adjustDiffByDependingLine(x, posXs, w); - difference = w - backupBound.width; //拖拽长度 - dealDirectionAtRight(backupBound, difference, creator); - } - - private void dealTop(Rectangle backupBound, int y, int[] posYs, int difference, XCreator creator) { - if (backupBound.y == margin.getTop()) { - return; - } - y = adjustCoordinateByDependingLine(y, posYs); - difference = y - backupBound.y; - dealDirectionAtTop(backupBound, difference, creator); - } - - private void dealButtom(Rectangle backupBound, int y, int h, int[] posYs, int difference, XCreator creator) { - if (backupBound.y + backupBound.height == container.getHeight() - margin.getBottom()) { - return; - } - h = adjustDiffByDependingLine(y, posYs, h); - difference = h - backupBound.height; - dealDirectionABottom(backupBound, difference, creator); - } - - // 根据需要依附的位置调整拖拽的坐标值 - private int adjustCoordinateByDependingLine(int coordinate, int[] coordinates) { - if(!isEdit) { - for (int i = 0; i < coordinates.length; i++) { - if (coordinate == coordinates[i]) { - continue; - } - if (coordinate > coordinates[i] - DEPENDING_SCOPE && coordinate < coordinates[i] + DEPENDING_SCOPE) { - coordinate = coordinates[i]; - break; - } - } - } - return coordinate; - } - - // 根据需要依附的位置调整拖拽的距离 - private int adjustDiffByDependingLine(int coordinate, int[] coordinates, int diff) { - if(!isEdit) { - for (int i = 0; i < coordinates.length; i++) { - if (coordinate + diff > coordinates[i] - DEPENDING_SCOPE && coordinate + diff < coordinates[i] + DEPENDING_SCOPE) { - diff = coordinates[i] - coordinate; - break; - } - } - } - return diff; - } - - // 左侧边框拉伸,循环找出对齐的两侧控件 - private void dealDirectionAtLeft(Rectangle backupBound, int difference, Component creator) { - rightComps.add(creator); - Component rightComp = null; - int leftx = backupBound.x - DEFAULT_AREA_LENGTH - actualVal; - // 取左侧边框右面的组件x值 - int rightx = backupBound.x + DEFAULT_AREA_LENGTH; - Component leftComp = container.getLeftComp(backupBound.x, backupBound.y); - leftComps.add(leftComp); - //先找上侧对齐时(y相等)的左右两边组件 - int ry = backupBound.y; - int ly = leftComp.getY(); - int min = margin.getTop(); - int max = container.getHeight() - margin.getBottom(); - while (ry >= min && ly >= min) { - if (ry == ly) { - break; - } else { - if (ry > ly) { - rightComp = container.getTopComp(rightx, ry); - ry = rightComp.getY(); - rightComps.add(rightComp); - } else { - leftComp = container.getTopComp(leftx, ly); - ly = leftComp.getY(); - leftComps.add(leftComp); - } - } - } - // 下侧对齐时(y+h相等)两边组件 - ry = backupBound.y + backupBound.height; - ly = leftComps.get(0).getY() + leftComps.get(0).getHeight(); - while (ry <= max && ly <= max) { - if (ry == ly) { - break; - } else { - if (ry > ly) { - leftComp = container.getComponentAt(leftx, ly + DEFAULT_AREA_LENGTH + actualVal); - ly = leftComp.getY() + leftComp.getHeight(); - leftComps.add(leftComp); - } else { - rightComp = container.getComponentAt(rightx, ry + DEFAULT_AREA_LENGTH + actualVal); - ry = rightComp.getY() + rightComp.getHeight(); - rightComps.add(rightComp); - } - } - } - dealHorDirection(backupBound.x, difference); - } - - // 右侧边框拉伸,循环找出对齐的两侧控件 - private void dealDirectionAtRight(Rectangle backupBound, int difference, Component creator) { - leftComps.add(creator); - Component leftComp = null; - int leftx = backupBound.x + backupBound.width - DEFAULT_AREA_LENGTH; - // 取右侧边框右面的组件x值 - int rightx = backupBound.x + backupBound.width + DEFAULT_AREA_LENGTH + actualVal; - Component rightComp = container.getRightComp(backupBound.x, backupBound.y, backupBound.width); - rightComps.add(rightComp); - int ly = backupBound.y, ry = rightComp.getY(); - int min = margin.getTop(); - int max = container.getHeight() - margin.getBottom(); - while (ry >= min && ly >= min) { - if (ry == ly) { - break; - } else { - if (ry > ly) { - rightComp = container.getTopComp(rightx, ry); - ry = rightComp.getY(); - rightComps.add(rightComp); - } else { - leftComp = container.getTopComp(leftx, ly); - ly = leftComp.getY(); - leftComps.add(leftComp); - } - } - } - ly = backupBound.y + backupBound.height; - ry = rightComps.get(0).getY() + rightComps.get(0).getHeight(); - while (ry <= max && ly <= max) { - if (ry == ly) { - break; - } else { - if (ry > ly) { - leftComp = container.getComponentAt(leftx, ly + DEFAULT_AREA_LENGTH + actualVal); - ly = leftComp.getY() + leftComp.getHeight(); - leftComps.add(leftComp); - } else { - rightComp = container.getComponentAt(rightx, ry + DEFAULT_AREA_LENGTH + actualVal); - ry = rightComp.getY() + rightComp.getHeight(); - rightComps.add(rightComp); - } - } - } - dealHorDirection(backupBound.x + backupBound.width + actualVal, difference); - } - - /** - * 水平方向上拉伸边框的处理 - */ - private void dealHorDirection(int objx, int difference) { - if (difference > 0) { - difference = Math.min(getMinWidth(rightComps) - minWidth, difference); - } else { - difference = Math.max(difference, minWidth - getMinWidth(leftComps)); - } - //重新计算左右两侧组件size、point - if (CalculateLefttRelatComponent(difference)) { - CalculateRightRelatComponent(objx + difference, -difference); - } - } - - // 上侧边框拉伸,循环找出对齐的两侧控件 - private void dealDirectionAtTop(Rectangle backupBound, int difference, Component creator) { - downComps.add(creator); - // 取上侧边框上面的组件用的y值 - int topy = backupBound.y - DEFAULT_AREA_LENGTH - actualVal; - // 上侧边框下面的组件y值 - int bottomy = backupBound.y + DEFAULT_AREA_LENGTH; - Component topComp = container.getTopComp(backupBound.x, backupBound.y); - upComps.add(topComp); - Component bottomComp = null; - int min = margin.getLeft(); - int max = container.getWidth() - margin.getRight(); - //先找左侧侧对齐时(x相等)的上下两边组件 - int ux = topComp.getX(); - int dx = backupBound.x; - while (ux >= min && dx >= min) { - if (ux == dx) { - break; - } else { - if (ux < dx) { - bottomComp = container.getLeftComp(dx, bottomy); - dx = bottomComp.getX(); - downComps.add(bottomComp); - } else { - topComp = container.getLeftComp(ux, topy); - ux = topComp.getX(); - upComps.add(topComp); - } - } - } - // 右侧对齐时(x+w相等)两边组件 - ux = upComps.get(0).getX() + upComps.get(0).getWidth(); - dx = backupBound.x + backupBound.width; - while (ux <= max && dx <= max) { - if (ux == dx) { - break; - } else { - if (ux < dx) { - topComp = container.getComponentAt(ux + DEFAULT_AREA_LENGTH + actualVal, topy); - ux = topComp.getX() + topComp.getWidth(); - upComps.add(topComp); - } else { - bottomComp = container.getComponentAt(dx + DEFAULT_AREA_LENGTH + actualVal, bottomy); - dx = bottomComp.getX() + bottomComp.getWidth(); - downComps.add(bottomComp); - } - } - } - - dealVertiDirection(backupBound.y, difference); - } - - // 下侧边框拉伸,循环找出对齐的两侧控件 - private void dealDirectionABottom(Rectangle backupBound, int difference, Component creator) { - upComps.add(creator); - Component topComp = null; - Component bottomComp = container.getBottomComp(backupBound.x, backupBound.y, backupBound.height); - // 下侧边框下面的组件y坐标 - int bottomy = backupBound.y + backupBound.height + DEFAULT_AREA_LENGTH + actualVal; - // 取下侧边框上面的组件用的y值 - int topy = backupBound.y + backupBound.height - DEFAULT_AREA_LENGTH; - downComps.add(bottomComp); - int dx = bottomComp.getX(); - int ux = backupBound.x; - int min = margin.getLeft(); - int max = container.getWidth() - margin.getRight(); - while (ux >= min && dx >= min) { - if (ux == dx) { - break; - } else { - if (ux < dx) { - bottomComp = container.getLeftComp(dx, bottomy); - dx = bottomComp.getX(); - downComps.add(bottomComp); - } else { - topComp = container.getLeftComp(ux, topy); - ux = topComp.getX(); - upComps.add(topComp); - } - } - } - dx = downComps.get(0).getX() + downComps.get(0).getWidth(); - ux = backupBound.x + backupBound.width; - while (ux <= max && dx <= max) { - if (ux == dx) { - break; - } else { - if (ux < dx) { - topComp = container.getComponentAt(ux + DEFAULT_AREA_LENGTH + actualVal, topy); - ux = topComp.getX() + topComp.getWidth(); - upComps.add(topComp); - } else { - bottomComp = container.getComponentAt(dx + DEFAULT_AREA_LENGTH + actualVal, bottomy); - dx = bottomComp.getX() + bottomComp.getWidth(); - downComps.add(bottomComp); - } - } - } - dealVertiDirection(backupBound.y + backupBound.height + actualVal, difference); - } - - /** - * 垂直方向上拉伸边框的处理 - */ - private void dealVertiDirection(int objY, int difference) { - if (difference > 0) { - difference = Math.min(getMinHeight(downComps) - minHeight, difference); - } else { - difference = Math.max(difference, minHeight - getMinHeight(upComps)); - } - //重新计算上下两侧组件size、point - if (CalculateUpRelatComponent(difference)) { - CalculateDownRelatComponent(objY + difference, -difference); - } - ; - } - - /** - * 新拖入组件时,计算调整其他关联组件位置大小 - * - * @param child 新拖入的组件 - * @param x 鼠标所在x坐标 - * @param y 鼠标所在y坐标 - */ - public void fix(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()); - } else if (isCrossPointArea(parentComp, x, y)) { - //交叉区域插入组件时,根据具体位置进行上下或者左右或者相邻三个组件的位置大小插入 - fixCrossPointArea(parentComp, child, x, y); - return; - } else if (isTrisectionArea(parentComp, x, y)) { - // 在边界三等分区域,就不再和组件二等分了 - fixTrisect(parentComp, child, x, y); - return; - } else { - fixHalve(parentComp, child, x, y); - } - } - - /** - * 平分,正常情况拖入组件时,按照上1/4区域、下1/4区域为上下平分,中左侧1/2区域、中右侧1/2区域为左右平分 - */ - protected void fixHalve(Component currentComp, XCreator child, int x, int y) { - super.fixHalve(currentComp, child, x, y); - } - - /** - * 组件交叉区域进行插入时,调整受到变动的其他组件,之前是交叉区域插入也按照三等分逻辑,后面测试中发现有bug,改为和bi一样的鼠标所在侧平分 - * 默认左上角、右下角区域是垂直方向插入组件 - * 右上角和左下角是水平方向插入组件,这样避免田字块时重复 - */ - protected void fixCrossPointArea(Component currentComp, XCreator child, int x, int y) { - super.fixCrossPointArea(currentComp, child, x, y); - } - - /** - * 三等分区域时,调整相关联的组件 - * - * @param currentComp 鼠标所在组件 - * @param child 待插入组件 - */ - protected void fixTrisect(Component currentComp, XCreator child, int x, int y) { - super.fixTrisect(currentComp, child, x, y); - } - - /** - * 删除组件或者重新拖动时,其它组件重新计算位置大小 - */ - protected void delete(XCreator creator, int creatorWidth, int creatorHeight) { - int x = creator.getX(); - int y = creator.getY(); - recalculateChildrenSize(x, y, creatorWidth, creatorHeight); - } - - /** - * 重新计算内部组件大小 - * - * @param x 坐标x - * @param y 坐标y - * @param creatorWidth 删除的组件之前所在布局的宽度 - * @param creatorHeight 删除的组件之前所在布局的高度 - */ - public void recalculateChildrenSize(int x, int y, int creatorWidth, int creatorHeight) { - if (container.getComponentCount() == 0) { - return; - } else { - initCompsList(); - int width = creatorWidth; - int height = creatorHeight; - calculateRelatedComponent(x, y, width, height); - if (!rightComps.isEmpty() && getAllHeight(rightComps) == height) { - CalculateRightRelatComponent(x, width + actualVal); - } else if (!leftComps.isEmpty() && getAllHeight(leftComps) == height) { - CalculateLefttRelatComponent(width + actualVal); - } else if (!downComps.isEmpty() && getAllWidth(downComps) == width) { - CalculateDownRelatComponent(y, height + actualVal); - } else if (!upComps.isEmpty() && getAllWidth(upComps) == width) { - CalculateUpRelatComponent(height + actualVal); - } else { - // 由于布局三等分的存在,可能会出现删除组件时,找不到关联的组件填充,此时特殊处理 - calculateNoRelatedComponent(x, y, width, height); - } - } - clearCompsList(); - } - - /** - * 四侧边框都没有对齐的,此时每侧有且只有一个方向不对齐 - * 比如右侧不对齐,那么必然右上或右下没对齐,不会同时不对齐,否则不会出现此情况 - * 正常删除是右左下上优先原则,这边目前只调整右侧以至填充完整, - * 右侧不对齐时的组件先上下微调,再向左侧填充。 - */ - private void calculateNoRelatedComponent(int x, int y, int width, int height) { - // 只有最后一个组件了,直接删除 - if (container.getComponentCount() <= 1) { - return; - } - // 删除当前组件时,由于没有刚好边框对齐的其他组件,这时候需要调整的组件 - Component rightComp = container.getRightComp(x, y, width); - if (rightComp == null) { - return; - } - - int ry = rightComp.getY(); - clearCompsList(); - initCompsList(); - Rectangle rec = new Rectangle(x, y, width, height); - if (ry != y) { - calculateNoRelatedWhileRightTop(rec, rightComp); - } else { - calculateNoRelatedWhileRightBott(rec, rightComp); - } - - } - - private void calculateNoRelatedWhileRightTop(Rectangle bound, Component rcomp) { - if (rcomp == null) { - return; - } - - int ry = rcomp.getY(); - int rh = rcomp.getHeight(); - int rw = rcomp.getWidth(); - int dh = bound.y - ry - actualVal; - // 没法缩小高度 - if (dh < minHeight) { - // 没法缩小时则拉伸rcomp的上边框 - dealDirectionAtTop(rcomp.getBounds(), dh + actualVal, rcomp); - //调整的时候可能有组件达到最小高度,判断下 - if (rcomp.getY() != bound.y) { - clearCompsList(); - initCompsList(); - dealDirectionAtTop(rcomp.getBounds(), bound.y - rcomp.getY() - minHeight - actualVal, rcomp); - ry = rcomp.getY(); - int rx = rcomp.getX(); - rcomp.setBounds(rx, ry, rw, minHeight); - recalculateChildrenSize(rx, bound.y, rw, rh - dh - actualVal); - recalculateChildrenSize(bound.x, bound.y, bound.width, bound.height); - return; - } - } else { - // 右侧控件底部对齐 - if (rh + ry == bound.y + bound.height) { - rcomp.setSize(rw, dh); - bound.width += rw; - bound.width += actualVal; - } else { - recalculateChildrenSize(bound.x, ry + rh + actualVal, bound.width, bound.height + bound.y - rh - ry - actualVal); - recalculateChildrenSize(bound.x, bound.y, bound.width, ry + rh - bound.y); - return; - } - } - recalculateChildrenSize(bound.x, bound.y, bound.width, bound.height); - } - - private void calculateNoRelatedWhileRightBott(Rectangle bound, Component rcomp) { - rcomp = container.getBottomRightComp(bound.x, bound.y, bound.height, bound.width); - int ry = rcomp.getY(); - int rh = rcomp.getHeight(); - int rw = rcomp.getWidth(); - int dh = ry + rh - bound.y - bound.height - actualVal; - if (dh < minHeight) { - dealDirectionABottom(rcomp.getBounds(), -dh - actualVal, rcomp); - //调整的时候可能有组件达到最小高度,判断下 - if (rcomp.getHeight() + ry != bound.y + bound.height) { - clearCompsList(); - initCompsList(); - dh = ry + rcomp.getHeight() - bound.y - bound.height - actualVal; - dealDirectionABottom(rcomp.getBounds(), minHeight - dh, rcomp); - rh = rcomp.getHeight(); - int rx = rcomp.getX(); - rcomp.setBounds(rx, bound.y + bound.height + actualVal, rw, minHeight); - recalculateChildrenSize(rx, ry, rw, rh - minHeight - actualVal); - recalculateChildrenSize(bound.x, bound.y, bound.width, bound.height); - return; - } - } else { - if (ry == bound.y) { - rcomp.setBounds(rcomp.getX(), bound.y + bound.height + actualVal, rw, dh); - bound.width += rw; - bound.width += actualVal; - } else { - recalculateChildrenSize(bound.x, bound.y, bound.width, ry - bound.y - actualVal); - recalculateChildrenSize(bound.x, ry, bound.width, bound.height - ry + bound.y); - return; - } - } - recalculateChildrenSize(bound.x, bound.y, bound.width, bound.height); - } - - private int getMinWidth(List comps) { - if (comps.isEmpty()) { - return 0; - } - int minWidth = container.getWidth() - margin.getLeft() - margin.getRight(); - for (int i = 0, size = comps.size(); i < size; i++) { - minWidth = minWidth > comps.get(i).getWidth() ? comps.get(i).getWidth() : minWidth; - } - return minWidth; - } - - private int getMinHeight(List comps) { - if (comps.isEmpty()) { - return 0; - } - int minH = container.getHeight() - margin.getTop() - margin.getBottom(); - for (int i = 0, size = comps.size(); i < size; i++) { - minH = minH > comps.get(i).getHeight() ? comps.get(i).getHeight() : minH; - } - return minH; - } - - // 删除时计算待删除组件上下侧的组件是否何其对齐 - private int getAllHeight(List comps) { - int allHeight = 0; - if (comps.isEmpty()) { - return allHeight; - } - int n = comps.size(); - for (int i = 0; i < n; i++) { - allHeight += comps.get(i).getHeight(); - } - allHeight += (n - 1) * actualVal; - return allHeight; - } - - private int getAllWidth(List comps) { - int allWidth = 0; - if (comps.isEmpty()) { - return allWidth; - } - int n = comps.size(); - for (int i = 0; i < n; i++) { - allWidth += comps.get(i).getWidth(); - } - allWidth += (n - 1) * actualVal; - return allWidth; - } - - /** - * 获取有哪些相关联的组件 - */ - protected void calculateRelatedComponent(int objX, int objY, int objWidth, int objHeight) { - int count = container.getComponentCount(); - for (int i = 0; i < count; i++) { - Component relatComp = container.getComponent(i); - int rx = relatComp.getX(); - int ry = relatComp.getY(); - int rwidth = relatComp.getWidth(); - int rheight = relatComp.getHeight(); - int verti = ry - objY; - int hori = rx - objX; - boolean isHori = verti >= 0 && objHeight >= (rheight + verti); - boolean isVerti = hori >= 0 && objWidth >= (rwidth + hori); - if (isHori && (objX + objWidth + actualVal) == rx) { - rightComps.add(relatComp); - } else if (isHori && objX == (rx + rwidth + actualVal)) { - leftComps.add(relatComp); - } else if (isVerti && (objY + objHeight + actualVal) == ry) { - downComps.add(relatComp); - } else if (isVerti && objY == (ry + rheight + actualVal)) { - upComps.add(relatComp); - } - } - } - - /** - * 拖拽组件时遍历某一侧组件得到该侧组件能够缩放的最小宽度,tab布局最小宽度 = 内部组件数 * 单个组件最小宽度 - * - * @param list 某一侧组件的集合 如:leftComps - * @return int 最小宽度 - */ - private int getCompsMinWidth(List list) { - return getMaxCompsNum(list, true) * WLayout.MIN_WIDTH; - } - - /** - * 拖拽组件遍历某一侧得到该侧组件能够缩放的最小高度,tab布局最小高度 = 内部组件数 * 单个组件最小高度 + 标题高度 - * - * @param list 某一侧组件集合 - * @return int 最小高度 - */ - private int getCompsMinHeight(List list) { - for (int i = 0; i < list.size(); i++) { - XCreator creator = (XCreator) list.get(i); - ArrayList childrenList = creator.getTargetChildrenList(); - if (!childrenList.isEmpty()) { - return getMaxCompsNum(list, false) * WLayout.MIN_HEIGHT + WCardMainBorderLayout.TAB_HEIGHT; - } - } - return WLayout.MIN_HEIGHT; - } - - /** - * 根据子组件的横(纵)坐标获取某一侧组件的最大内部组件数 - * - * @param list 某一侧组件集合 - * @param isHor 是否以横坐标为准 - * @return int 最大内部组件数 - */ - private int getMaxCompsNum(List list, boolean isHor) { - int maxCompNums = 1; - for (int i = 0, size = list.size(); i < size; i++) { - XCreator creator = (XCreator) list.get(i); - ArrayList childrenList = creator.getTargetChildrenList(); - int count = childrenList.size(); - if (count > 0) { - for (int j = 0; j < count; j++) { - XWTabFitLayout tabLayout = (XWTabFitLayout) childrenList.get(j); - int[] positions = isHor ? tabLayout.getHors(true) : tabLayout.getVeris(true); - int compNums = positions.length - 1; - maxCompNums = Math.max(compNums, maxCompNums); - } - } - } - return maxCompNums; - } - - /** - * 根据偏移量缩放内部组件大小,(tab布局用到) - * - * @param creator tab布局 - * @param offset 偏移量 - * @param isHor 是否为横向拖拽 - */ - private void adjustCompsSize(XCreator creator, int offset, boolean isHor) { - ArrayList childrenList = creator.getTargetChildrenList(); - int size = childrenList.size(); - if (size > 0) { - for (int j = 0; j < size; j++) { - XWTabFitLayout tabLayout = (XWTabFitLayout) childrenList.get(j); - tabLayout.setBackupBound(tabLayout.getBounds()); - int refSize = isHor ? tabLayout.getWidth() : tabLayout.getHeight(); - double percent = (double) offset / refSize; - if (percent < 0 && !tabLayout.canReduce(percent)) { - return; - } - setAdjustedSize(tabLayout, offset, isHor); - for (int m = 0; m < tabLayout.getComponentCount(); m++) { - XCreator childCreator = tabLayout.getXCreator(m); - BoundsWidget wgt = (BoundsWidget) tabLayout.toData().getBoundsWidget(childCreator.toData()); - wgt.setBounds(tabLayout.getComponent(m).getBounds()); - } - adjustCreatorsSize(percent, tabLayout, isHor); - } - - } - } - - // 纵向拖拽,先将tab布局的高度设置为拖拽后的实际高度 - private void setAdjustedHeight(XWTabFitLayout tabLayout, int offset) { - tabLayout.setSize(tabLayout.getWidth(), tabLayout.getHeight() + offset); - } - - // 横向拖拽,先将tab布局的宽度设置为拖拽后的实际宽度 - private void setAdjustedSize(XWTabFitLayout tabLayout, int offset, boolean isHor) { - if (offset < 0) { - // 缩放时需要备份原tab布局宽高 - tabLayout.setReferDim(new Dimension(tabLayout.getWidth(), tabLayout.getHeight())); - } - if (isHor) { - tabLayout.setSize(tabLayout.getWidth() + offset, tabLayout.getHeight()); - return; - } - setAdjustedHeight(tabLayout, offset); - } - - // 按照拖拽偏移量,对tab布局进行缩放 - private void adjustCreatorsSize(double percent, XWTabFitLayout tabLayout, boolean isHor) { - if (isHor) { - tabLayout.adjustCreatorsWidth(percent); - return; - } - tabLayout.adjustCreatorsHeight(percent); - } - - - /** - * 删除或拉伸控件右边框 调整右侧组件位置大小 - * - * @param objX 调整后的坐标x - * @param objWidth 调整后的宽度 - */ - protected void CalculateRightRelatComponent(int objX, int objWidth) { - int count = rightComps.size(); - for (int i = 0; i < count; i++) { - XCreator creator = (XCreator) rightComps.get(i); - adjustCompsSize(creator, objWidth, true); - int ry = creator.getY(); - int rwidth = creator.getWidth(); - int rheight = creator.getHeight(); - creator.setLocation(objX, ry); - creator.setSize(rwidth + objWidth, rheight); - } - } - - /** - * 实际拖拽偏移量是否超出了可调整的宽度范围 - * - * @param offset 实际偏移量 - * @return boolean 是否超出调整范围 - */ - private boolean isBeyondAdjustWidthScope(int offset) { - boolean isBeyondScope = false; - isBeyondScope = offset < 0 ? isBeyondWidthScope(offset, leftComps) : isBeyondWidthScope(offset, rightComps); - return isBeyondScope; - } - - // 实际拖拽偏移量是否超出某一侧的可调整宽度 - private boolean isBeyondWidthScope(int offset, List compsList) { - int compMinWidth = getCompsMinWidth(compsList); - for (int i = 0; i < compsList.size(); i++) { - XCreator creator = (XCreator) compsList.get(i); - if (Math.abs(offset) > (creator.getWidth() - compMinWidth)) { - return true; - } - } - return false; - } - - /** - * 删除或拉伸控件左边框时 调整左侧的组件位置大小; - */ - protected boolean CalculateLefttRelatComponent(int objWidth) { - if (isBeyondAdjustWidthScope(objWidth)) { - return false; - } - int count = leftComps.size(); - for (int i = 0; i < count; i++) { - XCreator creator = (XCreator) leftComps.get(i); - adjustCompsSize(creator, objWidth, true); - int rwidth = creator.getWidth(); - int rheight = creator.getHeight(); - creator.setSize(rwidth + objWidth, rheight); - } - return true; - } - - /** - * 删除或拉伸下边框 调整下方的组件位置大小 - */ - protected void CalculateDownRelatComponent(int objY, int objHeight) { - int count = downComps.size(); - for (int i = 0; i < count; i++) { - XCreator creator = (XCreator) downComps.get(i); - adjustCompsSize(creator, objHeight, false); - int rx = creator.getX(); - int rwidth = creator.getWidth(); - int rheight = creator.getHeight(); - creator.setLocation(rx, objY); - creator.setSize(rwidth, rheight + objHeight); - } - } - - /** - * 实际拖拽偏移量是否超出了可调整的高度范围 - * - * @param offset 实际偏移量 - * @return boolean 是否超出调整范围 - */ - private boolean isBeyondAdjustHeightScope(int offset) { - boolean isBeyondScope = false; - isBeyondScope = offset < 0 ? isBeyondHeightScope(offset, upComps) : isBeyondHeightScope(offset, downComps); - return isBeyondScope; - } - - // 实际拖拽偏移量是否超出某一侧的可调整高度 - private boolean isBeyondHeightScope(int offset, List compsList) { - int minHeight = getCompsMinHeight(compsList); - for (int i = 0; i < compsList.size(); i++) { - XCreator creator = (XCreator) compsList.get(i); - if (Math.abs(offset) > (creator.getHeight() - minHeight)) { - return true; - } - } - return false; - } - - /** - * 删除或拉伸上边框 调整上方的组件位置大小 - */ - protected boolean CalculateUpRelatComponent(int objHeight) { - if (isBeyondAdjustHeightScope(objHeight)) { - return false; - } - int count = upComps.size(); - for (int i = 0; i < count; i++) { - XCreator creator = (XCreator) upComps.get(i); - adjustCompsSize(creator, objHeight, false); - int rwidth = creator.getWidth(); - int rheight = creator.getHeight(); - creator.setSize(rwidth, rheight + objHeight); - } - return true; - } - - /** - * 不调整,只计算位置 - * - * @return child的位置 - */ - public int[] getChildPosition(Component currentComp, XCreator child, int x, int y) { - return super.getChildPosition(currentComp, child, x, y); - } - - @Override - public ConstraintsGroupModel getLayoutConstraints(XCreator creator) { - return new FRFitLayoutConstraints((XWFitLayout) container, creator); - } +/** + * + */ +package com.fr.design.designer.beans.adapters.layout; + +import com.fr.design.beans.GroupModel; +import com.fr.design.designer.beans.ConstraintsGroupModel; +import com.fr.design.designer.beans.HoverPainter; +import com.fr.design.designer.beans.painters.FRFitLayoutPainter; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XCreatorUtils; +import com.fr.design.designer.creator.XLayoutContainer; +import com.fr.design.designer.creator.XWFitLayout; +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.properties.FRFitLayoutConstraints; +import com.fr.design.designer.properties.FRFitLayoutPropertiesGroupModel; +import com.fr.design.file.HistoryTemplateListPane; +import com.fr.design.mainframe.JForm; +import com.fr.design.utils.ComponentUtils; +import com.fr.form.ui.LayoutBorderStyle; +import com.fr.form.ui.container.WLayout; +import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; +import com.fr.form.ui.widget.BoundsWidget; +import com.fr.general.ComparatorUtils; + +import java.awt.*; +import java.util.ArrayList; +import java.util.List; + +/** + * 自适应布局的容器适配器 + * + * @author jim + * @date 2014-6-24 + */ +public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { + + public static final String WIDGETPANEICONPATH = "/com/fr/web/images/form/resources/layout_absolute.png"; + private static final int DEPENDING_SCOPE = 3; + private HoverPainter painter; + //区分拖拽和编辑宽高 + private boolean isEdit; + + public boolean isEdit() { + return isEdit; + } + + public void setEdit(boolean edit) { + isEdit = edit; + } + + /** + * 构造函数 + * + * @param container XWFitLayout容器 + */ + public FRFitLayoutAdapter(XLayoutContainer container) { + super(container); + painter = new FRFitLayoutPainter(container); + initMinSize(); + } + + private void initMinSize() { + XWFitLayout layout = (XWFitLayout) container; + minWidth = layout.getActualMinWidth(); + minHeight = layout.getActualMinHeight(); + actualVal = layout.getAcualInterval(); + margin = layout.toData().getMargin(); + } + + @Override + public HoverPainter getPainter() { + return painter; + } + + /** + * 返回布局自身属性,方便一些特有设置在layout刷新时处理 + */ + @Override + public GroupModel getLayoutProperties() { + XWFitLayout xfl = (XWFitLayout) container; + return new FRFitLayoutPropertiesGroupModel(xfl); + } + + /** + * 添加组件 + * + * @param child 待添加的组件 + * @param x 坐标x + * @param y 坐标y + */ + @Override + public void addComp(XCreator child, int x, int y) { + fix(child, x, y); + if (child.shouldScaleCreator() || child.hasTitleStyle()) { + addParentCreator(child); + } else { + container.add(child, child.toData().getWidgetName()); + } + XWFitLayout layout = (XWFitLayout) container; + // 更新对应的BoundsWidget + layout.updateBoundsWidget(); + updateCreatorBackBound(); + } + + public void updateCreatorBackBound() { + for (int i = 0, size = container.getComponentCount(); i < size; i++) { + XCreator creator = (XCreator) container.getComponent(i); + creator.updateChildBound(minHeight); + creator.setBackupBound(creator.getBounds()); + } + } + + + private void addParentCreator(XCreator child) { + XLayoutContainer parentPanel = child.initCreatorWrapper(minHeight); + container.add(parentPanel, child.toData().getWidgetName()); + } + + /** + * 能否对应位置放置当前组件 + * + * @param creator 组件 + * @param x 添加的位置x,该位置是相对于container的 + * @param y 添加的位置y,该位置是相对于container的 + * @return 是否可以放置 + */ + @Override + public boolean accept(XCreator creator, int x, int y) { + // 计算是否能拖入鼠标区域时,会用到fix 的方法 + isFindRelatedComps = false; + //拖入组件判断时,先判断是否为交叉点区域,其次三等分区域,再次平分区域 + Component comp = container.getComponentAt(x, y); + if (comp == null || checkInterval(comp)) { + return false; + } + //如果当前处于边缘地带, 那么就把他贴到父容器上 + boolean isMatchEdge = matchEdge(x, y); + + int componentHeight = comp.getHeight(); + int componentWidth = comp.getWidth(); + //上半部分高度 + int upHeight = (int) (componentHeight * TOP_HALF) + comp.getY(); + //下半部分高度 + int downHeight = (int) (componentHeight * BOTTOM_HALF) + comp.getY(); + + //布局控件要先判断是不是可编辑 + XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer((XCreator) comp).getTopLayout(); + if (topLayout != null && !isMatchEdge && !topLayout.isEditable()) { + return false; + } + + if (isCrossPointArea(comp, x, y)) { + return canAcceptWhileCrossPoint(comp, x, y); + } + + if (isTrisectionArea(comp, x, y)) { + return canAcceptWhileTrisection(comp, x, y); + } + + boolean horizonValid = componentWidth >= minWidth * 2 + actualVal; + boolean verticalValid = componentHeight >= minHeight * 2 + actualVal; + return y > upHeight && y < downHeight ? horizonValid : verticalValid; + } + + // 间隔区域 + private boolean checkInterval(Component comp) { + return container.getComponentCount() > 0 && comp == container; + } + + /** + * 是否在组件边缘 + * + * @param x 横坐标 + * @param y 纵坐标 + * @return 是否在组件边缘 + */ + public boolean matchEdge(int x, int y) { + if (intersectsEdge(x, y, container)) { + //寻找最近的fit, 在边缘地段添加的控件, 将其送给该fit + XLayoutContainer parent = container.findNearestFit(); + container = parent != null ? parent : container; + return true; + } + return false; + } + + /** + * 是否在组件边缘 + * + * @param x 横坐标 + * @param y 纵坐标 + * @param container 参照组件 + * @return 是否在组件边缘 + */ + //是否包含于边缘地段, 按顺序上, 下, 左, 右检测 + public boolean intersectsEdge(int x, int y, XLayoutContainer container) { + int containerX = container.getX(); + int containerY = container.getY(); + int containerWidth = container.getWidth(); + int containerHeight = container.getHeight(); + + // 当前坐标点 + Rectangle currentXY = new Rectangle(x, y, 1, 1); + // 上边缘 + Rectangle upEdge = new Rectangle(containerX, containerY, containerWidth, BORDER_PROPORTION); + if (upEdge.intersects(currentXY)) { + return true; + } + + int bottomY = containerY + containerHeight - BORDER_PROPORTION; + // 下边缘 + Rectangle bottomEdge = new Rectangle(containerX, bottomY, containerWidth, BORDER_PROPORTION); + if (bottomEdge.intersects(currentXY)) { + return true; + } + + //左右边缘的高度 -10*2 是为了不和上下边缘重合 + int verticalHeight = containerHeight - BORDER_PROPORTION * 2; + int leftY = containerY + BORDER_PROPORTION; + // 左边缘 + Rectangle leftEdge = new Rectangle(containerX, leftY, BORDER_PROPORTION, verticalHeight); + if (leftEdge.intersects(currentXY)) { + return true; + } + + int rightY = containerY + BORDER_PROPORTION; + int rightX = containerX + containerWidth - BORDER_PROPORTION; + // 右边缘 + Rectangle rightEdge = new Rectangle(rightX, rightY, BORDER_PROPORTION, verticalHeight); + return rightEdge.intersects(currentXY); + } + + /** + * 交叉点区域时,能否对应位置放入组件 + */ + protected boolean canAcceptWhileCrossPoint(Component comp, int x, int y) { + return super.canAcceptWhileCrossPoint(comp, x, y); + } + + protected boolean canAcceptWhileTrisection(Component comp, int x, int y) { + return super.canAcceptWhileTrisection(comp, x, y); + } + + /** + * 判断是否鼠标在组件的三等分区域,如果组件在布局管理器中间,上下左右都可能会三等分 + * + * @param parentComp 鼠标所在区域的组件 + * @param x 坐标x + * @param y 坐标y + * @return 是则返回true + */ + public boolean isTrisectionArea(Component parentComp, int x, int y) { + return super.isTrisectionArea(parentComp, x, y); + } + + /** + * 是否为组件交叉点区域 或者是相邻三组建中间点 + * + * @param currentComp 当前组件 + * @param x 坐标x + * @param y 坐标y + * @return 是则返回true + */ + public boolean isCrossPointArea(Component currentComp, int x, int y) { + return super.isCrossPointArea(currentComp, x, y); + } + + + protected Rectangle getLayoutBound(XWCardMainBorderLayout mainLayout) { + return mainLayout.getBounds(); + } + + private Rectangle adjustBackupBound(Rectangle backupBound, XWCardMainBorderLayout mainLayout) { + // 参数界面高度对纵坐标产生的影响 + JForm jform = (JForm) (HistoryTemplateListPane.getInstance().getCurrentEditingTemplate()); + if (jform.getFormDesign().getParaComponent() != null) { + backupBound.y -= jform.getFormDesign().getParaHeight(); + } + + Rectangle rec = getLayoutBound(mainLayout); + // XWTabLayout里面的横纵坐标收到外层XWCardMainBorderLayout的横纵坐标影响 + // 减掉之后可以按照它原来的逻辑执行 + backupBound.x -= rec.x; + backupBound.y -= rec.y; + XWCardLayout cardLayout = mainLayout.getCardPart(); + LayoutBorderStyle style = cardLayout.toData().getBorderStyle(); + // 当tab布局为标题样式时,才需要处理标题栏高度产生的影响 + if (ComparatorUtils.equals(style.getType(), LayoutBorderStyle.TITLE)) { + backupBound.y -= WCardMainBorderLayout.TAB_HEIGHT; + } + return backupBound; + } + + /** + * 拖拽控件边框后,根据控件的大小尺寸,进行相关组件的调整 + * + * @param creator 组件 + */ + @Override + public void fix(XCreator creator) { + //拖拽组件原大小、位置 + Rectangle backupBound = creator.getBackupBound(); + backupBound.x -= container.getX(); + backupBound.y -= container.getY(); + //当前拖拽组件的位置 + int x = creator.getX(); + int y = creator.getY(); + + // 获取容器所有内部组件横坐标 + int[] posXs = container.getHors(); + // 获取容器所有内部组件纵坐标 + int[] posYs = container.getVeris(); + + XLayoutContainer outerLayout = container.getOuterLayout(); + if (!ComparatorUtils.equals(outerLayout, container.getBackupParent())) { + XWCardMainBorderLayout mainLayout = (XWCardMainBorderLayout) outerLayout; + backupBound = adjustBackupBound(backupBound, mainLayout); + } + + //拖拽组件拖拽以后的大小 + int w = creator.getWidth(); + int h = creator.getHeight(); + initCompsList(); + creator.setBounds(backupBound); + int difference = 0; + if (x != backupBound.x) { + dealLeft(backupBound, x, posXs, difference, creator); + } else if (w != backupBound.width) { + dealRight(backupBound, x, w, posXs, difference, creator); + } else if (y != backupBound.y) { + dealTop(backupBound, y, posYs, difference, creator); + } else if (h != backupBound.height) { + dealButtom(backupBound, y, h, posYs, difference, creator); + } + clearCompsList(); + XWFitLayout layout = (XWFitLayout) container; + layout.updateBoundsWidget(); // 更新对应的BoundsWidget + updateCreatorBackBound(); + } + + /** + * 拖拽控件边框后,根据控件的大小尺寸,进行相关组件的调整 + * + * @param backupBound 边界备份 + * @param bounds 组件边界 + * @param xCreator 组件 + * @param row 选中的行 + * @param difference 偏移量 + */ + public void calculateBounds(Rectangle backupBound, Rectangle bounds, XCreator xCreator, int row, int difference) { + Rectangle rc = new Rectangle(0, 0, 0, 0); + XLayoutContainer parent = XCreatorUtils.getParentXLayoutContainer(xCreator); + if (parent != null) { + Rectangle rec = ComponentUtils.getRelativeBounds(parent); + rc.x = rec.x; + rc.y = rec.y; + } + int x = backupBound.x - rc.x, y = backupBound.y - rc.y; + //处理左右延伸 + switch (row) { + case 0: + if (backupBound.width + backupBound.x == container.getWidth() - margin.getRight() + rc.x) { + x += difference; + } + break; + case 1: + if (backupBound.y + backupBound.height == container.getHeight() - margin.getBottom() + rc.y) { + y += difference; + } + break; + } + bounds.setLocation(x, y); + xCreator.setBackupBound(backupBound); + xCreator.setBounds(bounds); + this.fix(xCreator); + } + + private void dealLeft(Rectangle backupBound, int x, int[] posXs, int difference, XCreator creator) { + if (backupBound.x == margin.getLeft()) { + return; + } + x = adjustCoordinateByDependingLine(x, posXs); + difference = x - backupBound.x; + dealDirectionAtLeft(backupBound, difference, creator); + } + + private void dealRight(Rectangle backupBound, int x, int w, int[] posXs, int difference, XCreator creator) { + if (backupBound.width + backupBound.x == container.getWidth() - margin.getRight()) { + return; + } + w = adjustDiffByDependingLine(x, posXs, w); + difference = w - backupBound.width; //拖拽长度 + dealDirectionAtRight(backupBound, difference, creator); + } + + private void dealTop(Rectangle backupBound, int y, int[] posYs, int difference, XCreator creator) { + if (backupBound.y == margin.getTop()) { + return; + } + y = adjustCoordinateByDependingLine(y, posYs); + difference = y - backupBound.y; + dealDirectionAtTop(backupBound, difference, creator); + } + + private void dealButtom(Rectangle backupBound, int y, int h, int[] posYs, int difference, XCreator creator) { + if (backupBound.y + backupBound.height == container.getHeight() - margin.getBottom()) { + return; + } + h = adjustDiffByDependingLine(y, posYs, h); + difference = h - backupBound.height; + dealDirectionABottom(backupBound, difference, creator); + } + + // 根据需要依附的位置调整拖拽的坐标值 + private int adjustCoordinateByDependingLine(int coordinate, int[] coordinates) { + if (!isEdit) { + for (int i = 0; i < coordinates.length; i++) { + if (coordinate == coordinates[i]) { + continue; + } + if (coordinate > coordinates[i] - DEPENDING_SCOPE && coordinate < coordinates[i] + DEPENDING_SCOPE) { + coordinate = coordinates[i]; + break; + } + } + } + return coordinate; + } + + // 根据需要依附的位置调整拖拽的距离 + private int adjustDiffByDependingLine(int coordinate, int[] coordinates, int diff) { + if (!isEdit) { + for (int i = 0; i < coordinates.length; i++) { + if (coordinate + diff > coordinates[i] - DEPENDING_SCOPE && coordinate + diff < coordinates[i] + DEPENDING_SCOPE) { + diff = coordinates[i] - coordinate; + break; + } + } + } + return diff; + } + + // 左侧边框拉伸,循环找出对齐的两侧控件 + private void dealDirectionAtLeft(Rectangle backupBound, int difference, Component creator) { + rightComps.add(creator); + Component rightComp = null; + int leftx = backupBound.x - DEFAULT_AREA_LENGTH - actualVal; + // 取左侧边框右面的组件x值 + int rightx = backupBound.x + DEFAULT_AREA_LENGTH; + Component leftComp = container.getLeftComp(backupBound.x, backupBound.y); + leftComps.add(leftComp); + //先找上侧对齐时(y相等)的左右两边组件 + int ry = backupBound.y; + int ly = leftComp.getY(); + int min = margin.getTop(); + int max = container.getHeight() - margin.getBottom(); + while (ry >= min && ly >= min) { + if (ry == ly) { + break; + } else { + if (ry > ly) { + rightComp = container.getTopComp(rightx, ry); + ry = rightComp.getY(); + rightComps.add(rightComp); + } else { + leftComp = container.getTopComp(leftx, ly); + ly = leftComp.getY(); + leftComps.add(leftComp); + } + } + } + // 下侧对齐时(y+h相等)两边组件 + ry = backupBound.y + backupBound.height; + ly = leftComps.get(0).getY() + leftComps.get(0).getHeight(); + while (ry <= max && ly <= max) { + if (ry == ly) { + break; + } else { + if (ry > ly) { + leftComp = container.getComponentAt(leftx, ly + DEFAULT_AREA_LENGTH + actualVal); + ly = leftComp.getY() + leftComp.getHeight(); + leftComps.add(leftComp); + } else { + rightComp = container.getComponentAt(rightx, ry + DEFAULT_AREA_LENGTH + actualVal); + ry = rightComp.getY() + rightComp.getHeight(); + rightComps.add(rightComp); + } + } + } + dealHorDirection(backupBound.x, difference); + } + + // 右侧边框拉伸,循环找出对齐的两侧控件 + private void dealDirectionAtRight(Rectangle backupBound, int difference, Component creator) { + leftComps.add(creator); + Component leftComp = null; + int leftx = backupBound.x + backupBound.width - DEFAULT_AREA_LENGTH; + // 取右侧边框右面的组件x值 + int rightx = backupBound.x + backupBound.width + DEFAULT_AREA_LENGTH + actualVal; + Component rightComp = container.getRightComp(backupBound.x, backupBound.y, backupBound.width); + rightComps.add(rightComp); + int ly = backupBound.y, ry = rightComp.getY(); + int min = margin.getTop(); + int max = container.getHeight() - margin.getBottom(); + while (ry >= min && ly >= min) { + if (ry == ly) { + break; + } else { + if (ry > ly) { + rightComp = container.getTopComp(rightx, ry); + ry = rightComp.getY(); + rightComps.add(rightComp); + } else { + leftComp = container.getTopComp(leftx, ly); + ly = leftComp.getY(); + leftComps.add(leftComp); + } + } + } + ly = backupBound.y + backupBound.height; + ry = rightComps.get(0).getY() + rightComps.get(0).getHeight(); + while (ry <= max && ly <= max) { + if (ry == ly) { + break; + } else { + if (ry > ly) { + leftComp = container.getComponentAt(leftx, ly + DEFAULT_AREA_LENGTH + actualVal); + ly = leftComp.getY() + leftComp.getHeight(); + leftComps.add(leftComp); + } else { + rightComp = container.getComponentAt(rightx, ry + DEFAULT_AREA_LENGTH + actualVal); + ry = rightComp.getY() + rightComp.getHeight(); + rightComps.add(rightComp); + } + } + } + dealHorDirection(backupBound.x + backupBound.width + actualVal, difference); + } + + /** + * 水平方向上拉伸边框的处理 + */ + private void dealHorDirection(int objx, int difference) { + if (difference > 0) { + difference = Math.min(getMinWidth(rightComps) - minWidth, difference); + } else { + difference = Math.max(difference, minWidth - getMinWidth(leftComps)); + } + //重新计算左右两侧组件size、point + if (calculateLefttRelatComponent(difference)) { + calculateRightRelatComponent(objx + difference, -difference); + } + } + + // 上侧边框拉伸,循环找出对齐的两侧控件 + private void dealDirectionAtTop(Rectangle backupBound, int difference, Component creator) { + downComps.add(creator); + // 取上侧边框上面的组件用的y值 + int topy = backupBound.y - DEFAULT_AREA_LENGTH - actualVal; + // 上侧边框下面的组件y值 + int bottomy = backupBound.y + DEFAULT_AREA_LENGTH; + Component topComp = container.getTopComp(backupBound.x, backupBound.y); + upComps.add(topComp); + Component bottomComp = null; + int min = margin.getLeft(); + int max = container.getWidth() - margin.getRight(); + //先找左侧侧对齐时(x相等)的上下两边组件 + int ux = topComp.getX(); + int dx = backupBound.x; + while (ux >= min && dx >= min) { + if (ux == dx) { + break; + } else { + if (ux < dx) { + bottomComp = container.getLeftComp(dx, bottomy); + dx = bottomComp.getX(); + downComps.add(bottomComp); + } else { + topComp = container.getLeftComp(ux, topy); + ux = topComp.getX(); + upComps.add(topComp); + } + } + } + // 右侧对齐时(x+w相等)两边组件 + ux = upComps.get(0).getX() + upComps.get(0).getWidth(); + dx = backupBound.x + backupBound.width; + while (ux <= max && dx <= max) { + if (ux == dx) { + break; + } else { + if (ux < dx) { + topComp = container.getComponentAt(ux + DEFAULT_AREA_LENGTH + actualVal, topy); + ux = topComp.getX() + topComp.getWidth(); + upComps.add(topComp); + } else { + bottomComp = container.getComponentAt(dx + DEFAULT_AREA_LENGTH + actualVal, bottomy); + dx = bottomComp.getX() + bottomComp.getWidth(); + downComps.add(bottomComp); + } + } + } + + dealVertiDirection(backupBound.y, difference); + } + + // 下侧边框拉伸,循环找出对齐的两侧控件 + private void dealDirectionABottom(Rectangle backupBound, int difference, Component creator) { + upComps.add(creator); + Component topComp = null; + Component bottomComp = container.getBottomComp(backupBound.x, backupBound.y, backupBound.height); + // 下侧边框下面的组件y坐标 + int bottomy = backupBound.y + backupBound.height + DEFAULT_AREA_LENGTH + actualVal; + // 取下侧边框上面的组件用的y值 + int topy = backupBound.y + backupBound.height - DEFAULT_AREA_LENGTH; + downComps.add(bottomComp); + int dx = bottomComp.getX(); + int ux = backupBound.x; + int min = margin.getLeft(); + int max = container.getWidth() - margin.getRight(); + while (ux >= min && dx >= min) { + if (ux == dx) { + break; + } else { + if (ux < dx) { + bottomComp = container.getLeftComp(dx, bottomy); + dx = bottomComp.getX(); + downComps.add(bottomComp); + } else { + topComp = container.getLeftComp(ux, topy); + ux = topComp.getX(); + upComps.add(topComp); + } + } + } + dx = downComps.get(0).getX() + downComps.get(0).getWidth(); + ux = backupBound.x + backupBound.width; + while (ux <= max && dx <= max) { + if (ux == dx) { + break; + } else { + if (ux < dx) { + topComp = container.getComponentAt(ux + DEFAULT_AREA_LENGTH + actualVal, topy); + ux = topComp.getX() + topComp.getWidth(); + upComps.add(topComp); + } else { + bottomComp = container.getComponentAt(dx + DEFAULT_AREA_LENGTH + actualVal, bottomy); + dx = bottomComp.getX() + bottomComp.getWidth(); + downComps.add(bottomComp); + } + } + } + dealVertiDirection(backupBound.y + backupBound.height + actualVal, difference); + } + + /** + * 垂直方向上拉伸边框的处理 + */ + private void dealVertiDirection(int objY, int difference) { + if (difference > 0) { + difference = Math.min(getMinHeight(downComps) - minHeight, difference); + } else { + difference = Math.max(difference, minHeight - getMinHeight(upComps)); + } + //重新计算上下两侧组件size、point + if (calculateUpRelatComponent(difference)) { + calculateDownRelatComponent(objY + difference, -difference); + } + } + + /** + * 新拖入组件时,计算调整其他关联组件位置大小 + * + * @param child 新拖入的组件 + * @param x 鼠标所在x坐标 + * @param y 鼠标所在y坐标 + */ + public void fix(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()); + } else if (isCrossPointArea(parentComp, x, y)) { + //交叉区域插入组件时,根据具体位置进行上下或者左右或者相邻三个组件的位置大小插入 + fixCrossPointArea(parentComp, child, x, y); + return; + } else if (isTrisectionArea(parentComp, x, y)) { + // 在边界三等分区域,就不再和组件二等分了 + fixTrisect(parentComp, child, x, y); + return; + } else { + fixHalve(parentComp, child, x, y); + } + } + + /** + * 平分,正常情况拖入组件时,按照上1/4区域、下1/4区域为上下平分,中左侧1/2区域、中右侧1/2区域为左右平分 + */ + protected void fixHalve(Component currentComp, XCreator child, int x, int y) { + super.fixHalve(currentComp, child, x, y); + } + + /** + * 组件交叉区域进行插入时,调整受到变动的其他组件,之前是交叉区域插入也按照三等分逻辑,后面测试中发现有bug,改为和bi一样的鼠标所在侧平分 + * 默认左上角、右下角区域是垂直方向插入组件 + * 右上角和左下角是水平方向插入组件,这样避免田字块时重复 + */ + protected void fixCrossPointArea(Component currentComp, XCreator child, int x, int y) { + super.fixCrossPointArea(currentComp, child, x, y); + } + + /** + * 三等分区域时,调整相关联的组件 + * + * @param currentComp 鼠标所在组件 + * @param child 待插入组件 + */ + protected void fixTrisect(Component currentComp, XCreator child, int x, int y) { + super.fixTrisect(currentComp, child, x, y); + } + + /** + * 删除组件或者重新拖动时,其它组件重新计算位置大小 + */ + protected void delete(XCreator creator, int creatorWidth, int creatorHeight) { + int x = creator.getX(); + int y = creator.getY(); + recalculateChildrenSize(x, y, creatorWidth, creatorHeight); + } + + /** + * 重新计算内部组件大小 + * + * @param x 坐标x + * @param y 坐标y + * @param creatorWidth 删除的组件之前所在布局的宽度 + * @param creatorHeight 删除的组件之前所在布局的高度 + */ + public void recalculateChildrenSize(int x, int y, int creatorWidth, int creatorHeight) { + if (container.getComponentCount() == 0) { + return; + } else { + initCompsList(); + int width = creatorWidth; + int height = creatorHeight; + calculateRelatedComponent(x, y, width, height); + if (!rightComps.isEmpty() && getAllHeight(rightComps) == height) { + calculateRightRelatComponent(x, width + actualVal); + } else if (!leftComps.isEmpty() && getAllHeight(leftComps) == height) { + calculateLefttRelatComponent(width + actualVal); + } else if (!downComps.isEmpty() && getAllWidth(downComps) == width) { + calculateDownRelatComponent(y, height + actualVal); + } else if (!upComps.isEmpty() && getAllWidth(upComps) == width) { + calculateUpRelatComponent(height + actualVal); + } else { + // 由于布局三等分的存在,可能会出现删除组件时,找不到关联的组件填充,此时特殊处理 + calculateNoRelatedComponent(x, y, width, height); + } + } + clearCompsList(); + } + + /** + * 四侧边框都没有对齐的,此时每侧有且只有一个方向不对齐 + * 比如右侧不对齐,那么必然右上或右下没对齐,不会同时不对齐,否则不会出现此情况 + * 正常删除是右左下上优先原则,这边目前只调整右侧以至填充完整, + * 右侧不对齐时的组件先上下微调,再向左侧填充。 + */ + private void calculateNoRelatedComponent(int x, int y, int width, int height) { + // 只有最后一个组件了,直接删除 + if (container.getComponentCount() <= 1) { + return; + } + // 删除当前组件时,由于没有刚好边框对齐的其他组件,这时候需要调整的组件 + Component rightComp = container.getRightComp(x, y, width); + if (rightComp == null) { + return; + } + + int ry = rightComp.getY(); + clearCompsList(); + initCompsList(); + Rectangle rec = new Rectangle(x, y, width, height); + if (ry != y) { + calculateNoRelatedWhileRightTop(rec, rightComp); + } else { + calculateNoRelatedWhileRightBott(rec, rightComp); + } + + } + + private void calculateNoRelatedWhileRightTop(Rectangle bound, Component rcomp) { + if (rcomp == null) { + return; + } + + int ry = rcomp.getY(); + int rh = rcomp.getHeight(); + int rw = rcomp.getWidth(); + int dh = bound.y - ry - actualVal; + // 没法缩小高度 + if (dh < minHeight) { + // 没法缩小时则拉伸rcomp的上边框 + dealDirectionAtTop(rcomp.getBounds(), dh + actualVal, rcomp); + //调整的时候可能有组件达到最小高度,判断下 + if (rcomp.getY() != bound.y) { + clearCompsList(); + initCompsList(); + dealDirectionAtTop(rcomp.getBounds(), bound.y - rcomp.getY() - minHeight - actualVal, rcomp); + ry = rcomp.getY(); + int rx = rcomp.getX(); + rcomp.setBounds(rx, ry, rw, minHeight); + recalculateChildrenSize(rx, bound.y, rw, rh - dh - actualVal); + recalculateChildrenSize(bound.x, bound.y, bound.width, bound.height); + return; + } + } else { + // 右侧控件底部对齐 + if (rh + ry == bound.y + bound.height) { + rcomp.setSize(rw, dh); + bound.width += rw; + bound.width += actualVal; + } else { + recalculateChildrenSize(bound.x, ry + rh + actualVal, bound.width, bound.height + bound.y - rh - ry - actualVal); + recalculateChildrenSize(bound.x, bound.y, bound.width, ry + rh - bound.y); + return; + } + } + recalculateChildrenSize(bound.x, bound.y, bound.width, bound.height); + } + + private void calculateNoRelatedWhileRightBott(Rectangle bound, Component rcomp) { + rcomp = container.getBottomRightComp(bound.x, bound.y, bound.height, bound.width); + int ry = rcomp.getY(); + int rh = rcomp.getHeight(); + int rw = rcomp.getWidth(); + int dh = ry + rh - bound.y - bound.height - actualVal; + if (dh < minHeight) { + dealDirectionABottom(rcomp.getBounds(), -dh - actualVal, rcomp); + //调整的时候可能有组件达到最小高度,判断下 + if (rcomp.getHeight() + ry != bound.y + bound.height) { + clearCompsList(); + initCompsList(); + dh = ry + rcomp.getHeight() - bound.y - bound.height - actualVal; + dealDirectionABottom(rcomp.getBounds(), minHeight - dh, rcomp); + rh = rcomp.getHeight(); + int rx = rcomp.getX(); + rcomp.setBounds(rx, bound.y + bound.height + actualVal, rw, minHeight); + recalculateChildrenSize(rx, ry, rw, rh - minHeight - actualVal); + recalculateChildrenSize(bound.x, bound.y, bound.width, bound.height); + return; + } + } else { + if (ry == bound.y) { + rcomp.setBounds(rcomp.getX(), bound.y + bound.height + actualVal, rw, dh); + bound.width += rw; + bound.width += actualVal; + } else { + recalculateChildrenSize(bound.x, bound.y, bound.width, ry - bound.y - actualVal); + recalculateChildrenSize(bound.x, ry, bound.width, bound.height - ry + bound.y); + return; + } + } + recalculateChildrenSize(bound.x, bound.y, bound.width, bound.height); + } + + private int getMinWidth(List comps) { + if (comps.isEmpty()) { + return 0; + } + int minWidth = container.getWidth() - margin.getLeft() - margin.getRight(); + for (int i = 0, size = comps.size(); i < size; i++) { + minWidth = minWidth > comps.get(i).getWidth() ? comps.get(i).getWidth() : minWidth; + } + return minWidth; + } + + private int getMinHeight(List comps) { + if (comps.isEmpty()) { + return 0; + } + int minH = container.getHeight() - margin.getTop() - margin.getBottom(); + for (int i = 0, size = comps.size(); i < size; i++) { + minH = minH > comps.get(i).getHeight() ? comps.get(i).getHeight() : minH; + } + return minH; + } + + // 删除时计算待删除组件上下侧的组件是否何其对齐 + private int getAllHeight(List comps) { + int allHeight = 0; + if (comps.isEmpty()) { + return allHeight; + } + int n = comps.size(); + for (int i = 0; i < n; i++) { + allHeight += comps.get(i).getHeight(); + } + allHeight += (n - 1) * actualVal; + return allHeight; + } + + private int getAllWidth(List comps) { + int allWidth = 0; + if (comps.isEmpty()) { + return allWidth; + } + int n = comps.size(); + for (int i = 0; i < n; i++) { + allWidth += comps.get(i).getWidth(); + } + allWidth += (n - 1) * actualVal; + return allWidth; + } + + /** + * 获取有哪些相关联的组件 + */ + protected void calculateRelatedComponent(int objX, int objY, int objWidth, int objHeight) { + int count = container.getComponentCount(); + for (int i = 0; i < count; i++) { + Component relatComp = container.getComponent(i); + int rx = relatComp.getX(); + int ry = relatComp.getY(); + int rwidth = relatComp.getWidth(); + int rheight = relatComp.getHeight(); + int verti = ry - objY; + int hori = rx - objX; + boolean isHori = verti >= 0 && objHeight >= (rheight + verti); + boolean isVerti = hori >= 0 && objWidth >= (rwidth + hori); + if (isHori && (objX + objWidth + actualVal) == rx) { + rightComps.add(relatComp); + } else if (isHori && objX == (rx + rwidth + actualVal)) { + leftComps.add(relatComp); + } else if (isVerti && (objY + objHeight + actualVal) == ry) { + downComps.add(relatComp); + } else if (isVerti && objY == (ry + rheight + actualVal)) { + upComps.add(relatComp); + } + } + } + + /** + * 拖拽组件时遍历某一侧组件得到该侧组件能够缩放的最小宽度,tab布局最小宽度 = 内部组件数 * 单个组件最小宽度 + * + * @param list 某一侧组件的集合 如:leftComps + * @return int 最小宽度 + */ + private int getCompsMinWidth(List list) { + return getMaxCompsNum(list, true) * WLayout.MIN_WIDTH; + } + + /** + * 拖拽组件遍历某一侧得到该侧组件能够缩放的最小高度,tab布局最小高度 = 内部组件数 * 单个组件最小高度 + 标题高度 + * + * @param list 某一侧组件集合 + * @return int 最小高度 + */ + private int getCompsMinHeight(List list) { + for (int i = 0; i < list.size(); i++) { + XCreator creator = (XCreator) list.get(i); + ArrayList childrenList = creator.getTargetChildrenList(); + if (!childrenList.isEmpty()) { + return getMaxCompsNum(list, false) * WLayout.MIN_HEIGHT + WCardMainBorderLayout.TAB_HEIGHT; + } + } + return WLayout.MIN_HEIGHT; + } + + /** + * 根据子组件的横(纵)坐标获取某一侧组件的最大内部组件数 + * + * @param list 某一侧组件集合 + * @param isHor 是否以横坐标为准 + * @return int 最大内部组件数 + */ + private int getMaxCompsNum(List list, boolean isHor) { + int maxCompNums = 1; + for (int i = 0, size = list.size(); i < size; i++) { + XCreator creator = (XCreator) list.get(i); + ArrayList childrenList = creator.getTargetChildrenList(); + int count = childrenList.size(); + if (count > 0) { + for (int j = 0; j < count; j++) { + XWTabFitLayout tabLayout = (XWTabFitLayout) childrenList.get(j); + int[] positions = isHor ? tabLayout.getHors(true) : tabLayout.getVeris(true); + int compNums = positions.length - 1; + maxCompNums = Math.max(compNums, maxCompNums); + } + } + } + return maxCompNums; + } + + /** + * 根据偏移量缩放内部组件大小,(tab布局用到) + * + * @param creator tab布局 + * @param offset 偏移量 + * @param isHor 是否为横向拖拽 + */ + private void adjustCompsSize(XCreator creator, int offset, boolean isHor) { + ArrayList childrenList = creator.getTargetChildrenList(); + int size = childrenList.size(); + if (size > 0) { + for (int j = 0; j < size; j++) { + XWTabFitLayout tabLayout = (XWTabFitLayout) childrenList.get(j); + tabLayout.setBackupBound(tabLayout.getBounds()); + int refSize = isHor ? tabLayout.getWidth() : tabLayout.getHeight(); + double percent = (double) offset / refSize; + if (percent < 0 && !tabLayout.canReduce(percent)) { + return; + } + setAdjustedSize(tabLayout, offset, isHor); + for (int m = 0; m < tabLayout.getComponentCount(); m++) { + XCreator childCreator = tabLayout.getXCreator(m); + BoundsWidget wgt = tabLayout.toData().getBoundsWidget(childCreator.toData()); + wgt.setBounds(tabLayout.getComponent(m).getBounds()); + } + adjustCreatorsSize(percent, tabLayout, isHor); + } + + } + } + + // 纵向拖拽,先将tab布局的高度设置为拖拽后的实际高度 + private void setAdjustedHeight(XWTabFitLayout tabLayout, int offset) { + tabLayout.setSize(tabLayout.getWidth(), tabLayout.getHeight() + offset); + } + + // 横向拖拽,先将tab布局的宽度设置为拖拽后的实际宽度 + private void setAdjustedSize(XWTabFitLayout tabLayout, int offset, boolean isHor) { + if (offset < 0) { + // 缩放时需要备份原tab布局宽高 + tabLayout.setReferDim(new Dimension(tabLayout.getWidth(), tabLayout.getHeight())); + } + if (isHor) { + tabLayout.setSize(tabLayout.getWidth() + offset, tabLayout.getHeight()); + return; + } + setAdjustedHeight(tabLayout, offset); + } + + // 按照拖拽偏移量,对tab布局进行缩放 + private void adjustCreatorsSize(double percent, XWTabFitLayout tabLayout, boolean isHor) { + if (isHor) { + tabLayout.adjustCreatorsWidth(percent); + return; + } + tabLayout.adjustCreatorsHeight(percent); + } + + + /** + * 删除或拉伸控件右边框 调整右侧组件位置大小 + * + * @param objX 调整后的坐标x + * @param objWidth 调整后的宽度 + */ + protected void calculateRightRelatComponent(int objX, int objWidth) { + int count = rightComps.size(); + for (int i = 0; i < count; i++) { + XCreator creator = (XCreator) rightComps.get(i); + adjustCompsSize(creator, objWidth, true); + int ry = creator.getY(); + int rwidth = creator.getWidth(); + int rheight = creator.getHeight(); + creator.setLocation(objX, ry); + creator.setSize(rwidth + objWidth, rheight); + } + } + + /** + * 实际拖拽偏移量是否超出了可调整的宽度范围 + * + * @param offset 实际偏移量 + * @return boolean 是否超出调整范围 + */ + private boolean isBeyondAdjustWidthScope(int offset) { + boolean isBeyondScope = false; + isBeyondScope = offset < 0 ? isBeyondWidthScope(offset, leftComps) : isBeyondWidthScope(offset, rightComps); + return isBeyondScope; + } + + // 实际拖拽偏移量是否超出某一侧的可调整宽度 + private boolean isBeyondWidthScope(int offset, List compsList) { + int compMinWidth = getCompsMinWidth(compsList); + for (int i = 0; i < compsList.size(); i++) { + XCreator creator = (XCreator) compsList.get(i); + if (Math.abs(offset) > (creator.getWidth() - compMinWidth)) { + return true; + } + } + return false; + } + + /** + * 删除或拉伸控件左边框时 调整左侧的组件位置大小; + */ + protected boolean calculateLefttRelatComponent(int objWidth) { + if (isBeyondAdjustWidthScope(objWidth)) { + return false; + } + int count = leftComps.size(); + for (int i = 0; i < count; i++) { + XCreator creator = (XCreator) leftComps.get(i); + adjustCompsSize(creator, objWidth, true); + int rwidth = creator.getWidth(); + int rheight = creator.getHeight(); + creator.setSize(rwidth + objWidth, rheight); + } + return true; + } + + /** + * 删除或拉伸下边框 调整下方的组件位置大小 + */ + protected void calculateDownRelatComponent(int objY, int objHeight) { + int count = downComps.size(); + for (int i = 0; i < count; i++) { + XCreator creator = (XCreator) downComps.get(i); + adjustCompsSize(creator, objHeight, false); + int rx = creator.getX(); + int rwidth = creator.getWidth(); + int rheight = creator.getHeight(); + creator.setLocation(rx, objY); + creator.setSize(rwidth, rheight + objHeight); + } + } + + /** + * 实际拖拽偏移量是否超出了可调整的高度范围 + * + * @param offset 实际偏移量 + * @return boolean 是否超出调整范围 + */ + private boolean isBeyondAdjustHeightScope(int offset) { + boolean isBeyondScope = false; + isBeyondScope = offset < 0 ? isBeyondHeightScope(offset, upComps) : isBeyondHeightScope(offset, downComps); + return isBeyondScope; + } + + // 实际拖拽偏移量是否超出某一侧的可调整高度 + private boolean isBeyondHeightScope(int offset, List compsList) { + int minHeight = getCompsMinHeight(compsList); + for (int i = 0; i < compsList.size(); i++) { + XCreator creator = (XCreator) compsList.get(i); + if (Math.abs(offset) > (creator.getHeight() - minHeight)) { + return true; + } + } + return false; + } + + /** + * 删除或拉伸上边框 调整上方的组件位置大小 + */ + protected boolean calculateUpRelatComponent(int objHeight) { + if (isBeyondAdjustHeightScope(objHeight)) { + return false; + } + int count = upComps.size(); + for (int i = 0; i < count; i++) { + XCreator creator = (XCreator) upComps.get(i); + adjustCompsSize(creator, objHeight, false); + int rwidth = creator.getWidth(); + int rheight = creator.getHeight(); + creator.setSize(rwidth, rheight + objHeight); + } + return true; + } + + /** + * 不调整,只计算位置 + * + * @return child的位置 + */ + public int[] getChildPosition(Component currentComp, XCreator child, int x, int y) { + return super.getChildPosition(currentComp, child, x, y); + } + + @Override + public ConstraintsGroupModel getLayoutConstraints(XCreator creator) { + return new FRFitLayoutConstraints((XWFitLayout) container, creator); + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java b/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java index e368c7425..088f29a0a 100644 --- a/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java +++ b/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java @@ -3,18 +3,16 @@ */ package com.fr.design.designer.beans.location; -import java.awt.*; - import com.fr.design.beans.location.Absorptionline; import com.fr.design.beans.location.MoveUtils; import com.fr.design.designer.creator.*; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.FormSelection; 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.WParameterLayout; -import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; +import com.fr.form.ui.widget.BoundsWidget; + +import java.awt.*; /** * @author richer @@ -26,197 +24,184 @@ public abstract class AccessDirection implements Direction { private int ymin; private int xmin; - abstract int getCursor(); - - protected abstract Rectangle getDraggedBounds(int dx, int dy, Rectangle current_bounds, FormDesigner designer, - Rectangle oldbounds); - - protected int[] sorption(int x, int y,Rectangle current_bounds, FormDesigner designer) { - // 自适应布局不需要吸附线,但需要对齐线,对齐线后面处理 - if (!designer.hasWAbsoluteLayout()) { - designer.getStateModel().setEquidistantLine(null); - designer.getStateModel().setXAbsorptionline(null); - designer.getStateModel().setYAbsorptionline(null); - return new int[] { x, y }; - } else { - int posy = current_bounds.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 current_bounds,FormDesigner designer) { - if (x < 0) { - x = 0; - } else if (x > designer.getRootComponent().getWidth() && designer.getSelectionModel().hasSelectionComponent()) { - x = designer.getRootComponent().getWidth(); - } + abstract int getCursor(); + + protected abstract Rectangle getDraggedBounds(int dx, int dy, Rectangle currentBounds, FormDesigner designer, + Rectangle oldBounds); + + protected int[] sorption(int x, int y, Rectangle currentBounds, FormDesigner designer) { + // 自适应布局不需要吸附线,但需要对齐线,对齐线后面处理 + if (!designer.hasWAbsoluteLayout()) { + designer.getStateModel().setEquidistantLine(null); + designer.getStateModel().setXAbsorptionline(null); + designer.getStateModel().setYAbsorptionline(null); + return new int[]{x, y}; + } else { + Point relativePoint = getRelativePoint(x, y, currentBounds, designer); + sorptionPoint(relativePoint, currentBounds, designer); + return new int[]{relativePoint.x, relativePoint.y}; + } + + } + + protected Point getRelativePoint(int x, int y, Rectangle currentBounds, FormDesigner designer) { + if (x < 0) { + x = 0; + } else if (x > designer.getRootComponent().getWidth() && designer.getSelectionModel().hasSelectionComponent()) { + x = designer.getRootComponent().getWidth(); + } //参数面板可以无下限拉长 - if (y < 0) { - y = 0; - } else if (y > designer.getRootComponent().getHeight() + designer.getParaHeight() && designer.getSelectionModel().hasSelectionComponent() + if (y < 0) { + y = 0; + } else if (y > designer.getRootComponent().getHeight() + designer.getParaHeight() && designer.getSelectionModel().hasSelectionComponent() && !designer.getSelectionModel().getSelection().getSelectedCreator().acceptType(XWParameterLayout.class)) { - y = designer.getRootComponent().getHeight() + designer.getParaHeight(); - } - return new Point(x, y); - } - - protected void sorptionPoint(Point point, Rectangle current_bounds,FormDesigner designer) { - boolean findInX = current_bounds.getWidth() <= MoveUtils.SORPTION_UNIT ? true : false; - boolean findInY = current_bounds.getHeight() <= MoveUtils.SORPTION_UNIT ? true : false; - WAbsoluteLayout layout =getLayout(designer); - FormSelection selection = designer.getSelectionModel().getSelection(); - boolean isWidgetsIntersect = false; - for (int i = 0, count = layout.getWidgetCount(); i < count; i++) { - BoundsWidget temp = (BoundsWidget) layout.getWidget(i); - if (!temp.isVisible() || selection.contains(temp.getWidget())) { - continue; - } - Rectangle bounds = getWidgetRelativeBounds(temp.getBounds(), selection); - if (!findInX) { - int x1 = bounds.x; - if (Math.abs(x1 - point.x) <= MoveUtils.SORPTION_UNIT) { - point.x = x1; - findInX = true; - } - int x2 = bounds.x + bounds.width; - if (Math.abs(x2 - point.x) <= MoveUtils.SORPTION_UNIT) { - point.x = x2; - findInX = true; - } - } - if (!findInY) { - int y1 = bounds.y; - if (Math.abs(y1 - point.y) <= MoveUtils.SORPTION_UNIT) { - point.y = y1; - findInY = true; - } - int y2 = bounds.y + bounds.height; - if (Math.abs(y2 - point.y) <= MoveUtils.SORPTION_UNIT) { - point.y = y2; - findInY = true; - } - - } - if (findInX && findInY) { - break; - } - - if (current_bounds.intersects(bounds) && !(layout instanceof WParameterLayout)){ - isWidgetsIntersect = true; - } - } - 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().setYAbsorptionline(findInY && current_bounds.getHeight() > MoveUtils.SORPTION_UNIT ? Absorptionline.createYAbsorptionline(point.y) : null); - designer.getStateModel().setEquidistantLine(null); - } - - private Rectangle getWidgetRelativeBounds(Rectangle bounds, FormSelection selection){ - Rectangle relativeRec = new Rectangle(bounds.x, bounds.y, bounds.width, bounds.height); - XLayoutContainer parent = XCreatorUtils.getParentXLayoutContainer(selection.getSelectedCreator()); - if (parent == null) { - return relativeRec; - } - Rectangle rec = ComponentUtils.getRelativeBounds(parent); - relativeRec.x += rec.x; - relativeRec.y += rec.y; - 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){ + y = designer.getRootComponent().getHeight() + designer.getParaHeight(); + } + return new Point(x, y); + } + + protected void sorptionPoint(Point point, Rectangle currentBounds, FormDesigner designer) { + boolean findInX = currentBounds.getWidth() <= MoveUtils.SORPTION_UNIT; + boolean findInY = currentBounds.getHeight() <= MoveUtils.SORPTION_UNIT; + WAbsoluteLayout layout = getLayout(designer); + FormSelection selection = designer.getSelectionModel().getSelection(); + for (int i = 0, count = layout.getWidgetCount(); i < count; i++) { + BoundsWidget temp = (BoundsWidget) layout.getWidget(i); + if (!temp.isVisible() || selection.contains(temp.getWidget())) { + continue; + } + Rectangle bounds = getWidgetRelativeBounds(temp.getBounds(), selection); + if (!findInX) { + int x1 = bounds.x; + if (Math.abs(x1 - point.x) <= MoveUtils.SORPTION_UNIT) { + point.x = x1; + findInX = true; + } + int x2 = bounds.x + bounds.width; + if (Math.abs(x2 - point.x) <= MoveUtils.SORPTION_UNIT) { + point.x = x2; + findInX = true; + } + } + if (!findInY) { + int y1 = bounds.y; + if (Math.abs(y1 - point.y) <= MoveUtils.SORPTION_UNIT) { + point.y = y1; + findInY = true; + } + int y2 = bounds.y + bounds.height; + if (Math.abs(y2 - point.y) <= MoveUtils.SORPTION_UNIT) { + point.y = y2; + findInY = true; + } + + } + if (findInX && findInY) { + break; + } + + } + setDesignerStateModelProperties(designer, findInX, findInY, currentBounds, point); + } + + private void setDesignerStateModelProperties(FormDesigner designer, boolean findInX, boolean findInY, Rectangle + currentBounds, Point point) { + designer.getStateModel().setXAbsorptionline(findInX && currentBounds.getWidth() > MoveUtils.SORPTION_UNIT ? Absorptionline.createXAbsorptionline(point.x) : null); + designer.getStateModel().setYAbsorptionline(findInY && currentBounds.getHeight() > MoveUtils.SORPTION_UNIT ? Absorptionline.createYAbsorptionline(point.y) : null); + designer.getStateModel().setEquidistantLine(null); + } + + private Rectangle getWidgetRelativeBounds(Rectangle bounds, FormSelection selection) { + Rectangle relativeRec = new Rectangle(bounds.x, bounds.y, bounds.width, bounds.height); + XLayoutContainer parent = XCreatorUtils.getParentXLayoutContainer(selection.getSelectedCreator()); + if (parent == null) { + return relativeRec; + } + Rectangle rec = ComponentUtils.getRelativeBounds(parent); + relativeRec.x += rec.x; + relativeRec.y += rec.y; + return relativeRec; + } + + + private WAbsoluteLayout getLayout(final FormDesigner designer) { XLayoutContainer formLayoutContainer = (XLayoutContainer) XCreatorUtils.createXCreator( designer.getTarget().getContainer()); WAbsoluteLayout layout; - if (formLayoutContainer.acceptType(XWBorderLayout.class)){//看起来这边的作用应该是为了区别cpt(得到XWParameterLayout)还是frm(得到XWBorderLayout)的参数界面 - Container container = designer.getSelectionModel().getSelection().getSelectedCreator().getParent(); - if(container instanceof XWAbsoluteLayout){ - layout = ((XWAbsoluteLayout)container).toData(); - } - else { - layout = (WAbsoluteLayout) designer.getParaComponent().toData(); - } - } else{ + if (formLayoutContainer.acceptType(XWBorderLayout.class)) {//看起来这边的作用应该是为了区别cpt(得到XWParameterLayout)还是frm(得到XWBorderLayout)的参数界面 + Container container = designer.getSelectionModel().getSelection().getSelectedCreator().getParent(); + if (container instanceof XWAbsoluteLayout) { + layout = ((XWAbsoluteLayout) container).toData(); + } else { + layout = (WAbsoluteLayout) designer.getParaComponent().toData(); + } + } else { layout = (WAbsoluteLayout) designer.getTarget().getContainer(); } - return layout; + return layout; } - /** - * 拖拽 - * @param dx 坐标x - * @param dy 坐标y - * @param designer 设计界面 - */ - public void drag(int dx, int dy, FormDesigner designer) { - Rectangle rec = getDraggedBounds(dx, dy, designer.getSelectionModel().getSelection().getRelativeBounds(), designer, designer.getSelectionModel().getSelection().getBackupBounds()); + /** + * 拖拽 + * + * @param dx 坐标x + * @param dy 坐标y + * @param designer 设计界面 + */ + public void drag(int dx, int dy, FormDesigner designer) { + 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的变化使得控件不停的向上或向下移动。 - if(rec.height == MINHEIGHT){ + if (rec.height == MINHEIGHT) { ymin = rec.y; } - if(rec.height == MINHEIGHT - 1){ + if (rec.height == MINHEIGHT - 1) { ymin = ymin == rec.y ? rec.y : rec.y - 1; } - if(rec.height < MINHEIGHT){ + if (rec.height < MINHEIGHT) { rec.height = MINHEIGHT; rec.y = ymin; } // 增加下宽度也设最小为21 if (rec.width == MINWIDTH) { - xmin = rec.x; + xmin = rec.x; } - if(rec.width == MINWIDTH - 1){ - xmin = xmin == rec.x ? rec.x : rec.x - 1; + if (rec.width == MINWIDTH - 1) { + xmin = xmin == rec.x ? rec.x : rec.x - 1; } if (rec.width < MINWIDTH) { - rec.width = MINWIDTH; - rec.x = xmin; + rec.width = MINWIDTH; + 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); - } - } - - /** - * 更新鼠标指针形状 - * @param formEditor 设计界面组件 - */ - 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(); - } + } + + /** + * 生成组件备用的bound + * + * @param formEditor 设计界面组件 + */ + public void backupBounds(FormDesigner formEditor) { + formEditor.getSelectionModel().getSelection().backupBounds(); + } } \ No newline at end of file From 40dbc0272fff3a95ab65a9510735590320e13ab6 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Mon, 10 Apr 2017 17:44:13 +0800 Subject: [PATCH 263/343] =?UTF-8?q?report-1945frm=E6=9C=AC=E5=9C=B0?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E5=A4=8D=E7=94=A8=EF=BC=9A1=E3=80=81?= =?UTF-8?q?=E8=87=AA=E9=80=82=E5=BA=94=E6=88=96=E8=80=85tab=E5=B8=83?= =?UTF-8?q?=E5=B1=80=E6=97=B6=EF=BC=8C=E4=B8=8D=E9=80=89=E4=B8=AD=E7=B2=98?= =?UTF-8?q?=E8=B4=B4=E9=BB=98=E8=AE=A4=E4=B8=BA=E4=B8=8A=E4=B8=8B=E5=B9=B3?= =?UTF-8?q?=E5=88=86=E5=B7=A6=E4=B8=8A=E8=A7=92=E7=9A=84=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=EF=BC=9B2=E3=80=81tab=E5=B8=83=E5=B1=80=EF=BC=88=E6=9C=89?= =?UTF-8?q?=E6=97=A0=E5=8F=82=E6=95=B0=E9=9D=A2=E6=9D=BF=EF=BC=89=E7=B2=98?= =?UTF-8?q?=E8=B4=B4=E4=BD=8D=E7=BD=AE=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer/beans/models/SelectionModel.java | 48 ++++++++++++------- .../design/mainframe/FormSelectionUtils.java | 20 ++++++-- 2 files changed, 48 insertions(+), 20 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java index a70d9b156..8ef0033ea 100644 --- a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java +++ b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java @@ -15,6 +15,8 @@ import com.fr.design.mainframe.FormSelection; import com.fr.design.mainframe.FormSelectionUtils; import com.fr.design.utils.ComponentUtils; import com.fr.design.utils.gui.LayoutUtils; +import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; +import com.fr.form.ui.container.cardlayout.WTabFitLayout; import com.fr.stable.ArrayUtils; import java.awt.*; @@ -27,7 +29,7 @@ import java.util.ArrayList; public class SelectionModel { //被粘贴组件在所选组件位置处往下、往右各错开20像素。执行多次粘贴时,在上一次粘贴的位置处错开20像素。 private static final int DELTA_X_Y = 20; //粘贴时候的偏移距离 - private static final double OFFSET_RELATIVE = 0.80; + private static final double OFFSET_RELATIVE = 0.78; private static FormSelection clipboard = new FormSelection(); private FormDesigner designer; private FormSelection selection; @@ -136,19 +138,20 @@ public class SelectionModel { if (designer.getClass().equals(FormDesigner.class)) { if (selection.getSelectedCreator() instanceof XWFitLayout) { if (selection.getSelectedCreator().getClass().equals(XWTabFitLayout.class)) { - Rectangle rec = selection.getRelativeBounds(); - //Tab布局 - FormSelectionUtils.paste2Container(designer, (XLayoutContainer) selection.getSelectedCreator(), - clipboard, - rec.x + rec.width / 2, - rec.y + DELTA_X_Y); + XLayoutContainer container = (XLayoutContainer) selection.getSelectedCreator(); + //tab布局编辑器内部左上角第一个坐标点 + int leftUpX = container.toData().getMargin().getLeft() + 1; + int leftUpY = container.toData().getMargin().getTop() + 1; + //选中第一个坐标点坐在的组件 + selection.setSelectedCreator((XCreator) container.getComponentAt(leftUpX, leftUpY)); + pasteFromClipBoard(); } else { - Rectangle rec = selection.getRelativeBounds(); - //自适应布局 - FormSelectionUtils.paste2Container(designer, designer.getRootComponent(), - clipboard, - rec.x + rec.width / 2, - rec.y + DELTA_X_Y); + //自适应布局编辑器内部左上角第一个坐标点 + int leftUpX = designer.getRootComponent().toData().getMargin().getLeft() + 1; + int leftUpY = designer.getRootComponent().toData().getMargin().getTop() + 1; + //选中第一个坐标点坐在的组件 + selection.setSelectedCreator((XCreator) designer.getRootComponent().getComponentAt(leftUpX, leftUpY)); + pasteFromClipBoard(); } } else { //绝对布局 @@ -178,12 +181,23 @@ public class SelectionModel { container = XCreatorUtils.getParentXLayoutContainer(selection.getSelectedCreator()); if (container != null && selection.getSelectedCreator().getParent() instanceof XWFitLayout) { //自适应布局 + Rectangle selectionRec = selection.getRelativeBounds(); + //获取父容器位置,补充因参数面板高度导致的位置坐标计算偏移 Rectangle containerRec = ComponentUtils.getRelativeBounds(container); - //计算自适应布局位置 - int positionX = selectionRec.x - containerRec.x + selectionRec.width / 2; - int positionY = (int) (selectionRec.y - containerRec.y + selectionRec.height * OFFSET_RELATIVE); - + int positionX, positionY; + + if (container.getClass().equals(XWTabFitLayout.class)) { + //tab内部粘贴不补充高度偏移 + //且不计算参数面板造成的影响,因为在 + //@see com.fr.design.designer.beans.adapters.layout.FRTabFitLayoutAdapter#addBean中做了 + positionX = selectionRec.x + selectionRec.width / 2; + positionY = (int) (selectionRec.y + selectionRec.height * OFFSET_RELATIVE); + } else { + //计算自适应布局位置 + positionX = selectionRec.x - containerRec.x + selectionRec.width / 2; + positionY = (int) (selectionRec.y - containerRec.y + selectionRec.height * OFFSET_RELATIVE); + } FormSelectionUtils.paste2Container(designer, container, clipboard, positionX, positionY); } else if (container != null && selection.getSelectedCreator().getParent() instanceof XWAbsoluteLayout) { //绝对布局 diff --git a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java index 79f52519e..1978e8432 100644 --- a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java +++ b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java @@ -3,8 +3,10 @@ package com.fr.design.mainframe; import com.fr.base.FRContext; import com.fr.design.designer.beans.LayoutAdapter; import com.fr.design.designer.beans.adapters.layout.AbstractLayoutAdapter; +import com.fr.design.designer.beans.adapters.layout.FRTabFitLayoutAdapter; import com.fr.design.designer.beans.events.DesignerEvent; import com.fr.design.designer.creator.*; +import com.fr.design.utils.ComponentUtils; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WTitleLayout; import com.fr.general.ComparatorUtils; @@ -83,14 +85,26 @@ public class FormSelectionUtils { * 相对布局粘贴 */ private static void relativePaste(FormDesigner designer, FormSelection clipboard, LayoutAdapter adapter, int x, int y) { + + //@see FRTabFitLayoutAdapter + Rectangle tabContainerRect = ComponentUtils.getRelativeBounds(designer.getSelectionModel().getSelection() + .getSelectedCreator().getParent()); + designer.getSelectionModel().getSelection().reset(); for (XCreator creator : clipboard.getSelectedCreators()) { try { Widget copied = copyWidget(designer, creator); XCreator copiedCreator = XCreatorUtils.createXCreator(copied, creator.getSize()); - if (!adapter.accept(copiedCreator, x, y)) { - designer.showMessageDialog(Inter.getLocText("FR-Designer_Too_Small_To_Paste")); - return; + if (adapter.getClass().equals(FRTabFitLayoutAdapter.class)) { + if (!adapter.accept(copiedCreator, x - tabContainerRect.x, y - tabContainerRect.y)) { + designer.showMessageDialog(Inter.getLocText("FR-Designer_Too_Small_To_Paste")); + return; + } + } else { + if (!adapter.accept(copiedCreator, x, y)) { + designer.showMessageDialog(Inter.getLocText("FR-Designer_Too_Small_To_Paste")); + return; + } } boolean addSuccess = adapter.addBean(copiedCreator, x, y); if (addSuccess) { From 9dd806a40ff153526e1f6199bfcfd19e050c4127 Mon Sep 17 00:00:00 2001 From: neil Date: Mon, 10 Apr 2017 18:16:38 +0800 Subject: [PATCH 264/343] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=EF=BC=8C=20=E5=86=B2=E7=AA=81=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/beans/location/MoveUtils.java | 1130 ++++---- .../com/fr/design/locale/designer.properties | 19 +- .../design/locale/designer_en_US.properties | 18 +- .../design/locale/designer_ja_JP.properties | 17 +- .../design/locale/designer_ko_KR.properties | 17 +- .../design/locale/designer_zh_CN.properties | 20 +- .../design/locale/designer_zh_TW.properties | 22 +- .../fr/design/chart/axis/MinMaxValuePane.java | 71 +- .../layout/FRAbsoluteLayoutAdapter.java | 698 ++--- .../adapters/layout/FRFitLayoutAdapter.java | 2385 +++++++++-------- .../beans/location/AccessDirection.java | 330 +-- 11 files changed, 2380 insertions(+), 2347 deletions(-) diff --git a/designer_base/src/com/fr/design/beans/location/MoveUtils.java b/designer_base/src/com/fr/design/beans/location/MoveUtils.java index 91a62ed5f..d89848446 100644 --- a/designer_base/src/com/fr/design/beans/location/MoveUtils.java +++ b/designer_base/src/com/fr/design/beans/location/MoveUtils.java @@ -1,544 +1,588 @@ -/* - * Copyright(c) 2001-2011, FineReport Inc, All Rights Reserved. - */ -package com.fr.design.beans.location; - -import javax.swing.*; -import java.awt.*; -import java.util.ArrayList; - -/** - * Created by IntelliJ IDEA. - * - * @author: Richer - * @since : 6.5.5 Date: 11-7-1 Time: 下午2:22 - */ -public class MoveUtils { - - public static final int SORPTION_UNIT = 5; - private static final int EQUIDISTANTLINE_UNIT = 4; - - private static ArrayList equidistantLines = new ArrayList<>(); - - private MoveUtils() { - - } - - public interface RectangleDesigner { - - /** - * 获取块边界的迭代器 - * - * @return 块边界的迭代器 - * @date 2015-2-12-下午2:43:47 - */ - RectangleIterator createRectangleIterator(); - - /** - * 设置X轴的线 - * - * @param line 连接线 - * @date 2015-2-12-下午2:44:04 - */ - void setXAbsorptionline(Absorptionline line); - - /** - * 设置Y轴的线 - * - * @param line 连接线 - * @date 2015-2-12-下午2:44:04 - */ - void setYAbsorptionline(Absorptionline line); - - /** - * 获取当前选中块的垂直线数组 - * - * @return 块的垂直线数组 - */ - int[] getVerticalLine(); - - /** - * 获取当前选中块的水平线数组 - * - * @return 块的水平线数组 - */ - int[] getHorizontalLine(); - - /** - * 设置designer内部组件是否重叠的标志位 - * - * @param isIntersects 是否重叠 - */ - void setWidgetsIntersected(boolean isIntersects); - - /** - * 获取designer内部组件是否重叠的标志位 - * - * @return 重叠 - */ - boolean isWidgetsIntersected(); - - /** - * 获取designer相对屏幕的位置 - * - * @return 位置 - */ - Point getDesignerLocationOnScreen(); - - /** - * 设置等距线 - * - * @param line 吸附线 - */ - void setEquidistantLine(Absorptionline line); - - /** - * 获取设计器垂直滚动条的值 - * - * @return 滚动条的值 - */ - int getDesignerScrollVerticalValue(); - - /** - * 获取设计器水平滚动条的值 - * - * @return 滚动条的值 - */ - int getDesignerScrollHorizontalValue(); - } - - public interface RectangleIterator { - - /** - * 是否存在下一个块 - * - * @return 是否存在下一个块 - * @date 2015-2-12-下午2:41:32 - */ - boolean hasNext(); - - /** - * 获取下一个块的bounds - * - * @return 下一个块的bounds - * @date 2015-2-12-下午2:41:55 - */ - Rectangle nextRectangle(); - - /** - * 获取块的垂直线数组 - * - * @return 块的垂直线数组 - * @date 2015-2-12-下午2:42:27 - */ - int[] getVerticalLine(); - - /** - * 获取块的水平线数组 - * - * @return 块的水平线数组 - * @date 2015-2-12-下午2:42:27 - */ - int[] getHorizontalLine(); - } - - private static class PlacePointing { - public PlacePointing(int x) { - this.palce = x; - } - - private boolean isFind() { - return direction != -1; - } - - private int palce; - private int direction = -1; - } - - private static void findX(PlacePointing px, Rectangle bounds, int left, int right, int width) { - if (px.isFind()) { - return; - } - if (Math.abs(bounds.x + bounds.width / 2 - (left + right) / 2) <= SORPTION_UNIT) { - px.palce = bounds.x + bounds.width / 2 - width / 2; - px.direction = SwingConstants.CENTER; - } - int x1 = bounds.x; - if (Math.abs(x1 - left) <= SORPTION_UNIT) { - px.palce = x1; - px.direction = SwingConstants.LEFT; - } - if (Math.abs(x1 - right) <= SORPTION_UNIT) { - px.palce = x1 - width; - px.direction = SwingConstants.RIGHT; - } - int x2 = bounds.x + bounds.width; - if (Math.abs(x2 - left) <= SORPTION_UNIT) { - px.palce = x2; - px.direction = SwingConstants.LEFT; - } - if (Math.abs(x2 - right) <= SORPTION_UNIT) { - px.palce = x2 - width; - px.direction = SwingConstants.RIGHT; - } - if (Math.abs(bounds.x + bounds.width / 2 - left) <= SORPTION_UNIT) { - px.palce = bounds.x + bounds.width / 2; - px.direction = SwingConstants.LEFT; - } - if (Math.abs(bounds.x + bounds.width / 2 - right) <= SORPTION_UNIT) { - px.palce = bounds.x + bounds.width / 2 - width; - px.direction = SwingConstants.RIGHT; - } - } - - private static void findY(PlacePointing py, Rectangle bounds, int top, int bottom, int height) { - if (py.isFind()) { - return; - } - - if (Math.abs(bounds.y + bounds.height / 2 - (top + bottom) / 2) <= SORPTION_UNIT) { - py.palce = bounds.y + bounds.height / 2 - height / 2; - py.direction = SwingConstants.CENTER; - } - int y1 = bounds.y; - if (Math.abs(y1 - top) <= SORPTION_UNIT) { - py.palce = y1; - py.direction = SwingConstants.TOP; - } - if (Math.abs(y1 - bottom) <= SORPTION_UNIT) { - py.palce = y1 - height; - py.direction = SwingConstants.BOTTOM; - } - int y2 = bounds.y + bounds.height; - if (Math.abs(y2 - top) <= SORPTION_UNIT) { - py.palce = y2; - py.direction = SwingConstants.TOP; - } - if (Math.abs(y2 - bottom) <= SORPTION_UNIT) { - py.palce = y2 - height; - py.direction = SwingConstants.BOTTOM; - } - if (Math.abs(bounds.y + bounds.height / 2 - top) <= SORPTION_UNIT) { - py.palce = bounds.y + bounds.height / 2; - py.direction = SwingConstants.TOP; - } - if (Math.abs(bounds.y + bounds.height / 2 - bottom) <= SORPTION_UNIT) { - py.palce = bounds.y + bounds.height / 2 - height; - py.direction = SwingConstants.BOTTOM; - } - } - - private static void findEquidistantLine(Rectangle bounds, int left, int top, int height, int width) { - //最近的距离与坐标 - EquidistantLine equidistantLineInfo = new EquidistantLine(0, 0, 0); - //等距线从各边中点画出,先要判断是不是在范围内 - int topMiddleX = left + width / 2; - int leftMiddleY = top + height / 2; - if ((topMiddleX > bounds.getX()) && (topMiddleX < (bounds.getX() + bounds.getWidth()))) { - //当前操作rec在bounds的下方 - if (top > (bounds.getY() + bounds.getHeight())) { - equidistantLineInfo.setDistance(top - (bounds.y + bounds.height)); - equidistantLineInfo.setReference(bounds.y + bounds.height); - equidistantLineInfo.setDirection(SwingConstants.TOP); - } - //当前操作rec在bounds上方 - if ((top + height) < bounds.getY()) { - equidistantLineInfo.setDistance(bounds.y - (top + height)); - equidistantLineInfo.setReference(bounds.y); - equidistantLineInfo.setDirection(SwingConstants.BOTTOM); - } - } else if ((leftMiddleY > bounds.getY()) && (leftMiddleY < (bounds.getY() + bounds.getHeight()))) { - //当前操作rec在bounds的右侧 - if (left > (bounds.getX() + bounds.getWidth())) { - equidistantLineInfo.setDistance(left - (bounds.x + bounds.width)); - equidistantLineInfo.setReference(bounds.x + bounds.width); - equidistantLineInfo.setDirection(SwingConstants.LEFT); - } - //当前操作rec在bounds的左侧 - if ((left + width) < bounds.getX()) { - equidistantLineInfo.setDistance(bounds.x - (left + width)); - equidistantLineInfo.setReference(bounds.x); - equidistantLineInfo.setDirection(SwingConstants.RIGHT); - } - } - if (equidistantLineInfo.getDistance() > 0) { - equidistantLines.add(equidistantLineInfo); - } - } - - - /** - * 吸附 - * - * @param x x坐标 - * @param y y坐标 - * @param width 宽度 - * @param height 高度 - * @param designer 块设计器 - * @return 吸附后坐标 - * @date 2015-2-12-下午2:39:16 - */ - public static Point sorption(int x, int y, int width, int height, RectangleDesigner designer, boolean isParameterLayout) { - - int left = x, top = y, bottom = top + height, right = left + width; - - Rectangle operatingRectangle = new Rectangle(x, y, width, height); - - equidistantLines.clear(); - - PlacePointing px = new PlacePointing(x); - PlacePointing py = new PlacePointing(y); - - PlacePointing pEquidistantX = new PlacePointing(x); - PlacePointing pEquidistantY = new PlacePointing(y); - - RectangleIterator iterator = designer.createRectangleIterator(); - - java.util.List cacheRecs = new ArrayList(); - while (iterator.hasNext()) { - Rectangle bounds = iterator.nextRectangle(); - cacheRecs.add(bounds); - findX(px, bounds, left, right, width); - findY(py, bounds, top, bottom, height); - - if (!isParameterLayout) { - findEquidistantLine(bounds, left, top, height, width); - } - } - - createXAbsorptionline(px, designer, width, cacheRecs); - createYAbsorptionline(py, designer, height, cacheRecs); - operatingRectangle.x = px.palce; - operatingRectangle.y = py.palce; - createEquidistantLine(pEquidistantX, pEquidistantY, operatingRectangle, designer); - Point sorptionPoint = new Point(px.palce, py.palce); - if (!px.isFind()) { - sorptionPoint.x = pEquidistantX.palce; - } - if (!py.isFind()) { - sorptionPoint.y = pEquidistantY.palce; - } - return sorptionPoint; - } - - - private static void createXAbsorptionline(PlacePointing px, RectangleDesigner designer, int width, java.util.List cacheRecs) { - Absorptionline line = null; - RectangleIterator iterator = designer.createRectangleIterator(); - int[] selfVertical = designer.getVerticalLine(); - if (px.direction == SwingConstants.CENTER) { - line = Absorptionline.createXMidAbsorptionline(px.palce + width / 2); - int left = px.palce; - int right = px.palce + width; - for (Rectangle bounds : cacheRecs) { - if (bounds.x == left || bounds.x + bounds.width == left) { - line.setFirstLine(left); - } - if (bounds.x == right || bounds.x + bounds.width == right) { - line.setSecondLine(right); - } - updateVerticalLine(selfVertical, iterator, line); - if (line.isFull()) { - break; - } - } - } else if (px.direction == SwingConstants.LEFT || px.direction == SwingConstants.RIGHT) { - int left = px.direction == SwingConstants.LEFT ? px.palce + width : px.palce; - line = Absorptionline.createXAbsorptionline(px.direction == SwingConstants.LEFT ? px.palce : px.palce + width); - int middle = px.palce + width / 2; - for (Rectangle bounds : cacheRecs) { - if (bounds.x == left || bounds.x + bounds.width == left) { - line.setSecondLine(left); - } - if (bounds.x + bounds.width / 2 == middle) { - line.setMidLine(middle); - } - updateVerticalLine(selfVertical, iterator, line); - if (line.isFull()) { - break; - } - } - } - designer.setXAbsorptionline(line); - } - - private static void createYAbsorptionline(PlacePointing py, RectangleDesigner designer, int height, java.util.List cacheRecs) { - Absorptionline line = null; - RectangleIterator iterator = designer.createRectangleIterator(); - int[] selfHorizontal = designer.getHorizontalLine(); - if (py.direction == SwingConstants.CENTER) { - line = Absorptionline.createYMidAbsorptionline(py.palce + height / 2); - int top = py.palce; - int bottom = py.palce + height; - for (Rectangle bounds : cacheRecs) { - if (bounds.y == top || bounds.y + bounds.height == top) { - line.setFirstLine(top); - } - if (bounds.y == bottom || bounds.y + bounds.height == bottom) { - line.setSecondLine(bottom); - } - updateHorizontalLine(selfHorizontal, iterator, line); - if (line.isFull()) { - break; - } - } - } else if (py.direction == SwingConstants.TOP || py.direction == SwingConstants.BOTTOM) { - int top = py.direction == SwingConstants.TOP ? py.palce + height : py.palce; - line = Absorptionline.createYAbsorptionline(py.direction == SwingConstants.TOP ? py.palce : py.palce + height); - int middle = py.palce + height / 2; - for (Rectangle bounds : cacheRecs) { - if (bounds.y == top || bounds.y + bounds.height == top) { - line.setSecondLine(top); - } - if (bounds.y + bounds.height / 2 == middle) { - line.setMidLine(middle); - } - updateHorizontalLine(selfHorizontal, iterator, line); - if (line.isFull()) { - break; - } - } - } - designer.setYAbsorptionline(line); - } - - private static void createEquidistantLine(PlacePointing px, PlacePointing py, Rectangle operatingRectangle, RectangleDesigner designer) { - processEquidistantLinesList(px, py, operatingRectangle); - Absorptionline line = null; - if (equidistantLines.size() > 0) { - int top = -1; - int left = -1; - int bottom = -1; - int right = -1; - for (int i = 0; i < equidistantLines.size(); i++) { - if (equidistantLines.get(i).getDirection() == SwingConstants.TOP) { - top = equidistantLines.get(i).getReference(); - } - if (equidistantLines.get(i).getDirection() == SwingConstants.LEFT) { - left = equidistantLines.get(i).getReference(); - } - if (equidistantLines.get(i).getDirection() == SwingConstants.BOTTOM) { - bottom = equidistantLines.get(i).getReference(); - } - if (equidistantLines.get(i).getDirection() == SwingConstants.RIGHT) { - right = equidistantLines.get(i).getReference(); - } - } - operatingRectangle.x -= designer.getDesignerScrollHorizontalValue(); - operatingRectangle.y -= designer.getDesignerScrollVerticalValue(); - line = Absorptionline.createEquidistantAbsorptionline(operatingRectangle, - top - designer.getDesignerScrollVerticalValue(), - left - designer.getDesignerScrollHorizontalValue(), - bottom - designer.getDesignerScrollVerticalValue(), - right - designer.getDesignerScrollHorizontalValue()); - } - designer.setEquidistantLine(line); - } - - private static void processEquidistantLinesList(PlacePointing pEquidistantX, PlacePointing pEquidistantY, Rectangle operatingRectangle) { - EquidistantLine[] equidistantLines1 = new EquidistantLine[EQUIDISTANTLINE_UNIT]; - //先按方向处理,只保留四个方向上距离最近 - for (int count = 0; count < equidistantLines.size(); count++) { - 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 (equidistantLines1[direction] != null - && equidistantLines1[direction].getDistance() > equidistantLines.get(count).getDistance() - || equidistantLines1[direction] == null) { - equidistantLines1[direction] = equidistantLines.get(count); - } - } - } - } - - equidistantLines.clear(); - //找list中横纵分别等距的组合 - if (equidistantLines1[0] != null && equidistantLines1[2] != null) {//top, bottom - int offset = equidistantLines1[0].getDistance() - equidistantLines1[2].getDistance(); - if (Math.abs(offset) <= SORPTION_UNIT * 2) { - pEquidistantY.direction = SwingConstants.TOP; - equidistantLines.add(equidistantLines1[0]); - equidistantLines.add(equidistantLines1[2]); - pEquidistantY.palce = operatingRectangle.y - offset / 2; - operatingRectangle.y = pEquidistantY.palce; - } - } - if (equidistantLines1[1] != null && equidistantLines1[3] != null) {//left, right - int offset = equidistantLines1[1].getDistance() - equidistantLines1[3].getDistance(); - if (Math.abs(offset) <= SORPTION_UNIT * 2) { - pEquidistantX.direction = SwingConstants.LEFT; - equidistantLines.add(equidistantLines1[1]); - equidistantLines.add(equidistantLines1[3]); - pEquidistantX.palce = operatingRectangle.x - offset / 2; - operatingRectangle.x = pEquidistantX.palce; - } - } - } - - //更新纵向行列线 - private static void updateVerticalLine(int[] selfVertical, RectangleIterator iterator, Absorptionline line) { - int[] targetArray = iterator.getVerticalLine(); - if (intersectArrays(targetArray, selfVertical)) { - line.setVerticalLines(targetArray); - } - } - - //更新横向行列线 - private static void updateHorizontalLine(int[] selfHorizontal, RectangleIterator iterator, Absorptionline line) { - int[] targetArray = iterator.getHorizontalLine(); - if (intersectArrays(targetArray, selfHorizontal)) { - line.setHorizontalLines(targetArray); - } - } - - //检测两个数组是否有相交的部分 - private static boolean intersectArrays(int[] targetArray, int[] selfArray) { - for (int i : targetArray) { - for (int j : selfArray) { - if (i == j) { - return true; - } - } - } - - return false; - } - - private static class EquidistantLine { - //与操作rectangle的距离 - private int distance; - //参考rectangle的位置 - private int reference; - //等距线的方向 - private int direction; - - EquidistantLine(int distance, int reference, int direction) { - this.distance = distance; - this.reference = reference; - this.direction = direction; - } - - public void setDistance(int distance) { - this.distance = distance; - } - - public int getDistance() { - return this.distance; - } - - public void setReference(int reference) { - this.reference = reference; - } - - public int getReference() { - return this.reference; - } - - public void setDirection(int direction) { - this.direction = direction; - } - - public int getDirection() { - return this.direction; - } - } +/* + * Copyright(c) 2001-2011, FineReport Inc, All Rights Reserved. + */ +package com.fr.design.beans.location; + +import javax.swing.*; +import java.awt.*; +import java.util.ArrayList; + +/** + * Created by IntelliJ IDEA. + * + * @author: Richer + * @since : 6.5.5 Date: 11-7-1 Time: 下午2:22 + */ +public class MoveUtils { + + public static final int SORPTION_UNIT = 5; + private static final int EQUIDISTANTLINE_UNIT = 4; + + public static WidgetForbidWindow widgetForbidWindow = new WidgetForbidWindow(); + + public static ArrayList equidistantLines = new ArrayList<>(); + + private MoveUtils() { + + } + + public interface RectangleDesigner { + + /** + * 获取块边界的迭代器 + * + * @return 块边界的迭代器 + * + * @date 2015-2-12-下午2:43:47 + * + */ + RectangleIterator createRectangleIterator(); + + /** + * 设置X轴的线 + * + * @param line 连接线 + * + * @date 2015-2-12-下午2:44:04 + * + */ + void setXAbsorptionline(Absorptionline line); + + /** + * 设置Y轴的线 + * + * @param line 连接线 + * + * @date 2015-2-12-下午2:44:04 + * + */ + void setYAbsorptionline(Absorptionline line); + + /** + * 获取当前选中块的垂直线数组 + * + * @return 块的垂直线数组 + * + */ + int[] getVerticalLine(); + + /** + * 获取当前选中块的水平线数组 + * + * @return 块的水平线数组 + * + */ + int[] getHorizontalLine(); + + /** + * 设置designer内部组件是否重叠的标志位 + * @param isIntersects 是否重叠 + */ + void setWidgetsIntersected(boolean isIntersects); + + /** + * 获取designer内部组件是否重叠的标志位 + * @return 重叠 + */ + boolean isWidgetsIntersected(); + + /** + * 获取designer相对屏幕的位置 + * @return 位置 + */ + Point getDesignerLocationOnScreen(); + + /** + * 设置等距线 + * @param line 吸附线 + */ + void setEquidistantLine(Absorptionline line); + + /** + * 获取设计器垂直滚动条的值 + * @return 滚动条的值 + */ + int getDesignerScrollVerticalValue(); + + /** + * 获取设计器水平滚动条的值 + * @return 滚动条的值 + */ + int getDesignerScrollHorizontalValue(); + } + + public interface RectangleIterator { + + /** + * 是否存在下一个块 + * + * @return 是否存在下一个块 + * + * @date 2015-2-12-下午2:41:32 + * + */ + boolean hasNext(); + + /** + * 获取下一个块的bounds + * + * @return 下一个块的bounds + * + * @date 2015-2-12-下午2:41:55 + * + */ + Rectangle nextRectangle(); + + /** + * 获取块的垂直线数组 + * + * @return 块的垂直线数组 + * + * @date 2015-2-12-下午2:42:27 + * + */ + int[] getVerticalLine(); + + /** + * 获取块的水平线数组 + * + * @return 块的水平线数组 + * + * @date 2015-2-12-下午2:42:27 + * + */ + int[] getHorizontalLine(); + } + + private static class PlacePointing { + public PlacePointing(int x) { + this.palce = x; + } + + private boolean isFind() { + return direction != -1; + } + + private int palce; + private int direction = -1; + } + + private static void findX(PlacePointing px, Rectangle bounds, int left, int right, int width) { + if (px.isFind()) { + return; + } + if (Math.abs(bounds.x + bounds.width / 2 - (left + right) / 2) <= SORPTION_UNIT) { + px.palce = bounds.x + bounds.width / 2 - width / 2; + px.direction = SwingConstants.CENTER; + } + int x1 = bounds.x; + if (Math.abs(x1 - left) <= SORPTION_UNIT) { + px.palce = x1; + px.direction = SwingConstants.LEFT; + } + if (Math.abs(x1 - right) <= SORPTION_UNIT) { + px.palce = x1 - width; + px.direction = SwingConstants.RIGHT; + } + int x2 = bounds.x + bounds.width; + if (Math.abs(x2 - left) <= SORPTION_UNIT) { + px.palce = x2; + px.direction = SwingConstants.LEFT; + } + if (Math.abs(x2 - right) <= SORPTION_UNIT) { + px.palce = x2 - width; + px.direction = SwingConstants.RIGHT; + } + if (Math.abs(bounds.x + bounds.width / 2 - left) <= SORPTION_UNIT) { + px.palce = bounds.x + bounds.width / 2; + px.direction = SwingConstants.LEFT; + } + if (Math.abs(bounds.x + bounds.width / 2 - right) <= SORPTION_UNIT) { + px.palce = bounds.x + bounds.width / 2 - width; + px.direction = SwingConstants.RIGHT; + } + } + + private static void findY(PlacePointing py, Rectangle bounds, int top, int bottom, int height) { + if (py.isFind()) { + return; + } + + if (Math.abs(bounds.y + bounds.height / 2 - (top + bottom) / 2) <= SORPTION_UNIT) { + py.palce = bounds.y + bounds.height / 2 - height / 2; + py.direction = SwingConstants.CENTER; + } + int y1 = bounds.y; + if (Math.abs(y1 - top) <= SORPTION_UNIT) { + py.palce = y1; + py.direction = SwingConstants.TOP; + } + if (Math.abs(y1 - bottom) <= SORPTION_UNIT) { + py.palce = y1 - height; + py.direction = SwingConstants.BOTTOM; + } + int y2 = bounds.y + bounds.height; + if (Math.abs(y2 - top) <= SORPTION_UNIT) { + py.palce = y2; + py.direction = SwingConstants.TOP; + } + if (Math.abs(y2 - bottom) <= SORPTION_UNIT) { + py.palce = y2 - height; + py.direction = SwingConstants.BOTTOM; + } + if (Math.abs(bounds.y + bounds.height / 2 - top) <= SORPTION_UNIT) { + py.palce = bounds.y + bounds.height / 2; + py.direction = SwingConstants.TOP; + } + if (Math.abs(bounds.y + bounds.height / 2 - bottom) <= SORPTION_UNIT) { + py.palce = bounds.y + bounds.height / 2 - height; + py.direction = SwingConstants.BOTTOM; + } + } + + private static void findEquidistantLine(Rectangle bounds, int left, int top, int height, int width) { + //最近的距离与坐标 + EquidistantLine equidistantLineInfo = new EquidistantLine(0, 0, 0); + //等距线从各边中点画出,先要判断是不是在范围内 + int topMiddleX = left + width / 2; + int leftMiddleY = top + height / 2; + if ((topMiddleX > bounds.getX()) && (topMiddleX < (bounds.getX() + bounds.getWidth()))){ + //当前操作rec在bounds的下方 + if (top > (bounds.getY() + bounds.getHeight())){ + equidistantLineInfo.setDistance(top - (bounds.y + bounds.height)); + equidistantLineInfo.setReference(bounds.y + bounds.height); + equidistantLineInfo.setDirection(SwingConstants.TOP); + } + //当前操作rec在bounds上方 + if ((top + height) < bounds.getY()){ + equidistantLineInfo.setDistance(bounds.y - (top + height)); + equidistantLineInfo.setReference(bounds.y); + equidistantLineInfo.setDirection(SwingConstants.BOTTOM); + } + } + else if ((leftMiddleY > bounds.getY()) && (leftMiddleY < (bounds.getY() + bounds.getHeight()))){ + //当前操作rec在bounds的右侧 + if (left > (bounds.getX() + bounds.getWidth())){ + equidistantLineInfo.setDistance(left - (bounds.x + bounds.width)); + equidistantLineInfo.setReference(bounds.x + bounds.width); + equidistantLineInfo.setDirection(SwingConstants.LEFT); + } + //当前操作rec在bounds的左侧 + if ((left + width) < bounds.getX()){ + equidistantLineInfo.setDistance(bounds.x - (left + width)); + equidistantLineInfo.setReference(bounds.x); + equidistantLineInfo.setDirection(SwingConstants.RIGHT); + } + } + if(equidistantLineInfo.getDistance() > 0) { + equidistantLines.add(equidistantLineInfo); + } + } + + public static void displayForbidWindow(int x, int y) { + widgetForbidWindow.showWindow(x, y); + } + + public static void hideForbidWindow() { + widgetForbidWindow.hideWindow(); + } + + /** + * 吸附 + * + * @param x x坐标 + * @param y y坐标 + * @param width 宽度 + * @param height 高度 + * @param designer 块设计器 + * + * @return 吸附后坐标 + * + * @date 2015-2-12-下午2:39:16 + * + */ + public static Point sorption(int x, int y, int width, int height, RectangleDesigner designer, boolean isParameterLayout) { + + int left = x, top = y, bottom = top + height, right = left + width; + + Rectangle operatingRectangle = new Rectangle(x, y, width, height); + + equidistantLines.clear(); + + PlacePointing px = new PlacePointing(x); + PlacePointing py = new PlacePointing(y); + + PlacePointing pEquidistantX = new PlacePointing(x); + PlacePointing pEquidistantY = new PlacePointing(y); + + RectangleIterator iterator = designer.createRectangleIterator(); + + java.util.List cacheRecs = new ArrayList(); + //是否存在控件重叠 + boolean isWidgetsIntersects = false; + while (iterator.hasNext()) { + Rectangle bounds = iterator.nextRectangle(); + cacheRecs.add(bounds); + boolean isIntersects = operatingRectangle.intersects(bounds); + findX(px, bounds, left, right, width); + findY(py, bounds, top, bottom, height); + + if(!isParameterLayout){ + if(isIntersects) { + isWidgetsIntersects = true; + } + else{ + findEquidistantLine(bounds, left, top, height, width); + } + } + } + showForbiddenWindow(designer, x, y, isWidgetsIntersects); + + createXAbsorptionline(px, designer, width, cacheRecs); + createYAbsorptionline(py, designer, height, cacheRecs); + operatingRectangle.x = px.palce; + operatingRectangle.y = py.palce; + createEquidistantLine(pEquidistantX, pEquidistantY, operatingRectangle, designer); + Point sorptionPoint = new Point(px.palce,py.palce); + if (!px.isFind()){ + sorptionPoint.x = pEquidistantX.palce; + } + if (!py.isFind()){ + sorptionPoint.y = pEquidistantY.palce; + } + return sorptionPoint; + } + + public static void showForbiddenWindow(RectangleDesigner designer, int x, int y, boolean isIntersects){ + if (isIntersects){ + if(designer.getDesignerLocationOnScreen() != null) { + displayForbidWindow(x + designer.getDesignerLocationOnScreen().x, y + designer.getDesignerLocationOnScreen().y); + } + designer.setWidgetsIntersected(true); + } + else{ + designer.setWidgetsIntersected(false); + hideForbidWindow(); + } + } + + private static void createXAbsorptionline(PlacePointing px, RectangleDesigner designer, int width, java.util.List cacheRecs) { + Absorptionline line = null; + RectangleIterator iterator = designer.createRectangleIterator(); + int[] selfVertical = designer.getVerticalLine(); + if (px.direction == SwingConstants.CENTER) { + line = Absorptionline.createXMidAbsorptionline(px.palce + width / 2); + int left = px.palce; + int right = px.palce + width; + for (Rectangle bounds : cacheRecs) { + if (bounds.x == left || bounds.x + bounds.width == left) { + line.setFirstLine(left); + } + if (bounds.x == right || bounds.x + bounds.width == right) { + line.setSecondLine(right); + } + updateVerticalLine(selfVertical, iterator, line); + if (line.isFull()) { + break; + } + } + } else if (px.direction == SwingConstants.LEFT || px.direction == SwingConstants.RIGHT) { + int left = px.direction == SwingConstants.LEFT ? px.palce + width : px.palce; + line = Absorptionline.createXAbsorptionline(px.direction == SwingConstants.LEFT ? px.palce : px.palce + width); + int middle = px.palce + width / 2; + for (Rectangle bounds : cacheRecs) { + if (bounds.x == left || bounds.x + bounds.width == left) { + line.setSecondLine(left); + } + if (bounds.x + bounds.width / 2 == middle) { + line.setMidLine(middle); + } + updateVerticalLine(selfVertical, iterator, line); + if (line.isFull()) { + break; + } + } + } + designer.setXAbsorptionline(line); + } + + private static void createYAbsorptionline(PlacePointing py, RectangleDesigner designer, int height, java.util.List cacheRecs) { + Absorptionline line = null; + RectangleIterator iterator = designer.createRectangleIterator(); + int[] selfHorizontal = designer.getHorizontalLine(); + if (py.direction == SwingConstants.CENTER) { + line = Absorptionline.createYMidAbsorptionline(py.palce + height / 2); + int top = py.palce; + int bottom = py.palce + height; + for (Rectangle bounds : cacheRecs) { + if (bounds.y == top || bounds.y + bounds.height == top) { + line.setFirstLine(top); + } + if (bounds.y == bottom || bounds.y + bounds.height == bottom) { + line.setSecondLine(bottom); + } + updateHorizontalLine(selfHorizontal, iterator, line); + if (line.isFull()) { + break; + } + } + } else if (py.direction == SwingConstants.TOP || py.direction == SwingConstants.BOTTOM) { + int top = py.direction == SwingConstants.TOP ? py.palce + height : py.palce; + line = Absorptionline.createYAbsorptionline(py.direction == SwingConstants.TOP ? py.palce : py.palce + height); + int middle = py.palce + height / 2; + for (Rectangle bounds : cacheRecs) { + if (bounds.y == top || bounds.y + bounds.height == top) { + line.setSecondLine(top); + } + if (bounds.y + bounds.height / 2 == middle) { + line.setMidLine(middle); + } + updateHorizontalLine(selfHorizontal, iterator, line); + if (line.isFull()) { + break; + } + } + } + designer.setYAbsorptionline(line); + } + + private static void createEquidistantLine(PlacePointing px, PlacePointing py, Rectangle operatingRectangle, RectangleDesigner designer){ + processEquidistantLinesList(px, py, operatingRectangle); + Absorptionline line = null; + if(equidistantLines.size() > 0) { + int top = -1; + int left = -1; + int bottom = -1; + int right = -1; + for(int i = 0; i < equidistantLines.size(); i++){ + if (equidistantLines.get(i).getDirection() == SwingConstants.TOP){ + top = equidistantLines.get(i).getReference(); + } + if (equidistantLines.get(i).getDirection() == SwingConstants.LEFT){ + left = equidistantLines.get(i).getReference(); + } + if (equidistantLines.get(i).getDirection() == SwingConstants.BOTTOM){ + bottom = equidistantLines.get(i).getReference(); + } + if (equidistantLines.get(i).getDirection() == SwingConstants.RIGHT){ + right = equidistantLines.get(i).getReference(); + } + } + operatingRectangle.x -= designer.getDesignerScrollHorizontalValue(); + operatingRectangle.y -= designer.getDesignerScrollVerticalValue(); + line = Absorptionline.createEquidistantAbsorptionline(operatingRectangle, + top - designer.getDesignerScrollVerticalValue(), + left - designer.getDesignerScrollHorizontalValue(), + bottom - designer.getDesignerScrollVerticalValue(), + right - designer.getDesignerScrollHorizontalValue()); + } + designer.setEquidistantLine(line); + } + + private static void processEquidistantLinesList(PlacePointing pEquidistantX, PlacePointing pEquidistantY, Rectangle operatingRectangle){ + EquidistantLine[] equidistantLines1 = new EquidistantLine[EQUIDISTANTLINE_UNIT]; + //先按方向处理,只保留四个方向上距离最近 + for(int count = 0; count < equidistantLines.size(); count++){ + 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(equidistantLines1[direction] != null + && equidistantLines1[direction].getDistance() > equidistantLines.get(count).getDistance() + || equidistantLines1[direction] == null) { + equidistantLines1[direction] = equidistantLines.get(count); + } + } + } + } + + equidistantLines.clear(); + //找list中横纵分别等距的组合 + if (equidistantLines1[0] != null && equidistantLines1[2] != null){//top, bottom + int offset = equidistantLines1[0].getDistance() - equidistantLines1[2].getDistance(); + if (Math.abs(offset) <= SORPTION_UNIT * 2){ + pEquidistantY.direction = SwingConstants.TOP; + equidistantLines.add(equidistantLines1[0]); + equidistantLines.add(equidistantLines1[2]); + pEquidistantY.palce = operatingRectangle.y - offset / 2; + operatingRectangle.y = pEquidistantY.palce; + } + } + if (equidistantLines1[1] != null && equidistantLines1[3] != null){//left, right + int offset = equidistantLines1[1].getDistance() - equidistantLines1[3].getDistance(); + if (Math.abs(offset) <= SORPTION_UNIT * 2){ + pEquidistantX.direction = SwingConstants.LEFT; + equidistantLines.add(equidistantLines1[1]); + equidistantLines.add(equidistantLines1[3]); + pEquidistantX.palce = operatingRectangle.x - offset / 2; + operatingRectangle.x = pEquidistantX.palce; + } + } + } + + //更新纵向行列线 + private static void updateVerticalLine(int[] selfVertical, RectangleIterator iterator, Absorptionline line){ + int[] targetArray = iterator.getVerticalLine(); + if (intersectArrays(targetArray, selfVertical)){ + line.setVerticalLines(targetArray); + } + } + + //更新横向行列线 + private static void updateHorizontalLine(int[] selfHorizontal, RectangleIterator iterator, Absorptionline line){ + int[] targetArray = iterator.getHorizontalLine(); + if (intersectArrays(targetArray, selfHorizontal)){ + line.setHorizontalLines(targetArray); + } + } + + //检测两个数组是否有相交的部分 + private static boolean intersectArrays(int[] targetArray, int[] selfArray){ + for (int i : targetArray) { + for (int j : selfArray) { + if(i == j){ + return true; + } + } + } + + return false; + } + + private static class EquidistantLine{ + //与操作rectangle的距离 + private int distance; + //参考rectangle的位置 + private int reference; + //等距线的方向 + private int direction; + + EquidistantLine(int distance, int reference, int direction){ + this.distance = distance; + this.reference = reference; + this.direction = direction; + } + + public void setDistance(int distance){ + this.distance = distance; + } + + public int getDistance(){ + return this.distance; + } + + public void setReference(int reference){ + this.reference = reference; + } + + public int getReference(){ + return this.reference; + } + + public void setDirection(int direction){ + this.direction = direction; + } + + public int getDirection(){ + return this.direction; + } + } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index caa3e9d35..e3ee03999 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -91,7 +91,6 @@ FR-Designer_DS-Dictionary= FR-Designer_Data-confusion= FR-Designer_Data_Type= FR-Designer_Double_Click_Edit_OR_Clear= -FR-Designer_Edit_Button_ToolBar= FR-Designer_Email= FR-Designer_Enabled= FR-Designer_End-Date= @@ -101,6 +100,7 @@ FR-Designer_FS_Close_Other_Templates= FR-Designer_File= FR-Designer_Filter_Conditions= FR-Designer_Finish-Modify-Share= +FR-Designer_Fit= FR-Designer_Fit-App= FR-Designer_Font-Family= FR-Designer_Font-Size= @@ -162,7 +162,6 @@ FR-Designer_Refresh_Parameter_In_SQL= FR-Designer_Reg_Expressions= FR-Designer_Reg_Max_Length= FR-Designer_Reg_Min_Length= -FR-Designer_Remove_Button_ToolBar= FR-Designer_ReportColumns-Columns= FR-Designer_Return-Date= FR-Designer_RichText= @@ -543,14 +542,14 @@ 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_Null=Allow Null +FR-Designer_Allow_Null=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=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_Vertical=Vertical 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_No=No FR-Designer_Pagination=Page Break +FR-Designer-Move_Tab_First=move to first +FR-Designer-Move_Tab_End=move to end +FR-Designer-Move_Tab_Next=move to next +FR-Designer-Move_Tab_Prev=move to previous FR-Designer_DS_TableData=Data Set FR-Designer_Parameter-Formula=Formula FR-Designer_Plugin_Should_Update_Please_Contact_Developer=Plugin version is too low, and is not compatible with current API. Please contact the developer to update. @@ -584,10 +587,4 @@ FR-Designer_Mouse_Click_Tips= 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_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 +FR-Designer-Move_Tab_Prev=move to previous \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index ccf30126a..a86a7fb14 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/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_Type=Data type 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_Enabled=Enabled 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_Max_Length=max 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_Return-Date=Return Date FR-Designer_RichText=Insert Rich Text @@ -544,14 +542,14 @@ 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_Null=Allow Null +FR-Designer_Allow_Null=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_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_Vertical=Vertical 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_No=No FR-Designer_Pagination=Page Break +FR-Designer-Move_Tab_First=move to first +FR-Designer-Move_Tab_End=move to end +FR-Designer-Move_Tab_Next=move to next +FR-Designer-Move_Tab_Prev=move to previous FR-Designer_DS_TableData=Data Set FR-Designer_Parameter-Formula=Formula FR-Designer_Plugin_Should_Update_Please_Contact_Developer=Plugin version is too low, and is not compatible with current API. Please contact the developer to update. @@ -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_End=move to end FR-Designer-Move_Tab_Next=move to next -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! +FR-Designer-Move_Tab_Prev=move to previous \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index 1b1c1a6c0..943cf181d 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/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_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_Edit_Button_ToolBar=\u30DC\u30BF\u30F3\u306B\u3042\u308B\u30C4\u30FC\u30EB\u6B04\u7DE8\u96C6 FR-Designer_Email=\u30E1\u30FC\u30EB FR-Designer_Enabled=\u4F7F\u7528\u53EF\u80FD 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_Max_Length=\u6700\u5927\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_Return-Date=\u65E5\u671F\u306B\u623B\u308B 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_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_Vertical=\u7E26\u65B9\u5411 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_No=\u3044\u3044\u3048 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_Parameter-Formula=\u6570\u5F0F FR-Designer_Background_Null= @@ -552,11 +554,4 @@ FR-Designer_Background_Image_Select= FR-Designer_Initial_Background_Tips= FR-Designer_Mouse_Move_Tips= FR-Designer_Mouse_Click_Tips= -FR-Designer-Move_Tab_First= -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 +FR-Designer_Plugin_Should_Update_Please_Contact_Developer= diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index 9df9125a9..db796ce43 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/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_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_Edit_Button_ToolBar=\uD0A4\uAC00\uC788\uB294\uD234\uBC14\uD3B8\uC9D1 FR-Designer_Email=\uBA54\uC77C FR-Designer_Enabled=\uC0AC\uC6A9\uAC00\uB2A5 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_Max_Length=\uCD5C\uB300\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_Return-Date=\uB0A0\uC9DC\uB3CC\uC544\uAC00\uAE30 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_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_Vertical=\uC138\uB85C 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_No=\uC544\uB2C8\uC624 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_Parameter-Formula=\uC218\uC2DD FR-Designer_Background_Null= @@ -549,11 +551,4 @@ FR-Designer_Background_Image_Select= FR-Designer_Initial_Background_Tips= FR-Designer_Mouse_Move_Tips= FR-Designer_Mouse_Click_Tips= -FR-Designer-Move_Tab_First= -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 +FR-Designer_Plugin_Should_Update_Please_Contact_Developer= \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 060eddbd7..726a6d0f6 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/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_Type=\u6570\u636E\u7C7B\u578B 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_Enabled=\u53EF\u7528 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_Max_Length=\u6700\u5927\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_Return-Date=\u8FD4\u56DE\u65E5\u671F FR-Designer_RichText=\u63D2\u5165\u5BCC\u6587\u672C @@ -555,7 +553,7 @@ 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_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_Vertical=\u7EB5\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_No=\u5426 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_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 +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_Color=\u989C\u8272 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_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-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 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index bb7ab2dc6..f8b28dba3 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/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_Type=\u8CC7\u6599\u985E\u578B 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_Enabled=\u53EF\u7528 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_Max_Length=\u6700\u5927\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_Return-Date=\u8FD4\u56DE\u65E5\u671F FR-Designer_RichText= RTF @@ -543,7 +541,7 @@ 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_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_Vertical=\u7E31\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_No=\u5426 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_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_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 @@ -573,14 +575,4 @@ FR-Designer_Background_Clear= FR-Designer_Background_Image_Select= FR-Designer_Initial_Background_Tips= FR-Designer_Mouse_Move_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 +FR-Designer_Mouse_Click_Tips= \ No newline at end of file diff --git a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java index 0c61e64f3..7fc7d9db3 100644 --- a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java +++ b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java @@ -30,8 +30,7 @@ public class MinMaxValuePane extends JPanel { protected UICheckBox isCustomSecUnitBox; protected UITextField secUnitField; - - public MinMaxValuePane() { + public MinMaxValuePane() { minCheckBox = new UICheckBox(Inter.getLocText(new String[]{"Custom", "Min_Value"})); minValueField = new UITextField(6); maxCheckBox = new UICheckBox(Inter.getLocText(new String[]{"Custom", "Max_Value"})); @@ -40,45 +39,37 @@ public class MinMaxValuePane extends JPanel { mainUnitField = new UITextField(6); isCustomSecUnitBox = new UICheckBox(Inter.getLocText("FR-Chart_SecondGraduationUnit")); secUnitField = new UITextField(6); - - double p = TableLayout.PREFERRED; - double f = TableLayout.FILL; - double[] columnSize = {p, f}; - - Component[][] components = getPanelComponents(); - JPanel panel = TableLayoutHelper.createTableLayoutPane(components, getRowSize(p), columnSize); - this.setLayout(new BorderLayout()); - this.add(panel, BorderLayout.CENTER); - addComponentListener(components); - } - - protected double[] getRowSize(double p) { - return new double[]{p, p, p, p}; - } - - public void addComponentListener(Component[][] components) { - for (int i = 0; i < components.length; i++) { - ((UICheckBox) components[i][0]).addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - checkBoxUse(); - } - }); - ChartSwingUtils.addListener((UICheckBox) components[i][0], (UITextField) components[i][1]); - } - } - - protected Component[][] getPanelComponents() { - return new Component[][]{ + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double[] columnSize = { p, f }; + double[] rowSize = { p, p, p, p}; + + Component[][] components = getPanelComponents(); + JPanel panel = TableLayoutHelper.createTableLayoutPane(components ,rowSize,columnSize); + this.setLayout(new BorderLayout()); + this.add(panel,BorderLayout.CENTER); + + for(int i = 0; i < components.length; i++) { + ((UICheckBox)components[i][0]).addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + checkBoxUse(); + } + }); + ChartSwingUtils.addListener((UICheckBox)components[i][0], (UITextField)components[i][1]); + } + } + protected Component[][] getPanelComponents() { + return new Component[][]{ new Component[]{minCheckBox, minValueField}, new Component[]{maxCheckBox, maxValueField}, new Component[]{isCustomMainUnitBox, mainUnitField}, new Component[]{isCustomSecUnitBox, secUnitField}, - }; - } + }; + } - protected void checkBoxUse() { + private void checkBoxUse() { minValueField.setEnabled(minCheckBox.isSelected()); maxValueField.setEnabled(maxCheckBox.isSelected()); @@ -109,7 +100,7 @@ public class MinMaxValuePane extends JPanel { if(axis.getMinValue() != null) { minValueField.setText(axis.getMinValue().toString()); } - } + } // 最大值 if (axis.isCustomMaxValue()) { @@ -117,7 +108,7 @@ public class MinMaxValuePane extends JPanel { if(axis.getMaxValue() != null) { maxValueField.setText(axis.getMaxValue().toString()); } - } + } // 主次刻度单位 if (axis.isCustomMainUnit()) { @@ -125,7 +116,7 @@ public class MinMaxValuePane extends JPanel { if(axis.getMainUnit() != null) { mainUnitField.setText(axis.getMainUnit().toString()); } - } + } if(axis.isCustomSecUnit()) { isCustomSecUnitBox.setSelected(true); @@ -158,7 +149,7 @@ public class MinMaxValuePane extends JPanel { updateUnit(axis); } - protected void updateUnit(Axis axis) { + private void updateUnit(Axis axis) { // 主要刻度 if (isCustomMainUnitBox.isSelected()){ String increment = mainUnitField.getText(); diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java index 603626e13..7810fc9a6 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java @@ -1,346 +1,354 @@ -package com.fr.design.designer.beans.adapters.layout; - -import com.fr.design.beans.GroupModel; -import com.fr.design.designer.beans.ConstraintsGroupModel; -import com.fr.design.designer.beans.HoverPainter; -import com.fr.design.designer.beans.painters.FRAbsoluteLayoutPainter; -import com.fr.design.designer.creator.*; -import com.fr.design.designer.properties.BoundsGroupModel; -import com.fr.design.designer.properties.FRAbsoluteLayoutPropertiesGroupModel; -import com.fr.design.utils.ComponentUtils; -import com.fr.design.utils.gui.LayoutUtils; -import com.fr.form.ui.container.WAbsoluteLayout; -import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; - -import java.awt.*; - -public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { - //是不是添加到父容器上 - private boolean isAdd2ParentLayout = false; - private HoverPainter painter; - - public FRAbsoluteLayoutAdapter(XLayoutContainer container) { - super(container); - painter = new FRAbsoluteLayoutPainter(container); - initMinSize(); - } - - private void initMinSize() { - XWAbsoluteLayout layout = (XWAbsoluteLayout) container; - minWidth = layout.getActualMinWidth(); - minHeight = layout.getActualMinHeight(); - actualVal = layout.getAcualInterval(); - margin = layout.toData().getMargin(); - } - - @Override - public HoverPainter getPainter() { - return painter; - } - - /** - * 是否能在指定位置添加组件 - * - * @param creator 组件 - * @param x 坐标x - * @param y 坐标y - * @return 能则返回true - */ - //这个地方的逻辑非常复杂, - // 1.当前绝对布局是不可编辑且是最外层,那么其他控件添加在它周围, - // 2.当前绝对布局是不可编辑且不是最外层,那么控件不可添加,(嵌套) - // 3.当前绝对布局可编辑,那么控件添加 - @Override - public boolean accept(XCreator creator, int x, int y) { - Component comp = container.getComponentAt(x, y); - //布局控件要先判断是不是可编辑 - //可以编辑,按原有逻辑判断 - //不可编辑,当成一整个控件处理 - if (comp == null) { - return false; - } - //参数面板内的组件不允许拖往绝对布局中 - if (creator.getParent() != null && ((XCreator) creator.getParent()).acceptType(XWParameterLayout.class)) { - Rectangle rec = creator.getBounds(); - rec.y = creator.getParent().getHeight() - rec.height; - creator.setBounds(rec); - return false; - } - //判断组件能不能拖入绝对布局 - if (!creator.canEnterIntoAbsolutePane()) { - return false; - } - XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer((XCreator) comp).getTopLayout(); - if (topLayout != null) { - if (topLayout.isEditable()) { - return topLayoutAccept(creator, x, y); - } - //绝对布局嵌套,处于内层,不可编辑,不添加,topLayout只能获取到最外层可编辑的布局 - else if (((XLayoutContainer) topLayout.getParent()).acceptType(XWAbsoluteLayout.class)) { - return false; - } else { - return acceptWidget(x, y); - } - } else { - FRLogger.getLogger().error("top layout is null!"); - } - - return false; - } - - //topLayout假如可以编辑的话就往里面添加组件 - private boolean topLayoutAccept(XCreator creator, int x, int y) { - //允许组件重叠,可以不判断有没有和当前控件重叠 - //先计算当前控件的位置 - int creatorX, creatorY; - if (XCreatorUtils.getParentXLayoutContainer(creator) != null) { - Rectangle creatorRectangle = ComponentUtils.getRelativeBounds(creator); - creatorX = creatorRectangle.x; - creatorY = creatorRectangle.y; - } else { - //这边计算得到的组件其实位置是正确的, - //因为传入的x和y已经加上了宽度或者高度的一半,再减去相同的宽度和高度的一半是没区别的, - // 例如高度为21,那么就是+10-10; - // 高度为20,那么就是+10-10; 没区别 - int w = creator.getWidth() / 2; - int h = creator.getHeight() / 2; - creatorX = x - w; - creatorY = y - h; - } - if (creatorX < 0 || creatorX + creator.getWidth() > container.getWidth()) { - return false; - } - if (creatorY < 0 || creatorY + creator.getHeight() > container.getHeight()) { - return false; - } - return x >= 0 && y >= 0 && creator.getHeight() <= container.getHeight() - && creator.getWidth() <= container.getWidth(); - } - - /** - * 判断是否鼠标在组件的三等分区域,如果组件在布局管理器中间,上下左右都可能会三等分 - * - * @param parentComp 鼠标所在区域的组件 - * @param x 坐标x - * @param y 坐标y - * @return 是则返回true - */ - public boolean isTrisectionArea(Component parentComp, int x, int y) { - XCreator creator = (XCreator) parentComp; - trisectAreaDirect = 0; - if (container.getComponentCount() <= 1) { - return false; - } - int maxWidth = parentComp.getWidth(); - int maxHeight = parentComp.getHeight(); - int xL = parentComp.getX(); - int yL = parentComp.getY(); - // 组件宽高的十分之一和默认值取大 - int minRangeWidth = Math.max(maxWidth / BORDER_PROPORTION, DEFAULT_AREA_LENGTH); - int minRangeHeight = Math.max(maxHeight / BORDER_PROPORTION, DEFAULT_AREA_LENGTH); - if (y < yL + minRangeHeight) { - // 在组件上侧三等分 - trisectAreaDirect = COMP_TOP; - } else if (y > yL + maxHeight - minRangeHeight) { - // 在组件下侧三等分 - trisectAreaDirect = COMP_BOTTOM; - } else if (x < xL + minRangeWidth) { - // 在组件左侧三等分 - trisectAreaDirect = COMP_LEFT; - } else if (x > xL + maxWidth - minRangeWidth) { - // 在组件右侧三等分 - trisectAreaDirect = COMP_RIGHT; - } - // tab布局的边界特殊处理,不进行三等分 - if (!creator.getTargetChildrenList().isEmpty()) { - return false; - } - - return !ComparatorUtils.equals(trisectAreaDirect, 0); - } - - //当前绝对布局不可编辑,就当成一个控件,组件添加在周围 - private boolean acceptWidget(int x, int y) { - isFindRelatedComps = false; - //拖入组件判断时,先判断是否为交叉点区域,其次三等分区域,再次平分区域 - Component comp = container.getComponentAt(x, y); - //如果当前处于边缘地带, 那么就把他贴到父容器上 - XLayoutContainer parent = container.findNearestFit(); - container = parent != null ? parent : container; - isAdd2ParentLayout = true; - - int componentHeight = comp.getHeight(); - int componentWidth = comp.getWidth(); - //上半部分高度 - int upHeight = (int) (componentHeight * TOP_HALF) + comp.getY(); - //下半部分高度 - int downHeight = (int) (componentHeight * BOTTOM_HALF) + comp.getY(); - - if (isCrossPointArea(comp, x, y)) { - return canAcceptWhileCrossPoint(comp, x, y); - } - - if (isTrisectionArea(comp, x, y)) { - return canAcceptWhileTrisection(comp, x, y); - } - - boolean horizonValid = componentWidth >= minWidth * 2 + actualVal; - boolean verticalValid = componentHeight >= minHeight * 2 + actualVal; - return y > upHeight && y < downHeight ? horizonValid : verticalValid; - } - - /** - * 组件的ComponentAdapter在添加组件时,如果发现布局管理器不为空,会继而调用该布局管理器的 - * addComp方法来完成组件的具体添加。在该方法内,布局管理器可以提供额外的功能。 - * - * @param creator 被添加的新组件 - * @param x 添加的位置x,该位置是相对于container的 - * @param y 添加的位置y,该位置是相对于container的 - * @return 是否添加成功,成功返回true,否则false - */ - @Override - public boolean addBean(XCreator creator, int x, int y) { - Rectangle rect = ComponentUtils.getRelativeBounds(container); - - int posX = x + rect.x; - int posY = y + rect.y; - if (!accept(creator, x, y)) { - return false; - } - addComp(creator, posX, posY); - ((XWidgetCreator) creator).recalculateChildrenSize(); - return true; - } - - @Override - protected void addComp(XCreator creator, int x, int y) { - if (!isAdd2ParentLayout) { - Rectangle r = ComponentUtils.getRelativeBounds(container); - x = x - r.x; - y = y - r.y; - if (XCreatorUtils.getParentXLayoutContainer(creator) != null) { - - Rectangle creatorRectangle = ComponentUtils.getRelativeBounds(creator); - x = creatorRectangle.x - r.x; - y = creatorRectangle.y - r.y; - } else { - int w = creator.getWidth() / 2; - int h = creator.getHeight() / 2; - x = x - w; - y = y - h; - } - fix(creator, x, y); - - if (creator.hasTitleStyle()) { - addParentCreator(creator); - } else { - container.add(creator, creator.toData().getWidgetName()); - } - XWAbsoluteLayout layout = (XWAbsoluteLayout) container; - layout.updateBoundsWidget(creator); - updateCreatorBackBound(); - LayoutUtils.layoutRootContainer(container); - } else { - fixAbsolute(creator, x, y); - if (creator.shouldScaleCreator() || creator.hasTitleStyle()) { - addParentCreator(creator); - } else { - container.add(creator, creator.toData().getWidgetName()); - } - XWFitLayout layout = (XWFitLayout) container; - // 更新对应的BoundsWidget - layout.updateBoundsWidget(); - updateCreatorBackBound(); - } - } - - private void updateCreatorBackBound() { - for (int i = 0, size = container.getComponentCount(); i < size; i++) { - XCreator creator = (XCreator) container.getComponent(i); - creator.updateChildBound(minHeight); - creator.setBackupBound(creator.getBounds()); - } - } - - private void addParentCreator(XCreator child) { - XLayoutContainer parentPanel = child.initCreatorWrapper(child.getHeight()); - container.add(parentPanel, child.toData().getWidgetName()); - } - - /** - * 新拖入组件时,计算调整其他关联组件位置大小 - * - * @param child 新拖入的组件 - * @param x 鼠标所在x坐标 - * @param y 鼠标所在y坐标 - */ - 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()); - } else if (isCrossPointArea(parentComp, x, y)) { - //交叉区域插入组件时,根据具体位置进行上下或者左右或者相邻三个组件的位置大小插入 - fixCrossPointArea(parentComp, child, x, y); - return; - } else if (isTrisectionArea(parentComp, x, y)) { - // 在边界三等分区域,就不再和组件二等分了 - fixTrisect(parentComp, child, x, y); - return; - } else { - fixHalve(parentComp, child, x, y); - } - } - - /** - * 组件拖拽后调整大小 - * - * @param creator 组件 - */ - @Override - public void fix(XCreator creator) { - WAbsoluteLayout wabs = (WAbsoluteLayout) container.toData(); - fix(creator, creator.getX(), creator.getY()); - wabs.setBounds(creator.toData(), creator.getBounds()); - - XWAbsoluteLayout layout = (XWAbsoluteLayout) container; - layout.updateBoundsWidget(creator); - } - - /** - * 调整组件大小到合适尺寸位置 - * - * @param creator 组件 - * @param x 坐标x - * @param y 坐标y - */ - public void fix(XCreator creator, int x, int y) { - int height = creator.getHeight(); - int width = creator.getWidth(); - if (x < 0) { - x = container.getX(); - } else if (x + creator.getWidth() > container.getWidth()) { - x = container.getWidth() - width; - } - - if (y < 0) { - y = container.getY(); - } else if (y + creator.getHeight() > container.getHeight()) { - y = container.getHeight() - height; - } - - creator.setBounds(x, y, width, height); - } - - @Override - public ConstraintsGroupModel getLayoutConstraints(XCreator creator) { - return new BoundsGroupModel((XWAbsoluteLayout) container, creator); - } - - @Override - public GroupModel getLayoutProperties() { - XWAbsoluteLayout xwAbsoluteLayout = (XWAbsoluteLayout) container; - return new FRAbsoluteLayoutPropertiesGroupModel(xwAbsoluteLayout); - } +package com.fr.design.designer.beans.adapters.layout; + +import java.awt.*; + +import com.fr.design.beans.GroupModel; +import com.fr.design.designer.beans.ConstraintsGroupModel; +import com.fr.design.designer.beans.HoverPainter; +import com.fr.design.designer.beans.painters.FRAbsoluteLayoutPainter; +import com.fr.design.designer.creator.*; +import com.fr.design.designer.properties.BoundsGroupModel; +import com.fr.design.designer.properties.FRAbsoluteLayoutPropertiesGroupModel; +import com.fr.form.ui.container.WAbsoluteLayout; +import com.fr.design.utils.ComponentUtils; +import com.fr.design.utils.gui.LayoutUtils; +import com.fr.general.ComparatorUtils; +import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; +import com.fr.general.FRLogger; + +public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { + //是不是添加到父容器上 + private boolean isAdd2ParentLayout = false; + private HoverPainter painter; + + public FRAbsoluteLayoutAdapter(XLayoutContainer container) { + super(container); + painter = new FRAbsoluteLayoutPainter(container); + initMinSize(); + } + + private void initMinSize() { + XWAbsoluteLayout layout = (XWAbsoluteLayout) container; + minWidth = layout.getActualMinWidth(); + minHeight = layout.getActualMinHeight(); + actualVal = layout.getAcualInterval(); + margin = layout.toData().getMargin(); + } + + @Override + public HoverPainter getPainter() { + return painter; + } + + /** + * 是否能在指定位置添加组件 + * @param creator 组件 + * @param x 坐标x + * @param y 坐标y + * @return 能则返回true + */ + //这个地方的逻辑非常复杂, + // 1.当前绝对布局是不可编辑且是最外层,那么其他控件添加在它周围, + // 2.当前绝对布局是不可编辑且不是最外层,那么控件不可添加,(嵌套) + // 3.当前绝对布局可编辑,那么控件添加 + @Override + public boolean accept(XCreator creator, int x, int y) { + Component comp = container.getComponentAt(x, y); + //布局控件要先判断是不是可编辑 + //可以编辑,按原有逻辑判断 + //不可编辑,当成一整个控件处理 + if (comp == null){ + return false; + } + //参数面板内的组件不允许拖往绝对布局中 + if (creator.getParent() != null && ((XCreator)creator.getParent()).acceptType(XWParameterLayout.class)){ + Rectangle rec = creator.getBounds(); + rec.y = creator.getParent().getHeight() - rec.height; + creator.setBounds(rec); + return false; + } + //判断下组件能不能拖入绝对布局 + if (!creator.canEnterIntoAbsolutePane()){ + return false; + } + XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer((XCreator)comp).getTopLayout(); + if(topLayout != null){ + if (topLayout.isEditable()){ + return topLayoutAccept(creator, x, y, topLayout); + } + //绝对布局嵌套,处于内层,不可编辑,不添加,topLayout只能获取到最外层可编辑的布局 + else if (((XLayoutContainer)topLayout.getParent()).acceptType(XWAbsoluteLayout.class)) { + return false; + } + else { + return acceptWidget(creator, x, y); + } + } + else{ + FRLogger.getLogger().error("top layout is null!"); + } + + return false; + } + + //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); + creatorX = creatorRectangle.x; + creatorY = creatorRectangle.y; + } else { + int w = creator.getWidth() / 2; + int h = creator.getHeight() / 2; + creatorX = x - w; + creatorY = y - h; + } + //再判断和布局中其他控件重叠 + Rectangle curRec = new Rectangle(creatorX, creatorY, creator.getWidth(), creator.getHeight()); + WAbsoluteLayout wAbsoluteLayout = (WAbsoluteLayout)topLayout.toData(); + for (int i = 0, count = wAbsoluteLayout.getWidgetCount(); i < count; i++) { + BoundsWidget temp = (BoundsWidget) wAbsoluteLayout.getWidget(i); + Rectangle rectangle = temp.getBounds(); + if (curRec.intersects(rectangle)){ + return false; + } + } + if (creatorX < 0 || creatorX + creator.getWidth() > container.getWidth()) { + return false; + } + if (creatorY < 0 || creatorY + creator.getHeight() > container.getHeight()){ + return false; + } + return x >= 0 && y >= 0 && creator.getHeight() <= container.getHeight() + && creator.getWidth() <= container.getWidth(); + } + + /** + * 判断是否鼠标在组件的三等分区域,如果组件在布局管理器中间,上下左右都可能会三等分 + * @param parentComp 鼠标所在区域的组件 + * @param x 坐标x + * @param y 坐标y + * @return 是则返回true + */ + public boolean isTrisectionArea(Component parentComp, int x, int y) { + XCreator creator = (XCreator)parentComp; + trisectAreaDirect = 0; + if (container.getComponentCount()<=1) { + return false; + } + int maxWidth = parentComp.getWidth(); + int maxHeight = parentComp.getHeight(); + int xL = parentComp.getX(); + int yL = parentComp.getY(); + // 组件宽高的十分之一和默认值取大 + int minRangeWidth = Math.max(maxWidth/BORDER_PROPORTION, DEFAULT_AREA_LENGTH); + int minRangeHeight = Math.max(maxHeight/BORDER_PROPORTION, DEFAULT_AREA_LENGTH); + if(yyL+maxHeight-minRangeHeight) { + // 在组件下侧三等分 + trisectAreaDirect = COMP_BOTTOM; + } else if (xxL+maxWidth-minRangeWidth) { + // 在组件右侧三等分 + trisectAreaDirect = COMP_RIGHT; + } + // tab布局的边界特殊处理,不进行三等分 + if(!creator.getTargetChildrenList().isEmpty()){ + return false; + } + + return !ComparatorUtils.equals(trisectAreaDirect, 0); + } + + //当前绝对布局不可编辑,就当成一个控件,组件添加在周围 + private boolean acceptWidget(XCreator creator, int x, int y){ + isFindRelatedComps = false; + //拖入组件判断时,先判断是否为交叉点区域,其次三等分区域,再次平分区域 + Component comp = container.getComponentAt(x, y); + boolean isMatchEdge = false; + //如果当前处于边缘地带, 那么就把他贴到父容器上 + XLayoutContainer parent = container.findNearestFit(); + container = parent != null ? parent : container; + isAdd2ParentLayout = true; + + int componentHeight = comp.getHeight(); + int componentWidth = comp.getWidth(); + //上半部分高度 + int upHeight = (int) (componentHeight * TOP_HALF) + comp.getY(); + //下半部分高度 + int downHeight = (int) (componentHeight * BOTTOM_HALF) + comp.getY(); + + if (isCrossPointArea(comp, x, y)) { + return canAcceptWhileCrossPoint(comp, x, y); + } + + if (isTrisectionArea(comp, x, y)) { + return canAcceptWhileTrisection(comp, x, y); + } + + boolean horizonValid = componentWidth >= minWidth * 2 + actualVal; + boolean verticalValid = componentHeight >= minHeight * 2 + actualVal; + return y > upHeight && y < downHeight ? horizonValid : verticalValid; + } + + /** + * 组件的ComponentAdapter在添加组件时,如果发现布局管理器不为空,会继而调用该布局管理器的 + * addComp方法来完成组件的具体添加。在该方法内,布局管理器可以提供额外的功能。 + * + * @param creator 被添加的新组件 + * @param x 添加的位置x,该位置是相对于container的 + * @param y 添加的位置y,该位置是相对于container的 + * @return 是否添加成功,成功返回true,否则false + */ + @Override + public boolean addBean(XCreator creator, int x, int y) { + Rectangle rect = ComponentUtils.getRelativeBounds(container); + + int posX = x + rect.x; + int posY = y + rect.y; + if (!accept(creator, x, y)) { + return false; + } + addComp(creator, posX, posY); + ((XWidgetCreator) creator).recalculateChildrenSize(); + return true; + } + + @Override + protected void addComp(XCreator creator, int x, int y) { + if(!isAdd2ParentLayout) { + Rectangle r = ComponentUtils.getRelativeBounds(container); + x = x - r.x; + y = y - r.y; + if (XCreatorUtils.getParentXLayoutContainer(creator) != null) { + + Rectangle creatorRectangle = ComponentUtils.getRelativeBounds(creator); + x = creatorRectangle.x - r.x; + y = creatorRectangle.y - r.y; + } else { + int w = creator.getWidth() / 2; + int h = creator.getHeight() / 2; + x = x - w; + y = y - h; + } + fix(creator, x, y); + + if (creator.hasTitleStyle()) { + addParentCreator(creator); + } else { + container.add(creator, creator.toData().getWidgetName()); + } + XWAbsoluteLayout layout = (XWAbsoluteLayout) container; + layout.updateBoundsWidget(creator); + updateCreatorBackBound(); + LayoutUtils.layoutRootContainer(container); + }else{ + fixAbsolute(creator, x, y); + if (creator.shouldScaleCreator() || creator.hasTitleStyle()) { + addParentCreator(creator); + } else { + container.add(creator, creator.toData().getWidgetName()); + } + XWFitLayout layout = (XWFitLayout) container; + // 更新对应的BoundsWidget + layout.updateBoundsWidget(); + updateCreatorBackBound(); + } + } + + private void updateCreatorBackBound() { + for (int i=0,size=container.getComponentCount(); i container.getWidth()) { + width = container.getWidth() - x; + } + + if (y < 0) { + height += y; + y = 0; + } else if (y + creator.getHeight() > container.getHeight()) { + height = container.getHeight() - y; + } + + creator.setBounds(x, y, width, height); + } + + @Override + public ConstraintsGroupModel getLayoutConstraints(XCreator creator) { + return new BoundsGroupModel((XWAbsoluteLayout)container, creator); + } + + @Override + public GroupModel getLayoutProperties() { + XWAbsoluteLayout xwAbsoluteLayout = (XWAbsoluteLayout) container; + return new FRAbsoluteLayoutPropertiesGroupModel(xwAbsoluteLayout); + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java index eca82e502..7401b8d07 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java @@ -1,1189 +1,1198 @@ -/** - * - */ -package com.fr.design.designer.beans.adapters.layout; - -import com.fr.design.beans.GroupModel; -import com.fr.design.designer.beans.ConstraintsGroupModel; -import com.fr.design.designer.beans.HoverPainter; -import com.fr.design.designer.beans.painters.FRFitLayoutPainter; -import com.fr.design.designer.creator.XCreator; -import com.fr.design.designer.creator.XCreatorUtils; -import com.fr.design.designer.creator.XLayoutContainer; -import com.fr.design.designer.creator.XWFitLayout; -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.properties.FRFitLayoutConstraints; -import com.fr.design.designer.properties.FRFitLayoutPropertiesGroupModel; -import com.fr.design.file.HistoryTemplateListPane; -import com.fr.design.mainframe.JForm; -import com.fr.design.utils.ComponentUtils; -import com.fr.form.ui.LayoutBorderStyle; -import com.fr.form.ui.container.WLayout; -import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; -import com.fr.form.ui.widget.BoundsWidget; -import com.fr.general.ComparatorUtils; - -import java.awt.*; -import java.util.ArrayList; -import java.util.List; - -/** - * 自适应布局的容器适配器 - * - * @author jim - * @date 2014-6-24 - */ -public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { - - public static final String WIDGETPANEICONPATH = "/com/fr/web/images/form/resources/layout_absolute.png"; - private static final int DEPENDING_SCOPE = 3; - private HoverPainter painter; - //区分拖拽和编辑宽高 - private boolean isEdit; - - public boolean isEdit() { - return isEdit; - } - - public void setEdit(boolean edit) { - isEdit = edit; - } - - /** - * 构造函数 - * - * @param container XWFitLayout容器 - */ - public FRFitLayoutAdapter(XLayoutContainer container) { - super(container); - painter = new FRFitLayoutPainter(container); - initMinSize(); - } - - private void initMinSize() { - XWFitLayout layout = (XWFitLayout) container; - minWidth = layout.getActualMinWidth(); - minHeight = layout.getActualMinHeight(); - actualVal = layout.getAcualInterval(); - margin = layout.toData().getMargin(); - } - - @Override - public HoverPainter getPainter() { - return painter; - } - - /** - * 返回布局自身属性,方便一些特有设置在layout刷新时处理 - */ - @Override - public GroupModel getLayoutProperties() { - XWFitLayout xfl = (XWFitLayout) container; - return new FRFitLayoutPropertiesGroupModel(xfl); - } - - /** - * 添加组件 - * - * @param child 待添加的组件 - * @param x 坐标x - * @param y 坐标y - */ - @Override - public void addComp(XCreator child, int x, int y) { - fix(child, x, y); - if (child.shouldScaleCreator() || child.hasTitleStyle()) { - addParentCreator(child); - } else { - container.add(child, child.toData().getWidgetName()); - } - XWFitLayout layout = (XWFitLayout) container; - // 更新对应的BoundsWidget - layout.updateBoundsWidget(); - updateCreatorBackBound(); - } - - public void updateCreatorBackBound() { - for (int i = 0, size = container.getComponentCount(); i < size; i++) { - XCreator creator = (XCreator) container.getComponent(i); - creator.updateChildBound(minHeight); - creator.setBackupBound(creator.getBounds()); - } - } - - - private void addParentCreator(XCreator child) { - XLayoutContainer parentPanel = child.initCreatorWrapper(minHeight); - container.add(parentPanel, child.toData().getWidgetName()); - } - - /** - * 能否对应位置放置当前组件 - * - * @param creator 组件 - * @param x 添加的位置x,该位置是相对于container的 - * @param y 添加的位置y,该位置是相对于container的 - * @return 是否可以放置 - */ - @Override - public boolean accept(XCreator creator, int x, int y) { - // 计算是否能拖入鼠标区域时,会用到fix 的方法 - isFindRelatedComps = false; - //拖入组件判断时,先判断是否为交叉点区域,其次三等分区域,再次平分区域 - Component comp = container.getComponentAt(x, y); - if (comp == null || checkInterval(comp)) { - return false; - } - //如果当前处于边缘地带, 那么就把他贴到父容器上 - boolean isMatchEdge = matchEdge(x, y); - - int componentHeight = comp.getHeight(); - int componentWidth = comp.getWidth(); - //上半部分高度 - int upHeight = (int) (componentHeight * TOP_HALF) + comp.getY(); - //下半部分高度 - int downHeight = (int) (componentHeight * BOTTOM_HALF) + comp.getY(); - - //布局控件要先判断是不是可编辑 - XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer((XCreator) comp).getTopLayout(); - if (topLayout != null && !isMatchEdge && !topLayout.isEditable()) { - return false; - } - - if (isCrossPointArea(comp, x, y)) { - return canAcceptWhileCrossPoint(comp, x, y); - } - - if (isTrisectionArea(comp, x, y)) { - return canAcceptWhileTrisection(comp, x, y); - } - - boolean horizonValid = componentWidth >= minWidth * 2 + actualVal; - boolean verticalValid = componentHeight >= minHeight * 2 + actualVal; - return y > upHeight && y < downHeight ? horizonValid : verticalValid; - } - - // 间隔区域 - private boolean checkInterval(Component comp) { - return container.getComponentCount() > 0 && comp == container; - } - - /** - * 是否在组件边缘 - * - * @param x 横坐标 - * @param y 纵坐标 - * @return 是否在组件边缘 - */ - public boolean matchEdge(int x, int y) { - if (intersectsEdge(x, y, container)) { - //寻找最近的fit, 在边缘地段添加的控件, 将其送给该fit - XLayoutContainer parent = container.findNearestFit(); - container = parent != null ? parent : container; - return true; - } - return false; - } - - /** - * 是否在组件边缘 - * - * @param x 横坐标 - * @param y 纵坐标 - * @param container 参照组件 - * @return 是否在组件边缘 - */ - //是否包含于边缘地段, 按顺序上, 下, 左, 右检测 - public boolean intersectsEdge(int x, int y, XLayoutContainer container) { - int containerX = container.getX(); - int containerY = container.getY(); - int containerWidth = container.getWidth(); - int containerHeight = container.getHeight(); - - // 当前坐标点 - Rectangle currentXY = new Rectangle(x, y, 1, 1); - // 上边缘 - Rectangle upEdge = new Rectangle(containerX, containerY, containerWidth, BORDER_PROPORTION); - if (upEdge.intersects(currentXY)) { - return true; - } - - int bottomY = containerY + containerHeight - BORDER_PROPORTION; - // 下边缘 - Rectangle bottomEdge = new Rectangle(containerX, bottomY, containerWidth, BORDER_PROPORTION); - if (bottomEdge.intersects(currentXY)) { - return true; - } - - //左右边缘的高度 -10*2 是为了不和上下边缘重合 - int verticalHeight = containerHeight - BORDER_PROPORTION * 2; - int leftY = containerY + BORDER_PROPORTION; - // 左边缘 - Rectangle leftEdge = new Rectangle(containerX, leftY, BORDER_PROPORTION, verticalHeight); - if (leftEdge.intersects(currentXY)) { - return true; - } - - int rightY = containerY + BORDER_PROPORTION; - int rightX = containerX + containerWidth - BORDER_PROPORTION; - // 右边缘 - Rectangle rightEdge = new Rectangle(rightX, rightY, BORDER_PROPORTION, verticalHeight); - return rightEdge.intersects(currentXY); - } - - /** - * 交叉点区域时,能否对应位置放入组件 - */ - protected boolean canAcceptWhileCrossPoint(Component comp, int x, int y) { - return super.canAcceptWhileCrossPoint(comp, x, y); - } - - protected boolean canAcceptWhileTrisection(Component comp, int x, int y) { - return super.canAcceptWhileTrisection(comp, x, y); - } - - /** - * 判断是否鼠标在组件的三等分区域,如果组件在布局管理器中间,上下左右都可能会三等分 - * - * @param parentComp 鼠标所在区域的组件 - * @param x 坐标x - * @param y 坐标y - * @return 是则返回true - */ - public boolean isTrisectionArea(Component parentComp, int x, int y) { - return super.isTrisectionArea(parentComp, x, y); - } - - /** - * 是否为组件交叉点区域 或者是相邻三组建中间点 - * - * @param currentComp 当前组件 - * @param x 坐标x - * @param y 坐标y - * @return 是则返回true - */ - public boolean isCrossPointArea(Component currentComp, int x, int y) { - return super.isCrossPointArea(currentComp, x, y); - } - - - protected Rectangle getLayoutBound(XWCardMainBorderLayout mainLayout) { - return mainLayout.getBounds(); - } - - private Rectangle adjustBackupBound(Rectangle backupBound, XWCardMainBorderLayout mainLayout) { - // 参数界面高度对纵坐标产生的影响 - JForm jform = (JForm) (HistoryTemplateListPane.getInstance().getCurrentEditingTemplate()); - if (jform.getFormDesign().getParaComponent() != null) { - backupBound.y -= jform.getFormDesign().getParaHeight(); - } - - Rectangle rec = getLayoutBound(mainLayout); - // XWTabLayout里面的横纵坐标收到外层XWCardMainBorderLayout的横纵坐标影响 - // 减掉之后可以按照它原来的逻辑执行 - backupBound.x -= rec.x; - backupBound.y -= rec.y; - XWCardLayout cardLayout = mainLayout.getCardPart(); - LayoutBorderStyle style = cardLayout.toData().getBorderStyle(); - // 当tab布局为标题样式时,才需要处理标题栏高度产生的影响 - if (ComparatorUtils.equals(style.getType(), LayoutBorderStyle.TITLE)) { - backupBound.y -= WCardMainBorderLayout.TAB_HEIGHT; - } - return backupBound; - } - - /** - * 拖拽控件边框后,根据控件的大小尺寸,进行相关组件的调整 - * - * @param creator 组件 - */ - @Override - public void fix(XCreator creator) { - //拖拽组件原大小、位置 - Rectangle backupBound = creator.getBackupBound(); - backupBound.x -= container.getX(); - backupBound.y -= container.getY(); - //当前拖拽组件的位置 - int x = creator.getX(); - int y = creator.getY(); - - // 获取容器所有内部组件横坐标 - int[] posXs = container.getHors(); - // 获取容器所有内部组件纵坐标 - int[] posYs = container.getVeris(); - - XLayoutContainer outerLayout = container.getOuterLayout(); - if (!ComparatorUtils.equals(outerLayout, container.getBackupParent())) { - XWCardMainBorderLayout mainLayout = (XWCardMainBorderLayout) outerLayout; - backupBound = adjustBackupBound(backupBound, mainLayout); - } - - //拖拽组件拖拽以后的大小 - int w = creator.getWidth(); - int h = creator.getHeight(); - initCompsList(); - creator.setBounds(backupBound); - int difference = 0; - if (x != backupBound.x) { - dealLeft(backupBound, x, posXs, difference, creator); - } else if (w != backupBound.width) { - dealRight(backupBound, x, w, posXs, difference, creator); - } else if (y != backupBound.y) { - dealTop(backupBound, y, posYs, difference, creator); - } else if (h != backupBound.height) { - dealButtom(backupBound, y, h, posYs, difference, creator); - } - clearCompsList(); - XWFitLayout layout = (XWFitLayout) container; - layout.updateBoundsWidget(); // 更新对应的BoundsWidget - updateCreatorBackBound(); - } - - /** - * 拖拽控件边框后,根据控件的大小尺寸,进行相关组件的调整 - * - * @param backupBound 边界备份 - * @param bounds 组件边界 - * @param xCreator 组件 - * @param row 选中的行 - * @param difference 偏移量 - */ - public void calculateBounds(Rectangle backupBound, Rectangle bounds, XCreator xCreator, int row, int difference) { - Rectangle rc = new Rectangle(0, 0, 0, 0); - XLayoutContainer parent = XCreatorUtils.getParentXLayoutContainer(xCreator); - if (parent != null) { - Rectangle rec = ComponentUtils.getRelativeBounds(parent); - rc.x = rec.x; - rc.y = rec.y; - } - int x = backupBound.x - rc.x, y = backupBound.y - rc.y; - //处理左右延伸 - switch (row) { - case 0: - if (backupBound.width + backupBound.x == container.getWidth() - margin.getRight() + rc.x) { - x += difference; - } - break; - case 1: - if (backupBound.y + backupBound.height == container.getHeight() - margin.getBottom() + rc.y) { - y += difference; - } - break; - } - bounds.setLocation(x, y); - xCreator.setBackupBound(backupBound); - xCreator.setBounds(bounds); - this.fix(xCreator); - } - - private void dealLeft(Rectangle backupBound, int x, int[] posXs, int difference, XCreator creator) { - if (backupBound.x == margin.getLeft()) { - return; - } - x = adjustCoordinateByDependingLine(x, posXs); - difference = x - backupBound.x; - dealDirectionAtLeft(backupBound, difference, creator); - } - - private void dealRight(Rectangle backupBound, int x, int w, int[] posXs, int difference, XCreator creator) { - if (backupBound.width + backupBound.x == container.getWidth() - margin.getRight()) { - return; - } - w = adjustDiffByDependingLine(x, posXs, w); - difference = w - backupBound.width; //拖拽长度 - dealDirectionAtRight(backupBound, difference, creator); - } - - private void dealTop(Rectangle backupBound, int y, int[] posYs, int difference, XCreator creator) { - if (backupBound.y == margin.getTop()) { - return; - } - y = adjustCoordinateByDependingLine(y, posYs); - difference = y - backupBound.y; - dealDirectionAtTop(backupBound, difference, creator); - } - - private void dealButtom(Rectangle backupBound, int y, int h, int[] posYs, int difference, XCreator creator) { - if (backupBound.y + backupBound.height == container.getHeight() - margin.getBottom()) { - return; - } - h = adjustDiffByDependingLine(y, posYs, h); - difference = h - backupBound.height; - dealDirectionABottom(backupBound, difference, creator); - } - - // 根据需要依附的位置调整拖拽的坐标值 - private int adjustCoordinateByDependingLine(int coordinate, int[] coordinates) { - if (!isEdit) { - for (int i = 0; i < coordinates.length; i++) { - if (coordinate == coordinates[i]) { - continue; - } - if (coordinate > coordinates[i] - DEPENDING_SCOPE && coordinate < coordinates[i] + DEPENDING_SCOPE) { - coordinate = coordinates[i]; - break; - } - } - } - return coordinate; - } - - // 根据需要依附的位置调整拖拽的距离 - private int adjustDiffByDependingLine(int coordinate, int[] coordinates, int diff) { - if (!isEdit) { - for (int i = 0; i < coordinates.length; i++) { - if (coordinate + diff > coordinates[i] - DEPENDING_SCOPE && coordinate + diff < coordinates[i] + DEPENDING_SCOPE) { - diff = coordinates[i] - coordinate; - break; - } - } - } - return diff; - } - - // 左侧边框拉伸,循环找出对齐的两侧控件 - private void dealDirectionAtLeft(Rectangle backupBound, int difference, Component creator) { - rightComps.add(creator); - Component rightComp = null; - int leftx = backupBound.x - DEFAULT_AREA_LENGTH - actualVal; - // 取左侧边框右面的组件x值 - int rightx = backupBound.x + DEFAULT_AREA_LENGTH; - Component leftComp = container.getLeftComp(backupBound.x, backupBound.y); - leftComps.add(leftComp); - //先找上侧对齐时(y相等)的左右两边组件 - int ry = backupBound.y; - int ly = leftComp.getY(); - int min = margin.getTop(); - int max = container.getHeight() - margin.getBottom(); - while (ry >= min && ly >= min) { - if (ry == ly) { - break; - } else { - if (ry > ly) { - rightComp = container.getTopComp(rightx, ry); - ry = rightComp.getY(); - rightComps.add(rightComp); - } else { - leftComp = container.getTopComp(leftx, ly); - ly = leftComp.getY(); - leftComps.add(leftComp); - } - } - } - // 下侧对齐时(y+h相等)两边组件 - ry = backupBound.y + backupBound.height; - ly = leftComps.get(0).getY() + leftComps.get(0).getHeight(); - while (ry <= max && ly <= max) { - if (ry == ly) { - break; - } else { - if (ry > ly) { - leftComp = container.getComponentAt(leftx, ly + DEFAULT_AREA_LENGTH + actualVal); - ly = leftComp.getY() + leftComp.getHeight(); - leftComps.add(leftComp); - } else { - rightComp = container.getComponentAt(rightx, ry + DEFAULT_AREA_LENGTH + actualVal); - ry = rightComp.getY() + rightComp.getHeight(); - rightComps.add(rightComp); - } - } - } - dealHorDirection(backupBound.x, difference); - } - - // 右侧边框拉伸,循环找出对齐的两侧控件 - private void dealDirectionAtRight(Rectangle backupBound, int difference, Component creator) { - leftComps.add(creator); - Component leftComp = null; - int leftx = backupBound.x + backupBound.width - DEFAULT_AREA_LENGTH; - // 取右侧边框右面的组件x值 - int rightx = backupBound.x + backupBound.width + DEFAULT_AREA_LENGTH + actualVal; - Component rightComp = container.getRightComp(backupBound.x, backupBound.y, backupBound.width); - rightComps.add(rightComp); - int ly = backupBound.y, ry = rightComp.getY(); - int min = margin.getTop(); - int max = container.getHeight() - margin.getBottom(); - while (ry >= min && ly >= min) { - if (ry == ly) { - break; - } else { - if (ry > ly) { - rightComp = container.getTopComp(rightx, ry); - ry = rightComp.getY(); - rightComps.add(rightComp); - } else { - leftComp = container.getTopComp(leftx, ly); - ly = leftComp.getY(); - leftComps.add(leftComp); - } - } - } - ly = backupBound.y + backupBound.height; - ry = rightComps.get(0).getY() + rightComps.get(0).getHeight(); - while (ry <= max && ly <= max) { - if (ry == ly) { - break; - } else { - if (ry > ly) { - leftComp = container.getComponentAt(leftx, ly + DEFAULT_AREA_LENGTH + actualVal); - ly = leftComp.getY() + leftComp.getHeight(); - leftComps.add(leftComp); - } else { - rightComp = container.getComponentAt(rightx, ry + DEFAULT_AREA_LENGTH + actualVal); - ry = rightComp.getY() + rightComp.getHeight(); - rightComps.add(rightComp); - } - } - } - dealHorDirection(backupBound.x + backupBound.width + actualVal, difference); - } - - /** - * 水平方向上拉伸边框的处理 - */ - private void dealHorDirection(int objx, int difference) { - if (difference > 0) { - difference = Math.min(getMinWidth(rightComps) - minWidth, difference); - } else { - difference = Math.max(difference, minWidth - getMinWidth(leftComps)); - } - //重新计算左右两侧组件size、point - if (calculateLefttRelatComponent(difference)) { - calculateRightRelatComponent(objx + difference, -difference); - } - } - - // 上侧边框拉伸,循环找出对齐的两侧控件 - private void dealDirectionAtTop(Rectangle backupBound, int difference, Component creator) { - downComps.add(creator); - // 取上侧边框上面的组件用的y值 - int topy = backupBound.y - DEFAULT_AREA_LENGTH - actualVal; - // 上侧边框下面的组件y值 - int bottomy = backupBound.y + DEFAULT_AREA_LENGTH; - Component topComp = container.getTopComp(backupBound.x, backupBound.y); - upComps.add(topComp); - Component bottomComp = null; - int min = margin.getLeft(); - int max = container.getWidth() - margin.getRight(); - //先找左侧侧对齐时(x相等)的上下两边组件 - int ux = topComp.getX(); - int dx = backupBound.x; - while (ux >= min && dx >= min) { - if (ux == dx) { - break; - } else { - if (ux < dx) { - bottomComp = container.getLeftComp(dx, bottomy); - dx = bottomComp.getX(); - downComps.add(bottomComp); - } else { - topComp = container.getLeftComp(ux, topy); - ux = topComp.getX(); - upComps.add(topComp); - } - } - } - // 右侧对齐时(x+w相等)两边组件 - ux = upComps.get(0).getX() + upComps.get(0).getWidth(); - dx = backupBound.x + backupBound.width; - while (ux <= max && dx <= max) { - if (ux == dx) { - break; - } else { - if (ux < dx) { - topComp = container.getComponentAt(ux + DEFAULT_AREA_LENGTH + actualVal, topy); - ux = topComp.getX() + topComp.getWidth(); - upComps.add(topComp); - } else { - bottomComp = container.getComponentAt(dx + DEFAULT_AREA_LENGTH + actualVal, bottomy); - dx = bottomComp.getX() + bottomComp.getWidth(); - downComps.add(bottomComp); - } - } - } - - dealVertiDirection(backupBound.y, difference); - } - - // 下侧边框拉伸,循环找出对齐的两侧控件 - private void dealDirectionABottom(Rectangle backupBound, int difference, Component creator) { - upComps.add(creator); - Component topComp = null; - Component bottomComp = container.getBottomComp(backupBound.x, backupBound.y, backupBound.height); - // 下侧边框下面的组件y坐标 - int bottomy = backupBound.y + backupBound.height + DEFAULT_AREA_LENGTH + actualVal; - // 取下侧边框上面的组件用的y值 - int topy = backupBound.y + backupBound.height - DEFAULT_AREA_LENGTH; - downComps.add(bottomComp); - int dx = bottomComp.getX(); - int ux = backupBound.x; - int min = margin.getLeft(); - int max = container.getWidth() - margin.getRight(); - while (ux >= min && dx >= min) { - if (ux == dx) { - break; - } else { - if (ux < dx) { - bottomComp = container.getLeftComp(dx, bottomy); - dx = bottomComp.getX(); - downComps.add(bottomComp); - } else { - topComp = container.getLeftComp(ux, topy); - ux = topComp.getX(); - upComps.add(topComp); - } - } - } - dx = downComps.get(0).getX() + downComps.get(0).getWidth(); - ux = backupBound.x + backupBound.width; - while (ux <= max && dx <= max) { - if (ux == dx) { - break; - } else { - if (ux < dx) { - topComp = container.getComponentAt(ux + DEFAULT_AREA_LENGTH + actualVal, topy); - ux = topComp.getX() + topComp.getWidth(); - upComps.add(topComp); - } else { - bottomComp = container.getComponentAt(dx + DEFAULT_AREA_LENGTH + actualVal, bottomy); - dx = bottomComp.getX() + bottomComp.getWidth(); - downComps.add(bottomComp); - } - } - } - dealVertiDirection(backupBound.y + backupBound.height + actualVal, difference); - } - - /** - * 垂直方向上拉伸边框的处理 - */ - private void dealVertiDirection(int objY, int difference) { - if (difference > 0) { - difference = Math.min(getMinHeight(downComps) - minHeight, difference); - } else { - difference = Math.max(difference, minHeight - getMinHeight(upComps)); - } - //重新计算上下两侧组件size、point - if (calculateUpRelatComponent(difference)) { - calculateDownRelatComponent(objY + difference, -difference); - } - } - - /** - * 新拖入组件时,计算调整其他关联组件位置大小 - * - * @param child 新拖入的组件 - * @param x 鼠标所在x坐标 - * @param y 鼠标所在y坐标 - */ - public void fix(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()); - } else if (isCrossPointArea(parentComp, x, y)) { - //交叉区域插入组件时,根据具体位置进行上下或者左右或者相邻三个组件的位置大小插入 - fixCrossPointArea(parentComp, child, x, y); - return; - } else if (isTrisectionArea(parentComp, x, y)) { - // 在边界三等分区域,就不再和组件二等分了 - fixTrisect(parentComp, child, x, y); - return; - } else { - fixHalve(parentComp, child, x, y); - } - } - - /** - * 平分,正常情况拖入组件时,按照上1/4区域、下1/4区域为上下平分,中左侧1/2区域、中右侧1/2区域为左右平分 - */ - protected void fixHalve(Component currentComp, XCreator child, int x, int y) { - super.fixHalve(currentComp, child, x, y); - } - - /** - * 组件交叉区域进行插入时,调整受到变动的其他组件,之前是交叉区域插入也按照三等分逻辑,后面测试中发现有bug,改为和bi一样的鼠标所在侧平分 - * 默认左上角、右下角区域是垂直方向插入组件 - * 右上角和左下角是水平方向插入组件,这样避免田字块时重复 - */ - protected void fixCrossPointArea(Component currentComp, XCreator child, int x, int y) { - super.fixCrossPointArea(currentComp, child, x, y); - } - - /** - * 三等分区域时,调整相关联的组件 - * - * @param currentComp 鼠标所在组件 - * @param child 待插入组件 - */ - protected void fixTrisect(Component currentComp, XCreator child, int x, int y) { - super.fixTrisect(currentComp, child, x, y); - } - - /** - * 删除组件或者重新拖动时,其它组件重新计算位置大小 - */ - protected void delete(XCreator creator, int creatorWidth, int creatorHeight) { - int x = creator.getX(); - int y = creator.getY(); - recalculateChildrenSize(x, y, creatorWidth, creatorHeight); - } - - /** - * 重新计算内部组件大小 - * - * @param x 坐标x - * @param y 坐标y - * @param creatorWidth 删除的组件之前所在布局的宽度 - * @param creatorHeight 删除的组件之前所在布局的高度 - */ - public void recalculateChildrenSize(int x, int y, int creatorWidth, int creatorHeight) { - if (container.getComponentCount() == 0) { - return; - } else { - initCompsList(); - int width = creatorWidth; - int height = creatorHeight; - calculateRelatedComponent(x, y, width, height); - if (!rightComps.isEmpty() && getAllHeight(rightComps) == height) { - calculateRightRelatComponent(x, width + actualVal); - } else if (!leftComps.isEmpty() && getAllHeight(leftComps) == height) { - calculateLefttRelatComponent(width + actualVal); - } else if (!downComps.isEmpty() && getAllWidth(downComps) == width) { - calculateDownRelatComponent(y, height + actualVal); - } else if (!upComps.isEmpty() && getAllWidth(upComps) == width) { - calculateUpRelatComponent(height + actualVal); - } else { - // 由于布局三等分的存在,可能会出现删除组件时,找不到关联的组件填充,此时特殊处理 - calculateNoRelatedComponent(x, y, width, height); - } - } - clearCompsList(); - } - - /** - * 四侧边框都没有对齐的,此时每侧有且只有一个方向不对齐 - * 比如右侧不对齐,那么必然右上或右下没对齐,不会同时不对齐,否则不会出现此情况 - * 正常删除是右左下上优先原则,这边目前只调整右侧以至填充完整, - * 右侧不对齐时的组件先上下微调,再向左侧填充。 - */ - private void calculateNoRelatedComponent(int x, int y, int width, int height) { - // 只有最后一个组件了,直接删除 - if (container.getComponentCount() <= 1) { - return; - } - // 删除当前组件时,由于没有刚好边框对齐的其他组件,这时候需要调整的组件 - Component rightComp = container.getRightComp(x, y, width); - if (rightComp == null) { - return; - } - - int ry = rightComp.getY(); - clearCompsList(); - initCompsList(); - Rectangle rec = new Rectangle(x, y, width, height); - if (ry != y) { - calculateNoRelatedWhileRightTop(rec, rightComp); - } else { - calculateNoRelatedWhileRightBott(rec, rightComp); - } - - } - - private void calculateNoRelatedWhileRightTop(Rectangle bound, Component rcomp) { - if (rcomp == null) { - return; - } - - int ry = rcomp.getY(); - int rh = rcomp.getHeight(); - int rw = rcomp.getWidth(); - int dh = bound.y - ry - actualVal; - // 没法缩小高度 - if (dh < minHeight) { - // 没法缩小时则拉伸rcomp的上边框 - dealDirectionAtTop(rcomp.getBounds(), dh + actualVal, rcomp); - //调整的时候可能有组件达到最小高度,判断下 - if (rcomp.getY() != bound.y) { - clearCompsList(); - initCompsList(); - dealDirectionAtTop(rcomp.getBounds(), bound.y - rcomp.getY() - minHeight - actualVal, rcomp); - ry = rcomp.getY(); - int rx = rcomp.getX(); - rcomp.setBounds(rx, ry, rw, minHeight); - recalculateChildrenSize(rx, bound.y, rw, rh - dh - actualVal); - recalculateChildrenSize(bound.x, bound.y, bound.width, bound.height); - return; - } - } else { - // 右侧控件底部对齐 - if (rh + ry == bound.y + bound.height) { - rcomp.setSize(rw, dh); - bound.width += rw; - bound.width += actualVal; - } else { - recalculateChildrenSize(bound.x, ry + rh + actualVal, bound.width, bound.height + bound.y - rh - ry - actualVal); - recalculateChildrenSize(bound.x, bound.y, bound.width, ry + rh - bound.y); - return; - } - } - recalculateChildrenSize(bound.x, bound.y, bound.width, bound.height); - } - - private void calculateNoRelatedWhileRightBott(Rectangle bound, Component rcomp) { - rcomp = container.getBottomRightComp(bound.x, bound.y, bound.height, bound.width); - int ry = rcomp.getY(); - int rh = rcomp.getHeight(); - int rw = rcomp.getWidth(); - int dh = ry + rh - bound.y - bound.height - actualVal; - if (dh < minHeight) { - dealDirectionABottom(rcomp.getBounds(), -dh - actualVal, rcomp); - //调整的时候可能有组件达到最小高度,判断下 - if (rcomp.getHeight() + ry != bound.y + bound.height) { - clearCompsList(); - initCompsList(); - dh = ry + rcomp.getHeight() - bound.y - bound.height - actualVal; - dealDirectionABottom(rcomp.getBounds(), minHeight - dh, rcomp); - rh = rcomp.getHeight(); - int rx = rcomp.getX(); - rcomp.setBounds(rx, bound.y + bound.height + actualVal, rw, minHeight); - recalculateChildrenSize(rx, ry, rw, rh - minHeight - actualVal); - recalculateChildrenSize(bound.x, bound.y, bound.width, bound.height); - return; - } - } else { - if (ry == bound.y) { - rcomp.setBounds(rcomp.getX(), bound.y + bound.height + actualVal, rw, dh); - bound.width += rw; - bound.width += actualVal; - } else { - recalculateChildrenSize(bound.x, bound.y, bound.width, ry - bound.y - actualVal); - recalculateChildrenSize(bound.x, ry, bound.width, bound.height - ry + bound.y); - return; - } - } - recalculateChildrenSize(bound.x, bound.y, bound.width, bound.height); - } - - private int getMinWidth(List comps) { - if (comps.isEmpty()) { - return 0; - } - int minWidth = container.getWidth() - margin.getLeft() - margin.getRight(); - for (int i = 0, size = comps.size(); i < size; i++) { - minWidth = minWidth > comps.get(i).getWidth() ? comps.get(i).getWidth() : minWidth; - } - return minWidth; - } - - private int getMinHeight(List comps) { - if (comps.isEmpty()) { - return 0; - } - int minH = container.getHeight() - margin.getTop() - margin.getBottom(); - for (int i = 0, size = comps.size(); i < size; i++) { - minH = minH > comps.get(i).getHeight() ? comps.get(i).getHeight() : minH; - } - return minH; - } - - // 删除时计算待删除组件上下侧的组件是否何其对齐 - private int getAllHeight(List comps) { - int allHeight = 0; - if (comps.isEmpty()) { - return allHeight; - } - int n = comps.size(); - for (int i = 0; i < n; i++) { - allHeight += comps.get(i).getHeight(); - } - allHeight += (n - 1) * actualVal; - return allHeight; - } - - private int getAllWidth(List comps) { - int allWidth = 0; - if (comps.isEmpty()) { - return allWidth; - } - int n = comps.size(); - for (int i = 0; i < n; i++) { - allWidth += comps.get(i).getWidth(); - } - allWidth += (n - 1) * actualVal; - return allWidth; - } - - /** - * 获取有哪些相关联的组件 - */ - protected void calculateRelatedComponent(int objX, int objY, int objWidth, int objHeight) { - int count = container.getComponentCount(); - for (int i = 0; i < count; i++) { - Component relatComp = container.getComponent(i); - int rx = relatComp.getX(); - int ry = relatComp.getY(); - int rwidth = relatComp.getWidth(); - int rheight = relatComp.getHeight(); - int verti = ry - objY; - int hori = rx - objX; - boolean isHori = verti >= 0 && objHeight >= (rheight + verti); - boolean isVerti = hori >= 0 && objWidth >= (rwidth + hori); - if (isHori && (objX + objWidth + actualVal) == rx) { - rightComps.add(relatComp); - } else if (isHori && objX == (rx + rwidth + actualVal)) { - leftComps.add(relatComp); - } else if (isVerti && (objY + objHeight + actualVal) == ry) { - downComps.add(relatComp); - } else if (isVerti && objY == (ry + rheight + actualVal)) { - upComps.add(relatComp); - } - } - } - - /** - * 拖拽组件时遍历某一侧组件得到该侧组件能够缩放的最小宽度,tab布局最小宽度 = 内部组件数 * 单个组件最小宽度 - * - * @param list 某一侧组件的集合 如:leftComps - * @return int 最小宽度 - */ - private int getCompsMinWidth(List list) { - return getMaxCompsNum(list, true) * WLayout.MIN_WIDTH; - } - - /** - * 拖拽组件遍历某一侧得到该侧组件能够缩放的最小高度,tab布局最小高度 = 内部组件数 * 单个组件最小高度 + 标题高度 - * - * @param list 某一侧组件集合 - * @return int 最小高度 - */ - private int getCompsMinHeight(List list) { - for (int i = 0; i < list.size(); i++) { - XCreator creator = (XCreator) list.get(i); - ArrayList childrenList = creator.getTargetChildrenList(); - if (!childrenList.isEmpty()) { - return getMaxCompsNum(list, false) * WLayout.MIN_HEIGHT + WCardMainBorderLayout.TAB_HEIGHT; - } - } - return WLayout.MIN_HEIGHT; - } - - /** - * 根据子组件的横(纵)坐标获取某一侧组件的最大内部组件数 - * - * @param list 某一侧组件集合 - * @param isHor 是否以横坐标为准 - * @return int 最大内部组件数 - */ - private int getMaxCompsNum(List list, boolean isHor) { - int maxCompNums = 1; - for (int i = 0, size = list.size(); i < size; i++) { - XCreator creator = (XCreator) list.get(i); - ArrayList childrenList = creator.getTargetChildrenList(); - int count = childrenList.size(); - if (count > 0) { - for (int j = 0; j < count; j++) { - XWTabFitLayout tabLayout = (XWTabFitLayout) childrenList.get(j); - int[] positions = isHor ? tabLayout.getHors(true) : tabLayout.getVeris(true); - int compNums = positions.length - 1; - maxCompNums = Math.max(compNums, maxCompNums); - } - } - } - return maxCompNums; - } - - /** - * 根据偏移量缩放内部组件大小,(tab布局用到) - * - * @param creator tab布局 - * @param offset 偏移量 - * @param isHor 是否为横向拖拽 - */ - private void adjustCompsSize(XCreator creator, int offset, boolean isHor) { - ArrayList childrenList = creator.getTargetChildrenList(); - int size = childrenList.size(); - if (size > 0) { - for (int j = 0; j < size; j++) { - XWTabFitLayout tabLayout = (XWTabFitLayout) childrenList.get(j); - tabLayout.setBackupBound(tabLayout.getBounds()); - int refSize = isHor ? tabLayout.getWidth() : tabLayout.getHeight(); - double percent = (double) offset / refSize; - if (percent < 0 && !tabLayout.canReduce(percent)) { - return; - } - setAdjustedSize(tabLayout, offset, isHor); - for (int m = 0; m < tabLayout.getComponentCount(); m++) { - XCreator childCreator = tabLayout.getXCreator(m); - BoundsWidget wgt = tabLayout.toData().getBoundsWidget(childCreator.toData()); - wgt.setBounds(tabLayout.getComponent(m).getBounds()); - } - adjustCreatorsSize(percent, tabLayout, isHor); - } - - } - } - - // 纵向拖拽,先将tab布局的高度设置为拖拽后的实际高度 - private void setAdjustedHeight(XWTabFitLayout tabLayout, int offset) { - tabLayout.setSize(tabLayout.getWidth(), tabLayout.getHeight() + offset); - } - - // 横向拖拽,先将tab布局的宽度设置为拖拽后的实际宽度 - private void setAdjustedSize(XWTabFitLayout tabLayout, int offset, boolean isHor) { - if (offset < 0) { - // 缩放时需要备份原tab布局宽高 - tabLayout.setReferDim(new Dimension(tabLayout.getWidth(), tabLayout.getHeight())); - } - if (isHor) { - tabLayout.setSize(tabLayout.getWidth() + offset, tabLayout.getHeight()); - return; - } - setAdjustedHeight(tabLayout, offset); - } - - // 按照拖拽偏移量,对tab布局进行缩放 - private void adjustCreatorsSize(double percent, XWTabFitLayout tabLayout, boolean isHor) { - if (isHor) { - tabLayout.adjustCreatorsWidth(percent); - return; - } - tabLayout.adjustCreatorsHeight(percent); - } - - - /** - * 删除或拉伸控件右边框 调整右侧组件位置大小 - * - * @param objX 调整后的坐标x - * @param objWidth 调整后的宽度 - */ - protected void calculateRightRelatComponent(int objX, int objWidth) { - int count = rightComps.size(); - for (int i = 0; i < count; i++) { - XCreator creator = (XCreator) rightComps.get(i); - adjustCompsSize(creator, objWidth, true); - int ry = creator.getY(); - int rwidth = creator.getWidth(); - int rheight = creator.getHeight(); - creator.setLocation(objX, ry); - creator.setSize(rwidth + objWidth, rheight); - } - } - - /** - * 实际拖拽偏移量是否超出了可调整的宽度范围 - * - * @param offset 实际偏移量 - * @return boolean 是否超出调整范围 - */ - private boolean isBeyondAdjustWidthScope(int offset) { - boolean isBeyondScope = false; - isBeyondScope = offset < 0 ? isBeyondWidthScope(offset, leftComps) : isBeyondWidthScope(offset, rightComps); - return isBeyondScope; - } - - // 实际拖拽偏移量是否超出某一侧的可调整宽度 - private boolean isBeyondWidthScope(int offset, List compsList) { - int compMinWidth = getCompsMinWidth(compsList); - for (int i = 0; i < compsList.size(); i++) { - XCreator creator = (XCreator) compsList.get(i); - if (Math.abs(offset) > (creator.getWidth() - compMinWidth)) { - return true; - } - } - return false; - } - - /** - * 删除或拉伸控件左边框时 调整左侧的组件位置大小; - */ - protected boolean calculateLefttRelatComponent(int objWidth) { - if (isBeyondAdjustWidthScope(objWidth)) { - return false; - } - int count = leftComps.size(); - for (int i = 0; i < count; i++) { - XCreator creator = (XCreator) leftComps.get(i); - adjustCompsSize(creator, objWidth, true); - int rwidth = creator.getWidth(); - int rheight = creator.getHeight(); - creator.setSize(rwidth + objWidth, rheight); - } - return true; - } - - /** - * 删除或拉伸下边框 调整下方的组件位置大小 - */ - protected void calculateDownRelatComponent(int objY, int objHeight) { - int count = downComps.size(); - for (int i = 0; i < count; i++) { - XCreator creator = (XCreator) downComps.get(i); - adjustCompsSize(creator, objHeight, false); - int rx = creator.getX(); - int rwidth = creator.getWidth(); - int rheight = creator.getHeight(); - creator.setLocation(rx, objY); - creator.setSize(rwidth, rheight + objHeight); - } - } - - /** - * 实际拖拽偏移量是否超出了可调整的高度范围 - * - * @param offset 实际偏移量 - * @return boolean 是否超出调整范围 - */ - private boolean isBeyondAdjustHeightScope(int offset) { - boolean isBeyondScope = false; - isBeyondScope = offset < 0 ? isBeyondHeightScope(offset, upComps) : isBeyondHeightScope(offset, downComps); - return isBeyondScope; - } - - // 实际拖拽偏移量是否超出某一侧的可调整高度 - private boolean isBeyondHeightScope(int offset, List compsList) { - int minHeight = getCompsMinHeight(compsList); - for (int i = 0; i < compsList.size(); i++) { - XCreator creator = (XCreator) compsList.get(i); - if (Math.abs(offset) > (creator.getHeight() - minHeight)) { - return true; - } - } - return false; - } - - /** - * 删除或拉伸上边框 调整上方的组件位置大小 - */ - protected boolean calculateUpRelatComponent(int objHeight) { - if (isBeyondAdjustHeightScope(objHeight)) { - return false; - } - int count = upComps.size(); - for (int i = 0; i < count; i++) { - XCreator creator = (XCreator) upComps.get(i); - adjustCompsSize(creator, objHeight, false); - int rwidth = creator.getWidth(); - int rheight = creator.getHeight(); - creator.setSize(rwidth, rheight + objHeight); - } - return true; - } - - /** - * 不调整,只计算位置 - * - * @return child的位置 - */ - public int[] getChildPosition(Component currentComp, XCreator child, int x, int y) { - return super.getChildPosition(currentComp, child, x, y); - } - - @Override - public ConstraintsGroupModel getLayoutConstraints(XCreator creator) { - return new FRFitLayoutConstraints((XWFitLayout) container, creator); - } +/** + * + */ +package com.fr.design.designer.beans.adapters.layout; + +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Rectangle; +import java.util.ArrayList; +import java.util.List; + +import com.fr.design.beans.GroupModel; +import com.fr.design.designer.beans.ConstraintsGroupModel; +import com.fr.design.designer.beans.HoverPainter; +import com.fr.design.designer.beans.painters.FRFitLayoutPainter; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XCreatorUtils; +import com.fr.design.designer.creator.XLayoutContainer; +import com.fr.design.designer.creator.XWFitLayout; +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.properties.FRFitLayoutConstraints; +import com.fr.design.designer.properties.FRFitLayoutPropertiesGroupModel; +import com.fr.design.file.HistoryTemplateListPane; +import com.fr.design.mainframe.JForm; +import com.fr.design.utils.ComponentUtils; +import com.fr.form.ui.LayoutBorderStyle; +import com.fr.form.ui.container.WLayout; +import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; +import com.fr.general.ComparatorUtils; +import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; + +/** + * 自适应布局的容器适配器 + * + * @author jim + * @date 2014-6-24 + */ +public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { + + public static final String WIDGETPANEICONPATH = "/com/fr/web/images/form/resources/layout_absolute.png"; + private static final int DEPENDING_SCOPE = 3; + private HoverPainter painter; + //区分拖拽和编辑宽高 + private boolean isEdit; + + public boolean isEdit() { + return isEdit; + } + + public void setEdit(boolean edit) { + isEdit = edit; + } + /** + * 构造函数 + * + * @param container XWFitLayout容器 + */ + public FRFitLayoutAdapter(XLayoutContainer container) { + super(container); + painter = new FRFitLayoutPainter(container); + initMinSize(); + } + + private void initMinSize() { + XWFitLayout layout = (XWFitLayout) container; + minWidth = layout.getActualMinWidth(); + minHeight = layout.getActualMinHeight(); + actualVal = layout.getAcualInterval(); + margin = layout.toData().getMargin(); + } + + @Override + public HoverPainter getPainter() { + return painter; + } + + /** + * 返回布局自身属性,方便一些特有设置在layout刷新时处理 + */ + @Override + public GroupModel getLayoutProperties() { + XWFitLayout xfl = (XWFitLayout) container; + return new FRFitLayoutPropertiesGroupModel(xfl); + } + + /** + * 添加组件 + * + * @param child 待添加的组件 + * @param x 坐标x + * @param y 坐标y + */ + @Override + public void addComp(XCreator child, int x, int y) { + fix(child, x, y); + if (child.shouldScaleCreator() || child.hasTitleStyle()) { + addParentCreator(child); + } else { + container.add(child, child.toData().getWidgetName()); + } + XWFitLayout layout = (XWFitLayout) container; + // 更新对应的BoundsWidget + layout.updateBoundsWidget(); + updateCreatorBackBound(); + } + + public void updateCreatorBackBound() { + for (int i = 0, size = container.getComponentCount(); i < size; i++) { + XCreator creator = (XCreator) container.getComponent(i); + creator.updateChildBound(minHeight); + creator.setBackupBound(creator.getBounds()); + } + } + + + private void addParentCreator(XCreator child) { + XLayoutContainer parentPanel = child.initCreatorWrapper(minHeight); + container.add(parentPanel, child.toData().getWidgetName()); + } + + /** + * 能否对应位置放置当前组件 + * + * @param creator 组件 + * @param x 添加的位置x,该位置是相对于container的 + * @param y 添加的位置y,该位置是相对于container的 + * @return 是否可以放置 + */ + @Override + public boolean accept(XCreator creator, int x, int y) { + // 计算是否能拖入鼠标区域时,会用到fix 的方法 + isFindRelatedComps = false; + //拖入组件判断时,先判断是否为交叉点区域,其次三等分区域,再次平分区域 + Component comp = container.getComponentAt(x, y); + if (checkInterval(comp)) { + return false; + } + //如果当前处于边缘地带, 那么就把他贴到父容器上 + boolean isMatchEdge = matchEdge(x, y); + + int componentHeight = comp.getHeight(); + int componentWidth = comp.getWidth(); + //上半部分高度 + int upHeight = (int) (componentHeight * TOP_HALF) + comp.getY(); + //下半部分高度 + int downHeight = (int) (componentHeight * BOTTOM_HALF) + comp.getY(); + + //布局控件要先判断是不是可编辑 + XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer((XCreator) comp).getTopLayout(); + if (topLayout != null && !isMatchEdge && !topLayout.isEditable()) { + return false; + } + + if (isCrossPointArea(comp, x, y)) { + return canAcceptWhileCrossPoint(comp, x, y); + } + + if (isTrisectionArea(comp, x, y)) { + return canAcceptWhileTrisection(comp, x, y); + } + + boolean horizonValid = componentWidth >= minWidth * 2 + actualVal; + boolean verticalValid = componentHeight >= minHeight * 2 + actualVal; + return y > upHeight && y < downHeight ? horizonValid : verticalValid; + } + + // 间隔区域 + private boolean checkInterval(Component comp) { + return container.getComponentCount() > 0 && comp == container; + } + + /** + * 是否在组件边缘 + * + * @param x 横坐标 + * @param y 纵坐标 + * @return 是否在组件边缘 + */ + public boolean matchEdge(int x, int y) { + if (intersectsEdge(x, y, container)) { + //寻找最近的fit, 在边缘地段添加的控件, 将其送给该fit + XLayoutContainer parent = container.findNearestFit(); + container = parent != null ? parent : container; + return true; + } + return false; + } + + /** + * 是否在组件边缘 + * + * @param x 横坐标 + * @param y 纵坐标 + * @param container 参照组件 + * @return 是否在组件边缘 + */ + //是否包含于边缘地段, 按顺序上, 下, 左, 右检测 + public boolean intersectsEdge(int x, int y, XLayoutContainer container) { + int containerX = container.getX(); + int containerY = container.getY(); + int containerWidth = container.getWidth(); + int containerHeight = container.getHeight(); + + // 当前坐标点 + Rectangle currentXY = new Rectangle(x, y, 1, 1); + // 上边缘 + Rectangle upEdge = new Rectangle(containerX, containerY, containerWidth, BORDER_PROPORTION); + if (upEdge.intersects(currentXY)) { + return true; + } + + int bottomY = containerY + containerHeight - BORDER_PROPORTION; + // 下边缘 + Rectangle bottomEdge = new Rectangle(containerX, bottomY, containerWidth, BORDER_PROPORTION); + if (bottomEdge.intersects(currentXY)) { + return true; + } + + //左右边缘的高度 -10*2 是为了不和上下边缘重合 + int verticalHeight = containerHeight - BORDER_PROPORTION * 2; + int leftY = containerY + BORDER_PROPORTION; + // 左边缘 + Rectangle leftEdge = new Rectangle(containerX, leftY, BORDER_PROPORTION, verticalHeight); + if (leftEdge.intersects(currentXY)) { + return true; + } + + int rightY = containerY + BORDER_PROPORTION; + int rightX = containerX + containerWidth - BORDER_PROPORTION; + // 右边缘 + Rectangle rightEdge = new Rectangle(rightX, rightY, BORDER_PROPORTION, verticalHeight); + return rightEdge.intersects(currentXY); + } + + /** + * 交叉点区域时,能否对应位置放入组件 + */ + protected boolean canAcceptWhileCrossPoint(Component comp, int x, int y) { + return super.canAcceptWhileCrossPoint(comp, x, y); + } + + protected boolean canAcceptWhileTrisection(Component comp, int x, int y) { + return super.canAcceptWhileTrisection(comp, x, y); + } + + /** + * 判断是否鼠标在组件的三等分区域,如果组件在布局管理器中间,上下左右都可能会三等分 + * + * @param parentComp 鼠标所在区域的组件 + * @param x 坐标x + * @param y 坐标y + * @return 是则返回true + */ + public boolean isTrisectionArea(Component parentComp, int x, int y) { + return super.isTrisectionArea(parentComp, x, y); + } + + /** + * 是否为组件交叉点区域 或者是相邻三组建中间点 + * + * @param currentComp 当前组件 + * @param x 坐标x + * @param y 坐标y + * @return 是则返回true + */ + public boolean isCrossPointArea(Component currentComp, int x, int y) { + return super.isCrossPointArea(currentComp, x, y); + } + + protected void initCompsList() { + super.initCompsList(); + } + + protected void clearCompsList() { + super.clearCompsList(); + } + + protected Rectangle getLayoutBound(XWCardMainBorderLayout mainLayout){ + return mainLayout.getBounds(); + } + + private Rectangle adjustBackupBound(Rectangle backupBound, XWCardMainBorderLayout mainLayout) { + // 参数界面高度对纵坐标产生的影响 + JForm jform = (JForm) (HistoryTemplateListPane.getInstance().getCurrentEditingTemplate()); + if (jform.getFormDesign().getParaComponent() != null) { + backupBound.y -= jform.getFormDesign().getParaHeight(); + } + + Rectangle rec = getLayoutBound(mainLayout); + // XWTabLayout里面的横纵坐标收到外层XWCardMainBorderLayout的横纵坐标影响 + // 减掉之后可以按照它原来的逻辑执行 + backupBound.x -= rec.x; + backupBound.y -= rec.y; + XWCardLayout cardLayout = mainLayout.getCardPart(); + LayoutBorderStyle style = cardLayout.toData().getBorderStyle(); + // 当tab布局为标题样式时,才需要处理标题栏高度产生的影响 + if (ComparatorUtils.equals(style.getType(), LayoutBorderStyle.TITLE)) { + backupBound.y -= WCardMainBorderLayout.TAB_HEIGHT; + } + return backupBound; + } + + /** + * 拖拽控件边框后,根据控件的大小尺寸,进行相关组件的调整 + * + * @param creator 组件 + */ + @Override + public void fix(XCreator creator) { + //拖拽组件原大小、位置 + Rectangle backupBound = creator.getBackupBound(); + backupBound.x -= container.getX(); + backupBound.y -= container.getY(); + //当前拖拽组件的位置 + int x = creator.getX(); + int y = creator.getY(); + + // 获取容器所有内部组件横坐标 + int[] posXs = container.getHors(); + // 获取容器所有内部组件纵坐标 + int[] posYs = container.getVeris(); + + XLayoutContainer outerLayout = container.getOuterLayout(); + if (!ComparatorUtils.equals(outerLayout, container.getBackupParent())) { + XWCardMainBorderLayout mainLayout = (XWCardMainBorderLayout) outerLayout; + backupBound = adjustBackupBound(backupBound, mainLayout); + } + + //拖拽组件拖拽以后的大小 + int w = creator.getWidth(); + int h = creator.getHeight(); + initCompsList(); + creator.setBounds(backupBound); + int difference = 0; + if (x != backupBound.x) { + dealLeft(backupBound, x, posXs, difference, creator); + } else if (w != backupBound.width) { + dealRight(backupBound, x, w, posXs, difference, creator); + } else if (y != backupBound.y) { + dealTop(backupBound, y, posYs, difference, creator); + } else if (h != backupBound.height) { + dealButtom(backupBound, y, h, posYs, difference, creator); + } + clearCompsList(); + XWFitLayout layout = (XWFitLayout) container; + layout.updateBoundsWidget(); // 更新对应的BoundsWidget + updateCreatorBackBound(); + } + + /** + * 拖拽控件边框后,根据控件的大小尺寸,进行相关组件的调整 + * + * @param backupBound 边界备份 + * @param bounds 组件边界 + * @param xCreator 组件 + * @param row 选中的行 + * @param difference 偏移量 + */ + public void calculateBounds(Rectangle backupBound, Rectangle bounds, XCreator xCreator, int row, int difference) { + Rectangle rc = new Rectangle(0,0,0,0); + XLayoutContainer parent = XCreatorUtils.getParentXLayoutContainer(xCreator); + if (parent != null) { + Rectangle rec = ComponentUtils.getRelativeBounds(parent); + rc.x = rec.x; + rc.y = rec.y; + } + int x = backupBound.x - rc.x, y = backupBound.y - rc.y; + //处理左右延伸 + switch (row) { + case 0: + if (backupBound.width + backupBound.x == container.getWidth() - margin.getRight() +rc.x) { + x += difference; + } + break; + case 1: + if(backupBound.y + backupBound.height == container.getHeight() - margin.getBottom() +rc.y){ + y += difference; + } + break; + } + bounds.setLocation(x,y); + xCreator.setBackupBound(backupBound); + xCreator.setBounds(bounds); + this.fix(xCreator); + } + + private void dealLeft(Rectangle backupBound, int x, int[] posXs, int difference, XCreator creator) { + if (backupBound.x == margin.getLeft()) { + return; + } + x = adjustCoordinateByDependingLine(x, posXs); + difference = x - backupBound.x; + dealDirectionAtLeft(backupBound, difference, creator); + } + + private void dealRight(Rectangle backupBound, int x, int w, int[] posXs, int difference, XCreator creator) { + if (backupBound.width + backupBound.x == container.getWidth() - margin.getRight()) { + return; + } + w = adjustDiffByDependingLine(x, posXs, w); + difference = w - backupBound.width; //拖拽长度 + dealDirectionAtRight(backupBound, difference, creator); + } + + private void dealTop(Rectangle backupBound, int y, int[] posYs, int difference, XCreator creator) { + if (backupBound.y == margin.getTop()) { + return; + } + y = adjustCoordinateByDependingLine(y, posYs); + difference = y - backupBound.y; + dealDirectionAtTop(backupBound, difference, creator); + } + + private void dealButtom(Rectangle backupBound, int y, int h, int[] posYs, int difference, XCreator creator) { + if (backupBound.y + backupBound.height == container.getHeight() - margin.getBottom()) { + return; + } + h = adjustDiffByDependingLine(y, posYs, h); + difference = h - backupBound.height; + dealDirectionABottom(backupBound, difference, creator); + } + + // 根据需要依附的位置调整拖拽的坐标值 + private int adjustCoordinateByDependingLine(int coordinate, int[] coordinates) { + if(!isEdit) { + for (int i = 0; i < coordinates.length; i++) { + if (coordinate == coordinates[i]) { + continue; + } + if (coordinate > coordinates[i] - DEPENDING_SCOPE && coordinate < coordinates[i] + DEPENDING_SCOPE) { + coordinate = coordinates[i]; + break; + } + } + } + return coordinate; + } + + // 根据需要依附的位置调整拖拽的距离 + private int adjustDiffByDependingLine(int coordinate, int[] coordinates, int diff) { + if(!isEdit) { + for (int i = 0; i < coordinates.length; i++) { + if (coordinate + diff > coordinates[i] - DEPENDING_SCOPE && coordinate + diff < coordinates[i] + DEPENDING_SCOPE) { + diff = coordinates[i] - coordinate; + break; + } + } + } + return diff; + } + + // 左侧边框拉伸,循环找出对齐的两侧控件 + private void dealDirectionAtLeft(Rectangle backupBound, int difference, Component creator) { + rightComps.add(creator); + Component rightComp = null; + int leftx = backupBound.x - DEFAULT_AREA_LENGTH - actualVal; + // 取左侧边框右面的组件x值 + int rightx = backupBound.x + DEFAULT_AREA_LENGTH; + Component leftComp = container.getLeftComp(backupBound.x, backupBound.y); + leftComps.add(leftComp); + //先找上侧对齐时(y相等)的左右两边组件 + int ry = backupBound.y; + int ly = leftComp.getY(); + int min = margin.getTop(); + int max = container.getHeight() - margin.getBottom(); + while (ry >= min && ly >= min) { + if (ry == ly) { + break; + } else { + if (ry > ly) { + rightComp = container.getTopComp(rightx, ry); + ry = rightComp.getY(); + rightComps.add(rightComp); + } else { + leftComp = container.getTopComp(leftx, ly); + ly = leftComp.getY(); + leftComps.add(leftComp); + } + } + } + // 下侧对齐时(y+h相等)两边组件 + ry = backupBound.y + backupBound.height; + ly = leftComps.get(0).getY() + leftComps.get(0).getHeight(); + while (ry <= max && ly <= max) { + if (ry == ly) { + break; + } else { + if (ry > ly) { + leftComp = container.getComponentAt(leftx, ly + DEFAULT_AREA_LENGTH + actualVal); + ly = leftComp.getY() + leftComp.getHeight(); + leftComps.add(leftComp); + } else { + rightComp = container.getComponentAt(rightx, ry + DEFAULT_AREA_LENGTH + actualVal); + ry = rightComp.getY() + rightComp.getHeight(); + rightComps.add(rightComp); + } + } + } + dealHorDirection(backupBound.x, difference); + } + + // 右侧边框拉伸,循环找出对齐的两侧控件 + private void dealDirectionAtRight(Rectangle backupBound, int difference, Component creator) { + leftComps.add(creator); + Component leftComp = null; + int leftx = backupBound.x + backupBound.width - DEFAULT_AREA_LENGTH; + // 取右侧边框右面的组件x值 + int rightx = backupBound.x + backupBound.width + DEFAULT_AREA_LENGTH + actualVal; + Component rightComp = container.getRightComp(backupBound.x, backupBound.y, backupBound.width); + rightComps.add(rightComp); + int ly = backupBound.y, ry = rightComp.getY(); + int min = margin.getTop(); + int max = container.getHeight() - margin.getBottom(); + while (ry >= min && ly >= min) { + if (ry == ly) { + break; + } else { + if (ry > ly) { + rightComp = container.getTopComp(rightx, ry); + ry = rightComp.getY(); + rightComps.add(rightComp); + } else { + leftComp = container.getTopComp(leftx, ly); + ly = leftComp.getY(); + leftComps.add(leftComp); + } + } + } + ly = backupBound.y + backupBound.height; + ry = rightComps.get(0).getY() + rightComps.get(0).getHeight(); + while (ry <= max && ly <= max) { + if (ry == ly) { + break; + } else { + if (ry > ly) { + leftComp = container.getComponentAt(leftx, ly + DEFAULT_AREA_LENGTH + actualVal); + ly = leftComp.getY() + leftComp.getHeight(); + leftComps.add(leftComp); + } else { + rightComp = container.getComponentAt(rightx, ry + DEFAULT_AREA_LENGTH + actualVal); + ry = rightComp.getY() + rightComp.getHeight(); + rightComps.add(rightComp); + } + } + } + dealHorDirection(backupBound.x + backupBound.width + actualVal, difference); + } + + /** + * 水平方向上拉伸边框的处理 + */ + private void dealHorDirection(int objx, int difference) { + if (difference > 0) { + difference = Math.min(getMinWidth(rightComps) - minWidth, difference); + } else { + difference = Math.max(difference, minWidth - getMinWidth(leftComps)); + } + //重新计算左右两侧组件size、point + if (CalculateLefttRelatComponent(difference)) { + CalculateRightRelatComponent(objx + difference, -difference); + } + } + + // 上侧边框拉伸,循环找出对齐的两侧控件 + private void dealDirectionAtTop(Rectangle backupBound, int difference, Component creator) { + downComps.add(creator); + // 取上侧边框上面的组件用的y值 + int topy = backupBound.y - DEFAULT_AREA_LENGTH - actualVal; + // 上侧边框下面的组件y值 + int bottomy = backupBound.y + DEFAULT_AREA_LENGTH; + Component topComp = container.getTopComp(backupBound.x, backupBound.y); + upComps.add(topComp); + Component bottomComp = null; + int min = margin.getLeft(); + int max = container.getWidth() - margin.getRight(); + //先找左侧侧对齐时(x相等)的上下两边组件 + int ux = topComp.getX(); + int dx = backupBound.x; + while (ux >= min && dx >= min) { + if (ux == dx) { + break; + } else { + if (ux < dx) { + bottomComp = container.getLeftComp(dx, bottomy); + dx = bottomComp.getX(); + downComps.add(bottomComp); + } else { + topComp = container.getLeftComp(ux, topy); + ux = topComp.getX(); + upComps.add(topComp); + } + } + } + // 右侧对齐时(x+w相等)两边组件 + ux = upComps.get(0).getX() + upComps.get(0).getWidth(); + dx = backupBound.x + backupBound.width; + while (ux <= max && dx <= max) { + if (ux == dx) { + break; + } else { + if (ux < dx) { + topComp = container.getComponentAt(ux + DEFAULT_AREA_LENGTH + actualVal, topy); + ux = topComp.getX() + topComp.getWidth(); + upComps.add(topComp); + } else { + bottomComp = container.getComponentAt(dx + DEFAULT_AREA_LENGTH + actualVal, bottomy); + dx = bottomComp.getX() + bottomComp.getWidth(); + downComps.add(bottomComp); + } + } + } + + dealVertiDirection(backupBound.y, difference); + } + + // 下侧边框拉伸,循环找出对齐的两侧控件 + private void dealDirectionABottom(Rectangle backupBound, int difference, Component creator) { + upComps.add(creator); + Component topComp = null; + Component bottomComp = container.getBottomComp(backupBound.x, backupBound.y, backupBound.height); + // 下侧边框下面的组件y坐标 + int bottomy = backupBound.y + backupBound.height + DEFAULT_AREA_LENGTH + actualVal; + // 取下侧边框上面的组件用的y值 + int topy = backupBound.y + backupBound.height - DEFAULT_AREA_LENGTH; + downComps.add(bottomComp); + int dx = bottomComp.getX(); + int ux = backupBound.x; + int min = margin.getLeft(); + int max = container.getWidth() - margin.getRight(); + while (ux >= min && dx >= min) { + if (ux == dx) { + break; + } else { + if (ux < dx) { + bottomComp = container.getLeftComp(dx, bottomy); + dx = bottomComp.getX(); + downComps.add(bottomComp); + } else { + topComp = container.getLeftComp(ux, topy); + ux = topComp.getX(); + upComps.add(topComp); + } + } + } + dx = downComps.get(0).getX() + downComps.get(0).getWidth(); + ux = backupBound.x + backupBound.width; + while (ux <= max && dx <= max) { + if (ux == dx) { + break; + } else { + if (ux < dx) { + topComp = container.getComponentAt(ux + DEFAULT_AREA_LENGTH + actualVal, topy); + ux = topComp.getX() + topComp.getWidth(); + upComps.add(topComp); + } else { + bottomComp = container.getComponentAt(dx + DEFAULT_AREA_LENGTH + actualVal, bottomy); + dx = bottomComp.getX() + bottomComp.getWidth(); + downComps.add(bottomComp); + } + } + } + dealVertiDirection(backupBound.y + backupBound.height + actualVal, difference); + } + + /** + * 垂直方向上拉伸边框的处理 + */ + private void dealVertiDirection(int objY, int difference) { + if (difference > 0) { + difference = Math.min(getMinHeight(downComps) - minHeight, difference); + } else { + difference = Math.max(difference, minHeight - getMinHeight(upComps)); + } + //重新计算上下两侧组件size、point + if (CalculateUpRelatComponent(difference)) { + CalculateDownRelatComponent(objY + difference, -difference); + } + ; + } + + /** + * 新拖入组件时,计算调整其他关联组件位置大小 + * + * @param child 新拖入的组件 + * @param x 鼠标所在x坐标 + * @param y 鼠标所在y坐标 + */ + public void fix(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()); + } else if (isCrossPointArea(parentComp, x, y)) { + //交叉区域插入组件时,根据具体位置进行上下或者左右或者相邻三个组件的位置大小插入 + fixCrossPointArea(parentComp, child, x, y); + return; + } else if (isTrisectionArea(parentComp, x, y)) { + // 在边界三等分区域,就不再和组件二等分了 + fixTrisect(parentComp, child, x, y); + return; + } else { + fixHalve(parentComp, child, x, y); + } + } + + /** + * 平分,正常情况拖入组件时,按照上1/4区域、下1/4区域为上下平分,中左侧1/2区域、中右侧1/2区域为左右平分 + */ + protected void fixHalve(Component currentComp, XCreator child, int x, int y) { + super.fixHalve(currentComp, child, x, y); + } + + /** + * 组件交叉区域进行插入时,调整受到变动的其他组件,之前是交叉区域插入也按照三等分逻辑,后面测试中发现有bug,改为和bi一样的鼠标所在侧平分 + * 默认左上角、右下角区域是垂直方向插入组件 + * 右上角和左下角是水平方向插入组件,这样避免田字块时重复 + */ + protected void fixCrossPointArea(Component currentComp, XCreator child, int x, int y) { + super.fixCrossPointArea(currentComp, child, x, y); + } + + /** + * 三等分区域时,调整相关联的组件 + * + * @param currentComp 鼠标所在组件 + * @param child 待插入组件 + */ + protected void fixTrisect(Component currentComp, XCreator child, int x, int y) { + super.fixTrisect(currentComp, child, x, y); + } + + /** + * 删除组件或者重新拖动时,其它组件重新计算位置大小 + */ + protected void delete(XCreator creator, int creatorWidth, int creatorHeight) { + int x = creator.getX(); + int y = creator.getY(); + recalculateChildrenSize(x, y, creatorWidth, creatorHeight); + } + + /** + * 重新计算内部组件大小 + * + * @param x 坐标x + * @param y 坐标y + * @param creatorWidth 删除的组件之前所在布局的宽度 + * @param creatorHeight 删除的组件之前所在布局的高度 + */ + public void recalculateChildrenSize(int x, int y, int creatorWidth, int creatorHeight) { + if (container.getComponentCount() == 0) { + return; + } else { + initCompsList(); + int width = creatorWidth; + int height = creatorHeight; + calculateRelatedComponent(x, y, width, height); + if (!rightComps.isEmpty() && getAllHeight(rightComps) == height) { + CalculateRightRelatComponent(x, width + actualVal); + } else if (!leftComps.isEmpty() && getAllHeight(leftComps) == height) { + CalculateLefttRelatComponent(width + actualVal); + } else if (!downComps.isEmpty() && getAllWidth(downComps) == width) { + CalculateDownRelatComponent(y, height + actualVal); + } else if (!upComps.isEmpty() && getAllWidth(upComps) == width) { + CalculateUpRelatComponent(height + actualVal); + } else { + // 由于布局三等分的存在,可能会出现删除组件时,找不到关联的组件填充,此时特殊处理 + calculateNoRelatedComponent(x, y, width, height); + } + } + clearCompsList(); + } + + /** + * 四侧边框都没有对齐的,此时每侧有且只有一个方向不对齐 + * 比如右侧不对齐,那么必然右上或右下没对齐,不会同时不对齐,否则不会出现此情况 + * 正常删除是右左下上优先原则,这边目前只调整右侧以至填充完整, + * 右侧不对齐时的组件先上下微调,再向左侧填充。 + */ + private void calculateNoRelatedComponent(int x, int y, int width, int height) { + // 只有最后一个组件了,直接删除 + if (container.getComponentCount() <= 1) { + return; + } + // 删除当前组件时,由于没有刚好边框对齐的其他组件,这时候需要调整的组件 + Component rightComp = container.getRightComp(x, y, width); + if (rightComp == null) { + return; + } + + int ry = rightComp.getY(); + clearCompsList(); + initCompsList(); + Rectangle rec = new Rectangle(x, y, width, height); + if (ry != y) { + calculateNoRelatedWhileRightTop(rec, rightComp); + } else { + calculateNoRelatedWhileRightBott(rec, rightComp); + } + + } + + private void calculateNoRelatedWhileRightTop(Rectangle bound, Component rcomp) { + if (rcomp == null) { + return; + } + + int ry = rcomp.getY(); + int rh = rcomp.getHeight(); + int rw = rcomp.getWidth(); + int dh = bound.y - ry - actualVal; + // 没法缩小高度 + if (dh < minHeight) { + // 没法缩小时则拉伸rcomp的上边框 + dealDirectionAtTop(rcomp.getBounds(), dh + actualVal, rcomp); + //调整的时候可能有组件达到最小高度,判断下 + if (rcomp.getY() != bound.y) { + clearCompsList(); + initCompsList(); + dealDirectionAtTop(rcomp.getBounds(), bound.y - rcomp.getY() - minHeight - actualVal, rcomp); + ry = rcomp.getY(); + int rx = rcomp.getX(); + rcomp.setBounds(rx, ry, rw, minHeight); + recalculateChildrenSize(rx, bound.y, rw, rh - dh - actualVal); + recalculateChildrenSize(bound.x, bound.y, bound.width, bound.height); + return; + } + } else { + // 右侧控件底部对齐 + if (rh + ry == bound.y + bound.height) { + rcomp.setSize(rw, dh); + bound.width += rw; + bound.width += actualVal; + } else { + recalculateChildrenSize(bound.x, ry + rh + actualVal, bound.width, bound.height + bound.y - rh - ry - actualVal); + recalculateChildrenSize(bound.x, bound.y, bound.width, ry + rh - bound.y); + return; + } + } + recalculateChildrenSize(bound.x, bound.y, bound.width, bound.height); + } + + private void calculateNoRelatedWhileRightBott(Rectangle bound, Component rcomp) { + rcomp = container.getBottomRightComp(bound.x, bound.y, bound.height, bound.width); + int ry = rcomp.getY(); + int rh = rcomp.getHeight(); + int rw = rcomp.getWidth(); + int dh = ry + rh - bound.y - bound.height - actualVal; + if (dh < minHeight) { + dealDirectionABottom(rcomp.getBounds(), -dh - actualVal, rcomp); + //调整的时候可能有组件达到最小高度,判断下 + if (rcomp.getHeight() + ry != bound.y + bound.height) { + clearCompsList(); + initCompsList(); + dh = ry + rcomp.getHeight() - bound.y - bound.height - actualVal; + dealDirectionABottom(rcomp.getBounds(), minHeight - dh, rcomp); + rh = rcomp.getHeight(); + int rx = rcomp.getX(); + rcomp.setBounds(rx, bound.y + bound.height + actualVal, rw, minHeight); + recalculateChildrenSize(rx, ry, rw, rh - minHeight - actualVal); + recalculateChildrenSize(bound.x, bound.y, bound.width, bound.height); + return; + } + } else { + if (ry == bound.y) { + rcomp.setBounds(rcomp.getX(), bound.y + bound.height + actualVal, rw, dh); + bound.width += rw; + bound.width += actualVal; + } else { + recalculateChildrenSize(bound.x, bound.y, bound.width, ry - bound.y - actualVal); + recalculateChildrenSize(bound.x, ry, bound.width, bound.height - ry + bound.y); + return; + } + } + recalculateChildrenSize(bound.x, bound.y, bound.width, bound.height); + } + + private int getMinWidth(List comps) { + if (comps.isEmpty()) { + return 0; + } + int minWidth = container.getWidth() - margin.getLeft() - margin.getRight(); + for (int i = 0, size = comps.size(); i < size; i++) { + minWidth = minWidth > comps.get(i).getWidth() ? comps.get(i).getWidth() : minWidth; + } + return minWidth; + } + + private int getMinHeight(List comps) { + if (comps.isEmpty()) { + return 0; + } + int minH = container.getHeight() - margin.getTop() - margin.getBottom(); + for (int i = 0, size = comps.size(); i < size; i++) { + minH = minH > comps.get(i).getHeight() ? comps.get(i).getHeight() : minH; + } + return minH; + } + + // 删除时计算待删除组件上下侧的组件是否何其对齐 + private int getAllHeight(List comps) { + int allHeight = 0; + if (comps.isEmpty()) { + return allHeight; + } + int n = comps.size(); + for (int i = 0; i < n; i++) { + allHeight += comps.get(i).getHeight(); + } + allHeight += (n - 1) * actualVal; + return allHeight; + } + + private int getAllWidth(List comps) { + int allWidth = 0; + if (comps.isEmpty()) { + return allWidth; + } + int n = comps.size(); + for (int i = 0; i < n; i++) { + allWidth += comps.get(i).getWidth(); + } + allWidth += (n - 1) * actualVal; + return allWidth; + } + + /** + * 获取有哪些相关联的组件 + */ + protected void calculateRelatedComponent(int objX, int objY, int objWidth, int objHeight) { + int count = container.getComponentCount(); + for (int i = 0; i < count; i++) { + Component relatComp = container.getComponent(i); + int rx = relatComp.getX(); + int ry = relatComp.getY(); + int rwidth = relatComp.getWidth(); + int rheight = relatComp.getHeight(); + int verti = ry - objY; + int hori = rx - objX; + boolean isHori = verti >= 0 && objHeight >= (rheight + verti); + boolean isVerti = hori >= 0 && objWidth >= (rwidth + hori); + if (isHori && (objX + objWidth + actualVal) == rx) { + rightComps.add(relatComp); + } else if (isHori && objX == (rx + rwidth + actualVal)) { + leftComps.add(relatComp); + } else if (isVerti && (objY + objHeight + actualVal) == ry) { + downComps.add(relatComp); + } else if (isVerti && objY == (ry + rheight + actualVal)) { + upComps.add(relatComp); + } + } + } + + /** + * 拖拽组件时遍历某一侧组件得到该侧组件能够缩放的最小宽度,tab布局最小宽度 = 内部组件数 * 单个组件最小宽度 + * + * @param list 某一侧组件的集合 如:leftComps + * @return int 最小宽度 + */ + private int getCompsMinWidth(List list) { + return getMaxCompsNum(list, true) * WLayout.MIN_WIDTH; + } + + /** + * 拖拽组件遍历某一侧得到该侧组件能够缩放的最小高度,tab布局最小高度 = 内部组件数 * 单个组件最小高度 + 标题高度 + * + * @param list 某一侧组件集合 + * @return int 最小高度 + */ + private int getCompsMinHeight(List list) { + for (int i = 0; i < list.size(); i++) { + XCreator creator = (XCreator) list.get(i); + ArrayList childrenList = creator.getTargetChildrenList(); + if (!childrenList.isEmpty()) { + return getMaxCompsNum(list, false) * WLayout.MIN_HEIGHT + WCardMainBorderLayout.TAB_HEIGHT; + } + } + return WLayout.MIN_HEIGHT; + } + + /** + * 根据子组件的横(纵)坐标获取某一侧组件的最大内部组件数 + * + * @param list 某一侧组件集合 + * @param isHor 是否以横坐标为准 + * @return int 最大内部组件数 + */ + private int getMaxCompsNum(List list, boolean isHor) { + int maxCompNums = 1; + for (int i = 0, size = list.size(); i < size; i++) { + XCreator creator = (XCreator) list.get(i); + ArrayList childrenList = creator.getTargetChildrenList(); + int count = childrenList.size(); + if (count > 0) { + for (int j = 0; j < count; j++) { + XWTabFitLayout tabLayout = (XWTabFitLayout) childrenList.get(j); + int[] positions = isHor ? tabLayout.getHors(true) : tabLayout.getVeris(true); + int compNums = positions.length - 1; + maxCompNums = Math.max(compNums, maxCompNums); + } + } + } + return maxCompNums; + } + + /** + * 根据偏移量缩放内部组件大小,(tab布局用到) + * + * @param creator tab布局 + * @param offset 偏移量 + * @param isHor 是否为横向拖拽 + */ + private void adjustCompsSize(XCreator creator, int offset, boolean isHor) { + ArrayList childrenList = creator.getTargetChildrenList(); + int size = childrenList.size(); + if (size > 0) { + for (int j = 0; j < size; j++) { + XWTabFitLayout tabLayout = (XWTabFitLayout) childrenList.get(j); + tabLayout.setBackupBound(tabLayout.getBounds()); + int refSize = isHor ? tabLayout.getWidth() : tabLayout.getHeight(); + double percent = (double) offset / refSize; + if (percent < 0 && !tabLayout.canReduce(percent)) { + return; + } + setAdjustedSize(tabLayout, offset, isHor); + for (int m = 0; m < tabLayout.getComponentCount(); m++) { + XCreator childCreator = tabLayout.getXCreator(m); + BoundsWidget wgt = (BoundsWidget) tabLayout.toData().getBoundsWidget(childCreator.toData()); + wgt.setBounds(tabLayout.getComponent(m).getBounds()); + } + adjustCreatorsSize(percent, tabLayout, isHor); + } + + } + } + + // 纵向拖拽,先将tab布局的高度设置为拖拽后的实际高度 + private void setAdjustedHeight(XWTabFitLayout tabLayout, int offset) { + tabLayout.setSize(tabLayout.getWidth(), tabLayout.getHeight() + offset); + } + + // 横向拖拽,先将tab布局的宽度设置为拖拽后的实际宽度 + private void setAdjustedSize(XWTabFitLayout tabLayout, int offset, boolean isHor) { + if (offset < 0) { + // 缩放时需要备份原tab布局宽高 + tabLayout.setReferDim(new Dimension(tabLayout.getWidth(), tabLayout.getHeight())); + } + if (isHor) { + tabLayout.setSize(tabLayout.getWidth() + offset, tabLayout.getHeight()); + return; + } + setAdjustedHeight(tabLayout, offset); + } + + // 按照拖拽偏移量,对tab布局进行缩放 + private void adjustCreatorsSize(double percent, XWTabFitLayout tabLayout, boolean isHor) { + if (isHor) { + tabLayout.adjustCreatorsWidth(percent); + return; + } + tabLayout.adjustCreatorsHeight(percent); + } + + + /** + * 删除或拉伸控件右边框 调整右侧组件位置大小 + * + * @param objX 调整后的坐标x + * @param objWidth 调整后的宽度 + */ + protected void CalculateRightRelatComponent(int objX, int objWidth) { + int count = rightComps.size(); + for (int i = 0; i < count; i++) { + XCreator creator = (XCreator) rightComps.get(i); + adjustCompsSize(creator, objWidth, true); + int ry = creator.getY(); + int rwidth = creator.getWidth(); + int rheight = creator.getHeight(); + creator.setLocation(objX, ry); + creator.setSize(rwidth + objWidth, rheight); + } + } + + /** + * 实际拖拽偏移量是否超出了可调整的宽度范围 + * + * @param offset 实际偏移量 + * @return boolean 是否超出调整范围 + */ + private boolean isBeyondAdjustWidthScope(int offset) { + boolean isBeyondScope = false; + isBeyondScope = offset < 0 ? isBeyondWidthScope(offset, leftComps) : isBeyondWidthScope(offset, rightComps); + return isBeyondScope; + } + + // 实际拖拽偏移量是否超出某一侧的可调整宽度 + private boolean isBeyondWidthScope(int offset, List compsList) { + int compMinWidth = getCompsMinWidth(compsList); + for (int i = 0; i < compsList.size(); i++) { + XCreator creator = (XCreator) compsList.get(i); + if (Math.abs(offset) > (creator.getWidth() - compMinWidth)) { + return true; + } + } + return false; + } + + /** + * 删除或拉伸控件左边框时 调整左侧的组件位置大小; + */ + protected boolean CalculateLefttRelatComponent(int objWidth) { + if (isBeyondAdjustWidthScope(objWidth)) { + return false; + } + int count = leftComps.size(); + for (int i = 0; i < count; i++) { + XCreator creator = (XCreator) leftComps.get(i); + adjustCompsSize(creator, objWidth, true); + int rwidth = creator.getWidth(); + int rheight = creator.getHeight(); + creator.setSize(rwidth + objWidth, rheight); + } + return true; + } + + /** + * 删除或拉伸下边框 调整下方的组件位置大小 + */ + protected void CalculateDownRelatComponent(int objY, int objHeight) { + int count = downComps.size(); + for (int i = 0; i < count; i++) { + XCreator creator = (XCreator) downComps.get(i); + adjustCompsSize(creator, objHeight, false); + int rx = creator.getX(); + int rwidth = creator.getWidth(); + int rheight = creator.getHeight(); + creator.setLocation(rx, objY); + creator.setSize(rwidth, rheight + objHeight); + } + } + + /** + * 实际拖拽偏移量是否超出了可调整的高度范围 + * + * @param offset 实际偏移量 + * @return boolean 是否超出调整范围 + */ + private boolean isBeyondAdjustHeightScope(int offset) { + boolean isBeyondScope = false; + isBeyondScope = offset < 0 ? isBeyondHeightScope(offset, upComps) : isBeyondHeightScope(offset, downComps); + return isBeyondScope; + } + + // 实际拖拽偏移量是否超出某一侧的可调整高度 + private boolean isBeyondHeightScope(int offset, List compsList) { + int minHeight = getCompsMinHeight(compsList); + for (int i = 0; i < compsList.size(); i++) { + XCreator creator = (XCreator) compsList.get(i); + if (Math.abs(offset) > (creator.getHeight() - minHeight)) { + return true; + } + } + return false; + } + + /** + * 删除或拉伸上边框 调整上方的组件位置大小 + */ + protected boolean CalculateUpRelatComponent(int objHeight) { + if (isBeyondAdjustHeightScope(objHeight)) { + return false; + } + int count = upComps.size(); + for (int i = 0; i < count; i++) { + XCreator creator = (XCreator) upComps.get(i); + adjustCompsSize(creator, objHeight, false); + int rwidth = creator.getWidth(); + int rheight = creator.getHeight(); + creator.setSize(rwidth, rheight + objHeight); + } + return true; + } + + /** + * 不调整,只计算位置 + * + * @return child的位置 + */ + public int[] getChildPosition(Component currentComp, XCreator child, int x, int y) { + return super.getChildPosition(currentComp, child, x, y); + } + + @Override + public ConstraintsGroupModel getLayoutConstraints(XCreator creator) { + return new FRFitLayoutConstraints((XWFitLayout) container, creator); + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java b/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java index 088f29a0a..572ac721e 100644 --- a/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java +++ b/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.utils.ComponentUtils; 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.*; @@ -24,184 +25,197 @@ public abstract class AccessDirection implements Direction { private int ymin; private int xmin; - abstract int getCursor(); - - protected abstract Rectangle getDraggedBounds(int dx, int dy, Rectangle currentBounds, FormDesigner designer, - Rectangle oldBounds); - - protected int[] sorption(int x, int y, Rectangle currentBounds, FormDesigner designer) { - // 自适应布局不需要吸附线,但需要对齐线,对齐线后面处理 - if (!designer.hasWAbsoluteLayout()) { - designer.getStateModel().setEquidistantLine(null); - designer.getStateModel().setXAbsorptionline(null); - designer.getStateModel().setYAbsorptionline(null); - return new int[]{x, y}; - } else { - Point relativePoint = getRelativePoint(x, y, currentBounds, designer); - sorptionPoint(relativePoint, currentBounds, designer); - return new int[]{relativePoint.x, relativePoint.y}; - } - - } - - protected Point getRelativePoint(int x, int y, Rectangle currentBounds, FormDesigner designer) { - if (x < 0) { - x = 0; - } else if (x > designer.getRootComponent().getWidth() && designer.getSelectionModel().hasSelectionComponent()) { - x = designer.getRootComponent().getWidth(); - } + abstract int getCursor(); + + protected abstract Rectangle getDraggedBounds(int dx, int dy, Rectangle current_bounds, FormDesigner designer, + Rectangle oldbounds); + + protected int[] sorption(int x, int y,Rectangle current_bounds, FormDesigner designer) { + // 自适应布局不需要吸附线,但需要对齐线,对齐线后面处理 + if (!designer.hasWAbsoluteLayout()) { + designer.getStateModel().setEquidistantLine(null); + designer.getStateModel().setXAbsorptionline(null); + designer.getStateModel().setYAbsorptionline(null); + return new int[] { x, y }; + } else { + int posy = current_bounds.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 current_bounds,FormDesigner designer) { + if (x < 0) { + x = 0; + } else if (x > designer.getRootComponent().getWidth() && designer.getSelectionModel().hasSelectionComponent()) { + x = designer.getRootComponent().getWidth(); + } //参数面板可以无下限拉长 - if (y < 0) { - y = 0; - } else if (y > designer.getRootComponent().getHeight() + designer.getParaHeight() && designer.getSelectionModel().hasSelectionComponent() + if (y < 0) { + y = 0; + } else if (y > designer.getRootComponent().getHeight() + designer.getParaHeight() && designer.getSelectionModel().hasSelectionComponent() && !designer.getSelectionModel().getSelection().getSelectedCreator().acceptType(XWParameterLayout.class)) { - y = designer.getRootComponent().getHeight() + designer.getParaHeight(); - } - return new Point(x, y); - } - - protected void sorptionPoint(Point point, Rectangle currentBounds, FormDesigner designer) { - boolean findInX = currentBounds.getWidth() <= MoveUtils.SORPTION_UNIT; - boolean findInY = currentBounds.getHeight() <= MoveUtils.SORPTION_UNIT; - WAbsoluteLayout layout = getLayout(designer); - FormSelection selection = designer.getSelectionModel().getSelection(); - for (int i = 0, count = layout.getWidgetCount(); i < count; i++) { - BoundsWidget temp = (BoundsWidget) layout.getWidget(i); - if (!temp.isVisible() || selection.contains(temp.getWidget())) { - continue; - } - Rectangle bounds = getWidgetRelativeBounds(temp.getBounds(), selection); - if (!findInX) { - int x1 = bounds.x; - if (Math.abs(x1 - point.x) <= MoveUtils.SORPTION_UNIT) { - point.x = x1; - findInX = true; - } - int x2 = bounds.x + bounds.width; - if (Math.abs(x2 - point.x) <= MoveUtils.SORPTION_UNIT) { - point.x = x2; - findInX = true; - } - } - if (!findInY) { - int y1 = bounds.y; - if (Math.abs(y1 - point.y) <= MoveUtils.SORPTION_UNIT) { - point.y = y1; - findInY = true; - } - int y2 = bounds.y + bounds.height; - if (Math.abs(y2 - point.y) <= MoveUtils.SORPTION_UNIT) { - point.y = y2; - findInY = true; - } - - } - if (findInX && findInY) { - break; - } - - } - setDesignerStateModelProperties(designer, findInX, findInY, currentBounds, point); - } - - private void setDesignerStateModelProperties(FormDesigner designer, boolean findInX, boolean findInY, Rectangle - currentBounds, Point point) { - designer.getStateModel().setXAbsorptionline(findInX && currentBounds.getWidth() > MoveUtils.SORPTION_UNIT ? Absorptionline.createXAbsorptionline(point.x) : null); - designer.getStateModel().setYAbsorptionline(findInY && currentBounds.getHeight() > MoveUtils.SORPTION_UNIT ? Absorptionline.createYAbsorptionline(point.y) : null); - designer.getStateModel().setEquidistantLine(null); - } - - private Rectangle getWidgetRelativeBounds(Rectangle bounds, FormSelection selection) { - Rectangle relativeRec = new Rectangle(bounds.x, bounds.y, bounds.width, bounds.height); - XLayoutContainer parent = XCreatorUtils.getParentXLayoutContainer(selection.getSelectedCreator()); - if (parent == null) { - return relativeRec; - } - Rectangle rec = ComponentUtils.getRelativeBounds(parent); - relativeRec.x += rec.x; - relativeRec.y += rec.y; - return relativeRec; - } - - - private WAbsoluteLayout getLayout(final FormDesigner designer) { + y = designer.getRootComponent().getHeight() + designer.getParaHeight(); + } + return new Point(x, y); + } + + protected void sorptionPoint(Point point, Rectangle current_bounds,FormDesigner designer) { + boolean findInX = current_bounds.getWidth() <= MoveUtils.SORPTION_UNIT ? true : false; + boolean findInY = current_bounds.getHeight() <= MoveUtils.SORPTION_UNIT ? true : false; + WAbsoluteLayout layout =getLayout(designer); + FormSelection selection = designer.getSelectionModel().getSelection(); + boolean isWidgetsIntersect = false; + for (int i = 0, count = layout.getWidgetCount(); i < count; i++) { + BoundsWidget temp = (BoundsWidget) layout.getWidget(i); + if (!temp.isVisible() || selection.contains(temp.getWidget())) { + continue; + } + Rectangle bounds = getWidgetRelativeBounds(temp.getBounds(), selection); + if (!findInX) { + int x1 = bounds.x; + if (Math.abs(x1 - point.x) <= MoveUtils.SORPTION_UNIT) { + point.x = x1; + findInX = true; + } + int x2 = bounds.x + bounds.width; + if (Math.abs(x2 - point.x) <= MoveUtils.SORPTION_UNIT) { + point.x = x2; + findInX = true; + } + } + if (!findInY) { + int y1 = bounds.y; + if (Math.abs(y1 - point.y) <= MoveUtils.SORPTION_UNIT) { + point.y = y1; + findInY = true; + } + int y2 = bounds.y + bounds.height; + if (Math.abs(y2 - point.y) <= MoveUtils.SORPTION_UNIT) { + point.y = y2; + findInY = true; + } + + } + if (findInX && findInY) { + break; + } + + if (current_bounds.intersects(bounds) && !(layout instanceof WParameterLayout)){ + isWidgetsIntersect = true; + } + } + 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().setYAbsorptionline(findInY && current_bounds.getHeight() > MoveUtils.SORPTION_UNIT ? Absorptionline.createYAbsorptionline(point.y) : null); + designer.getStateModel().setEquidistantLine(null); + } + + private Rectangle getWidgetRelativeBounds(Rectangle bounds, FormSelection selection){ + Rectangle relativeRec = new Rectangle(bounds.x, bounds.y, bounds.width, bounds.height); + XLayoutContainer parent = XCreatorUtils.getParentXLayoutContainer(selection.getSelectedCreator()); + if (parent == null) { + return relativeRec; + } + Rectangle rec = ComponentUtils.getRelativeBounds(parent); + relativeRec.x += rec.x; + relativeRec.y += rec.y; + 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( designer.getTarget().getContainer()); WAbsoluteLayout layout; - if (formLayoutContainer.acceptType(XWBorderLayout.class)) {//看起来这边的作用应该是为了区别cpt(得到XWParameterLayout)还是frm(得到XWBorderLayout)的参数界面 - Container container = designer.getSelectionModel().getSelection().getSelectedCreator().getParent(); - if (container instanceof XWAbsoluteLayout) { - layout = ((XWAbsoluteLayout) container).toData(); - } else { - layout = (WAbsoluteLayout) designer.getParaComponent().toData(); - } - } else { + if (formLayoutContainer.acceptType(XWBorderLayout.class)){//看起来这边的作用应该是为了区别cpt(得到XWParameterLayout)还是frm(得到XWBorderLayout)的参数界面 + Container container = designer.getSelectionModel().getSelection().getSelectedCreator().getParent(); + if(container instanceof XWAbsoluteLayout){ + layout = ((XWAbsoluteLayout)container).toData(); + } + else { + layout = (WAbsoluteLayout) designer.getParaComponent().toData(); + } + } else{ layout = (WAbsoluteLayout) designer.getTarget().getContainer(); } - return layout; + return layout; } - /** - * 拖拽 - * - * @param dx 坐标x - * @param dy 坐标y - * @param designer 设计界面 - */ - public void drag(int dx, int dy, FormDesigner designer) { - 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; - } + /** + * 拖拽 + * @param dx 坐标x + * @param dy 坐标y + * @param designer 设计界面 + */ + public void drag(int dx, int dy, FormDesigner designer) { + Rectangle rec = getDraggedBounds(dx, dy, designer.getSelectionModel().getSelection().getRelativeBounds(), designer, designer.getSelectionModel().getSelection().getBackupBounds()); //设定控件最小高度21,因每次拖曳至少移动1,防止控件高度等于21时,拖曳导致rec.y的变化使得控件不停的向上或向下移动。 - if (rec.height == MINHEIGHT) { + if(rec.height == MINHEIGHT){ ymin = rec.y; } - if (rec.height == MINHEIGHT - 1) { + if(rec.height == MINHEIGHT - 1){ ymin = ymin == rec.y ? rec.y : rec.y - 1; } - if (rec.height < MINHEIGHT) { + if(rec.height < MINHEIGHT){ rec.height = MINHEIGHT; rec.y = ymin; } // 增加下宽度也设最小为21 if (rec.width == MINWIDTH) { - xmin = rec.x; + xmin = rec.x; } - if (rec.width == MINWIDTH - 1) { - xmin = xmin == rec.x ? rec.x : rec.x - 1; + if(rec.width == MINWIDTH - 1){ + xmin = xmin == rec.x ? rec.x : rec.x - 1; } if (rec.width < MINWIDTH) { - rec.width = MINWIDTH; - rec.x = xmin; - } - - } - - /** - * 更新鼠标指针形状 - * - * @param formEditor 设计界面组件 - */ - public void updateCursor(FormDesigner formEditor) { - - // 调用位置枚举的多态方法getCursor获取鼠标形状 - int type = getCursor(); - - if (type != formEditor.getCursor().getType()) { - // 设置当前形状 - formEditor.setCursor(Cursor.getPredefinedCursor(type)); + rec.width = MINWIDTH; + rec.x = xmin; } - } - - /** - * 生成组件备用的bound - * - * @param formEditor 设计界面组件 - */ - public void backupBounds(FormDesigner formEditor) { - formEditor.getSelectionModel().getSelection().backupBounds(); - } + if(rec != null) { + designer.getSelectionModel().getSelection().setSelectionBounds(rec, designer); + } + } + + /** + * 更新鼠标指针形状 + * @param formEditor 设计界面组件 + */ + 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(); + } } \ No newline at end of file From 9d5bdf6f595604b4ad0e39772736b1e733b1f313 Mon Sep 17 00:00:00 2001 From: syoki Date: Tue, 11 Apr 2017 00:18:09 +0900 Subject: [PATCH 265/343] =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=20design=E9=83=A8=E5=88=86=20=E5=BA=84=E5=A5=87=20201?= =?UTF-8?q?704110018?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/locale/designer_ja_JP.properties | 44 +++++++++++-------- 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index d74f09b9d..37d913e73 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -366,24 +366,30 @@ FR-Designer_XMLA_Get_Catalog=\u30AB\u30BF\u30ED\u30B0\u3092\u691C\u7D22\u3059\u3 FR-Designer_XMLA_Not_NULL=\u3053\u3053\u306F\u7A7A\u6B04\u306B\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093 FR-Designer_Column-Axis=\u5217\u8EF8 FR-Designer_LiteCondition_Common=\u4E00\u822C -FR-Designer_LiteCondition_Formula=\u516C\u5F0F +FR-Designer_LiteCondition_Formula=\u6570\u5F0F FR-Designer_LiteCondition_ConditionB-AND=\u30A2\u30F3\u30C9(AND) FR-Designer_LiteCondition_ConditionB-OR=\u30AA\u30A2(OR) FR-Designer_LiteCondition_Common_Condition=\u666E\u901A\u6761\u4EF6 -FR-Designer_LiteCondition_Formula_Condition=\u516C\u5F0F\u6761\u4EF6 +FR-Designer_LiteCondition_Formula_Condition=\u6570\u5F0F\u6761\u4EF6 FR-Designer_LiteCondition_Define=\u5B9A\u7FA9 +FR-Designer_Normal=\u6B63\u5E38 +FR-Designer_Alert=\u30A2\u30E9\u30FC\u30C8 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_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_Clear_All=\u5168\u3066\u3092\u30AF\u30EA\u30A2 +FR-Designer_Copy=\u30B3\u30D4\u30FC +FR-Designer_Log=\u30ED\u30B0 +FR-Designer-Plugin_Expire_Dialog_Title=\u30D7\u30E9\u30B0\u30A4\u30F3\u306F\u671F\u9650\u5207\u308C +FR-Designer-Plugin_Expire_Dialog_Text=\u30D7\u30E9\u30B0\u30A4\u30F3\u306F\u6709\u52B9\u671F\u9650\u304C\u5207\u308C\u3066\u3044\u307E\u3059\u3001\u30D5\u30A1\u30F3\u30E9\u30F3\u30A2\u30D7\u30EA\u30BB\u30F3\u30BF\u30FC\u3078\u8CFC\u5165\u3057\u3066\u304F\u3060\u3055\u3044\u3002 +FR-Designer-Plugin_Finerest_Addon=\u30D5\u30A1\u30F3\u30E9\u30F3\u30A2\u30D7\u30EA\u30BB\u30F3\u30BF\u30FC FR-Designer_Performance_First=\u6027\u80FD\u512A\u5148 FR-Designer_Total_N_Grade=\u5168\u90E8\u3067\:${N}\u5C64 FR-Designer_time(s)=\u56DE -FR-Designer_General=\u5E38\u7528 -FR-Designer_Advanced=\u9AD8\u7D1A +FR-Designer_General=\u901A\u5E38 +FR-Designer_Advanced=\u8A73\u7D30 +FR-Designer_Validate=\u691C\u8A3C FR-Designer_Oracle=\u3059\u3079\u3066\u306E\u30C6\u30FC\u30D6\u30EB FR-Designer_Product_improve=\u88FD\u54C1\u6539\u5584 -FR-Designer_Join_Product_improve=\u88FD\u54C1\u6539\u5584\u30D7\u30E9\u30F3\u306B\u52A0\u3048\u308B +FR-Designer_Join_Product_improve=\u88FD\u54C1\u6539\u5584\u30D7\u30E9\u30F3\u306B\u5165\u308B FR-Designer_Preference-Function=\u30D5\u30A1\u30F3\u30AF\u30B7\u30E7\u30F3\u8A2D\u5B9A FR-Designer_max_undo_limit=\u6700\u5927\u53D6\u308A\u6D88\u3057\u56DE\u6570 FR-Designer_Surport_String_To_Formula=\u30AD\u30E3\u30E9\u30AF\u30BF\u30FC\u6587\u5B57\u5217\u7DE8\u96C6\u3092\u516C\u5F0F\u3068\u3059\u308B\u3053\u3068\u306B\u30B5\u30DD\u30FC\u30C8 @@ -539,24 +545,26 @@ 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_No=\u3044\u3044\u3048 FR-Designer_Pagination=\u30DA\u30FC\u30B8\u30F3\u30B0 -FR-Designer_DS_TableData=\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9 +FR-Designer_DS_TableData=\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8 FR-Designer_Parameter-Formula=\u6570\u5F0F FR-Designer_Background_Null=\u80CC\u666F\u306A\u3057 FR-Designer_Background_Color=\u8272 -FR-Designer_Background_Texture=\u67C4 -FR-Designer_Background_Pattern=\u6A21\u69D8 -FR-Designer_Background_Gradient_Color=\u30B0\u30E9\u30C7\u30FC\u30B7\u30E7\u30F3\u8272 -FR-Designer_Background_Image=\u5199\u771F +FR-Designer_Background_Texture=\u30C6\u30AF\u30B9\u30C1\u30E3 +FR-Designer_Background_Pattern=\u30D1\u30BF\u30FC\u30F3 +FR-Designer_Background_Gradient_Color=\u30B0\u30E9\u30C7\u30FC\u30B7\u30E7\u30F3 +FR-Designer_Background_Image=\u753B\u50CF FR-Designer_Background_Clear=\u30AF\u30EA\u30A2 -FR-Designer_Background_Image_Select=\u5199\u771F\u3092\u9078\u629E +FR-Designer_Background_Image_Select=\u753B\u50CF\u9078\u629E FR-Designer_Initial_Background_Tips=\u30DC\u30BF\u30F3\u306E\u521D\u671F\u80CC\u666F -FR-Designer_Mouse_Move_Tips=\u30DE\u30A6\u30B9\u304C\u30DC\u30BF\u30F3\u306B\u79FB\u3059\u6642\u306E\u80CC\u666F -FR-Designer_Mouse_Click_Tips=\u30DE\u30A6\u30B9\u304C\u30DC\u30BF\u30F3\u306B\u79FB\u3059\u6642\u306E\u80CC\u666F +FR-Designer_Mouse_Move_Tips=\u30DE\u30A6\u30B9\u304C\u30DC\u30BF\u30F3\u306B\u79FB\u3059\u6642\u5909\u5316\u3059\u308B\u80CC\u666F +FR-Designer_Mouse_Click_Tips=\u30DC\u30BF\u30F3\u3092\u30AF\u30EA\u30C3\u30AF\u3059\u308B\u6642\u5909\u5316\u3059\u308B\u80CC\u666F FR-Designer-Move_Tab_First=\u30C8\u30C3\u30D7\u306B\u79FB\u3059 FR-Designer-Move_Tab_End=\u6700\u5F8C\u306B\u79FB\u3059 FR-Designer-Move_Tab_Next=\u5F8C\u308D\u306B\u79FB\u3059 FR-Designer-Move_Tab_Prev=\u524D\u306B\u79FB\u3059 -FR-Designer_AxisReversed=\u8EF8\u9006\u914D\u5217 +FR-Designer_AxisReversed=\u8EF8\u9006\u9806 FR-Designer_Logarithmic=\u5BFE\u6570\u76EE\u76DB\u308A FR-Designer_Chart_Log_Base=\u5E95\u6570 -FR-Designer_Chart_F_Radar_Axis=\u5782\u76F4\u8EF8 \ No newline at end of file +FR-Designer_Chart_F_Radar_Axis=\u5782\u76F4\u8EF8 +FR-Designer_Too_Large_To_Paste=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306E\u30B5\u30A4\u30BA\u306F\u30DC\u30FC\u30C0\u30FC\u306B\u8D85\u3048\u305F\u306E\u3067\u3001\u8CBC\u308A\u4ED8\u3051\u3067\u304D\u307E\u305B\u3093\uFF01 +FR-Designer_Too_Small_To_Paste=\u8A72\u5F53\u51E6\u306B\u8CBC\u308A\u4ED8\u3051\u3067\u304D\u307E\u305B\u3093\u3001\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306E\u30B5\u30A4\u30BA\u306F\u9AD8\u3059\u304E\uFF01 \ No newline at end of file From b67778a4ded602bd9c9434b83b234268c8054917 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Tue, 11 Apr 2017 10:37:41 +0800 Subject: [PATCH 266/343] =?UTF-8?q?=E6=97=A0=E4=BB=BB=E5=8A=A1=20=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/designer/beans/models/SelectionModel.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java index 8ef0033ea..5bd159a43 100644 --- a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java +++ b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java @@ -15,8 +15,6 @@ import com.fr.design.mainframe.FormSelection; import com.fr.design.mainframe.FormSelectionUtils; import com.fr.design.utils.ComponentUtils; import com.fr.design.utils.gui.LayoutUtils; -import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; -import com.fr.form.ui.container.cardlayout.WTabFitLayout; import com.fr.stable.ArrayUtils; import java.awt.*; From 6a9cec9bb37f797bb79e6c3bd61e141109a22ca1 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Tue, 11 Apr 2017 10:57:22 +0800 Subject: [PATCH 267/343] =?UTF-8?q?report-1945frm=E6=9C=AC=E5=9C=B0?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E5=A4=8D=E7=94=A8=EF=BC=9A1=E3=80=81?= =?UTF-8?q?=E8=87=AA=E9=80=82=E5=BA=94=E6=88=96=E8=80=85tab=E5=B8=83?= =?UTF-8?q?=E5=B1=80=E6=97=B6=EF=BC=8C=E4=B8=8D=E9=80=89=E4=B8=AD=E7=B2=98?= =?UTF-8?q?=E8=B4=B4=E9=BB=98=E8=AE=A4=E4=B8=BA=E4=B8=8A=E4=B8=8B=E5=B9=B3?= =?UTF-8?q?=E5=88=86=E5=B7=A6=E4=B8=8A=E8=A7=92=E7=9A=84=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=EF=BC=9B2=E3=80=81tab=E5=B8=83=E5=B1=80=EF=BC=88=E6=9C=89?= =?UTF-8?q?=E6=97=A0=E5=8F=82=E6=95=B0=E9=9D=A2=E6=9D=BF=EF=BC=89=E7=B2=98?= =?UTF-8?q?=E8=B4=B4=E4=BD=8D=E7=BD=AE=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer/beans/models/SelectionModel.java | 44 ++++++++++++------- .../design/mainframe/FormSelectionUtils.java | 20 +++++++-- 2 files changed, 45 insertions(+), 19 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java index a70d9b156..dc4ea6a49 100644 --- a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java +++ b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java @@ -136,19 +136,20 @@ public class SelectionModel { if (designer.getClass().equals(FormDesigner.class)) { if (selection.getSelectedCreator() instanceof XWFitLayout) { if (selection.getSelectedCreator().getClass().equals(XWTabFitLayout.class)) { - Rectangle rec = selection.getRelativeBounds(); - //Tab布局 - FormSelectionUtils.paste2Container(designer, (XLayoutContainer) selection.getSelectedCreator(), - clipboard, - rec.x + rec.width / 2, - rec.y + DELTA_X_Y); + XLayoutContainer container = (XLayoutContainer) selection.getSelectedCreator(); + //tab布局编辑器内部左上角第一个坐标点 + int leftUpX = container.toData().getMargin().getLeft() + 1; + int leftUpY = container.toData().getMargin().getTop() + 1; + //选中第一个坐标点坐在的组件 + selection.setSelectedCreator((XCreator) container.getComponentAt(leftUpX, leftUpY)); + pasteFromClipBoard(); } else { - Rectangle rec = selection.getRelativeBounds(); - //自适应布局 - FormSelectionUtils.paste2Container(designer, designer.getRootComponent(), - clipboard, - rec.x + rec.width / 2, - rec.y + DELTA_X_Y); + //自适应布局编辑器内部左上角第一个坐标点 + int leftUpX = designer.getRootComponent().toData().getMargin().getLeft() + 1; + int leftUpY = designer.getRootComponent().toData().getMargin().getTop() + 1; + //选中第一个坐标点坐在的组件 + selection.setSelectedCreator((XCreator) designer.getRootComponent().getComponentAt(leftUpX, leftUpY)); + pasteFromClipBoard(); } } else { //绝对布局 @@ -178,12 +179,23 @@ public class SelectionModel { container = XCreatorUtils.getParentXLayoutContainer(selection.getSelectedCreator()); if (container != null && selection.getSelectedCreator().getParent() instanceof XWFitLayout) { //自适应布局 + Rectangle selectionRec = selection.getRelativeBounds(); + //获取父容器位置,补充因参数面板高度导致的位置坐标计算偏移 Rectangle containerRec = ComponentUtils.getRelativeBounds(container); - //计算自适应布局位置 - int positionX = selectionRec.x - containerRec.x + selectionRec.width / 2; - int positionY = (int) (selectionRec.y - containerRec.y + selectionRec.height * OFFSET_RELATIVE); - + int positionX, positionY; + + if (container.getClass().equals(XWTabFitLayout.class)) { + //tab内部粘贴不补充高度偏移 + //且不计算参数面板造成的影响,因为在 + //@see com.fr.design.designer.beans.adapters.layout.FRTabFitLayoutAdapter#addBean中做了 + positionX = selectionRec.x + selectionRec.width / 2; + positionY = (int) (selectionRec.y + selectionRec.height * OFFSET_RELATIVE); + } else { + //计算自适应布局位置 + positionX = selectionRec.x - containerRec.x + selectionRec.width / 2; + positionY = (int) (selectionRec.y - containerRec.y + selectionRec.height * OFFSET_RELATIVE); + } FormSelectionUtils.paste2Container(designer, container, clipboard, positionX, positionY); } else if (container != null && selection.getSelectedCreator().getParent() instanceof XWAbsoluteLayout) { //绝对布局 diff --git a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java index 79f52519e..1978e8432 100644 --- a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java +++ b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java @@ -3,8 +3,10 @@ package com.fr.design.mainframe; import com.fr.base.FRContext; import com.fr.design.designer.beans.LayoutAdapter; import com.fr.design.designer.beans.adapters.layout.AbstractLayoutAdapter; +import com.fr.design.designer.beans.adapters.layout.FRTabFitLayoutAdapter; import com.fr.design.designer.beans.events.DesignerEvent; import com.fr.design.designer.creator.*; +import com.fr.design.utils.ComponentUtils; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WTitleLayout; import com.fr.general.ComparatorUtils; @@ -83,14 +85,26 @@ public class FormSelectionUtils { * 相对布局粘贴 */ private static void relativePaste(FormDesigner designer, FormSelection clipboard, LayoutAdapter adapter, int x, int y) { + + //@see FRTabFitLayoutAdapter + Rectangle tabContainerRect = ComponentUtils.getRelativeBounds(designer.getSelectionModel().getSelection() + .getSelectedCreator().getParent()); + designer.getSelectionModel().getSelection().reset(); for (XCreator creator : clipboard.getSelectedCreators()) { try { Widget copied = copyWidget(designer, creator); XCreator copiedCreator = XCreatorUtils.createXCreator(copied, creator.getSize()); - if (!adapter.accept(copiedCreator, x, y)) { - designer.showMessageDialog(Inter.getLocText("FR-Designer_Too_Small_To_Paste")); - return; + if (adapter.getClass().equals(FRTabFitLayoutAdapter.class)) { + if (!adapter.accept(copiedCreator, x - tabContainerRect.x, y - tabContainerRect.y)) { + designer.showMessageDialog(Inter.getLocText("FR-Designer_Too_Small_To_Paste")); + return; + } + } else { + if (!adapter.accept(copiedCreator, x, y)) { + designer.showMessageDialog(Inter.getLocText("FR-Designer_Too_Small_To_Paste")); + return; + } } boolean addSuccess = adapter.addBean(copiedCreator, x, y); if (addSuccess) { From cc99e7d54fa965cfe3e25506ee44c75c7e64d3e2 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Tue, 11 Apr 2017 15:07:00 +0800 Subject: [PATCH 268/343] =?UTF-8?q?=E6=97=A0=E4=BB=BB=E5=8A=A1=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer/creator/XWAbsoluteLayout.java | 887 +++++++++--------- 1 file changed, 451 insertions(+), 436 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java b/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java index 4ed1b6549..1854b91f4 100644 --- a/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java @@ -34,322 +34,335 @@ import com.fr.general.Inter; */ public class XWAbsoluteLayout extends XLayoutContainer { - private static final int EDIT_BTN_WIDTH = 60; - private static final int EDIT_BTN_HEIGHT = 24; - private int minWidth = WLayout.MIN_WIDTH; - private int minHeight = WLayout.MIN_HEIGHT; - - //由于屏幕分辨率不同,界面上的容器大小可能不是默认的100%,此时拖入组件时,保存的大小按照100%时的计算 - protected double containerPercent = 1.0; - - private HashMap xConnectorMap; - - public XWAbsoluteLayout() { - this(new WAbsoluteLayout(),new Dimension()); - } - - public XWAbsoluteLayout(WAbsoluteLayout widget) { - this(widget,new Dimension()); - } - - public XWAbsoluteLayout(WAbsoluteLayout widget, Dimension initSize) { - super(widget, initSize); - this.xConnectorMap = new HashMap(); - Connector connector; - for (int i = 0; i < widget.connectorCount(); i++) { - connector = widget.getConnectorIndex(i); - xConnectorMap.put(connector, new XConnector(connector, this)); - } - - initPercent(widget); - } - - /** - * 初始化时默认的组件大小 - * - * @return 默认Dimension - */ - @Override - public Dimension initEditorSize() { - return new Dimension(500, 300); - } - - //根据屏幕大小来确定显示的百分比, 1440*900默认100%, 1366*768缩放90% - private void initPercent(WAbsoluteLayout widget){ - Toolkit toolkit = Toolkit.getDefaultToolkit(); - Dimension scrnsize = toolkit.getScreenSize(); - double screenValue = FRScreen.getByDimension(scrnsize).getValue(); - if(screenValue != FormArea.DEFAULT_SLIDER){ - this.setContainerPercent(screenValue / FormArea.DEFAULT_SLIDER); - } - } - - /** - * 返回容器大小的百分比 - * @return the containerPercent - */ - public double getContainerPercent() { - return containerPercent; - } - - /** - * 设置容器大小的百分比 - * @param containerPercent the containerPercent to set - */ - public void setContainerPercent(double containerPercent) { - this.containerPercent = containerPercent; - minWidth = (int) (XWAbsoluteLayout.MIN_WIDTH*containerPercent); - minHeight = (int) (XWAbsoluteLayout.MIN_HEIGHT*containerPercent); - } - - /** - * 返回界面处根据百分比调整后的最小宽度 - * @return 最小宽度 - */ - public int getActualMinWidth() { - return this.minWidth; - } - - /** - * 返回界面处根据百分比调整后的最小高度 - * @return 最小高度 - */ - public int getActualMinHeight() { - return this.minHeight; - } - - /** - * 返回界面处根据百分比调整后的间隔大小(且为偶数) - * @return 间隔 - */ - public int getAcualInterval() { - // adapter那边交叉三等分、删除都要判断是否对齐,所以间隔转为偶数 - int interval = (int) (toData().getCompInterval()*containerPercent); - int val = interval/2; - return val*2; - } - - /** - * 界面容器大小不是默认的时,处理控件的BoundsWidget,且避免出现空隙 - */ - private Rectangle dealWidgetBound(Rectangle rec) { - if (containerPercent == 1.0) { - return rec; - } - rec.x = (int) (rec.x/containerPercent); - rec.y = (int) (rec.y/containerPercent); - rec.width = (int) (rec.width/containerPercent); - rec.height = (int) (rec.height/containerPercent); - return rec; - } - - /** - * 新增删除拉伸后单个组件的BoundsWidget - */ - public void updateBoundsWidget(XCreator xCreator) { - WAbsoluteLayout layout = this.toData(); - if (xCreator.hasTitleStyle()) { - xCreator = (XLayoutContainer)xCreator.getParent(); - } - if (xCreator.acceptType(XWAbsoluteLayout.class)){ - ((XWAbsoluteLayout) xCreator).updateBoundsWidget(); - } - BoundsWidget boundsWidget = layout.getBoundsWidget(xCreator.toData()); - Rectangle rectangle = dealWidgetBound(xCreator.getBounds()); - } - - private Rectangle calculateBound(Rectangle rec, double pw, double ph){ - Rectangle calRec = new Rectangle(0,0,0,0); - calRec.x = (int)(rec.x / pw); - calRec.y = (int)(rec.y / ph); - calRec.width = (int)(rec.width / pw); - calRec.height = (int)(rec.height / ph); - return calRec; - } - - /** - * 新增删除拉伸后每个组件的BoundsWidget - */ - public void updateBoundsWidget() { - WAbsoluteLayout layout = this.toData(); - Rectangle backupBound = this.getBackupBound(); - Rectangle currentBound = this.getBounds(); - if (backupBound != null && layout.getCompState() == WAbsoluteLayout.STATE_FIT) { - double percentW = ((double) backupBound.width / (double) currentBound.width); - double percentH = ((double) backupBound.height / (double) currentBound.height); - for (int index = 0, n = this.getComponentCount(); index < n; index++){ - XCreator creator = (XCreator) this.getComponent(index); - BoundsWidget wgt = layout.getBoundsWidget(creator.toData()); - // 用当前的显示大小计算后调正具体位置 - Rectangle wgtBound = creator.getBounds(); - Rectangle rec = calculateBound(wgtBound, percentW, percentH); - wgt.setBounds(rec); - creator.setBounds(rec); - //绝对布局嵌套,要更新内部的绝对布局 - if (creator.acceptType(XWAbsoluteLayout.class)){ - creator.setBackupBound(wgtBound); - ((XWAbsoluteLayout) creator).updateBoundsWidget(); - } - } - } - } - - /** - * 更新子组件的Bound - * 这边主要用于绝对布局子组件在适应区域选项时 - * 涉及到的不同分辨率下缩放 - * @param minHeight 最小高度 - */ - @Override - public void updateChildBound(int minHeight) { - double prevContainerPercent = FRScreen.getByDimension(toData().getDesigningResolution()).getValue() / FormArea.DEFAULT_SLIDER; - if (toData().getCompState() == 0 && prevContainerPercent != containerPercent) { - for (int i = 0; i < this.getComponentCount(); i++) { - XCreator creator = getXCreator(i); - Rectangle rec = new Rectangle(creator.getBounds()); - rec.x = (int)(rec.x / prevContainerPercent * containerPercent); - rec.y = (int)(rec.y / prevContainerPercent * containerPercent); - rec.height = (int)(rec.height / prevContainerPercent * containerPercent); - rec.width = (int)(rec.width / prevContainerPercent * containerPercent); - BoundsWidget wgt = toData().getBoundsWidget(creator.toData()); - wgt.setBounds(rec); - creator.setBounds(rec); - creator.updateChildBound(minHeight); - } - } - toData().setDesigningResolution(Toolkit.getDefaultToolkit().getScreenSize()); - } - - /** - * 增加对齐线 - * @param connector 对齐线 - */ - public void addConnector(Connector connector) { - xConnectorMap.put(connector, new XConnector(connector, this)); - ((WAbsoluteLayout) data).addConnector(connector); - } - - public XConnector getXConnector(Connector connector) { - return xConnectorMap.get(connector); - } - - /** - * 去除对齐线 - * @param connector 对齐线 - */ - public void removeConnector(Connector connector) { - ((WAbsoluteLayout) data).removeConnector(connector); - xConnectorMap.remove(connector); - } - - /** - * 返回对应的widget容器 - * @return 返回WAbsoluteLayout - */ - @Override - public WAbsoluteLayout toData() { - return (WAbsoluteLayout) data; - } - - @Override - protected String getIconName() { - return "layout_absolute_new.png"; - } - - /** - * 返回默认的容器name - * @return 返回绝对布局容器名 - */ - @Override - public String createDefaultName() { - return "absolute"; - } - - @Override - protected void initLayoutManager() { - this.setLayout(new FRAbsoluteLayout()); - } - - /** - * 是否支持标题样式 - * - * @return 默认false - */ - @Override - public boolean hasTitleStyle() { - return false; - } - - @Override - public void paintComponent(Graphics g) { - super.paintComponent(g); - WAbsoluteLayout layout = (WAbsoluteLayout) data; - Connector[] connector = layout.getConnector(); - for (int i = 0, size = connector.length; i < size; i++) { - connector[i].draw(g); - } - } - - /** - * 转换保存组件信息的wlayout为对应的container - */ - @Override - public void convert() { - isRefreshing = true; - WAbsoluteLayout abs = toData(); - this.removeAll(); - for (int i = 0, count = abs.getWidgetCount(); i < count; i++) { - BoundsWidget bw = (BoundsWidget)abs.getWidget(i); - if (bw != null) { - Rectangle bounds = bw.getBounds(); - XWidgetCreator comp = (XWidgetCreator)XCreatorUtils.createXCreator(bw.getWidget()); - if (!comp.acceptType(XWParameterLayout.class)) { - comp.setDirections(Direction.ALL); - } - add(comp); - comp.setBounds(bounds); - } - } - isRefreshing = false; - } - - /** - * 当前组件zorder位置替换新的控件 - * @param widget 控件 - * @param oldcreator 旧组件 - * @return 组件 - */ - @Override - public XCreator replace(Widget widget, XCreator oldcreator) { - int i = this.getComponentZOrder(oldcreator); - if (i != -1) { - this.toData().replace(new BoundsWidget(widget, oldcreator.getBounds()), - new BoundsWidget(oldcreator.toData(), oldcreator.getBounds())); - this.convert(); - return (XCreator) this.getComponent(i); - } - return null; - } - - /** + private static final int EDIT_BTN_WIDTH = 60; + private static final int EDIT_BTN_HEIGHT = 24; + private int minWidth = WLayout.MIN_WIDTH; + private int minHeight = WLayout.MIN_HEIGHT; + + //由于屏幕分辨率不同,界面上的容器大小可能不是默认的100%,此时拖入组件时,保存的大小按照100%时的计算 + protected double containerPercent = 1.0; + + private HashMap xConnectorMap; + + public XWAbsoluteLayout() { + this(new WAbsoluteLayout(), new Dimension()); + } + + public XWAbsoluteLayout(WAbsoluteLayout widget) { + this(widget, new Dimension()); + } + + public XWAbsoluteLayout(WAbsoluteLayout widget, Dimension initSize) { + super(widget, initSize); + this.xConnectorMap = new HashMap(); + Connector connector; + for (int i = 0; i < widget.connectorCount(); i++) { + connector = widget.getConnectorIndex(i); + xConnectorMap.put(connector, new XConnector(connector, this)); + } + + initPercent(widget); + } + + /** + * 初始化时默认的组件大小 + * + * @return 默认Dimension + */ + @Override + public Dimension initEditorSize() { + return new Dimension(500, 300); + } + + //根据屏幕大小来确定显示的百分比, 1440*900默认100%, 1366*768缩放90% + private void initPercent(WAbsoluteLayout widget) { + Toolkit toolkit = Toolkit.getDefaultToolkit(); + Dimension scrnsize = toolkit.getScreenSize(); + double screenValue = FRScreen.getByDimension(scrnsize).getValue(); + if (screenValue != FormArea.DEFAULT_SLIDER) { + this.setContainerPercent(screenValue / FormArea.DEFAULT_SLIDER); + } + } + + /** + * 返回容器大小的百分比 + * + * @return the containerPercent + */ + public double getContainerPercent() { + return containerPercent; + } + + /** + * 设置容器大小的百分比 + * + * @param containerPercent the containerPercent to set + */ + public void setContainerPercent(double containerPercent) { + this.containerPercent = containerPercent; + minWidth = (int) (XWAbsoluteLayout.MIN_WIDTH * containerPercent); + minHeight = (int) (XWAbsoluteLayout.MIN_HEIGHT * containerPercent); + } + + /** + * 返回界面处根据百分比调整后的最小宽度 + * + * @return 最小宽度 + */ + public int getActualMinWidth() { + return this.minWidth; + } + + /** + * 返回界面处根据百分比调整后的最小高度 + * + * @return 最小高度 + */ + public int getActualMinHeight() { + return this.minHeight; + } + + /** + * 返回界面处根据百分比调整后的间隔大小(且为偶数) + * + * @return 间隔 + */ + public int getAcualInterval() { + // adapter那边交叉三等分、删除都要判断是否对齐,所以间隔转为偶数 + int interval = (int) (toData().getCompInterval() * containerPercent); + int val = interval / 2; + return val * 2; + } + + /** + * 界面容器大小不是默认的时,处理控件的BoundsWidget,且避免出现空隙 + */ + private Rectangle dealWidgetBound(Rectangle rec) { + if (containerPercent == 1.0) { + return rec; + } + rec.x = (int) (rec.x / containerPercent); + rec.y = (int) (rec.y / containerPercent); + rec.width = (int) (rec.width / containerPercent); + rec.height = (int) (rec.height / containerPercent); + return rec; + } + + /** + * 新增删除拉伸后单个组件的BoundsWidget + */ + public void updateBoundsWidget(XCreator xCreator) { + WAbsoluteLayout layout = this.toData(); + if (xCreator.hasTitleStyle()) { + xCreator = (XLayoutContainer) xCreator.getParent(); + } + if (xCreator.acceptType(XWAbsoluteLayout.class)) { + ((XWAbsoluteLayout) xCreator).updateBoundsWidget(); + } + BoundsWidget boundsWidget = layout.getBoundsWidget(xCreator.toData()); + Rectangle rectangle = dealWidgetBound(xCreator.getBounds()); + } + + private Rectangle calculateBound(Rectangle rec, double pw, double ph) { + Rectangle calRec = new Rectangle(0, 0, 0, 0); + calRec.x = (int) (rec.x / pw); + calRec.y = (int) (rec.y / ph); + calRec.width = (int) (rec.width / pw); + calRec.height = (int) (rec.height / ph); + return calRec; + } + + /** + * 新增删除拉伸后每个组件的BoundsWidget + */ + public void updateBoundsWidget() { + WAbsoluteLayout layout = this.toData(); + Rectangle backupBound = this.getBackupBound(); + Rectangle currentBound = this.getBounds(); + if (backupBound != null && layout.getCompState() == WAbsoluteLayout.STATE_FIT) { + double percentW = ((double) backupBound.width / (double) currentBound.width); + double percentH = ((double) backupBound.height / (double) currentBound.height); + for (int index = 0, n = this.getComponentCount(); index < n; index++) { + XCreator creator = (XCreator) this.getComponent(index); + BoundsWidget wgt = layout.getBoundsWidget(creator.toData()); + // 用当前的显示大小计算后调正具体位置 + Rectangle wgtBound = creator.getBounds(); + Rectangle rec = calculateBound(wgtBound, percentW, percentH); + wgt.setBounds(rec); + creator.setBounds(rec); + //绝对布局嵌套,要更新内部的绝对布局 + if (creator.acceptType(XWAbsoluteLayout.class)) { + creator.setBackupBound(wgtBound); + ((XWAbsoluteLayout) creator).updateBoundsWidget(); + } + } + } + } + + /** + * 更新子组件的Bound + * 这边主要用于绝对布局子组件在适应区域选项时 + * 涉及到的不同分辨率下缩放 + * + * @param minHeight 最小高度 + */ + @Override + public void updateChildBound(int minHeight) { + double prevContainerPercent = FRScreen.getByDimension(toData().getDesigningResolution()).getValue() / FormArea.DEFAULT_SLIDER; + if (toData().getCompState() == 0 && prevContainerPercent != containerPercent) { + for (int i = 0; i < this.getComponentCount(); i++) { + XCreator creator = getXCreator(i); + Rectangle rec = new Rectangle(creator.getBounds()); + rec.x = (int) (rec.x / prevContainerPercent * containerPercent); + rec.y = (int) (rec.y / prevContainerPercent * containerPercent); + rec.height = (int) (rec.height / prevContainerPercent * containerPercent); + rec.width = (int) (rec.width / prevContainerPercent * containerPercent); + BoundsWidget wgt = toData().getBoundsWidget(creator.toData()); + wgt.setBounds(rec); + creator.setBounds(rec); + creator.updateChildBound(minHeight); + } + } + toData().setDesigningResolution(Toolkit.getDefaultToolkit().getScreenSize()); + } + + /** + * 增加对齐线 + * + * @param connector 对齐线 + */ + public void addConnector(Connector connector) { + xConnectorMap.put(connector, new XConnector(connector, this)); + ((WAbsoluteLayout) data).addConnector(connector); + } + + public XConnector getXConnector(Connector connector) { + return xConnectorMap.get(connector); + } + + /** + * 去除对齐线 + * + * @param connector 对齐线 + */ + public void removeConnector(Connector connector) { + ((WAbsoluteLayout) data).removeConnector(connector); + xConnectorMap.remove(connector); + } + + /** + * 返回对应的widget容器 + * + * @return 返回WAbsoluteLayout + */ + @Override + public WAbsoluteLayout toData() { + return (WAbsoluteLayout) data; + } + + @Override + protected String getIconName() { + return "layout_absolute_new.png"; + } + + /** + * 返回默认的容器name + * + * @return 返回绝对布局容器名 + */ + @Override + public String createDefaultName() { + return "absolute"; + } + + @Override + protected void initLayoutManager() { + this.setLayout(new FRAbsoluteLayout()); + } + + /** + * 是否支持标题样式 + * + * @return 默认false + */ + @Override + public boolean hasTitleStyle() { + return false; + } + + @Override + public void paintComponent(Graphics g) { + super.paintComponent(g); + WAbsoluteLayout layout = (WAbsoluteLayout) data; + Connector[] connector = layout.getConnector(); + for (int i = 0, size = connector.length; i < size; i++) { + connector[i].draw(g); + } + } + + /** + * 转换保存组件信息的wlayout为对应的container + */ + @Override + public void convert() { + isRefreshing = true; + WAbsoluteLayout abs = toData(); + this.removeAll(); + for (int i = 0, count = abs.getWidgetCount(); i < count; i++) { + BoundsWidget bw = (BoundsWidget) abs.getWidget(i); + if (bw != null) { + Rectangle bounds = bw.getBounds(); + XWidgetCreator comp = (XWidgetCreator) XCreatorUtils.createXCreator(bw.getWidget()); + if (!comp.acceptType(XWParameterLayout.class)) { + comp.setDirections(Direction.ALL); + } + add(comp); + comp.setBounds(bounds); + } + } + isRefreshing = false; + } + + /** + * 当前组件zorder位置替换新的控件 + * + * @param widget 控件 + * @param oldcreator 旧组件 + * @return 组件 + */ + @Override + public XCreator replace(Widget widget, XCreator oldcreator) { + int i = this.getComponentZOrder(oldcreator); + if (i != -1) { + this.toData().replace(new BoundsWidget(widget, oldcreator.getBounds()), + new BoundsWidget(oldcreator.toData(), oldcreator.getBounds())); + this.convert(); + return (XCreator) this.getComponent(i); + } + return null; + } + + /** * 组件增加 + * * @param e 容器事件 */ - @Override - public void componentAdded(ContainerEvent e) { - if (isRefreshing) { - return; - } - XWidgetCreator creator = (XWidgetCreator) e.getChild(); - WAbsoluteLayout wabs = this.toData(); - if (!creator.acceptType(XWFitLayout.class)) { - creator.setDirections(Direction.ALL); - } - wabs.addWidget(new BoundsWidget(creator.toData(), creator.getBounds())); - } - - /** + @Override + public void componentAdded(ContainerEvent e) { + if (isRefreshing) { + return; + } + XWidgetCreator creator = (XWidgetCreator) e.getChild(); + WAbsoluteLayout wabs = this.toData(); + if (!creator.acceptType(XWFitLayout.class)) { + creator.setDirections(Direction.ALL); + } + wabs.addWidget(new BoundsWidget(creator.toData(), creator.getBounds())); + } + + /** * 在设计界面中有组件移除的时候,需要通知WLayout容器重新paint + * * @param e 容器事件 */ @Override @@ -363,128 +376,130 @@ public class XWAbsoluteLayout extends XLayoutContainer { BoundsWidget bw = new BoundsWidget(wgt, xwc.getBounds()); wlayout.removeWidget(bw); } - - @Override - public Dimension getMinimumSize() { - return toData().getMinDesignSize(); - } - - @Override - public LayoutAdapter getLayoutAdapter() { - return new FRAbsoluteLayoutAdapter(this); - } - - @Override - public XLayoutContainer getTopLayout() { - XLayoutContainer xTopLayout = XCreatorUtils.getParentXLayoutContainer(this).getTopLayout(); - if (xTopLayout != null && !xTopLayout.isEditable()){ - return xTopLayout; - } - else{ - return this; - } - } - - /** - * 得到属性名 - * @return 属性名 - * @throws java.beans.IntrospectionException - */ - public CRPropertyDescriptor[] supportedDescriptor() throws IntrospectionException { - return new CRPropertyDescriptor[] { - new CRPropertyDescriptor("widgetName", this.data.getClass()).setI18NName( - Inter.getLocText("FR-Designer_Form-Widget_Name")) - }; - } - - public void paint(Graphics g) { - super.paint(g); - //如果鼠标移动到布局内且布局不可编辑,画出编辑蒙层 - if (isMouseEnter && !this.editable) { - int x = 0; - int y = 0; - int w = getWidth(); - int h = getHeight(); - - Graphics2D g2d = (Graphics2D) g; - Composite oldComposite = g2d.getComposite(); - //画白色的编辑层 - g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 60 / 100.0F)); - g2d.setColor(Color.WHITE); - g2d.fillRect(x, y, w, h); - //画编辑按钮所在框 - g2d.setComposite(oldComposite); - g2d.setColor(new Color(176, 196, 222)); - g2d.fillRect((x + w / 2 - EDIT_BTN_WIDTH / 2), (y + h / 2 - EDIT_BTN_HEIGHT / 2), EDIT_BTN_WIDTH, EDIT_BTN_HEIGHT); - //画编辑按钮图标 - BufferedImage image = IOUtils.readImage(IconPathConstants.TD_EDIT_ICON_PATH); - g2d.drawImage( - image, - (x + w / 2 - 23), - (y + h / 2 - image.getHeight() / 2), - image.getWidth(), - image.getHeight(), - null, - this - ); - g2d.setColor(Color.BLACK); - //画编辑文字 - g2d.drawString(Inter.getLocText("FR-Designer_Edit"), x + w / 2 - 2, y + h / 2 + 5); - } - } - - /** - * 响应点击事件 - * - * @param editingMouseListener 鼠标点击,位置处理器 - * @param e 鼠标点击事件 - */ - public void respondClick(EditingMouseListener editingMouseListener,MouseEvent e){ - FormDesigner designer = editingMouseListener.getDesigner(); - SelectionModel selectionModel = editingMouseListener.getSelectionModel(); - boolean isEditing = isEditable() || designer.getCursor().getType() == Cursor.HAND_CURSOR || e.getClickCount() == 2; - setEditable(isEditing); - - selectionModel.selectACreatorAtMouseEvent(e); - designer.repaint(); - - if (editingMouseListener.stopEditing()) { - if (this != designer.getRootComponent()) { - ComponentAdapter adapter = AdapterBus.getComponentAdapter(designer, this); - editingMouseListener.startEditing(this, isEditing ? adapter.getDesignerEditor() : null, adapter); - } - } - } - - /** - * body大小手动调整的时候 - * 按照比例调整组件的宽度 - * @param percent 比例 - */ - @Override - public void adjustCompWidth(double percent) { - for (int i = 0; i < getComponentCount(); i++) { - XCreator xCreator = (XCreator) getComponent(i); - Rectangle rectangle = xCreator.getBounds(); - xCreator.setBounds((int) (rectangle.x * percent), rectangle.y, (int) (rectangle.width * percent), rectangle.height); - BoundsWidget widget = toData().getBoundsWidget(xCreator.toData()); - widget.setBounds(xCreator.getBounds()); - } - } - - /** - * body大小手动调整的时候 - * 按照比例调整组件的高度 - * @param percent 比例 - */ - @Override - public void adjustCompHeight(double percent) { - for (int i = 0; i < getComponentCount(); i++) { - XCreator xCreator = (XCreator) getComponent(i); - Rectangle rectangle = xCreator.getBounds(); - xCreator.setBounds(rectangle.x, (int) (rectangle.y * percent), rectangle.width, (int) (rectangle.height * percent)); - BoundsWidget widget = toData().getBoundsWidget(xCreator.toData()); - widget.setBounds(xCreator.getBounds()); - } - } + + @Override + public Dimension getMinimumSize() { + return toData().getMinDesignSize(); + } + + @Override + public LayoutAdapter getLayoutAdapter() { + return new FRAbsoluteLayoutAdapter(this); + } + + @Override + public XLayoutContainer getTopLayout() { + XLayoutContainer xTopLayout = XCreatorUtils.getParentXLayoutContainer(this).getTopLayout(); + if (xTopLayout != null && !xTopLayout.isEditable()) { + return xTopLayout; + } else { + return this; + } + } + + /** + * 得到属性名 + * + * @return 属性名 + * @throws java.beans.IntrospectionException + */ + public CRPropertyDescriptor[] supportedDescriptor() throws IntrospectionException { + return new CRPropertyDescriptor[]{ + new CRPropertyDescriptor("widgetName", this.data.getClass()).setI18NName( + Inter.getLocText("FR-Designer_Form-Widget_Name")) + }; + } + + public void paint(Graphics g) { + super.paint(g); + //如果鼠标移动到布局内且布局不可编辑,画出编辑蒙层 + if (isMouseEnter && !this.editable) { + int x = 0; + int y = 0; + int w = getWidth(); + int h = getHeight(); + + Graphics2D g2d = (Graphics2D) g; + Composite oldComposite = g2d.getComposite(); + //画白色的编辑层 + g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 60 / 100.0F)); + g2d.setColor(Color.WHITE); + g2d.fillRect(x, y, w, h); + //画编辑按钮所在框 + g2d.setComposite(oldComposite); + g2d.setColor(new Color(176, 196, 222)); + g2d.fillRect((x + w / 2 - EDIT_BTN_WIDTH / 2), (y + h / 2 - EDIT_BTN_HEIGHT / 2), EDIT_BTN_WIDTH, EDIT_BTN_HEIGHT); + //画编辑按钮图标 + BufferedImage image = IOUtils.readImage(IconPathConstants.TD_EDIT_ICON_PATH); + g2d.drawImage( + image, + (x + w / 2 - 23), + (y + h / 2 - image.getHeight() / 2), + image.getWidth(), + image.getHeight(), + null, + this + ); + g2d.setColor(Color.BLACK); + //画编辑文字 + g2d.drawString(Inter.getLocText("FR-Designer_Edit"), x + w / 2 - 2, y + h / 2 + 5); + } + } + + /** + * 响应点击事件 + * + * @param editingMouseListener 鼠标点击,位置处理器 + * @param e 鼠标点击事件 + */ + public void respondClick(EditingMouseListener editingMouseListener, MouseEvent e) { + FormDesigner designer = editingMouseListener.getDesigner(); + SelectionModel selectionModel = editingMouseListener.getSelectionModel(); + boolean isEditing = isEditable() || designer.getCursor().getType() == Cursor.HAND_CURSOR || e.getClickCount() == 2; + setEditable(isEditing); + + selectionModel.selectACreatorAtMouseEvent(e); + designer.repaint(); + + if (editingMouseListener.stopEditing()) { + if (this != designer.getRootComponent()) { + ComponentAdapter adapter = AdapterBus.getComponentAdapter(designer, this); + editingMouseListener.startEditing(this, isEditing ? adapter.getDesignerEditor() : null, adapter); + } + } + } + + /** + * body大小手动调整的时候 + * 按照比例调整组件的宽度 + * + * @param percent 比例 + */ + @Override + public void adjustCompWidth(double percent) { + for (int i = 0; i < getComponentCount(); i++) { + XCreator xCreator = (XCreator) getComponent(i); + Rectangle rectangle = xCreator.getBounds(); + xCreator.setBounds((int) (rectangle.x * percent), rectangle.y, (int) (rectangle.width * percent), rectangle.height); + BoundsWidget widget = toData().getBoundsWidget(xCreator.toData()); + widget.setBounds(xCreator.getBounds()); + } + } + + /** + * body大小手动调整的时候 + * 按照比例调整组件的高度 + * + * @param percent 比例 + */ + @Override + public void adjustCompHeight(double percent) { + for (int i = 0; i < getComponentCount(); i++) { + XCreator xCreator = (XCreator) getComponent(i); + Rectangle rectangle = xCreator.getBounds(); + xCreator.setBounds(rectangle.x, (int) (rectangle.y * percent), rectangle.width, (int) (rectangle.height * percent)); + BoundsWidget widget = toData().getBoundsWidget(xCreator.toData()); + widget.setBounds(xCreator.getBounds()); + } + } } \ No newline at end of file From 228d8bb8e8865d78257a6aa825529ce26bdb4fc3 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Tue, 11 Apr 2017 15:07:37 +0800 Subject: [PATCH 269/343] =?UTF-8?q?=E7=BB=84=E4=BB=B6=E5=A4=8D=E7=94=A8?= =?UTF-8?q?=E5=B1=82=E5=8F=A0=E9=A1=BA=E5=BA=8F=E6=96=B0=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E7=9A=84=E7=BB=84=E4=BB=B6=E5=9C=A8=E4=B8=8A=E6=96=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../beans/adapters/layout/FRAbsoluteLayoutAdapter.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java index 603626e13..0384de675 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java @@ -235,7 +235,7 @@ public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { if (creator.hasTitleStyle()) { addParentCreator(creator); } else { - container.add(creator, creator.toData().getWidgetName()); + container.add(creator, creator.toData().getWidgetName(),0); } XWAbsoluteLayout layout = (XWAbsoluteLayout) container; layout.updateBoundsWidget(creator); @@ -246,7 +246,7 @@ public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { if (creator.shouldScaleCreator() || creator.hasTitleStyle()) { addParentCreator(creator); } else { - container.add(creator, creator.toData().getWidgetName()); + container.add(creator, creator.toData().getWidgetName(),0); } XWFitLayout layout = (XWFitLayout) container; // 更新对应的BoundsWidget @@ -265,7 +265,7 @@ public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { private void addParentCreator(XCreator child) { XLayoutContainer parentPanel = child.initCreatorWrapper(child.getHeight()); - container.add(parentPanel, child.toData().getWidgetName()); + container.add(parentPanel, child.toData().getWidgetName(),0); } /** From 48723cc22006085f1b100318eeebb1e91f1fd4a4 Mon Sep 17 00:00:00 2001 From: fr_shine Date: Tue, 11 Apr 2017 16:42:34 +0800 Subject: [PATCH 270/343] =?UTF-8?q?=E5=90=88=E5=B9=B6=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E6=88=96=E8=80=85=E4=BF=AE=E6=94=B9=E5=86=B2=E7=AA=81=E6=97=B6?= =?UTF-8?q?=20merge=E9=94=99=E8=AF=AF=20=E6=94=B9=E5=9B=9E=E6=AD=A3?= =?UTF-8?q?=E7=A1=AE=E7=9A=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/chart/axis/MinMaxValuePane.java | 52 +++++++++++-------- 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java index 7fc7d9db3..479089259 100644 --- a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java +++ b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java @@ -31,45 +31,53 @@ public class MinMaxValuePane extends JPanel { protected UITextField secUnitField; public MinMaxValuePane() { - minCheckBox = new UICheckBox(Inter.getLocText(new String[]{"Custom", "Min_Value"})); - minValueField = new UITextField(6); - maxCheckBox = new UICheckBox(Inter.getLocText(new String[]{"Custom", "Max_Value"})); - maxValueField = new UITextField(6); - isCustomMainUnitBox = new UICheckBox(Inter.getLocText("FR-Chart_MainGraduationUnit")); - mainUnitField = new UITextField(6); - isCustomSecUnitBox = new UICheckBox(Inter.getLocText("FR-Chart_SecondGraduationUnit")); - secUnitField = new UITextField(6); + minCheckBox = new UICheckBox(Inter.getLocText(new String[]{"Custom", "Min_Value"})); + minValueField = new UITextField(6); + maxCheckBox = new UICheckBox(Inter.getLocText(new String[]{"Custom", "Max_Value"})); + maxValueField = new UITextField(6); + isCustomMainUnitBox = new UICheckBox(Inter.getLocText("FR-Chart_MainGraduationUnit")); + mainUnitField = new UITextField(6); + isCustomSecUnitBox = new UICheckBox(Inter.getLocText("FR-Chart_SecondGraduationUnit")); + secUnitField = new UITextField(6); + double p = TableLayout.PREFERRED; double f = TableLayout.FILL; - double[] columnSize = { p, f }; - double[] rowSize = { p, p, p, p}; + double[] columnSize = {p, f}; - Component[][] components = getPanelComponents(); - JPanel panel = TableLayoutHelper.createTableLayoutPane(components ,rowSize,columnSize); + Component[][] components = getPanelComponents(); + JPanel panel = TableLayoutHelper.createTableLayoutPane(components, getRowSize(p), columnSize); 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}; + } + + public void addComponentListener(Component[][] components) { + for (int i = 0; i < components.length; i++) { + ((UICheckBox) components[i][0]).addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { checkBoxUse(); } }); - ChartSwingUtils.addListener((UICheckBox)components[i][0], (UITextField)components[i][1]); + ChartSwingUtils.addListener((UICheckBox) components[i][0], (UITextField) components[i][1]); } } + protected Component[][] getPanelComponents() { - return new Component[][]{ - new Component[]{minCheckBox, minValueField}, - new Component[]{maxCheckBox, maxValueField}, - new Component[]{isCustomMainUnitBox, mainUnitField}, - new Component[]{isCustomSecUnitBox, secUnitField}, + return new Component[][]{ + new Component[]{minCheckBox, minValueField}, + new Component[]{maxCheckBox, maxValueField}, + new Component[]{isCustomMainUnitBox, mainUnitField}, + new Component[]{isCustomSecUnitBox, secUnitField}, }; } - private void checkBoxUse() { + protected void checkBoxUse() { minValueField.setEnabled(minCheckBox.isSelected()); maxValueField.setEnabled(maxCheckBox.isSelected()); From 03ae87935a5ce59af7fc70aee38b21d88821ed91 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Wed, 12 Apr 2017 09:06:25 +0800 Subject: [PATCH 271/343] =?UTF-8?q?report-1945=20=E8=87=AA=E9=80=82?= =?UTF-8?q?=E5=BA=94=E6=97=A0=E7=BB=84=E4=BB=B6=E6=98=AF=E7=B2=98=E8=B4=B4?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/designer/beans/models/SelectionModel.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java index dc4ea6a49..4b7b97e7d 100644 --- a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java +++ b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java @@ -149,7 +149,15 @@ public class SelectionModel { int leftUpY = designer.getRootComponent().toData().getMargin().getTop() + 1; //选中第一个坐标点坐在的组件 selection.setSelectedCreator((XCreator) designer.getRootComponent().getComponentAt(leftUpX, leftUpY)); - pasteFromClipBoard(); + if (hasSelectedPasteSource()) { + selectedPaste(); + } else { + FormSelectionUtils.paste2Container(designer, designer.getRootComponent(), + clipboard, + DELTA_X_Y, + DELTA_X_Y); + } + } } else { //绝对布局 From 25116d6466188442d0d384252bb81b01047681ad Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Wed, 12 Apr 2017 09:30:27 +0800 Subject: [PATCH 272/343] =?UTF-8?q?report-1945,tab|=E8=87=AA=E9=80=82?= =?UTF-8?q?=E5=BA=94,=E6=97=A0=E7=BB=84=E4=BB=B6=E6=97=B6=E7=B2=98?= =?UTF-8?q?=E8=B4=B4=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer/beans/models/SelectionModel.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java index 4b7b97e7d..13eaa18ac 100644 --- a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java +++ b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java @@ -142,22 +142,29 @@ public class SelectionModel { int leftUpY = container.toData().getMargin().getTop() + 1; //选中第一个坐标点坐在的组件 selection.setSelectedCreator((XCreator) container.getComponentAt(leftUpX, leftUpY)); - pasteFromClipBoard(); + Rectangle rectangle = selection.getRelativeBounds(); + if (hasSelectedPasteSource()) { + selectedPaste(); + } else { + FormSelectionUtils.paste2Container(designer, container, clipboard, + rectangle.x + rectangle.width / 2, + rectangle.y + DELTA_X_Y); + } } else { //自适应布局编辑器内部左上角第一个坐标点 int leftUpX = designer.getRootComponent().toData().getMargin().getLeft() + 1; int leftUpY = designer.getRootComponent().toData().getMargin().getTop() + 1; //选中第一个坐标点坐在的组件 selection.setSelectedCreator((XCreator) designer.getRootComponent().getComponentAt(leftUpX, leftUpY)); + Rectangle rectangle = selection.getRelativeBounds(); if (hasSelectedPasteSource()) { selectedPaste(); } else { FormSelectionUtils.paste2Container(designer, designer.getRootComponent(), clipboard, - DELTA_X_Y, - DELTA_X_Y); + rectangle.x + rectangle.width / 2, + rectangle.y + DELTA_X_Y); } - } } else { //绝对布局 From 50dd30c362cd0804b5af586cd8e0362e50980c3a Mon Sep 17 00:00:00 2001 From: plough Date: Wed, 12 Apr 2017 11:46:58 +0800 Subject: [PATCH 273/343] =?UTF-8?q?REPORT-2344=20=E5=9B=BD=E9=99=85?= =?UTF-8?q?=E5=8C=96=E2=80=94=E2=80=94=E7=B9=81=E4=BD=93=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E5=B0=91=E4=BA=86key?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/locale/designer.properties | 8 +++- .../design/locale/designer_en_US.properties | 7 +++- .../design/locale/designer_ja_JP.properties | 28 ++++++++++++- .../design/locale/designer_ko_KR.properties | 40 ++++++++++++++++++- .../design/locale/designer_zh_CN.properties | 2 + .../design/locale/designer_zh_TW.properties | 15 ++++++- 6 files changed, 95 insertions(+), 5 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 6aa27aba3..62d19e737 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -590,4 +590,10 @@ 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 \ No newline at end of file +FR-Designer_Too_Small_To_Paste=Too small to paste +FR-Designer_Validate= +FR-Designer_Get-CubeGetting cube= +FR-Designer_Get-CubeGetting= +FR-Designer_Fit= +FR-Designer_Properties_Mobile= +FR-Designer_Oracle= diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index 79f9c4139..bfab2989f 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -591,4 +591,9 @@ 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! \ No newline at end of file +FR-Designer_Too_Small_To_Paste=Too small to paste! +FR-Designer_SimpleCross_Report= +FR-Designer_Get-Cube= +FR-Designer_DoubleLayer_Report= +FR-Designer_Get-CubeGetting= +FR-Designer_SimpleDetail_Report= diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index 37d913e73..ae7510e78 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -567,4 +567,30 @@ FR-Designer_Logarithmic=\u5BFE\u6570\u76EE\u76DB\u308A FR-Designer_Chart_Log_Base=\u5E95\u6570 FR-Designer_Chart_F_Radar_Axis=\u5782\u76F4\u8EF8 FR-Designer_Too_Large_To_Paste=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306E\u30B5\u30A4\u30BA\u306F\u30DC\u30FC\u30C0\u30FC\u306B\u8D85\u3048\u305F\u306E\u3067\u3001\u8CBC\u308A\u4ED8\u3051\u3067\u304D\u307E\u305B\u3093\uFF01 -FR-Designer_Too_Small_To_Paste=\u8A72\u5F53\u51E6\u306B\u8CBC\u308A\u4ED8\u3051\u3067\u304D\u307E\u305B\u3093\u3001\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306E\u30B5\u30A4\u30BA\u306F\u9AD8\u3059\u304E\uFF01 \ No newline at end of file +FR-Designer_Too_Small_To_Paste=\u8A72\u5F53\u51E6\u306B\u8CBC\u308A\u4ED8\u3051\u3067\u304D\u307E\u305B\u3093\u3001\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306E\u30B5\u30A4\u30BA\u306F\u9AD8\u3059\u304E\uFF01 +FR-Designer_DoubleLayer_Report= +FR-Designer_Printer_Native_Button= +FR-Designer_Mobile-Warning= +FR-Designer_Form-Fit-Tip= +FR-Designer_Form-Forzen-Speed= +FR-Designer_Mobile_Form_Analysis_Annotation= +FR-Designer_TableData-Default-Para= +FR-Designer-Selected_Widget= +FR-Designer_Plugin_Should_Update_Please_Contact_Developer= +FR-Designer_SimpleCross_Report= +FR-Designer_Button-Cancel= +FR-Designer_Delete_Template= +FR-Designer_Install_Template= +FR-Designer_SimpleDetail_Report= +FR-Designer_LocalWidget= +FR-Designer_WidgetOrder= +FR-Designer_Form-Frozen-Tip= +FR-Designer-Invalid_Page_Number= +FR-Designer_Reset= +FR-Designer-Plugin_Please_Update_Jar= +FR-Designer_Get-CubeGetting cube= +FR-Designer_Mobile_Report_Analysis_Annotation= +FR-Designer_Properties_Mobile= +FR-Designer_Button-OK= +FR-Designer_Allow-Blank= +FR-Designer_AllCategories= diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index 0c798b87a..f6c1591ef 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -556,4 +556,42 @@ 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 \ No newline at end of file +FR-Designer_Chart_F_Radar_Axis=\uAC12\uCD95 +FR-Designer_COMMUNITY_VIDEO= +FR-Designer_DoubleLayer_Report= +FR-Designer_Too_Small_To_Paste= +FR-Designer_formDesignerModule= +FR-Designer_Mobile-Warning= +FR-Designer_Mobile-Open= +FR-Designer_Form-Fit-Tip= +FR-Designer_Form-Forzen-Speed= +FR-Designer_Mobile_Form_Analysis_Annotation= +FR-Designer_Too_Large_To_Paste= +FR-Designer_COMMUNITY_HELP= +FR-Designer_Validate= +FR-Designer_Button-Cancel= +FR-Designer_Plugin_Should_Update_Please_Contact_Developer= +FR-Designer_COMMUNITY_QUESTIONS= +FR-Designer_SimpleCross_Report= +FR-Designer_COMMUNITY_NEED= +FR-Designer_Delete_Template= +FR-Designer_TableData-Default-Para= +FR-Designer_Allow-Blank= +FR-Designer_LocalWidget= +FR-Designer_WidgetOrder= +FR-Designer_Form-Frozen-Tip= +FR-Designer_Mobile-Horizontal= +FR-Designer-Invalid_Page_Number= +FR-Designer_COMMUNITY_BBS= +FR-Designer_COMMUNITY_SIGN= +FR-Designer_COMMUNITY_UPDATE= +FR-Designer_Mobile-Vertical= +FR-Designer_Get-CubeGetting cube= +FR-Designer_COMMUNITY= +FR-Designer_Mobile_Report_Analysis_Annotation= +FR-Designer_Properties_Mobile= +FR-Designer_Button-OK= +FR-Designer_COMMUNITY_BUG= +FR-Designer_AllCategories= +FR-Designer_Mobile-Attr= +FR-Designer_Mobile-Zoom= diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 060eddbd7..b71145820 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -596,3 +596,5 @@ 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 + +FR-Designer_Get-CubeGetting cube= diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 1329b3ba6..c16164185 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -584,4 +584,17 @@ 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 \ No newline at end of file +FR-Designer_Too_Small_To_Paste=\u6B64\u8655\u7121\u6CD5\u7C98\u8CBC\uFF0C\u5C0F\u65BC\u7D44\u4EF6\u6700\u5C0F\u9AD8\u5EA6\uFF01 +FR-Designer_Download_Template= +FR-Designer-Selected_Widget= +FR-Designer_LocalWidget= +FR-Designer_Get-CubeGetting cube= +FR-Designer_Install_Template= +FR-Designer_Reset= +FR-Designer_SimpleCross_Report= +FR-Designer_Allow-Blank= +FR-Designer_AllCategories= +FR-Designer_SimpleDetail_Report= +FR-Designer_DoubleLayer_Report= +FR-Designer_Delete_Template= +FR-Designer_Validate= From 55ddfd87dcf16703d8326d4ade2a15509f075889 Mon Sep 17 00:00:00 2001 From: syoki Date: Thu, 13 Apr 2017 02:21:08 +0900 Subject: [PATCH 274/343] =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=20=E9=83=A8=E5=88=86=E6=9C=AA=E7=BF=BB=E8=AF=91?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E7=BF=BB=E8=AF=91=20=E5=BA=84=E5=A5=87=20201?= =?UTF-8?q?704130221?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/locale/designer_ja_JP.properties | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index ae7510e78..87d080198 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -568,29 +568,29 @@ FR-Designer_Chart_Log_Base=\u5E95\u6570 FR-Designer_Chart_F_Radar_Axis=\u5782\u76F4\u8EF8 FR-Designer_Too_Large_To_Paste=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306E\u30B5\u30A4\u30BA\u306F\u30DC\u30FC\u30C0\u30FC\u306B\u8D85\u3048\u305F\u306E\u3067\u3001\u8CBC\u308A\u4ED8\u3051\u3067\u304D\u307E\u305B\u3093\uFF01 FR-Designer_Too_Small_To_Paste=\u8A72\u5F53\u51E6\u306B\u8CBC\u308A\u4ED8\u3051\u3067\u304D\u307E\u305B\u3093\u3001\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306E\u30B5\u30A4\u30BA\u306F\u9AD8\u3059\u304E\uFF01 -FR-Designer_DoubleLayer_Report= -FR-Designer_Printer_Native_Button= -FR-Designer_Mobile-Warning= -FR-Designer_Form-Fit-Tip= -FR-Designer_Form-Forzen-Speed= -FR-Designer_Mobile_Form_Analysis_Annotation= -FR-Designer_TableData-Default-Para= -FR-Designer-Selected_Widget= -FR-Designer_Plugin_Should_Update_Please_Contact_Developer= -FR-Designer_SimpleCross_Report= -FR-Designer_Button-Cancel= -FR-Designer_Delete_Template= -FR-Designer_Install_Template= -FR-Designer_SimpleDetail_Report= -FR-Designer_LocalWidget= -FR-Designer_WidgetOrder= -FR-Designer_Form-Frozen-Tip= -FR-Designer-Invalid_Page_Number= -FR-Designer_Reset= -FR-Designer-Plugin_Please_Update_Jar= +FR-Designer_DoubleLayer_Report=\u4E8C\u968E\u30BF\u30A4\u30C8\u30EB +FR-Designer_Printer_Native_Button=\u30ED\u30FC\u30AB\u30EB\u5370\u5237 +FR-Designer_Mobile-Warning=\u6700\u5927\u306E\u9AD8\u3055\u306F\u8868\u793A\u30A8\u30EA\u30A2\u306E80\uFF05\u4EE5\u4E0A\u306B\u306A\u308A\u307E\u305B\u3093 +FR-Designer_Form-Fit-Tip=\u81EA\u5DF1\u9069\u5FDC\u30D7\u30E9\u30B0\u30A4\u30F3 +FR-Designer_Form-Forzen-Speed=\u3001\u305D\u3057\u3066\u6A2A\u65B9\u5411\u81EA\u5DF1\u9069\u5FDC\u307E\u305F\u306F2\u65B9\u5411\u81EA\u52D5\u9069\u5FDC\u3092\u5229\u7528\u3057\u3001\u5E33\u7968\u8868\u793A\u306E\u30B9\u30D4\u30FC\u30C9\u3092\u4E0A\u3052\u3067\u304D\u307E\u3059\u3002 +FR-Designer_Mobile_Form_Analysis_Annotation=\u8AAC\u660E\:\u8A72\u5F53\u8A2D\u5B9A\u3088\u308A\u3001\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u306E\u30A2\u30D7\u30EA\u3067\u306E\u89E3\u6790\u30E2\u30FC\u30C9\u3092\u8A2D\u5B9A\u3067\u304D\u307E\u3059\u3002 +FR-Designer_TableData-Default-Para=\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u306E\u30C7\u30D5\u30A9\u30EB\u30C8\u30D1\u30E9\u30E1\u30FC\u30BF +FR-Designer-Selected_Widget=\u5F53\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8 +FR-Designer_Plugin_Should_Update_Please_Contact_Developer=\u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u306F\u4F4E\u3044\u3067\u3059\u304C\u3001\u4E0D\u5177\u5408\u304C\u3067\u3063\u305F\u3001\u958B\u767A\u8005\u3068\u9023\u7D61\u3057\u3066\u304F\u3060\u3055\u3044\u3002 +FR-Designer_SimpleCross_Report=\u7C21\u5358\u30AF\u30ED\u30FC\u30B9\u8868 +FR-Designer_Button-Cancel=\u53D6\u308A\u6D88\u3057 +FR-Designer_Delete_Template=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u3092\u524A\u9664 +FR-Designer_Install_Template=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u3092\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB +FR-Designer_SimpleDetail_Report=\u7C21\u5358\u660E\u7D30\u8868 +FR-Designer_LocalWidget=\u30ED\u30FC\u30AB\u30EB\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u30E9\u30A4\u30D6\u30E9\u30EA +FR-Designer_WidgetOrder=\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306E\u9806\u756A +FR-Designer_Form-Frozen-Tip=\u30D5\u30EA\u30FC\u30BA\u3092\u4F7F\u3046\u6642\u3001\u5F8C\u8A18\u306E\u30D7\u30E9\u30B0\u30A4\u30F3\u3092\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3057\u3066\u304F\u3060\u3055\u3044\uFF1A +FR-Designer-Invalid_Page_Number=\u7121\u52B9\u306A\u30DA\u30FC\u30B8\u756A\u53F7 +FR-Designer_Reset=\u30EA\u30BB\u30C3\u30C8 +FR-Designer-Plugin_Please_Update_Jar=jar\u30D1\u30C3\u30AF\u3092\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u3057\u3066\u304F\u3060\u3055\u3044 FR-Designer_Get-CubeGetting cube= -FR-Designer_Mobile_Report_Analysis_Annotation= -FR-Designer_Properties_Mobile= -FR-Designer_Button-OK= -FR-Designer_Allow-Blank= -FR-Designer_AllCategories= +FR-Designer_Mobile_Report_Analysis_Annotation=\u8AAC\u660E\:\u8A72\u5F53\u5C5E\u6027\u3088\u308A\u3001\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u306E\u30A2\u30D7\u30EA\u3067\u306E\u89E3\u6790\u30E2\u30FC\u30C9\u3092\u8A2D\u5B9A\u3067\u304D\u307E\u3059\u3001\u9801\u5206\u3051\u30D7\u30EC\u30D3\u30E5\u30FC\u3060\u3051\u3092\u652F\u6301\u3001\u66F8\u304D\u8FBC\u307F\u306B\u8A2D\u5B9A\u3059\u308B\u6642\u7121\u52B9\u306B\u306A\u308A\u307E\u3059\u3002 +FR-Designer_Properties_Mobile=\u30B9\u30DE\u30FC\u30C8\u30D5\u30A9\u30F3\u5C5E\u6027 +FR-Designer_Button-OK=\u5206\u304B\u308A\u307E\u3057\u305F +FR-Designer_Allow-Blank=\u7A7A\u306B\u8A31\u3059 +FR-Designer_AllCategories=\u5168\u3066\u306E\u7A2E\u985E From cc43c5314357111fdc2c58d1b7791c2d0b5c9fd2 Mon Sep 17 00:00:00 2001 From: mengao <283296419@qq.com> Date: Thu, 13 Apr 2017 10:10:06 +0800 Subject: [PATCH 275/343] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=9C=80=E5=A4=A7?= =?UTF-8?q?=E6=9C=80=E5=B0=8F=E5=80=BC=E5=80=BC=E5=AE=9A=E4=B9=89=EF=BC=8C?= =?UTF-8?q?=E5=85=BC=E5=AE=B9vancharts=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/chart/axis/MinMaxValuePane.java | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java index 4a9be221d..96c51516d 100644 --- a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java +++ b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java @@ -42,24 +42,30 @@ public class MinMaxValuePane extends JPanel { double p = TableLayout.PREFERRED; double f = TableLayout.FILL; double[] columnSize = { p, f }; - double[] rowSize = { p, p, p, p}; - Component[][] components = getPanelComponents(); - JPanel panel = TableLayoutHelper.createTableLayoutPane(components ,rowSize,columnSize); + Component[][] components = getPanelComponents(); + JPanel panel = TableLayoutHelper.createTableLayoutPane(components, getRowSize(p), columnSize); 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}; + } + public void addComponentListener(Component[][] components) { + for (int i = 0; i < components.length; i++) { + ((UICheckBox) components[i][0]).addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { checkBoxUse(); } }); - ChartSwingUtils.addListener((UICheckBox)components[i][0], (UITextField)components[i][1]); + ChartSwingUtils.addListener((UICheckBox) components[i][0], (UITextField) components[i][1]); } } + protected Component[][] getPanelComponents() { return new Component[][]{ new Component[]{minCheckBox, minValueField}, @@ -69,7 +75,7 @@ public class MinMaxValuePane extends JPanel { }; } - private void checkBoxUse() { + protected void checkBoxUse() { minValueField.setEnabled(minCheckBox.isSelected()); maxValueField.setEnabled(maxCheckBox.isSelected()); @@ -100,7 +106,7 @@ public class MinMaxValuePane extends JPanel { if(axis.getMinValue() != null) { minValueField.setText(axis.getMinValue().toString()); } - } + } // 最大值 if (axis.isCustomMaxValue()) { @@ -108,7 +114,7 @@ public class MinMaxValuePane extends JPanel { if(axis.getMaxValue() != null) { maxValueField.setText(axis.getMaxValue().toString()); } - } + } // 主次刻度单位 if (axis.isCustomMainUnit()) { @@ -116,7 +122,7 @@ public class MinMaxValuePane extends JPanel { if(axis.getMainUnit() != null) { mainUnitField.setText(axis.getMainUnit().toString()); } - } + } if(axis.isCustomSecUnit()) { isCustomSecUnitBox.setSelected(true); From 469bcc513df64ea674dc1a8ed7a4b733c10531f8 Mon Sep 17 00:00:00 2001 From: mengao <283296419@qq.com> Date: Thu, 13 Apr 2017 10:34:11 +0800 Subject: [PATCH 276/343] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/chart/axis/MinMaxValuePane.java | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java index 96c51516d..2ae89b60c 100644 --- a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java +++ b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java @@ -53,18 +53,22 @@ public class MinMaxValuePane extends JPanel { protected double[] getRowSize(double p) { return new double[]{p, p, p, p}; } - public void addComponentListener(Component[][] components) { - for (int i = 0; i < components.length; i++) { - ((UICheckBox) components[i][0]).addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - checkBoxUse(); - } - }); - ChartSwingUtils.addListener((UICheckBox) components[i][0], (UITextField) components[i][1]); - } - } + public void addComponentListener(Component[][] components) { + for (int i = 0; i < components.length; i++) { + addListener((UICheckBox) components[i][0]); + ChartSwingUtils.addListener((UICheckBox) components[i][0], (UITextField) components[i][1]); + } + } + + protected void addListener(UICheckBox checkBox) { + checkBox.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + checkBoxUse(); + } + }); + } protected Component[][] getPanelComponents() { return new Component[][]{ @@ -75,7 +79,7 @@ public class MinMaxValuePane extends JPanel { }; } - protected void checkBoxUse() { + private void checkBoxUse() { minValueField.setEnabled(minCheckBox.isSelected()); maxValueField.setEnabled(maxCheckBox.isSelected()); From 814bea2e11f20cb32f895aa3d9792684fcaf8045 Mon Sep 17 00:00:00 2001 From: mengao <283296419@qq.com> Date: Thu, 13 Apr 2017 10:48:19 +0800 Subject: [PATCH 277/343] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/chart/axis/MinMaxValuePane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java index 2ae89b60c..88a6b528e 100644 --- a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java +++ b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java @@ -53,7 +53,7 @@ public class MinMaxValuePane extends JPanel { protected double[] getRowSize(double p) { return new double[]{p, p, p, p}; } - public void addComponentListener(Component[][] components) { + protected void addComponentListener(Component[][] components) { for (int i = 0; i < components.length; i++) { addListener((UICheckBox) components[i][0]); ChartSwingUtils.addListener((UICheckBox) components[i][0], (UITextField) components[i][1]); From 333fd8357733c51924ead06553c57077b03b9be0 Mon Sep 17 00:00:00 2001 From: mengao <283296419@qq.com> Date: Thu, 13 Apr 2017 11:23:14 +0800 Subject: [PATCH 278/343] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E6=9C=80=E5=A4=A7=E6=9C=80=E5=B0=8F=E5=80=BC=EF=BC=8C?= =?UTF-8?q?=E4=B8=8Ereleas=E5=88=86=E6=94=AF=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/chart/axis/MinMaxValuePane.java | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java index 479089259..8a157f084 100644 --- a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java +++ b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java @@ -55,19 +55,23 @@ public class MinMaxValuePane extends JPanel { return new double[]{p, p, p, p}; } - public void addComponentListener(Component[][] components) { + protected void addComponentListener(Component[][] components) { for (int i = 0; i < components.length; i++) { - ((UICheckBox) components[i][0]).addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - checkBoxUse(); - } - }); + addListener((UICheckBox) components[i][0]); ChartSwingUtils.addListener((UICheckBox) components[i][0], (UITextField) components[i][1]); } } + protected void addListener(UICheckBox checkBox) { + checkBox.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + checkBoxUse(); + } + }); + } + protected Component[][] getPanelComponents() { return new Component[][]{ new Component[]{minCheckBox, minValueField}, @@ -77,7 +81,7 @@ public class MinMaxValuePane extends JPanel { }; } - protected void checkBoxUse() { + private void checkBoxUse() { minValueField.setEnabled(minCheckBox.isSelected()); maxValueField.setEnabled(maxCheckBox.isSelected()); @@ -108,7 +112,7 @@ public class MinMaxValuePane extends JPanel { if(axis.getMinValue() != null) { minValueField.setText(axis.getMinValue().toString()); } - } + } // 最大值 if (axis.isCustomMaxValue()) { @@ -116,7 +120,7 @@ public class MinMaxValuePane extends JPanel { if(axis.getMaxValue() != null) { maxValueField.setText(axis.getMaxValue().toString()); } - } + } // 主次刻度单位 if (axis.isCustomMainUnit()) { @@ -124,7 +128,7 @@ public class MinMaxValuePane extends JPanel { if(axis.getMainUnit() != null) { mainUnitField.setText(axis.getMainUnit().toString()); } - } + } if(axis.isCustomSecUnit()) { isCustomSecUnitBox.setSelected(true); From 5f68195875d229f011c065c416d618243e60ea41 Mon Sep 17 00:00:00 2001 From: mengao <283296419@qq.com> Date: Thu, 13 Apr 2017 11:39:31 +0800 Subject: [PATCH 279/343] =?UTF-8?q?=E5=8A=A0=E4=B8=8A=E4=B9=8B=E5=89=8D?= =?UTF-8?q?=E5=90=88=E5=B9=B6=E5=86=B2=E7=AA=81=E8=A2=AB=E5=88=A0=E6=8E=89?= =?UTF-8?q?=E7=9A=84=E5=9B=BD=E9=99=85=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/locale/designer.properties | 6 +++++- .../src/com/fr/design/locale/designer_en_US.properties | 6 +++++- .../src/com/fr/design/locale/designer_ja_JP.properties | 4 ++++ .../src/com/fr/design/locale/designer_ko_KR.properties | 6 +++++- .../src/com/fr/design/locale/designer_zh_CN.properties | 4 ++++ .../src/com/fr/design/locale/designer_zh_TW.properties | 6 +++++- 6 files changed, 28 insertions(+), 4 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index e3ee03999..94733eaad 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -587,4 +587,8 @@ FR-Designer_Mouse_Click_Tips= 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 \ No newline at end of file +FR-Designer-Move_Tab_Prev=move to previous +FR-Designer_AxisReversed=AxisValue +FR-Designer_Logarithmic=Logarithmic +FR-Designer_Chart_Log_Base=Log Base +FR-Designer_Chart_F_Radar_Axis=Chart_F_Radar_Axis \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index a86a7fb14..5bc73972e 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -587,4 +587,8 @@ 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_End=move to end FR-Designer-Move_Tab_Next=move to next -FR-Designer-Move_Tab_Prev=move to previous \ No newline at end of file +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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index 943cf181d..1a7ee9322 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -555,3 +555,7 @@ FR-Designer_Initial_Background_Tips= FR-Designer_Mouse_Move_Tips= FR-Designer_Mouse_Click_Tips= FR-Designer_Plugin_Should_Update_Please_Contact_Developer= +FR-Designer_AxisReversed=\u8EF8\u9006\u9806 +FR-Designer_Logarithmic=\u5BFE\u6570\u76EE\u76DB\u308A +FR-Designer_Chart_Log_Base=\u5E95\u6570 +FR-Designer_Chart_F_Radar_Axis=\u5782\u76F4\u8EF8 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index db796ce43..87fc8705a 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -551,4 +551,8 @@ FR-Designer_Background_Image_Select= FR-Designer_Initial_Background_Tips= FR-Designer_Mouse_Move_Tips= FR-Designer_Mouse_Click_Tips= -FR-Designer_Plugin_Should_Update_Please_Contact_Developer= \ No newline at end of file +FR-Designer_Plugin_Should_Update_Please_Contact_Developer= +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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 726a6d0f6..f0e7eb176 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -588,3 +588,7 @@ FR-Designer_Background_Image_Select=\u9009\u62E9\u56FE\u7247 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_Click_Tips=\u9F20\u6807\u70B9\u51FB\u6309\u94AE\u65F6\u80CC\u666F\uFF0C\u82E5\u65E0\u5219\u4E0D\u6539\u53D8\u80CC\u666F +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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index f8b28dba3..b97e4969b 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -575,4 +575,8 @@ FR-Designer_Background_Clear= FR-Designer_Background_Image_Select= FR-Designer_Initial_Background_Tips= FR-Designer_Mouse_Move_Tips= -FR-Designer_Mouse_Click_Tips= \ No newline at end of file +FR-Designer_Mouse_Click_Tips= +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 \ No newline at end of file From be48bf4b295d2cda530003874b5b0edde571074b Mon Sep 17 00:00:00 2001 From: kerry Date: Thu, 13 Apr 2017 16:08:15 +0800 Subject: [PATCH 280/343] =?UTF-8?q?REPORT-2220=20=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5=E7=94=A8=E6=88=B7=E5=90=8D=E5=92=8C=E5=AF=86?= =?UTF-8?q?=E7=A0=81=E5=8F=AF=E4=BB=A5=E4=BC=A0=E5=8F=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/formula/VariableResolverAdapter.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/formula/VariableResolverAdapter.java b/designer_base/src/com/fr/design/formula/VariableResolverAdapter.java index eb80600ac..623b1cbf4 100644 --- a/designer_base/src/com/fr/design/formula/VariableResolverAdapter.java +++ b/designer_base/src/com/fr/design/formula/VariableResolverAdapter.java @@ -4,12 +4,16 @@ import com.fr.base.ConfigManager; import com.fr.base.Parameter; import com.fr.design.DesignModelAdapter; import com.fr.base.ConfigManagerProvider; +import com.fr.plugin.ExtraClassManager; import com.fr.script.ScriptConstants; +import com.fr.stable.ArrayUtils; import com.fr.stable.Constants; +import com.fr.stable.fun.BuiltInParametersProvider; import com.fr.stable.script.CalculatorProvider; import java.util.ArrayList; import java.util.List; +import java.util.Set; public abstract class VariableResolverAdapter implements VariableResolver { private static final int TABLE_DATA_PARA = 0; @@ -21,7 +25,7 @@ public abstract class VariableResolverAdapter implements VariableResolver { * @return 内置参数 */ public String[] resolveCurReportVariables() { - return new String[] { ScriptConstants.SUMMARY_TAG + "page_number", + String [] variables = new String[] { ScriptConstants.SUMMARY_TAG + "page_number", ScriptConstants.SUMMARY_TAG + "totalPage_number", // 下面是权限相关的参数 ScriptConstants.DETAIL_TAG + Constants.P.PRIVILEGE_USERNAME, ScriptConstants.DETAIL_TAG + Constants.P.PRIVILEGE_AUTHORITY, @@ -32,6 +36,13 @@ public abstract class VariableResolverAdapter implements VariableResolver { CalculatorProvider.REPORT_NAME, CalculatorProvider.FORMLET_NAME, CalculatorProvider.SERVLET_URL, CalculatorProvider.SERVER_SCHEMA, CalculatorProvider.SERVER_NAME, CalculatorProvider.SERVER_PORT, CalculatorProvider.SERVER_URL, CalculatorProvider.CONTEXT_PATH, CalculatorProvider.SESSION_ID }; + Set set = ExtraClassManager.getInstance().getArray(BuiltInParametersProvider.XML_TAG); + for (BuiltInParametersProvider provider : set) { + return (String[]) ArrayUtils.addAll(variables, new String []{ + ScriptConstants.DETAIL_TAG + provider.getParametersName() + }); + } + return variables; } private Parameter[] getCurrentModeParameters(int type) { From 3471515bddf69b30c9a7956077a0c40c83c3b128 Mon Sep 17 00:00:00 2001 From: fr_shine Date: Thu, 13 Apr 2017 20:10:05 +0800 Subject: [PATCH 281/343] =?UTF-8?q?=E4=B8=80=E4=B8=AA=E5=B0=8F=E8=AD=A6?= =?UTF-8?q?=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/style/color/ColorSelectConfigManager.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/designer_base/src/com/fr/design/style/color/ColorSelectConfigManager.java b/designer_base/src/com/fr/design/style/color/ColorSelectConfigManager.java index af3d7df81..e135b17c6 100644 --- a/designer_base/src/com/fr/design/style/color/ColorSelectConfigManager.java +++ b/designer_base/src/com/fr/design/style/color/ColorSelectConfigManager.java @@ -84,6 +84,9 @@ public class ColorSelectConfigManager extends XMLFileManager implements ColorSel * @param color 颜色 */ public void addToColorQueue(Color color) { + if(color == null){ + return; + } // 过滤重复的最近使用颜色 // 因为有个后进先出的问题,最近使用的颜色需要放到最前面所以没用set if (colors.contains(color)) { From c247eeac6a60cd0468fb78e451fe307a2feaef50 Mon Sep 17 00:00:00 2001 From: zack Date: Fri, 14 Apr 2017 14:54:45 +0800 Subject: [PATCH 282/343] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1=20=20?= =?UTF-8?q?=E5=B1=8F=E8=94=BD=E6=96=B0=E7=BF=BB=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/designer/creator/XElementCase.java | 160 +++++++++--------- 1 file changed, 77 insertions(+), 83 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/creator/XElementCase.java b/designer_form/src/com/fr/design/designer/creator/XElementCase.java index c7cd3b493..3a077e57a 100644 --- a/designer_form/src/com/fr/design/designer/creator/XElementCase.java +++ b/designer_form/src/com/fr/design/designer/creator/XElementCase.java @@ -10,9 +10,11 @@ import com.fr.design.fun.WidgetPropertyUIProvider; import com.fr.design.fun.impl.AbstractFormElementCaseEditorProvider; import com.fr.design.gui.ilable.UILabel; import com.fr.design.mainframe.*; -import com.fr.design.mainframe.widget.editors.ElementCaseToolBarEditor; +import com.fr.design.mainframe.widget.editors.BooleanEditor; import com.fr.design.mainframe.widget.editors.PaddingMarginEditor; import com.fr.design.mainframe.widget.editors.WLayoutBorderStyleEditor; +import com.fr.design.mainframe.widget.renderer.LayoutBorderStyleRenderer; +import com.fr.design.mainframe.widget.renderer.PaddingMarginCellRenderer; import com.fr.form.FormElementCaseContainerProvider; import com.fr.form.FormElementCaseProvider; import com.fr.form.FormProvider; @@ -34,8 +36,8 @@ import java.beans.PropertyDescriptor; import java.util.Set; public class XElementCase extends XBorderStyleWidgetCreator implements FormElementCaseContainerProvider{ - private UILabel imageLable; - private CoverReportPane coverPanel; + private UILabel imageLable; + private CoverReportPane coverPanel; private FormDesigner designer; //缩略图 private BufferedImage thumbnailImage; @@ -64,30 +66,23 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme } /** - * 是否支持设置标题 - * @return 是返回true - */ - public boolean hasTitleStyle() { + * 是否支持设置标题 + * @return 是返回true + */ + public boolean hasTitleStyle() { return true; } - /** - * 返回组件属性值 - * @return 返回组件属性值 - * @throws IntrospectionException 异常 - */ + /** + * 返回组件属性值 + * @return 返回组件属性值 + * @throws IntrospectionException 异常 + */ public CRPropertyDescriptor[] supportedDescriptor() throws IntrospectionException { CRPropertyDescriptor[] propertyTableEditor = new CRPropertyDescriptor[]{ new CRPropertyDescriptor("widgetName", this.data.getClass()) .setI18NName(Inter.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( WLayoutBorderStyleEditor.class).setI18NName( Inter.getLocText("FR-Designer-Widget_Style")).putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced") @@ -97,12 +92,11 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme public void propertyChange() { initStyle(); } - }), new CRPropertyDescriptor("margin", this.data.getClass()).setEditorClass(PaddingMarginEditor.class) .setI18NName(Inter.getLocText("FR-Layout_Padding")) .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced"), - new CRPropertyDescriptor("ToolBars", this.data.getClass()).setEditorClass(ElementCaseToolBarEditor.class) + new CRPropertyDescriptor("showToolBar", this.data.getClass()).setEditorClass(BooleanEditor.class) .setI18NName(Inter.getLocText("Form-EC_toolbar")) .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced") }; @@ -149,30 +143,30 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme return "text_field_16.png"; } - /** - * 返回组件默认名 - * @return 组件类名(小写) - */ - public String createDefaultName() { - return "report"; - } + /** + * 返回组件默认名 + * @return 组件类名(小写) + */ + public String createDefaultName() { + return "report"; + } @Override protected JComponent initEditor() { if (editor == null) { setBorder(DEFALUTBORDER); - editor = new JPanel(); - editor.setBackground(null); - editor.setLayout(null); - imageLable = initImageBackground(); - - coverPanel = new CoverReportPane(); - coverPanel.setPreferredSize(imageLable.getPreferredSize()); - coverPanel.setBounds(imageLable.getBounds()); - - editor.add(coverPanel); - coverPanel.setVisible(false); - editor.add(imageLable); + editor = new JPanel(); + editor.setBackground(null); + editor.setLayout(null); + imageLable = initImageBackground(); + + coverPanel = new CoverReportPane(); + coverPanel.setPreferredSize(imageLable.getPreferredSize()); + coverPanel.setBounds(imageLable.getBounds()); + + editor.add(coverPanel); + coverPanel.setVisible(false); + editor.add(imageLable); } return editor; } @@ -185,7 +179,7 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme BufferedImage image = getThumbnailImage(); setLabelBackground(image, imageLable); - return imageLable; + return imageLable; } /** @@ -194,16 +188,16 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme private void setLabelBackground(Image image, UILabel imageLable){ ImageIcon icon = new ImageIcon(image); imageLable.setIcon(icon); - imageLable.setOpaque(true); - imageLable.setLayout(null); - imageLable.setBounds(0, 0, icon.getIconWidth(), icon.getIconHeight()); + imageLable.setOpaque(true); + imageLable.setLayout(null); + imageLable.setBounds(0, 0, icon.getIconWidth(), icon.getIconHeight()); } - /** - * 是否展现覆盖的pane - * @param display 是否 - */ - public void displayCoverPane(boolean display){ + /** + * 是否展现覆盖的pane + * @param display 是否 + */ + public void displayCoverPane(boolean display){ coverPanel.setVisible(display); coverPanel.setBounds(1, 1, (int) editor.getBounds().getWidth(), (int) editor.getBounds().getHeight()); editor.repaint(); @@ -216,41 +210,41 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme coverPanel.destroyHelpDialog(); } - public JComponent getCoverPane(){ - return coverPanel; - } + public JComponent getCoverPane(){ + return coverPanel; + } - /** - * 初始化大小 - * @return 尺寸 - */ + /** + * 初始化大小 + * @return 尺寸 + */ public Dimension initEditorSize() { return BORDER_PREFERRED_SIZE; } - /** - * 是否是报表块 - * @return 是 - */ + /** + * 是否是报表块 + * @return 是 + */ public boolean isReport() { return true; } - /** - * 该组件是否可以拖入参数面板 - * @return 是则返回true - */ - public boolean canEnterIntoParaPane(){ - return false; - } - - /** - * 返回报表块对应的widget - * @return 返回ElementCaseEditor - */ - public ElementCaseEditor toData() { - return ((ElementCaseEditor) data); - } + /** + * 该组件是否可以拖入参数面板 + * @return 是则返回true + */ + public boolean canEnterIntoParaPane(){ + return false; + } + + /** + * 返回报表块对应的widget + * @return 返回ElementCaseEditor + */ + public ElementCaseEditor toData() { + return ((ElementCaseEditor) data); + } public FormElementCaseProvider getElementCase() { return toData().getElementCase(); @@ -301,14 +295,14 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme } - private void switchTab(MouseEvent e,EditingMouseListener editingMouseListener){ - FormDesigner designer = editingMouseListener.getDesigner(); - if (e.getClickCount() == 2 || designer.getCursor().getType() == Cursor.HAND_CURSOR){ - FormElementCaseContainerProvider component = (FormElementCaseContainerProvider) designer.getComponentAt(e); - //切换设计器 - designer.switchTab(component); - } - } + private void switchTab(MouseEvent e,EditingMouseListener editingMouseListener){ + FormDesigner designer = editingMouseListener.getDesigner(); + if (e.getClickCount() == 2 || designer.getCursor().getType() == Cursor.HAND_CURSOR){ + FormElementCaseContainerProvider component = (FormElementCaseContainerProvider) designer.getComponentAt(e); + //切换设计器 + designer.switchTab(component); + } + } @Override public WidgetPropertyUIProvider[] getWidgetPropertyUIProviders() { From 08069fbfe0b9d75a73bc51eb4557246368826851 Mon Sep 17 00:00:00 2001 From: zack Date: Mon, 17 Apr 2017 14:25:03 +0800 Subject: [PATCH 283/343] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1=20=20?= =?UTF-8?q?=20=E8=A7=A3=E5=86=B3=E4=BB=A3=E7=A0=81=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../layout/FRAbsoluteLayoutAdapter.java | 162 +++++++++--------- 1 file changed, 81 insertions(+), 81 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java index e96d39225..8ca201252 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java @@ -1,31 +1,31 @@ -package com.fr.design.designer.beans.adapters.layout; - -import com.fr.design.beans.GroupModel; -import com.fr.design.designer.beans.ConstraintsGroupModel; -import com.fr.design.designer.beans.HoverPainter; -import com.fr.design.designer.beans.painters.FRAbsoluteLayoutPainter; -import com.fr.design.designer.creator.*; -import com.fr.design.designer.properties.BoundsGroupModel; -import com.fr.design.designer.properties.FRAbsoluteLayoutPropertiesGroupModel; -import com.fr.design.utils.ComponentUtils; -import com.fr.design.utils.gui.LayoutUtils; -import com.fr.general.ComparatorUtils; -import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; -import com.fr.general.FRLogger; - +package com.fr.design.designer.beans.adapters.layout; + +import com.fr.design.beans.GroupModel; +import com.fr.design.designer.beans.ConstraintsGroupModel; +import com.fr.design.designer.beans.HoverPainter; +import com.fr.design.designer.beans.painters.FRAbsoluteLayoutPainter; +import com.fr.design.designer.creator.*; +import com.fr.design.designer.properties.BoundsGroupModel; +import com.fr.design.designer.properties.FRAbsoluteLayoutPropertiesGroupModel; +import com.fr.design.utils.ComponentUtils; +import com.fr.design.utils.gui.LayoutUtils; +import com.fr.form.ui.container.WAbsoluteLayout; +import com.fr.general.ComparatorUtils; +import com.fr.general.FRLogger; + import java.awt.*; -public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { +public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { //是不是添加到父容器上 private boolean isAdd2ParentLayout = false; private HoverPainter painter; - - public FRAbsoluteLayoutAdapter(XLayoutContainer container) { - super(container); + + public FRAbsoluteLayoutAdapter(XLayoutContainer container) { + super(container); painter = new FRAbsoluteLayoutPainter(container); initMinSize(); - } - + } + private void initMinSize() { XWAbsoluteLayout layout = (XWAbsoluteLayout) container; minWidth = layout.getActualMinWidth(); @@ -33,25 +33,25 @@ public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { actualVal = layout.getAcualInterval(); margin = layout.toData().getMargin(); } - + @Override public HoverPainter getPainter() { return painter; } - /** - * 是否能在指定位置添加组件 + /** + * 是否能在指定位置添加组件 * - * @param creator 组件 + * @param creator 组件 * @param x 坐标x * @param y 坐标y - * @return 能则返回true - */ + * @return 能则返回true + */ //这个地方的逻辑非常复杂, // 1.当前绝对布局是不可编辑且是最外层,那么其他控件添加在它周围, // 2.当前绝对布局是不可编辑且不是最外层,那么控件不可添加,(嵌套) // 3.当前绝对布局可编辑,那么控件添加 - @Override + @Override public boolean accept(XCreator creator, int x, int y) { Component comp = container.getComponentAt(x, y); //布局控件要先判断是不是可编辑 @@ -85,39 +85,39 @@ public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { } else { FRLogger.getLogger().error("top layout is null!"); } - + return false; } - + //topLayout假如可以编辑的话就往里面添加组件 private boolean topLayoutAccept(XCreator creator, int x, int y) { //允许组件重叠,可以不判断有没有和当前控件重叠 //先计算当前控件的位置 int creatorX, creatorY; if (XCreatorUtils.getParentXLayoutContainer(creator) != null) { - Rectangle creatorRectangle = ComponentUtils.getRelativeBounds(creator); - creatorX = creatorRectangle.x; - creatorY = creatorRectangle.y; - } else { + Rectangle creatorRectangle = ComponentUtils.getRelativeBounds(creator); + creatorX = creatorRectangle.x; + creatorY = creatorRectangle.y; + } else { //这边计算得到的组件其实位置是正确的, //因为传入的x和y已经加上了宽度或者高度的一半,再减去相同的宽度和高度的一半是没区别的, // 例如高度为21,那么就是+10-10; // 高度为20,那么就是+10-10; 没区别 - int w = creator.getWidth() / 2; - int h = creator.getHeight() / 2; - creatorX = x - w; - creatorY = y - h; - } + int w = creator.getWidth() / 2; + int h = creator.getHeight() / 2; + creatorX = x - w; + creatorY = y - h; + } if (creatorX < 0 || creatorX + creator.getWidth() > container.getWidth()) { - return false; - } + return false; + } if (creatorY < 0 || creatorY + creator.getHeight() > container.getHeight()) { - return false; - } + return false; + } return x >= 0 && y >= 0 && creator.getHeight() <= container.getHeight() - && creator.getWidth() <= container.getWidth(); + && creator.getWidth() <= container.getWidth(); } - + /** * 判断是否鼠标在组件的三等分区域,如果组件在布局管理器中间,上下左右都可能会三等分 * @@ -156,10 +156,10 @@ public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { if (!creator.getTargetChildrenList().isEmpty()) { return false; } - + return !ComparatorUtils.equals(trisectAreaDirect, 0); } - + //当前绝对布局不可编辑,就当成一个控件,组件添加在周围 private boolean acceptWidget(int x, int y) { isFindRelatedComps = false; @@ -169,27 +169,27 @@ public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { XLayoutContainer parent = container.findNearestFit(); container = parent != null ? parent : container; isAdd2ParentLayout = true; - + int componentHeight = comp.getHeight(); int componentWidth = comp.getWidth(); //上半部分高度 int upHeight = (int) (componentHeight * TOP_HALF) + comp.getY(); //下半部分高度 int downHeight = (int) (componentHeight * BOTTOM_HALF) + comp.getY(); - + if (isCrossPointArea(comp, x, y)) { return canAcceptWhileCrossPoint(comp, x, y); } - + if (isTrisectionArea(comp, x, y)) { return canAcceptWhileTrisection(comp, x, y); } - + boolean horizonValid = componentWidth >= minWidth * 2 + actualVal; boolean verticalValid = componentHeight >= minHeight * 2 + actualVal; return y > upHeight && y < downHeight ? horizonValid : verticalValid; } - + /** * 组件的ComponentAdapter在添加组件时,如果发现布局管理器不为空,会继而调用该布局管理器的 * addComp方法来完成组件的具体添加。在该方法内,布局管理器可以提供额外的功能。 @@ -202,7 +202,7 @@ public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { @Override public boolean addBean(XCreator creator, int x, int y) { Rectangle rect = ComponentUtils.getRelativeBounds(container); - + int posX = x + rect.x; int posY = y + rect.y; if (!accept(creator, x, y)) { @@ -212,7 +212,7 @@ public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { ((XWidgetCreator) creator).recalculateChildrenSize(); return true; } - + @Override protected void addComp(XCreator creator, int x, int y) { if (!isAdd2ParentLayout) { @@ -220,7 +220,7 @@ public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { x = x - r.x; y = y - r.y; if (XCreatorUtils.getParentXLayoutContainer(creator) != null) { - + Rectangle creatorRectangle = ComponentUtils.getRelativeBounds(creator); x = creatorRectangle.x - r.x; y = creatorRectangle.y - r.y; @@ -231,11 +231,11 @@ public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { y = y - h; } fix(creator, x, y); - + if (creator.hasTitleStyle()) { addParentCreator(creator); } else { - container.add(creator, creator.toData().getWidgetName(),0); + container.add(creator, creator.toData().getWidgetName(), 0); } XWAbsoluteLayout layout = (XWAbsoluteLayout) container; layout.updateBoundsWidget(creator); @@ -246,7 +246,7 @@ public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { if (creator.shouldScaleCreator() || creator.hasTitleStyle()) { addParentCreator(creator); } else { - container.add(creator, creator.toData().getWidgetName(),0); + container.add(creator, creator.toData().getWidgetName(), 0); } XWFitLayout layout = (XWFitLayout) container; // 更新对应的BoundsWidget @@ -254,7 +254,7 @@ public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { updateCreatorBackBound(); } } - + private void updateCreatorBackBound() { for (int i = 0, size = container.getComponentCount(); i < size; i++) { XCreator creator = (XCreator) container.getComponent(i); @@ -262,12 +262,12 @@ public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { creator.setBackupBound(creator.getBounds()); } } - + private void addParentCreator(XCreator child) { XLayoutContainer parentPanel = child.initCreatorWrapper(child.getHeight()); - container.add(parentPanel, child.toData().getWidgetName(),0); + container.add(parentPanel, child.toData().getWidgetName(), 0); } - + /** * 新拖入组件时,计算调整其他关联组件位置大小 * @@ -292,29 +292,29 @@ public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { fixHalve(parentComp, child, x, y); } } - + /** - * 组件拖拽后调整大小 + * 组件拖拽后调整大小 * - * @param creator 组件 - */ - @Override + * @param creator 组件 + */ + @Override public void fix(XCreator creator) { WAbsoluteLayout wabs = (WAbsoluteLayout) container.toData(); fix(creator, creator.getX(), creator.getY()); wabs.setBounds(creator.toData(), creator.getBounds()); - + XWAbsoluteLayout layout = (XWAbsoluteLayout) container; layout.updateBoundsWidget(creator); - } + } - /** - * 调整组件大小到合适尺寸位置 + /** + * 调整组件大小到合适尺寸位置 * - * @param creator 组件 + * @param creator 组件 * @param x 坐标x * @param y 坐标y - */ + */ public void fix(XCreator creator, int x, int y) { int height = creator.getHeight(); int width = creator.getWidth(); @@ -323,21 +323,21 @@ public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { } else if (x + creator.getWidth() > container.getWidth()) { x = container.getWidth() - width; } - + if (y < 0) { y = container.getY(); } else if (y + creator.getHeight() > container.getHeight()) { y = container.getHeight() - height; } - + creator.setBounds(x, y, width, height); - } - - @Override - public ConstraintsGroupModel getLayoutConstraints(XCreator creator) { + } + + @Override + public ConstraintsGroupModel getLayoutConstraints(XCreator creator) { return new BoundsGroupModel((XWAbsoluteLayout) container, creator); - } - + } + @Override public GroupModel getLayoutProperties() { XWAbsoluteLayout xwAbsoluteLayout = (XWAbsoluteLayout) container; From 935b4fcca69eb3f0e5d792fccc596e45b1f23f03 Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 17 Apr 2017 15:33:00 +0800 Subject: [PATCH 284/343] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=EF=BC=9B=E5=8E=BB=E6=8E=89=E8=B0=83=E8=AF=95=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../templateinfo/TemplateInfoCollector.java | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java index b9b7aa194..e5c6688ec 100644 --- a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java @@ -73,8 +73,6 @@ public class TemplateInfoCollector implements Serializable { } catch (InvalidClassException ex) { // 如果 TemplateInfoCollecor 类结构有改动,则放弃之前收集的数据(下次保存时覆盖) // 这种情况主要在开发、测试过程中遇到,正式上线后不应该出现 - FRLogger.getLogger().info(ex.getMessage()); - FRLogger.getLogger().info("use a new instance"); instance = new TemplateInfoCollector(); } catch (Exception ex) { @@ -123,14 +121,6 @@ public class TemplateInfoCollector implements Serializable { private void saveInfo() { try { ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(getInfoFile())); - String log = ""; - int count = 1; - for (String key : templateInfoList.keySet()) { - String createTime = ((HashMap)templateInfoList.get(key).get("consumingMap")).get("create_time").toString(); - log += (count + ". id: " + key + " " + createTime + "\n" + templateInfoList.get(key).toString() + "\n"); - count ++; - } - FRLogger.getLogger().info("writing tplInfo: \n" + log); os.writeObject(instance); os.close(); } catch (Exception ex) { @@ -241,10 +231,7 @@ public class TemplateInfoCollector implements Serializable { String jsonProcessMap = templateInfo.get("jsonProcessMap"); if (sendSingleTemplateInfo(consumingUrl, jsonConsumingMap) && sendSingleTemplateInfo(processUrl, jsonProcessMap)) { // 清空记录 - FRLogger.getLogger().info("successfully send " + templateInfo.get("templateID")); removeFromTemplateInfoList(templateInfo.get("templateID")); - } else { - FRLogger.getLogger().info("send template info failed, will try next time, " + templateInfo.get("templateID")); } } saveInfo(); @@ -303,7 +290,6 @@ public class TemplateInfoCollector implements Serializable { private void removeFromTemplateInfoList(String key) { templateInfoList.remove(key); - FRLogger.getLogger().info(key + " is removed..."); } @SuppressWarnings("unchecked") From 0593924ef3d8c3289bee1b779997312a9908c387 Mon Sep 17 00:00:00 2001 From: plough Date: Tue, 18 Apr 2017 14:03:13 +0800 Subject: [PATCH 285/343] =?UTF-8?q?REPORT-2430=20master=E6=94=B6=E9=9B=86?= =?UTF-8?q?=E7=9A=84=E6=A8=A1=E6=9D=BF=E4=BF=A1=E6=81=AF=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E5=88=A0=E6=8E=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../templateinfo/TemplateInfoCollector.java | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java index b9b7aa194..e5c6688ec 100644 --- a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java @@ -73,8 +73,6 @@ public class TemplateInfoCollector implements Serializable { } catch (InvalidClassException ex) { // 如果 TemplateInfoCollecor 类结构有改动,则放弃之前收集的数据(下次保存时覆盖) // 这种情况主要在开发、测试过程中遇到,正式上线后不应该出现 - FRLogger.getLogger().info(ex.getMessage()); - FRLogger.getLogger().info("use a new instance"); instance = new TemplateInfoCollector(); } catch (Exception ex) { @@ -123,14 +121,6 @@ public class TemplateInfoCollector implements Serializable { private void saveInfo() { try { ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(getInfoFile())); - String log = ""; - int count = 1; - for (String key : templateInfoList.keySet()) { - String createTime = ((HashMap)templateInfoList.get(key).get("consumingMap")).get("create_time").toString(); - log += (count + ". id: " + key + " " + createTime + "\n" + templateInfoList.get(key).toString() + "\n"); - count ++; - } - FRLogger.getLogger().info("writing tplInfo: \n" + log); os.writeObject(instance); os.close(); } catch (Exception ex) { @@ -241,10 +231,7 @@ public class TemplateInfoCollector implements Serializable { String jsonProcessMap = templateInfo.get("jsonProcessMap"); if (sendSingleTemplateInfo(consumingUrl, jsonConsumingMap) && sendSingleTemplateInfo(processUrl, jsonProcessMap)) { // 清空记录 - FRLogger.getLogger().info("successfully send " + templateInfo.get("templateID")); removeFromTemplateInfoList(templateInfo.get("templateID")); - } else { - FRLogger.getLogger().info("send template info failed, will try next time, " + templateInfo.get("templateID")); } } saveInfo(); @@ -303,7 +290,6 @@ public class TemplateInfoCollector implements Serializable { private void removeFromTemplateInfoList(String key) { templateInfoList.remove(key); - FRLogger.getLogger().info(key + " is removed..."); } @SuppressWarnings("unchecked") From fed1ceaeea3185789c5a78b17671d7f29afe7850 Mon Sep 17 00:00:00 2001 From: mengao <283296419@qq.com> Date: Tue, 18 Apr 2017 23:34:48 +0800 Subject: [PATCH 286/343] =?UTF-8?q?=E9=9D=A2=E6=9D=BF=E4=B8=AD=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E4=B8=80=E4=BA=9B=E6=8E=A5=E5=8F=A3=E6=96=B9=E6=B3=95?= =?UTF-8?q?=EF=BC=88Vancharts=E6=96=B0=E6=8F=92=E4=BB=B6=E5=8F=91=E5=B8=83?= =?UTF-8?q?=E9=9C=80=E8=A6=81=EF=BC=8Ceason=E4=B8=8EFR=E5=95=86=E8=AE=A8?= =?UTF-8?q?=E7=A1=AE=E8=AE=A4=EF=BC=8C=E5=8F=AF=E4=BB=A5=E7=9B=B4=E6=8E=A5?= =?UTF-8?q?=E4=BF=AE=E6=94=B9master=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chart/gui/data/TableDataPane.java | 31 ++++++++++++++----- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/data/TableDataPane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/data/TableDataPane.java index a6bea6b0c..721e7432a 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/data/TableDataPane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/data/TableDataPane.java @@ -25,6 +25,10 @@ public class TableDataPane extends FurtherBasicBeanPane{ private ChartDataPane parent; + protected AbstractTableDataContentPane getDataContentPane() { + return dataContentPane; + } + public TableDataPane(ChartDataPane parent) { this.parent = parent; initDataPane(); @@ -103,34 +107,41 @@ public class TableDataPane extends FurtherBasicBeanPane{ * @param collection 图表属性的集合 */ public void refreshContentPane(ChartCollection collection) { + refreshContentPane(getContentPane(collection.getSelectedChart().getPlot())); + } + + protected void refreshContentPane(AbstractTableDataContentPane contentPane) { if(dataContentPane != null) { remove(dataContentPane); } - dataContentPane = getContentPane(collection.getSelectedChart().getPlot()); + dataContentPane = contentPane; if(dataContentPane != null) { add(dataContentPane, BorderLayout.CENTER); } } - /** - * 更新界面属性 + * 更新界面属性 */ public void populateBean(ChartCollection collection) { if(collection == null) { return; } TableDataDefinition data = (TableDataDefinition)collection.getSelectedChart().getFilterDefinition(); + populateDSName(data); + if(dataContentPane != null) { + dataContentPane.populateBean(collection); + } + } + protected void populateDSName(TableDataDefinition dataDefinition){ + TableData tableData = null; - if(data != null) { - tableData = data.getTableData(); + if(dataDefinition != null) { + tableData = dataDefinition.getTableData(); } onSelectTableData(); checkBoxUse(); tableDataPane.populateBean(tableData); - if(dataContentPane != null) { - dataContentPane.populateBean(collection); - } } /** @@ -141,6 +152,10 @@ public class TableDataPane extends FurtherBasicBeanPane{ dataContentPane.updateBean(collection); } TopDefinition dataDefinition = (TopDefinition)collection.getSelectedChart().getFilterDefinition(); + updateDSName(dataDefinition); + } + + protected void updateDSName(TopDefinition dataDefinition) { if(dataDefinition instanceof TableDataDefinition) { TableDataWrapper tableDataWrapper = tableDataPane.getTableDataWrapper(); if (dataDefinition != null && tableDataWrapper != null){ From 23566ed6ba492fa846b83bd88241474317186e6c Mon Sep 17 00:00:00 2001 From: plough Date: Wed, 19 Apr 2017 16:39:06 +0800 Subject: [PATCH 287/343] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=EF=BC=8C=E6=88=AA=E8=8E=B7=E6=A8=A1=E6=9D=BF=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E6=94=B6=E9=9B=86=E5=88=9D=E5=A7=8B=E5=8C=96=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E5=8F=AF=E8=83=BD=E5=AF=BC=E8=87=B4=E6=A8=A1=E6=9D=BF=E6=89=93?= =?UTF-8?q?=E4=B8=8D=E5=BC=80=E7=9A=84=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/templateinfo/TemplateInfoCollector.java | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java index e5c6688ec..f8e985f66 100644 --- a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java @@ -67,16 +67,8 @@ public class TemplateInfoCollector implements Serializable { try{ ObjectInputStream is = new ObjectInputStream(new FileInputStream(getInfoFile())); instance = (TemplateInfoCollector) is.readObject(); - } catch (FileNotFoundException ex) { - // 如果之前没有存储过,则创建新对象 + } catch (Exception ex) { instance = new TemplateInfoCollector(); - } catch (InvalidClassException ex) { - // 如果 TemplateInfoCollecor 类结构有改动,则放弃之前收集的数据(下次保存时覆盖) - // 这种情况主要在开发、测试过程中遇到,正式上线后不应该出现 - instance = new TemplateInfoCollector(); - } - catch (Exception ex) { - FRLogger.getLogger().error(ex.getMessage(), ex); } } return instance; From ffc2a088efe9c3cf3903615eea584cb1b245d0bf Mon Sep 17 00:00:00 2001 From: zack Date: Wed, 19 Apr 2017 18:46:25 +0800 Subject: [PATCH 288/343] =?UTF-8?q?REPORT-1344=20=E8=A1=A8=E5=8D=95?= =?UTF-8?q?=E7=BF=BB=E9=A1=B5=E6=94=B9=E8=89=AF=E9=87=8D=E6=96=B0=E6=8F=90?= =?UTF-8?q?=E4=BA=A4release?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/designer/creator/XElementCase.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/creator/XElementCase.java b/designer_form/src/com/fr/design/designer/creator/XElementCase.java index 3a077e57a..af268e984 100644 --- a/designer_form/src/com/fr/design/designer/creator/XElementCase.java +++ b/designer_form/src/com/fr/design/designer/creator/XElementCase.java @@ -10,11 +10,9 @@ import com.fr.design.fun.WidgetPropertyUIProvider; import com.fr.design.fun.impl.AbstractFormElementCaseEditorProvider; import com.fr.design.gui.ilable.UILabel; import com.fr.design.mainframe.*; -import com.fr.design.mainframe.widget.editors.BooleanEditor; +import com.fr.design.mainframe.widget.editors.ElementCaseToolBarEditor; import com.fr.design.mainframe.widget.editors.PaddingMarginEditor; import com.fr.design.mainframe.widget.editors.WLayoutBorderStyleEditor; -import com.fr.design.mainframe.widget.renderer.LayoutBorderStyleRenderer; -import com.fr.design.mainframe.widget.renderer.PaddingMarginCellRenderer; import com.fr.form.FormElementCaseContainerProvider; import com.fr.form.FormElementCaseProvider; import com.fr.form.FormProvider; @@ -83,6 +81,13 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme CRPropertyDescriptor[] propertyTableEditor = new CRPropertyDescriptor[]{ new CRPropertyDescriptor("widgetName", this.data.getClass()) .setI18NName(Inter.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( WLayoutBorderStyleEditor.class).setI18NName( Inter.getLocText("FR-Designer-Widget_Style")).putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced") @@ -92,11 +97,12 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme public void propertyChange() { initStyle(); } + }), new CRPropertyDescriptor("margin", this.data.getClass()).setEditorClass(PaddingMarginEditor.class) .setI18NName(Inter.getLocText("FR-Layout_Padding")) .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced"), - new CRPropertyDescriptor("showToolBar", this.data.getClass()).setEditorClass(BooleanEditor.class) + new CRPropertyDescriptor("ToolBars", this.data.getClass()).setEditorClass(ElementCaseToolBarEditor.class) .setI18NName(Inter.getLocText("Form-EC_toolbar")) .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced") }; From e35d5ee8f7a04fd4a449af136bcbeaca286a2aac Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Wed, 19 Apr 2017 22:05:52 +0800 Subject: [PATCH 289/343] =?UTF-8?q?report-1945=20frm=E6=9C=AC=E5=9C=B0?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E5=A4=8D=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/FormSelectionUtils.java | 34 +++++++------------ 1 file changed, 12 insertions(+), 22 deletions(-) diff --git a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java index 1978e8432..b288ec202 100644 --- a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java +++ b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java @@ -25,6 +25,7 @@ public class FormSelectionUtils { //组件重命名后缀 private static final String POSTFIX = "_c"; + private FormSelectionUtils() { } @@ -132,29 +133,18 @@ public class FormSelectionUtils { XLayoutContainer container = layoutAdapter.getContainer(); boolean xOut = x < 0 || x + copiedCreator.getWidth() / 2 + xoffset > container.getWidth(); boolean yOut = y < 0 || y + copiedCreator.getHeight() / 2 + yoffset > container.getHeight(); - /* - * 组件原始位置位于布局的右下角, - * 和布局右下边界线紧挨, - * 粘贴时组件在原始位置向左错开20像素。 - * x,y同时越界 - */ - if (xOut && yOut) { - //向左偏移 - x = container.getWidth() - copiedCreator.getWidth() / 2 - DELAY_X_Y - xoffset; + + y = yOut ? container.getHeight() - copiedCreator.getHeight() / 2 - yoffset : y; + boolean isEdge = (x - DELAY_X_Y == container.getWidth() - copiedCreator.getWidth() / 2 - xoffset); + if (xOut) { + if (isEdge) { + //向左偏移 + x = container.getWidth() - copiedCreator.getWidth() / 2 - DELAY_X_Y - xoffset; + } //紧贴下边界 - y = container.getHeight() - copiedCreator.getHeight() / 2 - yoffset; - return new Point(x, y); - } - /* - * 组件原始位置与布局边界距离小于20像素(下边界&右边界同时小于或者任意一个边界小于), - * 则粘贴时距离小于20像素一侧直接贴近布局边界, - * 距离大于20像素的一侧正常错开。 - * x,y中只有一个越界 - */ - if ((xOut || yOut)) { - x = xOut ? container.getWidth() - copiedCreator.getWidth() / 2 - xoffset : x; - y = yOut ? container.getHeight() - copiedCreator.getHeight() / 2 - yoffset : y; - return new Point(x, y); + else { + x = container.getWidth() - copiedCreator.getWidth() / 2 - xoffset; + } } } return new Point(x, y); From ffab31c3d9771ec7ba92104936fcdc298c17792e Mon Sep 17 00:00:00 2001 From: kerry Date: Thu, 20 Apr 2017 10:01:33 +0800 Subject: [PATCH 290/343] =?UTF-8?q?=E6=97=A0jira=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=EF=BC=8C=E4=BB=A3=E7=A0=81=E8=A2=AB=E8=AF=AF=E6=9D=80=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/designer/creator/XElementCase.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/designer_form/src/com/fr/design/designer/creator/XElementCase.java b/designer_form/src/com/fr/design/designer/creator/XElementCase.java index 3a077e57a..7eb967a9f 100644 --- a/designer_form/src/com/fr/design/designer/creator/XElementCase.java +++ b/designer_form/src/com/fr/design/designer/creator/XElementCase.java @@ -83,6 +83,14 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme CRPropertyDescriptor[] propertyTableEditor = new CRPropertyDescriptor[]{ new CRPropertyDescriptor("widgetName", this.data.getClass()) .setI18NName(Inter.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( WLayoutBorderStyleEditor.class).setI18NName( Inter.getLocText("FR-Designer-Widget_Style")).putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced") From 46b6f5c880e62de970c46ba14de3b0a90b7f098f Mon Sep 17 00:00:00 2001 From: zack Date: Fri, 21 Apr 2017 13:52:21 +0800 Subject: [PATCH 291/343] =?UTF-8?q?REPORT-1344=20=E5=91=BD=E5=90=8D?= =?UTF-8?q?=E8=A7=84=E8=8C=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/designer/creator/XElementCase.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_form/src/com/fr/design/designer/creator/XElementCase.java b/designer_form/src/com/fr/design/designer/creator/XElementCase.java index af268e984..56aca1c43 100644 --- a/designer_form/src/com/fr/design/designer/creator/XElementCase.java +++ b/designer_form/src/com/fr/design/designer/creator/XElementCase.java @@ -102,7 +102,7 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme new CRPropertyDescriptor("margin", this.data.getClass()).setEditorClass(PaddingMarginEditor.class) .setI18NName(Inter.getLocText("FR-Layout_Padding")) .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced"), - new CRPropertyDescriptor("ToolBars", this.data.getClass()).setEditorClass(ElementCaseToolBarEditor.class) + new CRPropertyDescriptor("toolBars", this.data.getClass()).setEditorClass(ElementCaseToolBarEditor.class) .setI18NName(Inter.getLocText("Form-EC_toolbar")) .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced") }; From 6e352e28f6ee49e13bb9b2bdcc11668736ed964f Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Fri, 21 Apr 2017 14:41:18 +0800 Subject: [PATCH 292/343] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1=20?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E5=A4=8D=E7=94=A8=E4=B9=8B=E5=89=8Dmaster?= =?UTF-8?q?=E5=90=88=E5=88=B0dev=E6=97=B6=E4=B8=A2=E5=A4=B1=E7=9A=84?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BB=A5=E5=8F=8A=E7=BB=84=E4=BB=B6=E5=A4=8D?= =?UTF-8?q?=E7=94=A8=E8=BF=91=E6=9C=9Fbug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/beans/location/MoveUtils.java | 55 +---- .../beans/location/WidgetForbidWindow.java | 45 ---- .../com/fr/design/locale/designer.properties | 4 +- .../design/locale/designer_en_US.properties | 4 +- .../design/locale/designer_ja_JP.properties | 2 + .../design/locale/designer_zh_CN.properties | 2 + .../design/locale/designer_zh_TW.properties | 2 + .../layout/FRAbsoluteLayoutAdapter.java | 79 +++---- .../adapters/layout/FRFitLayoutAdapter.java | 81 +++---- .../beans/location/AccessDirection.java | 217 ++++++++---------- .../designer/beans/models/SelectionModel.java | 21 +- .../design/mainframe/FormSelectionUtils.java | 33 +-- 12 files changed, 220 insertions(+), 325 deletions(-) delete mode 100644 designer_base/src/com/fr/design/beans/location/WidgetForbidWindow.java diff --git a/designer_base/src/com/fr/design/beans/location/MoveUtils.java b/designer_base/src/com/fr/design/beans/location/MoveUtils.java index d89848446..d3dc94a08 100644 --- a/designer_base/src/com/fr/design/beans/location/MoveUtils.java +++ b/designer_base/src/com/fr/design/beans/location/MoveUtils.java @@ -18,9 +18,7 @@ public class MoveUtils { public static final int SORPTION_UNIT = 5; private static final int EQUIDISTANTLINE_UNIT = 4; - public static WidgetForbidWindow widgetForbidWindow = new WidgetForbidWindow(); - - public static ArrayList equidistantLines = new ArrayList<>(); + private static ArrayList equidistantLines = new ArrayList<>(); private MoveUtils() { @@ -259,8 +257,7 @@ public class MoveUtils { equidistantLineInfo.setReference(bounds.y); equidistantLineInfo.setDirection(SwingConstants.BOTTOM); } - } - else if ((leftMiddleY > bounds.getY()) && (leftMiddleY < (bounds.getY() + bounds.getHeight()))){ + } else if ((leftMiddleY > bounds.getY()) && (leftMiddleY < (bounds.getY() + bounds.getHeight()))) { //当前操作rec在bounds的右侧 if (left > (bounds.getX() + bounds.getWidth())){ equidistantLineInfo.setDistance(left - (bounds.x + bounds.width)); @@ -279,13 +276,6 @@ public class MoveUtils { } } - public static void displayForbidWindow(int x, int y) { - widgetForbidWindow.showWindow(x, y); - } - - public static void hideForbidWindow() { - widgetForbidWindow.hideWindow(); - } /** * 吸附 @@ -318,25 +308,16 @@ public class MoveUtils { RectangleIterator iterator = designer.createRectangleIterator(); java.util.List cacheRecs = new ArrayList(); - //是否存在控件重叠 - boolean isWidgetsIntersects = false; - while (iterator.hasNext()) { - Rectangle bounds = iterator.nextRectangle(); - cacheRecs.add(bounds); - boolean isIntersects = operatingRectangle.intersects(bounds); - findX(px, bounds, left, right, width); - findY(py, bounds, top, bottom, height); - - if(!isParameterLayout){ - if(isIntersects) { - isWidgetsIntersects = true; - } - else{ - findEquidistantLine(bounds, left, top, height, width); - } - } - } - showForbiddenWindow(designer, x, y, isWidgetsIntersects); + while (iterator.hasNext()) { + Rectangle bounds = iterator.nextRectangle(); + cacheRecs.add(bounds); + findX(px, bounds, left, right, width); + findY(py, bounds, top, bottom, height); + + if (!isParameterLayout) { + findEquidistantLine(bounds, left, top, height, width); + } + } createXAbsorptionline(px, designer, width, cacheRecs); createYAbsorptionline(py, designer, height, cacheRecs); @@ -353,18 +334,6 @@ public class MoveUtils { return sorptionPoint; } - public static void showForbiddenWindow(RectangleDesigner designer, int x, int y, boolean isIntersects){ - if (isIntersects){ - if(designer.getDesignerLocationOnScreen() != null) { - displayForbidWindow(x + designer.getDesignerLocationOnScreen().x, y + designer.getDesignerLocationOnScreen().y); - } - designer.setWidgetsIntersected(true); - } - else{ - designer.setWidgetsIntersected(false); - hideForbidWindow(); - } - } private static void createXAbsorptionline(PlacePointing px, RectangleDesigner designer, int width, java.util.List cacheRecs) { Absorptionline line = null; diff --git a/designer_base/src/com/fr/design/beans/location/WidgetForbidWindow.java b/designer_base/src/com/fr/design/beans/location/WidgetForbidWindow.java deleted file mode 100644 index 7c645d0ad..000000000 --- a/designer_base/src/com/fr/design/beans/location/WidgetForbidWindow.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.fr.design.beans.location; - -import com.fr.base.BaseUtils; -import com.fr.design.gui.ibutton.UIButton; -import com.fr.design.icon.IconPathConstants; -import com.fr.general.Inter; - -import javax.swing.*; - -/** - * Created by zhouping on 2016/7/24. - */ -public class WidgetForbidWindow extends JWindow { - - private static final int WIDTH = 150; - private static final int HEIGHT = 20; - - private UIButton promptButton = new UIButton(Inter.getLocText("FR-Designer_Forbid_Widgets_Intersects"), BaseUtils.readIcon(IconPathConstants.FORBID_ICON_PATH)); - - /** - * 构造函数 - */ - public WidgetForbidWindow() { - this.add(promptButton); - this.setSize(WIDTH, HEIGHT); - } - - /** - * 在指定位置显示窗口, 默认将window的中心点放到指定位置上 - * - * @param x x坐标 - * @param y y坐标 - */ - public void showWindow(int x, int y) { - this.setLocation(x - WIDTH / 2, y - HEIGHT / 2); - this.setVisible(true); - } - - /** - * 隐藏当前窗口 - */ - public void hideWindow() { - this.setVisible(false); - } -} diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index e3ee03999..ac663b6d6 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -587,4 +587,6 @@ FR-Designer_Mouse_Click_Tips= 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 \ No newline at end of file +FR-Designer-Move_Tab_Prev=move to previous +FR-Designer_Too_Large_To_Paste=too large to paste +FR-Designer_Too_Small_To_Paste=Too small to paste diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index a86a7fb14..94cba14c3 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -587,4 +587,6 @@ 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_End=move to end FR-Designer-Move_Tab_Next=move to next -FR-Designer-Move_Tab_Prev=move to previous \ No newline at end of file +FR-Designer-Move_Tab_Prev=move to previous +FR-Designer_Too_Large_To_Paste=Too large to paste! +FR-Designer_Too_Small_To_Paste=Too small to paste! diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index 943cf181d..214978ed5 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -553,5 +553,7 @@ FR-Designer_Background_Clear= FR-Designer_Background_Image_Select= FR-Designer_Initial_Background_Tips= FR-Designer_Mouse_Move_Tips= +FR-Designer_Too_Large_To_Paste=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306E\u30B5\u30A4\u30BA\u306F\u30DC\u30FC\u30C0\u30FC\u306B\u8D85\u3048\u305F\u306E\u3067\u3001\u8CBC\u308A\u4ED8\u3051\u3067\u304D\u307E\u305B\u3093\uFF01 +FR-Designer_Too_Small_To_Paste=\u8A72\u5F53\u51E6\u306B\u8CBC\u308A\u4ED8\u3051\u3067\u304D\u307E\u305B\u3093\u3001\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306E\u30B5\u30A4\u30BA\u306F\u9AD8\u3059\u304E\uFF01 FR-Designer_Mouse_Click_Tips= FR-Designer_Plugin_Should_Update_Please_Contact_Developer= diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 726a6d0f6..93e219698 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -588,3 +588,5 @@ FR-Designer_Background_Image_Select=\u9009\u62E9\u56FE\u7247 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_Click_Tips=\u9F20\u6807\u70B9\u51FB\u6309\u94AE\u65F6\u80CC\u666F\uFF0C\u82E5\u65E0\u5219\u4E0D\u6539\u53D8\u80CC\u666F +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 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index f8b28dba3..bb1442664 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -573,6 +573,8 @@ FR-Designer_Background_Gradient_Color= FR-Designer_Background_Image= FR-Designer_Background_Clear= FR-Designer_Background_Image_Select= +FR-Designer_Too_Large_To_Paste=\u7D44\u4EF6\u5927\u5C0F\u8D85\u51FA\u908A\u754C\uFF0C\u7121\u6CD5\u7C98\u8CBC\uFF01 +FR-Designer_Too_Small_To_Paste=\u6B64\u8655\u7121\u6CD5\u7C98\u8CBC\uFF0C\u5C0F\u65BC\u7D44\u4EF6\u6700\u5C0F\u9AD8\u5EA6\uFF01 FR-Designer_Initial_Background_Tips= FR-Designer_Mouse_Move_Tips= FR-Designer_Mouse_Click_Tips= \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java index 7810fc9a6..539e60450 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java @@ -1,7 +1,5 @@ package com.fr.design.designer.beans.adapters.layout; -import java.awt.*; - import com.fr.design.beans.GroupModel; import com.fr.design.designer.beans.ConstraintsGroupModel; import com.fr.design.designer.beans.HoverPainter; @@ -9,13 +7,14 @@ import com.fr.design.designer.beans.painters.FRAbsoluteLayoutPainter; import com.fr.design.designer.creator.*; import com.fr.design.designer.properties.BoundsGroupModel; import com.fr.design.designer.properties.FRAbsoluteLayoutPropertiesGroupModel; -import com.fr.form.ui.container.WAbsoluteLayout; import com.fr.design.utils.ComponentUtils; import com.fr.design.utils.gui.LayoutUtils; +import com.fr.form.ui.container.WAbsoluteLayout; import com.fr.general.ComparatorUtils; -import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import com.fr.general.FRLogger; +import java.awt.*; + public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { //是不是添加到父容器上 private boolean isAdd2ParentLayout = false; @@ -74,48 +73,39 @@ public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer((XCreator)comp).getTopLayout(); if(topLayout != null){ if (topLayout.isEditable()){ - return topLayoutAccept(creator, x, y, topLayout); + return topLayoutAccept(creator, x, y); } //绝对布局嵌套,处于内层,不可编辑,不添加,topLayout只能获取到最外层可编辑的布局 else if (((XLayoutContainer)topLayout.getParent()).acceptType(XWAbsoluteLayout.class)) { return false; + } else { + return acceptWidget(x, y); } - else { - return acceptWidget(creator, x, y); - } - } - else{ + } else { FRLogger.getLogger().error("top layout is null!"); } return false; } - //toplayout假如可以编辑的话就往里面添加组件 - private boolean topLayoutAccept(XCreator creator, int x, int y, XLayoutContainer topLayout) { - //判断有没有和当前控件重叠 - //先计算当前控件的位置 - int creatorX, creatorY; - if (XCreatorUtils.getParentXLayoutContainer(creator) != null) { - + //topLayout假如可以编辑的话就往里面添加组件 + private boolean topLayoutAccept(XCreator creator, int x, int y) { + //允许组件重叠,可以不判断有没有和当前控件重叠 + //先计算当前控件的位置 + int creatorX, creatorY; + if (XCreatorUtils.getParentXLayoutContainer(creator) != null) { Rectangle creatorRectangle = ComponentUtils.getRelativeBounds(creator); creatorX = creatorRectangle.x; creatorY = creatorRectangle.y; } else { + //这边计算得到的组件其实位置是正确的, + //因为传入的x和y已经加上了宽度或者高度的一半,再减去相同的宽度和高度的一半是没区别的, + // 例如高度为21,那么就是+10-10; + // 高度为20,那么就是+10-10; 没区别 int w = creator.getWidth() / 2; int h = creator.getHeight() / 2; creatorX = x - w; creatorY = y - h; - } - //再判断和布局中其他控件重叠 - Rectangle curRec = new Rectangle(creatorX, creatorY, creator.getWidth(), creator.getHeight()); - WAbsoluteLayout wAbsoluteLayout = (WAbsoluteLayout)topLayout.toData(); - for (int i = 0, count = wAbsoluteLayout.getWidgetCount(); i < count; i++) { - BoundsWidget temp = (BoundsWidget) wAbsoluteLayout.getWidget(i); - Rectangle rectangle = temp.getBounds(); - if (curRec.intersects(rectangle)){ - return false; - } } if (creatorX < 0 || creatorX + creator.getWidth() > container.getWidth()) { return false; @@ -168,16 +158,15 @@ public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { return !ComparatorUtils.equals(trisectAreaDirect, 0); } - //当前绝对布局不可编辑,就当成一个控件,组件添加在周围 - private boolean acceptWidget(XCreator creator, int x, int y){ - isFindRelatedComps = false; - //拖入组件判断时,先判断是否为交叉点区域,其次三等分区域,再次平分区域 - Component comp = container.getComponentAt(x, y); - boolean isMatchEdge = false; - //如果当前处于边缘地带, 那么就把他贴到父容器上 - XLayoutContainer parent = container.findNearestFit(); - container = parent != null ? parent : container; - isAdd2ParentLayout = true; + //当前绝对布局不可编辑,就当成一个控件,组件添加在周围 + private boolean acceptWidget(int x, int y) { + isFindRelatedComps = false; + //拖入组件判断时,先判断是否为交叉点区域,其次三等分区域,再次平分区域 + Component comp = container.getComponentAt(x, y); + //如果当前处于边缘地带, 那么就把他贴到父容器上 + XLayoutContainer parent = container.findNearestFit(); + container = parent != null ? parent : container; + isAdd2ParentLayout = true; int componentHeight = comp.getHeight(); int componentWidth = comp.getWidth(); @@ -244,7 +233,7 @@ public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { if (creator.hasTitleStyle()) { addParentCreator(creator); } else { - container.add(creator, creator.toData().getWidgetName()); + container.add(creator, creator.toData().getWidgetName(),0); } XWAbsoluteLayout layout = (XWAbsoluteLayout) container; layout.updateBoundsWidget(creator); @@ -255,7 +244,7 @@ public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { if (creator.shouldScaleCreator() || creator.hasTitleStyle()) { addParentCreator(creator); } else { - container.add(creator, creator.toData().getWidgetName()); + container.add(creator, creator.toData().getWidgetName(),0); } XWFitLayout layout = (XWFitLayout) container; // 更新对应的BoundsWidget @@ -274,7 +263,7 @@ public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { private void addParentCreator(XCreator child) { XLayoutContainer parentPanel = child.initCreatorWrapper(child.getHeight()); - container.add(parentPanel, child.toData().getWidgetName()); + container.add(parentPanel, child.toData().getWidgetName(),0); } /** @@ -325,17 +314,15 @@ public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { int height = creator.getHeight(); int width = creator.getWidth(); if (x < 0) { - width += x; - x = 0; + x = container.getX(); } else if (x + creator.getWidth() > container.getWidth()) { - width = container.getWidth() - x; + x = container.getWidth() - width; } if (y < 0) { - height += y; - y = 0; + y = container.getY(); } else if (y + creator.getHeight() > container.getHeight()) { - height = container.getHeight() - y; + y = container.getHeight() - height; } creator.setBounds(x, y, width, height); diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java index 7401b8d07..3a030f7f2 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java @@ -3,12 +3,6 @@ */ package com.fr.design.designer.beans.adapters.layout; -import java.awt.Component; -import java.awt.Dimension; -import java.awt.Rectangle; -import java.util.ArrayList; -import java.util.List; - import com.fr.design.beans.GroupModel; import com.fr.design.designer.beans.ConstraintsGroupModel; import com.fr.design.designer.beans.HoverPainter; @@ -22,14 +16,16 @@ import com.fr.design.designer.creator.cardlayout.XWCardMainBorderLayout; import com.fr.design.designer.creator.cardlayout.XWTabFitLayout; import com.fr.design.designer.properties.FRFitLayoutConstraints; import com.fr.design.designer.properties.FRFitLayoutPropertiesGroupModel; -import com.fr.design.file.HistoryTemplateListPane; -import com.fr.design.mainframe.JForm; import com.fr.design.utils.ComponentUtils; import com.fr.form.ui.LayoutBorderStyle; +import com.fr.form.ui.container.WAbsoluteLayout; import com.fr.form.ui.container.WLayout; import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; import com.fr.general.ComparatorUtils; -import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; + +import java.awt.*; +import java.util.ArrayList; +import java.util.List; /** * 自适应布局的容器适配器 @@ -52,6 +48,7 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { public void setEdit(boolean edit) { isEdit = edit; } + /** * 构造函数 * @@ -134,7 +131,7 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { isFindRelatedComps = false; //拖入组件判断时,先判断是否为交叉点区域,其次三等分区域,再次平分区域 Component comp = container.getComponentAt(x, y); - if (checkInterval(comp)) { + if (comp == null || checkInterval(comp)) { return false; } //如果当前处于边缘地带, 那么就把他贴到父容器上 @@ -269,25 +266,14 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { return super.isCrossPointArea(currentComp, x, y); } - protected void initCompsList() { - super.initCompsList(); - } - - protected void clearCompsList() { - super.clearCompsList(); - } - protected Rectangle getLayoutBound(XWCardMainBorderLayout mainLayout){ + protected Rectangle getLayoutBound(XWCardMainBorderLayout mainLayout) { return mainLayout.getBounds(); } private Rectangle adjustBackupBound(Rectangle backupBound, XWCardMainBorderLayout mainLayout) { - // 参数界面高度对纵坐标产生的影响 - JForm jform = (JForm) (HistoryTemplateListPane.getInstance().getCurrentEditingTemplate()); - if (jform.getFormDesign().getParaComponent() != null) { - backupBound.y -= jform.getFormDesign().getParaHeight(); - } - + // zhouping: REPORT-2334 表单tab布局中图表放大缩小会明显 + // 这边不需要单独处理参数面板高度了,下面的方法中获取的是XWCardMainBorderLayout相对坐标 Rectangle rec = getLayoutBound(mainLayout); // XWTabLayout里面的横纵坐标收到外层XWCardMainBorderLayout的横纵坐标影响 // 减掉之后可以按照它原来的逻辑执行 @@ -353,13 +339,13 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { * 拖拽控件边框后,根据控件的大小尺寸,进行相关组件的调整 * * @param backupBound 边界备份 - * @param bounds 组件边界 - * @param xCreator 组件 - * @param row 选中的行 - * @param difference 偏移量 + * @param bounds 组件边界 + * @param xCreator 组件 + * @param row 选中的行 + * @param difference 偏移量 */ public void calculateBounds(Rectangle backupBound, Rectangle bounds, XCreator xCreator, int row, int difference) { - Rectangle rc = new Rectangle(0,0,0,0); + Rectangle rc = new Rectangle(0, 0, 0, 0); XLayoutContainer parent = XCreatorUtils.getParentXLayoutContainer(xCreator); if (parent != null) { Rectangle rec = ComponentUtils.getRelativeBounds(parent); @@ -370,17 +356,17 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { //处理左右延伸 switch (row) { case 0: - if (backupBound.width + backupBound.x == container.getWidth() - margin.getRight() +rc.x) { + if (backupBound.width + backupBound.x == container.getWidth() - margin.getRight() + rc.x) { x += difference; } break; case 1: - if(backupBound.y + backupBound.height == container.getHeight() - margin.getBottom() +rc.y){ + if (backupBound.y + backupBound.height == container.getHeight() - margin.getBottom() + rc.y) { y += difference; } break; } - bounds.setLocation(x,y); + bounds.setLocation(x, y); xCreator.setBackupBound(backupBound); xCreator.setBounds(bounds); this.fix(xCreator); @@ -424,7 +410,7 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { // 根据需要依附的位置调整拖拽的坐标值 private int adjustCoordinateByDependingLine(int coordinate, int[] coordinates) { - if(!isEdit) { + if (!isEdit) { for (int i = 0; i < coordinates.length; i++) { if (coordinate == coordinates[i]) { continue; @@ -440,7 +426,7 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { // 根据需要依附的位置调整拖拽的距离 private int adjustDiffByDependingLine(int coordinate, int[] coordinates, int diff) { - if(!isEdit) { + if (!isEdit) { for (int i = 0; i < coordinates.length; i++) { if (coordinate + diff > coordinates[i] - DEPENDING_SCOPE && coordinate + diff < coordinates[i] + DEPENDING_SCOPE) { diff = coordinates[i] - coordinate; @@ -558,8 +544,8 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { difference = Math.max(difference, minWidth - getMinWidth(leftComps)); } //重新计算左右两侧组件size、point - if (CalculateLefttRelatComponent(difference)) { - CalculateRightRelatComponent(objx + difference, -difference); + if (calculateLefttRelatComponent(difference)) { + calculateRightRelatComponent(objx + difference, -difference); } } @@ -674,10 +660,9 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { difference = Math.max(difference, minHeight - getMinHeight(upComps)); } //重新计算上下两侧组件size、point - if (CalculateUpRelatComponent(difference)) { - CalculateDownRelatComponent(objY + difference, -difference); + if (calculateUpRelatComponent(difference)) { + calculateDownRelatComponent(objY + difference, -difference); } - ; } /** @@ -757,13 +742,13 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { int height = creatorHeight; calculateRelatedComponent(x, y, width, height); if (!rightComps.isEmpty() && getAllHeight(rightComps) == height) { - CalculateRightRelatComponent(x, width + actualVal); + calculateRightRelatComponent(x, width + actualVal); } else if (!leftComps.isEmpty() && getAllHeight(leftComps) == height) { - CalculateLefttRelatComponent(width + actualVal); + calculateLefttRelatComponent(width + actualVal); } else if (!downComps.isEmpty() && getAllWidth(downComps) == width) { - CalculateDownRelatComponent(y, height + actualVal); + calculateDownRelatComponent(y, height + actualVal); } else if (!upComps.isEmpty() && getAllWidth(upComps) == width) { - CalculateUpRelatComponent(height + actualVal); + calculateUpRelatComponent(height + actualVal); } else { // 由于布局三等分的存在,可能会出现删除组件时,找不到关联的组件填充,此时特殊处理 calculateNoRelatedComponent(x, y, width, height); @@ -1026,7 +1011,7 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { setAdjustedSize(tabLayout, offset, isHor); for (int m = 0; m < tabLayout.getComponentCount(); m++) { XCreator childCreator = tabLayout.getXCreator(m); - BoundsWidget wgt = (BoundsWidget) tabLayout.toData().getBoundsWidget(childCreator.toData()); + WAbsoluteLayout.BoundsWidget wgt = (WAbsoluteLayout.BoundsWidget) tabLayout.toData().getBoundsWidget(childCreator.toData()); wgt.setBounds(tabLayout.getComponent(m).getBounds()); } adjustCreatorsSize(percent, tabLayout, isHor); @@ -1069,7 +1054,7 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { * @param objX 调整后的坐标x * @param objWidth 调整后的宽度 */ - protected void CalculateRightRelatComponent(int objX, int objWidth) { + protected void calculateRightRelatComponent(int objX, int objWidth) { int count = rightComps.size(); for (int i = 0; i < count; i++) { XCreator creator = (XCreator) rightComps.get(i); @@ -1109,7 +1094,7 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { /** * 删除或拉伸控件左边框时 调整左侧的组件位置大小; */ - protected boolean CalculateLefttRelatComponent(int objWidth) { + protected boolean calculateLefttRelatComponent(int objWidth) { if (isBeyondAdjustWidthScope(objWidth)) { return false; } @@ -1127,7 +1112,7 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { /** * 删除或拉伸下边框 调整下方的组件位置大小 */ - protected void CalculateDownRelatComponent(int objY, int objHeight) { + protected void calculateDownRelatComponent(int objY, int objHeight) { int count = downComps.size(); for (int i = 0; i < count; i++) { XCreator creator = (XCreator) downComps.get(i); @@ -1167,7 +1152,7 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { /** * 删除或拉伸上边框 调整上方的组件位置大小 */ - protected boolean CalculateUpRelatComponent(int objHeight) { + protected boolean calculateUpRelatComponent(int objHeight) { if (isBeyondAdjustHeightScope(objHeight)) { return false; } diff --git a/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java b/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java index 572ac721e..3538d2fd9 100644 --- a/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java +++ b/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java @@ -27,32 +27,30 @@ public abstract class AccessDirection implements Direction { abstract int getCursor(); - protected abstract Rectangle getDraggedBounds(int dx, int dy, Rectangle current_bounds, FormDesigner designer, - Rectangle oldbounds); - - protected int[] sorption(int x, int y,Rectangle current_bounds, FormDesigner designer) { - // 自适应布局不需要吸附线,但需要对齐线,对齐线后面处理 - if (!designer.hasWAbsoluteLayout()) { - designer.getStateModel().setEquidistantLine(null); - designer.getStateModel().setXAbsorptionline(null); - designer.getStateModel().setYAbsorptionline(null); - return new int[] { x, y }; - } else { - int posy = current_bounds.y; - - Point relativePoint = getRelativePoint(x, y, current_bounds,designer); - sorptionPoint(relativePoint,current_bounds, designer); - return new int[] { relativePoint.x, relativePoint.y }; - } + protected abstract Rectangle getDraggedBounds(int dx, int dy, Rectangle currentBounds, FormDesigner designer, + Rectangle oldBounds); + + protected int[] sorption(int x, int y, Rectangle currentBounds, FormDesigner designer) { + // 自适应布局不需要吸附线,但需要对齐线,对齐线后面处理 + if (!designer.hasWAbsoluteLayout()) { + designer.getStateModel().setEquidistantLine(null); + designer.getStateModel().setXAbsorptionline(null); + designer.getStateModel().setYAbsorptionline(null); + return new int[]{x, y}; + } else { + Point relativePoint = getRelativePoint(x, y, currentBounds, designer); + sorptionPoint(relativePoint, currentBounds, designer); + return new int[]{relativePoint.x, relativePoint.y}; + } - } + } - protected Point getRelativePoint(int x, int y, Rectangle current_bounds,FormDesigner designer) { - if (x < 0) { - x = 0; - } else if (x > designer.getRootComponent().getWidth() && designer.getSelectionModel().hasSelectionComponent()) { - x = designer.getRootComponent().getWidth(); - } + protected Point getRelativePoint(int x, int y, Rectangle currentBounds, FormDesigner designer) { + if (x < 0) { + x = 0; + } else if (x > designer.getRootComponent().getWidth() && designer.getSelectionModel().hasSelectionComponent()) { + x = designer.getRootComponent().getWidth(); + } //参数面板可以无下限拉长 if (y < 0) { y = 0; @@ -63,112 +61,101 @@ public abstract class AccessDirection implements Direction { return new Point(x, y); } - protected void sorptionPoint(Point point, Rectangle current_bounds,FormDesigner designer) { - boolean findInX = current_bounds.getWidth() <= MoveUtils.SORPTION_UNIT ? true : false; - boolean findInY = current_bounds.getHeight() <= MoveUtils.SORPTION_UNIT ? true : false; - WAbsoluteLayout layout =getLayout(designer); - FormSelection selection = designer.getSelectionModel().getSelection(); - boolean isWidgetsIntersect = false; - for (int i = 0, count = layout.getWidgetCount(); i < count; i++) { - BoundsWidget temp = (BoundsWidget) layout.getWidget(i); - if (!temp.isVisible() || selection.contains(temp.getWidget())) { - continue; - } - Rectangle bounds = getWidgetRelativeBounds(temp.getBounds(), selection); - if (!findInX) { - int x1 = bounds.x; - if (Math.abs(x1 - point.x) <= MoveUtils.SORPTION_UNIT) { - point.x = x1; - findInX = true; - } - int x2 = bounds.x + bounds.width; - if (Math.abs(x2 - point.x) <= MoveUtils.SORPTION_UNIT) { - point.x = x2; - findInX = true; - } - } - if (!findInY) { - int y1 = bounds.y; - if (Math.abs(y1 - point.y) <= MoveUtils.SORPTION_UNIT) { - point.y = y1; - findInY = true; - } - int y2 = bounds.y + bounds.height; - if (Math.abs(y2 - point.y) <= MoveUtils.SORPTION_UNIT) { - point.y = y2; - findInY = true; - } + protected void sorptionPoint(Point point, Rectangle currentBounds, FormDesigner designer) { + boolean findInX = currentBounds.getWidth() <= MoveUtils.SORPTION_UNIT; + boolean findInY = currentBounds.getHeight() <= MoveUtils.SORPTION_UNIT; + WAbsoluteLayout layout = getLayout(designer); + FormSelection selection = designer.getSelectionModel().getSelection(); + for (int i = 0, count = layout.getWidgetCount(); i < count; i++) { + BoundsWidget temp = (BoundsWidget) layout.getWidget(i); + if (!temp.isVisible() || selection.contains(temp.getWidget())) { + continue; + } + Rectangle bounds = getWidgetRelativeBounds(temp.getBounds(), selection); + if (!findInX) { + int x1 = bounds.x; + if (Math.abs(x1 - point.x) <= MoveUtils.SORPTION_UNIT) { + point.x = x1; + findInX = true; + } + int x2 = bounds.x + bounds.width; + if (Math.abs(x2 - point.x) <= MoveUtils.SORPTION_UNIT) { + point.x = x2; + findInX = true; + } + } + if (!findInY) { + int y1 = bounds.y; + if (Math.abs(y1 - point.y) <= MoveUtils.SORPTION_UNIT) { + point.y = y1; + findInY = true; + } + int y2 = bounds.y + bounds.height; + if (Math.abs(y2 - point.y) <= MoveUtils.SORPTION_UNIT) { + point.y = y2; + findInY = true; + } } if (findInX && findInY) { break; } - if (current_bounds.intersects(bounds) && !(layout instanceof WParameterLayout)){ - isWidgetsIntersect = true; - } - } - processRectangleIntersects(designer, point.x, point.y, isWidgetsIntersect); - setDesignerStateModelProperties(designer, findInX, findInY, current_bounds, point); - } + } + setDesignerStateModelProperties(designer, findInX, findInY, currentBounds, 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().setYAbsorptionline(findInY && current_bounds.getHeight() > MoveUtils.SORPTION_UNIT ? Absorptionline.createYAbsorptionline(point.y) : null); - designer.getStateModel().setEquidistantLine(null); - } + private void setDesignerStateModelProperties(FormDesigner designer, boolean findInX, boolean findInY, Rectangle + currentBounds, Point point) { + designer.getStateModel().setXAbsorptionline(findInX && currentBounds.getWidth() > MoveUtils.SORPTION_UNIT ? Absorptionline.createXAbsorptionline(point.x) : null); + designer.getStateModel().setYAbsorptionline(findInY && currentBounds.getHeight() > MoveUtils.SORPTION_UNIT ? Absorptionline.createYAbsorptionline(point.y) : null); + designer.getStateModel().setEquidistantLine(null); + } - private Rectangle getWidgetRelativeBounds(Rectangle bounds, FormSelection selection){ - Rectangle relativeRec = new Rectangle(bounds.x, bounds.y, bounds.width, bounds.height); - XLayoutContainer parent = XCreatorUtils.getParentXLayoutContainer(selection.getSelectedCreator()); - if (parent == null) { - return relativeRec; - } - Rectangle rec = ComponentUtils.getRelativeBounds(parent); - relativeRec.x += rec.x; - relativeRec.y += rec.y; - return relativeRec; - } + private Rectangle getWidgetRelativeBounds(Rectangle bounds, FormSelection selection) { + Rectangle relativeRec = new Rectangle(bounds.x, bounds.y, bounds.width, bounds.height); + XLayoutContainer parent = XCreatorUtils.getParentXLayoutContainer(selection.getSelectedCreator()); + if (parent == null) { + return relativeRec; + } + Rectangle rec = ComponentUtils.getRelativeBounds(parent); + relativeRec.x += rec.x; + relativeRec.y += rec.y; + 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( designer.getTarget().getContainer()); WAbsoluteLayout layout; - if (formLayoutContainer.acceptType(XWBorderLayout.class)){//看起来这边的作用应该是为了区别cpt(得到XWParameterLayout)还是frm(得到XWBorderLayout)的参数界面 - Container container = designer.getSelectionModel().getSelection().getSelectedCreator().getParent(); - if(container instanceof XWAbsoluteLayout){ - layout = ((XWAbsoluteLayout)container).toData(); - } - else { - layout = (WAbsoluteLayout) designer.getParaComponent().toData(); - } - } else{ + if (formLayoutContainer.acceptType(XWBorderLayout.class)) {//看起来这边的作用应该是为了区别cpt(得到XWParameterLayout)还是frm(得到XWBorderLayout)的参数界面 + Container container = designer.getSelectionModel().getSelection().getSelectedCreator().getParent(); + if (container instanceof XWAbsoluteLayout) { + layout = ((XWAbsoluteLayout) container).toData(); + } else { + layout = (WAbsoluteLayout) designer.getParaComponent().toData(); + } + } else { layout = (WAbsoluteLayout) designer.getTarget().getContainer(); } - return layout; + return layout; } - /** - * 拖拽 - * @param dx 坐标x - * @param dy 坐标y - * @param designer 设计界面 - */ - public void drag(int dx, int dy, FormDesigner designer) { - Rectangle rec = getDraggedBounds(dx, dy, designer.getSelectionModel().getSelection().getRelativeBounds(), designer, designer.getSelectionModel().getSelection().getBackupBounds()); + /** + * 拖拽 + * + * @param dx 坐标x + * @param dy 坐标y + * @param designer 设计界面 + */ + public void drag(int dx, int dy, FormDesigner designer) { + 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的变化使得控件不停的向上或向下移动。 if(rec.height == MINHEIGHT){ ymin = rec.y; @@ -191,10 +178,8 @@ public abstract class AccessDirection implements Direction { rec.width = MINWIDTH; rec.x = xmin; } - if(rec != null) { - designer.getSelectionModel().getSelection().setSelectionBounds(rec, designer); - } - } + + } /** * 更新鼠标指针形状 diff --git a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java index 5bd159a43..13eaa18ac 100644 --- a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java +++ b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java @@ -27,7 +27,7 @@ import java.util.ArrayList; public class SelectionModel { //被粘贴组件在所选组件位置处往下、往右各错开20像素。执行多次粘贴时,在上一次粘贴的位置处错开20像素。 private static final int DELTA_X_Y = 20; //粘贴时候的偏移距离 - private static final double OFFSET_RELATIVE = 0.78; + private static final double OFFSET_RELATIVE = 0.80; private static FormSelection clipboard = new FormSelection(); private FormDesigner designer; private FormSelection selection; @@ -142,14 +142,29 @@ public class SelectionModel { int leftUpY = container.toData().getMargin().getTop() + 1; //选中第一个坐标点坐在的组件 selection.setSelectedCreator((XCreator) container.getComponentAt(leftUpX, leftUpY)); - pasteFromClipBoard(); + Rectangle rectangle = selection.getRelativeBounds(); + if (hasSelectedPasteSource()) { + selectedPaste(); + } else { + FormSelectionUtils.paste2Container(designer, container, clipboard, + rectangle.x + rectangle.width / 2, + rectangle.y + DELTA_X_Y); + } } else { //自适应布局编辑器内部左上角第一个坐标点 int leftUpX = designer.getRootComponent().toData().getMargin().getLeft() + 1; int leftUpY = designer.getRootComponent().toData().getMargin().getTop() + 1; //选中第一个坐标点坐在的组件 selection.setSelectedCreator((XCreator) designer.getRootComponent().getComponentAt(leftUpX, leftUpY)); - pasteFromClipBoard(); + Rectangle rectangle = selection.getRelativeBounds(); + if (hasSelectedPasteSource()) { + selectedPaste(); + } else { + FormSelectionUtils.paste2Container(designer, designer.getRootComponent(), + clipboard, + rectangle.x + rectangle.width / 2, + rectangle.y + DELTA_X_Y); + } } } else { //绝对布局 diff --git a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java index 1978e8432..90945b1e8 100644 --- a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java +++ b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java @@ -132,29 +132,18 @@ public class FormSelectionUtils { XLayoutContainer container = layoutAdapter.getContainer(); boolean xOut = x < 0 || x + copiedCreator.getWidth() / 2 + xoffset > container.getWidth(); boolean yOut = y < 0 || y + copiedCreator.getHeight() / 2 + yoffset > container.getHeight(); - /* - * 组件原始位置位于布局的右下角, - * 和布局右下边界线紧挨, - * 粘贴时组件在原始位置向左错开20像素。 - * x,y同时越界 - */ - if (xOut && yOut) { - //向左偏移 - x = container.getWidth() - copiedCreator.getWidth() / 2 - DELAY_X_Y - xoffset; + + y = yOut ? container.getHeight() - copiedCreator.getHeight() / 2 - yoffset : y; + boolean isEdge = (x - DELAY_X_Y == container.getWidth() - copiedCreator.getWidth() / 2 - xoffset); + if (xOut) { + if (isEdge) { + //向左偏移 + x = container.getWidth() - copiedCreator.getWidth() / 2 - DELAY_X_Y - xoffset; + } //紧贴下边界 - y = container.getHeight() - copiedCreator.getHeight() / 2 - yoffset; - return new Point(x, y); - } - /* - * 组件原始位置与布局边界距离小于20像素(下边界&右边界同时小于或者任意一个边界小于), - * 则粘贴时距离小于20像素一侧直接贴近布局边界, - * 距离大于20像素的一侧正常错开。 - * x,y中只有一个越界 - */ - if ((xOut || yOut)) { - x = xOut ? container.getWidth() - copiedCreator.getWidth() / 2 - xoffset : x; - y = yOut ? container.getHeight() - copiedCreator.getHeight() / 2 - yoffset : y; - return new Point(x, y); + else { + x = container.getWidth() - copiedCreator.getWidth() / 2 - xoffset; + } } } return new Point(x, y); From 92d1f8209cce7d6e95de62b02a2d75d95d34392f Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 21 Apr 2017 15:43:47 +0800 Subject: [PATCH 293/343] =?UTF-8?q?REPORT-2368=20=E9=A2=84=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E6=8E=A7=E4=BB=B6=E8=AE=BE=E7=BD=AE=E4=BA=86=E4=B8=8D?= =?UTF-8?q?=E5=8F=AF=E8=A7=81=EF=BC=8C=E5=9C=A8=E5=8F=82=E6=95=B0=E9=9D=A2?= =?UTF-8?q?=E6=9D=BF=E4=B8=8A=E8=BF=98=E6=98=AF=E5=8F=AF=E8=A7=81=E7=9A=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/widget/CellWidgetCardPane.java | 9 --------- 1 file changed, 9 deletions(-) diff --git a/designer/src/com/fr/design/widget/CellWidgetCardPane.java b/designer/src/com/fr/design/widget/CellWidgetCardPane.java index 8ba9d3235..12f3137b4 100644 --- a/designer/src/com/fr/design/widget/CellWidgetCardPane.java +++ b/designer/src/com/fr/design/widget/CellWidgetCardPane.java @@ -88,15 +88,6 @@ public class CellWidgetCardPane extends BasicPane { this.tabbedPane.setEnabled(true); } - attriTabPane.remove(widgetPropertyPane); - widgetPropertyPane = new BasicWidgetPropertySettingPane(); - JPanel northPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); - northPane.setBorder(BorderFactory.createEmptyBorder(5, 8, 0, 8)); - JPanel basic = FRGUIPaneFactory.createTitledBorderPane(Inter.getLocText("FR-Designer_Form_Basic_Properties")); - northPane.add(basic); - basic.add(widgetPropertyPane); - attriTabPane.add(northPane, BorderLayout.NORTH); - WidgetDefinePaneFactory.RN rn = WidgetDefinePaneFactory.createWidgetDefinePane(cellWidget, new Operator() { @Override public void did(DataCreatorUI ui, String cardName) { From b5024a0547fc23b908a7a645a6eee15cd4bb6f28 Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 21 Apr 2017 16:27:51 +0800 Subject: [PATCH 294/343] =?UTF-8?q?REPORT-2368=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=8E=A7=E4=BB=B6=E8=AE=BE=E7=BD=AE=E7=95=8C=E9=9D=A2=E5=AF=B9?= =?UTF-8?q?=E2=80=9C=E5=9F=BA=E6=9C=AC=E5=B1=9E=E6=80=A7=E2=80=9D=E9=9D=A2?= =?UTF-8?q?=E6=9D=BF=E7=9A=84=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer/src/com/fr/design/widget/CellWidgetCardPane.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/designer/src/com/fr/design/widget/CellWidgetCardPane.java b/designer/src/com/fr/design/widget/CellWidgetCardPane.java index 12f3137b4..d286cc190 100644 --- a/designer/src/com/fr/design/widget/CellWidgetCardPane.java +++ b/designer/src/com/fr/design/widget/CellWidgetCardPane.java @@ -67,7 +67,12 @@ public class CellWidgetCardPane extends BasicPane { treeTabPane = FRGUIPaneFactory.createBorderLayout_L_Pane(); widgetPropertyPane = new BasicWidgetPropertySettingPane(); - attriTabPane.add(widgetPropertyPane, BorderLayout.NORTH); + JPanel northPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + northPane.setBorder(BorderFactory.createEmptyBorder(5, 8, 0, 8)); + JPanel basic = FRGUIPaneFactory.createTitledBorderPane(Inter.getLocText("FR-Designer_Form_Basic_Properties")); + northPane.add(basic); + basic.add(widgetPropertyPane); + attriTabPane.add(northPane, BorderLayout.NORTH); attriCardPane = FRGUIPaneFactory.createCardLayout_S_Pane(); attriTabPane.add(attriCardPane, BorderLayout.CENTER); attriCardLayout = (CardLayout) attriCardPane.getLayout(); From c93986c3973154ff6861d7d75863f019fc4ef353 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Mon, 24 Apr 2017 09:20:52 +0800 Subject: [PATCH 295/343] =?UTF-8?q?REPORT-2273=20=E8=BF=9C=E7=A8=8B?= =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E6=95=B0=E6=8D=AE=E5=BA=93=E8=BF=9E=E6=8E=A5?= =?UTF-8?q?=E6=88=90=E5=8A=9F=EF=BC=8C=E9=A2=84=E8=A7=88=E6=8A=A5=E9=94=99?= =?UTF-8?q?=EF=BC=8Cdatasourcexml=E4=BF=9D=E5=AD=98=E5=A4=B1=E8=B4=A5?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../actions/server/ConnectionListAction.java | 345 +++++++++--------- .../connect/ConnectionComboBoxPanel.java | 266 +++++++------- .../datapane/connect/ConnectionListPane.java | 324 ++++++++-------- .../connect/ConnectionManagerPane.java | 155 ++++---- .../datapane/connect/ConnectionShowPane.java | 15 + 5 files changed, 569 insertions(+), 536 deletions(-) create mode 100644 designer_base/src/com/fr/design/data/datapane/connect/ConnectionShowPane.java diff --git a/designer_base/src/com/fr/design/actions/server/ConnectionListAction.java b/designer_base/src/com/fr/design/actions/server/ConnectionListAction.java index e24826b50..68e605757 100644 --- a/designer_base/src/com/fr/design/actions/server/ConnectionListAction.java +++ b/designer_base/src/com/fr/design/actions/server/ConnectionListAction.java @@ -1,171 +1,176 @@ -package com.fr.design.actions.server; - -import com.fr.base.BaseUtils; -import com.fr.base.Env; -import com.fr.base.FRContext; -import com.fr.base.ModifiedTable; -import com.fr.data.impl.Connection; -import com.fr.dav.LocalEnv; -import com.fr.design.actions.UpdateAction; -import com.fr.design.data.datapane.connect.ConnectionManagerPane; -import com.fr.design.dialog.BasicDialog; -import com.fr.design.dialog.DialogActionAdapter; -import com.fr.design.mainframe.DesignerContext; -import com.fr.design.mainframe.DesignerFrame; -import com.fr.design.menu.MenuKeySet; -import com.fr.file.DatasourceManager; -import com.fr.file.DatasourceManagerProvider; -import com.fr.general.Inter; - -import javax.swing.*; -import java.awt.event.ActionEvent; -import java.util.HashMap; - -/** - * DatasourceList Action - */ -public class ConnectionListAction extends UpdateAction { - private static final int BYTENUM = 1444; - - public ConnectionListAction() { - this.setMenuKeySet(DEFINE_DATA_CONNECTION); - this.setName(getMenuKeySet().getMenuKeySetName()); - this.setMnemonic(getMenuKeySet().getMnemonic()); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_web/connection.png")); - } - - public static final MenuKeySet DEFINE_DATA_CONNECTION = new MenuKeySet() { - @Override - public char getMnemonic() { - return 'D'; - } - - @Override - public String getMenuName() { - return Inter.getLocText("Server-Define_Data_Connection"); - } - - @Override - public KeyStroke getKeyStroke() { - return null; - } - }; - - /** - * 执行动作 - * - * @param evt 事件 - */ - public void actionPerformed(ActionEvent evt) { - DesignerFrame designerFrame = DesignerContext.getDesignerFrame(); - final DatasourceManagerProvider datasourceManager = DatasourceManager.getProviderInstance(); - final DatasourceManager backupManager = datasourceManager.getBackUpManager(); - final ConnectionManagerPane databaseManagerPane = new ConnectionManagerPane() { - public void complete() { - populate(datasourceManager); - } - - protected void renameConnection(String oldName, String newName) { - datasourceManager.getConnectionLocalModifyTable().rename(oldName, newName); - } - }; - final BasicDialog databaseListDialog = databaseManagerPane.showLargeWindow(designerFrame, null); - databaseListDialog.addDialogActionListener(new DialogActionAdapter() { - public void doOk() { - if (!databaseManagerPane.isNamePermitted()) { - databaseListDialog.setDoOKSucceed(false); - return; - } - if (!doWithDatasourceManager(datasourceManager, backupManager, databaseManagerPane, databaseListDialog)) { - //如果更新失败,则不关闭对话框,也不写xml文件,并且将对话框定位在请重命名的那个对象页面 - return; - } - // marks:保存数据 - writeFile(datasourceManager); - } - - public void doCancel() { - datasourceManager.synchronizedWithServer(); - } - }); - databaseListDialog.setVisible(true); - } - - - private void writeFile(DatasourceManagerProvider datasourceManager) { - Env currentEnv = FRContext.getCurrentEnv(); - try { - boolean isSuccess = currentEnv.writeResource(datasourceManager); - if (!isSuccess) { - throw new RuntimeException(Inter.getLocText("FR-Designer_Already_exist")); - } - } catch (Exception e) { - throw new RuntimeException(Inter.getLocText("FR-Designer_Already_exist")); - } - DesignerContext.getDesignerBean("databasename").refreshBeanElement(); - } - - /** - * 是否正常更新完datasourceManager - * - * @param datasourceManager - * @param databaseManagerPane - * @return - */ - private boolean doWithDatasourceManager(DatasourceManagerProvider datasourceManager, DatasourceManager backupManager, - ConnectionManagerPane databaseManagerPane, BasicDialog databaseListDialog) { - databaseManagerPane.update(datasourceManager); - HashMap modifyDetails = datasourceManager.getConnectionModifyDetails(); - modifyDetails.clear(); - Env currentEnv = FRContext.getCurrentEnv(); - ModifiedTable localModifiedTable = datasourceManager.checkConnectionModifyTable(backupManager, currentEnv.getUserID()); - boolean isFailed = false; - if (currentEnv.isSupportLocalFileOperate() && !((LocalEnv) currentEnv).isNoRemoteUser()) { - //如果是本地,并且有远程用户时则更新自己的修改表 - datasourceManager.updateSelfConnectionTotalModifiedTable(localModifiedTable, ModifiedTable.LOCAL_MODIFIER); - } else { - if (!currentEnv.isSupportLocalFileOperate()) { - //如果是远程,则去取服务器的最新的修改表,检查有没有冲突 - ModifiedTable currentServerModifyTable = currentEnv.getDataSourceModifiedTables(DatasourceManager.CONNECTION); - if (localModifiedTable.checkModifiedTableConflictWithServer(currentServerModifyTable, currentEnv.getUserID())) { - //有冲突,进行提示 - String title = Inter.getLocText(new String[]{"Select", "Single", "Setting"}); - int returnVal = JOptionPane.showConfirmDialog(DesignerContext.getDesignerFrame(), localModifiedTable.getWaringMessage(), title, JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); - if (returnVal == JOptionPane.YES_OPTION) { - //点击是,进行相应刷新去冲突 - datasourceManager.synchronizedWithServer(backupManager, DatasourceManager.CONNECTION); - //要是有重命名冲突的,则对详细的修改表先进行修改 - datasourceManager.doWithConnectionConflict(localModifiedTable); - localModifiedTable.removeConfilct(); - modifyDetails.clear(); - //更新面板 - databaseManagerPane.populate(datasourceManager); - } else { - //更新失败,继续停留页面 - isFailed = true; - } - - } - } - } - //存在请重命名则不能更新 - int index = datasourceManager.isConnectionMapContainsRename(); - if (index != -1) { - isFailed = true; - databaseManagerPane.setSelectedIndex(index); - } - databaseListDialog.setDoOKSucceed(!isFailed); - //如果修改成功,则去远程端增量修改修改表 - if (!isFailed && !currentEnv.isSupportLocalFileOperate()) { - currentEnv.writeDataSourceModifiedTables(localModifiedTable, DatasourceManager.CONNECTION); - localModifiedTable.clear(); - modifyDetails.clear(); - } - return !isFailed; - } - - - public void update() { - this.setEnabled(true); - } +package com.fr.design.actions.server; + +import com.fr.base.BaseUtils; +import com.fr.base.Env; +import com.fr.base.FRContext; +import com.fr.base.ModifiedTable; +import com.fr.data.impl.Connection; +import com.fr.dav.LocalEnv; +import com.fr.design.actions.UpdateAction; +import com.fr.design.data.datapane.connect.ConnectionManagerPane; +import com.fr.design.data.datapane.connect.ConnectionShowPane; +import com.fr.design.dialog.BasicDialog; +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.DesignerFrame; +import com.fr.design.menu.MenuKeySet; +import com.fr.file.DatasourceManager; +import com.fr.file.DatasourceManagerProvider; +import com.fr.general.Inter; + +import javax.swing.*; +import java.awt.event.ActionEvent; +import java.util.HashMap; + +/** + * DatasourceList Action + */ +public class ConnectionListAction extends UpdateAction { + + public ConnectionListAction() { + this.setMenuKeySet(DEFINE_DATA_CONNECTION); + this.setName(getMenuKeySet().getMenuKeySetName()); + this.setMnemonic(getMenuKeySet().getMnemonic()); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_web/connection.png")); + } + + public static final MenuKeySet DEFINE_DATA_CONNECTION = new MenuKeySet() { + @Override + public char getMnemonic() { + return 'D'; + } + + @Override + public String getMenuName() { + return Inter.getLocText("Server-Define_Data_Connection"); + } + + @Override + public KeyStroke getKeyStroke() { + return null; + } + }; + + /** + * 执行动作 + * + * @param evt 事件 + */ + public void actionPerformed(ActionEvent evt) { + DesignerFrame designerFrame = DesignerContext.getDesignerFrame(); + final DatasourceManagerProvider datasourceManager = DatasourceManager.getProviderInstance(); + final DatasourceManager backupManager = datasourceManager.getBackUpManager(); + final ConnectionManagerPane databaseManagerPane = new ConnectionManagerPane() { + public void complete() { + populate(datasourceManager); + } + + protected void renameConnection(String oldName, String newName) { + datasourceManager.getConnectionLocalModifyTable().rename(oldName, newName); + } + }; + final BasicDialog databaseListDialog = databaseManagerPane.showLargeWindow(designerFrame, null); + databaseListDialog.addDialogActionListener(new DialogActionAdapter() { + public void doOk() { + if (!databaseManagerPane.isNamePermitted()) { + databaseListDialog.setDoOKSucceed(false); + return; + } + if (!doWithDatasourceManager(datasourceManager, backupManager, databaseManagerPane, databaseListDialog)) { + //如果更新失败,则不关闭对话框,也不写xml文件,并且将对话框定位在请重命名的那个对象页面 + return; + } + // marks:保存数据 + writeFile(datasourceManager); + } + + public void doCancel() { + datasourceManager.synchronizedWithServer(); + } + }); + databaseListDialog.setVisible(true); + } + + + /** + * @param datasourceManager + */ + public static void writeFile(DatasourceManagerProvider datasourceManager) { + Env currentEnv = FRContext.getCurrentEnv(); + try { + boolean isSuccess = currentEnv.writeResource(datasourceManager); + if (!isSuccess) { + throw new RuntimeException(Inter.getLocText("FR-Designer_Already_exist")); + } + } catch (Exception e) { + throw new RuntimeException(Inter.getLocText("FR-Designer_Already_exist")); + } + DesignerContext.getDesignerBean("databasename").refreshBeanElement(); + } + + /** + * 更新datasourceManager + * + * @param datasourceManager datasource管理对象 + * @param backupManager datasource管理对象备份 + * @param connectionShowPane datasource面板 + * @param databaseListDialog datasource管理对话框 + * @return boolean 是否更新成功 + */ + public static boolean doWithDatasourceManager(DatasourceManagerProvider datasourceManager, DatasourceManager + backupManager, ConnectionShowPane connectionShowPane, BasicDialog databaseListDialog) { + connectionShowPane.update(datasourceManager); + HashMap modifyDetails = datasourceManager.getConnectionModifyDetails(); + modifyDetails.clear(); + Env currentEnv = FRContext.getCurrentEnv(); + ModifiedTable localModifiedTable = datasourceManager.checkConnectionModifyTable(backupManager, currentEnv.getUserID()); + boolean isFailed = false; + if (currentEnv.isSupportLocalFileOperate() && !((LocalEnv) currentEnv).isNoRemoteUser()) { + //如果是本地,并且有远程用户时则更新自己的修改表 + datasourceManager.updateSelfConnectionTotalModifiedTable(localModifiedTable, ModifiedTable.LOCAL_MODIFIER); + } else { + if (!currentEnv.isSupportLocalFileOperate()) { + //如果是远程,则去取服务器的最新的修改表,检查有没有冲突 + ModifiedTable currentServerModifyTable = currentEnv.getDataSourceModifiedTables(DatasourceManager.CONNECTION); + if (localModifiedTable.checkModifiedTableConflictWithServer(currentServerModifyTable, currentEnv.getUserID())) { + //有冲突,进行提示 + String title = Inter.getLocText(new String[]{"Select", "Single", "Setting"}); + int returnVal = JOptionPane.showConfirmDialog(DesignerContext.getDesignerFrame(), localModifiedTable.getWaringMessage(), title, JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); + if (returnVal == JOptionPane.YES_OPTION) { + //点击是,进行相应刷新去冲突 + datasourceManager.synchronizedWithServer(backupManager, DatasourceManager.CONNECTION); + //要是有重命名冲突的,则对详细的修改表先进行修改 + datasourceManager.doWithConnectionConflict(localModifiedTable); + localModifiedTable.removeConfilct(); + modifyDetails.clear(); + //更新面板 + connectionShowPane.populate(datasourceManager); + } else { + //更新失败,继续停留页面 + isFailed = true; + } + + } + } + } + //存在请重命名则不能更新 + int index = datasourceManager.isConnectionMapContainsRename(); + if (index != -1) { + isFailed = true; + connectionShowPane.setSelectedIndex(index); + } + databaseListDialog.setDoOKSucceed(!isFailed); + //如果修改成功,则去远程端增量修改修改表 + if (!isFailed && !currentEnv.isSupportLocalFileOperate()) { + currentEnv.writeDataSourceModifiedTables(localModifiedTable, DatasourceManager.CONNECTION); + localModifiedTable.clear(); + modifyDetails.clear(); + } + return !isFailed; + } + + + public void update() { + this.setEnabled(true); + } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/data/datapane/connect/ConnectionComboBoxPanel.java b/designer_base/src/com/fr/design/data/datapane/connect/ConnectionComboBoxPanel.java index cc75b7ca2..c80970bd9 100644 --- a/designer_base/src/com/fr/design/data/datapane/connect/ConnectionComboBoxPanel.java +++ b/designer_base/src/com/fr/design/data/datapane/connect/ConnectionComboBoxPanel.java @@ -1,128 +1,140 @@ -package com.fr.design.data.datapane.connect; - -import com.fr.base.Env; -import com.fr.base.FRContext; -import com.fr.data.impl.AbstractDatabaseConnection; -import com.fr.data.impl.Connection; -import com.fr.data.impl.NameDatabaseConnection; -import com.fr.design.DesignerEnvManager; -import com.fr.design.dialog.BasicDialog; -import com.fr.design.dialog.DialogActionAdapter; -import com.fr.file.DatasourceManager; -import com.fr.file.DatasourceManagerProvider; -import com.fr.general.ComparatorUtils; -import com.fr.stable.StringUtils; - -import javax.swing.*; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; -import java.util.ArrayList; -import java.util.List; - -/** - * 选择数据连接的下拉框 - * - * @editor zhou - * @since 2012-3-28下午3:02:30 - */ -public class ConnectionComboBoxPanel extends ItemEditableComboBoxPanel { - /** - * - */ - private static final long serialVersionUID = 1L; - private Class cls; // 所取的Connection都是cls及其子类 - private java.util.List nameList = new ArrayList(); - - public ConnectionComboBoxPanel(Class cls) { - super(); - - this.cls = cls; - - // alex:添加item change监听,当改变时改变DesignerEnvManager中的最近选中的数据连接 - this.itemComboBox.addItemListener(new ItemListener() { - public void itemStateChanged(ItemEvent e) { - String selected = ConnectionComboBoxPanel.this.getSelectedItem(); - if (StringUtils.isNotBlank(selected)) { - DesignerEnvManager.getEnvManager().setRecentSelectedConnection(selected); - } - } - }); - refreshItems(); - } - - /* - * 刷新ComboBox.items - */ - protected java.util.Iterator items() { - nameList = new ArrayList(); - - DatasourceManagerProvider mgr = DatasourceManager.getProviderInstance(); - java.util.Iterator nameIt = mgr.getConnectionNameIterator(); - while (nameIt.hasNext()) { - String conName = nameIt.next(); - Connection connection = mgr.getConnection(conName); - filterConnection(connection, conName, nameList); - } - - return nameList.iterator(); - } - - protected void filterConnection(Connection connection, String conName, List nameList) { - connection.addConnection(nameList, conName, new Class[]{AbstractDatabaseConnection.class}); - } - - - public int getConnectionSize() { - return nameList.size(); - } - - public String getConnection(int i) { - return nameList.get(i); - } - - /* - * 弹出对话框编辑Items - */ - protected void editItems() { - final ConnectionListPane connectionListPane = new ConnectionListPane(); - final DatasourceManagerProvider datasourceManager = DatasourceManager.getProviderInstance(); - connectionListPane.populate(datasourceManager); - BasicDialog connectionListDialog = connectionListPane.showLargeWindow( - SwingUtilities.getWindowAncestor(ConnectionComboBoxPanel.this), new DialogActionAdapter() { - public void doOk() { - connectionListPane.update(datasourceManager); - // marks:保存数据 - Env currentEnv = FRContext.getCurrentEnv(); - try { - currentEnv.writeResource(datasourceManager); - } catch (Exception ex) { - FRContext.getLogger().error(ex.getMessage(), ex); - } - } - }); - connectionListDialog.setVisible(true); - refreshItems(); - } - - public void populate(com.fr.data.impl.Connection connection) { - editButton.setEnabled(FRContext.getCurrentEnv().isRoot()); - if (connection instanceof NameDatabaseConnection) { - this.setSelectedItem(((NameDatabaseConnection) connection).getName()); - } else { - String s = DesignerEnvManager.getEnvManager().getRecentSelectedConnection(); - if (StringUtils.isNotBlank(s)) { - for (int i = 0; i < this.getConnectionSize(); i++) { - String t = this.getConnection(i); - if (ComparatorUtils.equals(s, t)) { - this.setSelectedItem(s); - break; - } - } - } - // alex:如果这个ComboBox还是没有选中,那么选中第一个 - if (StringUtils.isBlank(this.getSelectedItem()) && this.getConnectionSize() > 0) { - this.setSelectedItem(this.getConnection(0)); - } - } - } +package com.fr.design.data.datapane.connect; + +import com.fr.base.FRContext; +import com.fr.data.impl.AbstractDatabaseConnection; +import com.fr.data.impl.Connection; +import com.fr.data.impl.NameDatabaseConnection; +import com.fr.design.DesignerEnvManager; +import com.fr.design.actions.server.ConnectionListAction; +import com.fr.design.dialog.BasicDialog; +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.file.DatasourceManager; +import com.fr.file.DatasourceManagerProvider; +import com.fr.general.ComparatorUtils; +import com.fr.stable.StringUtils; + +import javax.swing.*; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +/** + * 选择数据连接的下拉框 + * + * @editor zhou + * @since 2012-3-28下午3:02:30 + */ +public class ConnectionComboBoxPanel extends ItemEditableComboBoxPanel { + /** + * + */ + private static final long serialVersionUID = 1L; + private Class cls; // 所取的Connection都是cls及其子类 + private List nameList = new ArrayList(); + + public ConnectionComboBoxPanel(Class cls) { + super(); + + this.cls = cls; + + // alex:添加item change监听,当改变时改变DesignerEnvManager中的最近选中的数据连接 + this.itemComboBox.addItemListener(new ItemListener() { + public void itemStateChanged(ItemEvent e) { + String selected = ConnectionComboBoxPanel.this.getSelectedItem(); + if (StringUtils.isNotBlank(selected)) { + DesignerEnvManager.getEnvManager().setRecentSelectedConnection(selected); + } + } + }); + refreshItems(); + } + + /* + * 刷新ComboBox.items + */ + protected Iterator items() { + nameList = new ArrayList(); + + DatasourceManagerProvider mgr = DatasourceManager.getProviderInstance(); + Iterator nameIt = mgr.getConnectionNameIterator(); + while (nameIt.hasNext()) { + String conName = nameIt.next(); + Connection connection = mgr.getConnection(conName); + filterConnection(connection, conName, nameList); + } + + return nameList.iterator(); + } + + protected void filterConnection(Connection connection, String conName, List nameList) { + connection.addConnection(nameList, conName, new Class[]{AbstractDatabaseConnection.class}); + } + + public int getConnectionSize() { + return nameList.size(); + } + + public String getConnection(int i) { + return nameList.get(i); + } + + /* + * 弹出对话框编辑Items + */ + protected void editItems() { + final ConnectionListPane connectionListPane = new ConnectionListPane(); + final DatasourceManagerProvider datasourceManager = DatasourceManager.getProviderInstance(); + final DatasourceManager backupManager = datasourceManager.getBackUpManager(); + connectionListPane.populate(datasourceManager); + final BasicDialog connectionListDialog = connectionListPane.showLargeWindow( + SwingUtilities.getWindowAncestor(ConnectionComboBoxPanel.this), null); + connectionListDialog.addDialogActionListener(new DialogActionAdapter() { + public void doOk() { + if (!connectionListPane.isNamePermitted()) { + connectionListDialog.setDoOKSucceed(false); + return; + } + if (!ConnectionListAction.doWithDatasourceManager(datasourceManager, backupManager, connectionListPane, + connectionListDialog)) { + //如果更新失败,则不关闭对话框,也不写xml文件,并且将对话框定位在请重命名的那个对象页面 + return; + } + // marks:保存数据 + ConnectionListAction.writeFile(datasourceManager); + } + + public void doCancel() { + datasourceManager.synchronizedWithServer(); + } + }); + connectionListDialog.setVisible(true); + refreshItems(); + } + + /** + * @param connection 数据库链接 + */ + public void populate(Connection connection) { + editButton.setEnabled(FRContext.getCurrentEnv().isRoot()); + if (connection instanceof NameDatabaseConnection) { + this.setSelectedItem(((NameDatabaseConnection) connection).getName()); + } else { + String s = DesignerEnvManager.getEnvManager().getRecentSelectedConnection(); + if (StringUtils.isNotBlank(s)) { + for (int i = 0; i < this.getConnectionSize(); i++) { + String t = this.getConnection(i); + if (ComparatorUtils.equals(s, t)) { + this.setSelectedItem(s); + break; + } + } + } + // alex:如果这个ComboBox还是没有选中,那么选中第一个 + if (StringUtils.isBlank(this.getSelectedItem()) && this.getConnectionSize() > 0) { + this.setSelectedItem(this.getConnection(0)); + } + } + } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/data/datapane/connect/ConnectionListPane.java b/designer_base/src/com/fr/design/data/datapane/connect/ConnectionListPane.java index 8d0f2aa39..1cdf1cb1a 100644 --- a/designer_base/src/com/fr/design/data/datapane/connect/ConnectionListPane.java +++ b/designer_base/src/com/fr/design/data/datapane/connect/ConnectionListPane.java @@ -1,163 +1,163 @@ -package com.fr.design.data.datapane.connect; - -import com.fr.data.impl.Connection; -import com.fr.data.impl.JDBCDatabaseConnection; -import com.fr.data.impl.JNDIDatabaseConnection; -import com.fr.design.ExtraDesignClassManager; -import com.fr.design.fun.ConnectionProvider; -import com.fr.design.gui.controlpane.JListControlPane; -import com.fr.design.gui.controlpane.NameObjectCreator; -import com.fr.design.gui.controlpane.NameableCreator; -import com.fr.file.DatasourceManagerProvider; -import com.fr.general.ComparatorUtils; -import com.fr.general.Inter; -import com.fr.general.NameObject; -import com.fr.stable.ArrayUtils; -import com.fr.stable.Nameable; -import com.fr.stable.StringUtils; -import com.fr.stable.core.PropertyChangeAdapter; - -import javax.swing.*; -import java.util.*; - -/** - * Connection List Pane. - */ -public class ConnectionListPane extends JListControlPane { - public static final String TITLE_NAME = Inter.getLocText("Server-Define_Data_Connection"); - private boolean isNamePermitted = true; - private HashMap renameMap = new HashMap(); - - public ConnectionListPane() { - renameMap.clear(); - this.addEditingListner(new PropertyChangeAdapter() { - public void propertyChange() { - isNamePermitted = true; - String[] allListNames = nameableList.getAllNames(); - allListNames[nameableList.getSelectedIndex()] = StringUtils.EMPTY; - String tempName = getEditingName(); - if (StringUtils.isEmpty(tempName)) { - String[] warning = new String[]{"NOT_NULL_Des", "Please_Rename"}; - String[] sign = new String[]{",", "!"}; - nameableList.stopEditing(); - JOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(ConnectionListPane.this), Inter.getLocText(warning, sign)); - setWarnigText(editingIndex); - isNamePermitted = false; - return; - } - if (!ComparatorUtils.equals(tempName, selectedName) - && isNameRepeted(new List[]{Arrays.asList(allListNames)}, tempName)) { - isNamePermitted = false; - nameableList.stopEditing(); - String message = Inter.getLocText(new String[]{"Utils-has_been_existed", "DashBoard-ConnectionList", "Please_Rename"}, new String[]{"", tempName + ",", "!"}); - JOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(ConnectionListPane.this), message); - setWarnigText(editingIndex); - } - if (isNamePermitted && !ComparatorUtils.equals(tempName, selectedName)) { - rename(selectedName, tempName); - } - - } - }); - } - - - protected void rename(String oldName, String newName) { - if (renameMap.containsKey(selectedName)) { - renameMap.remove(selectedName); - } - renameMap.put(selectedName, newName); - } - - /** - * 名字是否允许 - * - * @return 是/否 - */ - public boolean isNamePermitted() { - return isNamePermitted; - } - - /** - * 检查按钮可用状态 Check button enabled. - */ - public void checkButtonEnabled() { - super.checkButtonEnabled(); - isNamePermitted = !isContainsRename(); - } - - - public HashMap getRenameMap() { - return renameMap; - } - - /** - * 创建菜单项 - * - * @return 菜单项 - */ - public NameableCreator[] createNameableCreators() { - NameableCreator[] creators = new NameableCreator[]{new NameObjectCreator( - "JDBC", - "/com/fr/design/images/data/source/jdbcTableData.png", - JDBCDatabaseConnection.class, - DatabaseConnectionPane.JDBC.class - ), new NameObjectCreator( - "JNDI", - "/com/fr/design/images/data/source/jdbcTableData.png", - JNDIDatabaseConnection.class, - DatabaseConnectionPane.JNDI.class - )}; - Set pluginCreators = ExtraDesignClassManager.getInstance().getArray(ConnectionProvider.XML_TAG); - for (ConnectionProvider provider : pluginCreators) { - NameObjectCreator creator = new NameObjectCreator( - provider.nameForConnection(), - provider.iconPathForConnection(), - provider.classForConnection(), - provider.appearanceForConnection() - ); - creators = ArrayUtils.add(creators, creator); - } - - return creators; - } - - @Override - protected String title4PopupWindow() { - return TITLE_NAME; - } - - /** - * Populate. - * - * @param datasourceManager the new datasourceManager. - */ - public void populate(DatasourceManagerProvider datasourceManager) { - Iterator nameIt = datasourceManager.getConnectionNameIterator(); - - List nameObjectList = new ArrayList(); - while (nameIt.hasNext()) { - String name = nameIt.next(); - nameObjectList.add(new NameObject(name, datasourceManager.getConnection(name))); - } - this.populate(nameObjectList.toArray(new NameObject[nameObjectList.size()])); - - } - - /** - * Update. - */ - public void update(DatasourceManagerProvider datasourceManager) { - // Nameable[]居然不能强转成NameObject[],一定要这么写... - Nameable[] res = this.update(); - NameObject[] res_array = new NameObject[res.length]; - java.util.Arrays.asList(res).toArray(res_array); - - datasourceManager.clearAllConnection(); - - for (int i = 0; i < res_array.length; i++) { - NameObject nameObject = res_array[i]; - datasourceManager.putConnection(nameObject.getName(), (Connection) nameObject.getObject()); - } - } +package com.fr.design.data.datapane.connect; + +import com.fr.data.impl.Connection; +import com.fr.data.impl.JDBCDatabaseConnection; +import com.fr.data.impl.JNDIDatabaseConnection; +import com.fr.design.ExtraDesignClassManager; +import com.fr.design.fun.ConnectionProvider; +import com.fr.design.gui.controlpane.JListControlPane; +import com.fr.design.gui.controlpane.NameObjectCreator; +import com.fr.design.gui.controlpane.NameableCreator; +import com.fr.file.DatasourceManagerProvider; +import com.fr.general.ComparatorUtils; +import com.fr.general.Inter; +import com.fr.general.NameObject; +import com.fr.stable.ArrayUtils; +import com.fr.stable.Nameable; +import com.fr.stable.StringUtils; +import com.fr.stable.core.PropertyChangeAdapter; + +import javax.swing.*; +import java.util.*; + +/** + * Connection List Pane. + */ +public class ConnectionListPane extends JListControlPane implements ConnectionShowPane { + public static final String TITLE_NAME = Inter.getLocText("Server-Define_Data_Connection"); + private boolean isNamePermitted = true; + private HashMap renameMap = new HashMap(); + + public ConnectionListPane() { + renameMap.clear(); + this.addEditingListner(new PropertyChangeAdapter() { + public void propertyChange() { + isNamePermitted = true; + String[] allListNames = nameableList.getAllNames(); + allListNames[nameableList.getSelectedIndex()] = StringUtils.EMPTY; + String tempName = getEditingName(); + if (StringUtils.isEmpty(tempName)) { + String[] warning = new String[]{"NOT_NULL_Des", "Please_Rename"}; + String[] sign = new String[]{",", "!"}; + nameableList.stopEditing(); + JOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(ConnectionListPane.this), Inter.getLocText(warning, sign)); + setWarnigText(editingIndex); + isNamePermitted = false; + return; + } + if (!ComparatorUtils.equals(tempName, selectedName) + && isNameRepeted(new List[]{Arrays.asList(allListNames)}, tempName)) { + isNamePermitted = false; + nameableList.stopEditing(); + String message = Inter.getLocText(new String[]{"Utils-has_been_existed", "DashBoard-ConnectionList", "Please_Rename"}, new String[]{"", tempName + ",", "!"}); + JOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(ConnectionListPane.this), message); + setWarnigText(editingIndex); + } + if (isNamePermitted && !ComparatorUtils.equals(tempName, selectedName)) { + rename(selectedName, tempName); + } + + } + }); + } + + + protected void rename(String oldName, String newName) { + if (renameMap.containsKey(selectedName)) { + renameMap.remove(selectedName); + } + renameMap.put(selectedName, newName); + } + + /** + * 名字是否允许 + * + * @return 是/否 + */ + public boolean isNamePermitted() { + return isNamePermitted; + } + + /** + * 检查按钮可用状态 Check button enabled. + */ + public void checkButtonEnabled() { + super.checkButtonEnabled(); + isNamePermitted = !isContainsRename(); + } + + + public HashMap getRenameMap() { + return renameMap; + } + + /** + * 创建菜单项 + * + * @return 菜单项 + */ + public NameableCreator[] createNameableCreators() { + NameableCreator[] creators = new NameableCreator[]{new NameObjectCreator( + "JDBC", + "/com/fr/design/images/data/source/jdbcTableData.png", + JDBCDatabaseConnection.class, + DatabaseConnectionPane.JDBC.class + ), new NameObjectCreator( + "JNDI", + "/com/fr/design/images/data/source/jdbcTableData.png", + JNDIDatabaseConnection.class, + DatabaseConnectionPane.JNDI.class + )}; + Set pluginCreators = ExtraDesignClassManager.getInstance().getArray(ConnectionProvider.XML_TAG); + for (ConnectionProvider provider : pluginCreators) { + NameObjectCreator creator = new NameObjectCreator( + provider.nameForConnection(), + provider.iconPathForConnection(), + provider.classForConnection(), + provider.appearanceForConnection() + ); + creators = ArrayUtils.add(creators, creator); + } + + return creators; + } + + @Override + protected String title4PopupWindow() { + return TITLE_NAME; + } + + /** + * Populate. + * + * @param datasourceManager the new datasourceManager. + */ + public void populate(DatasourceManagerProvider datasourceManager) { + Iterator nameIt = datasourceManager.getConnectionNameIterator(); + + List nameObjectList = new ArrayList(); + while (nameIt.hasNext()) { + String name = nameIt.next(); + nameObjectList.add(new NameObject(name, datasourceManager.getConnection(name))); + } + this.populate(nameObjectList.toArray(new NameObject[nameObjectList.size()])); + + } + + /** + * Update. + */ + public void update(DatasourceManagerProvider datasourceManager) { + // Nameable[]居然不能强转成NameObject[],一定要这么写... + Nameable[] res = this.update(); + NameObject[] res_array = new NameObject[res.length]; + java.util.Arrays.asList(res).toArray(res_array); + + datasourceManager.clearAllConnection(); + + for (int i = 0; i < res_array.length; i++) { + NameObject nameObject = res_array[i]; + datasourceManager.putConnection(nameObject.getName(), (Connection) nameObject.getObject()); + } + } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/data/datapane/connect/ConnectionManagerPane.java b/designer_base/src/com/fr/design/data/datapane/connect/ConnectionManagerPane.java index ace69ff69..70d4933fa 100644 --- a/designer_base/src/com/fr/design/data/datapane/connect/ConnectionManagerPane.java +++ b/designer_base/src/com/fr/design/data/datapane/connect/ConnectionManagerPane.java @@ -1,78 +1,79 @@ -package com.fr.design.data.datapane.connect; - -import com.fr.base.FRContext; -import com.fr.design.gui.frpane.LoadingBasicPane; -import com.fr.design.gui.ilable.UILabel; -import com.fr.design.gui.itextfield.UITextField; -import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.file.DatasourceManagerProvider; -import com.fr.general.Inter; -import com.fr.stable.project.ProjectConstants; - -import javax.swing.*; -import java.awt.*; -import java.io.File; -import java.util.HashMap; - -public class ConnectionManagerPane extends LoadingBasicPane { - private UITextField connectionTextField; - private ConnectionListPane connectionListPane; - - protected void initComponents(JPanel container) { - container.setLayout(FRGUIPaneFactory.createBorderLayout()); - - JPanel connectionPathPane = FRGUIPaneFactory.createBorderLayout_L_Pane(); - container.add(connectionPathPane, BorderLayout.NORTH); - - connectionPathPane.setBorder(BorderFactory.createEmptyBorder(6, 2, 2, 2)); - - connectionPathPane.add(new UILabel(Inter.getLocText("FR-Designer_Save_Path") + ":"), BorderLayout.WEST); - this.connectionTextField = new UITextField(); - connectionPathPane.add(connectionTextField, BorderLayout.CENTER); - this.connectionTextField.setEditable(false); - connectionListPane = new ConnectionListPane(){ - protected void rename(String oldName,String newName) { - super.rename(oldName,newName); - renameConnection(oldName,newName); - } - }; - container.add(connectionListPane, BorderLayout.CENTER); - } - - @Override - protected String title4PopupWindow() { - return Inter.getLocText("Server-Define_Data_Connection"); - } - - public HashMap getRenameMap() { - return connectionListPane.getRenameMap(); - } - - public void populate(DatasourceManagerProvider datasourceManager) { - this.connectionTextField.setText(FRContext.getCurrentEnv().getPath() + File.separator + ProjectConstants.RESOURCES_NAME - + File.separator + datasourceManager.fileName()); - this.connectionListPane.populate(datasourceManager); - } - - public void update(DatasourceManagerProvider datasourceManager) { - this.connectionListPane.update(datasourceManager); - } - - /** - * 设置选中项 - * - * @param index 选中项的序列号 - */ - public void setSelectedIndex(int index) { - this.connectionListPane.setSelectedIndex(index); - } - - /** - * 名字是否允许 - * @return 允许返回true - */ - public boolean isNamePermitted() { - return connectionListPane.isNamePermitted(); - } - +package com.fr.design.data.datapane.connect; + +import com.fr.base.FRContext; +import com.fr.design.gui.frpane.LoadingBasicPane; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.itextfield.UITextField; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.file.DatasourceManagerProvider; +import com.fr.general.Inter; +import com.fr.stable.project.ProjectConstants; + +import javax.swing.*; +import java.awt.*; +import java.io.File; +import java.util.HashMap; + +public class ConnectionManagerPane extends LoadingBasicPane implements ConnectionShowPane { + private UITextField connectionTextField; + private ConnectionListPane connectionListPane; + + protected void initComponents(JPanel container) { + container.setLayout(FRGUIPaneFactory.createBorderLayout()); + + JPanel connectionPathPane = FRGUIPaneFactory.createBorderLayout_L_Pane(); + container.add(connectionPathPane, BorderLayout.NORTH); + + connectionPathPane.setBorder(BorderFactory.createEmptyBorder(6, 2, 2, 2)); + + connectionPathPane.add(new UILabel(Inter.getLocText("FR-Designer_Save_Path") + ":"), BorderLayout.WEST); + this.connectionTextField = new UITextField(); + connectionPathPane.add(connectionTextField, BorderLayout.CENTER); + this.connectionTextField.setEditable(false); + connectionListPane = new ConnectionListPane() { + protected void rename(String oldName, String newName) { + super.rename(oldName, newName); + renameConnection(oldName, newName); + } + }; + container.add(connectionListPane, BorderLayout.CENTER); + } + + @Override + protected String title4PopupWindow() { + return Inter.getLocText("Server-Define_Data_Connection"); + } + + public HashMap getRenameMap() { + return connectionListPane.getRenameMap(); + } + + public void populate(DatasourceManagerProvider datasourceManager) { + this.connectionTextField.setText(FRContext.getCurrentEnv().getPath() + File.separator + ProjectConstants.RESOURCES_NAME + + File.separator + datasourceManager.fileName()); + this.connectionListPane.populate(datasourceManager); + } + + public void update(DatasourceManagerProvider datasourceManager) { + this.connectionListPane.update(datasourceManager); + } + + /** + * 设置选中项 + * + * @param index 选中项的序列号 + */ + public void setSelectedIndex(int index) { + this.connectionListPane.setSelectedIndex(index); + } + + /** + * 名字是否允许 + * + * @return 允许返回true + */ + public boolean isNamePermitted() { + return connectionListPane.isNamePermitted(); + } + } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/data/datapane/connect/ConnectionShowPane.java b/designer_base/src/com/fr/design/data/datapane/connect/ConnectionShowPane.java new file mode 100644 index 000000000..ce857ddc6 --- /dev/null +++ b/designer_base/src/com/fr/design/data/datapane/connect/ConnectionShowPane.java @@ -0,0 +1,15 @@ +package com.fr.design.data.datapane.connect; + +import com.fr.file.DatasourceManagerProvider; + +/** + * Created by yaoh.wu on 2017/4/22. + * 数据链接显示面板 + */ +public interface ConnectionShowPane { + void update(DatasourceManagerProvider datasourceManager); + + void populate(DatasourceManagerProvider datasourceManager); + + void setSelectedIndex(int index); +} From c86cfd1c1b0275ad3d6b4eafd734869d6891dd55 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Mon, 24 Apr 2017 09:21:32 +0800 Subject: [PATCH 296/343] =?UTF-8?q?=E7=BB=84=E4=BB=B6=E5=A4=8D=E7=94=A8?= =?UTF-8?q?=E8=BE=B9=E7=95=8C=E5=A4=8D=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/FormSelectionUtils.java | 33 +++++++------------ 1 file changed, 11 insertions(+), 22 deletions(-) diff --git a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java index 1978e8432..90945b1e8 100644 --- a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java +++ b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java @@ -132,29 +132,18 @@ public class FormSelectionUtils { XLayoutContainer container = layoutAdapter.getContainer(); boolean xOut = x < 0 || x + copiedCreator.getWidth() / 2 + xoffset > container.getWidth(); boolean yOut = y < 0 || y + copiedCreator.getHeight() / 2 + yoffset > container.getHeight(); - /* - * 组件原始位置位于布局的右下角, - * 和布局右下边界线紧挨, - * 粘贴时组件在原始位置向左错开20像素。 - * x,y同时越界 - */ - if (xOut && yOut) { - //向左偏移 - x = container.getWidth() - copiedCreator.getWidth() / 2 - DELAY_X_Y - xoffset; + + y = yOut ? container.getHeight() - copiedCreator.getHeight() / 2 - yoffset : y; + boolean isEdge = (x - DELAY_X_Y == container.getWidth() - copiedCreator.getWidth() / 2 - xoffset); + if (xOut) { + if (isEdge) { + //向左偏移 + x = container.getWidth() - copiedCreator.getWidth() / 2 - DELAY_X_Y - xoffset; + } //紧贴下边界 - y = container.getHeight() - copiedCreator.getHeight() / 2 - yoffset; - return new Point(x, y); - } - /* - * 组件原始位置与布局边界距离小于20像素(下边界&右边界同时小于或者任意一个边界小于), - * 则粘贴时距离小于20像素一侧直接贴近布局边界, - * 距离大于20像素的一侧正常错开。 - * x,y中只有一个越界 - */ - if ((xOut || yOut)) { - x = xOut ? container.getWidth() - copiedCreator.getWidth() / 2 - xoffset : x; - y = yOut ? container.getHeight() - copiedCreator.getHeight() / 2 - yoffset : y; - return new Point(x, y); + else { + x = container.getWidth() - copiedCreator.getWidth() / 2 - xoffset; + } } } return new Point(x, y); From a5769fe4679a35212ac3235fa8f823bac87a753a Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Mon, 24 Apr 2017 11:45:09 +0800 Subject: [PATCH 297/343] =?UTF-8?q?REPORT-934=E9=A2=9C=E8=89=B2=E8=AE=B0?= =?UTF-8?q?=E4=BD=8F=E6=AD=A3=E7=A1=AE=E4=BD=86=E6=98=AF=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E4=BF=AE=E5=A4=8D=E5=92=8C=E9=83=A8=E5=88=86?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../style/color/ColorSelectDetailPane.java | 190 +++++---- .../design/style/color/ColorSelectPane.java | 243 ++++++----- .../style/color/NewColorSelectPane.java | 386 +++++++++--------- .../style/color/RecentUseColorPane.java | 91 ++--- .../fr/design/style/color/UsedColorPane.java | 219 +++++----- 5 files changed, 547 insertions(+), 582 deletions(-) diff --git a/designer_base/src/com/fr/design/style/color/ColorSelectDetailPane.java b/designer_base/src/com/fr/design/style/color/ColorSelectDetailPane.java index 5c6c505a3..a84b772ca 100644 --- a/designer_base/src/com/fr/design/style/color/ColorSelectDetailPane.java +++ b/designer_base/src/com/fr/design/style/color/ColorSelectDetailPane.java @@ -1,112 +1,104 @@ package com.fr.design.style.color; -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Dimension; +import com.fr.design.dialog.BasicPane; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.general.Inter; -import javax.swing.JColorChooser; -import javax.swing.JPanel; +import javax.swing.*; import javax.swing.colorchooser.AbstractColorChooserPanel; import javax.swing.colorchooser.ColorSelectionModel; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; - -import com.fr.design.dialog.BasicPane; -import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.general.Inter; +import java.awt.*; /** * 颜色选择器更多颜色面板 - * @author focus * + * @author focus */ -public class ColorSelectDetailPane extends BasicPane{ - private static final int SELECT_PANEL_HEIGHT = 245; - // Selected color - private Color color; - - // 颜色选择器面板 - JColorChooser selectedPanel; - - // 最近使用颜色面板 - JPanel recentUsePanel; - - // 预览 - JPanel previewPanel; - - public JColorChooser getSelectedPanel() { - return selectedPanel; - } - - public void setSelectedPanel(JColorChooser selectedPanel) { - this.selectedPanel = selectedPanel; - } - - public Color getColor() { - return color; - } - - public void setColor(Color color) { - this.color = color; - } - - public ColorSelectDetailPane() { - super(); - } - - public ColorSelectDetailPane(Color color){ - if(color == null){ - color = Color.white; - } - this.color = color; - initComponents(); - } - - @Override - protected String title4PopupWindow() { - return null; - } - - protected void initComponents() { - this.setLayout(FRGUIPaneFactory.createBorderLayout()); - - // 颜色选择器面板 - selectedPanel = new JColorChooser(this.color); - selectedPanel.setPreferredSize(new Dimension(selectedPanel.getWidth(),SELECT_PANEL_HEIGHT)); - AbstractColorChooserPanel[] choosers = selectedPanel.getChooserPanels(); - for(int i=0;i colorChangeListenerList = new ArrayList(); - - ColorSelectDetailPane pane; - + + + /* default */ ColorSelectDetailPane pane; + /** * Constructor. */ public ColorSelectPane() { - super(true); - initialCompents(true); + super(true); + initialCompents(true); } public ColorSelectPane(boolean isSupportTransparent) { super(isSupportTransparent); initialCompents(isSupportTransparent); } - + private void initialCompents(boolean isSupportTransparent) { - this.setLayout(FRGUIPaneFactory.createBorderLayout()); - this.setBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, 5)); - if (isSupportTransparent) { - UIButton transpanrentButton = new UIButton(Inter.getLocText("FR-Designer_ChartF-Transparency")); - this.add(transpanrentButton, BorderLayout.NORTH); - transpanrentButton.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - doTransparent(); - } - }); - } - - // center - JPanel centerPane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane(); - this.add(centerPane, BorderLayout.CENTER); - - centerPane.add(getRow1Pane()); - - JPanel menuColorPane1 = getMenuColorPane(); - centerPane.add(menuColorPane1); + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + this.setBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, 5)); + if (isSupportTransparent) { + UIButton transpanrentButton = new UIButton(Inter.getLocText("FR-Designer_ChartF-Transparency")); + this.add(transpanrentButton, BorderLayout.NORTH); + transpanrentButton.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + doTransparent(); + } + }); + } + + // center + JPanel centerPane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane(); + this.add(centerPane, BorderLayout.CENTER); + + centerPane.add(getRow1Pane()); + + JPanel menuColorPane1 = getMenuColorPane(); + centerPane.add(menuColorPane1); Color[] colorArray = this.getColorArray(); - for (int i = 0; i < colorArray.length; i++) { - Color color = colorArray[i] == null ? UsedColorPane.DEFAULT_COLOR : colorArray[i]; - menuColorPane1.add(new ColorCell(color, this)); - } - - centerPane.add(Box.createVerticalStrut(1)); - - UIButton customButton = new UIButton(Inter.getLocText("FR-Designer-Basic_More_Color")); - - customButton.addMouseListener(new MouseAdapter() { - @Override - public void mousePressed(MouseEvent e) { - customButtonPressed(); - } - }); - customButton.setCursor(new Cursor(Cursor.HAND_CURSOR)); - JPanel centerPane1 = FRGUIPaneFactory.createBorderLayout_S_Pane(); - centerPane1.setBorder(BorderFactory.createEmptyBorder(2, 8, 8, 8)); - centerPane1.add(customButton, BorderLayout.NORTH); - 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个最近使用的颜色 - protected JPanel getRow1Pane() { - JPanel row1Pane = new JPanel(FRGUIPaneFactory.createBorderLayout()); - row1Pane.setBorder(BorderFactory.createEmptyBorder(8, 8, 0, 0)); - row1Pane.setPreferredSize(new Dimension(135, 24)); // 宽度为 16 * 8 + 7 - - // 最近使用 - UsedColorPane usedColorPane = new UsedColorPane(1, 8, 1, ColorSelectConfigManager.getInstance().getColors(), this, true, true); - usedColorPane.getPane().setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 8)); - row1Pane.add(usedColorPane.getPane()); - return row1Pane; - } - - protected Color[] getColorArray(){ + for (int i = 0; i < colorArray.length; i++) { + Color color = colorArray[i] == null ? UsedColorPane.DEFAULT_COLOR : colorArray[i]; + menuColorPane1.add(new ColorCell(color, this)); + } + + centerPane.add(Box.createVerticalStrut(1)); + + UIButton customButton = new UIButton(Inter.getLocText("FR-Designer-Basic_More_Color")); + + customButton.addMouseListener(new MouseAdapter() { + @Override + public void mousePressed(MouseEvent e) { + customButtonPressed(); + } + }); + customButton.setCursor(new Cursor(Cursor.HAND_CURSOR)); + JPanel centerPane1 = FRGUIPaneFactory.createBorderLayout_S_Pane(); + centerPane1.setBorder(BorderFactory.createEmptyBorder(2, 8, 8, 8)); + centerPane1.add(customButton, BorderLayout.NORTH); + 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个取色按钮 + 1个留空的单元格 + 6个最近使用的颜色 + protected JPanel getRow1Pane() { + JPanel row1Pane = new JPanel(FRGUIPaneFactory.createBorderLayout()); + row1Pane.setBorder(BorderFactory.createEmptyBorder(8, 8, 0, 0)); + row1Pane.setPreferredSize(new Dimension(135, 24)); // 宽度为 16 * 8 + 7 + + // 最近使用 + UsedColorPane usedColorPane = new UsedColorPane(1, 8, 1, this, true, true); + usedColorPane.getPane().setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 8)); + row1Pane.add(usedColorPane.getPane()); + return row1Pane; + } + + protected Color[] getColorArray() { return ColorFactory.MenuColors; } @@ -125,15 +123,16 @@ public class ColorSelectPane extends TransparentPane implements ColorSelectable /** * Add change listener. * 增加监听 - * @param 监听 + * + * @param changeListener */ public void addChangeListener(ChangeListener changeListener) { this.colorChangeListenerList.add(changeListener); } - + @Override protected String title4PopupWindow() { - return "Color"; + return "Color"; } /** @@ -166,38 +165,36 @@ public class ColorSelectPane extends TransparentPane implements ColorSelectable /** * 选中颜色 - * @param 颜色单元格 - * */ - @Override - public void colorSetted(ColorCell colorCell) { - colorCell.repaint(); - } - - /** - * 初始化中央面板 - * @param centerPane 中央面板 - * - */ - @Override - public void initCenterPaneChildren(JPanel centerPane) { - GUICoreUtils.initCenterPaneChildren(centerPane, this); - } - - /** - * 透明 - */ - @Override - public void doTransparent() { - this.setColor(null); - } - - /** - * 更多颜色 - */ - @Override - public void customButtonPressed() { - pane = new ColorSelectDetailPane(Color.WHITE); - ColorSelectDialog.showDialog(DesignerContext.getDesignerFrame(), pane, Color.WHITE, this); - } + @Override + public void colorSetted(ColorCell colorCell) { + colorCell.repaint(); + } + + /** + * 初始化中央面板 + * + * @param centerPane 中央面板 + */ + @Override + public void initCenterPaneChildren(JPanel centerPane) { + GUICoreUtils.initCenterPaneChildren(centerPane, this); + } + + /** + * 透明 + */ + @Override + public void doTransparent() { + this.setColor(null); + } + + /** + * 更多颜色 + */ + @Override + public void customButtonPressed() { + pane = new ColorSelectDetailPane(Color.WHITE); + ColorSelectDialog.showDialog(DesignerContext.getDesignerFrame(), pane, Color.WHITE, this); + } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/style/color/NewColorSelectPane.java b/designer_base/src/com/fr/design/style/color/NewColorSelectPane.java index b9903a81f..cb4398fd9 100644 --- a/designer_base/src/com/fr/design/style/color/NewColorSelectPane.java +++ b/designer_base/src/com/fr/design/style/color/NewColorSelectPane.java @@ -1,215 +1,205 @@ package com.fr.design.style.color; -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Cursor; -import java.awt.Dimension; -import java.awt.GridLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.util.ArrayList; - -import javax.swing.BorderFactory; -import javax.swing.Box; -import javax.swing.JPanel; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; - -import com.fr.design.constants.UIConstants; import com.fr.design.border.UIRoundedBorder; +import com.fr.design.constants.UIConstants; +import com.fr.design.dialog.BasicPane; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.DesignerContext; -import com.fr.design.dialog.BasicPane; import com.fr.general.Inter; +import javax.swing.*; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.ArrayList; + /** - * * @author zhou * @since 2012-5-29上午10:39:35 */ public class NewColorSelectPane extends BasicPane implements ColorSelectable { - private static final long serialVersionUID = -8634152305687249392L; - - private Color color = null; // color - // color setting action. - private ArrayList colorChangeListenerList = new ArrayList(); - - // 颜色选择器 - private ColorSelectDetailPane pane; - // 是否支持透明 - private boolean isSupportTransparent; - - private final static int TRANSPANENT_WINDOW_HEIGHT = 165; - private final static int WINDWO_HEIGHT = 150; - - // 最近使用颜色 - UsedColorPane usedColorPane; - - /** - * Constructor. - */ - public NewColorSelectPane() { - this(false); - } - - /** - * Constructor. - */ - public NewColorSelectPane(boolean isSupportTransparent) { - this.isSupportTransparent = isSupportTransparent; - this.setLayout(FRGUIPaneFactory.createBorderLayout()); - this.setBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, 5)); - if (isSupportTransparent) { - UIButton transpanrentButton = new UIButton(Inter.getLocText("FR-Designer_ChartF-Transparency")); - this.add(transpanrentButton, BorderLayout.NORTH); - transpanrentButton.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - doTransparent(); - } - }); - } - - // center - JPanel centerPane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane(); - this.add(centerPane, BorderLayout.CENTER); - - // 第一行 - JPanel row1Pane = new JPanel(FRGUIPaneFactory.createBorderLayout()); - row1Pane.setBorder(BorderFactory.createEmptyBorder(8, 8, 0, 0)); - row1Pane.setPreferredSize(new Dimension(135, 16)); // 宽度为 16 * 8 + 7 - centerPane.add(row1Pane); - // 最近使用 - usedColorPane = new UsedColorPane(1, 8, 1, ColorSelectConfigManager.getInstance().getColors(), this, true, false); - usedColorPane.getPane().setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 8)); - row1Pane.add(usedColorPane.getPane()); - - JPanel menuColorPane1 = new JPanel(); - centerPane.add(menuColorPane1); - - menuColorPane1.setLayout(new GridLayout(5, 8, 1, 1)); - menuColorPane1.setBorder(BorderFactory.createEmptyBorder(8, 8, 0, 8)); - for (int i = 0; i < ColorFactory.MenuColors.length; i++) { - menuColorPane1.add(new ColorCell(ColorFactory.MenuColors[i], this)); - } - - centerPane.add(Box.createVerticalStrut(1)); - - // mod by anchore 16/11/16 - UIButton customButton = new UIButton(Inter.getLocText("FR-Designer-Basic_More_Color")); - //UIButton customButton = new UIButton(Inter.getLocText(new String[]{"More", "Color"}) + "..."); - - customButton.addMouseListener(new MouseAdapter() { - @Override - public void mousePressed(MouseEvent e) { - customButtonPressed(); - } - }); - customButton.setCursor(new Cursor(Cursor.HAND_CURSOR)); - JPanel centerPane1 = FRGUIPaneFactory.createBorderLayout_S_Pane(); - centerPane1.setBorder(BorderFactory.createEmptyBorder(2, 8, 0, 8)); - centerPane1.add(customButton, BorderLayout.NORTH); - centerPane.add(centerPane1); - } - - - - /** - * 添加监听 - * @param 监听列表 - * Add change listener. - */ - public void addChangeListener(ChangeListener changeListener) { - this.colorChangeListenerList.add(changeListener); - } - - @Override - protected String title4PopupWindow() { - return "Color"; - } - - /** - * 获取颜色 - * @return 颜色 - * Return the color. - */ - public Color getColor() { - return color; - } - - /** - * 获取颜色 - * - * @return 颜色 - */ - public Color getNotNoneColor() { - if (color == null) { - setColor(Color.WHITE); - return Color.WHITE; - } - return color; - } - - /** - * Set the color. - * - * @param color - * the new color. - */ - @Override - public void setColor(Color color) { - this.color = color; - - // fire color change. - if (!colorChangeListenerList.isEmpty()) { - ChangeEvent evt = new ChangeEvent(this); - - for (int i = 0; i < colorChangeListenerList.size(); i++) { - this.colorChangeListenerList.get(i).stateChanged(evt); - } - } - ColorSelectConfigManager.getInstance().addToColorQueue(color); - this.repaint(); - } - - /** - * 设置颜色 - * @param 颜色位置 - */ - @Override - public void colorSetted(ColorCell colorCell) { - colorCell.repaint(); - } - - protected void doTransparent() { - setColor(null); - } - protected void customButtonPressed() { - pane = new ColorSelectDetailPane(Color.WHITE); - ColorSelectDialog.showDialog(DesignerContext.getDesignerFrame(), pane, Color.WHITE, this); - } - - @Override - public Dimension getPreferredSize() { - if(isSupportTransparent){ - return new Dimension(super.getPreferredSize().width, TRANSPANENT_WINDOW_HEIGHT); - } - return new Dimension(super.getPreferredSize().width, WINDWO_HEIGHT); - } - - /** - * 更新最近使用颜色 - * - */ - public void updateUsedColor(){ - usedColorPane.updateUsedColor(); - } - + private static final long serialVersionUID = -8634152305687249392L; + + private Color color = null; // color + // color setting action. + private ArrayList colorChangeListenerList = new ArrayList(); + + // 颜色选择器 + private ColorSelectDetailPane pane; + // 是否支持透明 + private boolean isSupportTransparent; + + private final static int TRANSPANENT_WINDOW_HEIGHT = 165; + private final static int WINDWO_HEIGHT = 150; + + // 最近使用颜色 + private UsedColorPane usedColorPane; + + /** + * Constructor. + */ + public NewColorSelectPane() { + this(false); + } + + /** + * Constructor. + */ + public NewColorSelectPane(boolean isSupportTransparent) { + this.isSupportTransparent = isSupportTransparent; + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + this.setBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, 5)); + if (isSupportTransparent) { + UIButton transpanrentButton = new UIButton(Inter.getLocText("FR-Designer_ChartF-Transparency")); + this.add(transpanrentButton, BorderLayout.NORTH); + transpanrentButton.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + doTransparent(); + } + }); + } + + // center + JPanel centerPane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane(); + this.add(centerPane, BorderLayout.CENTER); + + // 第一行 + JPanel row1Pane = new JPanel(FRGUIPaneFactory.createBorderLayout()); + row1Pane.setBorder(BorderFactory.createEmptyBorder(8, 8, 0, 0)); + row1Pane.setPreferredSize(new Dimension(135, 16)); // 宽度为 16 * 8 + 7 + centerPane.add(row1Pane); + // 最近使用 + usedColorPane = new UsedColorPane(1, 8, 1, this, true, false); + usedColorPane.getPane().setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 8)); + row1Pane.add(usedColorPane.getPane()); + + JPanel menuColorPane1 = new JPanel(); + centerPane.add(menuColorPane1); + + menuColorPane1.setLayout(new GridLayout(5, 8, 1, 1)); + menuColorPane1.setBorder(BorderFactory.createEmptyBorder(8, 8, 0, 8)); + for (int i = 0; i < ColorFactory.MenuColors.length; i++) { + menuColorPane1.add(new ColorCell(ColorFactory.MenuColors[i], this)); + } + + centerPane.add(Box.createVerticalStrut(1)); + + // mod by anchore 16/11/16 + UIButton customButton = new UIButton(Inter.getLocText("FR-Designer-Basic_More_Color")); + + customButton.addMouseListener(new MouseAdapter() { + @Override + public void mousePressed(MouseEvent e) { + customButtonPressed(); + } + }); + customButton.setCursor(new Cursor(Cursor.HAND_CURSOR)); + JPanel centerPane1 = FRGUIPaneFactory.createBorderLayout_S_Pane(); + centerPane1.setBorder(BorderFactory.createEmptyBorder(2, 8, 0, 8)); + centerPane1.add(customButton, BorderLayout.NORTH); + centerPane.add(centerPane1); + } + + + /** + * 添加监听 + * + * @param 监听列表 Add change listener. + */ + public void addChangeListener(ChangeListener changeListener) { + this.colorChangeListenerList.add(changeListener); + } + + @Override + protected String title4PopupWindow() { + return "Color"; + } + + /** + * 获取颜色 + * + * @return 颜色 + * Return the color. + */ + public Color getColor() { + return color; + } + + /** + * 获取颜色 + * + * @return 颜色 + */ + public Color getNotNoneColor() { + if (color == null) { + setColor(Color.WHITE); + return Color.WHITE; + } + return color; + } + + /** + * Set the color. + * + * @param color the new color. + */ + @Override + public void setColor(Color color) { + this.color = color; + + // fire color change. + if (!colorChangeListenerList.isEmpty()) { + ChangeEvent evt = new ChangeEvent(this); + + for (int i = 0; i < colorChangeListenerList.size(); i++) { + this.colorChangeListenerList.get(i).stateChanged(evt); + } + } + ColorSelectConfigManager.getInstance().addToColorQueue(color); + this.repaint(); + } + + /** + * 设置颜色 + * + * @param 颜色位置 + */ + @Override + public void colorSetted(ColorCell colorCell) { + colorCell.repaint(); + } + + protected void doTransparent() { + setColor(null); + } + + protected void customButtonPressed() { + pane = new ColorSelectDetailPane(Color.WHITE); + ColorSelectDialog.showDialog(DesignerContext.getDesignerFrame(), pane, Color.WHITE, this); + } + + @Override + public Dimension getPreferredSize() { + if (isSupportTransparent) { + return new Dimension(super.getPreferredSize().width, TRANSPANENT_WINDOW_HEIGHT); + } + return new Dimension(super.getPreferredSize().width, WINDWO_HEIGHT); + } + + /** + * 更新最近使用颜色 + */ + public void updateUsedColor() { + usedColorPane.updateUsedColor(); + } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/style/color/RecentUseColorPane.java b/designer_base/src/com/fr/design/style/color/RecentUseColorPane.java index 914436d0f..c85ff6be8 100644 --- a/designer_base/src/com/fr/design/style/color/RecentUseColorPane.java +++ b/designer_base/src/com/fr/design/style/color/RecentUseColorPane.java @@ -1,55 +1,48 @@ package com.fr.design.style.color; -import java.awt.BorderLayout; -import java.awt.Color; - -import javax.swing.JColorChooser; -import javax.swing.JPanel; - import com.fr.design.dialog.BasicPane; import com.fr.design.layout.FRGUIPaneFactory; -public class RecentUseColorPane extends BasicPane implements ColorSelectable{ - - JColorChooser chooser; - - @Override - protected String title4PopupWindow() { - return null; - } - - public RecentUseColorPane() { - } - - public RecentUseColorPane(JColorChooser chooser) { - this.chooser = chooser; - - // center - JPanel centerPane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane(); - this.add(centerPane, BorderLayout.CENTER); - // 最近使用 - UsedColorPane pane = new UsedColorPane(2, 10, ColorSelectConfigManager.getInstance().getColors(),this); - centerPane.add(pane.getPane()); - } - - /** - * 选中颜色 - * - * @param 颜色 - */ - @Override - public void colorSetted(ColorCell color) { - - } - - @Override - public Color getColor() { - return null; - } - - @Override - public void setColor(Color color) { - chooser.getSelectionModel().setSelectedColor(color); - } - +import javax.swing.*; +import java.awt.*; + +public class RecentUseColorPane extends BasicPane implements ColorSelectable { + + private JColorChooser chooser; + + @Override + protected String title4PopupWindow() { + return null; + } + + + public RecentUseColorPane(JColorChooser chooser) { + this.chooser = chooser; + + // center + JPanel centerPane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane(); + this.add(centerPane, BorderLayout.CENTER); + // 最近使用 + UsedColorPane pane = new UsedColorPane(2, 10, this); + centerPane.add(pane.getPane()); + } + + /** + * 选中颜色 + */ + @Override + public void colorSetted(ColorCell color) { + + } + + @Override + public Color getColor() { + return null; + } + + @Override + public void setColor(Color color) { + chooser.getSelectionModel().setSelectedColor(color); + } + } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/style/color/UsedColorPane.java b/designer_base/src/com/fr/design/style/color/UsedColorPane.java index c8dfdcaec..5594254c3 100644 --- a/designer_base/src/com/fr/design/style/color/UsedColorPane.java +++ b/designer_base/src/com/fr/design/style/color/UsedColorPane.java @@ -1,119 +1,112 @@ package com.fr.design.style.color; -import java.awt.Color; -import java.awt.GridLayout; - -import javax.swing.BorderFactory; -import javax.swing.JPanel; - import com.fr.design.dialog.BasicPane; import com.fr.design.gui.ibutton.SpecialUIButton; -public class UsedColorPane extends BasicPane{ - - public static final Color DEFAULT_COLOR = new Color(222,222,222); - - // 最近使用面板列数 - private int columns; - // 最近使用面板行数 - private int rows; - // 留白的单元格数量 - private int reserveCells; - // 是否需要取色器按钮 - private boolean needPickColorButton; - // 是否在取色时实时设定颜色 - private boolean setColorRealTime; - // 最近使用颜色 - private Object[] colors; - // 最近使用面板 - private JPanel pane; - - private ColorSelectable selectable; - - public JPanel getPane() { - return pane; - } - - public void setPane(JPanel pane) { - this.pane = pane; - } - - public UsedColorPane(){ - - } - - /** - * 构造函数 - * - * @param rows 行 - * @param columns 列 - * @param reserveCells 留白的单元格个数 - * @param colors 最近使用的颜色 - * @param needPickColorButton 是否需要加上取色器按钮 - * @param setColorRealTime 取色器是否实时设定颜色 - */ - public UsedColorPane(int rows,int columns,int reserveCells, Object[] colors, ColorSelectable selectable, boolean needPickColorButton, boolean setColorRealTime){ - this.columns = columns; - this.rows = rows; - this.reserveCells = reserveCells; - this.colors = colors; - this.selectable = selectable; - this.needPickColorButton = needPickColorButton; - this.setColorRealTime = setColorRealTime; - initialComponents(); - } - - public UsedColorPane(int rows,int columns, Object[] colors,ColorSelectable selectable){ - this(rows, columns, 0, colors, selectable, false, false); - } - - private void initialComponents(){ - int total = columns * rows; - JPanel panel = new JPanel(); - panel.setLayout(new GridLayout(rows,columns, 1, 1)); - panel.setBorder(BorderFactory.createEmptyBorder(8, 8, 0, 8)); - Color[] colors = ColorSelectConfigManager.getInstance().getColors(); - int size = colors.length; - - 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; - panel.add(new ColorCell(color == null ? DEFAULT_COLOR : color, selectable)); - i++; - } - this.pane = panel; - } - - /** - * 更新最近使用颜色 - * - */ - public void updateUsedColor(){ - int total = columns * rows; - Color[] colors = ColorSelectConfigManager.getInstance().getColors(); - int size = colors.length; - for(int i=this.reserveCells; i Date: Mon, 24 Apr 2017 16:15:24 +0800 Subject: [PATCH 298/343] =?UTF-8?q?=E7=BB=84=E4=BB=B6=E5=A4=8D=E7=94=A8?= =?UTF-8?q?=E8=BE=B9=E7=95=8C=E7=B2=98=E8=B4=B4=EF=BC=8C=E4=B9=8B=E5=89=8D?= =?UTF-8?q?=E8=80=83=E8=99=91=E7=9A=84=E7=89=87=E9=9D=A2=E4=BA=86=EF=BC=8C?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/mainframe/FormSelectionUtils.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java index 90945b1e8..7a03782c2 100644 --- a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java +++ b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java @@ -133,8 +133,10 @@ public class FormSelectionUtils { boolean xOut = x < 0 || x + copiedCreator.getWidth() / 2 + xoffset > container.getWidth(); boolean yOut = y < 0 || y + copiedCreator.getHeight() / 2 + yoffset > container.getHeight(); + boolean isEdge = (x - DELAY_X_Y == container.getWidth() - copiedCreator.getWidth() / 2 - xoffset) + && (y - DELAY_X_Y == container.getHeight() - copiedCreator.getHeight() / 2 - yoffset); + y = yOut ? container.getHeight() - copiedCreator.getHeight() / 2 - yoffset : y; - boolean isEdge = (x - DELAY_X_Y == container.getWidth() - copiedCreator.getWidth() / 2 - xoffset); if (xOut) { if (isEdge) { //向左偏移 From 9a6bc3f93dd325e7c3c46581983f742f26aef02a Mon Sep 17 00:00:00 2001 From: syoki Date: Tue, 25 Apr 2017 18:41:22 +0900 Subject: [PATCH 299/343] =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=20=E6=97=A5=E6=96=87=20design=E9=83=A8=E5=88=86=20?= =?UTF-8?q?=E7=AC=AC1-200=E4=B8=AAkey=E4=BF=AE=E6=94=B9=E7=BF=BB=E8=AF=91?= =?UTF-8?q?=20=E5=BA=84=E5=A5=87=20syoki?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/locale/designer_ja_JP.properties | 278 +++++++++--------- 1 file changed, 139 insertions(+), 139 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index 87d080198..a9b1b3923 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -1,202 +1,202 @@ # generated time: \u661F\u671F\u56DB \u5341\u4E00\u6708 24 12:02:51 CST 2016 -FR-Designer-BBSLogin_Account=\u30E6\u30FC\u30B6\u30FC\u540D -FR-Designer-BBSLogin_Connection-Failure=\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u63A5\u7D9A\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u73FE\u5728\u306E\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u72B6\u614B\u3092\u691C\u67FB\u3057\u3066\u304F\u3060\u3055\u3044 +FR-Designer-BBSLogin_Account=\u30E6\u30FC\u30B6\u30FCID +FR-Designer-BBSLogin_Connection-Failure=\u30CD\u30C3\u30C8\u63A5\u7D9A\u5931\u6557\u3001\u30CD\u30C3\u30C8\u72B6\u614B\u3054\u78BA\u8A8D\u4E0B\u3055\u3044 FR-Designer-BBSLogin_Connection-Failure-Tip=\u30D2\u30F3\u30C8 -FR-Designer-BBSLogin_Forgot-Password=\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5FD8\u308C\u305F +FR-Designer-BBSLogin_Forgot-Password=\u30D1\u30B9\u30EF\u30FC\u30C9\u5FD8\u308C\u305F FR-Designer-BBSLogin_Login=\u30ED\u30B0\u30A4\u30F3 -FR-Designer-BBSLogin_Login-Failure-Tip=\u30E6\u30FC\u30B6\u30FC\u540D\u307E\u305F\u306F\u30D1\u30B9\u30EF\u30FC\u30C9\u30A8\u30E9\u30FC\u3067\u3059\u3002\u518D\u5EA6\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u304F\u3060\u3055\u3044 +FR-Designer-BBSLogin_Login-Failure-Tip=\u30E6\u30FC\u30B6\u30FCID\u3084\u30D1\u30B9\u30EF\u30FC\u30C9\u30A8\u30E9\u30FC\u3001\u518D\u30ED\u30B0\u30A4\u30F3\u4E0B\u3055\u3044 FR-Designer-BBSLogin_Password=\u30D1\u30B9\u30EF\u30FC\u30C9 -FR-Designer-BBSLogin_Password-Empty-Tip=\u30D1\u30B9\u30EF\u30FC\u30C9\u306F\u7A7A\u6B04\u306B\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093 +FR-Designer-BBSLogin_Password-Empty-Tip=\u30D1\u30B9\u30EF\u30FC\u30C9\u306F\u7A7A\u6B04\u306B\u3067\u304D\u307E\u305B\u3093 FR-Designer-BBSLogin_Register-Account=\u30A2\u30AB\u30A6\u30F3\u30C8\u767B\u9332 -FR-Designer-BBSLogin_Switch-Account=\u30A2\u30AB\u30A6\u30F3\u30C8\u5207\u308A\u66FF\u3048 -FR-Designer-BBSLogin_Privite-Message=\u30D7\u30E9\u30A4\u30D9\u30FC\u30C8\u30E1\u30C3\u30BB\u30FC\u30B8 -FR-Designer-BBSLogin_Times=\u6B21 -FR-Designer-BBSLogin_Username-Empty-Tip=\u30E6\u30FC\u30B6\u30FC\u540D\u306F\u7A7A\u6B04\u306B\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093 -FR-Designer-Basic_More_Color=\u3082\u3063\u3068\u8272 -FR-Designer-Estate_Any=\u4E0D\u9650 +FR-Designer-BBSLogin_Switch-Account=\u30A2\u30AB\u30A6\u30F3\u30C8\u3092\u5207\u308A\u66FF\u3048 +FR-Designer-BBSLogin_Privite-Message=\u500B\u4EBA\u30E1\u30C3\u30BB\u30FC\u30B8 +FR-Designer-BBSLogin_Times=\u56DE +FR-Designer-BBSLogin_Username-Empty-Tip=\u30E6\u30FC\u30B6\u30FCID\u306F\u7A7A\u306B\u3067\u304D\u307E\u305B\u3093 +FR-Designer-Basic_More_Color=\u305D\u306E\u4ED6\uFF08\u8272\uFF09 +FR-Designer-Estate_Any=\u5236\u9650\u306A\u3057 FR-Designer-Estate_Default_Font=\u30C7\u30D5\u30A9\u30EB\u30C8\u30D5\u30A9\u30F3\u30C8 -FR-Designer-Estate_Default_Null=\u30C7\u30D5\u30A9\u30EB\u30C8\u3092\u7A7A\u6B04\u306B\u3059\u308B +FR-Designer-Estate_Default_Null=\u30C7\u30D5\u30A9\u30EB\u30C8\u306F\u7A7A FR-Designer-Estate_Default_Text=\u30C7\u30D5\u30A9\u30EB\u30C8\u5024 -FR-Designer-Estate_Parameter_Null_Text=\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u3092\u7A7A\u6B04\u306B\u3057\u8868\u793A\u3059\u308B -FR-Designer-Estate_Radio-Group=\u4E0D\u52D5\u7523\u696D\u901A\u7528\u30DC\u30BF\u30F3\u30BB\u30C3\u30C8\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB -FR-Designer-Estate_Selected_Font=\u9078\u629E\u3057\u305F\u30D5\u30A9\u30F3\u30C8 -FR-Designer-Estate_Widget_Value=\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u5024 -FR-Designer-Layout_Adaptive_Layout=\u81EA\u9069\u5FDC\u914D\u7F6E +FR-Designer-Estate_Parameter_Null_Text=\u30D1\u30E9\u30E1\u30FC\u30BF\u304C\u7A7A\u306B\u306A\u308B\u6642\u306E\u8868\u793A\u306F +FR-Designer-Estate_Radio-Group=\u4E0D\u52D5\u7523\u696D\u6C4E\u7528\u30E9\u30B8\u30AA\u30DC\u30BF\u30F3\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8 +FR-Designer-Estate_Selected_Font=\u30D5\u30A9\u30F3\u30C8\u3092\u9078\u629E +FR-Designer-Estate_Widget_Value=\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u5024 +FR-Designer-Layout_Adaptive_Layout=\u81EA\u5DF1\u8ABF\u6574\u30EC\u30A4\u30A2\u30A6\u30C8 FR-Designer-Output_Background_Set=\u80CC\u666F\u8A2D\u5B9A FR-Designer-Output_Default_Background=\u30C7\u30D5\u30A9\u30EB\u30C8\u80CC\u666F -FR-Designer-Output_Excel_Page=Excel\u30A2\u30A6\u30C8\u30D7\u30C3\u30C8(\u30DA\u30FC\u30B8\u5225\u30A2\u30A6\u30C8\u30D7\u30C3\u30C8) -FR-Designer-Output_Excel_Sheet=Excel\u30A2\u30A6\u30C8\u30D7\u30C3\u30C8(\u30DA\u30FC\u30B8\u5225\u30B7\u30FC\u30C8\u5225\u30A2\u30A6\u30C8\u30D7\u30C3\u30C8) -FR-Designer-Output_Excel_Simple=Excel\u30A2\u30A6\u30C8\u30D7\u30C3\u30C8(\u5143\u306E\u307E\u307E\u30A2\u30A6\u30C8\u30D7\u30C3\u30C8) -FR-Designer-Plugin_PluginMarket_Coding=\u30D7\u30E9\u30B0\u30A4\u30F3\u30DE\u30FC\u30B1\u30C3\u30C8\u306F\u958B\u767A\u4E2D\u3067\u3059\u3002\u3054\u671F\u5F85\u304F\u3060\u3055\u3044 -FR-Desinger-Plugin_Updater_UpdateAndUpgrade=\u66F4\u65B0\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8 -FR-Desinger-Plugin_Updater_Checking_Jar_Update=Jar\u30D1\u30C3\u30B1\u30FC\u30B8\u30C1\u30A7\u30C3\u30AF\u66F4\u65B0\u4E2D -FR-Desinger-Plugin_Updater_Checking_Version_Update=\u30D0\u30FC\u30B8\u30E7\u30F3\u30C1\u30A7\u30C3\u30AF\u66F4\u65B0\u4E2D -FR-Desinger-Plugin_Updater_Update=\u66F4\u65B0 -FR-Desinger-Plugin_Updater_Upgrade=\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8 -FR-Desinger-Plugin_Updater_Restore=\u5FA9\u5143 -FR-Desinger-Plugin_Updater_New_Version_Available=\u65B0\u30D0\u30FC\u30B8\u30E7\u30F3\u6709\u308A -FR-Desinger-Plugin_Updater_JarUpdate=Jar\u30D1\u30C3\u30B1\u30FC\u30B8\u66F4\u65B0 -FR-Desinger-Plugin_Updater_VersionUpgrade=\u30D0\u30FC\u30B8\u30E7\u30F3\u30A2\u30C3\u30D7 -FR-Desinger-Plugin_Updater_Previous_Version=\u65E7\u30D0\u30FC\u30B8\u30E7\u30F3\u307E\u3067\u306B -FR-Desinger-Plugin_Updater_Current_Version=\u73FE\u30D0\u30FC\u30B8\u30E7\u30F3 -FR-Desinger-Plugin_Updater_Not_Install_Version=\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u30D0\u30FC\u30B8\u30E7\u30F3\u3067\u306F\u306A\u3044 +FR-Designer-Output_Excel_Page=Excel\u51FA\u529B(\u30DA\u30FC\u30B8\u5225) +FR-Designer-Output_Excel_Sheet=Excel\u51FA\u529B(\u30DA\u30FC\u30B8\u5225\u30B7\u30FC\u30C8\u5225) +FR-Designer-Output_Excel_Simple=Excel\u51FA\u529B(\u5143\u306E\u307E\u307E) +FR-Designer-Plugin_PluginMarket_Coding=\u30D7\u30E9\u30B0\u30A4\u30F3\u30B9\u30C8\u30A2\u958B\u767A\u4E2D\u3001\u304A\u5F85\u3061\u4E0B\u3055\u3044 +FR-Desinger-Plugin_Updater_UpdateAndUpgrade=\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u30A2\u30C3\u30D7\u30B0\u30EC\u30FC\u30C8 +FR-Desinger-Plugin_Updater_Checking_Jar_Update=Jar\u30D5\u30A1\u30A4\u30EB\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u691C\u8A3C\u4E2D +FR-Desinger-Plugin_Updater_Checking_Version_Update=\u30D1\u30FC\u30B8\u30E7\u30F3\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u691C\u8A3C\u4E2D +FR-Desinger-Plugin_Updater_Update=\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8 +FR-Desinger-Plugin_Updater_Upgrade=\u30A2\u30C3\u30D7\u30B0\u30EC\u30FC\u30C9 +FR-Desinger-Plugin_Updater_Restore=\u30EA\u30AB\u30D0\u30EA +FR-Desinger-Plugin_Updater_New_Version_Available=\u65B0\u3057\u3044\u30D0\u30FC\u30B8\u30E7\u30F3\u304C\u3042\u308A\u307E\u3059 +FR-Desinger-Plugin_Updater_JarUpdate=Jar\u30D5\u30A1\u30A4\u30EB\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8 +FR-Desinger-Plugin_Updater_VersionUpgrade=\u30D0\u30FC\u30B8\u30E7\u30F3\u30A2\u30C3\u30D7\u30B0\u30EC\u30FC\u30C8 +FR-Desinger-Plugin_Updater_Previous_Version=\u4EE5\u524D\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3078? +FR-Desinger-Plugin_Updater_Current_Version=\u73FE\u5728\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\uFF1A +FR-Desinger-Plugin_Updater_Not_Install_Version=\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u7528\u30D0\u30FC\u30B8\u30E7\u30F3\u3067\u306F\u3042\u308A\u307E\u305B\u3093 FR-Desinger-Plugin_Updater_Latest_Version=\u6700\u65B0\u30D0\u30FC\u30B8\u30E7\u30F3 -FR-Desinger-Plugin_Updater_Jar_Downloading=Jar\u30D1\u30C3\u30B1\u30FC\u30B8\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u5B8C\u6210\u5F85\u3061 -FR-Desinger-Plugin_Updater_Version_Downloading=\u30D0\u30FC\u30B8\u30E7\u30F3\u30A2\u30C3\u30D7\u30D1\u30C3\u30B1\u30FC\u30B8\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u5B8C\u6210\u5F85\u3061 -FR-Desinger-Plugin_Updater_Restart_Designer=\u30C7\u30B6\u30A4\u30CA\u30FC\u518D\u8D77\u52D5 -FR-Desinger-Plugin_Updater_Connect_VersionUpdateServer_Failed=\u30D0\u30FC\u30B8\u30E7\u30F3\u66F4\u65B0\u30B5\u30FC\u30D0\u30FC\u63A5\u7D9A\u3067\u304D\u306A\u3044 -FR-Desinger-Plugin_Updater_Connect_VersionUpgradeServer_Failed=\u30D0\u30FC\u30B8\u30E7\u30F3\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u30B5\u30FC\u30D0\u30FC\u63A5\u7D9A\u3067\u304D\u306A\u3044 -FR-Desinger-Plugin_Updater_Already_Latest_Version=\u65E2\u306B\u6700\u65B0\u30D0\u30FC\u30B8\u30E7\u30F3 -FR-Desinger-Plugin_Updater_Backup_OldJar_To=\u65E7Jar\u30D1\u30C3\u30B1\u30FC\u30B8\u306F\u65E2\u306B\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7 -FR-Desinger-Plugin_Updater_Backup_OldVersion_To=\u65E7\u30D0\u30FC\u30B8\u30E7\u30F3\u30D1\u30C3\u30B1\u30FC\u30B8\u306F\u65E2\u306B\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7 -FR-Desinger-Plugin_Updater_Please_Restart=\u30C7\u30B6\u30A4\u30CA\u30FC\u306F\u518D\u8D77\u52D5\u3057\u3066\u304F\u3060\u3055\u3044 -FR-Desinger-Plugin_Updater_Jar_Restore=\u65E7Jar\u30D1\u30C3\u30B1\u30FC\u30B8\u5FA9\u5143 -FR-Desinger-Plugin_Updater_Version_Restore=\u30D0\u30FC\u30B8\u30E7\u30F3\u5FA9\u5143 -FR-Desinger-Plugin_Updater_Restore_To=\u5FA9\u5143 -FR-Desinger-Plugin_Updater_WorksAfterRestart=\u30D0\u30FC\u30B8\u30E7\u30F3\u306F\u518D\u8D77\u52D5\u5F8C\u306B\u6709\u52B9\u3059\u308B +FR-Desinger-Plugin_Updater_Jar_Downloading=Jar\u30D5\u30A1\u30A4\u30EB\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u7D42\u4E86\u3092\u5F85\u3063\u3066\u3044\u308B +FR-Desinger-Plugin_Updater_Version_Downloading=\u30A2\u30C3\u30D7\u30B0\u30EC\u30FC\u30C8\u30D1\u30C3\u30B1\u30FC\u30B8\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u3092\u5F85\u3063\u3066\u3044\u308B +FR-Desinger-Plugin_Updater_Restart_Designer=\u30C7\u30B6\u30A4\u30CA\u30FC\u3092\u518D\u8D77\u52D5 +FR-Desinger-Plugin_Updater_Connect_VersionUpdateServer_Failed=\u30D0\u30FC\u30B8\u30E7\u30F3\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u30B5\u30FC\u30D0\u306B\u63A5\u7D9A\u3067\u304D\u306A\u3044 +FR-Desinger-Plugin_Updater_Connect_VersionUpgradeServer_Failed=\u30D0\u30FC\u30B8\u30E7\u30F3\u30A2\u30C3\u30D7\u30B0\u30EC\u30FC\u30C8\u30B5\u30FC\u30D0\u306B\u63A5\u7D9A\u3067\u304D\u306A\u3044 +FR-Desinger-Plugin_Updater_Already_Latest_Version=\u6700\u65B0\u30D0\u30FC\u30B8\u30E7\u30F3\u306B\u306A\u308A\u307E\u3057\u305F +FR-Desinger-Plugin_Updater_Backup_OldJar_To=\u53E4\u3044Jar\u30D5\u30A1\u30A4\u30EB\u3092\u4E0B\u8A18\u306B\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u3057\u307E\u3057\u305F\uFF1A +FR-Desinger-Plugin_Updater_Backup_OldVersion_To=\u53E4\u3044\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u4E0B\u8A18\u306B\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u3057\u307E\u3057\u305F\uFF1A +FR-Desinger-Plugin_Updater_Please_Restart=\u3001\u30C7\u30B6\u30A4\u30CA\u30FC\u3092\u518D\u8D77\u52D5\u3057\u3066\u4E0B\u3055\u3044 +FR-Desinger-Plugin_Updater_Jar_Restore=Jar\u30D5\u30A1\u30A4\u30EB\u30EA\u30AB\u30D0\u30EA +FR-Desinger-Plugin_Updater_Version_Restore=\u30D0\u30FC\u30B8\u30E7\u30F3\u30EA\u30AB\u30D0\u30EA +FR-Desinger-Plugin_Updater_Restore_To=\u30EA\u30AB\u30D0\u30EA +FR-Desinger-Plugin_Updater_WorksAfterRestart=\u30D0\u30FC\u30B8\u30E7\u30F3\u3001\u518D\u8D77\u52D5\u5F8C\u6709\u52B9\u306B\u306A\u308A\u307E\u3059 FR-Designer-Submit_Condition=\u6761\u4EF6 -FR-Designer-Widget-Title_border=\u30D5\u30EC\u30FC\u30E0 +FR-Designer-Widget-Title_border=\u67A0 FR-Designer-Widget-Title_border_color=\u8272 FR-Designer_AbsoluteLayout=\u7D76\u5BFE\u30EC\u30A4\u30A2\u30A6\u30C8 -FR-Designer_Allow_Decimals=\u5C0F\u6570\u3092\u8A31\u53EF -FR-Designer_Allow_Negative=\u30DE\u30A4\u30CA\u30B9\u5024\u3092\u8A31\u53EF -FR-Designer_Background-Click=\u30DE\u30A6\u30B9\u30AF\u30EA\u30C3\u30AF\u80CC\u666F +FR-Designer_Allow_Decimals=\u5C0F\u6570\u306E\u8A31\u53EF +FR-Designer_Allow_Negative=\u8CA0\u5024\u306E\u8A31\u53EF +FR-Designer_Background-Click=\u30DE\u30A6\u30B9\u30AF\u30EA\u30C3\u30AF\u6642\u80CC\u666F FR-Designer_Background-Initial=\u521D\u671F\u80CC\u666F -FR-Designer_Background-Over=\u30DE\u30A6\u30B9\u30D5\u30ED\u30FC\u30C8\u80CC\u666F -FR-Designer_Bar-Code-Exception-Tip=\u30C7\u30FC\u30BF\u306F\u7A7A\u6B04\u306B\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093 -FR-Designer_Block-intersect=\u30E2\u30B8\u30E5\u30FC\u30EB\u3068\u30E2\u30B8\u30E5\u30FC\u30EB\u9593\u3092\u91CD\u306D\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093 +FR-Designer_Background-Over=\u30DE\u30A6\u30B9\u30AA\u30FC\u30D0\u30FC\u6642\u80CC\u666F +FR-Designer_Bar-Code-Exception-Tip=\u30C7\u30FC\u30BF\u306F\u7A7A\u306B\u3067\u304D\u307E\u305B\u3093 +FR-Designer_Block-intersect=\u30D6\u30ED\u30C3\u30AF\u3068\u30D6\u30EB\u30C3\u30AF\u9593\u306E\u91CD\u306A\u308A\u7981\u6B62 FR-Designer_BorderLayout=\u30DC\u30FC\u30C0\u30FC\u30EC\u30A4\u30A2\u30A6\u30C8 FR-Designer_Button-Hotkeys=\u30B7\u30E7\u30FC\u30C8\u30AB\u30C3\u30C8\u30AD\u30FC FR-Designer_Button-Icon=\u30DC\u30BF\u30F3\u30A2\u30A4\u30B3\u30F3 -FR-Designer_Button-Name=\u30DC\u30BF\u30F3\u540D\u79F0 +FR-Designer_Button-Name=\u30DC\u30BF\u30F3\u540D FR-Designer_Button-Type=\u30DC\u30BF\u30F3\u30BF\u30A4\u30D7 -FR-Designer_CardLayout=Tab\u914D\u7F6E +FR-Designer_CardLayout=Tab\u30EC\u30A4\u30A2\u30A6\u30C8 FR-Designer_Cell=\u30BB\u30EB -FR-Designer_Chart_Cell=\u30B0\u30E9\u30D5\u30CF\u30A4\u30D1\u30FC\u30EA\u30F3\u30AF-\u9023\u52D5\u30BB\u30EB -FR-Designer_Chart_Float=\u30B0\u30E9\u30D5\u30CF\u30A4\u30D1\u30FC\u30EA\u30F3\u30AF-\u9023\u52D5\u30D5\u30ED\u30FC\u8981\u7D20 -FR-Designer_Chart_Float_chart=\u30B0\u30E9\u30D5\u30CF\u30A4\u30D1\u30FC\u30EA\u30F3\u30AF-\u30D5\u30ED\u30FC\u7A93\u30B0\u30E9\u30D5 -FR-Designer_Check-for-Updates=\u66F4\u65B0\u3092\u78BA\u8A8D -FR-Designer_Choose-Data-Confusion-Tip=\ \u6DF7\u4EA4\u3059\u308B\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u9078\u629E\u5F8C\u30D7\u30EC\u30D3\u30E5\u30FC\u3057\u3066\u304F\u3060\u3055\u3044 -FR-Designer_Close=\u30AF\u30ED\u30FC\u30BA +FR-Designer_Chart_Cell=\u30B0\u30E9\u30D5\u30CF\u30A4\u30D1\u30FC\u30EA\u30F3\u30AF-\u30BB\u30EB\u9023\u52D5 +FR-Designer_Chart_Float=\u30B0\u30E9\u30D5\u30CF\u30A4\u30D1\u30FC\u30EA\u30F3\u30AF-\u30D5\u30ED\u30FC\u30C6\u30A3\u30F3\u30B0\u8981\u7D20\u9023\u52D5 +FR-Designer_Chart_Float_chart=\u30B0\u30E9\u30D5\u30CF\u30A4\u30D1\u30FC\u30EA\u30F3\u30AF-\u30D5\u30ED\u30FC\u30C6\u30A3\u30F3\u30B0\u30A6\u30A3\u30F3\u30C9\u30A6\u30B0\u30E9\u30D5 +FR-Designer_Check-for-Updates=\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u3092\u78BA\u8A8D +FR-Designer_Choose-Data-Confusion-Tip=\ \u6DF7\u4E71\u3055\u305B\u308B\u3079\u304D\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u9078\u629E\u3057\u3066\u30D7\u30EC\u30D3\u30E5\u30FC\u4E0B\u3055\u3044 +FR-Designer_Close=\u9589\u3058\u308B FR-Designer_Column=\u5217 -FR-Designer_Column_Measure=\u5217\u8EF8/\u5EA6\u91CF\u5024 +FR-Designer_Column_Measure=\u5217\u8EF8/\u30E1\u30C8\u30EA\u30C3\u30AF FR-Designer_Condition_Attributes=\u6761\u4EF6\u5C5E\u6027 -FR-Designer_Confusion-Col-Name=\u30D5\u30A3\u30FC\u30EB\u30C9\u540D\u79F0 -FR-Designer_Confusion-key=\u6DF7\u4EA4\u3059\u308B\u30AD\u30FC\u30EF\u30FC\u30C9 -FR-Designer_Currency_Line=\u91D1\u984D\u7DDA -FR-Designer_Current_tab=\u73FE\u5728\u306E\u7DE8\u96C6tab -FR-Designer_Custom=\u30AB\u30B9\u30BF\u30DE\u30A4\u30BA -FR-Designer_Custom-Angle=\u30AB\u30B9\u30BF\u30DE\u30A4\u30BA\u89D2\u5EA6 -FR-Designer_DS-Dictionary=\u30C7\u30FC\u30BF\u5B57\u5178 -FR-Designer_Data-confusion=\u30C7\u30FC\u30BF\u6DF7\u4EA4 +FR-Designer_Confusion-Col-Name=\u30D5\u30A3\u30FC\u30EB\u30C9\u540D +FR-Designer_Confusion-key=\u30AD\u30FC\u30EF\u30FC\u30C9\u3092\u6DF7\u4E71\u3055\u305B\u308B +FR-Designer_Currency_Line=\u6841\u533A\u5207\u308A\u7DDA +FR-Designer_Current_tab=tab\u7DE8\u96C6\u4E2D +FR-Designer_Custom=\u30AB\u30B9\u30BF\u30E0 +FR-Designer_Custom-Angle=\u30AB\u30B9\u30BF\u30E0\u89D2\u5EA6 +FR-Designer_DS-Dictionary=\u30C7\u30FC\u30BF\u8F9E\u66F8 +FR-Designer_Data-confusion=\u30C7\u30FC\u30BF\u6DF7\u4E71 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_Edit_Button_ToolBar=\u30DC\u30BF\u30F3\u306B\u3042\u308B\u30C4\u30FC\u30EB\u6B04\u7DE8\u96C6 -FR-Designer_Email=\u30E1\u30FC\u30EB +FR-Designer_Double_Click_Edit_OR_Clear=\u30C0\u30D6\u30EB\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u7DE8\u96C6\u3084\u30AF\u30EA\u30A2\u3092\u884C\u3046 +FR-Designer_Edit_Button_ToolBar=\u30DC\u30BF\u30F3\u306E\u30C4\u30FC\u30EB\u30D0\u30FC\u3092\u7DE8\u96C6 +FR-Designer_Email=E\u30E1\u30FC\u30EB FR-Designer_Enabled=\u4F7F\u7528\u53EF\u80FD -FR-Designer_End-Date=\u7D42\u4E86\u65E5\u671F -FR-Designer_ExportAndOutput=\u30A2\u30A6\u30C8\u30D7\u30C3\u30C8 +FR-Designer_End-Date=\u7D42\u4E86\u65E5 +FR-Designer_ExportAndOutput=\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8 FR-Designer_FRFont=\u30D5\u30A9\u30F3\u30C8 -FR-Designer_FS_Close_Other_Templates=\u305D\u306E\u4ED6\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u3092\u9589\u3058\u308B +FR-Designer_FS_Close_Other_Templates=\u4ED6\u306E\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u3092\u9589\u3058\u308B FR-Designer_File=\u30D5\u30A1\u30A4\u30EB -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_Fit-App=App\u81EA\u9069\u5FDC -FR-Designer_Fit=\u81EA\u9069\u5FDC -FR-Designer_Font-Family=\u30D5\u30A9\u30F3\u30C8\u540D\u79F0 -FR-Designer_Font-Size=\u30D5\u30A9\u30F3\u30C8\u5927\u5C0F -FR-Designer_Forbid_Drag_into_Adapt_Pane=\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306F\u30D5\u30A9\u30FC\u30E0\u672C\u6587\u3092\u30C9\u30E9\u30C3\u30B0\u3059\u308B\u3053\u3068\u306F\u8A31\u3055\u308C\u306A\u3044 -FR-Designer_Forbid_Drag_into_Para_Pane=\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306F\u3001\u30D1\u30E9\u30E1\u30FC\u30BF\u30D1\u30CD\u30EB\u306B\u30C9\u30E9\u30C3\u30B0\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093 +FR-Designer_Filter_Conditions=\u30D5\u30A3\u30EB\u30BF\u6761\u4EF6 +FR-Designer_Finish-Modify-Share=\u4FEE\u6B63\u3092\u7D42\u4E86\u3055\u305B\u3066\u5171\u6709 +FR-Designer_Fit-App=\u30A2\u30D7\u30EA\u81EA\u5DF1\u8ABF\u6574 +FR-Designer_Fit=\u81EA\u5DF1\u8ABF\u6574 +FR-Designer_Font-Family=\u30D5\u30A9\u30F3\u30C8\u540D +FR-Designer_Font-Size=\u30D5\u30A9\u30F3\u30C8\u30B5\u30A4\u30BA +FR-Designer_Forbid_Drag_into_Adapt_Pane=\u5F53\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u4E3B\u4F53\u306B\u30C9\u30E9\u30C3\u30B0\u3057\u3066\u306F\u306A\u3089\u306A\u3044 +FR-Designer_Forbid_Drag_into_Para_Pane=\u5F53\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u30D1\u30E9\u30E1\u30FC\u30BF\u30D1\u30CD\u30EB\u306B\u30C9\u30E9\u30C3\u30B0\u3067\u304D\u307E\u305B\u3093 FR-Designer_Foreground=\u8272 -FR-Designer_Form-AuthorityEdited_Cannot_be_Supported=\u8868\u306E\u6A29\u9650\u7DE8\u96C6\u306B\u30B5\u30DD\u30FC\u30C8\u3057\u3066\u3044\u307E\u305B\u3093 -FR-Designer_Form-Report=\u5E33\u7968\u30E2\u30B8\u30E5\u30FC\u30EB -FR-Designer_Form_EmbeddedTD=\u8868(\u5185\u8535\u30C7\u30FC\u30BF) -FR-Designer_Form_Module=\u8868\u30E2\u30B8\u30E5\u30FC\u30EB +FR-Designer_Form-AuthorityEdited_Cannot_be_Supported=\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u6A29\u9650\u7DE8\u96C6\u306F\u73FE\u6642\u70B9\u3067\u306F\u30B5\u30DD\u30FC\u30C8\u3057\u3066\u3044\u307E\u305B\u3093 +FR-Designer_Form-Report=\u5E33\u7968\u30D6\u30ED\u30C3\u30AF +FR-Designer_Form_EmbeddedTD=\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9(\u7D44\u307F\u8FBC\u307F\u30C7\u30FC\u30BF) +FR-Designer_Form_Module=\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u30E2\u30B8\u30E5\u30FC\u30EB FR-Designer_Format_explan=\u66F8\u5F0F\u8AAC\u660E -FR-Designer_Formula=\u516C\u5F0F -FR-Designer_Forum=BBS +FR-Designer_Formula=\u6570\u5F0F +FR-Designer_Forum=\u30D5\u30A9\u30FC\u30E9\u30E0 FR-Designer_Get-Cube=cube\u53D6\u5F97\u4E2D FR-Designer_Help=\u30D8\u30EB\u30D7 -FR-Designer_Hide=\u96A0\u3059 -FR-Designer_Hyperlink=\u30B9\u30FC\u30D1\u30FC\u30EA\u30F3\u30AF -FR-Designer_Hyperlink-Form_link=\u73FE\u5728\u306E\u8868\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8 +FR-Designer_Hide=\u975E\u8868\u793A +FR-Designer_Hyperlink=\u30CF\u30A4\u30D1\u30FC\u30EA\u30F3\u30AF +FR-Designer_Hyperlink-Form_link=\u73FE\u5728\u306E\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8 FR-Designer_IDCard=\u8EAB\u5206\u8A3C\u660E\u66F8 FR-Designer_Icon=\u30A2\u30A4\u30B3\u30F3 FR-Designer_Index=\u5217\u8EF8/\u6307\u6A19 -FR-Designer_Input_Rule=\u30EB\u30FC\u30EB\u8A18\u5165 +FR-Designer_Input_Rule=\u5165\u529B\u898F\u5247 FR-Designer_Language_Default=\u30C7\u30D5\u30A9\u30EB\u30C8 -FR-Designer_Layout=\u914D\u7F6E -FR-Designer_Layout-HBox=\u6C34\u5E73\u30B1\u30FC\u30B9\u914D\u7F6E -FR-Designer_Layout-Index=\u7D22\u5F15 -FR-Designer_Layout_Constraints=\u4F4D\u7F6E\u3068\u5927\u5C0F +FR-Designer_Layout=\u30EC\u30A4\u30A2\u30A6\u30C8 +FR-Designer_Layout-HBox=\u6C34\u5E73\u30DC\u30C3\u30AF\u30B9\u306E\u30EC\u30A4\u30A2\u30A6\u30C8 +FR-Designer_Layout-Index=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9 +FR-Designer_Layout_Constraints=\u4F4D\u7F6E\u3068\u30B5\u30A4\u30BA FR-Designer_Length=\u9577\u3055 -FR-Designer_Loading_Data=\u30C7\u30FC\u30BF\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3057\u3066\u3044\u307E\u3059 -FR-Designer_M-Exit=\u9000\u51FA +FR-Designer_Loading_Data=\u30C7\u30FC\u30BF\u30ED\u30FC\u30C9\u4E2D +FR-Designer_M-Exit=\u7D42\u4E86 FR-Designer_M-Help=\u30D8\u30EB\u30D7 FR-Designer_M-Insert=\u633F\u5165 -FR-Designer_M-Repeat-Freeze=\u91CD\u8907\u3068\u30D5\u30EA\u30FC\u30BA\u8A2D\u5B9A -FR-Designer_M-Server=\u30B5\u30FC\u30D0\u30FC -FR-Designer_M-SwitchWorkspace=\u4F5C\u696D\u76EE\u6B21\u5207\u308A\u66FF\u3048 +FR-Designer_M-Repeat-Freeze=\u7E70\u308A\u8FD4\u3057\u3068\u56FA\u5B9A\u306E\u8A2D\u5B9A +FR-Designer_M-Server=\u30B5\u30FC\u30D0 +FR-Designer_M-SwitchWorkspace=\u4F5C\u696D\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u5207\u308A\u66FF\u3048 FR-Designer_M-Template=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8 -FR-Designer_MDX_Explain=\u6587\u6CD5\u66F8\u5F0F\u306FMDX\u6587\u6CD5\u3092\u53C2\u8003\u3002\n\u4F8B\u3048\u3070\uFF1A\nWITH\nMEMBER [Measures].[Special Discount] AS\n[Measures].[Discount Amount] * 1.5\nSELECT\n[Measures].[Special Discount] on COLUMNS,\nNON EMPTY [Product].[Product].MEMBERS ON Rows\nFROM [Adventure Works]\nWHERE [Product].[Category].[Bikes]\n\u6CE8\uFF1ACOLUMNS\u3001ROWS\u306F0\u30011\u3092\u4F7F\u7528\u3057\u3066\u4EE3\u66FF\u53EF\u80FD\u3067\u3059\u3002\u30AF\u30A8\u30EA\u8EF8\u306F\u4E8C\u3064\u306E\u8EF8\u623B\u3057\u306B\u306E\u307F\u30B5\u30DD\u30FC\u30C8\u3057\u307E\u3059\u3002 +FR-Designer_MDX_Explain=\u6587\u6CD5\u66F8\u5F0F\u306FMDX\u6587\u6CD5\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002\n\u4F8B\:\nWITH\nMEMBER [Measures].[Special Discount] AS\n[Measures].[Discount Amount] * 1.5\nSELECT\n[Measures].[Special Discount] on COLUMNS,\nNON EMPTY [Product].[Product].MEMBERS ON Rows\nFROM [Adventure Works]\nWHERE [Product].[Category].[Bikes]\n\u6CE8\uFF1ACOLUMNS\u3001ROWS\u30011\u3067\u53D6\u308A\u63DB\u3048\u308B\u3053\u3068\u304C\u3067\u304D\u3001\u691C\u7D22\u8EF8\u306F2\u8EF8\u306E\u623B\u308A\u3057\u304B\u30B5\u30DD\u30FC\u30C8\u3057\u3066\u3044\u307E\u305B\u3093\u3002 FR-Designer_M_Help-About_Software=\u30BD\u30D5\u30C8\u30A6\u30A7\u30A2\u306B\u3064\u3044\u3066 FR-Designer_M_Help-Tutorial=\u30D8\u30EB\u30D7\u30C1\u30E5\u30FC\u30C8\u30EA\u30A2\u30EB FR-Designer_Max_Value=\u6700\u5927\u5024 FR-Designer_Min_Value=\u6700\u5C0F\u5024 -FR-Designer_MobilePhone=\u643A\u5E2F\u96FB\u8A71 -FR-Designer_New_Value=\u65B0\u5024 +FR-Designer_MobilePhone=\u30B9\u30DE\u30FC\u30C8\u30D5\u30A9\u30F3 +FR-Designer_New_Value=\u65B0\u3057\u3044\u5024 FR-Designer_None=\u7121\u3057 -FR-Designer_PaperSize-Mobile=\u643A\u5E2F\u96FB\u8A71 -FR-Designer_PaperSize-Mobile-Large=\u643A\u5E2F\u96FB\u8A71\u5927\u30B9\u30AF\u30EA\u30FC\u30F3 -FR-Designer_PaperSize-Mobile-Small=\u643A\u5E2F\u96FB\u8A71\u5C0F\u30B9\u30AF\u30EA\u30FC\u30F3 -FR-Designer_Para-Body=\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u753B\u9762 -FR-Designer_Parameters=\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC +FR-Designer_PaperSize-Mobile=\u30B9\u30DE\u30FC\u30C8\u30D5\u30A9\u30F3 +FR-Designer_PaperSize-Mobile-Large=\u643A\u5E2F\u5927\u753B\u9762 +FR-Designer_PaperSize-Mobile-Small=\u643A\u5E2F\u5C0F\u753B\u9762 +FR-Designer_Para-Body=\u30D1\u30E9\u30E1\u30FC\u30BF\u30D1\u30CD\u30EB +FR-Designer_Parameters=\u30D1\u30E9\u30E1\u30FC\u30BF FR-Designer_Phone=\u96FB\u8A71 FR-Designer_PostCode=\u90F5\u4FBF\u756A\u53F7 -FR-Designer_Present=\u30D5\u30A9\u30EB\u30E0 +FR-Designer_Present=\u5F62\u614B FR-Designer_Preview=\u30D7\u30EC\u30D3\u30E5\u30FC -FR-Designer_Preview-Data-Confusion=\u6DF7\u4EA4\u5F8C\u306E\u30C7\u30FC\u30BF\u3092\u30D7\u30EC\u30D3\u30E5\u30FC +FR-Designer_Preview-Data-Confusion=\u6DF7\u4E71\u3055\u308C\u305F\u30C7\u30FC\u30BF\u3092\u30D7\u30EC\u30D3\u30E5\u30FC FR-Designer_Product_Demo=\u88FD\u54C1\u30C7\u30E2 -FR-Designer_Query_Type=\u30AF\u30A8\u30EA\u65B9\u6CD5 +FR-Designer_Query_Type=\u30AF\u30A8\u30EA\u30BF\u30A4\u30D7 FR-Designer_Refresh=\u66F4\u65B0 -FR-Designer_Refresh_Parameter_In_SQL=SQL\u4E2D\u306E\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u3092\u66F4\u65B0\u3057\u307E\u3059\u304B -FR-Designer_Reg_Expressions=\u6B63\u5247\u8868\u73FE\u5F0F -FR-Designer_Reg_Max_Length=\u6700\u5927\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_Return-Date=\u65E5\u671F\u306B\u623B\u308B -FR-Designer_RichText=\u30EA\u30C3\u30C1\u6587\u66F8\u633F\u5165 -FR-Designer_RichTextEditor=\u30EA\u30C3\u30C1\u6587\u66F8\u30A8\u30C7\u30A3\u30BF +FR-Designer_Refresh_Parameter_In_SQL=SQL\u306E\u30D1\u30E9\u30E1\u30FC\u30BF\u3092\u66F4\u65B0\u3057\u307E\u3059\u304B +FR-Designer_Reg_Expressions=\u6B63\u898F\u8868\u73FE +FR-Designer_Reg_Max_Length=\u6700\u5927 +FR-Designer_Reg_Min_Length=\u6700\u5C0F +FR-Designer_Remove_Button_ToolBar=\u30DC\u30BF\u30F3\u306E\u30C4\u30FC\u30EB\u30D0\u30FC\u3092\u524A\u9664 +FR-Designer_ReportColumns-Columns=\u30B5\u30D6\u30D5\u30A3\u30FC\u30EB\u30C9 +FR-Designer_Return-Date=\u65E5\u4ED8\u578B\u3092\u623B\u3059 +FR-Designer_RichText=\u30EA\u30C3\u30C1\u30C6\u30AD\u30B9\u30C8 +FR-Designer_RichTextEditor=\u30EA\u30C3\u30C1\u30C6\u30AD\u30B9\u30C8\u30A8\u30C7\u30A3\u30BF FR-Designer_Row=\u884C -FR-Designer_Row_Dimension=\u884C\u8EF8/\u7DEF\u5EA6 +FR-Designer_Row_Dimension=\u884C\u8EF8/\u30C7\u30A3\u30E1\u30F3\u30B7\u30E7\u30F3 FR-Designer_Save=\u4FDD\u5B58 FR-Designer_Search=\u691C\u7D22 FR-Designer_Set=\u8A2D\u5B9A -FR-Designer_Share-Template=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u30B7\u30A7\u30A2 -FR-Designer_Simple_general=\u30B7\u30F3\u30D7\u30EB\u901A\u7528\u30AF\u30A8\u30EA +FR-Designer_Share-Template=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u5171\u6709 +FR-Designer_Simple_general=\u7C21\u6613\u4E00\u822C\u691C\u7D22 FR-Designer_Song_TypeFace=\u5B8B\u4F53 -FR-Designer_Start-Date=\u958B\u59CB\u65E5\u671F +FR-Designer_Start-Date=\u958B\u59CB\u65E5 FR-Designer_Subscript=\u4E0B\u4ED8\u304D FR-Designer_Superscript=\u4E0A\u4ED8\u304D -FR-Designer_Support_QQ=\u6280\u8853QQ +FR-Designer_Support_QQ=\u6280\u8853\u30B5\u30DD\u30FC\u30C8QQ FR-Designer_Swatch=\u30B5\u30F3\u30D7\u30EB -FR-Designer_Tab_title=tab\u30BF\u30A4\u30C8\u30EB +FR-Designer_Tab_title=\u30BF\u30D6\u30BF\u30A4\u30C8\u30EB FR-Designer_TableData=\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8 -FR-Designer_Thank_guest=\u7279\u306B\u5F53\u8A72\u30D0\u30FC\u30B8\u30E7\u30F3\u30C7\u30B6\u30A4\u30CA\u30FC\u306E\u4F7F\u3044\u3084\u3059\u3055\u306B\u3064\u3044\u3066\u8CA2\u732E\u3057\u3066\u304F\u308C\u305F\u4EE5\u4E0B\u306EBBS\u306E\u5E06\u30BD\u30D5\u30C8\u30D5\u30A1\u30F3\u306B\u611F\u8B1D\u3057\u307E\u3059 +FR-Designer_Thank_guest=\u7279\u306B\u4EE5\u4E0B\u306E\u30D5\u30A9\u30FC\u30E9\u30E0\u5E06\u85AF\u304C\u5F53\u30D0\u30FC\u30B8\u30E7\u30F3\u306E\u30C7\u30B6\u30A4\u30CA\u30FC\u306E\u4F7F\u3044\u3084\u3059\u3055\u306B\u9855\u8457\u306A\u8CA2\u732E\u306B\u611F\u8B1D FR-Designer_Thanks-To=\u611F\u8B1D FR-Designer_Title=\u30BF\u30A4\u30C8\u30EB -FR-Designer_Total=\u5168\u90E8\u3067 +FR-Designer_Total=\u5408\u8A08 FR-Designer_UnSignIn=\u672A\u30ED\u30B0\u30A4\u30F3 -FR-Designer_Underline=\u30A2\u30F3\u30C0\u30FC\u30E9\u30A4\u30F3 -FR-Designer_Used=\u6700\u8FD1\u4F7F\u7528\u3057\u305F -FR-Designer_User-defined-MDX=\u30AB\u30B9\u30BF\u30DE\u30A4\u30BAMDX\u30AF\u30A8\u30EA -FR-Designer_SampleText=\u30C6\u30AD\u30B9\u30C8\u4F8B -FR-Designer_Vertical-LeftToRight=\u6587\u5B57\u7E26\u66F8(\u5DE6\u304B\u3089\u53F3\u3078\uFF09 +FR-Designer_Underline=\u4E0B\u7DDA +FR-Designer_Used=\u6700\u8FD1\u4F7F\u7528 +FR-Designer_User-defined-MDX=\u30AB\u30B9\u30BF\u30E0MDX\u691C\u7D22 +FR-Designer_SampleText=\u30B5\u30F3\u30D7\u30EB\u30C6\u30AD\u30B9\u30C8 \u30B5\u30F3\u30D7\u30EB\u30C6\u30AD\u30B9\u30C8 +FR-Designer_Vertical-LeftToRight=\u6587\u5B57\u7E26\u66F8\u304D(\u5DE6\u304B\u3089\u53F3\u3078) FR-Designer_Vertical-RightToLeft=\u6587\u5B57\u7E26\u66F8(\u53F3\u304B\u3089\u5DE6\u3078) -FR-Designer_VerticalBoxLayout=\u5782\u76F4\u30B1\u30FC\u30B9\u914D\u7F6E -FR-Designer_Visible=\u53EF\u8996 -FR-Designer_WLayout-Border-ToolTips=\u5B8C\u74A7\u306A\u30DC\u30FC\u30C0\u30FC\u30EC\u30A4\u30A2\u30A6\u30C8\u5BB9\u5668\u306F\u6771\u897F\u5357\u5317\u4E2D\u306E\u4E94\u3064\u306E\u30E2\u30B8\u30E5\u30FC\u30EB\u304B\u3089\u69CB\u6210\u3055\u308C\u307E\u3059\u3002\\uff4e\u305D\u306E\u3046\u3061\u3001\u5357\u5317\u30E2\u30B8\u30E5\u30FC\u30EB\u306F\u5FC5\u8981\u306B\u5FDC\u3058\u3066\u9AD8\u3055\u3092\u8ABF\u6574\u3067\u304D\u3001\u6771\u897F\u30E2\u30B8\u30E5\u30FC\u30EB\u306F\u5FC5\u8981\u306B\u5FDC\u3058\u3066\u5E45\u3092\u8ABF\u6574\u3067\u304D\u307E\u3059\u3002 +FR-Designer_VerticalBoxLayout=\u5782\u76F4\u30DC\u30C3\u30AF\u30B9\u30EC\u30A4\u30A2\u30A6\u30C8 +FR-Designer_Visible=\u8868\u793A +FR-Designer_WLayout-Border-ToolTips=\u5B8C\u5168\u306A\u30DC\u30FC\u30C0\u30FC\u30EC\u30A4\u30A2\u30A6\u30C8\u30B3\u30F3\u30C6\u30CA\u306F\u3001\u6771\u3001\u5357\u3001\u897F\u3001\u5317\u3001\u4E2D\u592E\u306E5\u30D6\u30ED\u30C3\u30AF\u3088\u308A\u69CB\u6210\u3055\u308C\u307E\u3059\u3002\n\u5317\u90E8\u3068\u5357\u90E8\u3067\u306F\u9AD8\u3055\u3092\u3001\u6771\u90E8\u3068\u897F\u90E8\u3068\u3067\u306F\u5E45\u3092\u8ABF\u6574\u3067\u304D\u307E\u3059\u3002 FR-Designer_WaterMark=\u900F\u304B\u3057 FR-Designer_Widget=\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB FR-Designer_Widget-Settings=\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u8A2D\u5B9A From 5a05c497c710255d88b40bfdfc6e862658bb441f Mon Sep 17 00:00:00 2001 From: plough Date: Wed, 26 Apr 2017 09:28:21 +0800 Subject: [PATCH 300/343] =?UTF-8?q?REPORT-2343=20[=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E8=B4=A8=E9=87=8F]=20=E6=A8=A1=E6=9D=BF=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E6=94=B6=E9=9B=86=E7=94=A8xml=E6=96=B9=E5=BC=8F=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E4=B8=8E=E8=AF=BB=E5=8F=96,=20=E7=9B=B4=E6=8E=A5readO?= =?UTF-8?q?bject=E4=B8=8D=E5=A4=AA=E5=A5=BD.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../templateinfo/TemplateInfoCollector.java | 205 ++++++++++++++---- 1 file changed, 164 insertions(+), 41 deletions(-) diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java index b9b7aa194..dccff0e9c 100644 --- a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java @@ -6,32 +6,37 @@ import com.fr.design.DesignerEnvManager; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.JTemplate; import com.fr.env.RemoteEnv; -import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; -import com.fr.general.GeneralUtils; -import com.fr.general.SiteCenter; +import com.fr.general.*; import com.fr.general.http.HttpClient; +import com.fr.json.JSONArray; +import com.fr.json.JSONException; import com.fr.stable.*; -import org.json.JSONObject; +import com.fr.stable.xml.*; +import com.fr.third.javax.xml.stream.XMLStreamException; +import com.fr.json.JSONObject; import java.io.*; import java.text.SimpleDateFormat; import java.util.*; +import java.util.HashMap; +import java.util.Iterator; /** * 做模板的过程和耗时收集,辅助类 * Created by plough on 2017/2/21. */ -public class TemplateInfoCollector implements Serializable { - private static final String FILE_NAME = "tplInfo.ser"; +public class TemplateInfoCollector implements XMLReadable, XMLWriter { + private static final String FILE_NAME = "tpl.info"; private static TemplateInfoCollector instance; - private HashMap> templateInfoList; + private Map> templateInfoList; private String designerOpenDate; //设计器最近一次打开日期 private static final int VALID_CELL_COUNT = 5; // 有效报表模板的格子数 private static final int VALID_WIDGET_COUNT = 5; // 有效报表模板的控件数 private static final int COMPLETE_DAY_COUNT = 15; // 判断模板是否完成的天数 private static final int ONE_THOUSAND = 1000; static final long serialVersionUID = 2007L; + private static final String XML_DESIGNER_OPEN_DATE = "DesignerOpenDate"; + private static final String XML_TEMPLATE_INFO_LIST = "TemplateInfoList"; @SuppressWarnings("unchecked") private TemplateInfoCollector() { @@ -63,27 +68,42 @@ public class TemplateInfoCollector implements Serializable { public static TemplateInfoCollector getInstance() { if (instance == null) { - // 先尝试从文件读取 - try{ - ObjectInputStream is = new ObjectInputStream(new FileInputStream(getInfoFile())); - instance = (TemplateInfoCollector) is.readObject(); - } catch (FileNotFoundException ex) { - // 如果之前没有存储过,则创建新对象 - instance = new TemplateInfoCollector(); - } catch (InvalidClassException ex) { - // 如果 TemplateInfoCollecor 类结构有改动,则放弃之前收集的数据(下次保存时覆盖) - // 这种情况主要在开发、测试过程中遇到,正式上线后不应该出现 - FRLogger.getLogger().info(ex.getMessage()); - FRLogger.getLogger().info("use a new instance"); - instance = new TemplateInfoCollector(); - } - catch (Exception ex) { - FRLogger.getLogger().error(ex.getMessage(), ex); - } + instance = new TemplateInfoCollector(); + readXMLFile(instance, getInfoFile()); } return instance; } + private static void readXMLFile(XMLReadable xmlReadable, File xmlFile){ + if (xmlFile == null || !xmlFile.exists()) { + return; + } + String charset = EncodeConstants.ENCODING_UTF_8; + try { + String fileContent = getFileContent(xmlFile); + InputStream xmlInputStream = new ByteArrayInputStream(fileContent.getBytes(charset)); + InputStreamReader inputStreamReader = new InputStreamReader(xmlInputStream, charset); + XMLableReader xmlReader = XMLableReader.createXMLableReader(inputStreamReader); + + if (xmlReader != null) { + xmlReader.readXMLObject(xmlReadable); + } + xmlInputStream.close(); + } catch (FileNotFoundException e) { + FRContext.getLogger().error(e.getMessage()); + } catch (IOException e) { + FRContext.getLogger().error(e.getMessage()); + } catch (XMLStreamException e) { + FRContext.getLogger().error(e.getMessage()); + } + + } + + private static String getFileContent(File xmlFile) throws FileNotFoundException, UnsupportedEncodingException{ + InputStream is = new FileInputStream(xmlFile); + return IOUtils.inputStream2String(is); + } + private boolean shouldCollectInfo() { if (FRContext.getCurrentEnv() instanceof RemoteEnv) { // 远程设计不收集数据 return false; @@ -122,22 +142,40 @@ public class TemplateInfoCollector implements Serializable { */ private void saveInfo() { try { - ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(getInfoFile())); - String log = ""; - int count = 1; - for (String key : templateInfoList.keySet()) { - String createTime = ((HashMap)templateInfoList.get(key).get("consumingMap")).get("create_time").toString(); - log += (count + ". id: " + key + " " + createTime + "\n" + templateInfoList.get(key).toString() + "\n"); - count ++; - } - FRLogger.getLogger().info("writing tplInfo: \n" + log); - os.writeObject(instance); - os.close(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + XMLTools.writeOutputStreamXML(this, out); + out.flush(); + out.close(); + String fileContent = new String(out.toByteArray(), EncodeConstants.ENCODING_UTF_8); + writeContentToFile(fileContent, getInfoFile()); } catch (Exception ex) { FRLogger.getLogger().error(ex.getMessage()); } } + /** + * 将文件内容写到输出流中 + */ + private static void writeContentToFile(String fileContent, File file){ + BufferedWriter bw = null; + try { + FileOutputStream fos = new FileOutputStream(file); + OutputStreamWriter osw = new OutputStreamWriter(fos, EncodeConstants.ENCODING_UTF_8); + bw = new BufferedWriter(osw); + bw.write(fileContent); + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage()); + } finally { + if(bw != null){ + try { + bw.close(); + } catch (IOException e) { + } + } + } + + } + /** * 更新 day_count:打开设计器却未编辑模板的连续日子 */ @@ -241,10 +279,7 @@ public class TemplateInfoCollector implements Serializable { String jsonProcessMap = templateInfo.get("jsonProcessMap"); if (sendSingleTemplateInfo(consumingUrl, jsonConsumingMap) && sendSingleTemplateInfo(processUrl, jsonProcessMap)) { // 清空记录 - FRLogger.getLogger().info("successfully send " + templateInfo.get("templateID")); removeFromTemplateInfoList(templateInfo.get("templateID")); - } else { - FRLogger.getLogger().info("send template info failed, will try next time, " + templateInfo.get("templateID")); } } saveInfo(); @@ -264,7 +299,12 @@ public class TemplateInfoCollector implements Serializable { } String res = httpClient.getResponseText(); - boolean success = ComparatorUtils.equals(new JSONObject(res).get("status"), "success"); + boolean success; + try { + success = ComparatorUtils.equals(new JSONObject(res).get("status"), "success"); + } catch (Exception ex) { + success = false; + } return success; } @@ -303,7 +343,6 @@ public class TemplateInfoCollector implements Serializable { private void removeFromTemplateInfoList(String key) { templateInfoList.remove(key); - FRLogger.getLogger().info(key + " is removed..."); } @SuppressWarnings("unchecked") @@ -325,6 +364,90 @@ public class TemplateInfoCollector implements Serializable { return isTestTemplate; } + public static Map jsonToMap(JSONObject json) throws JSONException { + Map retMap = new HashMap<>(); + + if(json != JSONObject.NULL) { + retMap = toMap(json); + } + return retMap; + } + + private static Map toMap(JSONObject object) throws JSONException { + Map map = new HashMap<>(); + + Iterator keysItr = object.keys(); + while(keysItr.hasNext()) { + String key = keysItr.next(); + Object value = object.get(key); + + if(value instanceof JSONArray) { + value = toList((JSONArray) value); + } + + else if(value instanceof JSONObject) { + value = toMap((JSONObject) value); + } + map.put(key, value); + } + return map; + } + + private static List toList(JSONArray array) throws JSONException { + List list = new ArrayList<>(); + for(int i = 0; i < array.length(); i++) { + Object value = array.get(i); + if(value instanceof JSONArray) { + value = toList((JSONArray) value); + } + + else if(value instanceof JSONObject) { + value = toMap((JSONObject) value); + } + list.add(value); + } + return list; + } + + @SuppressWarnings("unchecked") + @Override + public void readXML(XMLableReader reader) { + if (reader.isChildNode()) { + try { + String name = reader.getTagName(); + if (XML_DESIGNER_OPEN_DATE.equals(name)) { + this.designerOpenDate = reader.getElementValue(); + } else if(XML_TEMPLATE_INFO_LIST.equals(name)){ + JSONObject jsonObject = new JSONObject(reader.getElementValue()); + Map map = jsonToMap(jsonObject); + for (Map.Entry entry : map.entrySet()) { + if (entry.getValue() instanceof HashMap) { + this.templateInfoList.put(entry.getKey(), (HashMap) entry.getValue()); + } + } + } + } catch (Exception ex) { + // 什么也不做,使用默认值 + } + } + } + + @Override + public void writeXML(XMLPrintWriter writer) { + writer.startTAG("TemplateInfo"); + + writer.startTAG(XML_DESIGNER_OPEN_DATE); + writer.textNode(designerOpenDate); + writer.end(); + + writer.startTAG(XML_TEMPLATE_INFO_LIST); + writer.textNode(new JSONObject(templateInfoList).toString()); + writer.end(); + + writer.end(); + } + + public static void main(String[] args) { TemplateInfoCollector tic = TemplateInfoCollector.getInstance(); tic.sendTemplateInfo(); From c0c2ed2f6033a68d233b0cf4c538a9536396ba17 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Wed, 26 Apr 2017 11:04:22 +0800 Subject: [PATCH 301/343] =?UTF-8?q?REPORT-2381=20=E5=AE=A2=E6=88=B7bug?= =?UTF-8?q?=E5=8E=86=E5=8F=B2=E9=81=97=E7=95=99=E9=97=AE=E9=A2=98=EF=BC=8C?= =?UTF-8?q?=E7=A9=BA=E6=8C=87=E9=92=88=E5=BC=95=E5=8F=91=E6=8E=A7=E4=BB=B6?= =?UTF-8?q?=E5=B1=9E=E6=80=A7=E9=9D=A2=E6=9D=BF=E7=94=9F=E6=88=90=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E6=9C=80=E7=BB=88=E5=AF=BC=E8=87=B4=E6=8A=A5=E8=A1=A8?= =?UTF-8?q?=E5=88=87=E6=8D=A2=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/mainframe/WidgetPropertyPane.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java b/designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java index 6a8480206..201ab203e 100644 --- a/designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java +++ b/designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java @@ -259,8 +259,11 @@ public class WidgetPropertyPane extends FormDockView implements BaseWidgetProper xCreator = designer.getRootComponent(); } XLayoutContainer container = XCreatorUtils.getHotspotContainer(xCreator); - //TODO container可能为空,引发空指针异常 - return xCreator.acceptType(XWParameterLayout.class) || container.acceptType(XWParameterLayout.class); + + boolean xCreatorAccept = xCreator.acceptType(XWParameterLayout.class); + boolean containerAccept = container!=null && container.acceptType(XWParameterLayout.class); + + return xCreatorAccept || containerAccept; } public void setEditingFormDesigner(BaseFormDesigner editor) { From c96943543ece4080e6294d7847a7c5e325075a2e Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Wed, 26 Apr 2017 16:19:38 +0800 Subject: [PATCH 302/343] =?UTF-8?q?=E6=8E=A7=E4=BB=B6=E7=9A=84=E6=A1=86?= =?UTF-8?q?=E9=80=89=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/ComponentTree.java | 46 ++++++++++--------- .../com/fr/design/mainframe/FormDesigner.java | 3 +- .../mainframe/widget/UITreeComboBox.java | 28 +++++------ 3 files changed, 41 insertions(+), 36 deletions(-) diff --git a/designer_form/src/com/fr/design/mainframe/ComponentTree.java b/designer_form/src/com/fr/design/mainframe/ComponentTree.java index 4d58c4887..67894b991 100644 --- a/designer_form/src/com/fr/design/mainframe/ComponentTree.java +++ b/designer_form/src/com/fr/design/mainframe/ComponentTree.java @@ -1,30 +1,26 @@ package com.fr.design.mainframe; -import java.awt.Component; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.util.ArrayList; - -import javax.swing.DropMode; -import javax.swing.JPopupMenu; -import javax.swing.JTree; -import javax.swing.tree.TreePath; -import javax.swing.tree.TreeSelectionModel; - import com.fr.design.constants.UIConstants; -import com.fr.design.designer.beans.AdapterBus; -import com.fr.design.designer.beans.ComponentAdapter; -import com.fr.design.designer.beans.events.DesignerEditListener; -import com.fr.design.designer.beans.events.DesignerEvent; -import com.fr.design.designer.creator.*; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XLayoutContainer; +import com.fr.design.designer.creator.XWAbsoluteBodyLayout; +import com.fr.design.designer.creator.XWFitLayout; import com.fr.design.designer.treeview.ComponentTreeCellRenderer; import com.fr.design.designer.treeview.ComponentTreeModel; import com.fr.stable.StringUtils; +import javax.swing.*; +import javax.swing.tree.TreePath; +import javax.swing.tree.TreeSelectionModel; +import java.awt.*; +import java.util.ArrayList; + public class ComponentTree extends JTree { private FormDesigner designer; private ComponentTreeModel model; + //xiaoxia 保存框选的全部组件,只显示第一个 + private TreePath[] allSelectedTreePaths; public ComponentTree(FormDesigner designer) { this.designer = designer; @@ -92,9 +88,10 @@ public class ComponentTree extends JTree { } } - public void setAndScrollSelectionPath(TreePath treepath) { - setSelectionPath(treepath); - scrollPathToVisible(treepath); + public void setAndScrollSelectionPath(TreePath[] treepath) { + this.setAllSelectedTreePaths(treepath); + setSelectionPath(treepath[0]); + scrollPathToVisible(treepath[0]); } @@ -112,7 +109,6 @@ public class ComponentTree extends JTree { public TreePath[] getSelectedTreePath() { XCreator[] creators = designer.getSelectionModel().getSelection().getSelectedCreators(); TreePath[] paths = new TreePath[creators.length]; - for (int i = 0; i < paths.length; i++) { paths[i] = buildTreePath(creators[i]); } @@ -141,7 +137,7 @@ public class ComponentTree extends JTree { paths[i] = buildTreePath(searchList.get(i)); } if(paths.length > 0) { - setAndScrollSelectionPath(paths[0]); + setAndScrollSelectionPath(paths); } else { setSelectionPath(); } @@ -217,4 +213,12 @@ public class ComponentTree extends JTree { Object[] components = path.toArray(); return new TreePath(components); } + + public TreePath[] getAllSelectedTreePaths() { + return allSelectedTreePaths; + } + + public void setAllSelectedTreePaths(TreePath[] allSelectedTreePaths) { + this.allSelectedTreePaths = allSelectedTreePaths; + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/mainframe/FormDesigner.java b/designer_form/src/com/fr/design/mainframe/FormDesigner.java index 0c7705993..3e29f4128 100644 --- a/designer_form/src/com/fr/design/mainframe/FormDesigner.java +++ b/designer_form/src/com/fr/design/mainframe/FormDesigner.java @@ -1008,7 +1008,7 @@ public class FormDesigner extends TargetComponent implements TreeSelection @Override public void valueChanged(TreeSelectionEvent e) { ComponentTree tree = (ComponentTree) e.getSource(); - TreePath[] paths = tree.getSelectionPaths(); + TreePath[] paths = tree.getAllSelectedTreePaths(); if (paths != null) { ArrayList selected = new ArrayList(); @@ -1018,7 +1018,6 @@ public class FormDesigner extends TargetComponent implements TreeSelection } if (!BaseUtils.isAuthorityEditing()) { - selectionModel.setSelectedCreators(selected); TreePath path = e.getNewLeadSelectionPath(); diff --git a/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java b/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java index 0d7b224f6..258fd15d3 100644 --- a/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java +++ b/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java @@ -3,22 +3,24 @@ package com.fr.design.mainframe.widget; /** * Created by xiaxiang on 2016/9/30. */ -import java.awt.*; -import java.awt.event.*; -import javax.swing.*; -import javax.swing.plaf.*; -import javax.swing.plaf.basic.*; -import javax.swing.plaf.metal.*; -import javax.swing.tree.*; -import com.fr.design.designer.beans.*; +import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.events.DesignerEditListener; import com.fr.design.designer.beans.events.DesignerEvent; import com.fr.design.designer.creator.XCreator; import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.mainframe.ComponentTree; -import com.sun.java.swing.plaf.motif.*; -import com.sun.java.swing.plaf.windows.*; +import com.sun.java.swing.plaf.motif.MotifComboBoxUI; +import com.sun.java.swing.plaf.windows.WindowsComboBoxUI; + +import javax.swing.*; +import javax.swing.plaf.ComboBoxUI; +import javax.swing.plaf.basic.ComboPopup; +import javax.swing.plaf.metal.MetalComboBoxUI; +import javax.swing.tree.TreeCellRenderer; +import javax.swing.tree.TreePath; +import java.awt.*; +import java.awt.event.*; /** * 控件树下拉列表框 @@ -110,7 +112,7 @@ public class UITreeComboBox extends JComboBox{ int index, boolean isSelected, boolean cellHasFocus){ if(tree != null && tree.getSelectedTreePath().length > 0){ TreePath path = tree.getSelectedTreePath()[0]; - tree.setAndScrollSelectionPath(path); + tree.setAndScrollSelectionPath(tree.getSelectedTreePath()); Object node = path.getLastPathComponent(); value = node; TreeCellRenderer r = tree.getCellRenderer(); @@ -132,7 +134,7 @@ public class UITreeComboBox extends JComboBox{ if (evt.getCreatorEventID() == DesignerEvent.CREATOR_SELECTED) { TreePath[] paths = tree.getSelectedTreePath(); if (tree != null && paths.length > 0) { - tree.setAndScrollSelectionPath(paths[0]); + tree.setAndScrollSelectionPath(paths); setSelectedItem(paths[0]); MenuSelectionManager.defaultManager().clearSelectedPath(); } @@ -141,7 +143,7 @@ public class UITreeComboBox extends JComboBox{ tree.refreshUI(); TreePath[] paths = tree.getSelectedTreePath(); if (tree != null && paths.length > 0) { - tree.setAndScrollSelectionPath(paths[0]); + tree.setAndScrollSelectionPath(paths); setSelectedItem(paths[0]); MenuSelectionManager.defaultManager().clearSelectedPath(); } From 37b19cce1dc9a2fc2920ea00b6052a71492228a9 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Wed, 26 Apr 2017 17:19:37 +0800 Subject: [PATCH 303/343] =?UTF-8?q?=E5=90=AF=E5=8A=A8=E6=97=B6=E4=BC=9A?= =?UTF-8?q?=E5=B0=86=E5=88=9D=E5=A7=8B=E5=8C=96=E7=9A=84=E9=A2=9C=E8=89=B2?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=88=B0=E5=8E=86=E5=8F=B2=E9=A2=9C=E8=89=B2?= =?UTF-8?q?=E4=B8=AD=EF=BC=8C=E4=B8=8D=E9=9C=80=E8=A6=81=E8=BF=99=E6=A0=B7?= =?UTF-8?q?=E5=81=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/gui/style/BorderPane.java | 3 --- .../mainframe/backgroundpane/PatternBackgroundQuickPane.java | 2 -- 2 files changed, 5 deletions(-) diff --git a/designer_base/src/com/fr/design/gui/style/BorderPane.java b/designer_base/src/com/fr/design/gui/style/BorderPane.java index 60989aedd..714f0f0ac 100644 --- a/designer_base/src/com/fr/design/gui/style/BorderPane.java +++ b/designer_base/src/com/fr/design/gui/style/BorderPane.java @@ -99,9 +99,6 @@ public class BorderPane extends AbstractBasicStylePane { this.add(northPane, BorderLayout.NORTH); this.add(centerPane, BorderLayout.CENTER); - - this.currentLineColorPane.setSelectObject(Color.BLACK); - outerToggleButton.addChangeListener(new ChangeListener() { @Override diff --git a/designer_base/src/com/fr/design/mainframe/backgroundpane/PatternBackgroundQuickPane.java b/designer_base/src/com/fr/design/mainframe/backgroundpane/PatternBackgroundQuickPane.java index 4e31405d1..1dc21db89 100644 --- a/designer_base/src/com/fr/design/mainframe/backgroundpane/PatternBackgroundQuickPane.java +++ b/designer_base/src/com/fr/design/mainframe/backgroundpane/PatternBackgroundQuickPane.java @@ -52,8 +52,6 @@ public class PatternBackgroundQuickPane extends BackgroundQuickPane { JPanel colorPane = new JPanel(new GridLayout(0, 2)); foregroundColorPane = new ColorSelectBox(70); backgroundColorPane = new ColorSelectBox(70); - foregroundColorPane.setSelectObject(Color.lightGray); - backgroundColorPane.setSelectObject(Color.black); colorPane.add(this.createLabelColorPane(Inter.getLocText("Foreground") + ":", foregroundColorPane)); colorPane.add(this.createLabelColorPane(Inter.getLocText("Background") + ":", backgroundColorPane)); From cf4578290587ce36978d813593879f1ba1f4eb7c Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Wed, 26 Apr 2017 18:05:30 +0800 Subject: [PATCH 304/343] pmd --- .../com/fr/design/gui/style/BorderPane.java | 49 +++++++------------ .../com/fr/design/locale/designer.properties | 4 ++ .../design/locale/designer_en_US.properties | 4 ++ .../design/locale/designer_ja_JP.properties | 6 ++- .../design/locale/designer_ko_KR.properties | 6 ++- .../design/locale/designer_zh_CN.properties | 6 ++- .../design/locale/designer_zh_TW.properties | 6 ++- .../PatternBackgroundQuickPane.java | 13 ++--- 8 files changed, 50 insertions(+), 44 deletions(-) diff --git a/designer_base/src/com/fr/design/gui/style/BorderPane.java b/designer_base/src/com/fr/design/gui/style/BorderPane.java index 714f0f0ac..cb37f1c1a 100644 --- a/designer_base/src/com/fr/design/gui/style/BorderPane.java +++ b/designer_base/src/com/fr/design/gui/style/BorderPane.java @@ -51,34 +51,16 @@ public class BorderPane extends AbstractBasicStylePane { } protected void initComponents() { - topToggleButton = new UIToggleButton(BaseUtils.readIcon("/com/fr/base/images/dialog/border/top.png")); - leftToggleButton = new UIToggleButton(BaseUtils.readIcon("/com/fr/base/images/dialog/border/left.png")); - bottomToggleButton = new UIToggleButton(BaseUtils.readIcon("/com/fr/base/images/dialog/border/bottom.png")); - rightToggleButton = new UIToggleButton(BaseUtils.readIcon("/com/fr/base/images/dialog/border/right.png")); - horizontalToggleButton = new UIToggleButton(BaseUtils.readIcon("/com/fr/base/images/dialog/border/horizontal.png")); - verticalToggleButton = new UIToggleButton(BaseUtils.readIcon("/com/fr/base/images/dialog/border/vertical.png")); - this.currentLineCombo = new LineComboBox(CoreConstants.UNDERLINE_STYLE_ARRAY); - this.currentLineColorPane = new NewColorSelectBox(100); - + initButtonsWithIcon(); this.setLayout(new BorderLayout(0, 6)); - - double p = TableLayout.PREFERRED; - double f = TableLayout.FILL; - - double[] columnSize1 = {p, f}; - double[] rowSize1 = {p, p}; - - + double p = TableLayout.PREFERRED, f = TableLayout.FILL; + double[] columnSize1 = {p, f}, rowSize1 = {p, p}; Component[][] components1 = new Component[][]{ - new Component[]{new UILabel(Inter.getLocText("Style") + ":"), currentLineCombo}, - new Component[]{new UILabel(Inter.getLocText("Color") + ":"), currentLineColorPane}, + new Component[]{new UILabel(Inter.getLocText("FR-Designer_Style") + ":"), currentLineCombo}, + new Component[]{new UILabel(Inter.getLocText("FR-Designer_Color") + ":"), currentLineColorPane}, }; - JPanel northPane = TableLayoutHelper.createTableLayoutPane(components1, rowSize1, columnSize1); - - - double[] columnSize2 = {p, f}; - double[] rowSize2 = {p, p}; + double[] columnSize2 = {p, f}, rowSize2 = {p, p}; JPanel externalPane = new JPanel(new GridLayout(0, 4)); externalPane.add(topToggleButton); externalPane.add(leftToggleButton); @@ -87,20 +69,15 @@ public class BorderPane extends AbstractBasicStylePane { JPanel insidePane = new JPanel(new GridLayout(0, 2)); insidePane.add(horizontalToggleButton); insidePane.add(verticalToggleButton); - - Component[][] components2 = new Component[][]{ new Component[]{outerToggleButton = new UIToggleButton(BaseUtils.readIcon("com/fr/design/images/m_format/out.png")), innerToggleButton = new UIToggleButton(BaseUtils.readIcon("com/fr/design/images/m_format/in.png"))}, new Component[]{externalPane, insidePane,} }; JPanel centerPane = TableLayoutHelper.createTableLayoutPane(components2, rowSize2, columnSize2); - this.setLayout(new BorderLayout(0, 6)); this.add(northPane, BorderLayout.NORTH); this.add(centerPane, BorderLayout.CENTER); - outerToggleButton.addChangeListener(new ChangeListener() { - @Override public void stateChanged(ChangeEvent e) { boolean value = outerToggleButton.isSelected(); @@ -110,9 +87,7 @@ public class BorderPane extends AbstractBasicStylePane { rightToggleButton.setSelected(value); } }); - innerToggleButton.addChangeListener(new ChangeListener() { - @Override public void stateChanged(ChangeEvent e) { boolean value = innerToggleButton.isSelected(); @@ -120,12 +95,22 @@ public class BorderPane extends AbstractBasicStylePane { verticalToggleButton.setSelected(value); } }); + } + private void initButtonsWithIcon(){ + topToggleButton = new UIToggleButton(BaseUtils.readIcon("/com/fr/base/images/dialog/border/top.png")); + leftToggleButton = new UIToggleButton(BaseUtils.readIcon("/com/fr/base/images/dialog/border/left.png")); + bottomToggleButton = new UIToggleButton(BaseUtils.readIcon("/com/fr/base/images/dialog/border/bottom.png")); + rightToggleButton = new UIToggleButton(BaseUtils.readIcon("/com/fr/base/images/dialog/border/right.png")); + horizontalToggleButton = new UIToggleButton(BaseUtils.readIcon("/com/fr/base/images/dialog/border/horizontal.png")); + verticalToggleButton = new UIToggleButton(BaseUtils.readIcon("/com/fr/base/images/dialog/border/vertical.png")); + this.currentLineCombo = new LineComboBox(CoreConstants.UNDERLINE_STYLE_ARRAY); + this.currentLineColorPane = new NewColorSelectBox(100); } @Override public String title4PopupWindow() { - return Inter.getLocText("Border"); + return Inter.getLocText("FR-Designer_Border"); } public void populate(Style style) { diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 044278dba..cc75cee8a 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -596,3 +596,7 @@ FR-Designer_AxisReversed=AxisValue FR-Designer_Logarithmic=Logarithmic FR-Designer_Chart_Log_Base=Log Base FR-Designer_Chart_F_Radar_Axis=Chart_F_Radar_Axis +FR-Designer_Style=Style +FR-Designer_Color=Color +FR-Designer_Border=Border +FR-Designer_Background-Pattern=Pattern diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index 53c3ba773..1c646aebe 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -596,4 +596,8 @@ 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_Style=Style +FR-Designer_Color=Color +FR-Designer_Border=Border +FR-Designer_Background-Pattern=Pattern diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index 10c59bd36..2f4affb91 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -560,4 +560,8 @@ FR-Designer_Plugin_Should_Update_Please_Contact_Developer= FR-Designer_AxisReversed=\u8EF8\u9006\u9806 FR-Designer_Logarithmic=\u5BFE\u6570\u76EE\u76DB\u308A FR-Designer_Chart_Log_Base=\u5E95\u6570 -FR-Designer_Chart_F_Radar_Axis=\u5782\u76F4\u8EF8 \ No newline at end of file +FR-Designer_Chart_F_Radar_Axis=\u5782\u76F4\u8EF8 +FR-Designer_Style=\u30B9\u30BF\u30A4\u30EB +FR-Designer_Color=\u8272 +FR-Designer_Border=\u67A0 +FR-Designer_Background-Pattern=\u30D1\u30BF\u30FC\u30F3 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index 87fc8705a..075b017ab 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -555,4 +555,8 @@ FR-Designer_Plugin_Should_Update_Please_Contact_Developer= 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 \ No newline at end of file +FR-Designer_Chart_F_Radar_Axis=\uAC12\uCD95 +FR-Designer_Style=\uC591\uC2DD +FR-Designer_Color=\uC0C9 +FR-Designer_Border=\uD14C\uB450\uB9AC +FR-Designer_Background-Pattern=\uC774\uBBF8\uC9C0 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index a70e0c445..d0a2b0520 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -595,4 +595,8 @@ FR-Designer_Too_Small_To_Paste=\u6B64\u5904\u65E0\u6CD5\u7C98\u8D34\uFF0C\u5C0F\ 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 \ No newline at end of file +FR-Designer_Chart_F_Radar_Axis=\u503C\u8F74 +FR-Designer_Style=\u6837\u5F0F +FR-Designer_Color=\u989C\u8272 +FR-Designer_Border=\u8FB9\u6846 +FR-Designer_Background-Pattern=\u56FE\u6848 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index d32829c18..bbaf3db36 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -581,4 +581,8 @@ FR-Designer_Mouse_Click_Tips= 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 \ No newline at end of file +FR-Designer_Chart_F_Radar_Axis=\u503C\u8EF8 +FR-Designer_Style=\u6A23\u5F0F +FR-Designer_Color=\u984F\u8272 +FR-Designer_Border=\u6846\u7DDA +FR-Designer_Background-Pattern=\u5716\u6848 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/mainframe/backgroundpane/PatternBackgroundQuickPane.java b/designer_base/src/com/fr/design/mainframe/backgroundpane/PatternBackgroundQuickPane.java index 1dc21db89..16b294955 100644 --- a/designer_base/src/com/fr/design/mainframe/backgroundpane/PatternBackgroundQuickPane.java +++ b/designer_base/src/com/fr/design/mainframe/backgroundpane/PatternBackgroundQuickPane.java @@ -26,17 +26,16 @@ import java.awt.geom.Rectangle2D; public class PatternBackgroundQuickPane extends BackgroundQuickPane { private int patternIndex = 0; // pattern setIndex. + private final static int DEFAULT_DIM_HEIGHT = 190; private ColorSelectBox foregroundColorPane; private ColorSelectBox backgroundColorPane; private PatternButton[] patternButtonArray; public PatternBackgroundQuickPane() { this.setLayout(new BorderLayout(0, 4)); - JPanel contentPane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane(); this.add(contentPane, BorderLayout.NORTH); contentPane.setBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, 5)); - JPanel typePane2 = new JPanel(); contentPane.add(typePane2); typePane2.setLayout(new GridLayout(0, 8, 1, 1)); @@ -48,13 +47,11 @@ public class PatternBackgroundQuickPane extends BackgroundQuickPane { patternButtonGroup.add(patternButtonArray[i]); typePane2.add(patternButtonArray[i]); } - JPanel colorPane = new JPanel(new GridLayout(0, 2)); foregroundColorPane = new ColorSelectBox(70); backgroundColorPane = new ColorSelectBox(70); - - colorPane.add(this.createLabelColorPane(Inter.getLocText("Foreground") + ":", foregroundColorPane)); - colorPane.add(this.createLabelColorPane(Inter.getLocText("Background") + ":", backgroundColorPane)); + colorPane.add(this.createLabelColorPane(Inter.getLocText("FR-Designer_Foreground") + ":", foregroundColorPane)); + colorPane.add(this.createLabelColorPane(Inter.getLocText("FR-Designer_Background") + ":", backgroundColorPane)); this.add(colorPane, BorderLayout.CENTER); foregroundColorPane.addSelectChangeListener(colorChangeListener); backgroundColorPane.addSelectChangeListener(colorChangeListener); @@ -63,7 +60,7 @@ public class PatternBackgroundQuickPane extends BackgroundQuickPane { @Override public Dimension getPreferredSize() { Dimension dim = super.getPreferredSize(); - dim.height = 190; + dim.height = DEFAULT_DIM_HEIGHT; return dim; } @@ -204,6 +201,6 @@ public class PatternBackgroundQuickPane extends BackgroundQuickPane { @Override public String title4PopupWindow() { - return Inter.getLocText("Background-Pattern"); + return Inter.getLocText("FR-Designer_Background-Pattern"); } } \ No newline at end of file From 8cafb6397b8b1f5b513a79bac473f2572b417175 Mon Sep 17 00:00:00 2001 From: plough Date: Thu, 27 Apr 2017 14:23:56 +0800 Subject: [PATCH 305/343] =?UTF-8?q?REPORT-2343=20[=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E8=B4=A8=E9=87=8F]=20=E6=A8=A1=E6=9D=BF=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E6=94=B6=E9=9B=86=E7=94=A8xml=E6=96=B9=E5=BC=8F=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E4=B8=8E=E8=AF=BB=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../templateinfo/TemplateInfoCollector.java | 193 +++++++++++++++++- 1 file changed, 183 insertions(+), 10 deletions(-) diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java index dccff0e9c..c8a25cb29 100644 --- a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java @@ -37,6 +37,35 @@ public class TemplateInfoCollector implements XMLReadable, XML static final long serialVersionUID = 2007L; private static final String XML_DESIGNER_OPEN_DATE = "DesignerOpenDate"; private static final String XML_TEMPLATE_INFO_LIST = "TemplateInfoList"; + private static final String XML_TEMPLATE_INFO = "TemplateInfo"; + private static final String XML_PROCESS_MAP = "ProcessMap"; + private static final String XML_CONSUMING_MAP = "ConsumingMap"; + private static final String ATTR_DAY_COUNT = "dayCount"; + private static final String ATTR_TEMPLATE_ID = "templateID"; + /* + * "process":"","float_count":0,"widget_count":1,"cell_count":0,"block_count":0,"report_type":2 + * */ + private static final String ATTR_PROCESS = "process"; + private static final String ATTR_FLOAT_COUNT = "floatCount"; + private static final String ATTR_WIDGET_COUNT = "widgetCount"; + private static final String ATTR_CELL_COUNT = "cellCount"; + private static final String ATTR_BLOCK_COUNT = "blockCount"; + private static final String ATTR_REPORT_TYPE = "reportType"; + /* + * "activitykey":"2e0ea413-fa9c241e0-9723-4354fce51e81","jar_time":"2017.04.21.10.41.10.806", + * "create_time":"2017-04-26 10:27","templateID":"0aa19027-e298-4d43-868d-45232b879d0e", + * "uuid":"476ca2cc-f789-4c5d-8e89-ef146580775c","time_consume":36,"version":"8.0", + * "username":"ueeHq6 + * */ + private static final String ATTR_ACTIVITYKEY = "activitykey"; + private static final String ATTR_JAR_TIME = "jarTime"; + private static final String ATTR_CREATE_TIME = "createTime"; + private static final String ATTR_UUID = "uuid"; + private static final String ATTR_TIME_CONSUME = "timeConsume"; + private static final String ATTR_VERSION = "version"; + private static final String ATTR_USERNAME = "username"; + + @SuppressWarnings("unchecked") private TemplateInfoCollector() { @@ -418,13 +447,14 @@ public class TemplateInfoCollector implements XMLReadable, XML if (XML_DESIGNER_OPEN_DATE.equals(name)) { this.designerOpenDate = reader.getElementValue(); } else if(XML_TEMPLATE_INFO_LIST.equals(name)){ - JSONObject jsonObject = new JSONObject(reader.getElementValue()); - Map map = jsonToMap(jsonObject); - for (Map.Entry entry : map.entrySet()) { - if (entry.getValue() instanceof HashMap) { - this.templateInfoList.put(entry.getKey(), (HashMap) entry.getValue()); - } - } +// JSONObject jsonObject = new JSONObject(reader.getElementValue()); +// Map map = jsonToMap(jsonObject); +// for (Map.Entry entry : map.entrySet()) { +// if (entry.getValue() instanceof HashMap) { +// this.templateInfoList.put(entry.getKey(), (HashMap) entry.getValue()); +// } +// } + readTemplateInfoList(reader); } } catch (Exception ex) { // 什么也不做,使用默认值 @@ -432,21 +462,164 @@ public class TemplateInfoCollector implements XMLReadable, XML } } + private void readTemplateInfoList(XMLableReader reader) { + reader.readXMLObject(new XMLReadable() { + public void readXML(XMLableReader reader) { + if (XML_TEMPLATE_INFO.equals(reader.getTagName())) { + TemplateInfo templateInfo = new TemplateInfo(); + reader.readXMLObject(templateInfo); + templateInfoList.put(templateInfo.getTemplateID(), templateInfo.getTemplateInfo()); + } + } + }); + } + @Override public void writeXML(XMLPrintWriter writer) { - writer.startTAG("TemplateInfo"); + writer.startTAG("TplInfo"); writer.startTAG(XML_DESIGNER_OPEN_DATE); writer.textNode(designerOpenDate); writer.end(); - writer.startTAG(XML_TEMPLATE_INFO_LIST); - writer.textNode(new JSONObject(templateInfoList).toString()); +// writer.startTAG(XML_TEMPLATE_INFO_LIST); +// writer.textNode(new JSONObject(templateInfoList).toString()); +// writer.end(); + writeTemplateInfoList(writer); + writer.end(); + } + private void writeTemplateInfoList(XMLPrintWriter writer){ + //启停 + writer.startTAG(XML_TEMPLATE_INFO_LIST); + for (String templateID : templateInfoList.keySet()) { + new TemplateInfo(templateInfoList.get(templateID)).writeXML(writer); + } +// for (int i = 0; i < templateInfoList.size(); i++) { +// startStop.get(i).writeXML(writer); +// } writer.end(); } + private class TemplateInfo implements XMLReadable, XMLWriter { + + private int dayCount; + private String templateID; + private HashMap processMap = new HashMap<>(); + private HashMap consumingMap = new HashMap<>(); + + @SuppressWarnings("unchecked") + public TemplateInfo(HashMap templateInfo) { + this.dayCount = (int)templateInfo.get("day_count"); + this.processMap = (HashMap) templateInfo.get("processMap"); + this.consumingMap = (HashMap) templateInfo.get("consumingMap"); + this.templateID = (String) processMap.get("templateID"); + } + + public TemplateInfo() {} + +// public int getDayCount() { +// return dayCount; +// } + public String getTemplateID() { + return templateID; + } + +// public void setStartDate(String startDate) { +// this.startDate = startDate; +// } + + public HashMap getTemplateInfo() { + HashMap templateInfo = new HashMap<>(); + templateInfo.put("processMap", processMap); + templateInfo.put("consumingMap", consumingMap); + templateInfo.put("day_count", dayCount); + return templateInfo; + } + +// public HashMap getProcessMap() { +// return processMap; +// } +// +// public HashMap getConsumingMap() { +// return consumingMap; +// } + +// public void setStopDate(String endDate) { +// this.stopDate = endDate; +// } + + public void writeXML(XMLPrintWriter writer) { + writer.startTAG(XML_TEMPLATE_INFO); + if (StringUtils.isNotEmpty(templateID)) { + writer.attr(ATTR_TEMPLATE_ID, this.templateID); + } + if (dayCount >= 0) { + writer.attr(ATTR_DAY_COUNT, this.dayCount); + } + writeProcessMap(writer); + writeConsumingMap(writer); + + writer.end(); + } + + private void writeProcessMap(XMLPrintWriter writer) { + writer.startTAG(XML_PROCESS_MAP); + writer.attr(ATTR_PROCESS, (String)processMap.get("process")); + writer.attr(ATTR_FLOAT_COUNT, (int)processMap.get("float_count")); + writer.attr(ATTR_WIDGET_COUNT, (int)processMap.get("widget_count")); + writer.attr(ATTR_CELL_COUNT, (int)processMap.get("cell_count")); + writer.attr(ATTR_BLOCK_COUNT, (int)processMap.get("block_count")); + writer.attr(ATTR_REPORT_TYPE, (int)processMap.get("report_type")); + writer.end(); + } + + private void writeConsumingMap(XMLPrintWriter writer) { + writer.startTAG(XML_CONSUMING_MAP); + writer.attr(ATTR_ACTIVITYKEY, (String)consumingMap.get("activitykey")); + writer.attr(ATTR_JAR_TIME, (String)consumingMap.get("jar_time")); + writer.attr(ATTR_CREATE_TIME, (String)consumingMap.get("create_time")); + writer.attr(ATTR_UUID, (String)consumingMap.get("uuid")); + writer.attr(ATTR_TIME_CONSUME, (long)consumingMap.get("time_consume")); + writer.attr(ATTR_VERSION, (String)consumingMap.get("version")); + writer.attr(ATTR_USERNAME, (String)consumingMap.get("username")); + writer.end(); + } + + public void readXML(XMLableReader reader) { + if (!reader.isChildNode()) { + dayCount = reader.getAttrAsInt(ATTR_DAY_COUNT, 0); + templateID = reader.getAttrAsString(ATTR_TEMPLATE_ID, StringUtils.EMPTY); + } else { + try { + String name = reader.getTagName(); + if (XML_PROCESS_MAP.equals(name)) { + processMap.put("process", reader.getAttrAsString(ATTR_PROCESS, StringUtils.EMPTY)); + processMap.put("float_count", reader.getAttrAsInt(ATTR_FLOAT_COUNT, 0)); + processMap.put("widget_count", reader.getAttrAsInt(ATTR_WIDGET_COUNT, 0)); + processMap.put("cell_count", reader.getAttrAsInt(ATTR_CELL_COUNT, 0)); + processMap.put("block_count", reader.getAttrAsInt(ATTR_BLOCK_COUNT, 0)); + processMap.put("report_type", reader.getAttrAsInt(ATTR_REPORT_TYPE, 0)); + processMap.put("templateID", templateID); + } else if(XML_CONSUMING_MAP.equals(name)){ + consumingMap.put("activitykey", reader.getAttrAsString(ATTR_ACTIVITYKEY, StringUtils.EMPTY)); + consumingMap.put("jar_time", reader.getAttrAsString(ATTR_JAR_TIME, StringUtils.EMPTY)); + consumingMap.put("create_time", reader.getAttrAsString(ATTR_CREATE_TIME, StringUtils.EMPTY)); + consumingMap.put("templateID", templateID); + consumingMap.put("uuid", reader.getAttrAsString(ATTR_UUID, StringUtils.EMPTY)); + consumingMap.put("time_consume", reader.getAttrAsLong(ATTR_TIME_CONSUME, 0)); + consumingMap.put("version", reader.getAttrAsString(ATTR_VERSION, "8.0")); + consumingMap.put("username", reader.getAttrAsString(ATTR_USERNAME, StringUtils.EMPTY)); + } + } catch (Exception ex) { + // 什么也不做,使用默认值 + } + } + } + + } + public static void main(String[] args) { TemplateInfoCollector tic = TemplateInfoCollector.getInstance(); From f7b05c896eaae670a010e1a471b755d25ad4ef66 Mon Sep 17 00:00:00 2001 From: zack Date: Thu, 27 Apr 2017 15:01:59 +0800 Subject: [PATCH 306/343] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1=20maste?= =?UTF-8?q?r=E7=9A=84boundsWidget=E5=88=B0release?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer/beans/ConnectorCreator.java | 9 ++--- .../adapters/layout/FRFitLayoutAdapter.java | 4 +- .../beans/location/AccessDirection.java | 2 +- .../design/designer/beans/location/Inner.java | 2 +- .../designer/creator/XWAbsoluteLayout.java | 40 ++++++++++++------- .../design/designer/creator/XWFitLayout.java | 18 ++++----- .../designer/creator/XWScaleLayout.java | 9 ++--- .../designer/creator/XWTitleLayout.java | 2 +- .../cardlayout/XWCardMainBorderLayout.java | 11 ++--- .../creator/cardlayout/XWTabFitLayout.java | 2 +- .../fr/design/mainframe/ConnectorHelper.java | 15 +++---- 11 files changed, 58 insertions(+), 56 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/beans/ConnectorCreator.java b/designer_form/src/com/fr/design/designer/beans/ConnectorCreator.java index 350235d45..ed83c12d6 100644 --- a/designer_form/src/com/fr/design/designer/beans/ConnectorCreator.java +++ b/designer_form/src/com/fr/design/designer/beans/ConnectorCreator.java @@ -1,13 +1,12 @@ package com.fr.design.designer.beans; -import java.awt.Point; -import java.awt.Rectangle; +import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; +import com.fr.form.ui.container.WLayout; + +import java.awt.*; import java.util.ArrayList; import java.util.PriorityQueue; -import com.fr.form.ui.container.WLayout; -import com.fr.form.ui.widget.BoundsWidget; - public class ConnectorCreator { public static final int UNIT = 10; diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java index 12e53ccdd..74a69e525 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java @@ -16,13 +16,11 @@ import com.fr.design.designer.creator.cardlayout.XWCardMainBorderLayout; import com.fr.design.designer.creator.cardlayout.XWTabFitLayout; import com.fr.design.designer.properties.FRFitLayoutConstraints; import com.fr.design.designer.properties.FRFitLayoutPropertiesGroupModel; -import com.fr.design.file.HistoryTemplateListPane; -import com.fr.design.mainframe.JForm; import com.fr.design.utils.ComponentUtils; 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.cardlayout.WCardMainBorderLayout; -import com.fr.form.ui.widget.BoundsWidget; import com.fr.general.ComparatorUtils; import java.awt.*; diff --git a/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java b/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java index 088f29a0a..c39dfc4db 100644 --- a/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java +++ b/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java @@ -10,7 +10,7 @@ import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.FormSelection; import com.fr.design.utils.ComponentUtils; import com.fr.form.ui.container.WAbsoluteLayout; -import com.fr.form.ui.widget.BoundsWidget; +import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import java.awt.*; diff --git a/designer_form/src/com/fr/design/designer/beans/location/Inner.java b/designer_form/src/com/fr/design/designer/beans/location/Inner.java index 4f475adf0..c90924489 100644 --- a/designer_form/src/com/fr/design/designer/beans/location/Inner.java +++ b/designer_form/src/com/fr/design/designer/beans/location/Inner.java @@ -9,7 +9,7 @@ import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.FormSelection; import com.fr.design.utils.ComponentUtils; 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.stable.ArrayUtils; import java.awt.*; diff --git a/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java b/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java index 1854b91f4..852cdf122 100644 --- a/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java @@ -3,31 +3,35 @@ */ package com.fr.design.designer.creator; -import java.awt.*; -import java.awt.event.ContainerEvent; -import java.awt.event.MouseEvent; -import java.awt.image.BufferedImage; -import java.beans.IntrospectionException; -import java.util.HashMap; - import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.ComponentAdapter; import com.fr.design.designer.beans.LayoutAdapter; import com.fr.design.designer.beans.adapters.layout.FRAbsoluteLayoutAdapter; import com.fr.design.designer.beans.location.Direction; import com.fr.design.designer.beans.models.SelectionModel; +import com.fr.design.designer.creator.cardlayout.XWTabFitLayout; import com.fr.design.form.layout.FRAbsoluteLayout; import com.fr.design.icon.IconPathConstants; -import com.fr.design.mainframe.*; +import com.fr.design.mainframe.EditingMouseListener; +import com.fr.design.mainframe.FormArea; +import com.fr.design.mainframe.FormDesigner; import com.fr.form.ui.Connector; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WAbsoluteLayout; +import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import com.fr.form.ui.container.WLayout; -import com.fr.form.ui.widget.BoundsWidget; import com.fr.general.FRScreen; import com.fr.general.IOUtils; import com.fr.general.Inter; +import java.awt.*; +import java.awt.event.ContainerEvent; +import java.awt.event.MouseEvent; +import java.awt.image.BufferedImage; +import java.beans.IntrospectionException; +import java.util.ArrayList; +import java.util.HashMap; + /** * @author richer * @since 6.5.3 @@ -159,7 +163,15 @@ public class XWAbsoluteLayout extends XLayoutContainer { if (xCreator.acceptType(XWAbsoluteLayout.class)) { ((XWAbsoluteLayout) xCreator).updateBoundsWidget(); } - BoundsWidget boundsWidget = layout.getBoundsWidget(xCreator.toData()); + // 如果子组件时tab布局,则tab布局内部的组件的wiget也要更新,否则保存后重新打开大小不对 + ArrayList childrenList = xCreator.getTargetChildrenList(); + if (!childrenList.isEmpty()) { + for (int i = 0; i < childrenList.size(); i++) { + XWTabFitLayout tabLayout = (XWTabFitLayout) childrenList.get(i); + tabLayout.updateBoundsWidget(); + } + } + BoundsWidget boundsWidget = (BoundsWidget) layout.getBoundsWidget(xCreator.toData()); Rectangle rectangle = dealWidgetBound(xCreator.getBounds()); } @@ -184,7 +196,7 @@ public class XWAbsoluteLayout extends XLayoutContainer { double percentH = ((double) backupBound.height / (double) currentBound.height); for (int index = 0, n = this.getComponentCount(); index < n; index++) { XCreator creator = (XCreator) this.getComponent(index); - BoundsWidget wgt = layout.getBoundsWidget(creator.toData()); + BoundsWidget wgt = (BoundsWidget) layout.getBoundsWidget(creator.toData()); // 用当前的显示大小计算后调正具体位置 Rectangle wgtBound = creator.getBounds(); Rectangle rec = calculateBound(wgtBound, percentW, percentH); @@ -217,7 +229,7 @@ public class XWAbsoluteLayout extends XLayoutContainer { rec.y = (int) (rec.y / prevContainerPercent * containerPercent); rec.height = (int) (rec.height / prevContainerPercent * containerPercent); rec.width = (int) (rec.width / prevContainerPercent * containerPercent); - BoundsWidget wgt = toData().getBoundsWidget(creator.toData()); + BoundsWidget wgt = (BoundsWidget) toData().getBoundsWidget(creator.toData()); wgt.setBounds(rec); creator.setBounds(rec); creator.updateChildBound(minHeight); @@ -481,7 +493,7 @@ public class XWAbsoluteLayout extends XLayoutContainer { XCreator xCreator = (XCreator) getComponent(i); Rectangle rectangle = xCreator.getBounds(); xCreator.setBounds((int) (rectangle.x * percent), rectangle.y, (int) (rectangle.width * percent), rectangle.height); - BoundsWidget widget = toData().getBoundsWidget(xCreator.toData()); + BoundsWidget widget = (BoundsWidget) toData().getBoundsWidget(xCreator.toData()); widget.setBounds(xCreator.getBounds()); } } @@ -498,7 +510,7 @@ public class XWAbsoluteLayout extends XLayoutContainer { XCreator xCreator = (XCreator) getComponent(i); Rectangle rectangle = xCreator.getBounds(); xCreator.setBounds(rectangle.x, (int) (rectangle.y * percent), rectangle.width, (int) (rectangle.height * percent)); - BoundsWidget widget = toData().getBoundsWidget(xCreator.toData()); + BoundsWidget widget = (BoundsWidget) toData().getBoundsWidget(xCreator.toData()); widget.setBounds(xCreator.getBounds()); } } diff --git a/designer_form/src/com/fr/design/designer/creator/XWFitLayout.java b/designer_form/src/com/fr/design/designer/creator/XWFitLayout.java index 340ec9cd1..2ab891022 100644 --- a/designer_form/src/com/fr/design/designer/creator/XWFitLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/XWFitLayout.java @@ -1,14 +1,5 @@ package com.fr.design.designer.creator; -import java.awt.Component; -import java.awt.Dimension; -import java.awt.Rectangle; -import java.awt.Toolkit; -import java.awt.event.ContainerEvent; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - import com.fr.design.designer.beans.LayoutAdapter; import com.fr.design.designer.beans.adapters.layout.FRFitLayoutAdapter; import com.fr.design.designer.beans.location.Direction; @@ -20,14 +11,19 @@ import com.fr.design.mainframe.FormArea; import com.fr.design.utils.gui.LayoutUtils; import com.fr.form.ui.PaddingMargin; import com.fr.form.ui.Widget; +import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import com.fr.form.ui.container.WBodyLayoutType; import com.fr.form.ui.container.WFitLayout; import com.fr.form.ui.container.WLayout; -import com.fr.form.ui.widget.BoundsWidget; import com.fr.general.FRScreen; -import com.fr.general.Inter; import com.fr.stable.ArrayUtils; +import java.awt.*; +import java.awt.event.ContainerEvent; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + /** * @author jim * @date 2014-6-23 diff --git a/designer_form/src/com/fr/design/designer/creator/XWScaleLayout.java b/designer_form/src/com/fr/design/designer/creator/XWScaleLayout.java index 8dad2c7f0..2c592cc21 100644 --- a/designer_form/src/com/fr/design/designer/creator/XWScaleLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/XWScaleLayout.java @@ -3,16 +3,15 @@ */ package com.fr.design.designer.creator; -import java.awt.Dimension; -import java.awt.Rectangle; -import java.awt.event.ContainerEvent; - import com.fr.design.designer.beans.LayoutAdapter; import com.fr.design.designer.beans.adapters.layout.FRScaleLayoutAdapter; import com.fr.design.form.layout.FRScaleLayout; import com.fr.form.ui.Widget; +import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import com.fr.form.ui.container.WScaleLayout; -import com.fr.form.ui.widget.BoundsWidget; + +import java.awt.*; +import java.awt.event.ContainerEvent; /** * 自适应布局中添加组件时,部分控件如数字文本下拉等需要保持控件默认高度21, 用此容器来实现 diff --git a/designer_form/src/com/fr/design/designer/creator/XWTitleLayout.java b/designer_form/src/com/fr/design/designer/creator/XWTitleLayout.java index 0e1a293bd..7b9a5380c 100644 --- a/designer_form/src/com/fr/design/designer/creator/XWTitleLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/XWTitleLayout.java @@ -11,7 +11,7 @@ import com.fr.form.ui.Label; import com.fr.form.ui.Widget; import com.fr.form.ui.WidgetTitle; import com.fr.form.ui.container.WTitleLayout; -import com.fr.form.ui.widget.BoundsWidget; +import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import com.fr.general.ComparatorUtils; import java.awt.*; diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java index 9b778f850..94dfaf92e 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java @@ -3,10 +3,6 @@ */ package com.fr.design.designer.creator.cardlayout; -import java.awt.*; -import java.awt.event.MouseEvent; -import java.awt.image.BufferedImage; -import java.util.ArrayList; import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.ComponentAdapter; import com.fr.design.designer.beans.models.SelectionModel; @@ -17,12 +13,17 @@ import com.fr.design.designer.creator.XWBorderLayout; import com.fr.design.icon.IconPathConstants; import com.fr.design.mainframe.EditingMouseListener; import com.fr.design.mainframe.FormDesigner; +import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import com.fr.form.ui.container.WBorderLayout; import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; -import com.fr.form.ui.widget.BoundsWidget; import com.fr.general.IOUtils; import com.fr.general.Inter; +import java.awt.*; +import java.awt.event.MouseEvent; +import java.awt.image.BufferedImage; +import java.util.ArrayList; + /** * card布局主体框架 * diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java index c0d1a06ed..5a2afa00c 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java @@ -18,7 +18,7 @@ import com.fr.design.utils.gui.LayoutUtils; import com.fr.form.ui.CardSwitchButton; import com.fr.form.ui.container.cardlayout.WCardTagLayout; import com.fr.form.ui.container.cardlayout.WTabFitLayout; -import com.fr.form.ui.widget.BoundsWidget; +import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import com.fr.general.Background; import com.fr.general.FRLogger; import com.fr.general.Inter; diff --git a/designer_form/src/com/fr/design/mainframe/ConnectorHelper.java b/designer_form/src/com/fr/design/mainframe/ConnectorHelper.java index a64005812..93add3634 100644 --- a/designer_form/src/com/fr/design/mainframe/ConnectorHelper.java +++ b/designer_form/src/com/fr/design/mainframe/ConnectorHelper.java @@ -1,18 +1,15 @@ package com.fr.design.mainframe; -import java.awt.Color; -import java.awt.Graphics; -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.event.MouseEvent; -import java.util.ArrayList; - -import com.fr.form.ui.widget.BoundsWidget; -import com.fr.stable.Constants; import com.fr.base.GraphHelper; import com.fr.design.designer.beans.ConnectorCreator; import com.fr.design.designer.creator.XWAbsoluteLayout; import com.fr.form.ui.Connector; +import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; +import com.fr.stable.Constants; + +import java.awt.*; +import java.awt.event.MouseEvent; +import java.util.ArrayList; public class ConnectorHelper { //这个类是用来画连接线的,暂时用不到 From 4700b3dc89fb369e73a08d0ccf3b590edd4ffbea Mon Sep 17 00:00:00 2001 From: plough Date: Thu, 27 Apr 2017 15:20:06 +0800 Subject: [PATCH 307/343] =?UTF-8?q?REPORT-2343=20[=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E8=B4=A8=E9=87=8F]=3D>=E5=85=BC=E5=AE=B9=E4=B9=8B=E5=89=8D?= =?UTF-8?q?=E7=9A=84=E5=AF=B9=E8=B1=A1=E6=B5=81=E8=AF=BB=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../templateinfo/TemplateInfoCollector.java | 58 +++++-------------- 1 file changed, 15 insertions(+), 43 deletions(-) diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java index c8a25cb29..9206785dd 100644 --- a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java @@ -25,8 +25,9 @@ import java.util.Iterator; * 做模板的过程和耗时收集,辅助类 * Created by plough on 2017/2/21. */ -public class TemplateInfoCollector implements XMLReadable, XMLWriter { +public class TemplateInfoCollector implements Serializable, XMLReadable, XMLWriter { private static final String FILE_NAME = "tpl.info"; + private static final String OBJECT_FILE_NAME = "tplInfo.ser"; private static TemplateInfoCollector instance; private Map> templateInfoList; private String designerOpenDate; //设计器最近一次打开日期 @@ -42,21 +43,12 @@ public class TemplateInfoCollector implements XMLReadable, XML private static final String XML_CONSUMING_MAP = "ConsumingMap"; private static final String ATTR_DAY_COUNT = "dayCount"; private static final String ATTR_TEMPLATE_ID = "templateID"; - /* - * "process":"","float_count":0,"widget_count":1,"cell_count":0,"block_count":0,"report_type":2 - * */ private static final String ATTR_PROCESS = "process"; private static final String ATTR_FLOAT_COUNT = "floatCount"; private static final String ATTR_WIDGET_COUNT = "widgetCount"; private static final String ATTR_CELL_COUNT = "cellCount"; private static final String ATTR_BLOCK_COUNT = "blockCount"; private static final String ATTR_REPORT_TYPE = "reportType"; - /* - * "activitykey":"2e0ea413-fa9c241e0-9723-4354fce51e81","jar_time":"2017.04.21.10.41.10.806", - * "create_time":"2017-04-26 10:27","templateID":"0aa19027-e298-4d43-868d-45232b879d0e", - * "uuid":"476ca2cc-f789-4c5d-8e89-ef146580775c","time_consume":36,"version":"8.0", - * "username":"ueeHq6 - * */ private static final String ATTR_ACTIVITYKEY = "activitykey"; private static final String ATTR_JAR_TIME = "jarTime"; private static final String ATTR_CREATE_TIME = "createTime"; @@ -66,7 +58,6 @@ public class TemplateInfoCollector implements XMLReadable, XML private static final String ATTR_USERNAME = "username"; - @SuppressWarnings("unchecked") private TemplateInfoCollector() { templateInfoList = new HashMap<>(); @@ -95,10 +86,23 @@ public class TemplateInfoCollector implements XMLReadable, XML return new File(StableUtils.pathJoin(ProductConstants.getEnvHome(), FILE_NAME)); } + private static File getObjectInfoFile() { + return new File(StableUtils.pathJoin(ProductConstants.getEnvHome(), OBJECT_FILE_NAME)); + } + public static TemplateInfoCollector getInstance() { if (instance == null) { instance = new TemplateInfoCollector(); readXMLFile(instance, getInfoFile()); + // 兼容过渡。如果没有新文件,则从老文件读取数据。以后都是读写新的 xml 文件 + if (!getInfoFile().exists() && getObjectInfoFile().exists()) { + try { + ObjectInputStream is = new ObjectInputStream(new FileInputStream(getObjectInfoFile())); + instance = (TemplateInfoCollector) is.readObject(); + } catch (Exception ex) { + // 什么也不做,instance 使用新值 + } + } } return instance; } @@ -447,13 +451,6 @@ public class TemplateInfoCollector implements XMLReadable, XML if (XML_DESIGNER_OPEN_DATE.equals(name)) { this.designerOpenDate = reader.getElementValue(); } else if(XML_TEMPLATE_INFO_LIST.equals(name)){ -// JSONObject jsonObject = new JSONObject(reader.getElementValue()); -// Map map = jsonToMap(jsonObject); -// for (Map.Entry entry : map.entrySet()) { -// if (entry.getValue() instanceof HashMap) { -// this.templateInfoList.put(entry.getKey(), (HashMap) entry.getValue()); -// } -// } readTemplateInfoList(reader); } } catch (Exception ex) { @@ -482,9 +479,6 @@ public class TemplateInfoCollector implements XMLReadable, XML writer.textNode(designerOpenDate); writer.end(); -// writer.startTAG(XML_TEMPLATE_INFO_LIST); -// writer.textNode(new JSONObject(templateInfoList).toString()); -// writer.end(); writeTemplateInfoList(writer); writer.end(); @@ -496,9 +490,6 @@ public class TemplateInfoCollector implements XMLReadable, XML for (String templateID : templateInfoList.keySet()) { new TemplateInfo(templateInfoList.get(templateID)).writeXML(writer); } -// for (int i = 0; i < templateInfoList.size(); i++) { -// startStop.get(i).writeXML(writer); -// } writer.end(); } @@ -519,17 +510,10 @@ public class TemplateInfoCollector implements XMLReadable, XML public TemplateInfo() {} -// public int getDayCount() { -// return dayCount; -// } public String getTemplateID() { return templateID; } -// public void setStartDate(String startDate) { -// this.startDate = startDate; -// } - public HashMap getTemplateInfo() { HashMap templateInfo = new HashMap<>(); templateInfo.put("processMap", processMap); @@ -538,18 +522,6 @@ public class TemplateInfoCollector implements XMLReadable, XML return templateInfo; } -// public HashMap getProcessMap() { -// return processMap; -// } -// -// public HashMap getConsumingMap() { -// return consumingMap; -// } - -// public void setStopDate(String endDate) { -// this.stopDate = endDate; -// } - public void writeXML(XMLPrintWriter writer) { writer.startTAG(XML_TEMPLATE_INFO); if (StringUtils.isNotEmpty(templateID)) { From aa379c899448a73727f2e0cd99a6b6b0eb94fc5c Mon Sep 17 00:00:00 2001 From: plough Date: Thu, 27 Apr 2017 15:23:15 +0800 Subject: [PATCH 308/343] =?UTF-8?q?REPORT-2343=20[=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E8=B4=A8=E9=87=8F]=3D>=E5=8E=BB=E6=8E=89=E6=97=A0=E7=94=A8?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../templateinfo/TemplateInfoCollector.java | 45 ------------------- 1 file changed, 45 deletions(-) diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java index 9206785dd..b5bac38d9 100644 --- a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java @@ -397,51 +397,6 @@ public class TemplateInfoCollector implements Serializable, XM return isTestTemplate; } - public static Map jsonToMap(JSONObject json) throws JSONException { - Map retMap = new HashMap<>(); - - if(json != JSONObject.NULL) { - retMap = toMap(json); - } - return retMap; - } - - private static Map toMap(JSONObject object) throws JSONException { - Map map = new HashMap<>(); - - Iterator keysItr = object.keys(); - while(keysItr.hasNext()) { - String key = keysItr.next(); - Object value = object.get(key); - - if(value instanceof JSONArray) { - value = toList((JSONArray) value); - } - - else if(value instanceof JSONObject) { - value = toMap((JSONObject) value); - } - map.put(key, value); - } - return map; - } - - private static List toList(JSONArray array) throws JSONException { - List list = new ArrayList<>(); - for(int i = 0; i < array.length(); i++) { - Object value = array.get(i); - if(value instanceof JSONArray) { - value = toList((JSONArray) value); - } - - else if(value instanceof JSONObject) { - value = toMap((JSONObject) value); - } - list.add(value); - } - return list; - } - @SuppressWarnings("unchecked") @Override public void readXML(XMLableReader reader) { From ba60f5ad9a0efa80d8e2d5201ddedd8f634620fd Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Thu, 27 Apr 2017 17:08:36 +0800 Subject: [PATCH 309/343] =?UTF-8?q?=E6=A1=86=E9=80=89=E6=94=B9=E9=94=99?= =?UTF-8?q?=E5=95=A6=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/ComponentTree.java | 31 ++++++------------- .../com/fr/design/mainframe/FormDesigner.java | 2 +- .../mainframe/widget/UITreeComboBox.java | 23 ++++++-------- 3 files changed, 21 insertions(+), 35 deletions(-) diff --git a/designer_form/src/com/fr/design/mainframe/ComponentTree.java b/designer_form/src/com/fr/design/mainframe/ComponentTree.java index 67894b991..1ceab13c0 100644 --- a/designer_form/src/com/fr/design/mainframe/ComponentTree.java +++ b/designer_form/src/com/fr/design/mainframe/ComponentTree.java @@ -1,26 +1,23 @@ package com.fr.design.mainframe; +import java.awt.Component; +import java.util.ArrayList; + +import javax.swing.DropMode; +import javax.swing.JTree; +import javax.swing.tree.TreePath; +import javax.swing.tree.TreeSelectionModel; + import com.fr.design.constants.UIConstants; -import com.fr.design.designer.creator.XCreator; -import com.fr.design.designer.creator.XLayoutContainer; -import com.fr.design.designer.creator.XWAbsoluteBodyLayout; -import com.fr.design.designer.creator.XWFitLayout; +import com.fr.design.designer.creator.*; import com.fr.design.designer.treeview.ComponentTreeCellRenderer; import com.fr.design.designer.treeview.ComponentTreeModel; import com.fr.stable.StringUtils; -import javax.swing.*; -import javax.swing.tree.TreePath; -import javax.swing.tree.TreeSelectionModel; -import java.awt.*; -import java.util.ArrayList; - public class ComponentTree extends JTree { private FormDesigner designer; private ComponentTreeModel model; - //xiaoxia 保存框选的全部组件,只显示第一个 - private TreePath[] allSelectedTreePaths; public ComponentTree(FormDesigner designer) { this.designer = designer; @@ -89,8 +86,7 @@ public class ComponentTree extends JTree { } public void setAndScrollSelectionPath(TreePath[] treepath) { - this.setAllSelectedTreePaths(treepath); - setSelectionPath(treepath[0]); + setSelectionPaths(treepath); scrollPathToVisible(treepath[0]); } @@ -214,11 +210,4 @@ public class ComponentTree extends JTree { return new TreePath(components); } - public TreePath[] getAllSelectedTreePaths() { - return allSelectedTreePaths; - } - - public void setAllSelectedTreePaths(TreePath[] allSelectedTreePaths) { - this.allSelectedTreePaths = allSelectedTreePaths; - } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/mainframe/FormDesigner.java b/designer_form/src/com/fr/design/mainframe/FormDesigner.java index 3e29f4128..3aa9e24ee 100644 --- a/designer_form/src/com/fr/design/mainframe/FormDesigner.java +++ b/designer_form/src/com/fr/design/mainframe/FormDesigner.java @@ -1008,7 +1008,7 @@ public class FormDesigner extends TargetComponent implements TreeSelection @Override public void valueChanged(TreeSelectionEvent e) { ComponentTree tree = (ComponentTree) e.getSource(); - TreePath[] paths = tree.getAllSelectedTreePaths(); + TreePath[] paths = tree.getSelectionPaths(); if (paths != null) { ArrayList selected = new ArrayList(); diff --git a/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java b/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java index 258fd15d3..62c9aa067 100644 --- a/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java +++ b/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java @@ -3,24 +3,22 @@ package com.fr.design.mainframe.widget; /** * Created by xiaxiang on 2016/9/30. */ +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; +import javax.swing.plaf.*; +import javax.swing.plaf.basic.*; +import javax.swing.plaf.metal.*; +import javax.swing.tree.*; -import com.fr.design.designer.beans.AdapterBus; +import com.fr.design.designer.beans.*; import com.fr.design.designer.beans.events.DesignerEditListener; import com.fr.design.designer.beans.events.DesignerEvent; import com.fr.design.designer.creator.XCreator; import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.mainframe.ComponentTree; -import com.sun.java.swing.plaf.motif.MotifComboBoxUI; -import com.sun.java.swing.plaf.windows.WindowsComboBoxUI; - -import javax.swing.*; -import javax.swing.plaf.ComboBoxUI; -import javax.swing.plaf.basic.ComboPopup; -import javax.swing.plaf.metal.MetalComboBoxUI; -import javax.swing.tree.TreeCellRenderer; -import javax.swing.tree.TreePath; -import java.awt.*; -import java.awt.event.*; +import com.sun.java.swing.plaf.motif.*; +import com.sun.java.swing.plaf.windows.*; /** * 控件树下拉列表框 @@ -67,7 +65,6 @@ public class UITreeComboBox extends JComboBox{ * @param o Object */ public void setSelectedItem(Object o){ - tree.setSelectionPath((TreePath)o); getModel().setSelectedItem(o); } From ef7543f1f80883d090eb49c2d95fe8d4e698116e Mon Sep 17 00:00:00 2001 From: plough Date: Thu, 27 Apr 2017 17:48:19 +0800 Subject: [PATCH 310/343] =?UTF-8?q?REPORT-2343=20[=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E8=B4=A8=E9=87=8F]=3D>=E5=A4=9A=E6=AC=A1=E5=87=BA=E7=8E=B0?= =?UTF-8?q?=E7=9A=84=E5=AD=97=E7=AC=A6=E4=B8=B2=E6=94=B9=E4=B8=BA=E5=B8=B8?= =?UTF-8?q?=E9=87=8F=EF=BC=9B=E7=BB=9F=E4=B8=80=E5=91=BD=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../templateinfo/TemplateInfoCollector.java | 174 +++++++++--------- 1 file changed, 88 insertions(+), 86 deletions(-) diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java index b5bac38d9..1a06d82c3 100644 --- a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java @@ -39,23 +39,25 @@ public class TemplateInfoCollector implements Serializable, XM private static final String XML_DESIGNER_OPEN_DATE = "DesignerOpenDate"; private static final String XML_TEMPLATE_INFO_LIST = "TemplateInfoList"; private static final String XML_TEMPLATE_INFO = "TemplateInfo"; - private static final String XML_PROCESS_MAP = "ProcessMap"; - private static final String XML_CONSUMING_MAP = "ConsumingMap"; - private static final String ATTR_DAY_COUNT = "dayCount"; + private static final String XML_PROCESS_MAP = "processMap"; + private static final String XML_CONSUMING_MAP = "consumingMap"; + private static final String ATTR_DAY_COUNT = "day_count"; private static final String ATTR_TEMPLATE_ID = "templateID"; private static final String ATTR_PROCESS = "process"; - private static final String ATTR_FLOAT_COUNT = "floatCount"; - private static final String ATTR_WIDGET_COUNT = "widgetCount"; - private static final String ATTR_CELL_COUNT = "cellCount"; - private static final String ATTR_BLOCK_COUNT = "blockCount"; - private static final String ATTR_REPORT_TYPE = "reportType"; + private static final String ATTR_FLOAT_COUNT = "float_count"; + private static final String ATTR_WIDGET_COUNT = "widget_count"; + private static final String ATTR_CELL_COUNT = "cell_count"; + private static final String ATTR_BLOCK_COUNT = "block_count"; + private static final String ATTR_REPORT_TYPE = "report_type"; private static final String ATTR_ACTIVITYKEY = "activitykey"; - private static final String ATTR_JAR_TIME = "jarTime"; - private static final String ATTR_CREATE_TIME = "createTime"; + private static final String ATTR_JAR_TIME = "jar_time"; + private static final String ATTR_CREATE_TIME = "create_time"; private static final String ATTR_UUID = "uuid"; - private static final String ATTR_TIME_CONSUME = "timeConsume"; + private static final String ATTR_TIME_CONSUME = "time_consume"; private static final String ATTR_VERSION = "version"; private static final String ATTR_USERNAME = "username"; + private static final String JSON_CONSUMING_MAP = "jsonConsumingMap"; + private static final String JSON_PROCESS_MAP = "jsonProcessMap"; @SuppressWarnings("unchecked") @@ -159,8 +161,8 @@ public class TemplateInfoCollector implements Serializable, XM */ @SuppressWarnings("unchecked") public String loadProcess(T t) { - HashMap processMap = (HashMap) templateInfoList.get(t.getTemplateID()).get("processMap"); - return (String)processMap.get("process"); + HashMap processMap = (HashMap) templateInfoList.get(t.getTemplateID()).get(XML_PROCESS_MAP); + return (String)processMap.get(ATTR_PROCESS); } /** @@ -216,8 +218,8 @@ public class TemplateInfoCollector implements Serializable, XM if (designerOpenFirstTime()) { for (String key : templateInfoList.keySet()) { HashMap templateInfo = templateInfoList.get(key); - int dayCount = (int)templateInfo.get("day_count") + 1; - templateInfo.put("day_count", dayCount); + int dayCount = (int)templateInfo.get(ATTR_DAY_COUNT) + 1; + templateInfo.put(ATTR_DAY_COUNT, dayCount); } setDesignerOpenDate(); } @@ -241,20 +243,20 @@ public class TemplateInfoCollector implements Serializable, XM if (inList(t)) { // 已有记录 templateInfo = templateInfoList.get(t.getTemplateID()); // 更新 conusmingMap - HashMap consumingMap = (HashMap) templateInfo.get("consumingMap"); - timeConsume += (long)consumingMap.get("time_consume"); // 加上之前的累计编辑时间 - consumingMap.put("time_consume", timeConsume); + HashMap consumingMap = (HashMap) templateInfo.get(XML_CONSUMING_MAP); + timeConsume += (long)consumingMap.get(ATTR_TIME_CONSUME); // 加上之前的累计编辑时间 + consumingMap.put(ATTR_TIME_CONSUME, timeConsume); } else { // 新增 templateInfo = new HashMap<>(); - templateInfo.put("consumingMap", getNewConsumingMap(templateID, openTime, timeConsume)); + templateInfo.put(XML_CONSUMING_MAP, getNewConsumingMap(templateID, openTime, timeConsume)); } // 直接覆盖 processMap - templateInfo.put("processMap", getProcessMap(templateID, jt)); + templateInfo.put(XML_PROCESS_MAP, getProcessMap(templateID, jt)); // 保存模板时,让 day_count 归零 - templateInfo.put("day_count", 0); + templateInfo.put(ATTR_DAY_COUNT, 0); templateInfoList.put(templateID, templateInfo); @@ -271,14 +273,14 @@ public class TemplateInfoCollector implements Serializable, XM String createTime = new SimpleDateFormat("yyyy-MM-dd HH:mm").format(Calendar.getInstance().getTime()); String jarTime = GeneralUtils.readBuildNO(); String version = ProductConstants.VERSION; - consumingMap.put("username", username); - consumingMap.put("uuid", uuid); - consumingMap.put("activitykey", activitykey); - consumingMap.put("templateID", templateID); - consumingMap.put("create_time", createTime); - consumingMap.put("time_consume", timeConsume); - consumingMap.put("jar_time", jarTime); - consumingMap.put("version", version); + consumingMap.put(ATTR_USERNAME, username); + consumingMap.put(ATTR_UUID, uuid); + consumingMap.put(ATTR_ACTIVITYKEY, activitykey); + consumingMap.put(ATTR_TEMPLATE_ID, templateID); + consumingMap.put(ATTR_CREATE_TIME, createTime); + consumingMap.put(ATTR_TIME_CONSUME, timeConsume); + consumingMap.put(ATTR_JAR_TIME, jarTime); + consumingMap.put(ATTR_VERSION, version); return consumingMap; } @@ -286,15 +288,15 @@ public class TemplateInfoCollector implements Serializable, XM private HashMap getProcessMap(String templateID, JTemplate jt) { HashMap processMap = new HashMap<>(); - processMap.put("templateID", templateID); - processMap.put("process", jt.getProcess()); + processMap.put(ATTR_TEMPLATE_ID, templateID); + processMap.put(ATTR_PROCESS, jt.getProcess()); TemplateProcessInfo info = jt.getProcessInfo(); - processMap.put("report_type", info.getReportType()); - processMap.put("cell_count", info.getCellCount()); - processMap.put("float_count", info.getFloatCount()); - processMap.put("block_count", info.getBlockCount()); - processMap.put("widget_count", info.getWidgetCount()); + processMap.put(ATTR_REPORT_TYPE, info.getReportType()); + processMap.put(ATTR_CELL_COUNT, info.getCellCount()); + processMap.put(ATTR_FLOAT_COUNT, info.getFloatCount()); + processMap.put(ATTR_BLOCK_COUNT, info.getBlockCount()); + processMap.put(ATTR_WIDGET_COUNT, info.getWidgetCount()); return processMap; } @@ -308,11 +310,11 @@ public class TemplateInfoCollector implements Serializable, XM String processUrl = SiteCenter.getInstance().acquireUrlByKind("tempinfo.process") + "/single"; ArrayList> completeTemplatesInfo = getCompleteTemplatesInfo(); for (HashMap templateInfo : completeTemplatesInfo) { - String jsonConsumingMap = templateInfo.get("jsonConsumingMap"); - String jsonProcessMap = templateInfo.get("jsonProcessMap"); + String jsonConsumingMap = templateInfo.get(JSON_CONSUMING_MAP); + String jsonProcessMap = templateInfo.get(JSON_PROCESS_MAP); if (sendSingleTemplateInfo(consumingUrl, jsonConsumingMap) && sendSingleTemplateInfo(processUrl, jsonProcessMap)) { // 清空记录 - removeFromTemplateInfoList(templateInfo.get("templateID")); + removeFromTemplateInfoList(templateInfo.get(ATTR_TEMPLATE_ID)); } } saveInfo(); @@ -350,21 +352,21 @@ public class TemplateInfoCollector implements Serializable, XM ArrayList testTemplateKeys = new ArrayList<>(); // 保存测试模板的key for (String key : templateInfoList.keySet()) { HashMap templateInfo = templateInfoList.get(key); - if ((int)templateInfo.get("day_count") <= COMPLETE_DAY_COUNT) { // 未完成模板 + if ((int)templateInfo.get(ATTR_DAY_COUNT) <= COMPLETE_DAY_COUNT) { // 未完成模板 continue; } if (isTestTemplate(templateInfo)) { testTemplateKeys.add(key); continue; } - HashMap consumingMap = (HashMap) templateInfo.get("consumingMap"); - HashMap processMap = (HashMap) templateInfo.get("processMap"); + HashMap consumingMap = (HashMap) templateInfo.get(XML_CONSUMING_MAP); + HashMap processMap = (HashMap) templateInfo.get(XML_PROCESS_MAP); String jsonConsumingMap = new JSONObject(consumingMap).toString(); String jsonProcessMap = new JSONObject(processMap).toString(); HashMap jsonTemplateInfo = new HashMap<>(); - jsonTemplateInfo.put("jsonConsumingMap", jsonConsumingMap); - jsonTemplateInfo.put("jsonProcessMap", jsonProcessMap); - jsonTemplateInfo.put("templateID", key); + jsonTemplateInfo.put(JSON_CONSUMING_MAP, jsonConsumingMap); + jsonTemplateInfo.put(JSON_PROCESS_MAP, jsonProcessMap); + jsonTemplateInfo.put(ATTR_TEMPLATE_ID, key); completeTemplatesInfo.add(jsonTemplateInfo); } // 删除测试模板 @@ -380,12 +382,12 @@ public class TemplateInfoCollector implements Serializable, XM @SuppressWarnings("unchecked") private boolean isTestTemplate(HashMap templateInfo) { - HashMap processMap = (HashMap) templateInfo.get("processMap"); - int reportType = (int)processMap.get("report_type"); - int cellCount = (int)processMap.get("cell_count"); - int floatCount = (int)processMap.get("float_count"); - int blockCount = (int)processMap.get("block_count"); - int widgetCount = (int)processMap.get("widget_count"); + HashMap processMap = (HashMap) templateInfo.get(XML_PROCESS_MAP); + int reportType = (int)processMap.get(ATTR_REPORT_TYPE); + int cellCount = (int)processMap.get(ATTR_CELL_COUNT); + int floatCount = (int)processMap.get(ATTR_FLOAT_COUNT); + int blockCount = (int)processMap.get(ATTR_BLOCK_COUNT); + int widgetCount = (int)processMap.get(ATTR_WIDGET_COUNT); boolean isTestTemplate = false; if (reportType == 0) { // 普通报表 isTestTemplate = cellCount <= VALID_CELL_COUNT && floatCount <= 1 && widgetCount <= VALID_WIDGET_COUNT; @@ -457,10 +459,10 @@ public class TemplateInfoCollector implements Serializable, XM @SuppressWarnings("unchecked") public TemplateInfo(HashMap templateInfo) { - this.dayCount = (int)templateInfo.get("day_count"); - this.processMap = (HashMap) templateInfo.get("processMap"); - this.consumingMap = (HashMap) templateInfo.get("consumingMap"); - this.templateID = (String) processMap.get("templateID"); + this.dayCount = (int)templateInfo.get(ATTR_DAY_COUNT); + this.processMap = (HashMap) templateInfo.get(XML_PROCESS_MAP); + this.consumingMap = (HashMap) templateInfo.get(XML_CONSUMING_MAP); + this.templateID = (String) processMap.get(ATTR_TEMPLATE_ID); } public TemplateInfo() {} @@ -471,9 +473,9 @@ public class TemplateInfoCollector implements Serializable, XM public HashMap getTemplateInfo() { HashMap templateInfo = new HashMap<>(); - templateInfo.put("processMap", processMap); - templateInfo.put("consumingMap", consumingMap); - templateInfo.put("day_count", dayCount); + templateInfo.put(XML_PROCESS_MAP, processMap); + templateInfo.put(XML_CONSUMING_MAP, consumingMap); + templateInfo.put(ATTR_DAY_COUNT, dayCount); return templateInfo; } @@ -493,24 +495,24 @@ public class TemplateInfoCollector implements Serializable, XM private void writeProcessMap(XMLPrintWriter writer) { writer.startTAG(XML_PROCESS_MAP); - writer.attr(ATTR_PROCESS, (String)processMap.get("process")); - writer.attr(ATTR_FLOAT_COUNT, (int)processMap.get("float_count")); - writer.attr(ATTR_WIDGET_COUNT, (int)processMap.get("widget_count")); - writer.attr(ATTR_CELL_COUNT, (int)processMap.get("cell_count")); - writer.attr(ATTR_BLOCK_COUNT, (int)processMap.get("block_count")); - writer.attr(ATTR_REPORT_TYPE, (int)processMap.get("report_type")); + writer.attr(ATTR_PROCESS, (String)processMap.get(ATTR_PROCESS)); + writer.attr(ATTR_FLOAT_COUNT, (int)processMap.get(ATTR_FLOAT_COUNT)); + writer.attr(ATTR_WIDGET_COUNT, (int)processMap.get(ATTR_WIDGET_COUNT)); + writer.attr(ATTR_CELL_COUNT, (int)processMap.get(ATTR_CELL_COUNT)); + writer.attr(ATTR_BLOCK_COUNT, (int)processMap.get(ATTR_BLOCK_COUNT)); + writer.attr(ATTR_REPORT_TYPE, (int)processMap.get(ATTR_REPORT_TYPE)); writer.end(); } private void writeConsumingMap(XMLPrintWriter writer) { writer.startTAG(XML_CONSUMING_MAP); - writer.attr(ATTR_ACTIVITYKEY, (String)consumingMap.get("activitykey")); - writer.attr(ATTR_JAR_TIME, (String)consumingMap.get("jar_time")); - writer.attr(ATTR_CREATE_TIME, (String)consumingMap.get("create_time")); - writer.attr(ATTR_UUID, (String)consumingMap.get("uuid")); - writer.attr(ATTR_TIME_CONSUME, (long)consumingMap.get("time_consume")); - writer.attr(ATTR_VERSION, (String)consumingMap.get("version")); - writer.attr(ATTR_USERNAME, (String)consumingMap.get("username")); + writer.attr(ATTR_ACTIVITYKEY, (String)consumingMap.get(ATTR_ACTIVITYKEY)); + writer.attr(ATTR_JAR_TIME, (String)consumingMap.get(ATTR_JAR_TIME)); + writer.attr(ATTR_CREATE_TIME, (String)consumingMap.get(ATTR_CREATE_TIME)); + writer.attr(ATTR_UUID, (String)consumingMap.get(ATTR_UUID)); + writer.attr(ATTR_TIME_CONSUME, (long)consumingMap.get(ATTR_TIME_CONSUME)); + writer.attr(ATTR_VERSION, (String)consumingMap.get(ATTR_VERSION)); + writer.attr(ATTR_USERNAME, (String)consumingMap.get(ATTR_USERNAME)); writer.end(); } @@ -522,22 +524,22 @@ public class TemplateInfoCollector implements Serializable, XM try { String name = reader.getTagName(); if (XML_PROCESS_MAP.equals(name)) { - processMap.put("process", reader.getAttrAsString(ATTR_PROCESS, StringUtils.EMPTY)); - processMap.put("float_count", reader.getAttrAsInt(ATTR_FLOAT_COUNT, 0)); - processMap.put("widget_count", reader.getAttrAsInt(ATTR_WIDGET_COUNT, 0)); - processMap.put("cell_count", reader.getAttrAsInt(ATTR_CELL_COUNT, 0)); - processMap.put("block_count", reader.getAttrAsInt(ATTR_BLOCK_COUNT, 0)); - processMap.put("report_type", reader.getAttrAsInt(ATTR_REPORT_TYPE, 0)); - processMap.put("templateID", templateID); + processMap.put(ATTR_PROCESS, reader.getAttrAsString(ATTR_PROCESS, StringUtils.EMPTY)); + processMap.put(ATTR_FLOAT_COUNT, reader.getAttrAsInt(ATTR_FLOAT_COUNT, 0)); + processMap.put(ATTR_WIDGET_COUNT, reader.getAttrAsInt(ATTR_WIDGET_COUNT, 0)); + processMap.put(ATTR_CELL_COUNT, reader.getAttrAsInt(ATTR_CELL_COUNT, 0)); + processMap.put(ATTR_BLOCK_COUNT, reader.getAttrAsInt(ATTR_BLOCK_COUNT, 0)); + processMap.put(ATTR_REPORT_TYPE, reader.getAttrAsInt(ATTR_REPORT_TYPE, 0)); + processMap.put(ATTR_TEMPLATE_ID, templateID); } else if(XML_CONSUMING_MAP.equals(name)){ - consumingMap.put("activitykey", reader.getAttrAsString(ATTR_ACTIVITYKEY, StringUtils.EMPTY)); - consumingMap.put("jar_time", reader.getAttrAsString(ATTR_JAR_TIME, StringUtils.EMPTY)); - consumingMap.put("create_time", reader.getAttrAsString(ATTR_CREATE_TIME, StringUtils.EMPTY)); - consumingMap.put("templateID", templateID); - consumingMap.put("uuid", reader.getAttrAsString(ATTR_UUID, StringUtils.EMPTY)); - consumingMap.put("time_consume", reader.getAttrAsLong(ATTR_TIME_CONSUME, 0)); - consumingMap.put("version", reader.getAttrAsString(ATTR_VERSION, "8.0")); - consumingMap.put("username", reader.getAttrAsString(ATTR_USERNAME, StringUtils.EMPTY)); + consumingMap.put(ATTR_ACTIVITYKEY, reader.getAttrAsString(ATTR_ACTIVITYKEY, StringUtils.EMPTY)); + consumingMap.put(ATTR_JAR_TIME, reader.getAttrAsString(ATTR_JAR_TIME, StringUtils.EMPTY)); + consumingMap.put(ATTR_CREATE_TIME, reader.getAttrAsString(ATTR_CREATE_TIME, StringUtils.EMPTY)); + consumingMap.put(ATTR_TEMPLATE_ID, templateID); + consumingMap.put(ATTR_UUID, reader.getAttrAsString(ATTR_UUID, StringUtils.EMPTY)); + consumingMap.put(ATTR_TIME_CONSUME, reader.getAttrAsLong(ATTR_TIME_CONSUME, 0)); + consumingMap.put(ATTR_VERSION, reader.getAttrAsString(ATTR_VERSION, "8.0")); + consumingMap.put(ATTR_USERNAME, reader.getAttrAsString(ATTR_USERNAME, StringUtils.EMPTY)); } } catch (Exception ex) { // 什么也不做,使用默认值 From a574cb0b6de6a0c358581086c4e659707f2f8182 Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 28 Apr 2017 10:10:50 +0800 Subject: [PATCH 311/343] =?UTF-8?q?REPORT-2343=20[=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E8=B4=A8=E9=87=8F]=3D>=E5=8E=BB=E6=8E=89=E5=A4=9A=E4=BD=99?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../templateinfo/TemplateInfoCollector.java | 33 +------------------ 1 file changed, 1 insertion(+), 32 deletions(-) diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java index 1a06d82c3..17d785a43 100644 --- a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java @@ -8,8 +8,6 @@ import com.fr.design.mainframe.JTemplate; import com.fr.env.RemoteEnv; import com.fr.general.*; import com.fr.general.http.HttpClient; -import com.fr.json.JSONArray; -import com.fr.json.JSONException; import com.fr.stable.*; import com.fr.stable.xml.*; import com.fr.third.javax.xml.stream.XMLStreamException; @@ -19,7 +17,6 @@ import java.io.*; import java.text.SimpleDateFormat; import java.util.*; import java.util.HashMap; -import java.util.Iterator; /** * 做模板的过程和耗时收集,辅助类 @@ -177,40 +174,13 @@ public class TemplateInfoCollector implements Serializable, XM */ private void saveInfo() { try { - ByteArrayOutputStream out = new ByteArrayOutputStream(); + FileOutputStream out = new FileOutputStream(getInfoFile()); XMLTools.writeOutputStreamXML(this, out); - out.flush(); - out.close(); - String fileContent = new String(out.toByteArray(), EncodeConstants.ENCODING_UTF_8); - writeContentToFile(fileContent, getInfoFile()); } catch (Exception ex) { FRLogger.getLogger().error(ex.getMessage()); } } - /** - * 将文件内容写到输出流中 - */ - private static void writeContentToFile(String fileContent, File file){ - BufferedWriter bw = null; - try { - FileOutputStream fos = new FileOutputStream(file); - OutputStreamWriter osw = new OutputStreamWriter(fos, EncodeConstants.ENCODING_UTF_8); - bw = new BufferedWriter(osw); - bw.write(fileContent); - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); - } finally { - if(bw != null){ - try { - bw.close(); - } catch (IOException e) { - } - } - } - - } - /** * 更新 day_count:打开设计器却未编辑模板的连续日子 */ @@ -258,7 +228,6 @@ public class TemplateInfoCollector implements Serializable, XM // 保存模板时,让 day_count 归零 templateInfo.put(ATTR_DAY_COUNT, 0); - templateInfoList.put(templateID, templateInfo); saveInfo(); // 每次更新之后,都同步到暂存文件中 From 589725a8dd2b624c33cd78fa0fe93c65aab3ede5 Mon Sep 17 00:00:00 2001 From: zhouping Date: Fri, 28 Apr 2017 11:39:11 +0800 Subject: [PATCH 312/343] =?UTF-8?q?REPORT-2526=20tab=E4=BA=A4=E4=BA=92?= =?UTF-8?q?=E6=94=B9=E8=89=AF=E5=90=8E=E7=BB=AD--tab=E9=A1=B5=E7=AD=BE?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E7=9A=84=E8=A7=86=E8=A7=89=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/images/control/tab/end.png | Bin 0 -> 248 bytes .../com/fr/design/images/control/tab/end_not.png | Bin 0 -> 250 bytes .../com/fr/design/images/control/tab/first.png | Bin 0 -> 264 bytes .../fr/design/images/control/tab/first_not.png | Bin 0 -> 264 bytes .../src/com/fr/design/images/control/tab/next.png | Bin 0 -> 265 bytes .../com/fr/design/images/control/tab/next_not.png | Bin 0 -> 257 bytes .../src/com/fr/design/images/control/tab/prev.png | Bin 0 -> 272 bytes .../com/fr/design/images/control/tab/prev_not.png | Bin 0 -> 273 bytes .../creator/cardlayout/TabMoveEndAction.java | 2 +- .../creator/cardlayout/TabMoveFirstAction.java | 2 +- .../creator/cardlayout/TabMoveNextAction.java | 2 +- .../creator/cardlayout/TabMovePrevAction.java | 2 +- 12 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 designer_base/src/com/fr/design/images/control/tab/end.png create mode 100644 designer_base/src/com/fr/design/images/control/tab/end_not.png create mode 100644 designer_base/src/com/fr/design/images/control/tab/first.png create mode 100644 designer_base/src/com/fr/design/images/control/tab/first_not.png create mode 100644 designer_base/src/com/fr/design/images/control/tab/next.png create mode 100644 designer_base/src/com/fr/design/images/control/tab/next_not.png create mode 100644 designer_base/src/com/fr/design/images/control/tab/prev.png create mode 100644 designer_base/src/com/fr/design/images/control/tab/prev_not.png diff --git a/designer_base/src/com/fr/design/images/control/tab/end.png b/designer_base/src/com/fr/design/images/control/tab/end.png new file mode 100644 index 0000000000000000000000000000000000000000..da848239fb915844ab692e00126c47b426ae3222 GIT binary patch literal 248 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xa#^NA%Cx&(BWL^R}n><|{Lo`H_ z6BdYwg;Nh8iy_jbVPyaU?_{`%x#&GH5{5YdIdiTD?b9?fr3r8w5U$9wQ|6jsS zJooSXhG6y(CRgQ<9`1|-HBNrVmkFjx#w~w*x#Rjv9fQaG_x>;?FS^jv)1&aOUco`| zc(!uDQ&Taqu*;iWZMXwV7%eSKnR25}oH(3ZWz_#yYL}XT{JW4DDglSh6|A{u>l&CU uNX06j$XvK1$MG6Rxt8K`#q32LybQm#JM&yh_nr%MJ%gvKpUXO@geCw>-B~~Y literal 0 HcmV?d00001 diff --git a/designer_base/src/com/fr/design/images/control/tab/end_not.png b/designer_base/src/com/fr/design/images/control/tab/end_not.png new file mode 100644 index 0000000000000000000000000000000000000000..1f08bdf35a524a08badaa957e60cca45f00c1eab GIT binary patch literal 250 zcmVPx#v`IukR45gtkTD9wAQXnRI0d{&X1fX=qH{avQfbbUJ(~s>j}RxdTA~D_5n4ff z`oHh}KLYUY5<d9a=|lu@qju;pLv|e4!Dcw|6c#~rRw3#1+ywg-_!){UZze z8CSbac(nOt&;5pN>I|mMAIwXb3$j`?k321Dl5%7dcw92Wl_is5-)85{y$mjAfWBey MboFyt=akR{0RC%dP5=M^ literal 0 HcmV?d00001 diff --git a/designer_base/src/com/fr/design/images/control/tab/first_not.png b/designer_base/src/com/fr/design/images/control/tab/first_not.png new file mode 100644 index 0000000000000000000000000000000000000000..50d048a19d3ac8d8058ea133b5d4bc61f37dcb8b GIT binary patch literal 264 zcmV+j0r&oiP)Px#!bwCyR45gtkg*NJAP_}OM3usWxW+9KlZ2^K$8|<=?+%a~k6>tQa%TlZWC)Rh zgzn(}IX7ec$)!lFqZ>JK7V3A1*0)idu@6LfA(~a5-j#5cq@Q=SKeID1;a&r9CL7sLC`a z5H+0hscqXH+=mQvTxCI=FveDJmjFvRu6UQOA{a!a=v5FO_$7KUs@4~cu1U}+2aLu5 O0000Px#!%0LzR45f=V4x-_-12`x!{!hTB8K*|5VlJQo^RYRd5u^Yp@gJM1$YP9)4A+1-wAYLA8c3Xwjc~o_PG|m#YjX;tFGmUybqxczU(?SMr?yR%v zjNf2t@!AN~08*HBwuomTOaqL@rxC?zFbyyoYp8;p#>m5C3iA(4F;!>)C^J2@0$neI P00000NkvXXu0mjf`8#cI literal 0 HcmV?d00001 diff --git a/designer_base/src/com/fr/design/images/control/tab/next_not.png b/designer_base/src/com/fr/design/images/control/tab/next_not.png new file mode 100644 index 0000000000000000000000000000000000000000..f002a0b9ee64e093045296811dcc45efe22c80d3 GIT binary patch literal 257 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xa#^NA%Cx&(BWL^R}yFFbTLo`I! zPT0tMSV6$m*Cn-6@vc zG4>qpZVjq>K1cuLx;&eY3Rb>pe_DdimwIxXd}&m1mu-&B*7v_Px#%1J~)R45f=V4wwPIP;&YaLfM%*vw|aCI}KM-u7SX(@TcaKxRBPHCQzkZT+9{ z?;peI|Nj}ZuxSE`u^>x;oc8er!!)1qN&beY< z6m=lADA92?o$(vc_5?;oMiBl6Qh*DfXoM*u#_3o!f($sB$9|2GhsP9X^Fo+`RG|S} W)<$1S+_;JW0000TW{_F literal 0 HcmV?d00001 diff --git a/designer_base/src/com/fr/design/images/control/tab/prev_not.png b/designer_base/src/com/fr/design/images/control/tab/prev_not.png new file mode 100644 index 0000000000000000000000000000000000000000..2530395fd12212d71f33bf72a2a15d8ac0c846d7 GIT binary patch literal 273 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xa#^NA%Cx&(BWL^R}r#)R9Lo`IU zPBi3eHsEpfoZ8vwy}|Hs7mK*&@}#z%?uy3A4XxY?jLeE#C&oCYF5$@)(>_=K&%X2d z-{juMFS6Ha=Y4C=PRf^P%ZQwIEb8|Y6P+8Sv57sI3>_96)t_n_E?z6u{a%|MdoIdR zx@TMNZSHT|^_K7+4v-0qT_ou8wd2-z+dYj-=LOr!Y}Q%5bPA`yT4B~j=Vb*0ynbFb znR-8d!tmbO%@8im(4huSngy?{h0iVZTeZS V2G{Tfdx73!@O1TaS?83{1OOMXY<~a% literal 0 HcmV?d00001 diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveEndAction.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveEndAction.java index 5da5dd1c7..e8c7c04b0 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveEndAction.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveEndAction.java @@ -14,7 +14,7 @@ public class TabMoveEndAction extends TabMoveAction { public TabMoveEndAction(FormDesigner t, XCardSwitchButton xCardSwitchButton) { super(t, xCardSwitchButton); this.setName(Inter.getLocText("FR-Designer-Move_Tab_End")); - this.setSmallIcon(IOUtils.readIcon("com/fr/design/images/control/rightright.png")); + this.setSmallIcon(IOUtils.readIcon("com/fr/design/images/control/tab/end.png")); } //改变Tab的索引号 diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveFirstAction.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveFirstAction.java index 26195b946..a2483c01e 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveFirstAction.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveFirstAction.java @@ -14,7 +14,7 @@ public class TabMoveFirstAction extends TabMoveAction { public TabMoveFirstAction(FormDesigner t, XCardSwitchButton xCardSwitchButton) { super(t, xCardSwitchButton); this.setName(Inter.getLocText("FR-Designer-Move_Tab_First")); - this.setSmallIcon(IOUtils.readIcon("com/fr/design/images/control/leftleft.png")); + this.setSmallIcon(IOUtils.readIcon("com/fr/design/images/control/tab/first.png")); } @Override diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveNextAction.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveNextAction.java index 10e796abc..f3e34208c 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveNextAction.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMoveNextAction.java @@ -14,7 +14,7 @@ public class TabMoveNextAction extends TabMoveAction { public TabMoveNextAction(FormDesigner t, XCardSwitchButton xCardSwitchButton) { super(t, xCardSwitchButton); this.setName(Inter.getLocText("FR-Designer-Move_Tab_Next")); - this.setSmallIcon(IOUtils.readIcon("com/fr/design/images/control/right.png")); + this.setSmallIcon(IOUtils.readIcon("com/fr/design/images/control/tab/next.png")); } @Override diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMovePrevAction.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMovePrevAction.java index 859a27eea..94f501c57 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMovePrevAction.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/TabMovePrevAction.java @@ -14,7 +14,7 @@ public class TabMovePrevAction extends TabMoveAction { public TabMovePrevAction(FormDesigner t, XCardSwitchButton xCardSwitchButton) { super(t, xCardSwitchButton); this.setName(Inter.getLocText("FR-Designer-Move_Tab_Prev")); - this.setSmallIcon(IOUtils.readIcon("com/fr/design/images/control/left.png")); + this.setSmallIcon(IOUtils.readIcon("com/fr/design/images/control/tab/prev.png")); } @Override From a4788f9f94b45e179af0f7bcce7f2039471c4372 Mon Sep 17 00:00:00 2001 From: neil Date: Tue, 2 May 2017 10:28:45 +0800 Subject: [PATCH 313/343] ct --- .../mainframe/templateinfo/TemplateInfoCollector.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java index f8e985f66..e5c6688ec 100644 --- a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java @@ -67,8 +67,16 @@ public class TemplateInfoCollector implements Serializable { try{ ObjectInputStream is = new ObjectInputStream(new FileInputStream(getInfoFile())); instance = (TemplateInfoCollector) is.readObject(); - } catch (Exception ex) { + } catch (FileNotFoundException ex) { + // 如果之前没有存储过,则创建新对象 instance = new TemplateInfoCollector(); + } catch (InvalidClassException ex) { + // 如果 TemplateInfoCollecor 类结构有改动,则放弃之前收集的数据(下次保存时覆盖) + // 这种情况主要在开发、测试过程中遇到,正式上线后不应该出现 + instance = new TemplateInfoCollector(); + } + catch (Exception ex) { + FRLogger.getLogger().error(ex.getMessage(), ex); } } return instance; From 22aa93fff25b1462f2ca5c84ef83f43c02f78d4f Mon Sep 17 00:00:00 2001 From: neil Date: Tue, 2 May 2017 10:34:53 +0800 Subject: [PATCH 314/343] 1 --- .../com/fr/design/mainframe/ConnectorHelper.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/designer_form/src/com/fr/design/mainframe/ConnectorHelper.java b/designer_form/src/com/fr/design/mainframe/ConnectorHelper.java index 93add3634..215ff8036 100644 --- a/designer_form/src/com/fr/design/mainframe/ConnectorHelper.java +++ b/designer_form/src/com/fr/design/mainframe/ConnectorHelper.java @@ -1,15 +1,18 @@ package com.fr.design.mainframe; +import java.awt.Color; +import java.awt.Graphics; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.event.MouseEvent; +import java.util.ArrayList; + +import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; +import com.fr.stable.Constants; import com.fr.base.GraphHelper; import com.fr.design.designer.beans.ConnectorCreator; import com.fr.design.designer.creator.XWAbsoluteLayout; import com.fr.form.ui.Connector; -import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; -import com.fr.stable.Constants; - -import java.awt.*; -import java.awt.event.MouseEvent; -import java.util.ArrayList; public class ConnectorHelper { //这个类是用来画连接线的,暂时用不到 From 89240801d5b1d94e66d95824c6d4499c8143e8fe Mon Sep 17 00:00:00 2001 From: neil Date: Tue, 2 May 2017 10:52:50 +0800 Subject: [PATCH 315/343] ct --- .../src/com/fr/design/mainframe/FormSelectionUtils.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java index b288ec202..7a03782c2 100644 --- a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java +++ b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java @@ -25,7 +25,6 @@ public class FormSelectionUtils { //组件重命名后缀 private static final String POSTFIX = "_c"; - private FormSelectionUtils() { } @@ -134,8 +133,10 @@ public class FormSelectionUtils { boolean xOut = x < 0 || x + copiedCreator.getWidth() / 2 + xoffset > container.getWidth(); boolean yOut = y < 0 || y + copiedCreator.getHeight() / 2 + yoffset > container.getHeight(); + boolean isEdge = (x - DELAY_X_Y == container.getWidth() - copiedCreator.getWidth() / 2 - xoffset) + && (y - DELAY_X_Y == container.getHeight() - copiedCreator.getHeight() / 2 - yoffset); + y = yOut ? container.getHeight() - copiedCreator.getHeight() / 2 - yoffset : y; - boolean isEdge = (x - DELAY_X_Y == container.getWidth() - copiedCreator.getWidth() / 2 - xoffset); if (xOut) { if (isEdge) { //向左偏移 From b828924647c4473a9c253c764c87700f2c664914 Mon Sep 17 00:00:00 2001 From: neil Date: Tue, 2 May 2017 10:53:07 +0800 Subject: [PATCH 316/343] ct --- .../designer/beans/ConnectorCreator.java | 9 +- .../adapters/layout/FRFitLayoutAdapter.java | 2306 +++++++++-------- .../design/designer/beans/location/Inner.java | 2 +- .../design/designer/creator/XElementCase.java | 10 +- .../designer/creator/XWAbsoluteLayout.java | 924 ++++--- .../design/designer/creator/XWFitLayout.java | 39 +- .../designer/creator/XWScaleLayout.java | 9 +- .../designer/creator/XWTitleLayout.java | 2 +- 8 files changed, 1647 insertions(+), 1654 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/beans/ConnectorCreator.java b/designer_form/src/com/fr/design/designer/beans/ConnectorCreator.java index ed83c12d6..ca9934416 100644 --- a/designer_form/src/com/fr/design/designer/beans/ConnectorCreator.java +++ b/designer_form/src/com/fr/design/designer/beans/ConnectorCreator.java @@ -1,12 +1,13 @@ package com.fr.design.designer.beans; -import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; -import com.fr.form.ui.container.WLayout; - -import java.awt.*; +import java.awt.Point; +import java.awt.Rectangle; import java.util.ArrayList; import java.util.PriorityQueue; +import com.fr.form.ui.container.WLayout; +import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; + public class ConnectorCreator { public static final int UNIT = 10; diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java index 74a69e525..03962df48 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java @@ -1,1183 +1,1185 @@ -/** - * - */ -package com.fr.design.designer.beans.adapters.layout; - -import com.fr.design.beans.GroupModel; -import com.fr.design.designer.beans.ConstraintsGroupModel; -import com.fr.design.designer.beans.HoverPainter; -import com.fr.design.designer.beans.painters.FRFitLayoutPainter; -import com.fr.design.designer.creator.XCreator; -import com.fr.design.designer.creator.XCreatorUtils; -import com.fr.design.designer.creator.XLayoutContainer; -import com.fr.design.designer.creator.XWFitLayout; -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.properties.FRFitLayoutConstraints; -import com.fr.design.designer.properties.FRFitLayoutPropertiesGroupModel; -import com.fr.design.utils.ComponentUtils; -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.cardlayout.WCardMainBorderLayout; -import com.fr.general.ComparatorUtils; - +/** + * + */ +package com.fr.design.designer.beans.adapters.layout; + +import com.fr.design.beans.GroupModel; +import com.fr.design.designer.beans.ConstraintsGroupModel; +import com.fr.design.designer.beans.HoverPainter; +import com.fr.design.designer.beans.painters.FRFitLayoutPainter; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XCreatorUtils; +import com.fr.design.designer.creator.XLayoutContainer; +import com.fr.design.designer.creator.XWFitLayout; +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.properties.FRFitLayoutConstraints; +import com.fr.design.designer.properties.FRFitLayoutPropertiesGroupModel; +import com.fr.design.file.HistoryTemplateListPane; +import com.fr.design.mainframe.JForm; +import com.fr.design.utils.ComponentUtils; +import com.fr.form.ui.LayoutBorderStyle; +import com.fr.form.ui.container.WLayout; +import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; +import com.fr.general.ComparatorUtils; +import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; + import java.awt.*; import java.util.ArrayList; import java.util.List; -/** - * 自适应布局的容器适配器 - * - * @author jim - * @date 2014-6-24 - */ -public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { - - public static final String WIDGETPANEICONPATH = "/com/fr/web/images/form/resources/layout_absolute.png"; - private static final int DEPENDING_SCOPE = 3; - private HoverPainter painter; - //区分拖拽和编辑宽高 - private boolean isEdit; - - public boolean isEdit() { - return isEdit; - } - - public void setEdit(boolean edit) { - isEdit = edit; - } - - /** - * 构造函数 - * - * @param container XWFitLayout容器 - */ - public FRFitLayoutAdapter(XLayoutContainer container) { - super(container); - painter = new FRFitLayoutPainter(container); - initMinSize(); - } - - private void initMinSize() { - XWFitLayout layout = (XWFitLayout) container; - minWidth = layout.getActualMinWidth(); - minHeight = layout.getActualMinHeight(); - actualVal = layout.getAcualInterval(); - margin = layout.toData().getMargin(); - } - - @Override - public HoverPainter getPainter() { - return painter; - } - - /** - * 返回布局自身属性,方便一些特有设置在layout刷新时处理 - */ - @Override - public GroupModel getLayoutProperties() { - XWFitLayout xfl = (XWFitLayout) container; - return new FRFitLayoutPropertiesGroupModel(xfl); - } - - /** - * 添加组件 - * - * @param child 待添加的组件 - * @param x 坐标x - * @param y 坐标y - */ - @Override - public void addComp(XCreator child, int x, int y) { - fix(child, x, y); - if (child.shouldScaleCreator() || child.hasTitleStyle()) { - addParentCreator(child); - } else { - container.add(child, child.toData().getWidgetName()); - } - XWFitLayout layout = (XWFitLayout) container; - // 更新对应的BoundsWidget - layout.updateBoundsWidget(); - updateCreatorBackBound(); - } - - public void updateCreatorBackBound() { - for (int i = 0, size = container.getComponentCount(); i < size; i++) { - XCreator creator = (XCreator) container.getComponent(i); - creator.updateChildBound(minHeight); - creator.setBackupBound(creator.getBounds()); - } - } - - - private void addParentCreator(XCreator child) { - XLayoutContainer parentPanel = child.initCreatorWrapper(minHeight); - container.add(parentPanel, child.toData().getWidgetName()); - } - - /** - * 能否对应位置放置当前组件 - * - * @param creator 组件 - * @param x 添加的位置x,该位置是相对于container的 - * @param y 添加的位置y,该位置是相对于container的 - * @return 是否可以放置 - */ - @Override - public boolean accept(XCreator creator, int x, int y) { - // 计算是否能拖入鼠标区域时,会用到fix 的方法 - isFindRelatedComps = false; - //拖入组件判断时,先判断是否为交叉点区域,其次三等分区域,再次平分区域 - Component comp = container.getComponentAt(x, y); +/** + * 自适应布局的容器适配器 + * + * @author jim + * @date 2014-6-24 + */ +public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { + + public static final String WIDGETPANEICONPATH = "/com/fr/web/images/form/resources/layout_absolute.png"; + private static final int DEPENDING_SCOPE = 3; + private HoverPainter painter; + //区分拖拽和编辑宽高 + private boolean isEdit; + + public boolean isEdit() { + return isEdit; + } + + public void setEdit(boolean edit) { + isEdit = edit; + } + + /** + * 构造函数 + * + * @param container XWFitLayout容器 + */ + public FRFitLayoutAdapter(XLayoutContainer container) { + super(container); + painter = new FRFitLayoutPainter(container); + initMinSize(); + } + + private void initMinSize() { + XWFitLayout layout = (XWFitLayout) container; + minWidth = layout.getActualMinWidth(); + minHeight = layout.getActualMinHeight(); + actualVal = layout.getAcualInterval(); + margin = layout.toData().getMargin(); + } + + @Override + public HoverPainter getPainter() { + return painter; + } + + /** + * 返回布局自身属性,方便一些特有设置在layout刷新时处理 + */ + @Override + public GroupModel getLayoutProperties() { + XWFitLayout xfl = (XWFitLayout) container; + return new FRFitLayoutPropertiesGroupModel(xfl); + } + + /** + * 添加组件 + * + * @param child 待添加的组件 + * @param x 坐标x + * @param y 坐标y + */ + @Override + public void addComp(XCreator child, int x, int y) { + fix(child, x, y); + if (child.shouldScaleCreator() || child.hasTitleStyle()) { + addParentCreator(child); + } else { + container.add(child, child.toData().getWidgetName()); + } + XWFitLayout layout = (XWFitLayout) container; + // 更新对应的BoundsWidget + layout.updateBoundsWidget(); + updateCreatorBackBound(); + } + + public void updateCreatorBackBound() { + for (int i = 0, size = container.getComponentCount(); i < size; i++) { + XCreator creator = (XCreator) container.getComponent(i); + creator.updateChildBound(minHeight); + creator.setBackupBound(creator.getBounds()); + } + } + + + private void addParentCreator(XCreator child) { + XLayoutContainer parentPanel = child.initCreatorWrapper(minHeight); + container.add(parentPanel, child.toData().getWidgetName()); + } + + /** + * 能否对应位置放置当前组件 + * + * @param creator 组件 + * @param x 添加的位置x,该位置是相对于container的 + * @param y 添加的位置y,该位置是相对于container的 + * @return 是否可以放置 + */ + @Override + public boolean accept(XCreator creator, int x, int y) { + // 计算是否能拖入鼠标区域时,会用到fix 的方法 + isFindRelatedComps = false; + //拖入组件判断时,先判断是否为交叉点区域,其次三等分区域,再次平分区域 + Component comp = container.getComponentAt(x, y); if (comp == null || checkInterval(comp)) { - return false; - } - //如果当前处于边缘地带, 那么就把他贴到父容器上 - boolean isMatchEdge = matchEdge(x, y); - - int componentHeight = comp.getHeight(); - int componentWidth = comp.getWidth(); - //上半部分高度 - int upHeight = (int) (componentHeight * TOP_HALF) + comp.getY(); - //下半部分高度 - int downHeight = (int) (componentHeight * BOTTOM_HALF) + comp.getY(); - - //布局控件要先判断是不是可编辑 - XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer((XCreator) comp).getTopLayout(); - if (topLayout != null && !isMatchEdge && !topLayout.isEditable()) { - return false; - } - - if (isCrossPointArea(comp, x, y)) { - return canAcceptWhileCrossPoint(comp, x, y); - } - - if (isTrisectionArea(comp, x, y)) { - return canAcceptWhileTrisection(comp, x, y); - } - - boolean horizonValid = componentWidth >= minWidth * 2 + actualVal; - boolean verticalValid = componentHeight >= minHeight * 2 + actualVal; - return y > upHeight && y < downHeight ? horizonValid : verticalValid; - } - - // 间隔区域 - private boolean checkInterval(Component comp) { - return container.getComponentCount() > 0 && comp == container; - } - - /** - * 是否在组件边缘 - * - * @param x 横坐标 - * @param y 纵坐标 - * @return 是否在组件边缘 - */ - public boolean matchEdge(int x, int y) { - if (intersectsEdge(x, y, container)) { - //寻找最近的fit, 在边缘地段添加的控件, 将其送给该fit - XLayoutContainer parent = container.findNearestFit(); - container = parent != null ? parent : container; - return true; - } - return false; - } - - /** - * 是否在组件边缘 - * - * @param x 横坐标 - * @param y 纵坐标 - * @param container 参照组件 - * @return 是否在组件边缘 - */ - //是否包含于边缘地段, 按顺序上, 下, 左, 右检测 - public boolean intersectsEdge(int x, int y, XLayoutContainer container) { - int containerX = container.getX(); - int containerY = container.getY(); - int containerWidth = container.getWidth(); - int containerHeight = container.getHeight(); - - // 当前坐标点 - Rectangle currentXY = new Rectangle(x, y, 1, 1); - // 上边缘 - Rectangle upEdge = new Rectangle(containerX, containerY, containerWidth, BORDER_PROPORTION); - if (upEdge.intersects(currentXY)) { - return true; - } - - int bottomY = containerY + containerHeight - BORDER_PROPORTION; - // 下边缘 - Rectangle bottomEdge = new Rectangle(containerX, bottomY, containerWidth, BORDER_PROPORTION); - if (bottomEdge.intersects(currentXY)) { - return true; - } - - //左右边缘的高度 -10*2 是为了不和上下边缘重合 - int verticalHeight = containerHeight - BORDER_PROPORTION * 2; - int leftY = containerY + BORDER_PROPORTION; - // 左边缘 - Rectangle leftEdge = new Rectangle(containerX, leftY, BORDER_PROPORTION, verticalHeight); - if (leftEdge.intersects(currentXY)) { - return true; - } - - int rightY = containerY + BORDER_PROPORTION; - int rightX = containerX + containerWidth - BORDER_PROPORTION; - // 右边缘 - Rectangle rightEdge = new Rectangle(rightX, rightY, BORDER_PROPORTION, verticalHeight); - return rightEdge.intersects(currentXY); - } - - /** - * 交叉点区域时,能否对应位置放入组件 - */ - protected boolean canAcceptWhileCrossPoint(Component comp, int x, int y) { - return super.canAcceptWhileCrossPoint(comp, x, y); - } - - protected boolean canAcceptWhileTrisection(Component comp, int x, int y) { - return super.canAcceptWhileTrisection(comp, x, y); - } - - /** - * 判断是否鼠标在组件的三等分区域,如果组件在布局管理器中间,上下左右都可能会三等分 - * - * @param parentComp 鼠标所在区域的组件 - * @param x 坐标x - * @param y 坐标y - * @return 是则返回true - */ - public boolean isTrisectionArea(Component parentComp, int x, int y) { - return super.isTrisectionArea(parentComp, x, y); - } - - /** - * 是否为组件交叉点区域 或者是相邻三组建中间点 - * - * @param currentComp 当前组件 - * @param x 坐标x - * @param y 坐标y - * @return 是则返回true - */ - public boolean isCrossPointArea(Component currentComp, int x, int y) { - return super.isCrossPointArea(currentComp, x, y); - } - - + return false; + } + //如果当前处于边缘地带, 那么就把他贴到父容器上 + boolean isMatchEdge = matchEdge(x, y); + + int componentHeight = comp.getHeight(); + int componentWidth = comp.getWidth(); + //上半部分高度 + int upHeight = (int) (componentHeight * TOP_HALF) + comp.getY(); + //下半部分高度 + int downHeight = (int) (componentHeight * BOTTOM_HALF) + comp.getY(); + + //布局控件要先判断是不是可编辑 + XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer((XCreator) comp).getTopLayout(); + if (topLayout != null && !isMatchEdge && !topLayout.isEditable()) { + return false; + } + + if (isCrossPointArea(comp, x, y)) { + return canAcceptWhileCrossPoint(comp, x, y); + } + + if (isTrisectionArea(comp, x, y)) { + return canAcceptWhileTrisection(comp, x, y); + } + + boolean horizonValid = componentWidth >= minWidth * 2 + actualVal; + boolean verticalValid = componentHeight >= minHeight * 2 + actualVal; + return y > upHeight && y < downHeight ? horizonValid : verticalValid; + } + + // 间隔区域 + private boolean checkInterval(Component comp) { + return container.getComponentCount() > 0 && comp == container; + } + + /** + * 是否在组件边缘 + * + * @param x 横坐标 + * @param y 纵坐标 + * @return 是否在组件边缘 + */ + public boolean matchEdge(int x, int y) { + if (intersectsEdge(x, y, container)) { + //寻找最近的fit, 在边缘地段添加的控件, 将其送给该fit + XLayoutContainer parent = container.findNearestFit(); + container = parent != null ? parent : container; + return true; + } + return false; + } + + /** + * 是否在组件边缘 + * + * @param x 横坐标 + * @param y 纵坐标 + * @param container 参照组件 + * @return 是否在组件边缘 + */ + //是否包含于边缘地段, 按顺序上, 下, 左, 右检测 + public boolean intersectsEdge(int x, int y, XLayoutContainer container) { + int containerX = container.getX(); + int containerY = container.getY(); + int containerWidth = container.getWidth(); + int containerHeight = container.getHeight(); + + // 当前坐标点 + Rectangle currentXY = new Rectangle(x, y, 1, 1); + // 上边缘 + Rectangle upEdge = new Rectangle(containerX, containerY, containerWidth, BORDER_PROPORTION); + if (upEdge.intersects(currentXY)) { + return true; + } + + int bottomY = containerY + containerHeight - BORDER_PROPORTION; + // 下边缘 + Rectangle bottomEdge = new Rectangle(containerX, bottomY, containerWidth, BORDER_PROPORTION); + if (bottomEdge.intersects(currentXY)) { + return true; + } + + //左右边缘的高度 -10*2 是为了不和上下边缘重合 + int verticalHeight = containerHeight - BORDER_PROPORTION * 2; + int leftY = containerY + BORDER_PROPORTION; + // 左边缘 + Rectangle leftEdge = new Rectangle(containerX, leftY, BORDER_PROPORTION, verticalHeight); + if (leftEdge.intersects(currentXY)) { + return true; + } + + int rightY = containerY + BORDER_PROPORTION; + int rightX = containerX + containerWidth - BORDER_PROPORTION; + // 右边缘 + Rectangle rightEdge = new Rectangle(rightX, rightY, BORDER_PROPORTION, verticalHeight); + return rightEdge.intersects(currentXY); + } + + /** + * 交叉点区域时,能否对应位置放入组件 + */ + protected boolean canAcceptWhileCrossPoint(Component comp, int x, int y) { + return super.canAcceptWhileCrossPoint(comp, x, y); + } + + protected boolean canAcceptWhileTrisection(Component comp, int x, int y) { + return super.canAcceptWhileTrisection(comp, x, y); + } + + /** + * 判断是否鼠标在组件的三等分区域,如果组件在布局管理器中间,上下左右都可能会三等分 + * + * @param parentComp 鼠标所在区域的组件 + * @param x 坐标x + * @param y 坐标y + * @return 是则返回true + */ + public boolean isTrisectionArea(Component parentComp, int x, int y) { + return super.isTrisectionArea(parentComp, x, y); + } + + /** + * 是否为组件交叉点区域 或者是相邻三组建中间点 + * + * @param currentComp 当前组件 + * @param x 坐标x + * @param y 坐标y + * @return 是则返回true + */ + public boolean isCrossPointArea(Component currentComp, int x, int y) { + return super.isCrossPointArea(currentComp, x, y); + } + + protected Rectangle getLayoutBound(XWCardMainBorderLayout mainLayout) { - return mainLayout.getBounds(); - } - - private Rectangle adjustBackupBound(Rectangle backupBound, XWCardMainBorderLayout mainLayout) { + return mainLayout.getBounds(); + } + + private Rectangle adjustBackupBound(Rectangle backupBound, XWCardMainBorderLayout mainLayout) { // zhouping: REPORT-2334 表单tab布局中图表放大缩小会明显 // 这边不需要单独处理参数面板高度了,下面的方法中获取的是XWCardMainBorderLayout相对坐标 - Rectangle rec = getLayoutBound(mainLayout); - // XWTabLayout里面的横纵坐标收到外层XWCardMainBorderLayout的横纵坐标影响 - // 减掉之后可以按照它原来的逻辑执行 - backupBound.x -= rec.x; - backupBound.y -= rec.y; - XWCardLayout cardLayout = mainLayout.getCardPart(); - LayoutBorderStyle style = cardLayout.toData().getBorderStyle(); - // 当tab布局为标题样式时,才需要处理标题栏高度产生的影响 - if (ComparatorUtils.equals(style.getType(), LayoutBorderStyle.TITLE)) { - backupBound.y -= WCardMainBorderLayout.TAB_HEIGHT; - } - return backupBound; - } - - /** - * 拖拽控件边框后,根据控件的大小尺寸,进行相关组件的调整 - * - * @param creator 组件 - */ - @Override - public void fix(XCreator creator) { - //拖拽组件原大小、位置 - Rectangle backupBound = creator.getBackupBound(); - backupBound.x -= container.getX(); - backupBound.y -= container.getY(); - //当前拖拽组件的位置 - int x = creator.getX(); - int y = creator.getY(); - - // 获取容器所有内部组件横坐标 - int[] posXs = container.getHors(); - // 获取容器所有内部组件纵坐标 - int[] posYs = container.getVeris(); - - XLayoutContainer outerLayout = container.getOuterLayout(); - if (!ComparatorUtils.equals(outerLayout, container.getBackupParent())) { - XWCardMainBorderLayout mainLayout = (XWCardMainBorderLayout) outerLayout; - backupBound = adjustBackupBound(backupBound, mainLayout); - } - - //拖拽组件拖拽以后的大小 - int w = creator.getWidth(); - int h = creator.getHeight(); - initCompsList(); - creator.setBounds(backupBound); - int difference = 0; - if (x != backupBound.x) { - dealLeft(backupBound, x, posXs, difference, creator); - } else if (w != backupBound.width) { - dealRight(backupBound, x, w, posXs, difference, creator); - } else if (y != backupBound.y) { - dealTop(backupBound, y, posYs, difference, creator); - } else if (h != backupBound.height) { - dealButtom(backupBound, y, h, posYs, difference, creator); - } - clearCompsList(); - XWFitLayout layout = (XWFitLayout) container; - layout.updateBoundsWidget(); // 更新对应的BoundsWidget - updateCreatorBackBound(); - } - - /** - * 拖拽控件边框后,根据控件的大小尺寸,进行相关组件的调整 - * - * @param backupBound 边界备份 + Rectangle rec = getLayoutBound(mainLayout); + // XWTabLayout里面的横纵坐标收到外层XWCardMainBorderLayout的横纵坐标影响 + // 减掉之后可以按照它原来的逻辑执行 + backupBound.x -= rec.x; + backupBound.y -= rec.y; + XWCardLayout cardLayout = mainLayout.getCardPart(); + LayoutBorderStyle style = cardLayout.toData().getBorderStyle(); + // 当tab布局为标题样式时,才需要处理标题栏高度产生的影响 + if (ComparatorUtils.equals(style.getType(), LayoutBorderStyle.TITLE)) { + backupBound.y -= WCardMainBorderLayout.TAB_HEIGHT; + } + return backupBound; + } + + /** + * 拖拽控件边框后,根据控件的大小尺寸,进行相关组件的调整 + * + * @param creator 组件 + */ + @Override + public void fix(XCreator creator) { + //拖拽组件原大小、位置 + Rectangle backupBound = creator.getBackupBound(); + backupBound.x -= container.getX(); + backupBound.y -= container.getY(); + //当前拖拽组件的位置 + int x = creator.getX(); + int y = creator.getY(); + + // 获取容器所有内部组件横坐标 + int[] posXs = container.getHors(); + // 获取容器所有内部组件纵坐标 + int[] posYs = container.getVeris(); + + XLayoutContainer outerLayout = container.getOuterLayout(); + if (!ComparatorUtils.equals(outerLayout, container.getBackupParent())) { + XWCardMainBorderLayout mainLayout = (XWCardMainBorderLayout) outerLayout; + backupBound = adjustBackupBound(backupBound, mainLayout); + } + + //拖拽组件拖拽以后的大小 + int w = creator.getWidth(); + int h = creator.getHeight(); + initCompsList(); + creator.setBounds(backupBound); + int difference = 0; + if (x != backupBound.x) { + dealLeft(backupBound, x, posXs, difference, creator); + } else if (w != backupBound.width) { + dealRight(backupBound, x, w, posXs, difference, creator); + } else if (y != backupBound.y) { + dealTop(backupBound, y, posYs, difference, creator); + } else if (h != backupBound.height) { + dealButtom(backupBound, y, h, posYs, difference, creator); + } + clearCompsList(); + XWFitLayout layout = (XWFitLayout) container; + layout.updateBoundsWidget(); // 更新对应的BoundsWidget + updateCreatorBackBound(); + } + + /** + * 拖拽控件边框后,根据控件的大小尺寸,进行相关组件的调整 + * + * @param backupBound 边界备份 * @param bounds 组件边界 * @param xCreator 组件 * @param row 选中的行 * @param difference 偏移量 - */ - public void calculateBounds(Rectangle backupBound, Rectangle bounds, XCreator xCreator, int row, int difference) { + */ + public void calculateBounds(Rectangle backupBound, Rectangle bounds, XCreator xCreator, int row, int difference) { Rectangle rc = new Rectangle(0, 0, 0, 0); - XLayoutContainer parent = XCreatorUtils.getParentXLayoutContainer(xCreator); - if (parent != null) { - Rectangle rec = ComponentUtils.getRelativeBounds(parent); - rc.x = rec.x; - rc.y = rec.y; - } - int x = backupBound.x - rc.x, y = backupBound.y - rc.y; - //处理左右延伸 - switch (row) { - case 0: + XLayoutContainer parent = XCreatorUtils.getParentXLayoutContainer(xCreator); + if (parent != null) { + Rectangle rec = ComponentUtils.getRelativeBounds(parent); + rc.x = rec.x; + rc.y = rec.y; + } + int x = backupBound.x - rc.x, y = backupBound.y - rc.y; + //处理左右延伸 + switch (row) { + case 0: if (backupBound.width + backupBound.x == container.getWidth() - margin.getRight() + rc.x) { - x += difference; - } - break; - case 1: + x += difference; + } + break; + case 1: if (backupBound.y + backupBound.height == container.getHeight() - margin.getBottom() + rc.y) { - y += difference; - } - break; - } + y += difference; + } + break; + } bounds.setLocation(x, y); - xCreator.setBackupBound(backupBound); - xCreator.setBounds(bounds); - this.fix(xCreator); - } - - private void dealLeft(Rectangle backupBound, int x, int[] posXs, int difference, XCreator creator) { - if (backupBound.x == margin.getLeft()) { - return; - } - x = adjustCoordinateByDependingLine(x, posXs); - difference = x - backupBound.x; - dealDirectionAtLeft(backupBound, difference, creator); - } - - private void dealRight(Rectangle backupBound, int x, int w, int[] posXs, int difference, XCreator creator) { - if (backupBound.width + backupBound.x == container.getWidth() - margin.getRight()) { - return; - } - w = adjustDiffByDependingLine(x, posXs, w); - difference = w - backupBound.width; //拖拽长度 - dealDirectionAtRight(backupBound, difference, creator); - } - - private void dealTop(Rectangle backupBound, int y, int[] posYs, int difference, XCreator creator) { - if (backupBound.y == margin.getTop()) { - return; - } - y = adjustCoordinateByDependingLine(y, posYs); - difference = y - backupBound.y; - dealDirectionAtTop(backupBound, difference, creator); - } - - private void dealButtom(Rectangle backupBound, int y, int h, int[] posYs, int difference, XCreator creator) { - if (backupBound.y + backupBound.height == container.getHeight() - margin.getBottom()) { - return; - } - h = adjustDiffByDependingLine(y, posYs, h); - difference = h - backupBound.height; - dealDirectionABottom(backupBound, difference, creator); - } - - // 根据需要依附的位置调整拖拽的坐标值 - private int adjustCoordinateByDependingLine(int coordinate, int[] coordinates) { + xCreator.setBackupBound(backupBound); + xCreator.setBounds(bounds); + this.fix(xCreator); + } + + private void dealLeft(Rectangle backupBound, int x, int[] posXs, int difference, XCreator creator) { + if (backupBound.x == margin.getLeft()) { + return; + } + x = adjustCoordinateByDependingLine(x, posXs); + difference = x - backupBound.x; + dealDirectionAtLeft(backupBound, difference, creator); + } + + private void dealRight(Rectangle backupBound, int x, int w, int[] posXs, int difference, XCreator creator) { + if (backupBound.width + backupBound.x == container.getWidth() - margin.getRight()) { + return; + } + w = adjustDiffByDependingLine(x, posXs, w); + difference = w - backupBound.width; //拖拽长度 + dealDirectionAtRight(backupBound, difference, creator); + } + + private void dealTop(Rectangle backupBound, int y, int[] posYs, int difference, XCreator creator) { + if (backupBound.y == margin.getTop()) { + return; + } + y = adjustCoordinateByDependingLine(y, posYs); + difference = y - backupBound.y; + dealDirectionAtTop(backupBound, difference, creator); + } + + private void dealButtom(Rectangle backupBound, int y, int h, int[] posYs, int difference, XCreator creator) { + if (backupBound.y + backupBound.height == container.getHeight() - margin.getBottom()) { + return; + } + h = adjustDiffByDependingLine(y, posYs, h); + difference = h - backupBound.height; + dealDirectionABottom(backupBound, difference, creator); + } + + // 根据需要依附的位置调整拖拽的坐标值 + private int adjustCoordinateByDependingLine(int coordinate, int[] coordinates) { if (!isEdit) { - for (int i = 0; i < coordinates.length; i++) { - if (coordinate == coordinates[i]) { - continue; - } - if (coordinate > coordinates[i] - DEPENDING_SCOPE && coordinate < coordinates[i] + DEPENDING_SCOPE) { - coordinate = coordinates[i]; - break; - } - } - } - return coordinate; - } - - // 根据需要依附的位置调整拖拽的距离 - private int adjustDiffByDependingLine(int coordinate, int[] coordinates, int diff) { + for (int i = 0; i < coordinates.length; i++) { + if (coordinate == coordinates[i]) { + continue; + } + if (coordinate > coordinates[i] - DEPENDING_SCOPE && coordinate < coordinates[i] + DEPENDING_SCOPE) { + coordinate = coordinates[i]; + break; + } + } + } + return coordinate; + } + + // 根据需要依附的位置调整拖拽的距离 + private int adjustDiffByDependingLine(int coordinate, int[] coordinates, int diff) { if (!isEdit) { - for (int i = 0; i < coordinates.length; i++) { - if (coordinate + diff > coordinates[i] - DEPENDING_SCOPE && coordinate + diff < coordinates[i] + DEPENDING_SCOPE) { - diff = coordinates[i] - coordinate; - break; - } - } - } - return diff; - } - - // 左侧边框拉伸,循环找出对齐的两侧控件 - private void dealDirectionAtLeft(Rectangle backupBound, int difference, Component creator) { - rightComps.add(creator); - Component rightComp = null; - int leftx = backupBound.x - DEFAULT_AREA_LENGTH - actualVal; - // 取左侧边框右面的组件x值 - int rightx = backupBound.x + DEFAULT_AREA_LENGTH; - Component leftComp = container.getLeftComp(backupBound.x, backupBound.y); - leftComps.add(leftComp); - //先找上侧对齐时(y相等)的左右两边组件 - int ry = backupBound.y; - int ly = leftComp.getY(); - int min = margin.getTop(); - int max = container.getHeight() - margin.getBottom(); - while (ry >= min && ly >= min) { - if (ry == ly) { - break; - } else { - if (ry > ly) { - rightComp = container.getTopComp(rightx, ry); - ry = rightComp.getY(); - rightComps.add(rightComp); - } else { - leftComp = container.getTopComp(leftx, ly); - ly = leftComp.getY(); - leftComps.add(leftComp); - } - } - } - // 下侧对齐时(y+h相等)两边组件 - ry = backupBound.y + backupBound.height; - ly = leftComps.get(0).getY() + leftComps.get(0).getHeight(); - while (ry <= max && ly <= max) { - if (ry == ly) { - break; - } else { - if (ry > ly) { - leftComp = container.getComponentAt(leftx, ly + DEFAULT_AREA_LENGTH + actualVal); - ly = leftComp.getY() + leftComp.getHeight(); - leftComps.add(leftComp); - } else { - rightComp = container.getComponentAt(rightx, ry + DEFAULT_AREA_LENGTH + actualVal); - ry = rightComp.getY() + rightComp.getHeight(); - rightComps.add(rightComp); - } - } - } - dealHorDirection(backupBound.x, difference); - } - - // 右侧边框拉伸,循环找出对齐的两侧控件 - private void dealDirectionAtRight(Rectangle backupBound, int difference, Component creator) { - leftComps.add(creator); - Component leftComp = null; - int leftx = backupBound.x + backupBound.width - DEFAULT_AREA_LENGTH; - // 取右侧边框右面的组件x值 - int rightx = backupBound.x + backupBound.width + DEFAULT_AREA_LENGTH + actualVal; - Component rightComp = container.getRightComp(backupBound.x, backupBound.y, backupBound.width); - rightComps.add(rightComp); - int ly = backupBound.y, ry = rightComp.getY(); - int min = margin.getTop(); - int max = container.getHeight() - margin.getBottom(); - while (ry >= min && ly >= min) { - if (ry == ly) { - break; - } else { - if (ry > ly) { - rightComp = container.getTopComp(rightx, ry); - ry = rightComp.getY(); - rightComps.add(rightComp); - } else { - leftComp = container.getTopComp(leftx, ly); - ly = leftComp.getY(); - leftComps.add(leftComp); - } - } - } - ly = backupBound.y + backupBound.height; - ry = rightComps.get(0).getY() + rightComps.get(0).getHeight(); - while (ry <= max && ly <= max) { - if (ry == ly) { - break; - } else { - if (ry > ly) { - leftComp = container.getComponentAt(leftx, ly + DEFAULT_AREA_LENGTH + actualVal); - ly = leftComp.getY() + leftComp.getHeight(); - leftComps.add(leftComp); - } else { - rightComp = container.getComponentAt(rightx, ry + DEFAULT_AREA_LENGTH + actualVal); - ry = rightComp.getY() + rightComp.getHeight(); - rightComps.add(rightComp); - } - } - } - dealHorDirection(backupBound.x + backupBound.width + actualVal, difference); - } - - /** - * 水平方向上拉伸边框的处理 - */ - private void dealHorDirection(int objx, int difference) { - if (difference > 0) { - difference = Math.min(getMinWidth(rightComps) - minWidth, difference); - } else { - difference = Math.max(difference, minWidth - getMinWidth(leftComps)); - } - //重新计算左右两侧组件size、point + for (int i = 0; i < coordinates.length; i++) { + if (coordinate + diff > coordinates[i] - DEPENDING_SCOPE && coordinate + diff < coordinates[i] + DEPENDING_SCOPE) { + diff = coordinates[i] - coordinate; + break; + } + } + } + return diff; + } + + // 左侧边框拉伸,循环找出对齐的两侧控件 + private void dealDirectionAtLeft(Rectangle backupBound, int difference, Component creator) { + rightComps.add(creator); + Component rightComp = null; + int leftx = backupBound.x - DEFAULT_AREA_LENGTH - actualVal; + // 取左侧边框右面的组件x值 + int rightx = backupBound.x + DEFAULT_AREA_LENGTH; + Component leftComp = container.getLeftComp(backupBound.x, backupBound.y); + leftComps.add(leftComp); + //先找上侧对齐时(y相等)的左右两边组件 + int ry = backupBound.y; + int ly = leftComp.getY(); + int min = margin.getTop(); + int max = container.getHeight() - margin.getBottom(); + while (ry >= min && ly >= min) { + if (ry == ly) { + break; + } else { + if (ry > ly) { + rightComp = container.getTopComp(rightx, ry); + ry = rightComp.getY(); + rightComps.add(rightComp); + } else { + leftComp = container.getTopComp(leftx, ly); + ly = leftComp.getY(); + leftComps.add(leftComp); + } + } + } + // 下侧对齐时(y+h相等)两边组件 + ry = backupBound.y + backupBound.height; + ly = leftComps.get(0).getY() + leftComps.get(0).getHeight(); + while (ry <= max && ly <= max) { + if (ry == ly) { + break; + } else { + if (ry > ly) { + leftComp = container.getComponentAt(leftx, ly + DEFAULT_AREA_LENGTH + actualVal); + ly = leftComp.getY() + leftComp.getHeight(); + leftComps.add(leftComp); + } else { + rightComp = container.getComponentAt(rightx, ry + DEFAULT_AREA_LENGTH + actualVal); + ry = rightComp.getY() + rightComp.getHeight(); + rightComps.add(rightComp); + } + } + } + dealHorDirection(backupBound.x, difference); + } + + // 右侧边框拉伸,循环找出对齐的两侧控件 + private void dealDirectionAtRight(Rectangle backupBound, int difference, Component creator) { + leftComps.add(creator); + Component leftComp = null; + int leftx = backupBound.x + backupBound.width - DEFAULT_AREA_LENGTH; + // 取右侧边框右面的组件x值 + int rightx = backupBound.x + backupBound.width + DEFAULT_AREA_LENGTH + actualVal; + Component rightComp = container.getRightComp(backupBound.x, backupBound.y, backupBound.width); + rightComps.add(rightComp); + int ly = backupBound.y, ry = rightComp.getY(); + int min = margin.getTop(); + int max = container.getHeight() - margin.getBottom(); + while (ry >= min && ly >= min) { + if (ry == ly) { + break; + } else { + if (ry > ly) { + rightComp = container.getTopComp(rightx, ry); + ry = rightComp.getY(); + rightComps.add(rightComp); + } else { + leftComp = container.getTopComp(leftx, ly); + ly = leftComp.getY(); + leftComps.add(leftComp); + } + } + } + ly = backupBound.y + backupBound.height; + ry = rightComps.get(0).getY() + rightComps.get(0).getHeight(); + while (ry <= max && ly <= max) { + if (ry == ly) { + break; + } else { + if (ry > ly) { + leftComp = container.getComponentAt(leftx, ly + DEFAULT_AREA_LENGTH + actualVal); + ly = leftComp.getY() + leftComp.getHeight(); + leftComps.add(leftComp); + } else { + rightComp = container.getComponentAt(rightx, ry + DEFAULT_AREA_LENGTH + actualVal); + ry = rightComp.getY() + rightComp.getHeight(); + rightComps.add(rightComp); + } + } + } + dealHorDirection(backupBound.x + backupBound.width + actualVal, difference); + } + + /** + * 水平方向上拉伸边框的处理 + */ + private void dealHorDirection(int objx, int difference) { + if (difference > 0) { + difference = Math.min(getMinWidth(rightComps) - minWidth, difference); + } else { + difference = Math.max(difference, minWidth - getMinWidth(leftComps)); + } + //重新计算左右两侧组件size、point if (calculateLefttRelatComponent(difference)) { calculateRightRelatComponent(objx + difference, -difference); - } - } - - // 上侧边框拉伸,循环找出对齐的两侧控件 - private void dealDirectionAtTop(Rectangle backupBound, int difference, Component creator) { - downComps.add(creator); - // 取上侧边框上面的组件用的y值 - int topy = backupBound.y - DEFAULT_AREA_LENGTH - actualVal; - // 上侧边框下面的组件y值 - int bottomy = backupBound.y + DEFAULT_AREA_LENGTH; - Component topComp = container.getTopComp(backupBound.x, backupBound.y); - upComps.add(topComp); - Component bottomComp = null; - int min = margin.getLeft(); - int max = container.getWidth() - margin.getRight(); - //先找左侧侧对齐时(x相等)的上下两边组件 - int ux = topComp.getX(); - int dx = backupBound.x; - while (ux >= min && dx >= min) { - if (ux == dx) { - break; - } else { - if (ux < dx) { - bottomComp = container.getLeftComp(dx, bottomy); - dx = bottomComp.getX(); - downComps.add(bottomComp); - } else { - topComp = container.getLeftComp(ux, topy); - ux = topComp.getX(); - upComps.add(topComp); - } - } - } - // 右侧对齐时(x+w相等)两边组件 - ux = upComps.get(0).getX() + upComps.get(0).getWidth(); - dx = backupBound.x + backupBound.width; - while (ux <= max && dx <= max) { - if (ux == dx) { - break; - } else { - if (ux < dx) { - topComp = container.getComponentAt(ux + DEFAULT_AREA_LENGTH + actualVal, topy); - ux = topComp.getX() + topComp.getWidth(); - upComps.add(topComp); - } else { - bottomComp = container.getComponentAt(dx + DEFAULT_AREA_LENGTH + actualVal, bottomy); - dx = bottomComp.getX() + bottomComp.getWidth(); - downComps.add(bottomComp); - } - } - } - - dealVertiDirection(backupBound.y, difference); - } - - // 下侧边框拉伸,循环找出对齐的两侧控件 - private void dealDirectionABottom(Rectangle backupBound, int difference, Component creator) { - upComps.add(creator); - Component topComp = null; - Component bottomComp = container.getBottomComp(backupBound.x, backupBound.y, backupBound.height); - // 下侧边框下面的组件y坐标 - int bottomy = backupBound.y + backupBound.height + DEFAULT_AREA_LENGTH + actualVal; - // 取下侧边框上面的组件用的y值 - int topy = backupBound.y + backupBound.height - DEFAULT_AREA_LENGTH; - downComps.add(bottomComp); - int dx = bottomComp.getX(); - int ux = backupBound.x; - int min = margin.getLeft(); - int max = container.getWidth() - margin.getRight(); - while (ux >= min && dx >= min) { - if (ux == dx) { - break; - } else { - if (ux < dx) { - bottomComp = container.getLeftComp(dx, bottomy); - dx = bottomComp.getX(); - downComps.add(bottomComp); - } else { - topComp = container.getLeftComp(ux, topy); - ux = topComp.getX(); - upComps.add(topComp); - } - } - } - dx = downComps.get(0).getX() + downComps.get(0).getWidth(); - ux = backupBound.x + backupBound.width; - while (ux <= max && dx <= max) { - if (ux == dx) { - break; - } else { - if (ux < dx) { - topComp = container.getComponentAt(ux + DEFAULT_AREA_LENGTH + actualVal, topy); - ux = topComp.getX() + topComp.getWidth(); - upComps.add(topComp); - } else { - bottomComp = container.getComponentAt(dx + DEFAULT_AREA_LENGTH + actualVal, bottomy); - dx = bottomComp.getX() + bottomComp.getWidth(); - downComps.add(bottomComp); - } - } - } - dealVertiDirection(backupBound.y + backupBound.height + actualVal, difference); - } - - /** - * 垂直方向上拉伸边框的处理 - */ - private void dealVertiDirection(int objY, int difference) { - if (difference > 0) { - difference = Math.min(getMinHeight(downComps) - minHeight, difference); - } else { - difference = Math.max(difference, minHeight - getMinHeight(upComps)); - } - //重新计算上下两侧组件size、point + } + } + + // 上侧边框拉伸,循环找出对齐的两侧控件 + private void dealDirectionAtTop(Rectangle backupBound, int difference, Component creator) { + downComps.add(creator); + // 取上侧边框上面的组件用的y值 + int topy = backupBound.y - DEFAULT_AREA_LENGTH - actualVal; + // 上侧边框下面的组件y值 + int bottomy = backupBound.y + DEFAULT_AREA_LENGTH; + Component topComp = container.getTopComp(backupBound.x, backupBound.y); + upComps.add(topComp); + Component bottomComp = null; + int min = margin.getLeft(); + int max = container.getWidth() - margin.getRight(); + //先找左侧侧对齐时(x相等)的上下两边组件 + int ux = topComp.getX(); + int dx = backupBound.x; + while (ux >= min && dx >= min) { + if (ux == dx) { + break; + } else { + if (ux < dx) { + bottomComp = container.getLeftComp(dx, bottomy); + dx = bottomComp.getX(); + downComps.add(bottomComp); + } else { + topComp = container.getLeftComp(ux, topy); + ux = topComp.getX(); + upComps.add(topComp); + } + } + } + // 右侧对齐时(x+w相等)两边组件 + ux = upComps.get(0).getX() + upComps.get(0).getWidth(); + dx = backupBound.x + backupBound.width; + while (ux <= max && dx <= max) { + if (ux == dx) { + break; + } else { + if (ux < dx) { + topComp = container.getComponentAt(ux + DEFAULT_AREA_LENGTH + actualVal, topy); + ux = topComp.getX() + topComp.getWidth(); + upComps.add(topComp); + } else { + bottomComp = container.getComponentAt(dx + DEFAULT_AREA_LENGTH + actualVal, bottomy); + dx = bottomComp.getX() + bottomComp.getWidth(); + downComps.add(bottomComp); + } + } + } + + dealVertiDirection(backupBound.y, difference); + } + + // 下侧边框拉伸,循环找出对齐的两侧控件 + private void dealDirectionABottom(Rectangle backupBound, int difference, Component creator) { + upComps.add(creator); + Component topComp = null; + Component bottomComp = container.getBottomComp(backupBound.x, backupBound.y, backupBound.height); + // 下侧边框下面的组件y坐标 + int bottomy = backupBound.y + backupBound.height + DEFAULT_AREA_LENGTH + actualVal; + // 取下侧边框上面的组件用的y值 + int topy = backupBound.y + backupBound.height - DEFAULT_AREA_LENGTH; + downComps.add(bottomComp); + int dx = bottomComp.getX(); + int ux = backupBound.x; + int min = margin.getLeft(); + int max = container.getWidth() - margin.getRight(); + while (ux >= min && dx >= min) { + if (ux == dx) { + break; + } else { + if (ux < dx) { + bottomComp = container.getLeftComp(dx, bottomy); + dx = bottomComp.getX(); + downComps.add(bottomComp); + } else { + topComp = container.getLeftComp(ux, topy); + ux = topComp.getX(); + upComps.add(topComp); + } + } + } + dx = downComps.get(0).getX() + downComps.get(0).getWidth(); + ux = backupBound.x + backupBound.width; + while (ux <= max && dx <= max) { + if (ux == dx) { + break; + } else { + if (ux < dx) { + topComp = container.getComponentAt(ux + DEFAULT_AREA_LENGTH + actualVal, topy); + ux = topComp.getX() + topComp.getWidth(); + upComps.add(topComp); + } else { + bottomComp = container.getComponentAt(dx + DEFAULT_AREA_LENGTH + actualVal, bottomy); + dx = bottomComp.getX() + bottomComp.getWidth(); + downComps.add(bottomComp); + } + } + } + dealVertiDirection(backupBound.y + backupBound.height + actualVal, difference); + } + + /** + * 垂直方向上拉伸边框的处理 + */ + private void dealVertiDirection(int objY, int difference) { + if (difference > 0) { + difference = Math.min(getMinHeight(downComps) - minHeight, difference); + } else { + difference = Math.max(difference, minHeight - getMinHeight(upComps)); + } + //重新计算上下两侧组件size、point if (calculateUpRelatComponent(difference)) { calculateDownRelatComponent(objY + difference, -difference); - } - } - - /** - * 新拖入组件时,计算调整其他关联组件位置大小 - * - * @param child 新拖入的组件 - * @param x 鼠标所在x坐标 - * @param y 鼠标所在y坐标 - */ - public void fix(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()); - } else if (isCrossPointArea(parentComp, x, y)) { - //交叉区域插入组件时,根据具体位置进行上下或者左右或者相邻三个组件的位置大小插入 - fixCrossPointArea(parentComp, child, x, y); - return; - } else if (isTrisectionArea(parentComp, x, y)) { - // 在边界三等分区域,就不再和组件二等分了 - fixTrisect(parentComp, child, x, y); - return; - } else { - fixHalve(parentComp, child, x, y); - } - } - - /** - * 平分,正常情况拖入组件时,按照上1/4区域、下1/4区域为上下平分,中左侧1/2区域、中右侧1/2区域为左右平分 - */ - protected void fixHalve(Component currentComp, XCreator child, int x, int y) { - super.fixHalve(currentComp, child, x, y); - } - - /** - * 组件交叉区域进行插入时,调整受到变动的其他组件,之前是交叉区域插入也按照三等分逻辑,后面测试中发现有bug,改为和bi一样的鼠标所在侧平分 - * 默认左上角、右下角区域是垂直方向插入组件 - * 右上角和左下角是水平方向插入组件,这样避免田字块时重复 - */ - protected void fixCrossPointArea(Component currentComp, XCreator child, int x, int y) { - super.fixCrossPointArea(currentComp, child, x, y); - } - - /** - * 三等分区域时,调整相关联的组件 - * - * @param currentComp 鼠标所在组件 - * @param child 待插入组件 - */ - protected void fixTrisect(Component currentComp, XCreator child, int x, int y) { - super.fixTrisect(currentComp, child, x, y); - } - - /** - * 删除组件或者重新拖动时,其它组件重新计算位置大小 - */ - protected void delete(XCreator creator, int creatorWidth, int creatorHeight) { - int x = creator.getX(); - int y = creator.getY(); - recalculateChildrenSize(x, y, creatorWidth, creatorHeight); - } - - /** - * 重新计算内部组件大小 - * - * @param x 坐标x - * @param y 坐标y - * @param creatorWidth 删除的组件之前所在布局的宽度 - * @param creatorHeight 删除的组件之前所在布局的高度 - */ - public void recalculateChildrenSize(int x, int y, int creatorWidth, int creatorHeight) { - if (container.getComponentCount() == 0) { - return; - } else { - initCompsList(); - int width = creatorWidth; - int height = creatorHeight; - calculateRelatedComponent(x, y, width, height); - if (!rightComps.isEmpty() && getAllHeight(rightComps) == height) { + } + } + + /** + * 新拖入组件时,计算调整其他关联组件位置大小 + * + * @param child 新拖入的组件 + * @param x 鼠标所在x坐标 + * @param y 鼠标所在y坐标 + */ + public void fix(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()); + } else if (isCrossPointArea(parentComp, x, y)) { + //交叉区域插入组件时,根据具体位置进行上下或者左右或者相邻三个组件的位置大小插入 + fixCrossPointArea(parentComp, child, x, y); + return; + } else if (isTrisectionArea(parentComp, x, y)) { + // 在边界三等分区域,就不再和组件二等分了 + fixTrisect(parentComp, child, x, y); + return; + } else { + fixHalve(parentComp, child, x, y); + } + } + + /** + * 平分,正常情况拖入组件时,按照上1/4区域、下1/4区域为上下平分,中左侧1/2区域、中右侧1/2区域为左右平分 + */ + protected void fixHalve(Component currentComp, XCreator child, int x, int y) { + super.fixHalve(currentComp, child, x, y); + } + + /** + * 组件交叉区域进行插入时,调整受到变动的其他组件,之前是交叉区域插入也按照三等分逻辑,后面测试中发现有bug,改为和bi一样的鼠标所在侧平分 + * 默认左上角、右下角区域是垂直方向插入组件 + * 右上角和左下角是水平方向插入组件,这样避免田字块时重复 + */ + protected void fixCrossPointArea(Component currentComp, XCreator child, int x, int y) { + super.fixCrossPointArea(currentComp, child, x, y); + } + + /** + * 三等分区域时,调整相关联的组件 + * + * @param currentComp 鼠标所在组件 + * @param child 待插入组件 + */ + protected void fixTrisect(Component currentComp, XCreator child, int x, int y) { + super.fixTrisect(currentComp, child, x, y); + } + + /** + * 删除组件或者重新拖动时,其它组件重新计算位置大小 + */ + protected void delete(XCreator creator, int creatorWidth, int creatorHeight) { + int x = creator.getX(); + int y = creator.getY(); + recalculateChildrenSize(x, y, creatorWidth, creatorHeight); + } + + /** + * 重新计算内部组件大小 + * + * @param x 坐标x + * @param y 坐标y + * @param creatorWidth 删除的组件之前所在布局的宽度 + * @param creatorHeight 删除的组件之前所在布局的高度 + */ + public void recalculateChildrenSize(int x, int y, int creatorWidth, int creatorHeight) { + if (container.getComponentCount() == 0) { + return; + } else { + initCompsList(); + int width = creatorWidth; + int height = creatorHeight; + calculateRelatedComponent(x, y, width, height); + if (!rightComps.isEmpty() && getAllHeight(rightComps) == height) { calculateRightRelatComponent(x, width + actualVal); - } else if (!leftComps.isEmpty() && getAllHeight(leftComps) == height) { + } else if (!leftComps.isEmpty() && getAllHeight(leftComps) == height) { calculateLefttRelatComponent(width + actualVal); - } else if (!downComps.isEmpty() && getAllWidth(downComps) == width) { + } else if (!downComps.isEmpty() && getAllWidth(downComps) == width) { calculateDownRelatComponent(y, height + actualVal); - } else if (!upComps.isEmpty() && getAllWidth(upComps) == width) { + } else if (!upComps.isEmpty() && getAllWidth(upComps) == width) { calculateUpRelatComponent(height + actualVal); - } else { - // 由于布局三等分的存在,可能会出现删除组件时,找不到关联的组件填充,此时特殊处理 - calculateNoRelatedComponent(x, y, width, height); - } - } - clearCompsList(); - } - - /** - * 四侧边框都没有对齐的,此时每侧有且只有一个方向不对齐 - * 比如右侧不对齐,那么必然右上或右下没对齐,不会同时不对齐,否则不会出现此情况 - * 正常删除是右左下上优先原则,这边目前只调整右侧以至填充完整, - * 右侧不对齐时的组件先上下微调,再向左侧填充。 - */ - private void calculateNoRelatedComponent(int x, int y, int width, int height) { - // 只有最后一个组件了,直接删除 - if (container.getComponentCount() <= 1) { - return; - } - // 删除当前组件时,由于没有刚好边框对齐的其他组件,这时候需要调整的组件 - Component rightComp = container.getRightComp(x, y, width); - if (rightComp == null) { - return; - } - - int ry = rightComp.getY(); - clearCompsList(); - initCompsList(); - Rectangle rec = new Rectangle(x, y, width, height); - if (ry != y) { - calculateNoRelatedWhileRightTop(rec, rightComp); - } else { - calculateNoRelatedWhileRightBott(rec, rightComp); - } - - } - - private void calculateNoRelatedWhileRightTop(Rectangle bound, Component rcomp) { - if (rcomp == null) { - return; - } - - int ry = rcomp.getY(); - int rh = rcomp.getHeight(); - int rw = rcomp.getWidth(); - int dh = bound.y - ry - actualVal; - // 没法缩小高度 - if (dh < minHeight) { - // 没法缩小时则拉伸rcomp的上边框 - dealDirectionAtTop(rcomp.getBounds(), dh + actualVal, rcomp); - //调整的时候可能有组件达到最小高度,判断下 - if (rcomp.getY() != bound.y) { - clearCompsList(); - initCompsList(); - dealDirectionAtTop(rcomp.getBounds(), bound.y - rcomp.getY() - minHeight - actualVal, rcomp); - ry = rcomp.getY(); - int rx = rcomp.getX(); - rcomp.setBounds(rx, ry, rw, minHeight); - recalculateChildrenSize(rx, bound.y, rw, rh - dh - actualVal); - recalculateChildrenSize(bound.x, bound.y, bound.width, bound.height); - return; - } - } else { - // 右侧控件底部对齐 - if (rh + ry == bound.y + bound.height) { - rcomp.setSize(rw, dh); - bound.width += rw; - bound.width += actualVal; - } else { - recalculateChildrenSize(bound.x, ry + rh + actualVal, bound.width, bound.height + bound.y - rh - ry - actualVal); - recalculateChildrenSize(bound.x, bound.y, bound.width, ry + rh - bound.y); - return; - } - } - recalculateChildrenSize(bound.x, bound.y, bound.width, bound.height); - } - - private void calculateNoRelatedWhileRightBott(Rectangle bound, Component rcomp) { - rcomp = container.getBottomRightComp(bound.x, bound.y, bound.height, bound.width); - int ry = rcomp.getY(); - int rh = rcomp.getHeight(); - int rw = rcomp.getWidth(); - int dh = ry + rh - bound.y - bound.height - actualVal; - if (dh < minHeight) { - dealDirectionABottom(rcomp.getBounds(), -dh - actualVal, rcomp); - //调整的时候可能有组件达到最小高度,判断下 - if (rcomp.getHeight() + ry != bound.y + bound.height) { - clearCompsList(); - initCompsList(); - dh = ry + rcomp.getHeight() - bound.y - bound.height - actualVal; - dealDirectionABottom(rcomp.getBounds(), minHeight - dh, rcomp); - rh = rcomp.getHeight(); - int rx = rcomp.getX(); - rcomp.setBounds(rx, bound.y + bound.height + actualVal, rw, minHeight); - recalculateChildrenSize(rx, ry, rw, rh - minHeight - actualVal); - recalculateChildrenSize(bound.x, bound.y, bound.width, bound.height); - return; - } - } else { - if (ry == bound.y) { - rcomp.setBounds(rcomp.getX(), bound.y + bound.height + actualVal, rw, dh); - bound.width += rw; - bound.width += actualVal; - } else { - recalculateChildrenSize(bound.x, bound.y, bound.width, ry - bound.y - actualVal); - recalculateChildrenSize(bound.x, ry, bound.width, bound.height - ry + bound.y); - return; - } - } - recalculateChildrenSize(bound.x, bound.y, bound.width, bound.height); - } - - private int getMinWidth(List comps) { - if (comps.isEmpty()) { - return 0; - } - int minWidth = container.getWidth() - margin.getLeft() - margin.getRight(); - for (int i = 0, size = comps.size(); i < size; i++) { - minWidth = minWidth > comps.get(i).getWidth() ? comps.get(i).getWidth() : minWidth; - } - return minWidth; - } - - private int getMinHeight(List comps) { - if (comps.isEmpty()) { - return 0; - } - int minH = container.getHeight() - margin.getTop() - margin.getBottom(); - for (int i = 0, size = comps.size(); i < size; i++) { - minH = minH > comps.get(i).getHeight() ? comps.get(i).getHeight() : minH; - } - return minH; - } - - // 删除时计算待删除组件上下侧的组件是否何其对齐 - private int getAllHeight(List comps) { - int allHeight = 0; - if (comps.isEmpty()) { - return allHeight; - } - int n = comps.size(); - for (int i = 0; i < n; i++) { - allHeight += comps.get(i).getHeight(); - } - allHeight += (n - 1) * actualVal; - return allHeight; - } - - private int getAllWidth(List comps) { - int allWidth = 0; - if (comps.isEmpty()) { - return allWidth; - } - int n = comps.size(); - for (int i = 0; i < n; i++) { - allWidth += comps.get(i).getWidth(); - } - allWidth += (n - 1) * actualVal; - return allWidth; - } - - /** - * 获取有哪些相关联的组件 - */ - protected void calculateRelatedComponent(int objX, int objY, int objWidth, int objHeight) { - int count = container.getComponentCount(); - for (int i = 0; i < count; i++) { - Component relatComp = container.getComponent(i); - int rx = relatComp.getX(); - int ry = relatComp.getY(); - int rwidth = relatComp.getWidth(); - int rheight = relatComp.getHeight(); - int verti = ry - objY; - int hori = rx - objX; - boolean isHori = verti >= 0 && objHeight >= (rheight + verti); - boolean isVerti = hori >= 0 && objWidth >= (rwidth + hori); - if (isHori && (objX + objWidth + actualVal) == rx) { - rightComps.add(relatComp); - } else if (isHori && objX == (rx + rwidth + actualVal)) { - leftComps.add(relatComp); - } else if (isVerti && (objY + objHeight + actualVal) == ry) { - downComps.add(relatComp); - } else if (isVerti && objY == (ry + rheight + actualVal)) { - upComps.add(relatComp); - } - } - } - - /** - * 拖拽组件时遍历某一侧组件得到该侧组件能够缩放的最小宽度,tab布局最小宽度 = 内部组件数 * 单个组件最小宽度 - * - * @param list 某一侧组件的集合 如:leftComps - * @return int 最小宽度 - */ - private int getCompsMinWidth(List list) { - return getMaxCompsNum(list, true) * WLayout.MIN_WIDTH; - } - - /** - * 拖拽组件遍历某一侧得到该侧组件能够缩放的最小高度,tab布局最小高度 = 内部组件数 * 单个组件最小高度 + 标题高度 - * - * @param list 某一侧组件集合 - * @return int 最小高度 - */ - private int getCompsMinHeight(List list) { - for (int i = 0; i < list.size(); i++) { - XCreator creator = (XCreator) list.get(i); - ArrayList childrenList = creator.getTargetChildrenList(); - if (!childrenList.isEmpty()) { - return getMaxCompsNum(list, false) * WLayout.MIN_HEIGHT + WCardMainBorderLayout.TAB_HEIGHT; - } - } - return WLayout.MIN_HEIGHT; - } - - /** - * 根据子组件的横(纵)坐标获取某一侧组件的最大内部组件数 - * - * @param list 某一侧组件集合 - * @param isHor 是否以横坐标为准 - * @return int 最大内部组件数 - */ - private int getMaxCompsNum(List list, boolean isHor) { - int maxCompNums = 1; - for (int i = 0, size = list.size(); i < size; i++) { - XCreator creator = (XCreator) list.get(i); - ArrayList childrenList = creator.getTargetChildrenList(); - int count = childrenList.size(); - if (count > 0) { - for (int j = 0; j < count; j++) { - XWTabFitLayout tabLayout = (XWTabFitLayout) childrenList.get(j); - int[] positions = isHor ? tabLayout.getHors(true) : tabLayout.getVeris(true); - int compNums = positions.length - 1; - maxCompNums = Math.max(compNums, maxCompNums); - } - } - } - return maxCompNums; - } - - /** - * 根据偏移量缩放内部组件大小,(tab布局用到) - * - * @param creator tab布局 - * @param offset 偏移量 - * @param isHor 是否为横向拖拽 - */ - private void adjustCompsSize(XCreator creator, int offset, boolean isHor) { - ArrayList childrenList = creator.getTargetChildrenList(); - int size = childrenList.size(); - if (size > 0) { - for (int j = 0; j < size; j++) { - XWTabFitLayout tabLayout = (XWTabFitLayout) childrenList.get(j); - tabLayout.setBackupBound(tabLayout.getBounds()); - int refSize = isHor ? tabLayout.getWidth() : tabLayout.getHeight(); - double percent = (double) offset / refSize; - if (percent < 0 && !tabLayout.canReduce(percent)) { - return; - } - setAdjustedSize(tabLayout, offset, isHor); - for (int m = 0; m < tabLayout.getComponentCount(); m++) { - XCreator childCreator = tabLayout.getXCreator(m); - BoundsWidget wgt = tabLayout.toData().getBoundsWidget(childCreator.toData()); - wgt.setBounds(tabLayout.getComponent(m).getBounds()); - } - adjustCreatorsSize(percent, tabLayout, isHor); - } - - } - } - - // 纵向拖拽,先将tab布局的高度设置为拖拽后的实际高度 - private void setAdjustedHeight(XWTabFitLayout tabLayout, int offset) { - tabLayout.setSize(tabLayout.getWidth(), tabLayout.getHeight() + offset); - } - - // 横向拖拽,先将tab布局的宽度设置为拖拽后的实际宽度 - private void setAdjustedSize(XWTabFitLayout tabLayout, int offset, boolean isHor) { - if (offset < 0) { - // 缩放时需要备份原tab布局宽高 - tabLayout.setReferDim(new Dimension(tabLayout.getWidth(), tabLayout.getHeight())); - } - if (isHor) { - tabLayout.setSize(tabLayout.getWidth() + offset, tabLayout.getHeight()); - return; - } - setAdjustedHeight(tabLayout, offset); - } - - // 按照拖拽偏移量,对tab布局进行缩放 - private void adjustCreatorsSize(double percent, XWTabFitLayout tabLayout, boolean isHor) { - if (isHor) { - tabLayout.adjustCreatorsWidth(percent); - return; - } - tabLayout.adjustCreatorsHeight(percent); - } - - - /** - * 删除或拉伸控件右边框 调整右侧组件位置大小 - * - * @param objX 调整后的坐标x - * @param objWidth 调整后的宽度 - */ + } else { + // 由于布局三等分的存在,可能会出现删除组件时,找不到关联的组件填充,此时特殊处理 + calculateNoRelatedComponent(x, y, width, height); + } + } + clearCompsList(); + } + + /** + * 四侧边框都没有对齐的,此时每侧有且只有一个方向不对齐 + * 比如右侧不对齐,那么必然右上或右下没对齐,不会同时不对齐,否则不会出现此情况 + * 正常删除是右左下上优先原则,这边目前只调整右侧以至填充完整, + * 右侧不对齐时的组件先上下微调,再向左侧填充。 + */ + private void calculateNoRelatedComponent(int x, int y, int width, int height) { + // 只有最后一个组件了,直接删除 + if (container.getComponentCount() <= 1) { + return; + } + // 删除当前组件时,由于没有刚好边框对齐的其他组件,这时候需要调整的组件 + Component rightComp = container.getRightComp(x, y, width); + if (rightComp == null) { + return; + } + + int ry = rightComp.getY(); + clearCompsList(); + initCompsList(); + Rectangle rec = new Rectangle(x, y, width, height); + if (ry != y) { + calculateNoRelatedWhileRightTop(rec, rightComp); + } else { + calculateNoRelatedWhileRightBott(rec, rightComp); + } + + } + + private void calculateNoRelatedWhileRightTop(Rectangle bound, Component rcomp) { + if (rcomp == null) { + return; + } + + int ry = rcomp.getY(); + int rh = rcomp.getHeight(); + int rw = rcomp.getWidth(); + int dh = bound.y - ry - actualVal; + // 没法缩小高度 + if (dh < minHeight) { + // 没法缩小时则拉伸rcomp的上边框 + dealDirectionAtTop(rcomp.getBounds(), dh + actualVal, rcomp); + //调整的时候可能有组件达到最小高度,判断下 + if (rcomp.getY() != bound.y) { + clearCompsList(); + initCompsList(); + dealDirectionAtTop(rcomp.getBounds(), bound.y - rcomp.getY() - minHeight - actualVal, rcomp); + ry = rcomp.getY(); + int rx = rcomp.getX(); + rcomp.setBounds(rx, ry, rw, minHeight); + recalculateChildrenSize(rx, bound.y, rw, rh - dh - actualVal); + recalculateChildrenSize(bound.x, bound.y, bound.width, bound.height); + return; + } + } else { + // 右侧控件底部对齐 + if (rh + ry == bound.y + bound.height) { + rcomp.setSize(rw, dh); + bound.width += rw; + bound.width += actualVal; + } else { + recalculateChildrenSize(bound.x, ry + rh + actualVal, bound.width, bound.height + bound.y - rh - ry - actualVal); + recalculateChildrenSize(bound.x, bound.y, bound.width, ry + rh - bound.y); + return; + } + } + recalculateChildrenSize(bound.x, bound.y, bound.width, bound.height); + } + + private void calculateNoRelatedWhileRightBott(Rectangle bound, Component rcomp) { + rcomp = container.getBottomRightComp(bound.x, bound.y, bound.height, bound.width); + int ry = rcomp.getY(); + int rh = rcomp.getHeight(); + int rw = rcomp.getWidth(); + int dh = ry + rh - bound.y - bound.height - actualVal; + if (dh < minHeight) { + dealDirectionABottom(rcomp.getBounds(), -dh - actualVal, rcomp); + //调整的时候可能有组件达到最小高度,判断下 + if (rcomp.getHeight() + ry != bound.y + bound.height) { + clearCompsList(); + initCompsList(); + dh = ry + rcomp.getHeight() - bound.y - bound.height - actualVal; + dealDirectionABottom(rcomp.getBounds(), minHeight - dh, rcomp); + rh = rcomp.getHeight(); + int rx = rcomp.getX(); + rcomp.setBounds(rx, bound.y + bound.height + actualVal, rw, minHeight); + recalculateChildrenSize(rx, ry, rw, rh - minHeight - actualVal); + recalculateChildrenSize(bound.x, bound.y, bound.width, bound.height); + return; + } + } else { + if (ry == bound.y) { + rcomp.setBounds(rcomp.getX(), bound.y + bound.height + actualVal, rw, dh); + bound.width += rw; + bound.width += actualVal; + } else { + recalculateChildrenSize(bound.x, bound.y, bound.width, ry - bound.y - actualVal); + recalculateChildrenSize(bound.x, ry, bound.width, bound.height - ry + bound.y); + return; + } + } + recalculateChildrenSize(bound.x, bound.y, bound.width, bound.height); + } + + private int getMinWidth(List comps) { + if (comps.isEmpty()) { + return 0; + } + int minWidth = container.getWidth() - margin.getLeft() - margin.getRight(); + for (int i = 0, size = comps.size(); i < size; i++) { + minWidth = minWidth > comps.get(i).getWidth() ? comps.get(i).getWidth() : minWidth; + } + return minWidth; + } + + private int getMinHeight(List comps) { + if (comps.isEmpty()) { + return 0; + } + int minH = container.getHeight() - margin.getTop() - margin.getBottom(); + for (int i = 0, size = comps.size(); i < size; i++) { + minH = minH > comps.get(i).getHeight() ? comps.get(i).getHeight() : minH; + } + return minH; + } + + // 删除时计算待删除组件上下侧的组件是否何其对齐 + private int getAllHeight(List comps) { + int allHeight = 0; + if (comps.isEmpty()) { + return allHeight; + } + int n = comps.size(); + for (int i = 0; i < n; i++) { + allHeight += comps.get(i).getHeight(); + } + allHeight += (n - 1) * actualVal; + return allHeight; + } + + private int getAllWidth(List comps) { + int allWidth = 0; + if (comps.isEmpty()) { + return allWidth; + } + int n = comps.size(); + for (int i = 0; i < n; i++) { + allWidth += comps.get(i).getWidth(); + } + allWidth += (n - 1) * actualVal; + return allWidth; + } + + /** + * 获取有哪些相关联的组件 + */ + protected void calculateRelatedComponent(int objX, int objY, int objWidth, int objHeight) { + int count = container.getComponentCount(); + for (int i = 0; i < count; i++) { + Component relatComp = container.getComponent(i); + int rx = relatComp.getX(); + int ry = relatComp.getY(); + int rwidth = relatComp.getWidth(); + int rheight = relatComp.getHeight(); + int verti = ry - objY; + int hori = rx - objX; + boolean isHori = verti >= 0 && objHeight >= (rheight + verti); + boolean isVerti = hori >= 0 && objWidth >= (rwidth + hori); + if (isHori && (objX + objWidth + actualVal) == rx) { + rightComps.add(relatComp); + } else if (isHori && objX == (rx + rwidth + actualVal)) { + leftComps.add(relatComp); + } else if (isVerti && (objY + objHeight + actualVal) == ry) { + downComps.add(relatComp); + } else if (isVerti && objY == (ry + rheight + actualVal)) { + upComps.add(relatComp); + } + } + } + + /** + * 拖拽组件时遍历某一侧组件得到该侧组件能够缩放的最小宽度,tab布局最小宽度 = 内部组件数 * 单个组件最小宽度 + * + * @param list 某一侧组件的集合 如:leftComps + * @return int 最小宽度 + */ + private int getCompsMinWidth(List list) { + return getMaxCompsNum(list, true) * WLayout.MIN_WIDTH; + } + + /** + * 拖拽组件遍历某一侧得到该侧组件能够缩放的最小高度,tab布局最小高度 = 内部组件数 * 单个组件最小高度 + 标题高度 + * + * @param list 某一侧组件集合 + * @return int 最小高度 + */ + private int getCompsMinHeight(List list) { + for (int i = 0; i < list.size(); i++) { + XCreator creator = (XCreator) list.get(i); + ArrayList childrenList = creator.getTargetChildrenList(); + if (!childrenList.isEmpty()) { + return getMaxCompsNum(list, false) * WLayout.MIN_HEIGHT + WCardMainBorderLayout.TAB_HEIGHT; + } + } + return WLayout.MIN_HEIGHT; + } + + /** + * 根据子组件的横(纵)坐标获取某一侧组件的最大内部组件数 + * + * @param list 某一侧组件集合 + * @param isHor 是否以横坐标为准 + * @return int 最大内部组件数 + */ + private int getMaxCompsNum(List list, boolean isHor) { + int maxCompNums = 1; + for (int i = 0, size = list.size(); i < size; i++) { + XCreator creator = (XCreator) list.get(i); + ArrayList childrenList = creator.getTargetChildrenList(); + int count = childrenList.size(); + if (count > 0) { + for (int j = 0; j < count; j++) { + XWTabFitLayout tabLayout = (XWTabFitLayout) childrenList.get(j); + int[] positions = isHor ? tabLayout.getHors(true) : tabLayout.getVeris(true); + int compNums = positions.length - 1; + maxCompNums = Math.max(compNums, maxCompNums); + } + } + } + return maxCompNums; + } + + /** + * 根据偏移量缩放内部组件大小,(tab布局用到) + * + * @param creator tab布局 + * @param offset 偏移量 + * @param isHor 是否为横向拖拽 + */ + private void adjustCompsSize(XCreator creator, int offset, boolean isHor) { + ArrayList childrenList = creator.getTargetChildrenList(); + int size = childrenList.size(); + if (size > 0) { + for (int j = 0; j < size; j++) { + XWTabFitLayout tabLayout = (XWTabFitLayout) childrenList.get(j); + tabLayout.setBackupBound(tabLayout.getBounds()); + int refSize = isHor ? tabLayout.getWidth() : tabLayout.getHeight(); + double percent = (double) offset / refSize; + if (percent < 0 && !tabLayout.canReduce(percent)) { + return; + } + setAdjustedSize(tabLayout, offset, isHor); + for (int m = 0; m < tabLayout.getComponentCount(); m++) { + XCreator childCreator = tabLayout.getXCreator(m); + BoundsWidget wgt = (BoundsWidget) tabLayout.toData().getBoundsWidget(childCreator.toData()); + wgt.setBounds(tabLayout.getComponent(m).getBounds()); + } + adjustCreatorsSize(percent, tabLayout, isHor); + } + + } + } + + // 纵向拖拽,先将tab布局的高度设置为拖拽后的实际高度 + private void setAdjustedHeight(XWTabFitLayout tabLayout, int offset) { + tabLayout.setSize(tabLayout.getWidth(), tabLayout.getHeight() + offset); + } + + // 横向拖拽,先将tab布局的宽度设置为拖拽后的实际宽度 + private void setAdjustedSize(XWTabFitLayout tabLayout, int offset, boolean isHor) { + if (offset < 0) { + // 缩放时需要备份原tab布局宽高 + tabLayout.setReferDim(new Dimension(tabLayout.getWidth(), tabLayout.getHeight())); + } + if (isHor) { + tabLayout.setSize(tabLayout.getWidth() + offset, tabLayout.getHeight()); + return; + } + setAdjustedHeight(tabLayout, offset); + } + + // 按照拖拽偏移量,对tab布局进行缩放 + private void adjustCreatorsSize(double percent, XWTabFitLayout tabLayout, boolean isHor) { + if (isHor) { + tabLayout.adjustCreatorsWidth(percent); + return; + } + tabLayout.adjustCreatorsHeight(percent); + } + + + /** + * 删除或拉伸控件右边框 调整右侧组件位置大小 + * + * @param objX 调整后的坐标x + * @param objWidth 调整后的宽度 + */ protected void calculateRightRelatComponent(int objX, int objWidth) { - int count = rightComps.size(); - for (int i = 0; i < count; i++) { - XCreator creator = (XCreator) rightComps.get(i); - adjustCompsSize(creator, objWidth, true); - int ry = creator.getY(); - int rwidth = creator.getWidth(); - int rheight = creator.getHeight(); - creator.setLocation(objX, ry); - creator.setSize(rwidth + objWidth, rheight); - } - } - - /** - * 实际拖拽偏移量是否超出了可调整的宽度范围 - * - * @param offset 实际偏移量 - * @return boolean 是否超出调整范围 - */ - private boolean isBeyondAdjustWidthScope(int offset) { - boolean isBeyondScope = false; - isBeyondScope = offset < 0 ? isBeyondWidthScope(offset, leftComps) : isBeyondWidthScope(offset, rightComps); - return isBeyondScope; - } - - // 实际拖拽偏移量是否超出某一侧的可调整宽度 - private boolean isBeyondWidthScope(int offset, List compsList) { - int compMinWidth = getCompsMinWidth(compsList); - for (int i = 0; i < compsList.size(); i++) { - XCreator creator = (XCreator) compsList.get(i); - if (Math.abs(offset) > (creator.getWidth() - compMinWidth)) { - return true; - } - } - return false; - } - - /** - * 删除或拉伸控件左边框时 调整左侧的组件位置大小; - */ + int count = rightComps.size(); + for (int i = 0; i < count; i++) { + XCreator creator = (XCreator) rightComps.get(i); + adjustCompsSize(creator, objWidth, true); + int ry = creator.getY(); + int rwidth = creator.getWidth(); + int rheight = creator.getHeight(); + creator.setLocation(objX, ry); + creator.setSize(rwidth + objWidth, rheight); + } + } + + /** + * 实际拖拽偏移量是否超出了可调整的宽度范围 + * + * @param offset 实际偏移量 + * @return boolean 是否超出调整范围 + */ + private boolean isBeyondAdjustWidthScope(int offset) { + boolean isBeyondScope = false; + isBeyondScope = offset < 0 ? isBeyondWidthScope(offset, leftComps) : isBeyondWidthScope(offset, rightComps); + return isBeyondScope; + } + + // 实际拖拽偏移量是否超出某一侧的可调整宽度 + private boolean isBeyondWidthScope(int offset, List compsList) { + int compMinWidth = getCompsMinWidth(compsList); + for (int i = 0; i < compsList.size(); i++) { + XCreator creator = (XCreator) compsList.get(i); + if (Math.abs(offset) > (creator.getWidth() - compMinWidth)) { + return true; + } + } + return false; + } + + /** + * 删除或拉伸控件左边框时 调整左侧的组件位置大小; + */ protected boolean calculateLefttRelatComponent(int objWidth) { - if (isBeyondAdjustWidthScope(objWidth)) { - return false; - } - int count = leftComps.size(); - for (int i = 0; i < count; i++) { - XCreator creator = (XCreator) leftComps.get(i); - adjustCompsSize(creator, objWidth, true); - int rwidth = creator.getWidth(); - int rheight = creator.getHeight(); - creator.setSize(rwidth + objWidth, rheight); - } - return true; - } - - /** - * 删除或拉伸下边框 调整下方的组件位置大小 - */ + if (isBeyondAdjustWidthScope(objWidth)) { + return false; + } + int count = leftComps.size(); + for (int i = 0; i < count; i++) { + XCreator creator = (XCreator) leftComps.get(i); + adjustCompsSize(creator, objWidth, true); + int rwidth = creator.getWidth(); + int rheight = creator.getHeight(); + creator.setSize(rwidth + objWidth, rheight); + } + return true; + } + + /** + * 删除或拉伸下边框 调整下方的组件位置大小 + */ protected void calculateDownRelatComponent(int objY, int objHeight) { - int count = downComps.size(); - for (int i = 0; i < count; i++) { - XCreator creator = (XCreator) downComps.get(i); - adjustCompsSize(creator, objHeight, false); - int rx = creator.getX(); - int rwidth = creator.getWidth(); - int rheight = creator.getHeight(); - creator.setLocation(rx, objY); - creator.setSize(rwidth, rheight + objHeight); - } - } - - /** - * 实际拖拽偏移量是否超出了可调整的高度范围 - * - * @param offset 实际偏移量 - * @return boolean 是否超出调整范围 - */ - private boolean isBeyondAdjustHeightScope(int offset) { - boolean isBeyondScope = false; - isBeyondScope = offset < 0 ? isBeyondHeightScope(offset, upComps) : isBeyondHeightScope(offset, downComps); - return isBeyondScope; - } - - // 实际拖拽偏移量是否超出某一侧的可调整高度 - private boolean isBeyondHeightScope(int offset, List compsList) { - int minHeight = getCompsMinHeight(compsList); - for (int i = 0; i < compsList.size(); i++) { - XCreator creator = (XCreator) compsList.get(i); - if (Math.abs(offset) > (creator.getHeight() - minHeight)) { - return true; - } - } - return false; - } - - /** - * 删除或拉伸上边框 调整上方的组件位置大小 - */ + int count = downComps.size(); + for (int i = 0; i < count; i++) { + XCreator creator = (XCreator) downComps.get(i); + adjustCompsSize(creator, objHeight, false); + int rx = creator.getX(); + int rwidth = creator.getWidth(); + int rheight = creator.getHeight(); + creator.setLocation(rx, objY); + creator.setSize(rwidth, rheight + objHeight); + } + } + + /** + * 实际拖拽偏移量是否超出了可调整的高度范围 + * + * @param offset 实际偏移量 + * @return boolean 是否超出调整范围 + */ + private boolean isBeyondAdjustHeightScope(int offset) { + boolean isBeyondScope = false; + isBeyondScope = offset < 0 ? isBeyondHeightScope(offset, upComps) : isBeyondHeightScope(offset, downComps); + return isBeyondScope; + } + + // 实际拖拽偏移量是否超出某一侧的可调整高度 + private boolean isBeyondHeightScope(int offset, List compsList) { + int minHeight = getCompsMinHeight(compsList); + for (int i = 0; i < compsList.size(); i++) { + XCreator creator = (XCreator) compsList.get(i); + if (Math.abs(offset) > (creator.getHeight() - minHeight)) { + return true; + } + } + return false; + } + + /** + * 删除或拉伸上边框 调整上方的组件位置大小 + */ protected boolean calculateUpRelatComponent(int objHeight) { - if (isBeyondAdjustHeightScope(objHeight)) { - return false; - } - int count = upComps.size(); - for (int i = 0; i < count; i++) { - XCreator creator = (XCreator) upComps.get(i); - adjustCompsSize(creator, objHeight, false); - int rwidth = creator.getWidth(); - int rheight = creator.getHeight(); - creator.setSize(rwidth, rheight + objHeight); - } - return true; - } - - /** - * 不调整,只计算位置 - * - * @return child的位置 - */ - public int[] getChildPosition(Component currentComp, XCreator child, int x, int y) { - return super.getChildPosition(currentComp, child, x, y); - } - - @Override - public ConstraintsGroupModel getLayoutConstraints(XCreator creator) { - return new FRFitLayoutConstraints((XWFitLayout) container, creator); - } + if (isBeyondAdjustHeightScope(objHeight)) { + return false; + } + int count = upComps.size(); + for (int i = 0; i < count; i++) { + XCreator creator = (XCreator) upComps.get(i); + adjustCompsSize(creator, objHeight, false); + int rwidth = creator.getWidth(); + int rheight = creator.getHeight(); + creator.setSize(rwidth, rheight + objHeight); + } + return true; + } + + /** + * 不调整,只计算位置 + * + * @return child的位置 + */ + public int[] getChildPosition(Component currentComp, XCreator child, int x, int y) { + return super.getChildPosition(currentComp, child, x, y); + } + + @Override + public ConstraintsGroupModel getLayoutConstraints(XCreator creator) { + return new FRFitLayoutConstraints((XWFitLayout) container, creator); + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/location/Inner.java b/designer_form/src/com/fr/design/designer/beans/location/Inner.java index c90924489..b07b18b4a 100644 --- a/designer_form/src/com/fr/design/designer/beans/location/Inner.java +++ b/designer_form/src/com/fr/design/designer/beans/location/Inner.java @@ -9,8 +9,8 @@ import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.FormSelection; import com.fr.design.utils.ComponentUtils; import com.fr.form.ui.container.WAbsoluteLayout; -import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import com.fr.stable.ArrayUtils; +import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import java.awt.*; import java.awt.Rectangle; diff --git a/designer_form/src/com/fr/design/designer/creator/XElementCase.java b/designer_form/src/com/fr/design/designer/creator/XElementCase.java index 56aca1c43..7eb967a9f 100644 --- a/designer_form/src/com/fr/design/designer/creator/XElementCase.java +++ b/designer_form/src/com/fr/design/designer/creator/XElementCase.java @@ -10,9 +10,11 @@ import com.fr.design.fun.WidgetPropertyUIProvider; import com.fr.design.fun.impl.AbstractFormElementCaseEditorProvider; import com.fr.design.gui.ilable.UILabel; import com.fr.design.mainframe.*; -import com.fr.design.mainframe.widget.editors.ElementCaseToolBarEditor; +import com.fr.design.mainframe.widget.editors.BooleanEditor; import com.fr.design.mainframe.widget.editors.PaddingMarginEditor; import com.fr.design.mainframe.widget.editors.WLayoutBorderStyleEditor; +import com.fr.design.mainframe.widget.renderer.LayoutBorderStyleRenderer; +import com.fr.design.mainframe.widget.renderer.PaddingMarginCellRenderer; import com.fr.form.FormElementCaseContainerProvider; import com.fr.form.FormElementCaseProvider; import com.fr.form.FormProvider; @@ -86,7 +88,8 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme @Override public void propertyChange() { - makeVisible(toData().isVisible());} + makeVisible(toData().isVisible()); + } }), new CRPropertyDescriptor("borderStyle", this.data.getClass()).setEditorClass( WLayoutBorderStyleEditor.class).setI18NName( @@ -97,12 +100,11 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme public void propertyChange() { initStyle(); } - }), new CRPropertyDescriptor("margin", this.data.getClass()).setEditorClass(PaddingMarginEditor.class) .setI18NName(Inter.getLocText("FR-Layout_Padding")) .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced"), - new CRPropertyDescriptor("toolBars", this.data.getClass()).setEditorClass(ElementCaseToolBarEditor.class) + new CRPropertyDescriptor("showToolBar", this.data.getClass()).setEditorClass(BooleanEditor.class) .setI18NName(Inter.getLocText("Form-EC_toolbar")) .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced") }; diff --git a/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java b/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java index 852cdf122..b585383c6 100644 --- a/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java @@ -3,6 +3,14 @@ */ package com.fr.design.designer.creator; +import java.awt.*; +import java.awt.event.ContainerEvent; +import java.awt.event.MouseEvent; +import java.awt.image.BufferedImage; +import java.beans.IntrospectionException; +import java.util.ArrayList; +import java.util.HashMap; + import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.ComponentAdapter; import com.fr.design.designer.beans.LayoutAdapter; @@ -12,369 +20,345 @@ import com.fr.design.designer.beans.models.SelectionModel; import com.fr.design.designer.creator.cardlayout.XWTabFitLayout; import com.fr.design.form.layout.FRAbsoluteLayout; import com.fr.design.icon.IconPathConstants; -import com.fr.design.mainframe.EditingMouseListener; -import com.fr.design.mainframe.FormArea; -import com.fr.design.mainframe.FormDesigner; +import com.fr.design.mainframe.*; import com.fr.form.ui.Connector; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WAbsoluteLayout; -import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import com.fr.form.ui.container.WLayout; +import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import com.fr.general.FRScreen; import com.fr.general.IOUtils; import com.fr.general.Inter; -import java.awt.*; -import java.awt.event.ContainerEvent; -import java.awt.event.MouseEvent; -import java.awt.image.BufferedImage; -import java.beans.IntrospectionException; -import java.util.ArrayList; -import java.util.HashMap; - /** * @author richer * @since 6.5.3 */ public class XWAbsoluteLayout extends XLayoutContainer { - private static final int EDIT_BTN_WIDTH = 60; - private static final int EDIT_BTN_HEIGHT = 24; - private int minWidth = WLayout.MIN_WIDTH; - private int minHeight = WLayout.MIN_HEIGHT; - - //由于屏幕分辨率不同,界面上的容器大小可能不是默认的100%,此时拖入组件时,保存的大小按照100%时的计算 - protected double containerPercent = 1.0; - - private HashMap xConnectorMap; - - public XWAbsoluteLayout() { - this(new WAbsoluteLayout(), new Dimension()); - } - - public XWAbsoluteLayout(WAbsoluteLayout widget) { - this(widget, new Dimension()); - } - - public XWAbsoluteLayout(WAbsoluteLayout widget, Dimension initSize) { - super(widget, initSize); - this.xConnectorMap = new HashMap(); - Connector connector; - for (int i = 0; i < widget.connectorCount(); i++) { - connector = widget.getConnectorIndex(i); - xConnectorMap.put(connector, new XConnector(connector, this)); - } - - initPercent(widget); - } - - /** - * 初始化时默认的组件大小 - * - * @return 默认Dimension - */ - @Override - public Dimension initEditorSize() { - return new Dimension(500, 300); - } - - //根据屏幕大小来确定显示的百分比, 1440*900默认100%, 1366*768缩放90% - private void initPercent(WAbsoluteLayout widget) { - Toolkit toolkit = Toolkit.getDefaultToolkit(); - Dimension scrnsize = toolkit.getScreenSize(); - double screenValue = FRScreen.getByDimension(scrnsize).getValue(); - if (screenValue != FormArea.DEFAULT_SLIDER) { - this.setContainerPercent(screenValue / FormArea.DEFAULT_SLIDER); - } - } - - /** - * 返回容器大小的百分比 - * - * @return the containerPercent - */ - public double getContainerPercent() { - return containerPercent; - } - - /** - * 设置容器大小的百分比 - * - * @param containerPercent the containerPercent to set - */ - public void setContainerPercent(double containerPercent) { - this.containerPercent = containerPercent; - minWidth = (int) (XWAbsoluteLayout.MIN_WIDTH * containerPercent); - minHeight = (int) (XWAbsoluteLayout.MIN_HEIGHT * containerPercent); - } - - /** - * 返回界面处根据百分比调整后的最小宽度 - * - * @return 最小宽度 - */ - public int getActualMinWidth() { - return this.minWidth; - } - - /** - * 返回界面处根据百分比调整后的最小高度 - * - * @return 最小高度 - */ - public int getActualMinHeight() { - return this.minHeight; - } - - /** - * 返回界面处根据百分比调整后的间隔大小(且为偶数) - * - * @return 间隔 - */ - public int getAcualInterval() { - // adapter那边交叉三等分、删除都要判断是否对齐,所以间隔转为偶数 - int interval = (int) (toData().getCompInterval() * containerPercent); - int val = interval / 2; - return val * 2; - } - - /** - * 界面容器大小不是默认的时,处理控件的BoundsWidget,且避免出现空隙 - */ - private Rectangle dealWidgetBound(Rectangle rec) { - if (containerPercent == 1.0) { - return rec; - } - rec.x = (int) (rec.x / containerPercent); - rec.y = (int) (rec.y / containerPercent); - rec.width = (int) (rec.width / containerPercent); - rec.height = (int) (rec.height / containerPercent); - return rec; - } - - /** - * 新增删除拉伸后单个组件的BoundsWidget - */ - public void updateBoundsWidget(XCreator xCreator) { - WAbsoluteLayout layout = this.toData(); - if (xCreator.hasTitleStyle()) { - xCreator = (XLayoutContainer) xCreator.getParent(); - } - if (xCreator.acceptType(XWAbsoluteLayout.class)) { - ((XWAbsoluteLayout) xCreator).updateBoundsWidget(); - } - // 如果子组件时tab布局,则tab布局内部的组件的wiget也要更新,否则保存后重新打开大小不对 - ArrayList childrenList = xCreator.getTargetChildrenList(); - if (!childrenList.isEmpty()) { - for (int i = 0; i < childrenList.size(); i++) { - XWTabFitLayout tabLayout = (XWTabFitLayout) childrenList.get(i); - tabLayout.updateBoundsWidget(); - } - } - BoundsWidget boundsWidget = (BoundsWidget) layout.getBoundsWidget(xCreator.toData()); - Rectangle rectangle = dealWidgetBound(xCreator.getBounds()); - } - - private Rectangle calculateBound(Rectangle rec, double pw, double ph) { - Rectangle calRec = new Rectangle(0, 0, 0, 0); - calRec.x = (int) (rec.x / pw); - calRec.y = (int) (rec.y / ph); - calRec.width = (int) (rec.width / pw); - calRec.height = (int) (rec.height / ph); - return calRec; - } - - /** - * 新增删除拉伸后每个组件的BoundsWidget - */ - public void updateBoundsWidget() { - WAbsoluteLayout layout = this.toData(); - Rectangle backupBound = this.getBackupBound(); - Rectangle currentBound = this.getBounds(); - if (backupBound != null && layout.getCompState() == WAbsoluteLayout.STATE_FIT) { - double percentW = ((double) backupBound.width / (double) currentBound.width); - double percentH = ((double) backupBound.height / (double) currentBound.height); - for (int index = 0, n = this.getComponentCount(); index < n; index++) { - XCreator creator = (XCreator) this.getComponent(index); - BoundsWidget wgt = (BoundsWidget) layout.getBoundsWidget(creator.toData()); - // 用当前的显示大小计算后调正具体位置 - Rectangle wgtBound = creator.getBounds(); - Rectangle rec = calculateBound(wgtBound, percentW, percentH); - wgt.setBounds(rec); - creator.setBounds(rec); - //绝对布局嵌套,要更新内部的绝对布局 - if (creator.acceptType(XWAbsoluteLayout.class)) { - creator.setBackupBound(wgtBound); - ((XWAbsoluteLayout) creator).updateBoundsWidget(); - } - } - } - } - - /** - * 更新子组件的Bound - * 这边主要用于绝对布局子组件在适应区域选项时 - * 涉及到的不同分辨率下缩放 - * - * @param minHeight 最小高度 - */ - @Override - public void updateChildBound(int minHeight) { - double prevContainerPercent = FRScreen.getByDimension(toData().getDesigningResolution()).getValue() / FormArea.DEFAULT_SLIDER; - if (toData().getCompState() == 0 && prevContainerPercent != containerPercent) { - for (int i = 0; i < this.getComponentCount(); i++) { - XCreator creator = getXCreator(i); - Rectangle rec = new Rectangle(creator.getBounds()); - rec.x = (int) (rec.x / prevContainerPercent * containerPercent); - rec.y = (int) (rec.y / prevContainerPercent * containerPercent); - rec.height = (int) (rec.height / prevContainerPercent * containerPercent); - rec.width = (int) (rec.width / prevContainerPercent * containerPercent); - BoundsWidget wgt = (BoundsWidget) toData().getBoundsWidget(creator.toData()); - wgt.setBounds(rec); - creator.setBounds(rec); - creator.updateChildBound(minHeight); - } - } - toData().setDesigningResolution(Toolkit.getDefaultToolkit().getScreenSize()); - } - - /** - * 增加对齐线 - * - * @param connector 对齐线 - */ - public void addConnector(Connector connector) { - xConnectorMap.put(connector, new XConnector(connector, this)); - ((WAbsoluteLayout) data).addConnector(connector); - } - - public XConnector getXConnector(Connector connector) { - return xConnectorMap.get(connector); - } - - /** - * 去除对齐线 - * - * @param connector 对齐线 - */ - public void removeConnector(Connector connector) { - ((WAbsoluteLayout) data).removeConnector(connector); - xConnectorMap.remove(connector); - } - - /** - * 返回对应的widget容器 - * - * @return 返回WAbsoluteLayout - */ - @Override - public WAbsoluteLayout toData() { - return (WAbsoluteLayout) data; - } - - @Override - protected String getIconName() { - return "layout_absolute_new.png"; - } - - /** - * 返回默认的容器name - * - * @return 返回绝对布局容器名 - */ - @Override - public String createDefaultName() { - return "absolute"; - } - - @Override - protected void initLayoutManager() { - this.setLayout(new FRAbsoluteLayout()); - } - - /** - * 是否支持标题样式 - * - * @return 默认false - */ - @Override - public boolean hasTitleStyle() { - return false; - } - - @Override - public void paintComponent(Graphics g) { - super.paintComponent(g); - WAbsoluteLayout layout = (WAbsoluteLayout) data; - Connector[] connector = layout.getConnector(); - for (int i = 0, size = connector.length; i < size; i++) { - connector[i].draw(g); - } - } - - /** - * 转换保存组件信息的wlayout为对应的container - */ - @Override - public void convert() { - isRefreshing = true; - WAbsoluteLayout abs = toData(); - this.removeAll(); - for (int i = 0, count = abs.getWidgetCount(); i < count; i++) { - BoundsWidget bw = (BoundsWidget) abs.getWidget(i); - if (bw != null) { - Rectangle bounds = bw.getBounds(); - XWidgetCreator comp = (XWidgetCreator) XCreatorUtils.createXCreator(bw.getWidget()); - if (!comp.acceptType(XWParameterLayout.class)) { - comp.setDirections(Direction.ALL); - } - add(comp); - comp.setBounds(bounds); - } - } - isRefreshing = false; - } - - /** - * 当前组件zorder位置替换新的控件 - * - * @param widget 控件 - * @param oldcreator 旧组件 - * @return 组件 - */ - @Override - public XCreator replace(Widget widget, XCreator oldcreator) { - int i = this.getComponentZOrder(oldcreator); - if (i != -1) { - this.toData().replace(new BoundsWidget(widget, oldcreator.getBounds()), - new BoundsWidget(oldcreator.toData(), oldcreator.getBounds())); - this.convert(); - return (XCreator) this.getComponent(i); - } - return null; - } - - /** + private static final int EDIT_BTN_WIDTH = 60; + private static final int EDIT_BTN_HEIGHT = 24; + private int minWidth = WLayout.MIN_WIDTH; + private int minHeight = WLayout.MIN_HEIGHT; + + //由于屏幕分辨率不同,界面上的容器大小可能不是默认的100%,此时拖入组件时,保存的大小按照100%时的计算 + protected double containerPercent = 1.0; + + private HashMap xConnectorMap; + + public XWAbsoluteLayout() { + this(new WAbsoluteLayout(),new Dimension()); + } + + public XWAbsoluteLayout(WAbsoluteLayout widget) { + this(widget,new Dimension()); + } + + public XWAbsoluteLayout(WAbsoluteLayout widget, Dimension initSize) { + super(widget, initSize); + this.xConnectorMap = new HashMap(); + Connector connector; + for (int i = 0; i < widget.connectorCount(); i++) { + connector = widget.getConnectorIndex(i); + xConnectorMap.put(connector, new XConnector(connector, this)); + } + + initPercent(widget); + } + + /** + * 初始化时默认的组件大小 + * + * @return 默认Dimension + */ + @Override + public Dimension initEditorSize() { + return new Dimension(500, 300); + } + + //根据屏幕大小来确定显示的百分比, 1440*900默认100%, 1366*768缩放90% + private void initPercent(WAbsoluteLayout widget){ + Toolkit toolkit = Toolkit.getDefaultToolkit(); + Dimension scrnsize = toolkit.getScreenSize(); + double screenValue = FRScreen.getByDimension(scrnsize).getValue(); + if(screenValue != FormArea.DEFAULT_SLIDER){ + this.setContainerPercent(screenValue / FormArea.DEFAULT_SLIDER); + } + } + + /** + * 返回容器大小的百分比 + * @return the containerPercent + */ + public double getContainerPercent() { + return containerPercent; + } + + /** + * 设置容器大小的百分比 + * @param containerPercent the containerPercent to set + */ + public void setContainerPercent(double containerPercent) { + this.containerPercent = containerPercent; + minWidth = (int) (XWAbsoluteLayout.MIN_WIDTH*containerPercent); + minHeight = (int) (XWAbsoluteLayout.MIN_HEIGHT*containerPercent); + } + + /** + * 返回界面处根据百分比调整后的最小宽度 + * @return 最小宽度 + */ + public int getActualMinWidth() { + return this.minWidth; + } + + /** + * 返回界面处根据百分比调整后的最小高度 + * @return 最小高度 + */ + public int getActualMinHeight() { + return this.minHeight; + } + + /** + * 返回界面处根据百分比调整后的间隔大小(且为偶数) + * @return 间隔 + */ + public int getAcualInterval() { + // adapter那边交叉三等分、删除都要判断是否对齐,所以间隔转为偶数 + int interval = (int) (toData().getCompInterval()*containerPercent); + int val = interval/2; + return val*2; + } + + /** + * 界面容器大小不是默认的时,处理控件的BoundsWidget,且避免出现空隙 + */ + private Rectangle dealWidgetBound(Rectangle rec) { + if (containerPercent == 1.0) { + return rec; + } + rec.x = (int) (rec.x/containerPercent); + rec.y = (int) (rec.y/containerPercent); + rec.width = (int) (rec.width/containerPercent); + rec.height = (int) (rec.height/containerPercent); + return rec; + } + + /** + * 新增删除拉伸后单个组件的BoundsWidget + */ + public void updateBoundsWidget(XCreator xCreator) { + WAbsoluteLayout layout = this.toData(); + if (xCreator.hasTitleStyle()) { + xCreator = (XLayoutContainer)xCreator.getParent(); + } + if (xCreator.acceptType(XWAbsoluteLayout.class)){ + ((XWAbsoluteLayout) xCreator).updateBoundsWidget(); + } + // 如果子组件时tab布局,则tab布局内部的组件的wiget也要更新,否则保存后重新打开大小不对 + ArrayList childrenList = xCreator.getTargetChildrenList(); + if(!childrenList.isEmpty()){ + for(int i=0; i Date: Tue, 2 May 2017 14:25:48 +0800 Subject: [PATCH 317/343] ct --- .../layout/FRAbsoluteLayoutAdapter.java | 685 +++++++------ .../adapters/layout/FRFitLayoutAdapter.java | 68 +- .../beans/location/AccessDirection.java | 89 +- .../designer/beans/models/AddingModel.java | 280 +++--- .../designer/beans/models/StateModel.java | 950 +++++++++--------- .../beans/painters/AbstractPainter.java | 190 ++-- .../design/mainframe/FormSelectionUtils.java | 4 +- 7 files changed, 1128 insertions(+), 1138 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java index 8ca201252..539e60450 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java @@ -1,346 +1,341 @@ -package com.fr.design.designer.beans.adapters.layout; - -import com.fr.design.beans.GroupModel; -import com.fr.design.designer.beans.ConstraintsGroupModel; -import com.fr.design.designer.beans.HoverPainter; -import com.fr.design.designer.beans.painters.FRAbsoluteLayoutPainter; -import com.fr.design.designer.creator.*; -import com.fr.design.designer.properties.BoundsGroupModel; -import com.fr.design.designer.properties.FRAbsoluteLayoutPropertiesGroupModel; -import com.fr.design.utils.ComponentUtils; -import com.fr.design.utils.gui.LayoutUtils; -import com.fr.form.ui.container.WAbsoluteLayout; -import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; - -import java.awt.*; - -public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { - //是不是添加到父容器上 - private boolean isAdd2ParentLayout = false; - private HoverPainter painter; - - public FRAbsoluteLayoutAdapter(XLayoutContainer container) { - super(container); - painter = new FRAbsoluteLayoutPainter(container); - initMinSize(); - } - - private void initMinSize() { - XWAbsoluteLayout layout = (XWAbsoluteLayout) container; - minWidth = layout.getActualMinWidth(); - minHeight = layout.getActualMinHeight(); - actualVal = layout.getAcualInterval(); - margin = layout.toData().getMargin(); - } - - @Override - public HoverPainter getPainter() { - return painter; - } - - /** - * 是否能在指定位置添加组件 - * - * @param creator 组件 - * @param x 坐标x - * @param y 坐标y - * @return 能则返回true - */ - //这个地方的逻辑非常复杂, - // 1.当前绝对布局是不可编辑且是最外层,那么其他控件添加在它周围, - // 2.当前绝对布局是不可编辑且不是最外层,那么控件不可添加,(嵌套) - // 3.当前绝对布局可编辑,那么控件添加 - @Override - public boolean accept(XCreator creator, int x, int y) { - Component comp = container.getComponentAt(x, y); - //布局控件要先判断是不是可编辑 - //可以编辑,按原有逻辑判断 - //不可编辑,当成一整个控件处理 - if (comp == null) { - return false; - } - //参数面板内的组件不允许拖往绝对布局中 - if (creator.getParent() != null && ((XCreator) creator.getParent()).acceptType(XWParameterLayout.class)) { - Rectangle rec = creator.getBounds(); - rec.y = creator.getParent().getHeight() - rec.height; - creator.setBounds(rec); - return false; - } - //判断组件能不能拖入绝对布局 - if (!creator.canEnterIntoAbsolutePane()) { - return false; - } - XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer((XCreator) comp).getTopLayout(); - if (topLayout != null) { - if (topLayout.isEditable()) { - return topLayoutAccept(creator, x, y); - } - //绝对布局嵌套,处于内层,不可编辑,不添加,topLayout只能获取到最外层可编辑的布局 - else if (((XLayoutContainer) topLayout.getParent()).acceptType(XWAbsoluteLayout.class)) { - return false; - } else { - return acceptWidget(x, y); - } - } else { - FRLogger.getLogger().error("top layout is null!"); - } - - return false; - } - - //topLayout假如可以编辑的话就往里面添加组件 - private boolean topLayoutAccept(XCreator creator, int x, int y) { - //允许组件重叠,可以不判断有没有和当前控件重叠 - //先计算当前控件的位置 - int creatorX, creatorY; - if (XCreatorUtils.getParentXLayoutContainer(creator) != null) { - Rectangle creatorRectangle = ComponentUtils.getRelativeBounds(creator); - creatorX = creatorRectangle.x; - creatorY = creatorRectangle.y; - } else { - //这边计算得到的组件其实位置是正确的, - //因为传入的x和y已经加上了宽度或者高度的一半,再减去相同的宽度和高度的一半是没区别的, - // 例如高度为21,那么就是+10-10; - // 高度为20,那么就是+10-10; 没区别 - int w = creator.getWidth() / 2; - int h = creator.getHeight() / 2; - creatorX = x - w; - creatorY = y - h; - } - if (creatorX < 0 || creatorX + creator.getWidth() > container.getWidth()) { - return false; - } - if (creatorY < 0 || creatorY + creator.getHeight() > container.getHeight()) { - return false; - } - return x >= 0 && y >= 0 && creator.getHeight() <= container.getHeight() - && creator.getWidth() <= container.getWidth(); - } - - /** - * 判断是否鼠标在组件的三等分区域,如果组件在布局管理器中间,上下左右都可能会三等分 - * - * @param parentComp 鼠标所在区域的组件 - * @param x 坐标x - * @param y 坐标y - * @return 是则返回true - */ - public boolean isTrisectionArea(Component parentComp, int x, int y) { - XCreator creator = (XCreator) parentComp; - trisectAreaDirect = 0; - if (container.getComponentCount() <= 1) { - return false; - } - int maxWidth = parentComp.getWidth(); - int maxHeight = parentComp.getHeight(); - int xL = parentComp.getX(); - int yL = parentComp.getY(); - // 组件宽高的十分之一和默认值取大 - int minRangeWidth = Math.max(maxWidth / BORDER_PROPORTION, DEFAULT_AREA_LENGTH); - int minRangeHeight = Math.max(maxHeight / BORDER_PROPORTION, DEFAULT_AREA_LENGTH); - if (y < yL + minRangeHeight) { - // 在组件上侧三等分 - trisectAreaDirect = COMP_TOP; - } else if (y > yL + maxHeight - minRangeHeight) { - // 在组件下侧三等分 - trisectAreaDirect = COMP_BOTTOM; - } else if (x < xL + minRangeWidth) { - // 在组件左侧三等分 - trisectAreaDirect = COMP_LEFT; - } else if (x > xL + maxWidth - minRangeWidth) { - // 在组件右侧三等分 - trisectAreaDirect = COMP_RIGHT; - } - // tab布局的边界特殊处理,不进行三等分 - if (!creator.getTargetChildrenList().isEmpty()) { - return false; - } - - return !ComparatorUtils.equals(trisectAreaDirect, 0); - } - - //当前绝对布局不可编辑,就当成一个控件,组件添加在周围 - private boolean acceptWidget(int x, int y) { - isFindRelatedComps = false; - //拖入组件判断时,先判断是否为交叉点区域,其次三等分区域,再次平分区域 - Component comp = container.getComponentAt(x, y); - //如果当前处于边缘地带, 那么就把他贴到父容器上 - XLayoutContainer parent = container.findNearestFit(); - container = parent != null ? parent : container; - isAdd2ParentLayout = true; - - int componentHeight = comp.getHeight(); - int componentWidth = comp.getWidth(); - //上半部分高度 - int upHeight = (int) (componentHeight * TOP_HALF) + comp.getY(); - //下半部分高度 - int downHeight = (int) (componentHeight * BOTTOM_HALF) + comp.getY(); - - if (isCrossPointArea(comp, x, y)) { - return canAcceptWhileCrossPoint(comp, x, y); - } - - if (isTrisectionArea(comp, x, y)) { - return canAcceptWhileTrisection(comp, x, y); - } - - boolean horizonValid = componentWidth >= minWidth * 2 + actualVal; - boolean verticalValid = componentHeight >= minHeight * 2 + actualVal; - return y > upHeight && y < downHeight ? horizonValid : verticalValid; - } - - /** - * 组件的ComponentAdapter在添加组件时,如果发现布局管理器不为空,会继而调用该布局管理器的 - * addComp方法来完成组件的具体添加。在该方法内,布局管理器可以提供额外的功能。 - * - * @param creator 被添加的新组件 - * @param x 添加的位置x,该位置是相对于container的 - * @param y 添加的位置y,该位置是相对于container的 - * @return 是否添加成功,成功返回true,否则false - */ - @Override - public boolean addBean(XCreator creator, int x, int y) { - Rectangle rect = ComponentUtils.getRelativeBounds(container); - - int posX = x + rect.x; - int posY = y + rect.y; - if (!accept(creator, x, y)) { - return false; - } - addComp(creator, posX, posY); - ((XWidgetCreator) creator).recalculateChildrenSize(); - return true; - } - - @Override - protected void addComp(XCreator creator, int x, int y) { - if (!isAdd2ParentLayout) { - Rectangle r = ComponentUtils.getRelativeBounds(container); - x = x - r.x; - y = y - r.y; - if (XCreatorUtils.getParentXLayoutContainer(creator) != null) { - - Rectangle creatorRectangle = ComponentUtils.getRelativeBounds(creator); - x = creatorRectangle.x - r.x; - y = creatorRectangle.y - r.y; - } else { - int w = creator.getWidth() / 2; - int h = creator.getHeight() / 2; - x = x - w; - y = y - h; - } - fix(creator, x, y); - - if (creator.hasTitleStyle()) { - addParentCreator(creator); - } else { - container.add(creator, creator.toData().getWidgetName(), 0); - } - XWAbsoluteLayout layout = (XWAbsoluteLayout) container; - layout.updateBoundsWidget(creator); - updateCreatorBackBound(); - LayoutUtils.layoutRootContainer(container); - } else { - fixAbsolute(creator, x, y); - if (creator.shouldScaleCreator() || creator.hasTitleStyle()) { - addParentCreator(creator); - } else { - container.add(creator, creator.toData().getWidgetName(), 0); - } - XWFitLayout layout = (XWFitLayout) container; - // 更新对应的BoundsWidget - layout.updateBoundsWidget(); - updateCreatorBackBound(); - } - } - - private void updateCreatorBackBound() { - for (int i = 0, size = container.getComponentCount(); i < size; i++) { - XCreator creator = (XCreator) container.getComponent(i); - creator.updateChildBound(minHeight); - creator.setBackupBound(creator.getBounds()); - } - } - - private void addParentCreator(XCreator child) { - XLayoutContainer parentPanel = child.initCreatorWrapper(child.getHeight()); - container.add(parentPanel, child.toData().getWidgetName(), 0); - } - - /** - * 新拖入组件时,计算调整其他关联组件位置大小 - * - * @param child 新拖入的组件 - * @param x 鼠标所在x坐标 - * @param y 鼠标所在y坐标 - */ - 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()); - } else if (isCrossPointArea(parentComp, x, y)) { - //交叉区域插入组件时,根据具体位置进行上下或者左右或者相邻三个组件的位置大小插入 - fixCrossPointArea(parentComp, child, x, y); - return; - } else if (isTrisectionArea(parentComp, x, y)) { - // 在边界三等分区域,就不再和组件二等分了 - fixTrisect(parentComp, child, x, y); - return; - } else { - fixHalve(parentComp, child, x, y); - } - } - - /** - * 组件拖拽后调整大小 - * - * @param creator 组件 - */ - @Override - public void fix(XCreator creator) { - WAbsoluteLayout wabs = (WAbsoluteLayout) container.toData(); - fix(creator, creator.getX(), creator.getY()); - wabs.setBounds(creator.toData(), creator.getBounds()); - - XWAbsoluteLayout layout = (XWAbsoluteLayout) container; - layout.updateBoundsWidget(creator); - } - - /** - * 调整组件大小到合适尺寸位置 - * - * @param creator 组件 - * @param x 坐标x - * @param y 坐标y - */ - public void fix(XCreator creator, int x, int y) { - int height = creator.getHeight(); - int width = creator.getWidth(); - if (x < 0) { - x = container.getX(); - } else if (x + creator.getWidth() > container.getWidth()) { - x = container.getWidth() - width; - } - - if (y < 0) { - y = container.getY(); - } else if (y + creator.getHeight() > container.getHeight()) { - y = container.getHeight() - height; - } - - creator.setBounds(x, y, width, height); - } - - @Override - public ConstraintsGroupModel getLayoutConstraints(XCreator creator) { - return new BoundsGroupModel((XWAbsoluteLayout) container, creator); - } - - @Override - public GroupModel getLayoutProperties() { - XWAbsoluteLayout xwAbsoluteLayout = (XWAbsoluteLayout) container; - return new FRAbsoluteLayoutPropertiesGroupModel(xwAbsoluteLayout); - } +package com.fr.design.designer.beans.adapters.layout; + +import com.fr.design.beans.GroupModel; +import com.fr.design.designer.beans.ConstraintsGroupModel; +import com.fr.design.designer.beans.HoverPainter; +import com.fr.design.designer.beans.painters.FRAbsoluteLayoutPainter; +import com.fr.design.designer.creator.*; +import com.fr.design.designer.properties.BoundsGroupModel; +import com.fr.design.designer.properties.FRAbsoluteLayoutPropertiesGroupModel; +import com.fr.design.utils.ComponentUtils; +import com.fr.design.utils.gui.LayoutUtils; +import com.fr.form.ui.container.WAbsoluteLayout; +import com.fr.general.ComparatorUtils; +import com.fr.general.FRLogger; + +import java.awt.*; + +public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { + //是不是添加到父容器上 + private boolean isAdd2ParentLayout = false; + private HoverPainter painter; + + public FRAbsoluteLayoutAdapter(XLayoutContainer container) { + super(container); + painter = new FRAbsoluteLayoutPainter(container); + initMinSize(); + } + + private void initMinSize() { + XWAbsoluteLayout layout = (XWAbsoluteLayout) container; + minWidth = layout.getActualMinWidth(); + minHeight = layout.getActualMinHeight(); + actualVal = layout.getAcualInterval(); + margin = layout.toData().getMargin(); + } + + @Override + public HoverPainter getPainter() { + return painter; + } + + /** + * 是否能在指定位置添加组件 + * @param creator 组件 + * @param x 坐标x + * @param y 坐标y + * @return 能则返回true + */ + //这个地方的逻辑非常复杂, + // 1.当前绝对布局是不可编辑且是最外层,那么其他控件添加在它周围, + // 2.当前绝对布局是不可编辑且不是最外层,那么控件不可添加,(嵌套) + // 3.当前绝对布局可编辑,那么控件添加 + @Override + public boolean accept(XCreator creator, int x, int y) { + Component comp = container.getComponentAt(x, y); + //布局控件要先判断是不是可编辑 + //可以编辑,按原有逻辑判断 + //不可编辑,当成一整个控件处理 + if (comp == null){ + return false; + } + //参数面板内的组件不允许拖往绝对布局中 + if (creator.getParent() != null && ((XCreator)creator.getParent()).acceptType(XWParameterLayout.class)){ + Rectangle rec = creator.getBounds(); + rec.y = creator.getParent().getHeight() - rec.height; + creator.setBounds(rec); + return false; + } + //判断下组件能不能拖入绝对布局 + if (!creator.canEnterIntoAbsolutePane()){ + return false; + } + XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer((XCreator)comp).getTopLayout(); + if(topLayout != null){ + if (topLayout.isEditable()){ + return topLayoutAccept(creator, x, y); + } + //绝对布局嵌套,处于内层,不可编辑,不添加,topLayout只能获取到最外层可编辑的布局 + else if (((XLayoutContainer)topLayout.getParent()).acceptType(XWAbsoluteLayout.class)) { + return false; + } else { + return acceptWidget(x, y); + } + } else { + FRLogger.getLogger().error("top layout is null!"); + } + + return false; + } + + //topLayout假如可以编辑的话就往里面添加组件 + private boolean topLayoutAccept(XCreator creator, int x, int y) { + //允许组件重叠,可以不判断有没有和当前控件重叠 + //先计算当前控件的位置 + int creatorX, creatorY; + if (XCreatorUtils.getParentXLayoutContainer(creator) != null) { + Rectangle creatorRectangle = ComponentUtils.getRelativeBounds(creator); + creatorX = creatorRectangle.x; + creatorY = creatorRectangle.y; + } else { + //这边计算得到的组件其实位置是正确的, + //因为传入的x和y已经加上了宽度或者高度的一半,再减去相同的宽度和高度的一半是没区别的, + // 例如高度为21,那么就是+10-10; + // 高度为20,那么就是+10-10; 没区别 + int w = creator.getWidth() / 2; + int h = creator.getHeight() / 2; + creatorX = x - w; + creatorY = y - h; + } + if (creatorX < 0 || creatorX + creator.getWidth() > container.getWidth()) { + return false; + } + if (creatorY < 0 || creatorY + creator.getHeight() > container.getHeight()){ + return false; + } + return x >= 0 && y >= 0 && creator.getHeight() <= container.getHeight() + && creator.getWidth() <= container.getWidth(); + } + + /** + * 判断是否鼠标在组件的三等分区域,如果组件在布局管理器中间,上下左右都可能会三等分 + * @param parentComp 鼠标所在区域的组件 + * @param x 坐标x + * @param y 坐标y + * @return 是则返回true + */ + public boolean isTrisectionArea(Component parentComp, int x, int y) { + XCreator creator = (XCreator)parentComp; + trisectAreaDirect = 0; + if (container.getComponentCount()<=1) { + return false; + } + int maxWidth = parentComp.getWidth(); + int maxHeight = parentComp.getHeight(); + int xL = parentComp.getX(); + int yL = parentComp.getY(); + // 组件宽高的十分之一和默认值取大 + int minRangeWidth = Math.max(maxWidth/BORDER_PROPORTION, DEFAULT_AREA_LENGTH); + int minRangeHeight = Math.max(maxHeight/BORDER_PROPORTION, DEFAULT_AREA_LENGTH); + if(yyL+maxHeight-minRangeHeight) { + // 在组件下侧三等分 + trisectAreaDirect = COMP_BOTTOM; + } else if (xxL+maxWidth-minRangeWidth) { + // 在组件右侧三等分 + trisectAreaDirect = COMP_RIGHT; + } + // tab布局的边界特殊处理,不进行三等分 + if(!creator.getTargetChildrenList().isEmpty()){ + return false; + } + + return !ComparatorUtils.equals(trisectAreaDirect, 0); + } + + //当前绝对布局不可编辑,就当成一个控件,组件添加在周围 + private boolean acceptWidget(int x, int y) { + isFindRelatedComps = false; + //拖入组件判断时,先判断是否为交叉点区域,其次三等分区域,再次平分区域 + Component comp = container.getComponentAt(x, y); + //如果当前处于边缘地带, 那么就把他贴到父容器上 + XLayoutContainer parent = container.findNearestFit(); + container = parent != null ? parent : container; + isAdd2ParentLayout = true; + + int componentHeight = comp.getHeight(); + int componentWidth = comp.getWidth(); + //上半部分高度 + int upHeight = (int) (componentHeight * TOP_HALF) + comp.getY(); + //下半部分高度 + int downHeight = (int) (componentHeight * BOTTOM_HALF) + comp.getY(); + + if (isCrossPointArea(comp, x, y)) { + return canAcceptWhileCrossPoint(comp, x, y); + } + + if (isTrisectionArea(comp, x, y)) { + return canAcceptWhileTrisection(comp, x, y); + } + + boolean horizonValid = componentWidth >= minWidth * 2 + actualVal; + boolean verticalValid = componentHeight >= minHeight * 2 + actualVal; + return y > upHeight && y < downHeight ? horizonValid : verticalValid; + } + + /** + * 组件的ComponentAdapter在添加组件时,如果发现布局管理器不为空,会继而调用该布局管理器的 + * addComp方法来完成组件的具体添加。在该方法内,布局管理器可以提供额外的功能。 + * + * @param creator 被添加的新组件 + * @param x 添加的位置x,该位置是相对于container的 + * @param y 添加的位置y,该位置是相对于container的 + * @return 是否添加成功,成功返回true,否则false + */ + @Override + public boolean addBean(XCreator creator, int x, int y) { + Rectangle rect = ComponentUtils.getRelativeBounds(container); + + int posX = x + rect.x; + int posY = y + rect.y; + if (!accept(creator, x, y)) { + return false; + } + addComp(creator, posX, posY); + ((XWidgetCreator) creator).recalculateChildrenSize(); + return true; + } + + @Override + protected void addComp(XCreator creator, int x, int y) { + if(!isAdd2ParentLayout) { + Rectangle r = ComponentUtils.getRelativeBounds(container); + x = x - r.x; + y = y - r.y; + if (XCreatorUtils.getParentXLayoutContainer(creator) != null) { + + Rectangle creatorRectangle = ComponentUtils.getRelativeBounds(creator); + x = creatorRectangle.x - r.x; + y = creatorRectangle.y - r.y; + } else { + int w = creator.getWidth() / 2; + int h = creator.getHeight() / 2; + x = x - w; + y = y - h; + } + fix(creator, x, y); + + if (creator.hasTitleStyle()) { + addParentCreator(creator); + } else { + container.add(creator, creator.toData().getWidgetName(),0); + } + XWAbsoluteLayout layout = (XWAbsoluteLayout) container; + layout.updateBoundsWidget(creator); + updateCreatorBackBound(); + LayoutUtils.layoutRootContainer(container); + }else{ + fixAbsolute(creator, x, y); + if (creator.shouldScaleCreator() || creator.hasTitleStyle()) { + addParentCreator(creator); + } else { + container.add(creator, creator.toData().getWidgetName(),0); + } + XWFitLayout layout = (XWFitLayout) container; + // 更新对应的BoundsWidget + layout.updateBoundsWidget(); + updateCreatorBackBound(); + } + } + + private void updateCreatorBackBound() { + for (int i=0,size=container.getComponentCount(); i container.getWidth()) { + x = container.getWidth() - width; + } + + if (y < 0) { + y = container.getY(); + } else if (y + creator.getHeight() > container.getHeight()) { + y = container.getHeight() - height; + } + + creator.setBounds(x, y, width, height); + } + + @Override + public ConstraintsGroupModel getLayoutConstraints(XCreator creator) { + return new BoundsGroupModel((XWAbsoluteLayout)container, creator); + } + + @Override + public GroupModel getLayoutProperties() { + XWAbsoluteLayout xwAbsoluteLayout = (XWAbsoluteLayout) container; + return new FRAbsoluteLayoutPropertiesGroupModel(xwAbsoluteLayout); + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java index 03962df48..3a030f7f2 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java @@ -16,19 +16,17 @@ import com.fr.design.designer.creator.cardlayout.XWCardMainBorderLayout; import com.fr.design.designer.creator.cardlayout.XWTabFitLayout; import com.fr.design.designer.properties.FRFitLayoutConstraints; import com.fr.design.designer.properties.FRFitLayoutPropertiesGroupModel; -import com.fr.design.file.HistoryTemplateListPane; -import com.fr.design.mainframe.JForm; import com.fr.design.utils.ComponentUtils; import com.fr.form.ui.LayoutBorderStyle; +import com.fr.form.ui.container.WAbsoluteLayout; import com.fr.form.ui.container.WLayout; import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; import com.fr.general.ComparatorUtils; -import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; -import java.awt.*; -import java.util.ArrayList; -import java.util.List; - +import java.awt.*; +import java.util.ArrayList; +import java.util.List; + /** * 自适应布局的容器适配器 * @@ -50,7 +48,7 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { public void setEdit(boolean edit) { isEdit = edit; } - + /** * 构造函数 * @@ -133,7 +131,7 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { isFindRelatedComps = false; //拖入组件判断时,先判断是否为交叉点区域,其次三等分区域,再次平分区域 Component comp = container.getComponentAt(x, y); - if (comp == null || checkInterval(comp)) { + if (comp == null || checkInterval(comp)) { return false; } //如果当前处于边缘地带, 那么就把他贴到父容器上 @@ -269,13 +267,13 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { } - protected Rectangle getLayoutBound(XWCardMainBorderLayout mainLayout) { + protected Rectangle getLayoutBound(XWCardMainBorderLayout mainLayout) { return mainLayout.getBounds(); } private Rectangle adjustBackupBound(Rectangle backupBound, XWCardMainBorderLayout mainLayout) { - // zhouping: REPORT-2334 表单tab布局中图表放大缩小会明显 - // 这边不需要单独处理参数面板高度了,下面的方法中获取的是XWCardMainBorderLayout相对坐标 + // zhouping: REPORT-2334 表单tab布局中图表放大缩小会明显 + // 这边不需要单独处理参数面板高度了,下面的方法中获取的是XWCardMainBorderLayout相对坐标 Rectangle rec = getLayoutBound(mainLayout); // XWTabLayout里面的横纵坐标收到外层XWCardMainBorderLayout的横纵坐标影响 // 减掉之后可以按照它原来的逻辑执行 @@ -341,13 +339,13 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { * 拖拽控件边框后,根据控件的大小尺寸,进行相关组件的调整 * * @param backupBound 边界备份 - * @param bounds 组件边界 - * @param xCreator 组件 - * @param row 选中的行 - * @param difference 偏移量 + * @param bounds 组件边界 + * @param xCreator 组件 + * @param row 选中的行 + * @param difference 偏移量 */ public void calculateBounds(Rectangle backupBound, Rectangle bounds, XCreator xCreator, int row, int difference) { - Rectangle rc = new Rectangle(0, 0, 0, 0); + Rectangle rc = new Rectangle(0, 0, 0, 0); XLayoutContainer parent = XCreatorUtils.getParentXLayoutContainer(xCreator); if (parent != null) { Rectangle rec = ComponentUtils.getRelativeBounds(parent); @@ -358,17 +356,17 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { //处理左右延伸 switch (row) { case 0: - if (backupBound.width + backupBound.x == container.getWidth() - margin.getRight() + rc.x) { + if (backupBound.width + backupBound.x == container.getWidth() - margin.getRight() + rc.x) { x += difference; } break; case 1: - if (backupBound.y + backupBound.height == container.getHeight() - margin.getBottom() + rc.y) { + if (backupBound.y + backupBound.height == container.getHeight() - margin.getBottom() + rc.y) { y += difference; } break; } - bounds.setLocation(x, y); + bounds.setLocation(x, y); xCreator.setBackupBound(backupBound); xCreator.setBounds(bounds); this.fix(xCreator); @@ -412,7 +410,7 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { // 根据需要依附的位置调整拖拽的坐标值 private int adjustCoordinateByDependingLine(int coordinate, int[] coordinates) { - if (!isEdit) { + if (!isEdit) { for (int i = 0; i < coordinates.length; i++) { if (coordinate == coordinates[i]) { continue; @@ -428,7 +426,7 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { // 根据需要依附的位置调整拖拽的距离 private int adjustDiffByDependingLine(int coordinate, int[] coordinates, int diff) { - if (!isEdit) { + if (!isEdit) { for (int i = 0; i < coordinates.length; i++) { if (coordinate + diff > coordinates[i] - DEPENDING_SCOPE && coordinate + diff < coordinates[i] + DEPENDING_SCOPE) { diff = coordinates[i] - coordinate; @@ -546,8 +544,8 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { difference = Math.max(difference, minWidth - getMinWidth(leftComps)); } //重新计算左右两侧组件size、point - if (calculateLefttRelatComponent(difference)) { - calculateRightRelatComponent(objx + difference, -difference); + if (calculateLefttRelatComponent(difference)) { + calculateRightRelatComponent(objx + difference, -difference); } } @@ -662,8 +660,8 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { difference = Math.max(difference, minHeight - getMinHeight(upComps)); } //重新计算上下两侧组件size、point - if (calculateUpRelatComponent(difference)) { - calculateDownRelatComponent(objY + difference, -difference); + if (calculateUpRelatComponent(difference)) { + calculateDownRelatComponent(objY + difference, -difference); } } @@ -744,13 +742,13 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { int height = creatorHeight; calculateRelatedComponent(x, y, width, height); if (!rightComps.isEmpty() && getAllHeight(rightComps) == height) { - calculateRightRelatComponent(x, width + actualVal); + calculateRightRelatComponent(x, width + actualVal); } else if (!leftComps.isEmpty() && getAllHeight(leftComps) == height) { - calculateLefttRelatComponent(width + actualVal); + calculateLefttRelatComponent(width + actualVal); } else if (!downComps.isEmpty() && getAllWidth(downComps) == width) { - calculateDownRelatComponent(y, height + actualVal); + calculateDownRelatComponent(y, height + actualVal); } else if (!upComps.isEmpty() && getAllWidth(upComps) == width) { - calculateUpRelatComponent(height + actualVal); + calculateUpRelatComponent(height + actualVal); } else { // 由于布局三等分的存在,可能会出现删除组件时,找不到关联的组件填充,此时特殊处理 calculateNoRelatedComponent(x, y, width, height); @@ -1013,7 +1011,7 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { setAdjustedSize(tabLayout, offset, isHor); for (int m = 0; m < tabLayout.getComponentCount(); m++) { XCreator childCreator = tabLayout.getXCreator(m); - BoundsWidget wgt = (BoundsWidget) tabLayout.toData().getBoundsWidget(childCreator.toData()); + WAbsoluteLayout.BoundsWidget wgt = (WAbsoluteLayout.BoundsWidget) tabLayout.toData().getBoundsWidget(childCreator.toData()); wgt.setBounds(tabLayout.getComponent(m).getBounds()); } adjustCreatorsSize(percent, tabLayout, isHor); @@ -1056,7 +1054,7 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { * @param objX 调整后的坐标x * @param objWidth 调整后的宽度 */ - protected void calculateRightRelatComponent(int objX, int objWidth) { + protected void calculateRightRelatComponent(int objX, int objWidth) { int count = rightComps.size(); for (int i = 0; i < count; i++) { XCreator creator = (XCreator) rightComps.get(i); @@ -1096,7 +1094,7 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { /** * 删除或拉伸控件左边框时 调整左侧的组件位置大小; */ - protected boolean calculateLefttRelatComponent(int objWidth) { + protected boolean calculateLefttRelatComponent(int objWidth) { if (isBeyondAdjustWidthScope(objWidth)) { return false; } @@ -1114,7 +1112,7 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { /** * 删除或拉伸下边框 调整下方的组件位置大小 */ - protected void calculateDownRelatComponent(int objY, int objHeight) { + protected void calculateDownRelatComponent(int objY, int objHeight) { int count = downComps.size(); for (int i = 0; i < count; i++) { XCreator creator = (XCreator) downComps.get(i); @@ -1154,7 +1152,7 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { /** * 删除或拉伸上边框 调整上方的组件位置大小 */ - protected boolean calculateUpRelatComponent(int objHeight) { + protected boolean calculateUpRelatComponent(int objHeight) { if (isBeyondAdjustHeightScope(objHeight)) { return false; } diff --git a/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java b/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java index c39dfc4db..3538d2fd9 100644 --- a/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java +++ b/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java @@ -11,6 +11,7 @@ import com.fr.design.mainframe.FormSelection; import com.fr.design.utils.ComponentUtils; import com.fr.form.ui.container.WAbsoluteLayout; import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; +import com.fr.form.ui.container.WParameterLayout; import java.awt.*; @@ -24,7 +25,7 @@ public abstract class AccessDirection implements Direction { private int ymin; private int xmin; - abstract int getCursor(); + abstract int getCursor(); protected abstract Rectangle getDraggedBounds(int dx, int dy, Rectangle currentBounds, FormDesigner designer, Rectangle oldBounds); @@ -51,14 +52,14 @@ public abstract class AccessDirection implements Direction { x = designer.getRootComponent().getWidth(); } //参数面板可以无下限拉长 - if (y < 0) { - y = 0; - } else if (y > designer.getRootComponent().getHeight() + designer.getParaHeight() && designer.getSelectionModel().hasSelectionComponent() + if (y < 0) { + y = 0; + } else if (y > designer.getRootComponent().getHeight() + designer.getParaHeight() && designer.getSelectionModel().hasSelectionComponent() && !designer.getSelectionModel().getSelection().getSelectedCreator().acceptType(XWParameterLayout.class)) { - y = designer.getRootComponent().getHeight() + designer.getParaHeight(); - } - return new Point(x, y); - } + y = designer.getRootComponent().getHeight() + designer.getParaHeight(); + } + return new Point(x, y); + } protected void sorptionPoint(Point point, Rectangle currentBounds, FormDesigner designer) { boolean findInX = currentBounds.getWidth() <= MoveUtils.SORPTION_UNIT; @@ -95,10 +96,10 @@ public abstract class AccessDirection implements Direction { findInY = true; } - } - if (findInX && findInY) { - break; - } + } + if (findInX && findInY) { + break; + } } setDesignerStateModelProperties(designer, findInX, findInY, currentBounds, point); @@ -124,7 +125,7 @@ public abstract class AccessDirection implements Direction { } - private WAbsoluteLayout getLayout(final FormDesigner designer) { + private WAbsoluteLayout getLayout(final FormDesigner designer){ XLayoutContainer formLayoutContainer = (XLayoutContainer) XCreatorUtils.createXCreator( designer.getTarget().getContainer()); WAbsoluteLayout layout; @@ -156,52 +157,50 @@ public abstract class AccessDirection implements Direction { return; } //设定控件最小高度21,因每次拖曳至少移动1,防止控件高度等于21时,拖曳导致rec.y的变化使得控件不停的向上或向下移动。 - if (rec.height == MINHEIGHT) { + if(rec.height == MINHEIGHT){ ymin = rec.y; } - if (rec.height == MINHEIGHT - 1) { + if(rec.height == MINHEIGHT - 1){ ymin = ymin == rec.y ? rec.y : rec.y - 1; } - if (rec.height < MINHEIGHT) { + if(rec.height < MINHEIGHT){ rec.height = MINHEIGHT; rec.y = ymin; } // 增加下宽度也设最小为21 if (rec.width == MINWIDTH) { - xmin = rec.x; + xmin = rec.x; } - if (rec.width == MINWIDTH - 1) { - xmin = xmin == rec.x ? rec.x : rec.x - 1; + if(rec.width == MINWIDTH - 1){ + xmin = xmin == rec.x ? rec.x : rec.x - 1; } if (rec.width < MINWIDTH) { - rec.width = MINWIDTH; - rec.x = xmin; + rec.width = MINWIDTH; + rec.x = xmin; } } - /** - * 更新鼠标指针形状 - * - * @param formEditor 设计界面组件 - */ - 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(); - } + /** + * 更新鼠标指针形状 + * @param formEditor 设计界面组件 + */ + 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(); + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/models/AddingModel.java b/designer_form/src/com/fr/design/designer/beans/models/AddingModel.java index 54033694d..9d308b9d4 100644 --- a/designer_form/src/com/fr/design/designer/beans/models/AddingModel.java +++ b/designer_form/src/com/fr/design/designer/beans/models/AddingModel.java @@ -1,141 +1,141 @@ -package com.fr.design.designer.beans.models; - -import java.awt.Rectangle; - -import com.fr.design.designer.creator.XWAbsoluteLayout; -import com.fr.design.mainframe.FormDesigner; -import com.fr.design.designer.beans.AdapterBus; -import com.fr.design.designer.beans.ComponentAdapter; -import com.fr.design.designer.beans.adapters.component.CompositeComponentAdapter; -import com.fr.design.designer.creator.XCreator; -import com.fr.design.designer.creator.XLayoutContainer; -import com.fr.design.designer.creator.XWParameterLayout; -import com.fr.design.utils.ComponentUtils; -import com.fr.general.ComparatorUtils; - -/** - * 添加状态下的model - */ -public class AddingModel { - - // 当前要添加的组件 - private XCreator creator; - // 记录当前鼠标的位置信息 - private int currentX; - private int currentY; - private boolean added; - - public AddingModel(FormDesigner designer, XCreator xCreator) { - String creatorName = getXCreatorName(designer, xCreator); - this.creator = xCreator; - instantiateCreator(designer, creatorName); - // 初始的时候隐藏该组件的图标 - currentY = -this.creator.getWidth(); - currentX = -this.creator.getHeight(); - } - - /** - * 待说明 - * - * @param designer 设计器 - * @param creatorName 组件名 - */ - public void instantiateCreator(FormDesigner designer, String creatorName) { - creator.toData().setWidgetName(creatorName); - ComponentAdapter adapter = new CompositeComponentAdapter(designer, creator); - adapter.initialize(); - creator.addNotify(); - creator.putClientProperty(AdapterBus.CLIENT_PROPERTIES, adapter); - } - - public AddingModel(XCreator xCreator, int x, int y) { - this.creator = xCreator; - this.creator.backupCurrentSize(); - this.creator.backupParent(); - this.creator.setSize(xCreator.initEditorSize()); - currentX = x - (xCreator.getWidth() / 2); - currentY = y - (xCreator.getHeight() / 2); - } - - /** - * 隐藏当前组件的图标 - */ - public void reset() { - currentX = -this.creator.getWidth(); - currentY = -this.creator.getHeight(); - } - - public String getXCreatorName(FormDesigner designer, XCreator x) { - String def = x.createDefaultName(); - if (x.acceptType(XWParameterLayout.class)) { - return def; - } - int i = 0; - while (designer.getTarget().isNameExist(def + i)) { - i++; - } - return def + i; - } - - public int getCurrentX() { - return currentX; - } - - public int getCurrentY() { - return currentY; - } - - - /** - * 移动组件图标到鼠标事件发生的位置 - * - * @param x 坐标 - * @param y 坐标 - */ - public void moveTo(int x, int y) { - currentX = x - (this.creator.getWidth() / 2); - currentY = y - (this.creator.getHeight() / 2); - } - - public XCreator getXCreator() { - return this.creator; - } - - /** - * 当前组件是否已经添加到某个容器中 - * - * @return 是返回true - */ - public boolean isCreatorAdded() { - return added; - } - - /** - * 加入容器 - * - * @param designer 设计器 - * @param container 容器 - * @param x 坐标 - * @param y 坐标 - * @return 成功返回true - */ - public boolean add2Container(FormDesigner designer, XLayoutContainer container, int x, int y) { - //考虑不同布局嵌套的情况,获取顶层容器 - XLayoutContainer xLayoutContainer = container.getTopLayout(); - if (xLayoutContainer != null && xLayoutContainer.acceptType(XWAbsoluteLayout.class)) { - container = xLayoutContainer; - } - - Rectangle rect = ComponentUtils.getRelativeBounds(container); - if (!ComparatorUtils.equals(container.getOuterLayout(), container.getBackupParent())) { - added = container.getLayoutAdapter().addBean(creator, - x + designer.getArea().getHorizontalValue(), - y + designer.getArea().getVerticalValue()); - return added; - } - added = container.getLayoutAdapter().addBean(creator, - x + designer.getArea().getHorizontalValue() - rect.x, - y + designer.getArea().getVerticalValue() - rect.y); - return added; - } +package com.fr.design.designer.beans.models; + +import java.awt.Rectangle; + +import com.fr.design.designer.creator.XWAbsoluteLayout; +import com.fr.design.mainframe.FormDesigner; +import com.fr.design.designer.beans.AdapterBus; +import com.fr.design.designer.beans.ComponentAdapter; +import com.fr.design.designer.beans.adapters.component.CompositeComponentAdapter; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XLayoutContainer; +import com.fr.design.designer.creator.XWParameterLayout; +import com.fr.design.utils.ComponentUtils; +import com.fr.general.ComparatorUtils; + +/** + * 添加状态下的model + */ +public class AddingModel { + + // 当前要添加的组件 + private XCreator creator; + // 记录当前鼠标的位置信息 + private int currentX; + private int currentY; + private boolean added; + + public AddingModel(FormDesigner designer, XCreator xCreator) { + String creatorName = getXCreatorName(designer, xCreator); + this.creator = xCreator; + instantiateCreator(designer, creatorName); + // 初始的时候隐藏该组件的图标 + currentY = -this.creator.getWidth(); + currentX = -this.creator.getHeight(); + } + + /** + * 待说明 + * + * @param designer 设计器 + * @param creatorName 组件名 + */ + public void instantiateCreator(FormDesigner designer, String creatorName) { + creator.toData().setWidgetName(creatorName); + ComponentAdapter adapter = new CompositeComponentAdapter(designer, creator); + adapter.initialize(); + creator.addNotify(); + creator.putClientProperty(AdapterBus.CLIENT_PROPERTIES, adapter); + } + + public AddingModel(XCreator xCreator, int x, int y) { + this.creator = xCreator; + this.creator.backupCurrentSize(); + this.creator.backupParent(); + this.creator.setSize(xCreator.initEditorSize()); + currentX = x - (xCreator.getWidth() / 2); + currentY = y - (xCreator.getHeight() / 2); + } + + /** + * 隐藏当前组件的图标 + */ + public void reset() { + currentX = -this.creator.getWidth(); + currentY = -this.creator.getHeight(); + } + + public String getXCreatorName(FormDesigner designer, XCreator x) { + String def = x.createDefaultName(); + if (x.acceptType(XWParameterLayout.class)) { + return def; + } + int i = 0; + while (designer.getTarget().isNameExist(def + i)) { + i++; + } + return def + i; + } + + public int getCurrentX() { + return currentX; + } + + public int getCurrentY() { + return currentY; + } + + + /** + * 移动组件图标到鼠标事件发生的位置 + * + * @param x 坐标 + * @param y 坐标 + */ + public void moveTo(int x, int y) { + currentX = x - (this.creator.getWidth() / 2); + currentY = y - (this.creator.getHeight() / 2); + } + + public XCreator getXCreator() { + return this.creator; + } + + /** + * 当前组件是否已经添加到某个容器中 + * + * @return 是返回true + */ + public boolean isCreatorAdded() { + return added; + } + + /** + * 加入容器 + * + * @param designer 设计器 + * @param container 容器 + * @param x 坐标 + * @param y 坐标 + * @return 成功返回true + */ + public boolean add2Container(FormDesigner designer, XLayoutContainer container, int x, int y) { + //考虑不同布局嵌套的情况,获取顶层容器 + XLayoutContainer xLayoutContainer = container.getTopLayout(); + if (xLayoutContainer != null && xLayoutContainer.acceptType(XWAbsoluteLayout.class)) { + container = xLayoutContainer; + } + + Rectangle rect = ComponentUtils.getRelativeBounds(container); + if (!ComparatorUtils.equals(container.getOuterLayout(), container.getBackupParent())) { + added = container.getLayoutAdapter().addBean(creator, + x + designer.getArea().getHorizontalValue(), + y + designer.getArea().getVerticalValue()); + return added; + } + added = container.getLayoutAdapter().addBean(creator, + x + designer.getArea().getHorizontalValue() - rect.x, + y + designer.getArea().getVerticalValue() - rect.y); + return added; + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/models/StateModel.java b/designer_form/src/com/fr/design/designer/beans/models/StateModel.java index f3aeb8f90..ff3fcbedc 100644 --- a/designer_form/src/com/fr/design/designer/beans/models/StateModel.java +++ b/designer_form/src/com/fr/design/designer/beans/models/StateModel.java @@ -1,476 +1,476 @@ -package com.fr.design.designer.beans.models; - -import com.fr.design.beans.location.Absorptionline; -import com.fr.design.designer.beans.AdapterBus; -import com.fr.design.designer.beans.HoverPainter; -import com.fr.design.designer.beans.LayoutAdapter; -import com.fr.design.designer.beans.events.DesignerEvent; -import com.fr.design.designer.beans.location.Direction; -import com.fr.design.designer.beans.location.Location; -import com.fr.design.designer.creator.*; -import com.fr.design.mainframe.FormDesigner; -import com.fr.design.mainframe.FormSelectionUtils; -import com.fr.design.utils.ComponentUtils; - -import java.awt.*; -import java.awt.event.MouseEvent; -import java.util.ArrayList; - -/** - * 普通模式下的状态model - */ -public class StateModel { - // 对应的selection model - - private SelectionModel selectionModel; - // 当前鼠标进入拖拽区域的位置类型 - private Direction driection; - - // 当前拖拽的起始位置 - private int currentX; - private int currentY; - - //拖拽组件原始位置大小备份 - private Rectangle selectedPositionBackup; - - private Point startPoint = new Point(); - private Point currentPoint = new Point(); - - private Absorptionline lineInX; - private Absorptionline lineInY; - //等距线 - private Absorptionline lineEquidistant; - - // 当前是否处于拖拽选择状态 - private boolean selecting; - private boolean dragging; - - private boolean addable; - - private FormDesigner designer; - - public StateModel(FormDesigner designer) { - this.designer = designer; - selectionModel = designer.getSelectionModel(); - } - - /** - * 返回direction - * - * @return direction方向 - */ - public Direction getDirection() { - return driection; - } - - /** - * 是否有组件正被选中 - * - * @return true 如果至少一个组件被选中 - */ - public boolean isSelecting() { - return selecting; - } - - /** - * 是否能拖拽 - * - * @return 非outer且选中为空 - */ - public boolean dragable() { - return ((driection != Location.outer) && !selecting); - } - - /** - * 拖拽中是否可以转换为添加模式: - * 如果拖拽组件只有一个,鼠标当前所在位置的最底层表单容器与这个组件的容器不同; - * 如果拖拽组件为多个,鼠标当前所在位置的最底层表单容器除了要求要跟这些组件的容器不同外,还必须是绝对定位布局 - */ - private void checkAddable(MouseEvent e) { - addable = false; - designer.setPainter(null); - - if (driection != Location.inner) { - return; - } - - XCreator comp = designer.getComponentAt(e.getX(), e.getY(), selectionModel.getSelection().getSelectedCreators()); - XLayoutContainer container = XCreatorUtils.getHotspotContainer(comp); - XCreator creator = selectionModel.getSelection().getSelectedCreator(); - Component creatorContainer = XCreatorUtils.getParentXLayoutContainer(creator); - if (creatorContainer != null && creatorContainer != container - && (selectionModel.getSelection().size() == 1 || container instanceof XWAbsoluteLayout)) { - HoverPainter painter = AdapterBus.getContainerPainter(designer, container); - designer.setPainter(painter); - if (painter != null) { - Rectangle rect = ComponentUtils.getRelativeBounds(container); - rect.x -= designer.getArea().getHorizontalValue(); - rect.y -= designer.getArea().getVerticalValue(); - painter.setRenderingBounds(rect); - painter.setHotspot(new Point(e.getX(), e.getY())); - painter.setCreator(creator); - } - addable = true; - } - } - - /** - * @param container 容器 - * @param mouseX 鼠标释放位置X - * @param mouseY 鼠标释放位置Y - * @return 是否成功 - */ - private boolean addBean(XLayoutContainer container, int mouseX, int mouseY) { - LayoutAdapter adapter = container.getLayoutAdapter(); - Rectangle rectangleContainer = ComponentUtils.getRelativeBounds(container); - if (selectionModel.getSelection().size() == 1) { - return adapter.addBean(selectionModel.getSelection().getSelectedCreator(), - mouseX + designer.getArea().getHorizontalValue() - rectangleContainer.x, - mouseY + designer.getArea().getVerticalValue() - rectangleContainer.y); - } - for (XCreator creator : selectionModel.getSelection().getSelectedCreators()) { - adapter.addBean(creator, - mouseX + designer.getArea().getHorizontalValue() - rectangleContainer.x, - mouseY + designer.getArea().getVerticalValue() - rectangleContainer.y); - } - return true; - } - - /** - * @param mouseReleasedX 鼠标释放位置X - * @param mouseReleasedY 鼠标释放位置Y - */ - private void adding(int mouseReleasedX, int mouseReleasedY) { - // 当前鼠标所在的组件 - XCreator hoveredComponent = designer.getComponentAt(mouseReleasedX, mouseReleasedY, selectionModel.getSelection().getSelectedCreators()); - - // 获取该组件所在的焦点容器 - XLayoutContainer container = XCreatorUtils.getHotspotContainer(hoveredComponent); - - boolean success = false; - - if (container != null) { - // 如果是容器,则调用其acceptComponent接受组件 - success = addBean(container, mouseReleasedX, mouseReleasedY); - } - - if (success) { - FormSelectionUtils.rebuildSelection(designer); - designer.getEditListenerTable().fireCreatorModified( - selectionModel.getSelection().getSelectedCreator(), DesignerEvent.CREATOR_ADDED); - } else { - selectionModel.getSelection().setSelectionBounds(selectedPositionBackup, designer); - Toolkit.getDefaultToolkit().beep(); - } - // 取消提示 - designer.setPainter(null); - } - - /** - * 是否拖拽 - * - * @return dragging状态 - */ - public boolean isDragging() { - return dragging; - } - - /** - * 是否可以开始画线 - * - * @return startPoint不为空返回true - */ - public boolean prepareForDrawLining() { - return startPoint != null; - } - - /** - * 设置开始位置 - * - * @param p point位置 - */ - public void setStartPoint(Point p) { - this.startPoint = p; - } - - /** - * 返回开始位置 - * - * @return 点位置 - */ - public Point getStartPoint() { - return startPoint; - } - - /** - * 返回当前点位置 - * - * @return 点位置 - */ - public Point getEndPoint() { - return currentPoint; - } - - /** - * 当前选中组件 - * - * @param e 鼠标事件 - */ - public void startSelecting(MouseEvent e) { - selecting = true; - selectionModel.setHotspotBounds(new Rectangle()); - currentX = getMouseXY(e).x; - currentY = getMouseXY(e).y; - } - - /** - * 当前鼠标的xy - * - * @param e 鼠标事件 - */ - public void startResizing(MouseEvent e) { - if (!selectionModel.getSelection().isEmpty()) { - driection.backupBounds(designer); - } - currentX = getMouseXY(e).x; - currentY = getMouseXY(e).y; - } - - /** - * 起始点开始DrawLine - * - * @param p 点位置 - */ - public void startDrawLine(Point p) { - this.startPoint = p; - if (p != null) { - try { - designer.setCursor(XConnector.connectorCursor); - } catch (Exception e) { - } - } else { - designer.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); - } - } - - /** - * 鼠标释放时所在的区域及圈中的组件 - * - * @param e 鼠标事件 - */ - public void selectCreators(MouseEvent e) { - int x = getMouseXY(e).x; - int y = getMouseXY(e).y; - - Rectangle bounds = createCurrentBounds(x, y); - - if ((x != currentX) || (y != currentY)) { - selectionModel.setSelectedCreators(getHotspotCreators(bounds, designer.getRootComponent())); - } - selectionModel.setHotspotBounds(null); - } - - /** - * 画所在区域线 - * - * @param e 鼠标事件 - */ - public void drawLine(MouseEvent e) { - designer.getDrawLineHelper().setDrawLine(true); - Point p = designer.getDrawLineHelper().getNearWidgetPoint(e); - if (p != null) { - currentPoint = p; - } else { - currentPoint.x = e.getX() + designer.getArea().getHorizontalValue(); - currentPoint.y = e.getY() + designer.getArea().getVerticalValue(); - } - } - - private Rectangle createCurrentBounds(int x, int y) { - Rectangle bounds = new Rectangle(); - - bounds.x = Math.min(x, currentX); - bounds.y = Math.min(y, currentY); - bounds.width = Math.max(x, currentX) - bounds.x; - bounds.height = Math.max(y, currentY) - bounds.y; - - return bounds; - } - - private ArrayList getHotspotCreators(Rectangle selection, XCreator root) { - ArrayList creators = new ArrayList<>(); - - if (!root.isVisible() && !designer.isRoot(root)) { - return creators; - } - - if (root instanceof XLayoutContainer) { - XLayoutContainer container = (XLayoutContainer) root; - int count = container.getXCreatorCount(); - Rectangle clipped = new Rectangle(selection); - - for (int i = count - 1; i >= 0; i--) { - XCreator child = container.getXCreator(i); - - if (selection.contains(child.getBounds())) { - creators.add(child); - } else { - clipped.x = selection.x - child.getX(); - clipped.y = selection.y - child.getY(); - creators.addAll(getHotspotCreators(clipped, child)); - } - } - } - - return creators; - } - - - /** - * 重置model - */ - public void resetModel() { - dragging = false; - selecting = false; - } - - /** - * 重置 - */ - public void reset() { - driection = Location.outer; - dragging = false; - selecting = false; - } - - /** - * 取消拖拽 - */ - public void draggingCancel() { - designer.repaint(); - reset(); - } - - /** - * 设置可拉伸方向 - * - * @param dir 拉伸方向 - */ - public void setDirection(Direction dir) { - if (driection != dir) { - this.driection = dir; - driection.updateCursor(designer); - } - } - - /** - * x吸附线赋值 - * - * @param line 线 - */ - public void setXAbsorptionline(Absorptionline line) { - this.lineInX = line; - } - - /** - * y吸附线赋值 - * - * @param line 线 - */ - public void setYAbsorptionline(Absorptionline line) { - this.lineInY = line; - } - - /** - * 等距线赋值 - * - * @param line 线 - */ - public void setEquidistantLine(Absorptionline line) { - this.lineEquidistant = line; - } - - /** - * 画吸附线 - * - * @param g Graphics类 - */ - public void paintAbsorptionline(Graphics g) { - if (lineInX != null) { - lineInX.paint(g, designer.getArea()); - } - if (lineInY != null) { - lineInY.paint(g, designer.getArea()); - } - if (lineEquidistant != null) { - lineEquidistant.paint(g, designer.getArea()); - } - } - - /** - * 拖拽 - * - * @param e 鼠标事件 - */ - public void dragging(MouseEvent e) { - //进入dragging状态时备份组件大小和位置 - if (!dragging) { - selectedPositionBackup = selectionModel.getSelection().getRelativeBounds(); - } - checkAddable(e); - setDependLinePainter(e); - driection.drag(getMouseXY(e).x - currentX, getMouseXY(e).y - currentY, designer); - this.dragging = true; - } - - // 拖拽时画依附线用到的painter - private void setDependLinePainter(MouseEvent e) { - XCreator comp = designer.getComponentAt(e.getX(), e.getY(), selectionModel.getSelection().getSelectedCreators()); - XLayoutContainer container = XCreatorUtils.getHotspotContainer(comp); - XCreator creator = selectionModel.getSelection().getSelectedCreator(); - HoverPainter painter = AdapterBus.getContainerPainter(designer, container); - designer.setPainter(painter); - if (painter != null) { - painter.setHotspot(new Point(e.getX(), e.getY())); - painter.setCreator(creator); - } - } - - /** - * 释放捕获 - * - * @param e 鼠标事件 - */ - public void releaseDragging(MouseEvent e) { - this.dragging = false; - if (addable) { - adding(e.getX(), e.getY()); - } else if (!selectionModel.getSelection().isEmpty()) { - selectionModel.releaseDragging(); - } - designer.repaint(); - } - - /** - * 改变选择区域 - * - * @param e 鼠标事件 - */ - public void changeSelection(MouseEvent e) { - Rectangle bounds = createCurrentBounds(getMouseXY(e).x, getMouseXY(e).y); - selectionModel.setHotspotBounds(bounds); - } - - /** - * 返回鼠标所在的x、y 考虑滚动条的值 - * - * @param e 鼠标事件 - * @return xy值 - */ - public Point getMouseXY(MouseEvent e) { - Point p1 = new Point(e.getX() + designer.getArea().getHorizontalValue(), e.getY() - + designer.getArea().getVerticalValue()); - return p1; - } - +package com.fr.design.designer.beans.models; + +import com.fr.design.beans.location.Absorptionline; +import com.fr.design.designer.beans.AdapterBus; +import com.fr.design.designer.beans.HoverPainter; +import com.fr.design.designer.beans.LayoutAdapter; +import com.fr.design.designer.beans.events.DesignerEvent; +import com.fr.design.designer.beans.location.Direction; +import com.fr.design.designer.beans.location.Location; +import com.fr.design.designer.creator.*; +import com.fr.design.mainframe.FormDesigner; +import com.fr.design.mainframe.FormSelectionUtils; +import com.fr.design.utils.ComponentUtils; + +import java.awt.*; +import java.awt.event.MouseEvent; +import java.util.ArrayList; + +/** + * 普通模式下的状态model + */ +public class StateModel { + // 对应的selection model + + private SelectionModel selectionModel; + // 当前鼠标进入拖拽区域的位置类型 + private Direction driection; + + // 当前拖拽的起始位置 + private int currentX; + private int currentY; + + //拖拽组件原始位置大小备份 + private Rectangle selectedPositionBackup; + + private Point startPoint = new Point(); + private Point currentPoint = new Point(); + + private Absorptionline lineInX; + private Absorptionline lineInY; + //等距线 + private Absorptionline lineEquidistant; + + // 当前是否处于拖拽选择状态 + private boolean selecting; + private boolean dragging; + + private boolean addable; + + private FormDesigner designer; + + public StateModel(FormDesigner designer) { + this.designer = designer; + selectionModel = designer.getSelectionModel(); + } + + /** + * 返回direction + * + * @return direction方向 + */ + public Direction getDirection() { + return driection; + } + + /** + * 是否有组件正被选中 + * + * @return true 如果至少一个组件被选中 + */ + public boolean isSelecting() { + return selecting; + } + + /** + * 是否能拖拽 + * + * @return 非outer且选中为空 + */ + public boolean dragable() { + return ((driection != Location.outer) && !selecting); + } + + /** + * 拖拽中是否可以转换为添加模式: + * 如果拖拽组件只有一个,鼠标当前所在位置的最底层表单容器与这个组件的容器不同; + * 如果拖拽组件为多个,鼠标当前所在位置的最底层表单容器除了要求要跟这些组件的容器不同外,还必须是绝对定位布局 + */ + private void checkAddable(MouseEvent e) { + addable = false; + designer.setPainter(null); + + if (driection != Location.inner) { + return; + } + + XCreator comp = designer.getComponentAt(e.getX(), e.getY(), selectionModel.getSelection().getSelectedCreators()); + XLayoutContainer container = XCreatorUtils.getHotspotContainer(comp); + XCreator creator = selectionModel.getSelection().getSelectedCreator(); + Component creatorContainer = XCreatorUtils.getParentXLayoutContainer(creator); + if (creatorContainer != null && creatorContainer != container + && (selectionModel.getSelection().size() == 1 || container instanceof XWAbsoluteLayout)) { + HoverPainter painter = AdapterBus.getContainerPainter(designer, container); + designer.setPainter(painter); + if (painter != null) { + Rectangle rect = ComponentUtils.getRelativeBounds(container); + rect.x -= designer.getArea().getHorizontalValue(); + rect.y -= designer.getArea().getVerticalValue(); + painter.setRenderingBounds(rect); + painter.setHotspot(new Point(e.getX(), e.getY())); + painter.setCreator(creator); + } + addable = true; + } + } + + /** + * @param container 容器 + * @param mouseX 鼠标释放位置X + * @param mouseY 鼠标释放位置Y + * @return 是否成功 + */ + private boolean addBean(XLayoutContainer container, int mouseX, int mouseY) { + LayoutAdapter adapter = container.getLayoutAdapter(); + Rectangle rectangleContainer = ComponentUtils.getRelativeBounds(container); + if (selectionModel.getSelection().size() == 1) { + return adapter.addBean(selectionModel.getSelection().getSelectedCreator(), + mouseX + designer.getArea().getHorizontalValue() - rectangleContainer.x, + mouseY + designer.getArea().getVerticalValue() - rectangleContainer.y); + } + for (XCreator creator : selectionModel.getSelection().getSelectedCreators()) { + adapter.addBean(creator, + mouseX + designer.getArea().getHorizontalValue() - rectangleContainer.x, + mouseY + designer.getArea().getVerticalValue() - rectangleContainer.y); + } + return true; + } + + /** + * @param mouseReleasedX 鼠标释放位置X + * @param mouseReleasedY 鼠标释放位置Y + */ + private void adding(int mouseReleasedX, int mouseReleasedY) { + // 当前鼠标所在的组件 + XCreator hoveredComponent = designer.getComponentAt(mouseReleasedX, mouseReleasedY, selectionModel.getSelection().getSelectedCreators()); + + // 获取该组件所在的焦点容器 + XLayoutContainer container = XCreatorUtils.getHotspotContainer(hoveredComponent); + + boolean success = false; + + if (container != null) { + // 如果是容器,则调用其acceptComponent接受组件 + success = addBean(container, mouseReleasedX, mouseReleasedY); + } + + if (success) { + FormSelectionUtils.rebuildSelection(designer); + designer.getEditListenerTable().fireCreatorModified( + selectionModel.getSelection().getSelectedCreator(), DesignerEvent.CREATOR_ADDED); + } else { + selectionModel.getSelection().setSelectionBounds(selectedPositionBackup, designer); + Toolkit.getDefaultToolkit().beep(); + } + // 取消提示 + designer.setPainter(null); + } + + /** + * 是否拖拽 + * + * @return dragging状态 + */ + public boolean isDragging() { + return dragging; + } + + /** + * 是否可以开始画线 + * + * @return startPoint不为空返回true + */ + public boolean prepareForDrawLining() { + return startPoint != null; + } + + /** + * 设置开始位置 + * + * @param p point位置 + */ + public void setStartPoint(Point p) { + this.startPoint = p; + } + + /** + * 返回开始位置 + * + * @return 点位置 + */ + public Point getStartPoint() { + return startPoint; + } + + /** + * 返回当前点位置 + * + * @return 点位置 + */ + public Point getEndPoint() { + return currentPoint; + } + + /** + * 当前选中组件 + * + * @param e 鼠标事件 + */ + public void startSelecting(MouseEvent e) { + selecting = true; + selectionModel.setHotspotBounds(new Rectangle()); + currentX = getMouseXY(e).x; + currentY = getMouseXY(e).y; + } + + /** + * 当前鼠标的xy + * + * @param e 鼠标事件 + */ + public void startResizing(MouseEvent e) { + if (!selectionModel.getSelection().isEmpty()) { + driection.backupBounds(designer); + } + currentX = getMouseXY(e).x; + currentY = getMouseXY(e).y; + } + + /** + * 起始点开始DrawLine + * + * @param p 点位置 + */ + public void startDrawLine(Point p) { + this.startPoint = p; + if (p != null) { + try { + designer.setCursor(XConnector.connectorCursor); + } catch (Exception e) { + } + } else { + designer.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + } + } + + /** + * 鼠标释放时所在的区域及圈中的组件 + * + * @param e 鼠标事件 + */ + public void selectCreators(MouseEvent e) { + int x = getMouseXY(e).x; + int y = getMouseXY(e).y; + + Rectangle bounds = createCurrentBounds(x, y); + + if ((x != currentX) || (y != currentY)) { + selectionModel.setSelectedCreators(getHotspotCreators(bounds, designer.getRootComponent())); + } + selectionModel.setHotspotBounds(null); + } + + /** + * 画所在区域线 + * + * @param e 鼠标事件 + */ + public void drawLine(MouseEvent e) { + designer.getDrawLineHelper().setDrawLine(true); + Point p = designer.getDrawLineHelper().getNearWidgetPoint(e); + if (p != null) { + currentPoint = p; + } else { + currentPoint.x = e.getX() + designer.getArea().getHorizontalValue(); + currentPoint.y = e.getY() + designer.getArea().getVerticalValue(); + } + } + + private Rectangle createCurrentBounds(int x, int y) { + Rectangle bounds = new Rectangle(); + + bounds.x = Math.min(x, currentX); + bounds.y = Math.min(y, currentY); + bounds.width = Math.max(x, currentX) - bounds.x; + bounds.height = Math.max(y, currentY) - bounds.y; + + return bounds; + } + + private ArrayList getHotspotCreators(Rectangle selection, XCreator root) { + ArrayList creators = new ArrayList<>(); + + if (!root.isVisible() && !designer.isRoot(root)) { + return creators; + } + + if (root instanceof XLayoutContainer) { + XLayoutContainer container = (XLayoutContainer) root; + int count = container.getXCreatorCount(); + Rectangle clipped = new Rectangle(selection); + + for (int i = count - 1; i >= 0; i--) { + XCreator child = container.getXCreator(i); + + if (selection.contains(child.getBounds())) { + creators.add(child); + } else { + clipped.x = selection.x - child.getX(); + clipped.y = selection.y - child.getY(); + creators.addAll(getHotspotCreators(clipped, child)); + } + } + } + + return creators; + } + + + /** + * 重置model + */ + public void resetModel() { + dragging = false; + selecting = false; + } + + /** + * 重置 + */ + public void reset() { + driection = Location.outer; + dragging = false; + selecting = false; + } + + /** + * 取消拖拽 + */ + public void draggingCancel() { + designer.repaint(); + reset(); + } + + /** + * 设置可拉伸方向 + * + * @param dir 拉伸方向 + */ + public void setDirection(Direction dir) { + if (driection != dir) { + this.driection = dir; + driection.updateCursor(designer); + } + } + + /** + * x吸附线赋值 + * + * @param line 线 + */ + public void setXAbsorptionline(Absorptionline line) { + this.lineInX = line; + } + + /** + * y吸附线赋值 + * + * @param line 线 + */ + public void setYAbsorptionline(Absorptionline line) { + this.lineInY = line; + } + + /** + * 等距线赋值 + * + * @param line 线 + */ + public void setEquidistantLine(Absorptionline line) { + this.lineEquidistant = line; + } + + /** + * 画吸附线 + * + * @param g Graphics类 + */ + public void paintAbsorptionline(Graphics g) { + if (lineInX != null) { + lineInX.paint(g, designer.getArea()); + } + if (lineInY != null) { + lineInY.paint(g, designer.getArea()); + } + if (lineEquidistant != null) { + lineEquidistant.paint(g, designer.getArea()); + } + } + + /** + * 拖拽 + * + * @param e 鼠标事件 + */ + public void dragging(MouseEvent e) { + //进入dragging状态时备份组件大小和位置 + if (!dragging) { + selectedPositionBackup = selectionModel.getSelection().getRelativeBounds(); + } + checkAddable(e); + setDependLinePainter(e); + driection.drag(getMouseXY(e).x - currentX, getMouseXY(e).y - currentY, designer); + this.dragging = true; + } + + // 拖拽时画依附线用到的painter + private void setDependLinePainter(MouseEvent e) { + XCreator comp = designer.getComponentAt(e.getX(), e.getY(), selectionModel.getSelection().getSelectedCreators()); + XLayoutContainer container = XCreatorUtils.getHotspotContainer(comp); + XCreator creator = selectionModel.getSelection().getSelectedCreator(); + HoverPainter painter = AdapterBus.getContainerPainter(designer, container); + designer.setPainter(painter); + if (painter != null) { + painter.setHotspot(new Point(e.getX(), e.getY())); + painter.setCreator(creator); + } + } + + /** + * 释放捕获 + * + * @param e 鼠标事件 + */ + public void releaseDragging(MouseEvent e) { + this.dragging = false; + if (addable) { + adding(e.getX(), e.getY()); + } else if (!selectionModel.getSelection().isEmpty()) { + selectionModel.releaseDragging(); + } + designer.repaint(); + } + + /** + * 改变选择区域 + * + * @param e 鼠标事件 + */ + public void changeSelection(MouseEvent e) { + Rectangle bounds = createCurrentBounds(getMouseXY(e).x, getMouseXY(e).y); + selectionModel.setHotspotBounds(bounds); + } + + /** + * 返回鼠标所在的x、y 考虑滚动条的值 + * + * @param e 鼠标事件 + * @return xy值 + */ + public Point getMouseXY(MouseEvent e) { + Point p1 = new Point(e.getX() + designer.getArea().getHorizontalValue(), e.getY() + + designer.getArea().getVerticalValue()); + return p1; + } + } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/painters/AbstractPainter.java b/designer_form/src/com/fr/design/designer/beans/painters/AbstractPainter.java index cb5c6a4a0..fca5197ae 100644 --- a/designer_form/src/com/fr/design/designer/beans/painters/AbstractPainter.java +++ b/designer_form/src/com/fr/design/designer/beans/painters/AbstractPainter.java @@ -1,96 +1,96 @@ -package com.fr.design.designer.beans.painters; - -import java.awt.Color; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.Stroke; - -import com.fr.design.designer.beans.HoverPainter; -import com.fr.design.designer.creator.XCreator; -import com.fr.design.designer.creator.XLayoutContainer; -import com.fr.design.form.util.XCreatorConstants; -import com.fr.general.Inter; - -public abstract class AbstractPainter implements HoverPainter { - - protected Point hotspot; - protected Rectangle hotspot_bounds; - protected XLayoutContainer container; - protected XCreator creator; - - /** - * 构造函数 - * - * @param container 容器 - */ - public AbstractPainter(XLayoutContainer container) { - this.container = container; - } - - @Override - public void setHotspot(Point p) { - hotspot = p; - } - - /** - * 画初始区域 - * - * @param g 画图类 - * @param startX 起始x位置 - * @param startY 起始y位置 - */ - public void paint(Graphics g, int startX, int startY) { - if (hotspot_bounds != null) { - drawHotspot(g, hotspot_bounds.x, hotspot_bounds.y, hotspot_bounds.width, hotspot_bounds.height, Color.lightGray, true, false); - } - } - - /** - * 设置边界 - * - * @param rect 位置 - */ - @Override - public void setRenderingBounds(Rectangle rect) { - hotspot_bounds = rect; - } - - @Override - public void setCreator(XCreator component) { - this.creator = component; - } - - protected void drawHotspot(Graphics g, int x, int y, int width, int height, boolean accept) { - Color bColor = accept ? XCreatorConstants.LAYOUT_HOTSPOT_COLOR : XCreatorConstants.LAYOUT_FORBIDDEN_COLOR; - drawHotspot(g, x, y, width, height, bColor, accept, false); - } - - /** - * 自适应布局那边渲染提示,要画整个背景,不是画边框 - */ - protected void drawRegionBackground(Graphics g, int x, int y, int width, int height, Color bColor, boolean accept) { - drawHotspot(g, x, y, width, height, bColor, accept, true); - } - - protected void drawHotspot(Graphics g, int x, int y, int width, int height, Color bColor, boolean accept, boolean drawBackground) { - Graphics2D g2d = (Graphics2D) g; - Color color = g2d.getColor(); - Stroke backup = g2d.getStroke(); - // 设置线条的样式 - g2d.setStroke(XCreatorConstants.STROKE); - g2d.setColor(bColor); - if (!accept) { - g2d.drawString(Inter.getLocText("Cannot-Add_To_This_Area") + "!", x + width / 3, y + height / 2); - } else if (drawBackground) { - g2d.fillRect(x, y, width, height); - } else { - g2d.drawRect(x, y, width, height); - } - g2d.setStroke(backup); - g2d.setColor(color); - } - - +package com.fr.design.designer.beans.painters; + +import java.awt.Color; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.Stroke; + +import com.fr.design.designer.beans.HoverPainter; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XLayoutContainer; +import com.fr.design.form.util.XCreatorConstants; +import com.fr.general.Inter; + +public abstract class AbstractPainter implements HoverPainter { + + protected Point hotspot; + protected Rectangle hotspot_bounds; + protected XLayoutContainer container; + protected XCreator creator; + + /** + * 构造函数 + * + * @param container 容器 + */ + public AbstractPainter(XLayoutContainer container) { + this.container = container; + } + + @Override + public void setHotspot(Point p) { + hotspot = p; + } + + /** + * 画初始区域 + * + * @param g 画图类 + * @param startX 起始x位置 + * @param startY 起始y位置 + */ + public void paint(Graphics g, int startX, int startY) { + if (hotspot_bounds != null) { + drawHotspot(g, hotspot_bounds.x, hotspot_bounds.y, hotspot_bounds.width, hotspot_bounds.height, Color.lightGray, true, false); + } + } + + /** + * 设置边界 + * + * @param rect 位置 + */ + @Override + public void setRenderingBounds(Rectangle rect) { + hotspot_bounds = rect; + } + + @Override + public void setCreator(XCreator component) { + this.creator = component; + } + + protected void drawHotspot(Graphics g, int x, int y, int width, int height, boolean accept) { + Color bColor = accept ? XCreatorConstants.LAYOUT_HOTSPOT_COLOR : XCreatorConstants.LAYOUT_FORBIDDEN_COLOR; + drawHotspot(g, x, y, width, height, bColor, accept, false); + } + + /** + * 自适应布局那边渲染提示,要画整个背景,不是画边框 + */ + protected void drawRegionBackground(Graphics g, int x, int y, int width, int height, Color bColor, boolean accept) { + drawHotspot(g, x, y, width, height, bColor, accept, true); + } + + protected void drawHotspot(Graphics g, int x, int y, int width, int height, Color bColor, boolean accept, boolean drawBackground) { + Graphics2D g2d = (Graphics2D) g; + Color color = g2d.getColor(); + Stroke backup = g2d.getStroke(); + // 设置线条的样式 + g2d.setStroke(XCreatorConstants.STROKE); + g2d.setColor(bColor); + if (!accept) { + g2d.drawString(Inter.getLocText("Cannot-Add_To_This_Area") + "!", x + width / 3, y + height / 2); + } else if (drawBackground) { + g2d.fillRect(x, y, width, height); + } else { + g2d.drawRect(x, y, width, height); + } + g2d.setStroke(backup); + g2d.setColor(color); + } + + } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java index 7a03782c2..90945b1e8 100644 --- a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java +++ b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java @@ -133,10 +133,8 @@ public class FormSelectionUtils { boolean xOut = x < 0 || x + copiedCreator.getWidth() / 2 + xoffset > container.getWidth(); boolean yOut = y < 0 || y + copiedCreator.getHeight() / 2 + yoffset > container.getHeight(); - boolean isEdge = (x - DELAY_X_Y == container.getWidth() - copiedCreator.getWidth() / 2 - xoffset) - && (y - DELAY_X_Y == container.getHeight() - copiedCreator.getHeight() / 2 - yoffset); - y = yOut ? container.getHeight() - copiedCreator.getHeight() / 2 - yoffset : y; + boolean isEdge = (x - DELAY_X_Y == container.getWidth() - copiedCreator.getWidth() / 2 - xoffset); if (xOut) { if (isEdge) { //向左偏移 From 487e1b17c31dec3809a4581d75b439a0043c1774 Mon Sep 17 00:00:00 2001 From: neil Date: Tue, 2 May 2017 14:31:35 +0800 Subject: [PATCH 318/343] ct --- .../com/fr/design/locale/designer.properties | 20 +- .../design/locale/designer_en_US.properties | 20 +- .../design/locale/designer_ja_JP.properties | 365 ++++++++---------- .../design/locale/designer_ko_KR.properties | 49 +-- .../design/locale/designer_zh_CN.properties | 18 +- .../design/locale/designer_zh_TW.properties | 50 +-- .../com/fr/design/mainframe/JTemplate.java | 105 +++-- .../templateinfo/TemplateInfoCollector.java | 14 + .../fr/design/chart/axis/MinMaxValuePane.java | 50 +-- 9 files changed, 309 insertions(+), 382 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index ada13b460..cc75cee8a 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -91,7 +91,6 @@ FR-Designer_DS-Dictionary= FR-Designer_Data-confusion= FR-Designer_Data_Type= FR-Designer_Double_Click_Edit_OR_Clear= -FR-Designer_Edit_Button_ToolBar= FR-Designer_Email= FR-Designer_Enabled= FR-Designer_End-Date= @@ -163,7 +162,6 @@ FR-Designer_Refresh_Parameter_In_SQL= FR-Designer_Reg_Expressions= FR-Designer_Reg_Max_Length= FR-Designer_Reg_Min_Length= -FR-Designer_Remove_Button_ToolBar= FR-Designer_ReportColumns-Columns= FR-Designer_Return-Date= FR-Designer_RichText= @@ -544,7 +542,7 @@ 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_Null=Allow Null +FR-Designer_Allow_Null=Allow null FR-Designer_PageSetup_Page=Page FR-Designer_Custom_Job_Description=Description FR-Designer_Property=Property @@ -590,15 +588,15 @@ 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_Too_Large_To_Paste=too large to paste +FR-Designer_Too_Small_To_Paste=Too small to paste + FR-Designer_AxisReversed=AxisValue 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 -FR-Designer_Validate= -FR-Designer_Get-CubeGetting cube= -FR-Designer_Get-CubeGetting= -FR-Designer_Fit= -FR-Designer_Properties_Mobile= -FR-Designer_Oracle= +FR-Designer_Style=Style +FR-Designer_Color=Color +FR-Designer_Border=Border +FR-Designer_Background-Pattern=Pattern diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index 6f7aff98f..1c646aebe 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/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_Type=Data type 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_Enabled=Enabled 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_Max_Length=max 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_Return-Date=Return Date FR-Designer_RichText=Insert Rich Text @@ -544,7 +542,7 @@ 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_Null=Allow Null +FR-Designer_Allow_Null=Allow null FR-Designer_PageSetup_Page=Page FR-Designer_Custom_Job_Description=Description FR-Designer_Property=Property @@ -590,14 +588,16 @@ 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_Too_Large_To_Paste=Too large to paste! +FR-Designer_Too_Small_To_Paste=Too small to paste! + 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! -FR-Designer_SimpleCross_Report= -FR-Designer_Get-Cube= -FR-Designer_DoubleLayer_Report= -FR-Designer_Get-CubeGetting= -FR-Designer_SimpleDetail_Report= +FR-Designer_Style=Style +FR-Designer_Color=Color +FR-Designer_Border=Border +FR-Designer_Background-Pattern=Pattern + diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index ee6cc0027..2f4affb91 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -1,202 +1,200 @@ # generated time: \u661F\u671F\u56DB \u5341\u4E00\u6708 24 12:02:51 CST 2016 -FR-Designer-BBSLogin_Account=\u30E6\u30FC\u30B6\u30FCID -FR-Designer-BBSLogin_Connection-Failure=\u30CD\u30C3\u30C8\u63A5\u7D9A\u5931\u6557\u3001\u30CD\u30C3\u30C8\u72B6\u614B\u3054\u78BA\u8A8D\u4E0B\u3055\u3044 +FR-Designer-BBSLogin_Account=\u30E6\u30FC\u30B6\u30FC\u540D +FR-Designer-BBSLogin_Connection-Failure=\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u63A5\u7D9A\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u73FE\u5728\u306E\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u72B6\u614B\u3092\u691C\u67FB\u3057\u3066\u304F\u3060\u3055\u3044 FR-Designer-BBSLogin_Connection-Failure-Tip=\u30D2\u30F3\u30C8 -FR-Designer-BBSLogin_Forgot-Password=\u30D1\u30B9\u30EF\u30FC\u30C9\u5FD8\u308C\u305F +FR-Designer-BBSLogin_Forgot-Password=\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5FD8\u308C\u305F FR-Designer-BBSLogin_Login=\u30ED\u30B0\u30A4\u30F3 -FR-Designer-BBSLogin_Login-Failure-Tip=\u30E6\u30FC\u30B6\u30FCID\u3084\u30D1\u30B9\u30EF\u30FC\u30C9\u30A8\u30E9\u30FC\u3001\u518D\u30ED\u30B0\u30A4\u30F3\u4E0B\u3055\u3044 +FR-Designer-BBSLogin_Login-Failure-Tip=\u30E6\u30FC\u30B6\u30FC\u540D\u307E\u305F\u306F\u30D1\u30B9\u30EF\u30FC\u30C9\u30A8\u30E9\u30FC\u3067\u3059\u3002\u518D\u5EA6\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u304F\u3060\u3055\u3044 FR-Designer-BBSLogin_Password=\u30D1\u30B9\u30EF\u30FC\u30C9 -FR-Designer-BBSLogin_Password-Empty-Tip=\u30D1\u30B9\u30EF\u30FC\u30C9\u306F\u7A7A\u6B04\u306B\u3067\u304D\u307E\u305B\u3093 +FR-Designer-BBSLogin_Password-Empty-Tip=\u30D1\u30B9\u30EF\u30FC\u30C9\u306F\u7A7A\u6B04\u306B\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093 FR-Designer-BBSLogin_Register-Account=\u30A2\u30AB\u30A6\u30F3\u30C8\u767B\u9332 -FR-Designer-BBSLogin_Switch-Account=\u30A2\u30AB\u30A6\u30F3\u30C8\u3092\u5207\u308A\u66FF\u3048 -FR-Designer-BBSLogin_Privite-Message=\u500B\u4EBA\u30E1\u30C3\u30BB\u30FC\u30B8 -FR-Designer-BBSLogin_Times=\u56DE -FR-Designer-BBSLogin_Username-Empty-Tip=\u30E6\u30FC\u30B6\u30FCID\u306F\u7A7A\u306B\u3067\u304D\u307E\u305B\u3093 -FR-Designer-Basic_More_Color=\u305D\u306E\u4ED6\uFF08\u8272\uFF09 -FR-Designer-Estate_Any=\u5236\u9650\u306A\u3057 +FR-Designer-BBSLogin_Switch-Account=\u30A2\u30AB\u30A6\u30F3\u30C8\u5207\u308A\u66FF\u3048 +FR-Designer-BBSLogin_Privite-Message=\u30D7\u30E9\u30A4\u30D9\u30FC\u30C8\u30E1\u30C3\u30BB\u30FC\u30B8 +FR-Designer-BBSLogin_Times=\u6B21 +FR-Designer-BBSLogin_Username-Empty-Tip=\u30E6\u30FC\u30B6\u30FC\u540D\u306F\u7A7A\u6B04\u306B\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093 +FR-Designer-Basic_More_Color=\u3082\u3063\u3068\u8272 +FR-Designer-Estate_Any=\u4E0D\u9650 FR-Designer-Estate_Default_Font=\u30C7\u30D5\u30A9\u30EB\u30C8\u30D5\u30A9\u30F3\u30C8 -FR-Designer-Estate_Default_Null=\u30C7\u30D5\u30A9\u30EB\u30C8\u306F\u7A7A +FR-Designer-Estate_Default_Null=\u30C7\u30D5\u30A9\u30EB\u30C8\u3092\u7A7A\u6B04\u306B\u3059\u308B FR-Designer-Estate_Default_Text=\u30C7\u30D5\u30A9\u30EB\u30C8\u5024 -FR-Designer-Estate_Parameter_Null_Text=\u30D1\u30E9\u30E1\u30FC\u30BF\u304C\u7A7A\u306B\u306A\u308B\u6642\u306E\u8868\u793A\u306F -FR-Designer-Estate_Radio-Group=\u4E0D\u52D5\u7523\u696D\u6C4E\u7528\u30E9\u30B8\u30AA\u30DC\u30BF\u30F3\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8 -FR-Designer-Estate_Selected_Font=\u30D5\u30A9\u30F3\u30C8\u3092\u9078\u629E -FR-Designer-Estate_Widget_Value=\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u5024 -FR-Designer-Layout_Adaptive_Layout=\u81EA\u5DF1\u8ABF\u6574\u30EC\u30A4\u30A2\u30A6\u30C8 +FR-Designer-Estate_Parameter_Null_Text=\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u3092\u7A7A\u6B04\u306B\u3057\u8868\u793A\u3059\u308B +FR-Designer-Estate_Radio-Group=\u4E0D\u52D5\u7523\u696D\u901A\u7528\u30DC\u30BF\u30F3\u30BB\u30C3\u30C8\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB +FR-Designer-Estate_Selected_Font=\u9078\u629E\u3057\u305F\u30D5\u30A9\u30F3\u30C8 +FR-Designer-Estate_Widget_Value=\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u5024 +FR-Designer-Layout_Adaptive_Layout=\u81EA\u9069\u5FDC\u914D\u7F6E FR-Designer-Output_Background_Set=\u80CC\u666F\u8A2D\u5B9A FR-Designer-Output_Default_Background=\u30C7\u30D5\u30A9\u30EB\u30C8\u80CC\u666F -FR-Designer-Output_Excel_Page=Excel\u51FA\u529B(\u30DA\u30FC\u30B8\u5225) -FR-Designer-Output_Excel_Sheet=Excel\u51FA\u529B(\u30DA\u30FC\u30B8\u5225\u30B7\u30FC\u30C8\u5225) -FR-Designer-Output_Excel_Simple=Excel\u51FA\u529B(\u5143\u306E\u307E\u307E) -FR-Designer-Plugin_PluginMarket_Coding=\u30D7\u30E9\u30B0\u30A4\u30F3\u30B9\u30C8\u30A2\u958B\u767A\u4E2D\u3001\u304A\u5F85\u3061\u4E0B\u3055\u3044 -FR-Desinger-Plugin_Updater_UpdateAndUpgrade=\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u30A2\u30C3\u30D7\u30B0\u30EC\u30FC\u30C8 -FR-Desinger-Plugin_Updater_Checking_Jar_Update=Jar\u30D5\u30A1\u30A4\u30EB\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u691C\u8A3C\u4E2D -FR-Desinger-Plugin_Updater_Checking_Version_Update=\u30D1\u30FC\u30B8\u30E7\u30F3\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u691C\u8A3C\u4E2D -FR-Desinger-Plugin_Updater_Update=\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8 -FR-Desinger-Plugin_Updater_Upgrade=\u30A2\u30C3\u30D7\u30B0\u30EC\u30FC\u30C9 -FR-Desinger-Plugin_Updater_Restore=\u30EA\u30AB\u30D0\u30EA -FR-Desinger-Plugin_Updater_New_Version_Available=\u65B0\u3057\u3044\u30D0\u30FC\u30B8\u30E7\u30F3\u304C\u3042\u308A\u307E\u3059 -FR-Desinger-Plugin_Updater_JarUpdate=Jar\u30D5\u30A1\u30A4\u30EB\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8 -FR-Desinger-Plugin_Updater_VersionUpgrade=\u30D0\u30FC\u30B8\u30E7\u30F3\u30A2\u30C3\u30D7\u30B0\u30EC\u30FC\u30C8 -FR-Desinger-Plugin_Updater_Previous_Version=\u4EE5\u524D\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3078? -FR-Desinger-Plugin_Updater_Current_Version=\u73FE\u5728\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\uFF1A -FR-Desinger-Plugin_Updater_Not_Install_Version=\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u7528\u30D0\u30FC\u30B8\u30E7\u30F3\u3067\u306F\u3042\u308A\u307E\u305B\u3093 +FR-Designer-Output_Excel_Page=Excel\u30A2\u30A6\u30C8\u30D7\u30C3\u30C8(\u30DA\u30FC\u30B8\u5225\u30A2\u30A6\u30C8\u30D7\u30C3\u30C8) +FR-Designer-Output_Excel_Sheet=Excel\u30A2\u30A6\u30C8\u30D7\u30C3\u30C8(\u30DA\u30FC\u30B8\u5225\u30B7\u30FC\u30C8\u5225\u30A2\u30A6\u30C8\u30D7\u30C3\u30C8) +FR-Designer-Output_Excel_Simple=Excel\u30A2\u30A6\u30C8\u30D7\u30C3\u30C8(\u5143\u306E\u307E\u307E\u30A2\u30A6\u30C8\u30D7\u30C3\u30C8) +FR-Designer-Plugin_PluginMarket_Coding=\u30D7\u30E9\u30B0\u30A4\u30F3\u30DE\u30FC\u30B1\u30C3\u30C8\u306F\u958B\u767A\u4E2D\u3067\u3059\u3002\u3054\u671F\u5F85\u304F\u3060\u3055\u3044 +FR-Desinger-Plugin_Updater_UpdateAndUpgrade=\u66F4\u65B0\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8 +FR-Desinger-Plugin_Updater_Checking_Jar_Update=Jar\u30D1\u30C3\u30B1\u30FC\u30B8\u30C1\u30A7\u30C3\u30AF\u66F4\u65B0\u4E2D +FR-Desinger-Plugin_Updater_Checking_Version_Update=\u30D0\u30FC\u30B8\u30E7\u30F3\u30C1\u30A7\u30C3\u30AF\u66F4\u65B0\u4E2D +FR-Desinger-Plugin_Updater_Update=\u66F4\u65B0 +FR-Desinger-Plugin_Updater_Upgrade=\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8 +FR-Desinger-Plugin_Updater_Restore=\u5FA9\u5143 +FR-Desinger-Plugin_Updater_New_Version_Available=\u65B0\u30D0\u30FC\u30B8\u30E7\u30F3\u6709\u308A +FR-Desinger-Plugin_Updater_JarUpdate=Jar\u30D1\u30C3\u30B1\u30FC\u30B8\u66F4\u65B0 +FR-Desinger-Plugin_Updater_VersionUpgrade=\u30D0\u30FC\u30B8\u30E7\u30F3\u30A2\u30C3\u30D7 +FR-Desinger-Plugin_Updater_Previous_Version=\u65E7\u30D0\u30FC\u30B8\u30E7\u30F3\u307E\u3067\u306B +FR-Desinger-Plugin_Updater_Current_Version=\u73FE\u30D0\u30FC\u30B8\u30E7\u30F3 +FR-Desinger-Plugin_Updater_Not_Install_Version=\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u30D0\u30FC\u30B8\u30E7\u30F3\u3067\u306F\u306A\u3044 FR-Desinger-Plugin_Updater_Latest_Version=\u6700\u65B0\u30D0\u30FC\u30B8\u30E7\u30F3 -FR-Desinger-Plugin_Updater_Jar_Downloading=Jar\u30D5\u30A1\u30A4\u30EB\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u7D42\u4E86\u3092\u5F85\u3063\u3066\u3044\u308B -FR-Desinger-Plugin_Updater_Version_Downloading=\u30A2\u30C3\u30D7\u30B0\u30EC\u30FC\u30C8\u30D1\u30C3\u30B1\u30FC\u30B8\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u3092\u5F85\u3063\u3066\u3044\u308B -FR-Desinger-Plugin_Updater_Restart_Designer=\u30C7\u30B6\u30A4\u30CA\u30FC\u3092\u518D\u8D77\u52D5 -FR-Desinger-Plugin_Updater_Connect_VersionUpdateServer_Failed=\u30D0\u30FC\u30B8\u30E7\u30F3\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u30B5\u30FC\u30D0\u306B\u63A5\u7D9A\u3067\u304D\u306A\u3044 -FR-Desinger-Plugin_Updater_Connect_VersionUpgradeServer_Failed=\u30D0\u30FC\u30B8\u30E7\u30F3\u30A2\u30C3\u30D7\u30B0\u30EC\u30FC\u30C8\u30B5\u30FC\u30D0\u306B\u63A5\u7D9A\u3067\u304D\u306A\u3044 -FR-Desinger-Plugin_Updater_Already_Latest_Version=\u6700\u65B0\u30D0\u30FC\u30B8\u30E7\u30F3\u306B\u306A\u308A\u307E\u3057\u305F -FR-Desinger-Plugin_Updater_Backup_OldJar_To=\u53E4\u3044Jar\u30D5\u30A1\u30A4\u30EB\u3092\u4E0B\u8A18\u306B\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u3057\u307E\u3057\u305F\uFF1A -FR-Desinger-Plugin_Updater_Backup_OldVersion_To=\u53E4\u3044\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u4E0B\u8A18\u306B\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u3057\u307E\u3057\u305F\uFF1A -FR-Desinger-Plugin_Updater_Please_Restart=\u3001\u30C7\u30B6\u30A4\u30CA\u30FC\u3092\u518D\u8D77\u52D5\u3057\u3066\u4E0B\u3055\u3044 -FR-Desinger-Plugin_Updater_Jar_Restore=Jar\u30D5\u30A1\u30A4\u30EB\u30EA\u30AB\u30D0\u30EA -FR-Desinger-Plugin_Updater_Version_Restore=\u30D0\u30FC\u30B8\u30E7\u30F3\u30EA\u30AB\u30D0\u30EA -FR-Desinger-Plugin_Updater_Restore_To=\u30EA\u30AB\u30D0\u30EA -FR-Desinger-Plugin_Updater_WorksAfterRestart=\u30D0\u30FC\u30B8\u30E7\u30F3\u3001\u518D\u8D77\u52D5\u5F8C\u6709\u52B9\u306B\u306A\u308A\u307E\u3059 +FR-Desinger-Plugin_Updater_Jar_Downloading=Jar\u30D1\u30C3\u30B1\u30FC\u30B8\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u5B8C\u6210\u5F85\u3061 +FR-Desinger-Plugin_Updater_Version_Downloading=\u30D0\u30FC\u30B8\u30E7\u30F3\u30A2\u30C3\u30D7\u30D1\u30C3\u30B1\u30FC\u30B8\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u5B8C\u6210\u5F85\u3061 +FR-Desinger-Plugin_Updater_Restart_Designer=\u30C7\u30B6\u30A4\u30CA\u30FC\u518D\u8D77\u52D5 +FR-Desinger-Plugin_Updater_Connect_VersionUpdateServer_Failed=\u30D0\u30FC\u30B8\u30E7\u30F3\u66F4\u65B0\u30B5\u30FC\u30D0\u30FC\u63A5\u7D9A\u3067\u304D\u306A\u3044 +FR-Desinger-Plugin_Updater_Connect_VersionUpgradeServer_Failed=\u30D0\u30FC\u30B8\u30E7\u30F3\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u30B5\u30FC\u30D0\u30FC\u63A5\u7D9A\u3067\u304D\u306A\u3044 +FR-Desinger-Plugin_Updater_Already_Latest_Version=\u65E2\u306B\u6700\u65B0\u30D0\u30FC\u30B8\u30E7\u30F3 +FR-Desinger-Plugin_Updater_Backup_OldJar_To=\u65E7Jar\u30D1\u30C3\u30B1\u30FC\u30B8\u306F\u65E2\u306B\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7 +FR-Desinger-Plugin_Updater_Backup_OldVersion_To=\u65E7\u30D0\u30FC\u30B8\u30E7\u30F3\u30D1\u30C3\u30B1\u30FC\u30B8\u306F\u65E2\u306B\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7 +FR-Desinger-Plugin_Updater_Please_Restart=\u30C7\u30B6\u30A4\u30CA\u30FC\u306F\u518D\u8D77\u52D5\u3057\u3066\u304F\u3060\u3055\u3044 +FR-Desinger-Plugin_Updater_Jar_Restore=\u65E7Jar\u30D1\u30C3\u30B1\u30FC\u30B8\u5FA9\u5143 +FR-Desinger-Plugin_Updater_Version_Restore=\u30D0\u30FC\u30B8\u30E7\u30F3\u5FA9\u5143 +FR-Desinger-Plugin_Updater_Restore_To=\u5FA9\u5143 +FR-Desinger-Plugin_Updater_WorksAfterRestart=\u30D0\u30FC\u30B8\u30E7\u30F3\u306F\u518D\u8D77\u52D5\u5F8C\u306B\u6709\u52B9\u3059\u308B FR-Designer-Submit_Condition=\u6761\u4EF6 -FR-Designer-Widget-Title_border=\u67A0 +FR-Designer-Widget-Title_border=\u30D5\u30EC\u30FC\u30E0 FR-Designer-Widget-Title_border_color=\u8272 FR-Designer_AbsoluteLayout=\u7D76\u5BFE\u30EC\u30A4\u30A2\u30A6\u30C8 -FR-Designer_Allow_Decimals=\u5C0F\u6570\u306E\u8A31\u53EF -FR-Designer_Allow_Negative=\u8CA0\u5024\u306E\u8A31\u53EF -FR-Designer_Background-Click=\u30DE\u30A6\u30B9\u30AF\u30EA\u30C3\u30AF\u6642\u80CC\u666F +FR-Designer_Allow_Decimals=\u5C0F\u6570\u3092\u8A31\u53EF +FR-Designer_Allow_Negative=\u30DE\u30A4\u30CA\u30B9\u5024\u3092\u8A31\u53EF +FR-Designer_Background-Click=\u30DE\u30A6\u30B9\u30AF\u30EA\u30C3\u30AF\u80CC\u666F FR-Designer_Background-Initial=\u521D\u671F\u80CC\u666F -FR-Designer_Background-Over=\u30DE\u30A6\u30B9\u30AA\u30FC\u30D0\u30FC\u6642\u80CC\u666F -FR-Designer_Bar-Code-Exception-Tip=\u30C7\u30FC\u30BF\u306F\u7A7A\u306B\u3067\u304D\u307E\u305B\u3093 -FR-Designer_Block-intersect=\u30D6\u30ED\u30C3\u30AF\u3068\u30D6\u30EB\u30C3\u30AF\u9593\u306E\u91CD\u306A\u308A\u7981\u6B62 +FR-Designer_Background-Over=\u30DE\u30A6\u30B9\u30D5\u30ED\u30FC\u30C8\u80CC\u666F +FR-Designer_Bar-Code-Exception-Tip=\u30C7\u30FC\u30BF\u306F\u7A7A\u6B04\u306B\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093 +FR-Designer_Block-intersect=\u30E2\u30B8\u30E5\u30FC\u30EB\u3068\u30E2\u30B8\u30E5\u30FC\u30EB\u9593\u3092\u91CD\u306D\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093 FR-Designer_BorderLayout=\u30DC\u30FC\u30C0\u30FC\u30EC\u30A4\u30A2\u30A6\u30C8 FR-Designer_Button-Hotkeys=\u30B7\u30E7\u30FC\u30C8\u30AB\u30C3\u30C8\u30AD\u30FC FR-Designer_Button-Icon=\u30DC\u30BF\u30F3\u30A2\u30A4\u30B3\u30F3 -FR-Designer_Button-Name=\u30DC\u30BF\u30F3\u540D +FR-Designer_Button-Name=\u30DC\u30BF\u30F3\u540D\u79F0 FR-Designer_Button-Type=\u30DC\u30BF\u30F3\u30BF\u30A4\u30D7 -FR-Designer_CardLayout=Tab\u30EC\u30A4\u30A2\u30A6\u30C8 +FR-Designer_CardLayout=Tab\u914D\u7F6E FR-Designer_Cell=\u30BB\u30EB -FR-Designer_Chart_Cell=\u30B0\u30E9\u30D5\u30CF\u30A4\u30D1\u30FC\u30EA\u30F3\u30AF-\u30BB\u30EB\u9023\u52D5 -FR-Designer_Chart_Float=\u30B0\u30E9\u30D5\u30CF\u30A4\u30D1\u30FC\u30EA\u30F3\u30AF-\u30D5\u30ED\u30FC\u30C6\u30A3\u30F3\u30B0\u8981\u7D20\u9023\u52D5 -FR-Designer_Chart_Float_chart=\u30B0\u30E9\u30D5\u30CF\u30A4\u30D1\u30FC\u30EA\u30F3\u30AF-\u30D5\u30ED\u30FC\u30C6\u30A3\u30F3\u30B0\u30A6\u30A3\u30F3\u30C9\u30A6\u30B0\u30E9\u30D5 -FR-Designer_Check-for-Updates=\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u3092\u78BA\u8A8D -FR-Designer_Choose-Data-Confusion-Tip=\ \u6DF7\u4E71\u3055\u305B\u308B\u3079\u304D\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u9078\u629E\u3057\u3066\u30D7\u30EC\u30D3\u30E5\u30FC\u4E0B\u3055\u3044 -FR-Designer_Close=\u9589\u3058\u308B +FR-Designer_Chart_Cell=\u30B0\u30E9\u30D5\u30CF\u30A4\u30D1\u30FC\u30EA\u30F3\u30AF-\u9023\u52D5\u30BB\u30EB +FR-Designer_Chart_Float=\u30B0\u30E9\u30D5\u30CF\u30A4\u30D1\u30FC\u30EA\u30F3\u30AF-\u9023\u52D5\u30D5\u30ED\u30FC\u8981\u7D20 +FR-Designer_Chart_Float_chart=\u30B0\u30E9\u30D5\u30CF\u30A4\u30D1\u30FC\u30EA\u30F3\u30AF-\u30D5\u30ED\u30FC\u7A93\u30B0\u30E9\u30D5 +FR-Designer_Check-for-Updates=\u66F4\u65B0\u3092\u78BA\u8A8D +FR-Designer_Choose-Data-Confusion-Tip=\ \u6DF7\u4EA4\u3059\u308B\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u9078\u629E\u5F8C\u30D7\u30EC\u30D3\u30E5\u30FC\u3057\u3066\u304F\u3060\u3055\u3044 +FR-Designer_Close=\u30AF\u30ED\u30FC\u30BA FR-Designer_Column=\u5217 -FR-Designer_Column_Measure=\u5217\u8EF8/\u30E1\u30C8\u30EA\u30C3\u30AF +FR-Designer_Column_Measure=\u5217\u8EF8/\u5EA6\u91CF\u5024 FR-Designer_Condition_Attributes=\u6761\u4EF6\u5C5E\u6027 -FR-Designer_Confusion-Col-Name=\u30D5\u30A3\u30FC\u30EB\u30C9\u540D -FR-Designer_Confusion-key=\u30AD\u30FC\u30EF\u30FC\u30C9\u3092\u6DF7\u4E71\u3055\u305B\u308B -FR-Designer_Currency_Line=\u6841\u533A\u5207\u308A\u7DDA -FR-Designer_Current_tab=tab\u7DE8\u96C6\u4E2D -FR-Designer_Custom=\u30AB\u30B9\u30BF\u30E0 -FR-Designer_Custom-Angle=\u30AB\u30B9\u30BF\u30E0\u89D2\u5EA6 -FR-Designer_DS-Dictionary=\u30C7\u30FC\u30BF\u8F9E\u66F8 -FR-Designer_Data-confusion=\u30C7\u30FC\u30BF\u6DF7\u4E71 +FR-Designer_Confusion-Col-Name=\u30D5\u30A3\u30FC\u30EB\u30C9\u540D\u79F0 +FR-Designer_Confusion-key=\u6DF7\u4EA4\u3059\u308B\u30AD\u30FC\u30EF\u30FC\u30C9 +FR-Designer_Currency_Line=\u91D1\u984D\u7DDA +FR-Designer_Current_tab=\u73FE\u5728\u306E\u7DE8\u96C6tab +FR-Designer_Custom=\u30AB\u30B9\u30BF\u30DE\u30A4\u30BA +FR-Designer_Custom-Angle=\u30AB\u30B9\u30BF\u30DE\u30A4\u30BA\u89D2\u5EA6 +FR-Designer_DS-Dictionary=\u30C7\u30FC\u30BF\u5B57\u5178 +FR-Designer_Data-confusion=\u30C7\u30FC\u30BF\u6DF7\u4EA4 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\u3084\u30AF\u30EA\u30A2\u3092\u884C\u3046 -FR-Designer_Edit_Button_ToolBar=\u30DC\u30BF\u30F3\u306E\u30C4\u30FC\u30EB\u30D0\u30FC\u3092\u7DE8\u96C6 -FR-Designer_Email=E\u30E1\u30FC\u30EB +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_Email=\u30E1\u30FC\u30EB FR-Designer_Enabled=\u4F7F\u7528\u53EF\u80FD -FR-Designer_End-Date=\u7D42\u4E86\u65E5 -FR-Designer_ExportAndOutput=\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8 +FR-Designer_End-Date=\u7D42\u4E86\u65E5\u671F +FR-Designer_ExportAndOutput=\u30A2\u30A6\u30C8\u30D7\u30C3\u30C8 FR-Designer_FRFont=\u30D5\u30A9\u30F3\u30C8 -FR-Designer_FS_Close_Other_Templates=\u4ED6\u306E\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u3092\u9589\u3058\u308B +FR-Designer_FS_Close_Other_Templates=\u305D\u306E\u4ED6\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u3092\u9589\u3058\u308B FR-Designer_File=\u30D5\u30A1\u30A4\u30EB -FR-Designer_Filter_Conditions=\u30D5\u30A3\u30EB\u30BF\u6761\u4EF6 -FR-Designer_Finish-Modify-Share=\u4FEE\u6B63\u3092\u7D42\u4E86\u3055\u305B\u3066\u5171\u6709 -FR-Designer_Fit-App=\u30A2\u30D7\u30EA\u81EA\u5DF1\u8ABF\u6574 -FR-Designer_Fit=\u81EA\u5DF1\u8ABF\u6574 -FR-Designer_Font-Family=\u30D5\u30A9\u30F3\u30C8\u540D -FR-Designer_Font-Size=\u30D5\u30A9\u30F3\u30C8\u30B5\u30A4\u30BA -FR-Designer_Forbid_Drag_into_Adapt_Pane=\u5F53\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u4E3B\u4F53\u306B\u30C9\u30E9\u30C3\u30B0\u3057\u3066\u306F\u306A\u3089\u306A\u3044 -FR-Designer_Forbid_Drag_into_Para_Pane=\u5F53\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u30D1\u30E9\u30E1\u30FC\u30BF\u30D1\u30CD\u30EB\u306B\u30C9\u30E9\u30C3\u30B0\u3067\u304D\u307E\u305B\u3093 +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_Fit-App=App\u81EA\u9069\u5FDC +FR-Designer_Fit=\u81EA\u9069\u5FDC +FR-Designer_Font-Family=\u30D5\u30A9\u30F3\u30C8\u540D\u79F0 +FR-Designer_Font-Size=\u30D5\u30A9\u30F3\u30C8\u5927\u5C0F +FR-Designer_Forbid_Drag_into_Adapt_Pane=\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306F\u30D5\u30A9\u30FC\u30E0\u672C\u6587\u3092\u30C9\u30E9\u30C3\u30B0\u3059\u308B\u3053\u3068\u306F\u8A31\u3055\u308C\u306A\u3044 +FR-Designer_Forbid_Drag_into_Para_Pane=\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306F\u3001\u30D1\u30E9\u30E1\u30FC\u30BF\u30D1\u30CD\u30EB\u306B\u30C9\u30E9\u30C3\u30B0\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093 FR-Designer_Foreground=\u8272 -FR-Designer_Form-AuthorityEdited_Cannot_be_Supported=\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u6A29\u9650\u7DE8\u96C6\u306F\u73FE\u6642\u70B9\u3067\u306F\u30B5\u30DD\u30FC\u30C8\u3057\u3066\u3044\u307E\u305B\u3093 -FR-Designer_Form-Report=\u5E33\u7968\u30D6\u30ED\u30C3\u30AF -FR-Designer_Form_EmbeddedTD=\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9(\u7D44\u307F\u8FBC\u307F\u30C7\u30FC\u30BF) -FR-Designer_Form_Module=\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u30E2\u30B8\u30E5\u30FC\u30EB +FR-Designer_Form-AuthorityEdited_Cannot_be_Supported=\u8868\u306E\u6A29\u9650\u7DE8\u96C6\u306B\u30B5\u30DD\u30FC\u30C8\u3057\u3066\u3044\u307E\u305B\u3093 +FR-Designer_Form-Report=\u5E33\u7968\u30E2\u30B8\u30E5\u30FC\u30EB +FR-Designer_Form_EmbeddedTD=\u8868(\u5185\u8535\u30C7\u30FC\u30BF) +FR-Designer_Form_Module=\u8868\u30E2\u30B8\u30E5\u30FC\u30EB FR-Designer_Format_explan=\u66F8\u5F0F\u8AAC\u660E -FR-Designer_Formula=\u6570\u5F0F -FR-Designer_Forum=\u30D5\u30A9\u30FC\u30E9\u30E0 +FR-Designer_Formula=\u516C\u5F0F +FR-Designer_Forum=BBS FR-Designer_Get-Cube=cube\u53D6\u5F97\u4E2D FR-Designer_Help=\u30D8\u30EB\u30D7 -FR-Designer_Hide=\u975E\u8868\u793A -FR-Designer_Hyperlink=\u30CF\u30A4\u30D1\u30FC\u30EA\u30F3\u30AF -FR-Designer_Hyperlink-Form_link=\u73FE\u5728\u306E\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8 +FR-Designer_Hide=\u96A0\u3059 +FR-Designer_Hyperlink=\u30B9\u30FC\u30D1\u30FC\u30EA\u30F3\u30AF +FR-Designer_Hyperlink-Form_link=\u73FE\u5728\u306E\u8868\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8 FR-Designer_IDCard=\u8EAB\u5206\u8A3C\u660E\u66F8 FR-Designer_Icon=\u30A2\u30A4\u30B3\u30F3 FR-Designer_Index=\u5217\u8EF8/\u6307\u6A19 -FR-Designer_Input_Rule=\u5165\u529B\u898F\u5247 +FR-Designer_Input_Rule=\u30EB\u30FC\u30EB\u8A18\u5165 FR-Designer_Language_Default=\u30C7\u30D5\u30A9\u30EB\u30C8 -FR-Designer_Layout=\u30EC\u30A4\u30A2\u30A6\u30C8 -FR-Designer_Layout-HBox=\u6C34\u5E73\u30DC\u30C3\u30AF\u30B9\u306E\u30EC\u30A4\u30A2\u30A6\u30C8 -FR-Designer_Layout-Index=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9 -FR-Designer_Layout_Constraints=\u4F4D\u7F6E\u3068\u30B5\u30A4\u30BA +FR-Designer_Layout=\u914D\u7F6E +FR-Designer_Layout-HBox=\u6C34\u5E73\u30B1\u30FC\u30B9\u914D\u7F6E +FR-Designer_Layout-Index=\u7D22\u5F15 +FR-Designer_Layout_Constraints=\u4F4D\u7F6E\u3068\u5927\u5C0F FR-Designer_Length=\u9577\u3055 -FR-Designer_Loading_Data=\u30C7\u30FC\u30BF\u30ED\u30FC\u30C9\u4E2D -FR-Designer_M-Exit=\u7D42\u4E86 +FR-Designer_Loading_Data=\u30C7\u30FC\u30BF\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3057\u3066\u3044\u307E\u3059 +FR-Designer_M-Exit=\u9000\u51FA FR-Designer_M-Help=\u30D8\u30EB\u30D7 FR-Designer_M-Insert=\u633F\u5165 -FR-Designer_M-Repeat-Freeze=\u7E70\u308A\u8FD4\u3057\u3068\u56FA\u5B9A\u306E\u8A2D\u5B9A -FR-Designer_M-Server=\u30B5\u30FC\u30D0 -FR-Designer_M-SwitchWorkspace=\u4F5C\u696D\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u5207\u308A\u66FF\u3048 +FR-Designer_M-Repeat-Freeze=\u91CD\u8907\u3068\u30D5\u30EA\u30FC\u30BA\u8A2D\u5B9A +FR-Designer_M-Server=\u30B5\u30FC\u30D0\u30FC +FR-Designer_M-SwitchWorkspace=\u4F5C\u696D\u76EE\u6B21\u5207\u308A\u66FF\u3048 FR-Designer_M-Template=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8 -FR-Designer_MDX_Explain=\u6587\u6CD5\u66F8\u5F0F\u306FMDX\u6587\u6CD5\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002\n\u4F8B\:\nWITH\nMEMBER [Measures].[Special Discount] AS\n[Measures].[Discount Amount] * 1.5\nSELECT\n[Measures].[Special Discount] on COLUMNS,\nNON EMPTY [Product].[Product].MEMBERS ON Rows\nFROM [Adventure Works]\nWHERE [Product].[Category].[Bikes]\n\u6CE8\uFF1ACOLUMNS\u3001ROWS\u30011\u3067\u53D6\u308A\u63DB\u3048\u308B\u3053\u3068\u304C\u3067\u304D\u3001\u691C\u7D22\u8EF8\u306F2\u8EF8\u306E\u623B\u308A\u3057\u304B\u30B5\u30DD\u30FC\u30C8\u3057\u3066\u3044\u307E\u305B\u3093\u3002 +FR-Designer_MDX_Explain=\u6587\u6CD5\u66F8\u5F0F\u306FMDX\u6587\u6CD5\u3092\u53C2\u8003\u3002\n\u4F8B\u3048\u3070\uFF1A\nWITH\nMEMBER [Measures].[Special Discount] AS\n[Measures].[Discount Amount] * 1.5\nSELECT\n[Measures].[Special Discount] on COLUMNS,\nNON EMPTY [Product].[Product].MEMBERS ON Rows\nFROM [Adventure Works]\nWHERE [Product].[Category].[Bikes]\n\u6CE8\uFF1ACOLUMNS\u3001ROWS\u306F0\u30011\u3092\u4F7F\u7528\u3057\u3066\u4EE3\u66FF\u53EF\u80FD\u3067\u3059\u3002\u30AF\u30A8\u30EA\u8EF8\u306F\u4E8C\u3064\u306E\u8EF8\u623B\u3057\u306B\u306E\u307F\u30B5\u30DD\u30FC\u30C8\u3057\u307E\u3059\u3002 FR-Designer_M_Help-About_Software=\u30BD\u30D5\u30C8\u30A6\u30A7\u30A2\u306B\u3064\u3044\u3066 FR-Designer_M_Help-Tutorial=\u30D8\u30EB\u30D7\u30C1\u30E5\u30FC\u30C8\u30EA\u30A2\u30EB FR-Designer_Max_Value=\u6700\u5927\u5024 FR-Designer_Min_Value=\u6700\u5C0F\u5024 -FR-Designer_MobilePhone=\u30B9\u30DE\u30FC\u30C8\u30D5\u30A9\u30F3 -FR-Designer_New_Value=\u65B0\u3057\u3044\u5024 +FR-Designer_MobilePhone=\u643A\u5E2F\u96FB\u8A71 +FR-Designer_New_Value=\u65B0\u5024 FR-Designer_None=\u7121\u3057 -FR-Designer_PaperSize-Mobile=\u30B9\u30DE\u30FC\u30C8\u30D5\u30A9\u30F3 -FR-Designer_PaperSize-Mobile-Large=\u643A\u5E2F\u5927\u753B\u9762 -FR-Designer_PaperSize-Mobile-Small=\u643A\u5E2F\u5C0F\u753B\u9762 -FR-Designer_Para-Body=\u30D1\u30E9\u30E1\u30FC\u30BF\u30D1\u30CD\u30EB -FR-Designer_Parameters=\u30D1\u30E9\u30E1\u30FC\u30BF +FR-Designer_PaperSize-Mobile=\u643A\u5E2F\u96FB\u8A71 +FR-Designer_PaperSize-Mobile-Large=\u643A\u5E2F\u96FB\u8A71\u5927\u30B9\u30AF\u30EA\u30FC\u30F3 +FR-Designer_PaperSize-Mobile-Small=\u643A\u5E2F\u96FB\u8A71\u5C0F\u30B9\u30AF\u30EA\u30FC\u30F3 +FR-Designer_Para-Body=\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u753B\u9762 +FR-Designer_Parameters=\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC FR-Designer_Phone=\u96FB\u8A71 FR-Designer_PostCode=\u90F5\u4FBF\u756A\u53F7 -FR-Designer_Present=\u5F62\u614B +FR-Designer_Present=\u30D5\u30A9\u30EB\u30E0 FR-Designer_Preview=\u30D7\u30EC\u30D3\u30E5\u30FC -FR-Designer_Preview-Data-Confusion=\u6DF7\u4E71\u3055\u308C\u305F\u30C7\u30FC\u30BF\u3092\u30D7\u30EC\u30D3\u30E5\u30FC +FR-Designer_Preview-Data-Confusion=\u6DF7\u4EA4\u5F8C\u306E\u30C7\u30FC\u30BF\u3092\u30D7\u30EC\u30D3\u30E5\u30FC FR-Designer_Product_Demo=\u88FD\u54C1\u30C7\u30E2 -FR-Designer_Query_Type=\u30AF\u30A8\u30EA\u30BF\u30A4\u30D7 +FR-Designer_Query_Type=\u30AF\u30A8\u30EA\u65B9\u6CD5 FR-Designer_Refresh=\u66F4\u65B0 -FR-Designer_Refresh_Parameter_In_SQL=SQL\u306E\u30D1\u30E9\u30E1\u30FC\u30BF\u3092\u66F4\u65B0\u3057\u307E\u3059\u304B -FR-Designer_Reg_Expressions=\u6B63\u898F\u8868\u73FE -FR-Designer_Reg_Max_Length=\u6700\u5927 -FR-Designer_Reg_Min_Length=\u6700\u5C0F -FR-Designer_Remove_Button_ToolBar=\u30DC\u30BF\u30F3\u306E\u30C4\u30FC\u30EB\u30D0\u30FC\u3092\u524A\u9664 -FR-Designer_ReportColumns-Columns=\u30B5\u30D6\u30D5\u30A3\u30FC\u30EB\u30C9 -FR-Designer_Return-Date=\u65E5\u4ED8\u578B\u3092\u623B\u3059 -FR-Designer_RichText=\u30EA\u30C3\u30C1\u30C6\u30AD\u30B9\u30C8 -FR-Designer_RichTextEditor=\u30EA\u30C3\u30C1\u30C6\u30AD\u30B9\u30C8\u30A8\u30C7\u30A3\u30BF +FR-Designer_Refresh_Parameter_In_SQL=SQL\u4E2D\u306E\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u3092\u66F4\u65B0\u3057\u307E\u3059\u304B +FR-Designer_Reg_Expressions=\u6B63\u5247\u8868\u73FE\u5F0F +FR-Designer_Reg_Max_Length=\u6700\u5927\u9577\u3055 +FR-Designer_Reg_Min_Length=\u6700\u5C0F\u9577\u3055 +FR-Designer_ReportColumns-Columns=\u6BB5\u7D44\u307F +FR-Designer_Return-Date=\u65E5\u671F\u306B\u623B\u308B +FR-Designer_RichText=\u30EA\u30C3\u30C1\u6587\u66F8\u633F\u5165 +FR-Designer_RichTextEditor=\u30EA\u30C3\u30C1\u6587\u66F8\u30A8\u30C7\u30A3\u30BF FR-Designer_Row=\u884C -FR-Designer_Row_Dimension=\u884C\u8EF8/\u30C7\u30A3\u30E1\u30F3\u30B7\u30E7\u30F3 +FR-Designer_Row_Dimension=\u884C\u8EF8/\u7DEF\u5EA6 FR-Designer_Save=\u4FDD\u5B58 FR-Designer_Search=\u691C\u7D22 FR-Designer_Set=\u8A2D\u5B9A -FR-Designer_Share-Template=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u5171\u6709 -FR-Designer_Simple_general=\u7C21\u6613\u4E00\u822C\u691C\u7D22 +FR-Designer_Share-Template=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u30B7\u30A7\u30A2 +FR-Designer_Simple_general=\u30B7\u30F3\u30D7\u30EB\u901A\u7528\u30AF\u30A8\u30EA FR-Designer_Song_TypeFace=\u5B8B\u4F53 -FR-Designer_Start-Date=\u958B\u59CB\u65E5 +FR-Designer_Start-Date=\u958B\u59CB\u65E5\u671F FR-Designer_Subscript=\u4E0B\u4ED8\u304D FR-Designer_Superscript=\u4E0A\u4ED8\u304D -FR-Designer_Support_QQ=\u6280\u8853\u30B5\u30DD\u30FC\u30C8QQ +FR-Designer_Support_QQ=\u6280\u8853QQ FR-Designer_Swatch=\u30B5\u30F3\u30D7\u30EB -FR-Designer_Tab_title=\u30BF\u30D6\u30BF\u30A4\u30C8\u30EB +FR-Designer_Tab_title=tab\u30BF\u30A4\u30C8\u30EB FR-Designer_TableData=\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8 -FR-Designer_Thank_guest=\u7279\u306B\u4EE5\u4E0B\u306E\u30D5\u30A9\u30FC\u30E9\u30E0\u5E06\u85AF\u304C\u5F53\u30D0\u30FC\u30B8\u30E7\u30F3\u306E\u30C7\u30B6\u30A4\u30CA\u30FC\u306E\u4F7F\u3044\u3084\u3059\u3055\u306B\u9855\u8457\u306A\u8CA2\u732E\u306B\u611F\u8B1D +FR-Designer_Thank_guest=\u7279\u306B\u5F53\u8A72\u30D0\u30FC\u30B8\u30E7\u30F3\u30C7\u30B6\u30A4\u30CA\u30FC\u306E\u4F7F\u3044\u3084\u3059\u3055\u306B\u3064\u3044\u3066\u8CA2\u732E\u3057\u3066\u304F\u308C\u305F\u4EE5\u4E0B\u306EBBS\u306E\u5E06\u30BD\u30D5\u30C8\u30D5\u30A1\u30F3\u306B\u611F\u8B1D\u3057\u307E\u3059 FR-Designer_Thanks-To=\u611F\u8B1D FR-Designer_Title=\u30BF\u30A4\u30C8\u30EB -FR-Designer_Total=\u5408\u8A08 +FR-Designer_Total=\u5168\u90E8\u3067 FR-Designer_UnSignIn=\u672A\u30ED\u30B0\u30A4\u30F3 -FR-Designer_Underline=\u4E0B\u7DDA -FR-Designer_Used=\u6700\u8FD1\u4F7F\u7528 -FR-Designer_User-defined-MDX=\u30AB\u30B9\u30BF\u30E0MDX\u691C\u7D22 -FR-Designer_SampleText=\u30B5\u30F3\u30D7\u30EB\u30C6\u30AD\u30B9\u30C8 \u30B5\u30F3\u30D7\u30EB\u30C6\u30AD\u30B9\u30C8 -FR-Designer_Vertical-LeftToRight=\u6587\u5B57\u7E26\u66F8\u304D(\u5DE6\u304B\u3089\u53F3\u3078) +FR-Designer_Underline=\u30A2\u30F3\u30C0\u30FC\u30E9\u30A4\u30F3 +FR-Designer_Used=\u6700\u8FD1\u4F7F\u7528\u3057\u305F +FR-Designer_User-defined-MDX=\u30AB\u30B9\u30BF\u30DE\u30A4\u30BAMDX\u30AF\u30A8\u30EA +FR-Designer_SampleText=\u30C6\u30AD\u30B9\u30C8\u4F8B +FR-Designer_Vertical-LeftToRight=\u6587\u5B57\u7E26\u66F8(\u5DE6\u304B\u3089\u53F3\u3078\uFF09 FR-Designer_Vertical-RightToLeft=\u6587\u5B57\u7E26\u66F8(\u53F3\u304B\u3089\u5DE6\u3078) -FR-Designer_VerticalBoxLayout=\u5782\u76F4\u30DC\u30C3\u30AF\u30B9\u30EC\u30A4\u30A2\u30A6\u30C8 -FR-Designer_Visible=\u8868\u793A -FR-Designer_WLayout-Border-ToolTips=\u5B8C\u5168\u306A\u30DC\u30FC\u30C0\u30FC\u30EC\u30A4\u30A2\u30A6\u30C8\u30B3\u30F3\u30C6\u30CA\u306F\u3001\u6771\u3001\u5357\u3001\u897F\u3001\u5317\u3001\u4E2D\u592E\u306E5\u30D6\u30ED\u30C3\u30AF\u3088\u308A\u69CB\u6210\u3055\u308C\u307E\u3059\u3002\n\u5317\u90E8\u3068\u5357\u90E8\u3067\u306F\u9AD8\u3055\u3092\u3001\u6771\u90E8\u3068\u897F\u90E8\u3068\u3067\u306F\u5E45\u3092\u8ABF\u6574\u3067\u304D\u307E\u3059\u3002 +FR-Designer_VerticalBoxLayout=\u5782\u76F4\u30B1\u30FC\u30B9\u914D\u7F6E +FR-Designer_Visible=\u53EF\u8996 +FR-Designer_WLayout-Border-ToolTips=\u5B8C\u74A7\u306A\u30DC\u30FC\u30C0\u30FC\u30EC\u30A4\u30A2\u30A6\u30C8\u5BB9\u5668\u306F\u6771\u897F\u5357\u5317\u4E2D\u306E\u4E94\u3064\u306E\u30E2\u30B8\u30E5\u30FC\u30EB\u304B\u3089\u69CB\u6210\u3055\u308C\u307E\u3059\u3002\\uff4e\u305D\u306E\u3046\u3061\u3001\u5357\u5317\u30E2\u30B8\u30E5\u30FC\u30EB\u306F\u5FC5\u8981\u306B\u5FDC\u3058\u3066\u9AD8\u3055\u3092\u8ABF\u6574\u3067\u304D\u3001\u6771\u897F\u30E2\u30B8\u30E5\u30FC\u30EB\u306F\u5FC5\u8981\u306B\u5FDC\u3058\u3066\u5E45\u3092\u8ABF\u6574\u3067\u304D\u307E\u3059\u3002 FR-Designer_WaterMark=\u900F\u304B\u3057 FR-Designer_Widget=\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB FR-Designer_Widget-Settings=\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u8A2D\u5B9A @@ -366,30 +364,24 @@ FR-Designer_XMLA_Get_Catalog=\u30AB\u30BF\u30ED\u30B0\u3092\u691C\u7D22\u3059\u3 FR-Designer_XMLA_Not_NULL=\u3053\u3053\u306F\u7A7A\u6B04\u306B\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093 FR-Designer_Column-Axis=\u5217\u8EF8 FR-Designer_LiteCondition_Common=\u4E00\u822C -FR-Designer_LiteCondition_Formula=\u6570\u5F0F +FR-Designer_LiteCondition_Formula=\u516C\u5F0F FR-Designer_LiteCondition_ConditionB-AND=\u30A2\u30F3\u30C9(AND) FR-Designer_LiteCondition_ConditionB-OR=\u30AA\u30A2(OR) FR-Designer_LiteCondition_Common_Condition=\u666E\u901A\u6761\u4EF6 -FR-Designer_LiteCondition_Formula_Condition=\u6570\u5F0F\u6761\u4EF6 +FR-Designer_LiteCondition_Formula_Condition=\u516C\u5F0F\u6761\u4EF6 FR-Designer_LiteCondition_Define=\u5B9A\u7FA9 -FR-Designer_Normal=\u6B63\u5E38 -FR-Designer_Alert=\u30A2\u30E9\u30FC\u30C8 FR-Designer_Select_All=\u5168\u9078\u629E -FR-Designer_Clear_All=\u5168\u3066\u3092\u30AF\u30EA\u30A2 -FR-Designer_Copy=\u30B3\u30D4\u30FC -FR-Designer_Log=\u30ED\u30B0 -FR-Designer-Plugin_Expire_Dialog_Title=\u30D7\u30E9\u30B0\u30A4\u30F3\u306F\u671F\u9650\u5207\u308C -FR-Designer-Plugin_Expire_Dialog_Text=\u30D7\u30E9\u30B0\u30A4\u30F3\u306F\u6709\u52B9\u671F\u9650\u304C\u5207\u308C\u3066\u3044\u307E\u3059\u3001\u30D5\u30A1\u30F3\u30E9\u30F3\u30A2\u30D7\u30EA\u30BB\u30F3\u30BF\u30FC\u3078\u8CFC\u5165\u3057\u3066\u304F\u3060\u3055\u3044\u3002 -FR-Designer-Plugin_Finerest_Addon=\u30D5\u30A1\u30F3\u30E9\u30F3\u30A2\u30D7\u30EA\u30BB\u30F3\u30BF\u30FC +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_Finerest_Addon=\u5E06\u8EDF\u5FDC\u7528\u30BB\u30F3\u30BF\u30FC FR-Designer_Performance_First=\u6027\u80FD\u512A\u5148 FR-Designer_Total_N_Grade=\u5168\u90E8\u3067\:${N}\u5C64 FR-Designer_time(s)=\u56DE -FR-Designer_General=\u901A\u5E38 -FR-Designer_Advanced=\u8A73\u7D30 -FR-Designer_Validate=\u691C\u8A3C +FR-Designer_General=\u5E38\u7528 +FR-Designer_Advanced=\u9AD8\u7D1A FR-Designer_Oracle=\u3059\u3079\u3066\u306E\u30C6\u30FC\u30D6\u30EB FR-Designer_Product_improve=\u88FD\u54C1\u6539\u5584 -FR-Designer_Join_Product_improve=\u88FD\u54C1\u6539\u5584\u30D7\u30E9\u30F3\u306B\u5165\u308B +FR-Designer_Join_Product_improve=\u88FD\u54C1\u6539\u5584\u30D7\u30E9\u30F3\u306B\u52A0\u3048\u308B FR-Designer_Preference-Function=\u30D5\u30A1\u30F3\u30AF\u30B7\u30E7\u30F3\u8A2D\u5B9A FR-Designer_max_undo_limit=\u6700\u5927\u53D6\u308A\u6D88\u3057\u56DE\u6570 FR-Designer_Surport_String_To_Formula=\u30AD\u30E3\u30E9\u30AF\u30BF\u30FC\u6587\u5B57\u5217\u7DE8\u96C6\u3092\u516C\u5F0F\u3068\u3059\u308B\u3053\u3068\u306B\u30B5\u30DD\u30FC\u30C8 @@ -545,52 +537,31 @@ 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_No=\u3044\u3044\u3048 FR-Designer_Pagination=\u30DA\u30FC\u30B8\u30F3\u30B0 -FR-Designer_DS_TableData=\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8 +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_Parameter-Formula=\u6570\u5F0F -FR-Designer_Background_Null=\u80CC\u666F\u306A\u3057 -FR-Designer_Background_Color=\u8272 -FR-Designer_Background_Texture=\u30C6\u30AF\u30B9\u30C1\u30E3 -FR-Designer_Background_Pattern=\u30D1\u30BF\u30FC\u30F3 -FR-Designer_Background_Gradient_Color=\u30B0\u30E9\u30C7\u30FC\u30B7\u30E7\u30F3 -FR-Designer_Background_Image=\u753B\u50CF -FR-Designer_Background_Clear=\u30AF\u30EA\u30A2 -FR-Designer_Background_Image_Select=\u753B\u50CF\u9078\u629E -FR-Designer_Initial_Background_Tips=\u30DC\u30BF\u30F3\u306E\u521D\u671F\u80CC\u666F -FR-Designer_Mouse_Move_Tips=\u30DE\u30A6\u30B9\u304C\u30DC\u30BF\u30F3\u306B\u79FB\u3059\u6642\u5909\u5316\u3059\u308B\u80CC\u666F -FR-Designer_Mouse_Click_Tips=\u30DC\u30BF\u30F3\u3092\u30AF\u30EA\u30C3\u30AF\u3059\u308B\u6642\u5909\u5316\u3059\u308B\u80CC\u666F -FR-Designer-Move_Tab_First=\u30C8\u30C3\u30D7\u306B\u79FB\u3059 -FR-Designer-Move_Tab_End=\u6700\u5F8C\u306B\u79FB\u3059 -FR-Designer-Move_Tab_Next=\u5F8C\u308D\u306B\u79FB\u3059 -FR-Designer-Move_Tab_Prev=\u524D\u306B\u79FB\u3059 +FR-Designer_Background_Null= +FR-Designer_Background_Color= +FR-Designer_Background_Texture= +FR-Designer_Background_Pattern= +FR-Designer_Background_Gradient_Color= +FR-Designer_Background_Image= +FR-Designer_Background_Clear= +FR-Designer_Background_Image_Select= +FR-Designer_Initial_Background_Tips= +FR-Designer_Mouse_Move_Tips= +FR-Designer_Too_Large_To_Paste=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306E\u30B5\u30A4\u30BA\u306F\u30DC\u30FC\u30C0\u30FC\u306B\u8D85\u3048\u305F\u306E\u3067\u3001\u8CBC\u308A\u4ED8\u3051\u3067\u304D\u307E\u305B\u3093\uFF01 +FR-Designer_Too_Small_To_Paste=\u8A72\u5F53\u51E6\u306B\u8CBC\u308A\u4ED8\u3051\u3067\u304D\u307E\u305B\u3093\u3001\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306E\u30B5\u30A4\u30BA\u306F\u9AD8\u3059\u304E\uFF01 +FR-Designer_Mouse_Click_Tips= +FR-Designer_Plugin_Should_Update_Please_Contact_Developer= FR-Designer_AxisReversed=\u8EF8\u9006\u9806 FR-Designer_Logarithmic=\u5BFE\u6570\u76EE\u76DB\u308A FR-Designer_Chart_Log_Base=\u5E95\u6570 FR-Designer_Chart_F_Radar_Axis=\u5782\u76F4\u8EF8 -FR-Designer_Too_Large_To_Paste=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306E\u30B5\u30A4\u30BA\u306F\u30DC\u30FC\u30C0\u30FC\u306B\u8D85\u3048\u305F\u306E\u3067\u3001\u8CBC\u308A\u4ED8\u3051\u3067\u304D\u307E\u305B\u3093\uFF01 -FR-Designer_Too_Small_To_Paste=\u8A72\u5F53\u51E6\u306B\u8CBC\u308A\u4ED8\u3051\u3067\u304D\u307E\u305B\u3093\u3001\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306E\u30B5\u30A4\u30BA\u306F\u9AD8\u3059\u304E\uFF01 -FR-Designer_DoubleLayer_Report=\u4E8C\u968E\u30BF\u30A4\u30C8\u30EB -FR-Designer_Printer_Native_Button=\u30ED\u30FC\u30AB\u30EB\u5370\u5237 -FR-Designer_Mobile-Warning=\u6700\u5927\u306E\u9AD8\u3055\u306F\u8868\u793A\u30A8\u30EA\u30A2\u306E80\uFF05\u4EE5\u4E0A\u306B\u306A\u308A\u307E\u305B\u3093 -FR-Designer_Form-Fit-Tip=\u81EA\u5DF1\u9069\u5FDC\u30D7\u30E9\u30B0\u30A4\u30F3 -FR-Designer_Form-Forzen-Speed=\u3001\u305D\u3057\u3066\u6A2A\u65B9\u5411\u81EA\u5DF1\u9069\u5FDC\u307E\u305F\u306F2\u65B9\u5411\u81EA\u52D5\u9069\u5FDC\u3092\u5229\u7528\u3057\u3001\u5E33\u7968\u8868\u793A\u306E\u30B9\u30D4\u30FC\u30C9\u3092\u4E0A\u3052\u3067\u304D\u307E\u3059\u3002 -FR-Designer_Mobile_Form_Analysis_Annotation=\u8AAC\u660E\:\u8A72\u5F53\u8A2D\u5B9A\u3088\u308A\u3001\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u306E\u30A2\u30D7\u30EA\u3067\u306E\u89E3\u6790\u30E2\u30FC\u30C9\u3092\u8A2D\u5B9A\u3067\u304D\u307E\u3059\u3002 -FR-Designer_TableData-Default-Para=\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u306E\u30C7\u30D5\u30A9\u30EB\u30C8\u30D1\u30E9\u30E1\u30FC\u30BF -FR-Designer-Selected_Widget=\u5F53\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8 -FR-Designer_Plugin_Should_Update_Please_Contact_Developer=\u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u306F\u4F4E\u3044\u3067\u3059\u304C\u3001\u4E0D\u5177\u5408\u304C\u3067\u3063\u305F\u3001\u958B\u767A\u8005\u3068\u9023\u7D61\u3057\u3066\u304F\u3060\u3055\u3044\u3002 -FR-Designer_SimpleCross_Report=\u7C21\u5358\u30AF\u30ED\u30FC\u30B9\u8868 -FR-Designer_Button-Cancel=\u53D6\u308A\u6D88\u3057 -FR-Designer_Delete_Template=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u3092\u524A\u9664 -FR-Designer_Install_Template=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u3092\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB -FR-Designer_SimpleDetail_Report=\u7C21\u5358\u660E\u7D30\u8868 -FR-Designer_LocalWidget=\u30ED\u30FC\u30AB\u30EB\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u30E9\u30A4\u30D6\u30E9\u30EA -FR-Designer_WidgetOrder=\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306E\u9806\u756A -FR-Designer_Form-Frozen-Tip=\u30D5\u30EA\u30FC\u30BA\u3092\u4F7F\u3046\u6642\u3001\u5F8C\u8A18\u306E\u30D7\u30E9\u30B0\u30A4\u30F3\u3092\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3057\u3066\u304F\u3060\u3055\u3044\uFF1A -FR-Designer-Invalid_Page_Number=\u7121\u52B9\u306A\u30DA\u30FC\u30B8\u756A\u53F7 -FR-Designer_Reset=\u30EA\u30BB\u30C3\u30C8 -FR-Designer-Plugin_Please_Update_Jar=jar\u30D1\u30C3\u30AF\u3092\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u3057\u3066\u304F\u3060\u3055\u3044 -FR-Designer_Get-CubeGetting cube= -FR-Designer_Mobile_Report_Analysis_Annotation=\u8AAC\u660E\:\u8A72\u5F53\u5C5E\u6027\u3088\u308A\u3001\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u306E\u30A2\u30D7\u30EA\u3067\u306E\u89E3\u6790\u30E2\u30FC\u30C9\u3092\u8A2D\u5B9A\u3067\u304D\u307E\u3059\u3001\u9801\u5206\u3051\u30D7\u30EC\u30D3\u30E5\u30FC\u3060\u3051\u3092\u652F\u6301\u3001\u66F8\u304D\u8FBC\u307F\u306B\u8A2D\u5B9A\u3059\u308B\u6642\u7121\u52B9\u306B\u306A\u308A\u307E\u3059\u3002 -FR-Designer_Properties_Mobile=\u30B9\u30DE\u30FC\u30C8\u30D5\u30A9\u30F3\u5C5E\u6027 -FR-Designer_Button-OK=\u5206\u304B\u308A\u307E\u3057\u305F -FR-Designer_Allow-Blank=\u7A7A\u306B\u8A31\u3059 -FR-Designer_AllCategories=\u5168\u3066\u306E\u7A2E\u985E +FR-Designer_Style=\u30B9\u30BF\u30A4\u30EB +FR-Designer_Color=\u8272 +FR-Designer_Border=\u67A0 +FR-Designer_Background-Pattern=\u30D1\u30BF\u30FC\u30F3 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index c0c8e9e71..075b017ab 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/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_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_Edit_Button_ToolBar=\uD0A4\uAC00\uC788\uB294\uD234\uBC14\uD3B8\uC9D1 FR-Designer_Email=\uBA54\uC77C FR-Designer_Enabled=\uC0AC\uC6A9\uAC00\uB2A5 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_Max_Length=\uCD5C\uB300\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_Return-Date=\uB0A0\uC9DC\uB3CC\uC544\uAC00\uAE30 FR-Designer_RichText=\uB9AC\uCE58\uD14D\uC2A4\uD2B8\uBC15\uC2A4\uC0BD\uC785 @@ -553,49 +551,12 @@ FR-Designer_Background_Image_Select= FR-Designer_Initial_Background_Tips= FR-Designer_Mouse_Move_Tips= FR-Designer_Mouse_Click_Tips= -FR-Designer-Move_Tab_First= -FR-Designer-Move_Tab_End= -FR-Designer-Move_Tab_Next= -FR-Designer-Move_Tab_Prev= +FR-Designer_Plugin_Should_Update_Please_Contact_Developer= 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 -FR-Designer_COMMUNITY_VIDEO= -FR-Designer_DoubleLayer_Report= -FR-Designer_Too_Small_To_Paste= -FR-Designer_formDesignerModule= -FR-Designer_Mobile-Warning= -FR-Designer_Mobile-Open= -FR-Designer_Form-Fit-Tip= -FR-Designer_Form-Forzen-Speed= -FR-Designer_Mobile_Form_Analysis_Annotation= -FR-Designer_Too_Large_To_Paste= -FR-Designer_COMMUNITY_HELP= -FR-Designer_Validate= -FR-Designer_Button-Cancel= -FR-Designer_Plugin_Should_Update_Please_Contact_Developer= -FR-Designer_COMMUNITY_QUESTIONS= -FR-Designer_SimpleCross_Report= -FR-Designer_COMMUNITY_NEED= -FR-Designer_Delete_Template= -FR-Designer_TableData-Default-Para= -FR-Designer_Allow-Blank= -FR-Designer_LocalWidget= -FR-Designer_WidgetOrder= -FR-Designer_Form-Frozen-Tip= -FR-Designer_Mobile-Horizontal= -FR-Designer-Invalid_Page_Number= -FR-Designer_COMMUNITY_BBS= -FR-Designer_COMMUNITY_SIGN= -FR-Designer_COMMUNITY_UPDATE= -FR-Designer_Mobile-Vertical= -FR-Designer_Get-CubeGetting cube= -FR-Designer_COMMUNITY= -FR-Designer_Mobile_Report_Analysis_Annotation= -FR-Designer_Properties_Mobile= -FR-Designer_Button-OK= -FR-Designer_COMMUNITY_BUG= -FR-Designer_AllCategories= -FR-Designer_Mobile-Attr= -FR-Designer_Mobile-Zoom= +FR-Designer_Style=\uC591\uC2DD +FR-Designer_Color=\uC0C9 +FR-Designer_Border=\uD14C\uB450\uB9AC +FR-Designer_Background-Pattern=\uC774\uBBF8\uC9C0 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index f4fbdd11a..d0a2b0520 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/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_Type=\u6570\u636E\u7C7B\u578B 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_Enabled=\u53EF\u7528 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_Max_Length=\u6700\u5927\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_Return-Date=\u8FD4\u56DE\u65E5\u671F FR-Designer_RichText=\u63D2\u5165\u5BCC\u6587\u672C @@ -590,15 +588,15 @@ FR-Designer_Background_Image_Select=\u9009\u62E9\u56FE\u7247 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_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_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 + 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 - -FR-Designer_Get-CubeGetting cube= +FR-Designer_Style=\u6837\u5F0F +FR-Designer_Color=\u989C\u8272 +FR-Designer_Border=\u8FB9\u6846 +FR-Designer_Background-Pattern=\u56FE\u6848 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 58c4e13fa..bbaf3db36 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/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_Type=\u8CC7\u6599\u985E\u578B 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_Enabled=\u53EF\u7528 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_Max_Length=\u6700\u5927\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_Return-Date=\u8FD4\u56DE\u65E5\u671F FR-Designer_RichText= RTF @@ -567,38 +565,24 @@ FR-Designer_Plugin_Should_Update_Please_Contact_Developer=\u633F\u4EF6\u7248\u67 FR-Designer_WidgetOrder=\u63A7\u4EF6\u9806\u5E8F FR-Designer_Mobile_Form_Analysis_Annotation=\u6CE8\u91CB\uFF1A\u53EF\u4EE5\u901A\u904E\u8A72\u5C6C\u6027\u63A7\u5236\u8868\u55AE\u5728APP\u4E2D\u7684\u89E3\u6790\u65B9\u5F0F\u3002 FR-Designer_Mobile_Report_Analysis_Annotation=\u6CE8\u91CB\uFF1A\u53EF\u4EE5\u901A\u904E\u8A72\u5C6C\u6027\u63A7\u5236\u5831\u8868\u5728APP\u4E2D\u7684\u89E3\u6790\u65B9\u5F0F\uFF0C\u53EA\u652F\u6301\u5206\u9801\u9810\u89BD\uFF0C\u586B\u5831\u9810\u89BD\u6642\u5C6C\u6027\u7121\u6548\u3002 - -FR-Designer_Background_Null=\u6C92\u6709\u80CC\u666F -FR-Designer_Background_Color=\u984F\u8272 -FR-Designer_Background_Texture=\u7D0B\u7406 -FR-Designer_Background_Pattern=\u5716\u6848 -FR-Designer_Background_Gradient_Color=\u6F38\u8B8A\u8272 -FR-Designer_Background_Image=\u5716\u7247 -FR-Designer_Background_Clear=\u6E05\u9664 -FR-Designer_Background_Image_Select=\u9078\u64C7\u5716\u7247 -FR-Designer_Initial_Background_Tips=\u6309\u9215\u7684\u521D\u59CB\u80CC\u666F -FR-Designer_Mouse_Move_Tips=\u6ED1\u9F20\u79FB\u52D5\u5230\u6309\u9215\u4E0A\u7684\u80CC\u666F\uFF0C\u82E5\u7121\u5247\u4E0D\u6539\u8B8A\u80CC\u666F -FR-Designer_Mouse_Click_Tips=\u6ED1\u9F20\u9EDE\u64CA\u6309\u9215\u6642\u80CC\u666F\uFF0C\u82E5\u7121\u5247\u4E0D\u6539\u8B8A\u80CC\u666F -FR-Designer-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_Background_Null= +FR-Designer_Background_Color= +FR-Designer_Background_Texture= +FR-Designer_Background_Pattern= +FR-Designer_Background_Gradient_Color= +FR-Designer_Background_Image= +FR-Designer_Background_Clear= +FR-Designer_Background_Image_Select= +FR-Designer_Too_Large_To_Paste=\u7D44\u4EF6\u5927\u5C0F\u8D85\u51FA\u908A\u754C\uFF0C\u7121\u6CD5\u7C98\u8CBC\uFF01 +FR-Designer_Too_Small_To_Paste=\u6B64\u8655\u7121\u6CD5\u7C98\u8CBC\uFF0C\u5C0F\u65BC\u7D44\u4EF6\u6700\u5C0F\u9AD8\u5EA6\uFF01 +FR-Designer_Initial_Background_Tips= +FR-Designer_Mouse_Move_Tips= +FR-Designer_Mouse_Click_Tips= FR-Designer_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 -FR-Designer_Download_Template= -FR-Designer-Selected_Widget= -FR-Designer_LocalWidget= -FR-Designer_Get-CubeGetting cube= -FR-Designer_Install_Template= -FR-Designer_Reset= -FR-Designer_SimpleCross_Report= -FR-Designer_Allow-Blank= -FR-Designer_AllCategories= -FR-Designer_SimpleDetail_Report= -FR-Designer_DoubleLayer_Report= -FR-Designer_Delete_Template= -FR-Designer_Validate= +FR-Designer_Style=\u6A23\u5F0F +FR-Designer_Color=\u984F\u8272 +FR-Designer_Border=\u6846\u7DDA +FR-Designer_Background-Pattern=\u5716\u6848 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/mainframe/JTemplate.java b/designer_base/src/com/fr/design/mainframe/JTemplate.java index e28090299..48371c787 100644 --- a/designer_base/src/com/fr/design/mainframe/JTemplate.java +++ b/designer_base/src/com/fr/design/mainframe/JTemplate.java @@ -372,7 +372,7 @@ public abstract class JTemplate> ex } protected boolean accept(Object o){ - return true; + return true; } private void fireSuperTargetModified() { @@ -488,15 +488,15 @@ public abstract class JTemplate> ex collectInfo(); return this.saveFile(); } - + private boolean isCancelOperation(int operation){ - return operation == FILEChooserPane.CANCEL_OPTION || - operation == FILEChooserPane.JOPTIONPANE_CANCEL_OPTION; + return operation == FILEChooserPane.CANCEL_OPTION || + operation == FILEChooserPane.JOPTIONPANE_CANCEL_OPTION; } - + private boolean isOkOperation(int operation){ - return operation == FILEChooserPane.JOPTIONPANE_OK_OPTION || - operation == FILEChooserPane.OK_OPTION; + return operation == FILEChooserPane.JOPTIONPANE_OK_OPTION || + operation == FILEChooserPane.OK_OPTION; } private boolean saveAsTemplate(boolean isShowLoc) { @@ -513,8 +513,8 @@ public abstract class JTemplate> ex if (isCancelOperation(chooseResult)) { fileChooser = null; return false; - } - + } + if (isOkOperation(chooseResult)) { if (!FRContext.getCurrentEnv().hasFileFolderAllow(fileChooser.getSelectedFILE().getPath()) ) { JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText("FR-Designer_No-Privilege") + "!", Inter.getLocText("FR-Designer_Message"), JOptionPane.WARNING_MESSAGE); @@ -524,41 +524,40 @@ public abstract class JTemplate> ex mkNewFile(editingFILE); fileChooser = null; } - + return saveNewFile(editingFILE, oldName); } - - protected boolean saveNewFile(FILE editingFILE, String oldName){ - // 在保存之前,初始化 templateID - initForCollect(); // 如果保存新模板(新建模板直接保存,或者另存为),则添加 templateID + protected boolean saveNewFile(FILE editingFILE, String oldName){ this.editingFILE = editingFILE; + boolean result = this.saveFile(); if (result) { DesignerFrameFileDealerPane.getInstance().refresh(); + initForCollect(); // 如果保存新模板(新建模板直接保存,或者另存为),则添加 templateID collectInfo(); } //更换最近打开 DesignerEnvManager.getEnvManager().replaceRecentOpenedFilePath(oldName, this.getFullPathName()); return result; } - + protected void mkNewFile(FILE file){ try { - file.mkfile(); + file.mkfile(); } catch (Exception e) { FRContext.getLogger().error(e.getMessage(), e); } } - + /** - * 将模板另存为可以分享出去的混淆后内置数据集模板 - * - * @return 是否另存成功 - * - */ + * 将模板另存为可以分享出去的混淆后内置数据集模板 + * + * @return 是否另存成功 + * + */ public boolean saveShareFile(){ - return true; + return true; } public Widget getSelectElementCase(){ return new NoneWidget(); @@ -763,7 +762,7 @@ public abstract class JTemplate> ex public void revert() { } - + private int getVersionCompare(String versionString){ if (StringUtils.isBlank(versionString)) { return 0; @@ -773,7 +772,7 @@ public abstract class JTemplate> ex return ComparatorUtils.compare(versionString.substring(0, len), ProductConstants.DESIGNER_VERSION.substring(0, len)); } - + private int getVersionCompareHBB(String versionString){ if (StringUtils.isBlank(versionString)) { return 0; @@ -781,17 +780,17 @@ public abstract class JTemplate> ex return ComparatorUtils.compare(versionString, "HBB"); } - + private boolean isHigherThanCurrent(String versionString) { return getVersionCompare(versionString) > 0; } - + private boolean isLowerThanCurrent(String versionString) { - return getVersionCompare(versionString) < 0; + return getVersionCompare(versionString) < 0; } - + private boolean isLowerThanHBB(String versionString) { - return getVersionCompareHBB(versionString) < 0; + return getVersionCompareHBB(versionString) < 0; } /** @@ -801,7 +800,7 @@ public abstract class JTemplate> ex public boolean isNewDesigner() { String xmlDesignerVersion = getTarget().getXMLDesignerVersion(); if (isLowerThanHBB(xmlDesignerVersion)) { - String info = Inter.getLocText("FR-Designer_open-new-form-tip"); + String info = Inter.getLocText("FR-Designer_open-new-form-tip"); String moreInfo = Inter.getLocText("FR-Designer_Server-version-tip-moreInfo"); new InformationWarnPane(info, moreInfo, Inter.getLocText("FR-Designer_Tooltips")).show(); return true; @@ -855,13 +854,13 @@ public abstract class JTemplate> ex * @return 是则返回true */ public abstract boolean isJWorkBook(); - + /** * 返回当前支持的超链界面pane * @return 超链连接界面 */ public HyperlinkGroupPane getHyperLinkPane() { - return new HyperlinkGroupPane(); + return new HyperlinkGroupPane(); } /** @@ -916,29 +915,29 @@ public abstract class JTemplate> ex public void requestGridFocus() { } - + /** - * 创建内置sql提交的pane - * - * @return 内置sql提交的pane - * - * - * @date 2014-10-14-下午7:39:27 - */ + * 创建内置sql提交的pane + * + * @return 内置sql提交的pane + * + * + * @date 2014-10-14-下午7:39:27 + */ public DBManipulationPane createDBManipulationPane(){ - return new DBManipulationPane(); + return new DBManipulationPane(); } - + /** * 创建控件事件里内置sql提交的pane - * + * * @return 内置sql提交的pane - * + * * * @date 2014-10-14-下午7:39:27 */ public DBManipulationPane createDBManipulationPaneInWidget(){ - return new DBManipulationInWidgetEventPane(); + return new DBManipulationInWidgetEventPane(); } /** @@ -966,15 +965,15 @@ public abstract class JTemplate> ex public void styleChange(){ } - + /** - * 创建分享模板的按钮, 目前只有jworkbook实现了 - * - * @return 分享模板按钮 - * - */ + * 创建分享模板的按钮, 目前只有jworkbook实现了 + * + * @return 分享模板按钮 + * + */ public UIButton[] createShareButton(){ - return new UIButton[0]; + return new UIButton[0]; } /** diff --git a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java index e5c6688ec..b9b7aa194 100644 --- a/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java +++ b/designer_base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java @@ -73,6 +73,8 @@ public class TemplateInfoCollector implements Serializable { } catch (InvalidClassException ex) { // 如果 TemplateInfoCollecor 类结构有改动,则放弃之前收集的数据(下次保存时覆盖) // 这种情况主要在开发、测试过程中遇到,正式上线后不应该出现 + FRLogger.getLogger().info(ex.getMessage()); + FRLogger.getLogger().info("use a new instance"); instance = new TemplateInfoCollector(); } catch (Exception ex) { @@ -121,6 +123,14 @@ public class TemplateInfoCollector implements Serializable { private void saveInfo() { try { ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(getInfoFile())); + String log = ""; + int count = 1; + for (String key : templateInfoList.keySet()) { + String createTime = ((HashMap)templateInfoList.get(key).get("consumingMap")).get("create_time").toString(); + log += (count + ". id: " + key + " " + createTime + "\n" + templateInfoList.get(key).toString() + "\n"); + count ++; + } + FRLogger.getLogger().info("writing tplInfo: \n" + log); os.writeObject(instance); os.close(); } catch (Exception ex) { @@ -231,7 +241,10 @@ public class TemplateInfoCollector implements Serializable { String jsonProcessMap = templateInfo.get("jsonProcessMap"); if (sendSingleTemplateInfo(consumingUrl, jsonConsumingMap) && sendSingleTemplateInfo(processUrl, jsonProcessMap)) { // 清空记录 + FRLogger.getLogger().info("successfully send " + templateInfo.get("templateID")); removeFromTemplateInfoList(templateInfo.get("templateID")); + } else { + FRLogger.getLogger().info("send template info failed, will try next time, " + templateInfo.get("templateID")); } } saveInfo(); @@ -290,6 +303,7 @@ public class TemplateInfoCollector implements Serializable { private void removeFromTemplateInfoList(String key) { templateInfoList.remove(key); + FRLogger.getLogger().info(key + " is removed..."); } @SuppressWarnings("unchecked") diff --git a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java index 88a6b528e..8a157f084 100644 --- a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java +++ b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java @@ -31,17 +31,18 @@ public class MinMaxValuePane extends JPanel { protected UITextField secUnitField; public MinMaxValuePane() { - minCheckBox = new UICheckBox(Inter.getLocText(new String[]{"Custom", "Min_Value"})); - minValueField = new UITextField(6); - maxCheckBox = new UICheckBox(Inter.getLocText(new String[]{"Custom", "Max_Value"})); - maxValueField = new UITextField(6); - isCustomMainUnitBox = new UICheckBox(Inter.getLocText("FR-Chart_MainGraduationUnit")); - mainUnitField = new UITextField(6); - isCustomSecUnitBox = new UICheckBox(Inter.getLocText("FR-Chart_SecondGraduationUnit")); - secUnitField = new UITextField(6); + minCheckBox = new UICheckBox(Inter.getLocText(new String[]{"Custom", "Min_Value"})); + minValueField = new UITextField(6); + maxCheckBox = new UICheckBox(Inter.getLocText(new String[]{"Custom", "Max_Value"})); + maxValueField = new UITextField(6); + isCustomMainUnitBox = new UICheckBox(Inter.getLocText("FR-Chart_MainGraduationUnit")); + mainUnitField = new UITextField(6); + isCustomSecUnitBox = new UICheckBox(Inter.getLocText("FR-Chart_SecondGraduationUnit")); + secUnitField = new UITextField(6); + double p = TableLayout.PREFERRED; double f = TableLayout.FILL; - double[] columnSize = { p, f }; + double[] columnSize = {p, f}; Component[][] components = getPanelComponents(); JPanel panel = TableLayoutHelper.createTableLayoutPane(components, getRowSize(p), columnSize); @@ -53,25 +54,26 @@ public class MinMaxValuePane extends JPanel { protected double[] getRowSize(double p) { return new double[]{p, p, p, p}; } - protected void addComponentListener(Component[][] components) { - for (int i = 0; i < components.length; i++) { - addListener((UICheckBox) components[i][0]); - ChartSwingUtils.addListener((UICheckBox) components[i][0], (UITextField) components[i][1]); - } - } - protected void addListener(UICheckBox checkBox) { - checkBox.addActionListener(new ActionListener() { + protected void addComponentListener(Component[][] components) { + for (int i = 0; i < components.length; i++) { + addListener((UICheckBox) components[i][0]); + ChartSwingUtils.addListener((UICheckBox) components[i][0], (UITextField) components[i][1]); + } + } + + protected void addListener(UICheckBox checkBox) { + checkBox.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - checkBoxUse(); - } - }); - } + @Override + public void actionPerformed(ActionEvent e) { + checkBoxUse(); + } + }); + } protected Component[][] getPanelComponents() { - return new Component[][]{ + return new Component[][]{ new Component[]{minCheckBox, minValueField}, new Component[]{maxCheckBox, maxValueField}, new Component[]{isCustomMainUnitBox, mainUnitField}, From ee26840e533eb0e8298df11bf72f208e1a0d8a9e Mon Sep 17 00:00:00 2001 From: plough Date: Tue, 2 May 2017 17:15:51 +0800 Subject: [PATCH 319/343] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=EF=BC=8C=E8=A7=A3=E5=86=B3=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/mainframe/JTemplate.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/designer_base/src/com/fr/design/mainframe/JTemplate.java b/designer_base/src/com/fr/design/mainframe/JTemplate.java index 48371c787..a275d3d5d 100644 --- a/designer_base/src/com/fr/design/mainframe/JTemplate.java +++ b/designer_base/src/com/fr/design/mainframe/JTemplate.java @@ -529,12 +529,13 @@ public abstract class JTemplate> ex } protected boolean saveNewFile(FILE editingFILE, String oldName){ - this.editingFILE = editingFILE; + // 在保存之前,初始化 templateID + initForCollect(); // 如果保存新模板(新建模板直接保存,或者另存为),则添加 templateID + this.editingFILE = editingFILE; boolean result = this.saveFile(); if (result) { DesignerFrameFileDealerPane.getInstance().refresh(); - initForCollect(); // 如果保存新模板(新建模板直接保存,或者另存为),则添加 templateID collectInfo(); } //更换最近打开 @@ -1028,4 +1029,4 @@ public abstract class JTemplate> ex return uiButtons; } -} \ No newline at end of file +} From 53f18866a267b3a97979306dc3dc73948089792d Mon Sep 17 00:00:00 2001 From: plough Date: Tue, 2 May 2017 17:35:07 +0800 Subject: [PATCH 320/343] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=EF=BC=8C=E5=9B=BD=E9=99=85=E5=8C=96=EF=BC=8C=E6=8A=8Arelease?= =?UTF-8?q?=E3=80=81master=E4=B8=AD=E7=9A=84key=E5=90=88=E5=B9=B6=E5=88=B0?= =?UTF-8?q?dev=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/locale/designer.properties | 7 ++++ .../design/locale/designer_en_US.properties | 8 ++++ .../design/locale/designer_ja_JP.properties | 34 +++++++++++++++- .../design/locale/designer_ko_KR.properties | 40 ++++++++++++++++++- .../design/locale/designer_zh_CN.properties | 4 +- .../design/locale/designer_zh_TW.properties | 16 +++++++- 6 files changed, 105 insertions(+), 4 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index cc75cee8a..0ec6015c8 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -600,3 +600,10 @@ FR-Designer_Style=Style FR-Designer_Color=Color FR-Designer_Border=Border FR-Designer_Background-Pattern=Pattern + +FR-Designer_Properties_Mobile= +FR-Designer_Edit_Button_ToolBar= +FR-Designer_Remove_Button_ToolBar= +FR-Designer_Get-CubeGetting= +FR-Designer_Oracle= +FR-Designer_Validate= diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index 1c646aebe..b7c7fe326 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -601,3 +601,11 @@ FR-Designer_Color=Color FR-Designer_Border=Border FR-Designer_Background-Pattern=Pattern + +FR-Designer_SimpleDetail_Report= +FR-Designer_SimpleCross_Report= +FR-Designer_Edit_Button_ToolBar=Edit Button ToolBar +FR-Designer_Remove_Button_ToolBar=Remove Button ToolBar +FR-Designer_Get-CubeGetting= +FR-Designer_DoubleLayer_Report= +FR-Designer_Get-Cube= diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index 2f4affb91..99070465e 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -564,4 +564,36 @@ FR-Designer_Chart_F_Radar_Axis=\u5782\u76F4\u8EF8 FR-Designer_Style=\u30B9\u30BF\u30A4\u30EB FR-Designer_Color=\u8272 FR-Designer_Border=\u67A0 -FR-Designer_Background-Pattern=\u30D1\u30BF\u30FC\u30F3 \ No newline at end of file +FR-Designer_Background-Pattern=\u30D1\u30BF\u30FC\u30F3 +FR-Designer_Printer_Native_Button=\u30ED\u30FC\u30AB\u30EB\u5370\u5237 +FR-Designer_SimpleDetail_Report=\u7C21\u5358\u660E\u7D30\u8868 +FR-Designer_Reset=\u30EA\u30BB\u30C3\u30C8 +FR-Designer_WidgetOrder=\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306E\u9806\u756A +FR-Designer_Button-OK=\u5206\u304B\u308A\u307E\u3057\u305F +FR-Designer_Mobile-Warning=\u6700\u5927\u306E\u9AD8\u3055\u306F\u8868\u793A\u30A8\u30EA\u30A2\u306E80\uFF05\u4EE5\u4E0A\u306B\u306A\u308A\u307E\u305B\u3093 +FR-Designer_Mobile_Form_Analysis_Annotation=\u8AAC\u660E\:\u8A72\u5F53\u8A2D\u5B9A\u3088\u308A\u3001\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u306E\u30A2\u30D7\u30EA\u3067\u306E\u89E3\u6790\u30E2\u30FC\u30C9\u3092\u8A2D\u5B9A\u3067\u304D\u307E\u3059\u3002 +FR-Designer-Invalid_Page_Number=\u7121\u52B9\u306A\u30DA\u30FC\u30B8\u756A\u53F7 +FR-Designer_Form-Forzen-Speed=\u3001\u305D\u3057\u3066\u6A2A\u65B9\u5411\u81EA\u5DF1\u9069\u5FDC\u307E\u305F\u306F2\u65B9\u5411\u81EA\u52D5\u9069\u5FDC\u3092\u5229\u7528\u3057\u3001\u5E33\u7968\u8868\u793A\u306E\u30B9\u30D4\u30FC\u30C9\u3092\u4E0A\u3052\u3067\u304D\u307E\u3059\u3002 +FR-Designer_Properties_Mobile=\u30B9\u30DE\u30FC\u30C8\u30D5\u30A9\u30F3\u5C5E\u6027 +FR-Designer_AllCategories=\u5168\u3066\u306E\u7A2E\u985E +FR-Designer-Selected_Widget=\u5F53\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8 +FR-Designer_SimpleCross_Report=\u7C21\u5358\u30AF\u30ED\u30FC\u30B9\u8868 +FR-Designer_Log=\u30ED\u30B0 +FR-Designer_Form-Fit-Tip=\u81EA\u5DF1\u9069\u5FDC\u30D7\u30E9\u30B0\u30A4\u30F3 +FR-Designer_Button-Cancel=\u53D6\u308A\u6D88\u3057 +FR-Designer_LocalWidget=\u30ED\u30FC\u30AB\u30EB\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u30E9\u30A4\u30D6\u30E9\u30EA +FR-Designer_Alert=\u30A2\u30E9\u30FC\u30C8 +FR-Designer_TableData-Default-Para=\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u306E\u30C7\u30D5\u30A9\u30EB\u30C8\u30D1\u30E9\u30E1\u30FC\u30BF +FR-Designer_Edit_Button_ToolBar=\u30DC\u30BF\u30F3\u306E\u30C4\u30FC\u30EB\u30D0\u30FC\u3092\u7DE8\u96C6 +FR-Designer-Plugin_Please_Update_Jar=jar\u30D1\u30C3\u30AF\u3092\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u3057\u3066\u304F\u3060\u3055\u3044 +FR-Designer_Form-Frozen-Tip=\u30D5\u30EA\u30FC\u30BA\u3092\u4F7F\u3046\u6642\u3001\u5F8C\u8A18\u306E\u30D7\u30E9\u30B0\u30A4\u30F3\u3092\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3057\u3066\u304F\u3060\u3055\u3044\uFF1A +FR-Designer_Remove_Button_ToolBar=\u30DC\u30BF\u30F3\u306E\u30C4\u30FC\u30EB\u30D0\u30FC\u3092\u524A\u9664 +FR-Designer_Normal=\u6B63\u5E38 +FR-Designer_Install_Template=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u3092\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB +FR-Designer_Copy=\u30B3\u30D4\u30FC +FR-Designer_Allow-Blank=\u7A7A\u306B\u8A31\u3059 +FR-Designer_Clear_All=\u5168\u3066\u3092\u30AF\u30EA\u30A2 +FR-Designer_Delete_Template=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u3092\u524A\u9664 +FR-Designer_Mobile_Report_Analysis_Annotation=\u8AAC\u660E\:\u8A72\u5F53\u5C5E\u6027\u3088\u308A\u3001\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u306E\u30A2\u30D7\u30EA\u3067\u306E\u89E3\u6790\u30E2\u30FC\u30C9\u3092\u8A2D\u5B9A\u3067\u304D\u307E\u3059\u3001\u9801\u5206\u3051\u30D7\u30EC\u30D3\u30E5\u30FC\u3060\u3051\u3092\u652F\u6301\u3001\u66F8\u304D\u8FBC\u307F\u306B\u8A2D\u5B9A\u3059\u308B\u6642\u7121\u52B9\u306B\u306A\u308A\u307E\u3059\u3002 +FR-Designer_DoubleLayer_Report=\u4E8C\u968E\u30BF\u30A4\u30C8\u30EB +FR-Designer_Validate=\u691C\u8A3C diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index 075b017ab..875394618 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -559,4 +559,42 @@ FR-Designer_Chart_F_Radar_Axis=\uAC12\uCD95 FR-Designer_Style=\uC591\uC2DD FR-Designer_Color=\uC0C9 FR-Designer_Border=\uD14C\uB450\uB9AC -FR-Designer_Background-Pattern=\uC774\uBBF8\uC9C0 \ No newline at end of file +FR-Designer_Background-Pattern=\uC774\uBBF8\uC9C0 +FR-Designer_COMMUNITY_BUG= +FR-Designer_Mobile-Attr= +FR-Designer_Too_Large_To_Paste= +FR-Designer_COMMUNITY_QUESTIONS= +FR-Designer_COMMUNITY_NEED= +FR-Designer_WidgetOrder= +FR-Designer_Button-OK= +FR-Designer_Mobile-Warning= +FR-Designer_COMMUNITY= +FR-Designer_Mobile_Form_Analysis_Annotation= +FR-Designer-Invalid_Page_Number= +FR-Designer_Form-Forzen-Speed= +FR-Designer_Properties_Mobile= +FR-Designer_AllCategories= +FR-Designer_COMMUNITY_VIDEO= +FR-Designer_Too_Small_To_Paste= +FR-Designer_COMMUNITY_HELP= +FR-Designer_Mobile-Zoom= +FR-Designer_SimpleCross_Report= +FR-Designer_Mobile-Horizontal= +FR-Designer_Form-Fit-Tip= +FR-Designer_Mobile-Vertical= +FR-Designer_Button-Cancel= +FR-Designer_LocalWidget= +FR-Designer_COMMUNITY_SIGN= +FR-Designer_TableData-Default-Para= +FR-Designer_Edit_Button_ToolBar=\uD0A4\uAC00\uC788\uB294\uD234\uBC14\uD3B8\uC9D1 +FR-Designer_Mobile-Open= +FR-Designer_Form-Frozen-Tip= +FR-Designer_Remove_Button_ToolBar=\uD0A4\uAC00\uC788\uB294\uD234\uBC14\uC81C\uAC70 +FR-Designer_Allow-Blank= +FR-Designer_COMMUNITY_BBS= +FR-Designer_formDesignerModule= +FR-Designer_COMMUNITY_UPDATE= +FR-Designer_Delete_Template= +FR-Designer_Mobile_Report_Analysis_Annotation= +FR-Designer_DoubleLayer_Report= +FR-Designer_Validate= diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index d0a2b0520..2740e54d2 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -599,4 +599,6 @@ FR-Designer_Chart_F_Radar_Axis=\u503C\u8F74 FR-Designer_Style=\u6837\u5F0F FR-Designer_Color=\u989C\u8272 FR-Designer_Border=\u8FB9\u6846 -FR-Designer_Background-Pattern=\u56FE\u6848 \ No newline at end of file +FR-Designer_Background-Pattern=\u56FE\u6848 +FR-Designer_Edit_Button_ToolBar=\u7F16\u8F91\u6309\u94AE\u6240\u5728\u5DE5\u5177\u680F +FR-Designer_Remove_Button_ToolBar=\u79FB\u9664\u6309\u94AE\u6240\u5728\u5DE5\u5177\u680F diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index bbaf3db36..92897929a 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -585,4 +585,18 @@ FR-Designer_Chart_F_Radar_Axis=\u503C\u8EF8 FR-Designer_Style=\u6A23\u5F0F FR-Designer_Color=\u984F\u8272 FR-Designer_Border=\u6846\u7DDA -FR-Designer_Background-Pattern=\u5716\u6848 \ No newline at end of file +FR-Designer_Background-Pattern=\u5716\u6848 +FR-Designer_SimpleDetail_Report= +FR-Designer_Reset= +FR-Designer_AllCategories= +FR-Designer-Selected_Widget= +FR-Designer_SimpleCross_Report= +FR-Designer_LocalWidget= +FR-Designer_Edit_Button_ToolBar=\u7DE8\u8F2F\u6309\u9215\u6240\u5728\u5DE5\u5177\u6B04 +FR-Designer_Remove_Button_ToolBar=\u79FB\u9664\u6309\u9215\u6240\u5728\u5DE5\u5177\u6B04 +FR-Designer_Install_Template= +FR-Designer_Allow-Blank= +FR-Designer_Delete_Template= +FR-Designer_Download_Template= +FR-Designer_DoubleLayer_Report= +FR-Designer_Validate= From 329d11029ab8c9dff04a09364255e03b692d6df0 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Tue, 2 May 2017 19:23:25 +0800 Subject: [PATCH 321/343] =?UTF-8?q?=E6=97=A0=E4=BB=BB=E5=8A=A1=EF=BC=8C?= =?UTF-8?q?=E5=86=B2=E7=AA=81=E8=B0=83=E6=95=B4=EF=BC=8Crelease=E5=88=B0de?= =?UTF-8?q?v?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer/creator/XWAbsoluteLayout.java | 924 +++++++++--------- .../design/mainframe/FormSelectionUtils.java | 4 +- 2 files changed, 474 insertions(+), 454 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java b/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java index b585383c6..852cdf122 100644 --- a/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java @@ -3,14 +3,6 @@ */ package com.fr.design.designer.creator; -import java.awt.*; -import java.awt.event.ContainerEvent; -import java.awt.event.MouseEvent; -import java.awt.image.BufferedImage; -import java.beans.IntrospectionException; -import java.util.ArrayList; -import java.util.HashMap; - import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.ComponentAdapter; import com.fr.design.designer.beans.LayoutAdapter; @@ -20,345 +12,369 @@ import com.fr.design.designer.beans.models.SelectionModel; import com.fr.design.designer.creator.cardlayout.XWTabFitLayout; import com.fr.design.form.layout.FRAbsoluteLayout; import com.fr.design.icon.IconPathConstants; -import com.fr.design.mainframe.*; +import com.fr.design.mainframe.EditingMouseListener; +import com.fr.design.mainframe.FormArea; +import com.fr.design.mainframe.FormDesigner; import com.fr.form.ui.Connector; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WAbsoluteLayout; -import com.fr.form.ui.container.WLayout; import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; +import com.fr.form.ui.container.WLayout; import com.fr.general.FRScreen; import com.fr.general.IOUtils; import com.fr.general.Inter; +import java.awt.*; +import java.awt.event.ContainerEvent; +import java.awt.event.MouseEvent; +import java.awt.image.BufferedImage; +import java.beans.IntrospectionException; +import java.util.ArrayList; +import java.util.HashMap; + /** * @author richer * @since 6.5.3 */ public class XWAbsoluteLayout extends XLayoutContainer { - private static final int EDIT_BTN_WIDTH = 60; - private static final int EDIT_BTN_HEIGHT = 24; - private int minWidth = WLayout.MIN_WIDTH; - private int minHeight = WLayout.MIN_HEIGHT; - - //由于屏幕分辨率不同,界面上的容器大小可能不是默认的100%,此时拖入组件时,保存的大小按照100%时的计算 - protected double containerPercent = 1.0; - - private HashMap xConnectorMap; - - public XWAbsoluteLayout() { - this(new WAbsoluteLayout(),new Dimension()); - } - - public XWAbsoluteLayout(WAbsoluteLayout widget) { - this(widget,new Dimension()); - } - - public XWAbsoluteLayout(WAbsoluteLayout widget, Dimension initSize) { - super(widget, initSize); - this.xConnectorMap = new HashMap(); - Connector connector; - for (int i = 0; i < widget.connectorCount(); i++) { - connector = widget.getConnectorIndex(i); - xConnectorMap.put(connector, new XConnector(connector, this)); - } - - initPercent(widget); - } - - /** - * 初始化时默认的组件大小 - * - * @return 默认Dimension - */ - @Override - public Dimension initEditorSize() { - return new Dimension(500, 300); - } - - //根据屏幕大小来确定显示的百分比, 1440*900默认100%, 1366*768缩放90% - private void initPercent(WAbsoluteLayout widget){ - Toolkit toolkit = Toolkit.getDefaultToolkit(); - Dimension scrnsize = toolkit.getScreenSize(); - double screenValue = FRScreen.getByDimension(scrnsize).getValue(); - if(screenValue != FormArea.DEFAULT_SLIDER){ - this.setContainerPercent(screenValue / FormArea.DEFAULT_SLIDER); - } - } - - /** - * 返回容器大小的百分比 - * @return the containerPercent - */ - public double getContainerPercent() { - return containerPercent; - } - - /** - * 设置容器大小的百分比 - * @param containerPercent the containerPercent to set - */ - public void setContainerPercent(double containerPercent) { - this.containerPercent = containerPercent; - minWidth = (int) (XWAbsoluteLayout.MIN_WIDTH*containerPercent); - minHeight = (int) (XWAbsoluteLayout.MIN_HEIGHT*containerPercent); - } - - /** - * 返回界面处根据百分比调整后的最小宽度 - * @return 最小宽度 - */ - public int getActualMinWidth() { - return this.minWidth; - } - - /** - * 返回界面处根据百分比调整后的最小高度 - * @return 最小高度 - */ - public int getActualMinHeight() { - return this.minHeight; - } - - /** - * 返回界面处根据百分比调整后的间隔大小(且为偶数) - * @return 间隔 - */ - public int getAcualInterval() { - // adapter那边交叉三等分、删除都要判断是否对齐,所以间隔转为偶数 - int interval = (int) (toData().getCompInterval()*containerPercent); - int val = interval/2; - return val*2; - } - - /** - * 界面容器大小不是默认的时,处理控件的BoundsWidget,且避免出现空隙 - */ - private Rectangle dealWidgetBound(Rectangle rec) { - if (containerPercent == 1.0) { - return rec; - } - rec.x = (int) (rec.x/containerPercent); - rec.y = (int) (rec.y/containerPercent); - rec.width = (int) (rec.width/containerPercent); - rec.height = (int) (rec.height/containerPercent); - return rec; - } - - /** - * 新增删除拉伸后单个组件的BoundsWidget - */ - public void updateBoundsWidget(XCreator xCreator) { - WAbsoluteLayout layout = this.toData(); - if (xCreator.hasTitleStyle()) { - xCreator = (XLayoutContainer)xCreator.getParent(); - } - if (xCreator.acceptType(XWAbsoluteLayout.class)){ - ((XWAbsoluteLayout) xCreator).updateBoundsWidget(); - } - // 如果子组件时tab布局,则tab布局内部的组件的wiget也要更新,否则保存后重新打开大小不对 - ArrayList childrenList = xCreator.getTargetChildrenList(); - if(!childrenList.isEmpty()){ - for(int i=0; i xConnectorMap; + + public XWAbsoluteLayout() { + this(new WAbsoluteLayout(), new Dimension()); + } + + public XWAbsoluteLayout(WAbsoluteLayout widget) { + this(widget, new Dimension()); + } + + public XWAbsoluteLayout(WAbsoluteLayout widget, Dimension initSize) { + super(widget, initSize); + this.xConnectorMap = new HashMap(); + Connector connector; + for (int i = 0; i < widget.connectorCount(); i++) { + connector = widget.getConnectorIndex(i); + xConnectorMap.put(connector, new XConnector(connector, this)); + } + + initPercent(widget); + } + + /** + * 初始化时默认的组件大小 + * + * @return 默认Dimension + */ + @Override + public Dimension initEditorSize() { + return new Dimension(500, 300); + } + + //根据屏幕大小来确定显示的百分比, 1440*900默认100%, 1366*768缩放90% + private void initPercent(WAbsoluteLayout widget) { + Toolkit toolkit = Toolkit.getDefaultToolkit(); + Dimension scrnsize = toolkit.getScreenSize(); + double screenValue = FRScreen.getByDimension(scrnsize).getValue(); + if (screenValue != FormArea.DEFAULT_SLIDER) { + this.setContainerPercent(screenValue / FormArea.DEFAULT_SLIDER); + } + } + + /** + * 返回容器大小的百分比 + * + * @return the containerPercent + */ + public double getContainerPercent() { + return containerPercent; + } + + /** + * 设置容器大小的百分比 + * + * @param containerPercent the containerPercent to set + */ + public void setContainerPercent(double containerPercent) { + this.containerPercent = containerPercent; + minWidth = (int) (XWAbsoluteLayout.MIN_WIDTH * containerPercent); + minHeight = (int) (XWAbsoluteLayout.MIN_HEIGHT * containerPercent); + } + + /** + * 返回界面处根据百分比调整后的最小宽度 + * + * @return 最小宽度 + */ + public int getActualMinWidth() { + return this.minWidth; + } + + /** + * 返回界面处根据百分比调整后的最小高度 + * + * @return 最小高度 + */ + public int getActualMinHeight() { + return this.minHeight; + } + + /** + * 返回界面处根据百分比调整后的间隔大小(且为偶数) + * + * @return 间隔 + */ + public int getAcualInterval() { + // adapter那边交叉三等分、删除都要判断是否对齐,所以间隔转为偶数 + int interval = (int) (toData().getCompInterval() * containerPercent); + int val = interval / 2; + return val * 2; + } + + /** + * 界面容器大小不是默认的时,处理控件的BoundsWidget,且避免出现空隙 + */ + private Rectangle dealWidgetBound(Rectangle rec) { + if (containerPercent == 1.0) { + return rec; + } + rec.x = (int) (rec.x / containerPercent); + rec.y = (int) (rec.y / containerPercent); + rec.width = (int) (rec.width / containerPercent); + rec.height = (int) (rec.height / containerPercent); + return rec; + } + + /** + * 新增删除拉伸后单个组件的BoundsWidget + */ + public void updateBoundsWidget(XCreator xCreator) { + WAbsoluteLayout layout = this.toData(); + if (xCreator.hasTitleStyle()) { + xCreator = (XLayoutContainer) xCreator.getParent(); + } + if (xCreator.acceptType(XWAbsoluteLayout.class)) { + ((XWAbsoluteLayout) xCreator).updateBoundsWidget(); + } + // 如果子组件时tab布局,则tab布局内部的组件的wiget也要更新,否则保存后重新打开大小不对 + ArrayList childrenList = xCreator.getTargetChildrenList(); + if (!childrenList.isEmpty()) { + for (int i = 0; i < childrenList.size(); i++) { + XWTabFitLayout tabLayout = (XWTabFitLayout) childrenList.get(i); + tabLayout.updateBoundsWidget(); + } + } + BoundsWidget boundsWidget = (BoundsWidget) layout.getBoundsWidget(xCreator.toData()); + Rectangle rectangle = dealWidgetBound(xCreator.getBounds()); + } + + private Rectangle calculateBound(Rectangle rec, double pw, double ph) { + Rectangle calRec = new Rectangle(0, 0, 0, 0); + calRec.x = (int) (rec.x / pw); + calRec.y = (int) (rec.y / ph); + calRec.width = (int) (rec.width / pw); + calRec.height = (int) (rec.height / ph); + return calRec; + } + + /** + * 新增删除拉伸后每个组件的BoundsWidget + */ + public void updateBoundsWidget() { + WAbsoluteLayout layout = this.toData(); + Rectangle backupBound = this.getBackupBound(); + Rectangle currentBound = this.getBounds(); + if (backupBound != null && layout.getCompState() == WAbsoluteLayout.STATE_FIT) { + double percentW = ((double) backupBound.width / (double) currentBound.width); + double percentH = ((double) backupBound.height / (double) currentBound.height); + for (int index = 0, n = this.getComponentCount(); index < n; index++) { + XCreator creator = (XCreator) this.getComponent(index); + BoundsWidget wgt = (BoundsWidget) layout.getBoundsWidget(creator.toData()); + // 用当前的显示大小计算后调正具体位置 + Rectangle wgtBound = creator.getBounds(); + Rectangle rec = calculateBound(wgtBound, percentW, percentH); + wgt.setBounds(rec); + creator.setBounds(rec); + //绝对布局嵌套,要更新内部的绝对布局 + if (creator.acceptType(XWAbsoluteLayout.class)) { + creator.setBackupBound(wgtBound); + ((XWAbsoluteLayout) creator).updateBoundsWidget(); + } + } + } + } + + /** + * 更新子组件的Bound + * 这边主要用于绝对布局子组件在适应区域选项时 + * 涉及到的不同分辨率下缩放 + * + * @param minHeight 最小高度 + */ + @Override + public void updateChildBound(int minHeight) { + double prevContainerPercent = FRScreen.getByDimension(toData().getDesigningResolution()).getValue() / FormArea.DEFAULT_SLIDER; + if (toData().getCompState() == 0 && prevContainerPercent != containerPercent) { + for (int i = 0; i < this.getComponentCount(); i++) { + XCreator creator = getXCreator(i); + Rectangle rec = new Rectangle(creator.getBounds()); + rec.x = (int) (rec.x / prevContainerPercent * containerPercent); + rec.y = (int) (rec.y / prevContainerPercent * containerPercent); + rec.height = (int) (rec.height / prevContainerPercent * containerPercent); + rec.width = (int) (rec.width / prevContainerPercent * containerPercent); + BoundsWidget wgt = (BoundsWidget) toData().getBoundsWidget(creator.toData()); + wgt.setBounds(rec); + creator.setBounds(rec); + creator.updateChildBound(minHeight); + } + } + toData().setDesigningResolution(Toolkit.getDefaultToolkit().getScreenSize()); + } + + /** + * 增加对齐线 + * + * @param connector 对齐线 + */ + public void addConnector(Connector connector) { + xConnectorMap.put(connector, new XConnector(connector, this)); + ((WAbsoluteLayout) data).addConnector(connector); + } + + public XConnector getXConnector(Connector connector) { + return xConnectorMap.get(connector); + } + + /** + * 去除对齐线 + * + * @param connector 对齐线 + */ + public void removeConnector(Connector connector) { + ((WAbsoluteLayout) data).removeConnector(connector); + xConnectorMap.remove(connector); + } + + /** + * 返回对应的widget容器 + * + * @return 返回WAbsoluteLayout + */ + @Override + public WAbsoluteLayout toData() { + return (WAbsoluteLayout) data; + } + + @Override + protected String getIconName() { + return "layout_absolute_new.png"; + } + + /** + * 返回默认的容器name + * + * @return 返回绝对布局容器名 + */ + @Override + public String createDefaultName() { + return "absolute"; + } + + @Override + protected void initLayoutManager() { + this.setLayout(new FRAbsoluteLayout()); + } + + /** + * 是否支持标题样式 + * + * @return 默认false + */ + @Override + public boolean hasTitleStyle() { + return false; + } + + @Override + public void paintComponent(Graphics g) { + super.paintComponent(g); + WAbsoluteLayout layout = (WAbsoluteLayout) data; + Connector[] connector = layout.getConnector(); + for (int i = 0, size = connector.length; i < size; i++) { + connector[i].draw(g); + } + } + + /** + * 转换保存组件信息的wlayout为对应的container + */ + @Override + public void convert() { + isRefreshing = true; + WAbsoluteLayout abs = toData(); + this.removeAll(); + for (int i = 0, count = abs.getWidgetCount(); i < count; i++) { + BoundsWidget bw = (BoundsWidget) abs.getWidget(i); + if (bw != null) { + Rectangle bounds = bw.getBounds(); + XWidgetCreator comp = (XWidgetCreator) XCreatorUtils.createXCreator(bw.getWidget()); + if (!comp.acceptType(XWParameterLayout.class)) { + comp.setDirections(Direction.ALL); + } + add(comp); + comp.setBounds(bounds); + } + } + isRefreshing = false; + } + + /** + * 当前组件zorder位置替换新的控件 + * + * @param widget 控件 + * @param oldcreator 旧组件 + * @return 组件 + */ + @Override + public XCreator replace(Widget widget, XCreator oldcreator) { + int i = this.getComponentZOrder(oldcreator); + if (i != -1) { + this.toData().replace(new BoundsWidget(widget, oldcreator.getBounds()), + new BoundsWidget(oldcreator.toData(), oldcreator.getBounds())); + this.convert(); + return (XCreator) this.getComponent(i); + } + return null; + } + + /** * 组件增加 + * * @param e 容器事件 */ - @Override - public void componentAdded(ContainerEvent e) { - if (isRefreshing) { - return; - } - XWidgetCreator creator = (XWidgetCreator) e.getChild(); - WAbsoluteLayout wabs = this.toData(); - if (!creator.acceptType(XWFitLayout.class)) { - creator.setDirections(Direction.ALL); - } - wabs.addWidget(new BoundsWidget(creator.toData(), creator.getBounds())); - } - - /** + @Override + public void componentAdded(ContainerEvent e) { + if (isRefreshing) { + return; + } + XWidgetCreator creator = (XWidgetCreator) e.getChild(); + WAbsoluteLayout wabs = this.toData(); + if (!creator.acceptType(XWFitLayout.class)) { + creator.setDirections(Direction.ALL); + } + wabs.addWidget(new BoundsWidget(creator.toData(), creator.getBounds())); + } + + /** * 在设计界面中有组件移除的时候,需要通知WLayout容器重新paint + * * @param e 容器事件 */ @Override @@ -372,128 +388,130 @@ public class XWAbsoluteLayout extends XLayoutContainer { BoundsWidget bw = new BoundsWidget(wgt, xwc.getBounds()); wlayout.removeWidget(bw); } - - @Override - public Dimension getMinimumSize() { - return toData().getMinDesignSize(); - } - - @Override - public LayoutAdapter getLayoutAdapter() { - return new FRAbsoluteLayoutAdapter(this); - } - - @Override - public XLayoutContainer getTopLayout() { - XLayoutContainer xTopLayout = XCreatorUtils.getParentXLayoutContainer(this).getTopLayout(); - if (xTopLayout != null && !xTopLayout.isEditable()){ - return xTopLayout; - } - else{ - return this; - } - } - - /** - * 得到属性名 - * @return 属性名 - * @throws java.beans.IntrospectionException - */ - public CRPropertyDescriptor[] supportedDescriptor() throws IntrospectionException { - return new CRPropertyDescriptor[] { - new CRPropertyDescriptor("widgetName", this.data.getClass()).setI18NName( - Inter.getLocText("FR-Designer_Form-Widget_Name")) - }; - } - - public void paint(Graphics g) { - super.paint(g); - //如果鼠标移动到布局内且布局不可编辑,画出编辑蒙层 - if (isMouseEnter && !this.editable) { - int x = 0; - int y = 0; - int w = getWidth(); - int h = getHeight(); - - Graphics2D g2d = (Graphics2D) g; - Composite oldComposite = g2d.getComposite(); - //画白色的编辑层 - g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 60 / 100.0F)); - g2d.setColor(Color.WHITE); - g2d.fillRect(x, y, w, h); - //画编辑按钮所在框 - g2d.setComposite(oldComposite); - g2d.setColor(new Color(176, 196, 222)); - g2d.fillRect((x + w / 2 - EDIT_BTN_WIDTH / 2), (y + h / 2 - EDIT_BTN_HEIGHT / 2), EDIT_BTN_WIDTH, EDIT_BTN_HEIGHT); - //画编辑按钮图标 - BufferedImage image = IOUtils.readImage(IconPathConstants.TD_EDIT_ICON_PATH); - g2d.drawImage( - image, - (x + w / 2 - 23), - (y + h / 2 - image.getHeight() / 2), - image.getWidth(), - image.getHeight(), - null, - this - ); - g2d.setColor(Color.BLACK); - //画编辑文字 - g2d.drawString(Inter.getLocText("FR-Designer_Edit"), x + w / 2 - 2, y + h / 2 + 5); - } - } - - /** - * 响应点击事件 - * - * @param editingMouseListener 鼠标点击,位置处理器 - * @param e 鼠标点击事件 - */ - public void respondClick(EditingMouseListener editingMouseListener,MouseEvent e){ - FormDesigner designer = editingMouseListener.getDesigner(); - SelectionModel selectionModel = editingMouseListener.getSelectionModel(); - boolean isEditing = isEditable() || designer.getCursor().getType() == Cursor.HAND_CURSOR || e.getClickCount() == 2; - setEditable(isEditing); - - selectionModel.selectACreatorAtMouseEvent(e); - designer.repaint(); - - if (editingMouseListener.stopEditing()) { - if (this != designer.getRootComponent()) { - ComponentAdapter adapter = AdapterBus.getComponentAdapter(designer, this); - editingMouseListener.startEditing(this, isEditing ? adapter.getDesignerEditor() : null, adapter); - } - } - } - - /** - * body大小手动调整的时候 - * 按照比例调整组件的宽度 - * @param percent 比例 - */ - @Override - public void adjustCompWidth(double percent) { - for (int i = 0; i < getComponentCount(); i++) { - XCreator xCreator = (XCreator) getComponent(i); - Rectangle rectangle = xCreator.getBounds(); - xCreator.setBounds((int) (rectangle.x * percent), rectangle.y, (int) (rectangle.width * percent), rectangle.height); - BoundsWidget widget = (BoundsWidget) toData().getBoundsWidget(xCreator.toData()); - widget.setBounds(xCreator.getBounds()); - } - } - - /** - * body大小手动调整的时候 - * 按照比例调整组件的高度 - * @param percent 比例 - */ - @Override - public void adjustCompHeight(double percent) { - for (int i = 0; i < getComponentCount(); i++) { - XCreator xCreator = (XCreator) getComponent(i); - Rectangle rectangle = xCreator.getBounds(); - xCreator.setBounds(rectangle.x, (int) (rectangle.y * percent), rectangle.width, (int) (rectangle.height * percent)); - BoundsWidget widget = (BoundsWidget) toData().getBoundsWidget(xCreator.toData()); - widget.setBounds(xCreator.getBounds()); - } - } + + @Override + public Dimension getMinimumSize() { + return toData().getMinDesignSize(); + } + + @Override + public LayoutAdapter getLayoutAdapter() { + return new FRAbsoluteLayoutAdapter(this); + } + + @Override + public XLayoutContainer getTopLayout() { + XLayoutContainer xTopLayout = XCreatorUtils.getParentXLayoutContainer(this).getTopLayout(); + if (xTopLayout != null && !xTopLayout.isEditable()) { + return xTopLayout; + } else { + return this; + } + } + + /** + * 得到属性名 + * + * @return 属性名 + * @throws java.beans.IntrospectionException + */ + public CRPropertyDescriptor[] supportedDescriptor() throws IntrospectionException { + return new CRPropertyDescriptor[]{ + new CRPropertyDescriptor("widgetName", this.data.getClass()).setI18NName( + Inter.getLocText("FR-Designer_Form-Widget_Name")) + }; + } + + public void paint(Graphics g) { + super.paint(g); + //如果鼠标移动到布局内且布局不可编辑,画出编辑蒙层 + if (isMouseEnter && !this.editable) { + int x = 0; + int y = 0; + int w = getWidth(); + int h = getHeight(); + + Graphics2D g2d = (Graphics2D) g; + Composite oldComposite = g2d.getComposite(); + //画白色的编辑层 + g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 60 / 100.0F)); + g2d.setColor(Color.WHITE); + g2d.fillRect(x, y, w, h); + //画编辑按钮所在框 + g2d.setComposite(oldComposite); + g2d.setColor(new Color(176, 196, 222)); + g2d.fillRect((x + w / 2 - EDIT_BTN_WIDTH / 2), (y + h / 2 - EDIT_BTN_HEIGHT / 2), EDIT_BTN_WIDTH, EDIT_BTN_HEIGHT); + //画编辑按钮图标 + BufferedImage image = IOUtils.readImage(IconPathConstants.TD_EDIT_ICON_PATH); + g2d.drawImage( + image, + (x + w / 2 - 23), + (y + h / 2 - image.getHeight() / 2), + image.getWidth(), + image.getHeight(), + null, + this + ); + g2d.setColor(Color.BLACK); + //画编辑文字 + g2d.drawString(Inter.getLocText("FR-Designer_Edit"), x + w / 2 - 2, y + h / 2 + 5); + } + } + + /** + * 响应点击事件 + * + * @param editingMouseListener 鼠标点击,位置处理器 + * @param e 鼠标点击事件 + */ + public void respondClick(EditingMouseListener editingMouseListener, MouseEvent e) { + FormDesigner designer = editingMouseListener.getDesigner(); + SelectionModel selectionModel = editingMouseListener.getSelectionModel(); + boolean isEditing = isEditable() || designer.getCursor().getType() == Cursor.HAND_CURSOR || e.getClickCount() == 2; + setEditable(isEditing); + + selectionModel.selectACreatorAtMouseEvent(e); + designer.repaint(); + + if (editingMouseListener.stopEditing()) { + if (this != designer.getRootComponent()) { + ComponentAdapter adapter = AdapterBus.getComponentAdapter(designer, this); + editingMouseListener.startEditing(this, isEditing ? adapter.getDesignerEditor() : null, adapter); + } + } + } + + /** + * body大小手动调整的时候 + * 按照比例调整组件的宽度 + * + * @param percent 比例 + */ + @Override + public void adjustCompWidth(double percent) { + for (int i = 0; i < getComponentCount(); i++) { + XCreator xCreator = (XCreator) getComponent(i); + Rectangle rectangle = xCreator.getBounds(); + xCreator.setBounds((int) (rectangle.x * percent), rectangle.y, (int) (rectangle.width * percent), rectangle.height); + BoundsWidget widget = (BoundsWidget) toData().getBoundsWidget(xCreator.toData()); + widget.setBounds(xCreator.getBounds()); + } + } + + /** + * body大小手动调整的时候 + * 按照比例调整组件的高度 + * + * @param percent 比例 + */ + @Override + public void adjustCompHeight(double percent) { + for (int i = 0; i < getComponentCount(); i++) { + XCreator xCreator = (XCreator) getComponent(i); + Rectangle rectangle = xCreator.getBounds(); + xCreator.setBounds(rectangle.x, (int) (rectangle.y * percent), rectangle.width, (int) (rectangle.height * percent)); + BoundsWidget widget = (BoundsWidget) toData().getBoundsWidget(xCreator.toData()); + widget.setBounds(xCreator.getBounds()); + } + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java index 90945b1e8..7a03782c2 100644 --- a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java +++ b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java @@ -133,8 +133,10 @@ public class FormSelectionUtils { boolean xOut = x < 0 || x + copiedCreator.getWidth() / 2 + xoffset > container.getWidth(); boolean yOut = y < 0 || y + copiedCreator.getHeight() / 2 + yoffset > container.getHeight(); + boolean isEdge = (x - DELAY_X_Y == container.getWidth() - copiedCreator.getWidth() / 2 - xoffset) + && (y - DELAY_X_Y == container.getHeight() - copiedCreator.getHeight() / 2 - yoffset); + y = yOut ? container.getHeight() - copiedCreator.getHeight() / 2 - yoffset : y; - boolean isEdge = (x - DELAY_X_Y == container.getWidth() - copiedCreator.getWidth() / 2 - xoffset); if (xOut) { if (isEdge) { //向左偏移 From c7217f2f6a0bd85c8ab5212a7b5a46c9f829fa48 Mon Sep 17 00:00:00 2001 From: plough Date: Wed, 3 May 2017 09:48:36 +0800 Subject: [PATCH 322/343] =?UTF-8?q?REPORT-2483=20=E5=9B=BD=E9=99=85?= =?UTF-8?q?=E5=8C=96key=E8=BD=AC=E7=A7=BB=EF=BC=9B=E5=8E=BB=E6=8E=89?= =?UTF-8?q?=E7=A9=BA=E7=99=BD=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/locale/designer.properties | 1394 +++++++++++++++- .../design/locale/designer_en_US.properties | 1395 ++++++++++++++++- .../design/locale/designer_ja_JP.properties | 1388 +++++++++++++++- .../design/locale/designer_ko_KR.properties | 1388 +++++++++++++++- .../design/locale/designer_zh_CN.properties | 1393 +++++++++++++++- .../design/locale/designer_zh_TW.properties | 1391 +++++++++++++++- 6 files changed, 8322 insertions(+), 27 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 0ec6015c8..b3b020ac3 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -516,7 +516,6 @@ FR-Designer_Create_Tree= FR-Designer_Set_Callback_Function= FR-Designer_ConfirmDialog_Content= FR-Designer_ConfirmDialog_Title= - FR-Designer_FormulaPane_Tips=Tips\:You_Can_Input_B1_To_Input_The_Data_Of_The_First_Row_Second_Column FR-Designer_FormulaPane_Variables=Variables FR-Designer_FormulaPane_Formula_Description=Formula_Description @@ -525,13 +524,11 @@ FR-Designer_FormulaPane_Search=Search FR-Designer_Tab_carousel= FR-Designer_setCarousel= 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 @@ -547,7 +544,6 @@ 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}' directory.\nAdd the source code(.java file) into the same folder if need.\nExample: {R2}} FR-Designer_PageSetup_Horizontal=Horizontal @@ -588,10 +584,8 @@ 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_Too_Large_To_Paste=too large to paste FR-Designer_Too_Small_To_Paste=Too small to paste - FR-Designer_AxisReversed=AxisValue FR-Designer_Logarithmic=Logarithmic FR-Designer_Chart_Log_Base=Log Base @@ -600,10 +594,1396 @@ FR-Designer_Style=Style FR-Designer_Color=Color FR-Designer_Border=Border FR-Designer_Background-Pattern=Pattern - FR-Designer_Properties_Mobile= FR-Designer_Edit_Button_ToolBar= FR-Designer_Remove_Button_ToolBar= FR-Designer_Get-CubeGetting= FR-Designer_Oracle= FR-Designer_Validate= +CellWrite-InsertRow_NULL=Null +DashBoard-ChartFloat=Chart +contact_info=Contact information (optional) +Page_Setup=Page_Setup +CellWrite-Print_Export= +Cannot_Get_Date=Can not get date +FR-Designer_Modify=Modify +M-Write_Preview=Write Preview +FR-Base_RWA-Key= +China=China +Set_Legend_Sytle=Set_Legend_Sytle +FR-Designer_Number=Number +FR-Designer-Widget-Style_Common= +M-Save_As=Save As +Following_parameters_are_not_generated=The following parameters are not generated +FR-Designer-Basic_Activation_Key_Copy_OK=Key has been copy to clipboard +Utils-Current_Sheet=Current Sheet +ConditionB-is_less_than=Is less than +BorderLayout-West=West +AnalysisLine=Analysis Line +Layer_Report_Warnning_info=Warnning info for LayerReport +Tree-Width=Tree Width +alert_word= +PageSetup-Paper_Size=Paper Size +M-Page_Setup=Page Setup +DashBoard-FormBook=Form +X-Coordinate=X Coordinate +Style-Line_Spacing=Line Spacing +FR-Designer_Plugin_Should_Update_Title=Warning +Server-Define_Data_Connection=Define Data Connection +BarInside=Bar Inside +Border-Color=Border-Color +NotAllow= +Utils-File_type=File type +FR-Designer-Plugin_Install_From_Local=Install plugin from local file +Summary_Method=Summary Method +Select_Specified_Grouping=Select Specified Grouping +HF-Number_of_Page=Total Number of Page +FR-Designer-Tree_Height=Tree Height +Owner=Owner +Home=Home +FR-Server_Embedded_Server_Stop=Server in Design-Stop +FR-Designer-Plugin_Detecting_Update=Detecting update +HF-Whether_to_define_the_selected_type=Whether to define the selected type +StyleAlignment-Right=Right +FR-Designer_Alignment-Style=Alignment-Style +PageSetup-Title_Start_Column=Title Columns +Tree-Mutiple_Selection_Or_Not=Mutiple Selection +FR-Designer-Plugin_Search=Search +Choose_Role=Choose Role +Append_Delete_Row_Message=WarningThe specify cell should set the expand-attribute,otherwise it won't work. +Form-ComboBox=ComboBox +PageSetup-Footer=Footer +Sorting=Sorting +DBCP_TEST_WHILE_IDLE=TestWhileIdle +DS-Embedded_TableData=Embedded Table Data +FR-Designer_No-Privilege=No Privilege +FRFont-Subscript=Subscript +Background_Settings=Background Setting +FormulaD-Invalid_Formula=Invalid Formula +FR-Base_Margin= +FR-Designer-Plugin_Shop_Installed= +M_Edit-Send_to_Back=Send to Back +Email-Can_Preview_Report_Content=Preview the report contents +FR-Designer-FRFont_Italic= +CellWrite-Print_Background=Print Background +Wizard=Wizard +Preference-Is_Drag_Permited=Is Drag Permitted +FR-Designer_Release_Lock= +Form-Delimiter=Delimiter +wrong=wrong +FR-Menu-Server_Chart_PreStyle=Chart PreStyle +Form-Button=Button +FormulaD-Valid_Formula=Valid Formula +ParameterD-Parameter_Interface=Parameter Interface +At_least_one_visual_worksheet=Workbook to have at least one visual worksheet, if you want to delete, please insert a new worksheet +Need_Min_Value=Need Min Value +Allow_Blank=All Blank +CellWrite-InsertRow_DEFAULT=Default value +Widget-Load_By_Complete=Load By Complete +FR-Designer-Basic_Only_Submit_Current_Sheet= +Sort-Sort_Order=Order +File-File_Size_Limit=File Size Limit +PrintP-Print=Print (T) +FR-Designer-StyleAlignment_Center= +Preference-Setting_Colors=Setting Colors +Judge=Judge +Image-Adjust= +Collect-User_Information_DES= +FR-Designer_Plugin_Normal_Update_From_Local=Update from local file +BackgroundTexture-Canvas=Canvas +BarOutSide=Bar Out Side +Preview_ToolTips=Preview ToolTips +FRFont-Family=Family +FR-Lic_does_not_Support_Remote= +InterfaceStyle=InterfaceStyle +RWA-Key=Primary Key +WF-Name=Name +RWA-Click_Cell_To_Edit_Value=Click Cell to Edit Value +Utils-Row_Height=Row Height +ReportD-Excel_Export=ReportD Excel Export +Form-Please_Select_A_Kind_Of_Form_Container=Select Form Container +Column_Does_Not_Exsit=Column Does Not Exsit +M_Insert-Hyperlink=Hyperlink +can_not_include_underline=can not contain "_" +FR-Designer-Plugin_Jar_Expired= +FR-Background_Image_Extend=Extend Image +TopDownShade=Top Down Shade +FR-Base_Right= +DataBinding=Data Binding +ConnectionPool_Attr=Connection Pool Attributes +Connect_SQL_Cannot_Null=Connect SQL Cannot be Null +DBCP_MAX_ACTIVE=MaxActive +M_Window-Preference=Preference +ToolBar_Top=Top ToolBar +FR-Designer_Indent-Pixel=Pixel +FR-Designer_Unit_MM=MM +IDLE= +FRFont-Underline=Underline +FR-Designer-Plugin_Read_Plugin_List_Error=Error to read plugin list +Type_Set=Type Set +M_Format_A-Cell_Attributes=Other Attributes +CellWrite-Show_As_Image=Show As Image +ShowAsDownload= +Form-ComboCheckBox=ComboCheckBox +BackgroundTexture-WovenMat=Woven Mat +BindColumn-Custom_Data_Appearance=Customize Data Appearance +Actived=Actived +Env-Local_Directory=Local Directory +Form-Colon=Colon +Preference-Vertical_Scroll_Bar_Visible=Vertical Scroll Bar Visible +Utils-Show_Cell_Value=Show Cell Value +FR-Designer_ReportColumns-Repeat_Row= +SpecifiedG-Specified_Group=Specified Group +RWA-Smart_Add_Cells=Smart Add Cells +HF-Left_Section=Left Section +M_Report-Report_Background=Report Background +Image-Extend=Extend +FS_BI= +ToolBar_Bottom=Bottom ToolBar +Hgap=Hgap +FR-Designer_Enter-New-FileName= +Verify_Fail=Verify Fail +CellWrite-InsertRow_Policy=Policy of Insert Row +FR-Designer-Plugin_Illegal_Plugin_Zip=Illegal plugin zip +RCodeVersion=VER +Convert=Convert +Please_Drag=Please Drag +FR-Designer-Widget-Style_Preview= +mobile_number=Mobile Number +FR-Designer_Form-ComboCheckBox=ComboCheckBox +CacheValidateTime=Cache Validate Time +Hyperlink-Extends_Report_Parameters=Extends Report Parameters +FR-Designer_Values-Editor= +Export-Excel=Excel +Utils-Left_to_Right=Left to Right +ExpandD-Vertical_Extendable=Enable to Insert Cell to Display Field Data Vertically +Utils-Report_Runtime_Env=Report Workspace +Utils-Right_to_Left=Right to Left +Utils-Beyond_the_top_side_of_Border=Beyond the top side of border +Exception_StackTrace=Exception_StackTrace +Corresponding_Fields=Corresponding_Fields +Form-CheckBox=CheckBox +Utils-Current_Row=Current Row +BuildIn=Build-in +BindColumn-Results_Filter=Result Filter +FR-Designer-Plugin_Manager=Plugin Manager +M_File-Export-CSV=CSV +Data_Filter=Data Filter +ReportServerP-Edit_Printer=Edit Printer +FR-Designer_Datasource-Stored_Procedure=Stored Procedure +RESTART=RESTART +FormulaD-Function_name=Function Name +ChooseOneButton=chose one toolbutton +Priority=Priority +Datasource-Datasource=Data Source +FR-Designer_Width= +Cannot-Add_To_This_Area=Cannot Add To This Area +Run= +Set_Submit_Condition=Set Submit Condition +FR-Base_Value= +fileLocked_undeleted=Template is locked, you can not delete\! Click OK to refresh the list of templates +Web_Apply=Web Application +Refresh_Database=Refresh database +Set_Row_Title_End=Set_Column_Title_End +FR-Utils-New_Folder=New Folder +BiasD-From-upper_left_to_lower_right=Upper left to lower right +CapsLock= +StyleFormat-Sample=Sample +RWA-Smart_Add_Cell_Group=Smart Add Cell Group +MConfig-CancelButton=Cancel +Function-Choose_Function_Class=Choose Function Class +LatLng=Lat and Lng +DS-Server_TableData=Server Table Data +BackgroundTexture-GreenMarble=Green Marble +read_time_out=Load Timeout +JavaScript-Commit_to_Database=Commit to Database +DS-Relation_TableData=Relation Table Data +CellWrite-Page_Before_Row=Page Break Before Row +FR-Designer-Plugin_Load_Plugins_From_Server=Loading plugins from store +D-Dispaly_Divide_Result_Set_into_Groups=Divide result set into groups +Closed=Closed +RWA-Help=helpdetail +FR-Designer-Widget-Style_Custom= +FR-Designer-Widget-Style_Render_Style= +Highlight-Barcode=BarCode +FR-Designer_Connect_SQL_Cannot_Null=Connect SQL Cannot be Null +trigger= +M-Data_Analysis=Data Analysis +Function-The_selected_file_cannot_be_null=The select file cannot be empty +No-Privilege=No Privilege +ReportColumns-Repeat_Column=Repeat Column +SecondGraduationUnit=SecondGraduationUnit +Form-Widget_Property_Value=Widget Property Value +GIVE-NAME=Give_Name +FR-Designer_Rename= +Utils-Merge_Cell=Merge Cells +Style-Spacing_After=Spacing After +Enlarge_Or_Reduce=Enlarge Or Reduce +Tree-Height=Tree Height +RCodeErrorCorrect=ERC +Enter-New-FileName=Enter New File Name +try_resending=Please try resending +M-Open_Report=Open... +Please_Select=Please Select +InRow=InRow +Form-TextArea=TextArea +FR-Designer_Https_Enable= +Widget-Custom_Widget_Config=Custom Widget +already_exists=already exists +Original_Marked_Filed=Original Marked Filed +BackgroundTexture-Sand=Beach +Values=Values +Not_use_a_cell_attribute_table_editing=You may not use a cell attribute table editing +Root=Root +cycle=cycle +open-new-form-tip=open new form tip +Support-Current_Auto_Complete_Shortcut=Current Shortcut +GROUPING_MODE=Grouping +DBCP_MAX_IDLE=MaxIdle +BackgroundTexture-BlueTissuePaper=Blue Tissue Paper +ReportD-Export_Hided_Row=ReportD Export Hided Row +FR-Custom_styles_lost= +Env-Des2=Position should be a Servlet like "http\://localhost\:8080/WebReport/ReportServer" +Env-Des1=Please select the WEB-INF directory of Report Server +PageSetup-Placement_Center_on_Page=Page Center +sure_to_delete=sure to delete +Already_exists_not_add_repeat=Already exists, do not add repeat +Axis_Title=Axis title +FR-Designer-Plugin_Install_Failed=Install failed +FR-Designer-Widget-Style_Frame= +MainGraduationUnit=MainGraduationUnit +Second_Axis=Second Axis +Classifier-Ge= +MSBold=MSBold +Form-Design_Size=Form Design Size +FR-App-Template_Save= +ExpandD-Horizontal_Extendable=Display Field Data Horizontal +RP_Authority_Edit=Authority +Warnning=Warning +RoleName_Can_Not_Be_Null=RoleName_Can_Not_Be_Null +Application=Applications +Formula_Dictionary_Display_Examples_Html=the real value is \ +ECP-error_pwd= +FR-Hyperlink_ChartHyperlink= +M_Edit-FormatBrush=Format Painter +Indent-Pixel=Pixel +FR-Designer-Widget-Style_Border_Line= +Widget-Default_Widget_Config=Default Widget +Version-does-not-support= +StyleAlignment-Right_To_Left=Right To Left +Style-Spacing_Before=Spacing Before +Has_Existed=Has Existed +FR-Designer_DisplayNothingBeforeQuery=Display Nothing Before Query +Still=Still +JS_WARNING2=information +JS_WARNING1=information +Connectionline=Connectionline +Utils-Insert_Record=Insert Record +Set-Parameter-Name= +More-information=More information +Parameter-Boolean=Boolean +FRFont-Strikethrough=Strikethrough +Server-version-tip=You are currently connected to the server version is less than the designer version number you are using to continue to connect you to edit some of the properties may not be able to effectively save. If the need to connect, please send your designer version and the server version is consistent +Form-All_Files=All Files +DBCP_NUM_TEST_PER_EVCTION_RUN=NumTestsPerEvictionRun +FR-Designer-FRFont_Family= +Device= +M_Insert-Cell=Cell Element +Present-Formula_Present=Formula Present +FRFont-Superscript=Superscript +CellWrite-Page_Before_Column=Page Break Before Column +Golden=Golden +Preference-Support_Cell_Editor_Definition=Support Cell Editor Definition +M-Page_Preview=Page Preview +HJS-CC_to=Copied to +Tree-Select_Leaf_Only=Select Leaf Only +Pointer-A-Tick-Order=pointer and tick value +Pink=Pink +StyleAlignment-Distibuted=Distributed +Odd=Odd +already-saved=already saved +FR-Hyperlink_Chart_Cell= +Style-Left_Indent=Left Indent +Offline=Offline +Form-Hierarchy_Tree_Next=Next +Needle=Needle +GoogleMap=Google Map +Running=Running +M_Edit-Unmerge_Cell=Unmerge Cell +Out_Border_Line=Out Border Line +Style-Spacing=Spacing +FR-Utils_Submit= +ReportServerP-Previous=Previous +StyleAlignment-Text_Style=Text Style +RelatedChart=RelatedChart +ProcessManager=ProcessManager +Cancel_Repeat_Attributes=Cancel_Repeat_Attributes +FR-App-File_Message= +Datasource-Stored_Procedure=Stored Procedure +RWA-Row_Offset=Row Offset +M_Format-Style=Style +detail_description=Detailed description +FR-Designer-Widget-Style_Title_Content= +ParameterD-Report_Parameter=Report Parameter +HF-Edit_Header=Edit Page Header +Sytle-FRFont=Font +FR-Designer_Finish_Export=Finish_Export +MultiFileUpload=MultiFile Upload +HF-Page_Number=Page Number +Style-Right_Indent=Right Indent +Desktop=Desktop +FR-Server-All_Error= +ConditionB-Operator=Operator +Today=Today +Form-Widget_Name=Widget Name +Covered_All=Covered All +Day=Day +External=External +Black_Font=Black Font +LOG-Report_Server_IS_Started=Report Server is Started +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 +FR-Designer_ChooseOneButton=chose one toolbutton +Widget-Sizing=Sizing +NO_Border_Line=NO Border Line +Cell_Data=cell data +StyleAlignment-Vertical_Text=Vertical Text +Label=Label +Orange=Orange +zeroMarginWarn=The printer exist the physical margins
report page margin settings the small can
can print content insufficiency.
  +Widget-Date_Selector_Return_Type=Return Type +Utils-Switch_To_Template_Reportlet=Switch To Template Reportlet +satisfy= +FR-Designer_WidgetDisplyPosition=Widget DisplyPosition +FR-Base_Top= +FR-Designer_Form-CheckBox=CheckBox +Reportlet-Parameter_Type=Parameter Type +sending=sending... +FR-Designer-FRFont_Foreground= +FR-Import-Export_SVG= +M_Edit-Clear_Contents=Contents +Session=Session +Widget-Load_Type=Load Type +template_unsaved=template can not be saved +check_communication=please check the network communication is normal and that the server is running +List-Need_Head=Need Head +FR-Designer-Plugin_Has_Been_Installed=Plugin has been installed +FR-Widget_Tree_And_Table= +FR-Base_Help= +FR-Designer-Plugin_Update_Successful=Update successfully +August=August +LOG-Is_Being_Openned=Is Being Openned +BackgroundTexture-Oak=Oak +Multi_nam_formula= +TurnOn=TurnOn +HJS-Send_Successfully=Send Successfully +Mon=Mon +Inner_Parameter=Inner Parameter +Required=Required +Summary=Summary +template_unopened=unable to open template +FR-Base_Bottom= +DataFunction-Min=Minimum +StyleFormat-Percent=Percent +FR-App-All_Custom= +M_Insert-Data_Column=Insert Data Column +PLEASE=PLEASE +Numbers=Numbers +Release_Lock=Release Lock +Background-Background_is_NULL=No Background +FR-Designer_Sytle-FRFont=Font +Gradation=Gradation +The_current_list_is_empty=The current list is empty +Formula_Dictionary_Display_Examples=the real value is \ +Schedule-Template_Parameter=Template Parameter +JSShow=Show In Action +Level_coordinates=Level coordinates +MainGraduationLine=Main Graduation Line +Hyperlink-Web_link=Web link +StyleAlignment-between_-90_and_90=between -90 and 90 +FormulaD-Custom_Function=Custom Function +FR-Designer_Integer=Integer +PageSetup-Finis_Start_Row=Finis Rows +RWA-Remove_Field=Remove Field +Form-Desin_Width=Form Design Width +No-tableData=No tableData +Page_Total=Page_Total +FR-Designer-Plugin_Connect_Server_Error=Error to connect plugin store +Import-Excel_Source=Excel Source +Utils-Left_to_Right_a=Left to Right +ExpandD-Expand_Attribute=Attribute to Insert Cell to Display Field Data +Report-Write_Attributes=Write Attribute +Utils-Current_Column=Current Column +Need_Max_Value=Need Max Value +Report_Not_Exist=Report_Not_Exist +HF-Insert_Content=Insert Content +UpParent=Up Parent +PageSetup-Page=Page +Utils-Move_Up=Move Up +BackgroundTexture-PurpleMesh=Purple Mesh +Export-Word=Word +ServerM-Widget_Manager=Widget Manager +FR-Designer-Basic_Activation_Key=Activation Key\: +FR-App-Template_Report_Not_Exist= +Protected=Protected +Skip=skip +FR-Designer_PageSetup-Vertically=Vertically +revert= +PageSetup-Predefined= +Border-Style-Radius=RoundBorder +IntPart= +ExpandD-Data_Column=Data Column +Sort-Ascending=Ascending +FR-Designer-Widget_Style= +parameter_name_exist=The parameter name already exists +FR-Designer_Layer-Build=Layer-Build +Please_Rename=Please_Rename +Form-Editing_Listeners=Editing Listener +RWA-Smart_Add_Fields=Smart Add Fields +FR-Designer-Tree_Width=Tree Width +Record=Record +Poly-Report_Component=Poly Report Component +Options=Options +NS-war-remote= +Sche-Minute=Minute +Three_Rows_Of_Three_Grid=Three rows of three grid +WorkSheet=Worksheet +FR-Designer-Widget_Size= +BindColumn-Select=Select +FR-Widget_Mobile_Terminal= +FR-Background_Image_Titled=Titled Image +SetPrinterOffset=SetPrinterOffset +FR-Designer-Plugin_Installed=Installed +FR-Designer-Hyperlink_Name= +FR-Designer_Form-Button=Button +Black=Black +FR-Designer-Widget-Style_Border_Color= +Set_Submit_Event=Set Submit Event +PDF-Print_isPopup=Is Popup +LayerPageReport_CountPerPage=Data count per page +Display_Modes=Display Modes +RowSpan=RowSpan +Datasource-Test_Connection=Test Connection +Function-Function_Manager=Function Manager +Host_Name=Host Name +CellWrite-Show_As_HTML=Show As HTML +FR-Designer-Widget-Style_Shadow= +FR-Designer_Parameter_String=String +Form-SupportTag=SupportTag +ReportD-Report_Write_Attributes=Report Write Attributes +DataFunction-Count=Count +Top_And_Thick_Bottom_Border_Line=Top And Thick Bottom Border Line +Client=Client +BindColumn-Result_Serial_Number_Start_From_1=Serial Number Starts From One +History=History +Already_exists= +Datasource-Original_Charset=Original Char Set +FR-Base_Left= +ReportServerP-Next=Next +BindColumn-Top_N=Top N +Animation_Special=Specially good effect +Widget-Chart_Widget_Config=Chart Widget +FR-Designer-Plugin_Cannot_Update_Not_Install=FR-Designer-Plugin_Cannot_Update_Not_Install +After_Changed_Some_Attributes_Are_Different=After_Changed_Some_Attributes_Are_Different +PieStyle=Pie Style +HF-Are_you_sure_to_delete_it=Are you sure to delete it +Utils-Design-File_Open= +FR-Utils_Label= +Data-Label=Data Label +M_Insert-Text=Insert Text +Form-View_Tree=Tree View +M_Insert-Chart=Insert Chart +HF-Even_Page=Even Page +ReportServerP-Report_server_parameter=Report Server Parameter +JavaScript-Form_Submit=Form Submit +Horizontal-Split_Layout=Horizontal Split Layout +BorderLayout-Center=Center +INFO-Reset_Webapp=Reset Webapp +FR-Designer_Text=Text +IN_and_INOUT_type_not_as_cursor=IN and INOUT type not as cursor +Main_Axis=Main Axis +M_Edit-Cut=Cut +Utils-The_Name_has_been_existed=The Name has been existed +FR-Background_Image=Image +Character=character +Unit_Thousand=Thousand +Test=Test +Utils-Would_you_like_to_save= +HF-Header_and_Footer=Header and Footer +LIST_MODE=List Mode +HF-Insert_Image=Insert Image +FR-Designer-Widget-Style_Standard= +FR-Designer_Form-List=List +BackgroundTexture-Denim=Denim +Execute_Report_by_Layer_Engine=Execute Report by Layer Engine +M_Edit-Bring_Forward=Bring to Forward +Choose_All=Choose All +Form-RadioGroup=Radio Group +FR-Base_Remove= +FR-Remote_Connect2Server_Again= +Semicolon=semicolon +StyleFormat-Category=Category +Report_Template=Report Template +Utils-Beyond_the_right_side_of_Border=Beyond The Right Side Of The Border +BackgroundTexture-Papyrus=Papyrus +LayerPageReport_PageEngine=Execute for page +Schedule-The_selected_file_must_be_end_with_filter=The selected file must end with '.cpt' or '.class' or '.frm' +Provide=Provide +FormulaD-Math_&_Trig=Math and Trig Function +FR-Designer-StyleAlignment_Right= +Error_TableDataNameRepeat=\ already exsits in ServerTableData or the name is repeated. +Choose_None=Choose None +File-tree=File tree +FRFont-bold=bold +FR-Designer_Set_Submit_Condition= +Form-Change_Widget_Name=Change Widget Name +ReportColumns-Report_Columns=Report Columns +Can_not_use_FormatBursh= +CellElement-Property_Table=CellElement Property Table +Dictionary-Dynamic_SQL=Dynamic SQL +FR-Designer_Form-CheckBoxGroup=CheckBoxGroup +DBCP_TIME_BETWEEN_EVICTIONRUNSMILLIS=TimeBetweenEvictionRunsMillis +ReportD-Export_Hided_Column=Export hided column +Preference-Support_Undo=Support Undo +FR-mobile_report_analysis= +Month=Month +Utils-Column_Width=Column Width +Collect-Use_Designer=Use Designer +Widget-User_Defined_Editor=User Defined Editor +Unit_Ten_Thousand=Unit_Ten_Thousand +Data_Setting=Data Setting +ECP_input_pwd= +period= +Note=Note +Multiline=Multiline +Datasource-Convert_Charset=Convert Char Set +DashBoard-ConnectionList=ConnectionList +Utils-Submit_Forcibly=Submit Forcibly +Parent_Marked_Field=Parent Marked Field +Logout=Logout +FR-Designer_Show_Blank_Row= +FR-Base_Format= +FR-App-Export_png= +Delete_Column=Delete Column +SecondGraduationLine=Second Graduation Line +SpecifiedG-Groups=Groups +CONTINUUM_MODE=Continuum Grouing +Datasource-Connection_failed=Connection Failed +CategoryName=CategoryName +DBCP_INITIAL_SIZE=InitialSize +Colors=Colors +FR-Import-Export_CSV= +FR-Designer-StyleAlignment_Left= +BackgroundTexture-PaperBag=Paper Bag +RWA-BuildIn_SQL=BuildIn SQL +SingleLayer=SingleLayer +Or-you=or you +FR-Designer_Certificate_Path= +Utils-Last_Page=Last Page +BarCodeD-Drawing_Text=Drawing Barcode Text +Warning-Template_Do_Not_Exsit=Template Do Not Exsit +BindColumn-Group=Group +Export-SVG=SVG +Plane3D=Plane 3D +SessionID= +FR-Designer_Height= +HF-Odd_Page=Odd Page +About-All_Rights_Reserved=All Rights Reserved +Utils-Current_Cell=Current Cell +Web_Preview_Message=Please save the template in the current Runtime Environment folder +FR-Hyperlink_Chart_Float= +Dic-Data_Query=Data Query +CellWrite-Print_Content=Print Content of Cell +Privilege-Selected_None_Of_Any_Items=Selected None Of Any Items +FRFont-Size=Size +Function-J2EE_server=J2EE server +FR-Designer_Allow_Blank=All Blank +Build_Tree_Accord_Parent_Marked_Filed=Build Tree according parent's marked filed +Preference-Horizontal_Scroll_Bar_Visible=Horizontal Scroll Bar Visible +Scope=Scope +Save_All_Records_In_Memory=Save All Records in Memory +FreezeWarning1=FreezeWarning +FlowLayout=FlowLayout +M_Report-Report_Footer=Report Footer +FR-Action_Add= +BorderLayout-East=East +feedback_tip=Please enter a description of the problem of not more than 400 words +FS_Start_Date=Start Date +FR-ConditionB_Operator= +Printer-Alias=Alias +DS-Class_Name=Class Name +FR-Designer-Plugin_Has_Been_Disabled=Plugin has been disabled +Sort-Original=Original +Utils-Top_to_Bottom_a=Top to Bottom +Parameter-String=String +InnerRadis=InnerRadis +Want_To_Cover_It=Want To Cover It +Divided_stage=Divided stage +Seriously=Seriously +ReportServerP-PDF=PDF +Utils-Switch_To_Class_Reportlet=Switch To Class Reportlet +FR-Designer_Show_Blank_Column= +M_Edit-Redo=Redo +Visibility=Visibility +Series_Use_Default=Series_Use_Default +Has_Selected=Has Selected +BackgroundTexture-Walnut=Walnut +FormulaD-Function_category=Function Category +Interface=Interface +FR-Designer-Beyond_Bounds= +seconds=seconds +Auto-Build=Auto-Build +FR-Designer-Plugin_Install_Successful=Install successful +Template_Path=Template_Path +FR-Designer-FRFont_Bold= +Poly_Name=Poly Name +WorkBook=WorkBook +Hyperlink-Self_Window=Self Window +FR-Designer-Widget-Style_Title= +FR-Designer-FRFont_Size= +M_File-Export-SVG=SVG +Capacity=Capacity +Rose_Red=Rose Red +StyleAlignment-The_value_of_rotation_must_between_-90_and_90_degrees=The value of rotation must between -90 and 90 degrees +HF-Move_Left=To the left +Cell_Group=Cell Group +Week=Week +PageSetup-Orientation=Orientation +M-Open_Recent=Open Recent +NNormal=Noraml +Integer=Integer +Select_The_Source_To_Save=Select Source to Save +Transition=Transition +FR-Designer_Get_Lock= +one_record_exists_in_many_groups=One record exists in many groups +FR-Designer_Cover_None= +DeciPart= +ExpandD-Up_Father_Cell=Upper Parent Cell +Deep=Deep +FRFont-Shadow=Shadow +Reportlet=Reportlet +Calendar=Calendar +DateFormat-Custom_Warning=Note\: Custom date format does not support the format checking +Unit_MM=MM +Server-Start=Start +CellPage-Can_Break_On_Paginate=Can Break On Paginate +Build_Tree_Accord_Marked_Filed_Length=Build Tree according marked filed's length +ComboCheckBox-Start_Symbol=Start Symbol +Real=Real +RWA-Batch_Modify_Cells=Batch Modify Cells +FR-Designer_Build-Way=Build-Way +Read=Read +StyleAlignment-Degrees=Degrees +M_Format_A-Border=Border +Utils-Delete_Record=Delete Record +Reload=Reload +Image-Select_Picture=Select Picture +RWA-Submit=Submit +the_template=this template +FR-Designer_Component_Scale=Component Scale +FRFont-italic=italic +Year=Year +HF-Move_Right=To the right +Data-Check= +Unknown=Unknown +Submit_Style=Submit Style +Left_Border_Line=Left Border Line +Brown=Brown +Select_A_Tree_DataSource_To_Build=Select a tree data source to build +Overlapping=Overlapping +DS-Class_TableData=Class Table Data +FR-Designer-Plugin_Illegal_Plugin_Zip_Cannot_Be_Install=Illegal plugin,cannot be installed +DisplayNothingBeforeQuery=Display Nothing Before Query +Y_Axis=Y Axis +FormulaD-Most_Recently_Used=Most Recently Used +FormulaD-Input_formula_in_the_text_area_below=Input formula in the text area below +Build-Way=Build-Way +M_Edit-Undo=Undo +Line-Style=Line-Style +Datasource-Other_Attributes=Other Attributes +M_Server-Global_Parameters=Global Parameters +Suffix=Suffix +Image-Image_Files=Image Files +EditRC-Entire_row=Entire row(R) +HF-First_Page=First Page +BackgroundTexture-Granite=Granite +DataList=DataList +Recursion=Recursion +BarStyle=Bar Style +FR-Designer-Min_Width=Min-Width +Utils-Report-Env_Directory=Report Workspace +D-ChartArea=Chart Area +Only= +FR-Base_No= +SpecifiedG-Put_all_others_together=Put all others together +HF-NewLine_Des=Click on the move or delete button to operate newline +WLayout-Border-ThreeContainer=With north, west, and in the three border layout containerIncluding the northern block may need to adjust the height of the western block may need to adjust the width. +Parameter_Name=Parameter Name +FR-Base_Table= +Des-Remove_WorkSheet=The report to be deleted may contain data. If you want to delete report, please click on Yes button. +Rotation=Rotation +Undefined=Undefined +Support-Auto_Complete_Shortcut=Auto Complete Shortcut +Set_Column_Title_End=Set_Row_Title_End +Submit_Url=Submit Url +ReportServerP-Are_you_sure_to_delete_the_selected_printer=Are you sure to delete the selected printer +long_data_can_not_show_fully=Long data can not be fully demonstrated +Utils-Beyond_the_bottom_side_of_Border=Beyond The Bottom Side Of The Border +FR-Import-Export_PDF= +Form-CheckBoxGroup=CheckBoxGroup +Click-Me=Click-Me +Hyperlink-Self=Self Frame(S) +Tree-Select_Leaf_Only_Tips=Tree-Select_Leaf_Only_Tips +StyleAlignment-Text_Rotation=Text Rotation +Format-Error=Format Error +Server-Stop=Stop +Preference-Setting_Grid=Setting Grid +ReportServerP-Add_Printer=Add printer +FR-Designer-Plugin_Active=Active +Utils-File_name=File name +NOT_NULL_Des=Can not be null +Right_Border_Line=Right Border Line +EditRC-Entire_column=Entire column(C) +PageSetup-Top_to_bottom=Top to bottom +Click-Get_Default_URL=Click To Get Default URL +StyleAlignment-Wrap_Text=Wrap Text +Remove_All_Button=Remove_All_Button +FR-Designer_Component_Interval=Components Interval +ReportColumns-Columns_vertically=Columns vertically +ReportGUI-Print_Background=Print Background +Export-CSV=CSV +M_Edit-Paste=Paste +FR-Designer-Basic_Restart_Designer=Restart designer +ReportServerP-PDF2-INFO=The PDF Button Info +FormulaD-Check_Valid=Check Valid +server_disconnected=server disconnected +ParameterD-Parameter_name_cannot_be_null=Parameter name cannot be empty +FR-Designer-Plugin_Version_Is_Lower_Than_Current=The version of plugin is lower than current +RWA-NotChange_Unmodified=NotChangeUnmodified +User_Information=User_Information +Custom_styles_lost= +PageSetup-Margin=Margin +M-New_FormBook=FormBook +Widget-TreeNode=TreeNode +Form-Url=URL +Utils-Beyond_the_left_side_of_Border=Beyond the left side of border +Float_Element_Name=Float Element Name +Purple=Purple +DashBoard-Potence=Permissions +M-Close_Template=Close Template(C) +paper= +Not_Exsit=not exist in WorkSheet. +Utils-Insert_Row=Insert Row +Utils-Delete_Row=Delete Row +not_support_authority_edit=this element does not support authority edit +Formula_Tips=The formula must be from the beginning of the "\ +FR-Action_Copy= +Compile_Success=Compile Success +BackgroundTexture-RecycledPaper=Recycled Paper +StyleAlignment-Single_Line=Single Line +Utils-Move_Down=Move Down +Please_Set_Repeat_First=please set repeat Columns and Rows first +Writer-ShortCuts_Setting= +Verify-Data_Verify=Verify Data +FR-mobile_analysis_style= +Confirm-Delete-File= +PageSetup-Header=Header +JavaScrit-Asynch=Asyn +ReportServerP-Toolbar=Toolbar +Utils-Top_to_Bottom=Top to Bottom +Platform=Platform +FR-Designer-FRFont_Underline= +Show_in_Containing_Folder=Show in Containing Folder +BackgroundTexture-WaterDroplets=Water Drip +FR-Designer-Dependence_Install_Failed=install failed +Layout-Padding=Padding +roles_already_authority_edited=Configured role +WidgetDisplyPosition=Widget DisplyPosition +SpecifiedG-Force_Group=Force Group +FormulaD-Formula_Definition=Formula Definition +I-xyScatterStyle_Marker= +Hour= +ColorMatch=ColorMatch +M_Edit-Order=Order +BackgroundTexture-Bouquet=Bouquet +Verify-Error_Information=Error Information +LayerData=LayerData +Rename=Rename +Widget-Load_By_Async=Load By Async +Shape=Shape +BindColumn-This_Condition_has_been_existed=The Condition Already Exists +NS-exception_readError= +Set_Column_Title_Start=Set_Row_Title_Start +Fri=Fri +M_Report-Report_Parameter=Report Parameter +REPORTLETS= +WLayout-Card-ToolTip=Card layout, you can add a number of other components in the layout container. +M-Popup_ChartType=Chart Type +Please-Wait=Please Wait +FR-Designer-Form-ToolBar_Widget= +Widget-Array=Array +FieldBinding=Field Binding +Top_Bottom_Border_Line=Top bottom border line +M-Others=Others... +Hyperlink-Link_Opened_in=Link Opened in +FR-Utils_WorkBook= +M_Insert-Float=Float Element +Out_Thick_Border_Line=Out Thick Border Line +FR-App-File_Lookup_range= +ReportColumns-Columns_to=Columns to +Transparent=Transparent +Parameter-Integer=Integer +PDF-Print_Setting=PDF Print Setting +Server-Embedded_Server=Embedded Server +M_Server-Server_Config_Manager=Server Configuration Manager +FR-Utils-Would_you_like_to_cover_the_current_file=Would you like to cover the current file +CellWrite-InsertRow_COPY=The Original Value +Edit_String_To_Formula=Edit String To Formula +Edit-Column_Count=Column Count +Father=Father +ReportColumns-Columns_after=Columns after +FR-Designer_Undo= +DBCP_MIN_IDLE=MinIdle +M-Data_Analysis_Settings=Data Analysis Settings +M-Form_Preview=Form Preview +Form-Basic_Properties=Basic Properties +quote= +Thu=Thu +Collect-Collect_User_Information=Collect User information +Layer-Build=Layer-Build +FR-Designer-FRFont_Line_Style= +BackgroundTexture-BrownMarble=Brown Marble +PageSetup-Page_Setup=Page Setup +Form-Semicolon=Semicolon +ECP_re_input= +ExpandD-Sort_After_Expand=Sort After Expand +FR-Designer-Dependence_Install_Succeed=install succeed +Env-Configure_Workspace=Configure Workspace +feedback_info=We welcome your comments and suggestions, please fill out the information too much detail, we will contact you as soon as possible +Ratio=Ratio +DBCP_TEST_ON_BORROW=TestOnBorrow +FR-Designer_layerIndex= +WEB-Write_Setting=Write Setting +M-New_WorkBook=New WorkBook +FR-Designer-Plugin_Has_Been_Actived=Plugin is now active +Datasource-Maximum_Number_of_Preview_Rows=Maximum Number of Preview Rows +ExpandD-Cell_Expand_Attributes=Attribute to Insert Cell to Display Data +Select_the_repeated_row_and_column=Select the repeated rows and columns +FormulaD-Date_&_Time=Date and Time Function +Max-Mem-Row-Count=Use disk cache when records more than +BorderLayout-South=South +Export-Text=Text +JavaScript-Synch=Synch +FR-App-All_Warning= +M_Edit-Send_Backward=Send to Backward +Form-Layout=Layout +FR-Designer-Plugin_Shop_Need_Update= +FR-Designer_WorkBook=WorkBook +UpBarBorderStyleAndColor=UpBarBorderStyleAndColor +GridLayout=GridLayout +Utils-Default_Value=Default Value +Widget-Comb_Widget_Config=Comb Widget +Import-Excel2007_Source=Excel2007 Source +Y-Coordinate=Y Coordinate +FR-Base_SimSun_Not_Found= +FR-Designer_Seriously= +Upload=Upload +Form-Widget_Property_Table=Widget Property Table +Des-Merger_Cell=The Selected Area Contains multiple values, if you merge them, only the data at the upper left corner will be reserved. +FR-Designer-Basic_Copy_Build_NO=Double click to copy build NO. +FR-Base_TurnOn= +FR-Base_Rows= +Form-Remove_Repeat=Remove Repeat +Yes=Yes +Datasource-JNDI_Name=JNDI Name +Utils-Delete_Column=Delete Column +HF-Delete_it=Delete it +JavaScript-Dynamic_Parameters=Dynamic Parameters +px=px +FR-App-Report_Template= +Verify-Message=Message +Plan=Plan +Vertical-Split_Layout=Vertical Split Layout +ParameterD-Delay_Playing=Delay Playing +TurnOff=TurnOff +FR-Please_Rename= +Select_Data_Set=Select Data Set +Name_has_Colon= +ReportColumns-Columns_horizontally=Columns horizontally +FR-Base_Yes= +ReportColumns-Repeat_Row=Repeat Row +Print_Setting=Print Setting +Registration-User_Name=User Name +Datasource-User_Defined=User Defined +FR-Designer-Plugin_DownLoadMessage=Plugin need dependence support,need to install ({R1} m)? +Delay=Delay +FR-Designer-All_MSBold= +Utils-Now_create_connection=Connecting to database +FR-Template-Path_chooseRightPath= +FR-Remote_Re_Connect_to_Server= +Nation=Nation +DBCP_MAX_WAIT=MaxWait +FR-App-Template_Form= +Address= +Sub_Report=Sub Report +FR-Import-Export_Word= +FR-Server_Version_Tip= +StyleAlignment-Left_To_Right=Left To Right +Verify-ToolTips=Not meet formula,Error message prompt +BackgroundTexture-Stationery=Letter Paper +FR-Designer_RWA-Help= +M_Insert-Barcode=Barcode +Bounds=Bounds +FR-Designer-Undo_All_Authority_Operations= +Datasource-Context=Context +CellWrite-Page_After_Column=Page Break After Column +FR-Designer_Cancel= +Button-Group-Display-Columns=Display Column Count +Widget-Height=Height +Examples=Examples +Formula_Dictionary_Display_Example=the real value is \ +StyleAlignment-Horizontal=Horizontal +HyperLink_Must_Alone_Reset=HyperLink_Must_Alone_Reset +ExpandD-Expand_Direction=Display Data Direction +Include=Include +Export-Excel-Page=Page +FR-Designer-Min_Height=Min-Height +Filed=filed +ReportServerP-Import_Css=Import Css +M_Insert-Formula=Insert Formula +FR-Designer_Auto-Build= +FRFont-Foreground=Foreground +Bubble-Width=Bubble Width +Form-Hierarchy_Tree=Hierarchy Tree +WLayout-Border-LayoutContainer=With central and northern two border layout container.Including the northern block may need to adjust the height +Preference-JDK_Home=JDK Home +Utils-Insert_Column=Insert Column +FR-Designer_ToolBar_Top= +BindColumn-The_Conditions_of_FatherCell=The Conditions of Parent Cell +Links=Links +M_Report-Report_Header=Report Header +Sub_Report_Description=The sub-report should exist in the runtime environment of its parent, and the two can not be the same +T_Insert-Float=Insert Float Element +BackgroundTexture-FishFossil=Fish Fossil +My_Computer=My Computer +FORMLET= +HF-Undefined=Undefined +Widget-User_Defined_Widget_Config=User Defined Widget +Report-Write_Attributes_Group_Warning=Group is set to the cell number of cells in each field must be the same +Form-Single_quote=Single Quote +Compile_Success_And_Then_Save=Compile Success And Then Save +FR-Designer_Layout-Padding=Padding +Layout_Container=Layout Container +Admin=Admin +Form-EC_toolbar= +FR-App-All_Auto= +Utils-Available_Columns=Available Columns +Form-Change_Widget_Name_Discription=Change Widget Name Discription +FR-Module_Designer= +FR-Import-Export_Text= +Values-Editor=Values ??Editor +FR-Designer_Yes= +ExpandD-Expandable=Ability to Insert Cell to Display Data +Tree-Return_Full_Path=Tree-Return_Full_Path +FRFont-bolditalic=bolditalic +FR-Base_StyleFormat_Sample=Sample +Area_Value=Area Value +FR-Designer-Plugin_Disable=Disable +Utils-Are_you_sure_to_remove_the_selected_item=Are you sure to remove the selected item +Face_Write=Write +Poly-Report_Block=Poly Report Block +Vgap=Vgap +FR-Designer_HyperLink_Must_Alone_Reset=HyperLink_Must_Alone_Reset +DS-Class=Class +FR-Hyperlink_Please_Select_Reportlet= +FS_Report_Type=Report Type +HF-New_Line=New Line +Privilege=Privilege +Export-Offline-Html=Export Offline HTML +FR-Designer_open-new-form-tip=open new form tip +FR-Designer-Widget-Style_Frame_Style= +Present-No_Present=No Present +FR-Designer_Form-Password=Password +X_Axis=X Axis +FR-mobile_html_analysis= +M_Edit-Bring_to_Front=Bring to Front +Null_Value_Show=Null_Value_Show +Datasource-JNDI_DES=Note\: .jar files containing INITIAL_CONTEXT_FACTORY class need to be copied into the Directory of $installed/lib. +PrintP-Print_Preview=Print Preview +Form-Hierarchy_Tree_Last=Last +Has_been_gone= +RWA-Add_Field=Add Field +newNode=add Node +PageSetup-Shrink_to_fit_content=Shrink to fit content +FR-Designer_Date=Date +Column_Multiple=Column Multiple +FR-App-All_File= +Sort-Descending=Descending +FR-Designer-Plugin_Delete=Delete +Above=Above +Utils-The-Chart= +FRFont-plain=plain +Calculating=Calculating +Form-Object=Form Object +May=May +FR-Designer_Plugin_Normal_Update=Update +FR-Hyperlink_Reportlet= +M_Edit-Copy=Copy +Sub_Report_Message2=The parent-report is not in the current runtime environment +Sub_Report_Message3=Can not choose itself +Sub_Report_Message1=Please choose the currect path +Form-Allow_CustomData=Allow Custom Data +FR-Server_Version_Tip_MoreInfo= +FR-Designer_Server-version-tip-moreInfo=Your own team of our FineReport Designer version number of the product as well as the deployment server version number is consistent, in order to avoid the problems caused by inconsistent versions of risk.If you open a template produced higher Designer version, may open the error may be missing the original template properties. If you create the template used Designer Version higher than your final deployment with the server version, the server may not be able to properly load the template you create. +Get_Lock=Get Lock +HF-Edit_Footer=Edit page Footer +Datasource-New_Charset=New Char Set +Preference-Custom=Custom +BackgroundTexture-Newsprint=Newsprint +ConditionB-Add_bracket=Add bracket +Datasource-Connection_successfully=Connection successfully +Function-The_class_must_implement_the_interface=The class must be interface +FR-Designer_ChartF-Transparency=Transparency +Crimson=Crimson +FR-Hyperlink_Dialog= +FR-Designer_Covered_All= +Hyperlink-New_Window=New Window +Style_Name=Style Name +CSS_warning=CSS_warning +FR-Base_Column= +Three_Rows_Of_Two_Grid=Three rows of two grid +DBCP_VALIDATION_QUERY=ValidationQuery +M_Edit-Clear_Formats=Formats +Parameter_Setting=Parameter Setting +Related=Related +BorderLayout-Constraints=Constraints +Write_Preview=Write Preview +PageSetup-Page_Order=Page Order on print +Verify-Verify_Formula=Verify Formula +State=State +FR-Designer-Widget-Style_Body_Background= +FR-App-Privilege_No= +Please_Drag_ParaPane= +Come_True=Come_True +ISEMPTY=IS_EMPTY +Background-Texture=Texture +FR-Designer_Verify-Message=Message +Locked= +Utils-Design-Action_Cancel= +Image-Titled=Titled +Gradient-Direction=Gradient Direction +Green=Green +Report_Engine=Report Engine +Return-String=Return String +Margin=Margin +Pitch_Percentage=Pitch percentage +FR-Base_TurnOff= +Utils-has_been_existed=has been existed +HF-Insert_Formula=Insert Formula +Utils-Exit_Designer=Exit Designer +Formula_Dictionary_Display=For every value($$$) in the actual values above, it's display value is +PageSetup-Left_to_right=Left to right +Utils-Import_Excel_Data=Import Excel Data +M-Save=Save +redo=redo +Status=Status +Draw= +FR-Designer_Message= +Records=Records +FR-Designer_ComboBox=ComboBox +Driver=Driver +Template_Parameters=Template_Parameters +Form-Remove_Repeat_Data=Remove Repeated Data +ECP_decode= +Area_Name=Area Name +Others=Others +Merge=Merge +BackgroundTexture-Parchment=Parchment +BindColumn-Bottom_N=Last N +Frame= +Bottom_Border_Line=Bottom Border Line +Muiti_In= +FR-Designer-Dependence_Install_Online=install online +Use_Default_ToolBar=Use_Default_ToolBar +M_Server-Platform_Manager=Platform_Manager +PageSetup-inches=inches +Form-Widget_Property=Widget Property +FR-Layout_Padding= +Schema=Schema +Server_Path=Servlet Path +Condition_Display=Condition Display +FR-Server-Design_template_unopened= +Function-Function_Class_Name=Function Class Name +Schedule-Template=Template +Tree_Data_Field=Tree Data Field +Border-Style-Normal=Rectangular +Top_And_Double_Bottom_Border_Line=Top And Double Bottom Border Line +FR-Server_Embedded_Server_Start=Server in Design-Start +FR-Designer-Basic_Restart_Designer_Later=Restart later +StyleAlignment-Top=Top +ReportServerP-First=First +Not_Exist=Not Exist +FR-Remote_File_is_Locked= +Apply=Apply +Sytle-Indentation=Indentation +Parameter-Float=Float +HF-Center_Section=Center Section +Form-Double_quotes=Double Quotes +M_File-Export-Word=Word +M_File-Export-Text=Text File +PageSetup-First_Page_Number=The Number of First Page +Execute= +Task=Task +Custom_Button_Type_Submit=Submit +FR-Designer-Widget_Settings= +IS_Need_Password=IS Need Password +PageSetup-Horizontally=Horizontally +No_Editor_Property_Definition=No Editor Property Definition +Env-Remote_Server=Remote Server +FR-Utils_Background= +FR-Designer-Plugin_Warning=Warning +Server-version-info=You open the template file is open there will be an error made ??by the later design or the risk of losing the original template attribute. Please upgrade to your designer if need to open this template +CellWrite-Page_After_Row=Page Break After Row +HF-Right_Section=Right Section +PageSetup-Title_Start_Row=Title Rows +From= +Preference-Grid_Line_Color=GridLine Color +RowTo=RowTo +FR-Designer_ReportColumns-Repeat_Column= +M_Server-Function_Manager=Function Manager +KeyWord= +DS-Multi_Dimensional_Database= +BiasD-Slope_Line=Slope Line +Tue=Tue +ReportServerP-Last=Last +FR-Base_Columns= +SpecifiedG-Leave_in_their_own_groups=Leave in their own groups +LOG-Please_Wait=Please Waiting +Form-ToolBar=Form ToolBar +FR-Base_sure_remove_item= +Component_Scale=Component Scale +Hyperlink-Use_CJK_to_encode_parameter=Use CJK to encode parameter +LOG-Has_Been_Openned=Report Has Been Openned +FR-Designer-Dependence= +ECP_error_pwd= +REPORTLET= +RWA-Column_Offset=Column Offset +Forecast=forecast +Light_Orange=Light orange +StyleAlignment-Vertical=Vertical +Form-List=List +ParameterD-Show_Parameter_Window=Show Parameter Window +FR-Designer_Set_Submit_Event= +Value_Percent=Value In Percent +DBCP_MIN_EVICTABLE_IDLE_TIMEMILLIS=MinEvictableIdleTimeMillis +Function-The_class_must_be_located_in=The class must be located in +FR-Action_Sort= +DataFunction-Average=Average +FR-Designer_Show_in_Containing_Folder= +M_File-Export-Excel=Excel +DataFunction-Max=Maximum +FR-Designer_Form-Widget_Name=Widget Name +FS_End_Date=End Date +Export-Excel-Simple=Simple +ColumnTo=ColumnTo +SpecifiedG-Discard_all_others=Discard all others +DS-TableData=TableData +Form-DataTable=DataTable +Sub_Report_ToolTips=ToolTips of Sub Report +Right_Top=Right_Top +M_Edit-Merge_Cell=Merge Cell +FR-Designer_Restore_Default=Restore Default +Component_Interval=Components Interval +Cover_None=Cover None +Datasource-From_Database=From Database +Folder=Folder +Form-Allow_Edit=Allow Edit +M_Edit-Clear=Clear +ParentCell_Setting=Parent Cell Setting +Only_selected_cell_can_paste_only=Only selected cell can paste only +M_Report-Report_Columns=Report Columns +Unit_Hundred=Hundred +FR-Designer_DataTable-Build= +Widget-Form_Widget_Config=Form Widget +Server-version-tip-moreInfo=Your own team of our FineReport Designer version number of the product as well as the deployment server version number is consistent, in order to avoid the problems caused by inconsistent versions of risk.If you open a template produced higher Designer version, may open the error may be missing the original template properties. If you create the template used Designer Version higher than your final deployment with the server version, the server may not be able to properly load the template you create. +Actions=Actions +FR-Designer-Dependence_Connect_Server_Error=connect error +High=High +HJS-Send_Failed=Send Failed +HJS-Message=Message +File-Allow_Upload_Files=Allow Upload Files +FR-Designer-Form-ToolBar_Chart= +Thick_Bottom_Border_Line=Thick Bottom Border Line +FR-Action_Remove= +FRFont-Style=Style +Select_DataColumn=Select Data Column +StartValue= +SINGLE_FILE_UPLOAD= +BackgroundTexture-Cork=Cork +M_Format-Data_Map=Data Map +FR-mobile_native_analysis= +HighLight=HighLight +FR-Designer_Dropdown-More-Preview=Drop-down for more preview +local=local +FR-Designer_Gradation=Gradation +PageSetup-Finis_Start_Column=Finis Columns +Env-Invalid_User_and_Password=Invalid User Or Password +FR-Designer-Plugin_All_Plugins=All plugins +FR-Designer_Prepare_Export=Prepare_Export +DBCP_TEST_ON_RETURN=TestOnReturn +no-alternatives=no alternatives +FR-Designer_Submmit_WClass= +M_Insert-Slope_Line=Insert Slope Line +FR-Designer-Plugin_Plugin_Description=Description +ExpandD-Not_Expand=Not to Insert Cell to Display Data +Utils-Bottom_to_Top=Bottom to Top +Collect-Click\!_Get_user_information_code=Click\! Get user information code +FR-Already_exist= +Send=Send +M_Edit-Clear_All=All +Brown_Orange=Brown Orange +PageSetup-Portrait=Portrait +FR-Designer_Form-RadioGroup=Radio Group +FR-Utils-App_AllFiles=All Files +Popup=Popup +Server_Charset=Server_Charset +CellWrite-Repeat_Content_When_Paging=Repeat Content in New Page +Utils-No_Pagination=No Pagination +Form-NullLayout=NullLayout +ConditionB-Remove_bracket=Remove bracket +email=email +Minute= +FR-Designer-Plugin_Update=Plugins to update +alraedy_close=already closed +ComboCheckBox-End_Symbol=End Symbol +DataColumn=Data Column +Form-Password=Password +FR-Background_Image_Adjust=Adjust Image +Export-Excel-PageToSheet=Page To Sheet +Edit-Row_Count=Row Count +DS-Report_TableData=Report Table Data +Sche-Hour=Hour +Group_Count=Group Count +EndValue=End Value +FR-Designer_Sytle-Indentation=Indentation +DownBarBorderStyleAndColor=DownBarBorderStyleAndColor +World=World +FR-Designer-Basic_Cancel=Cancel +Finally=Finally +Low=Low +Please_Input_The_Key=Please Input the key the map use +Smart=Smart +Preference-Predefined=Predefined +Current_custom_global= +FR-Designer-Plugin_Shop_Need_Install= +WEB-Pagination_Setting=Pagination Setting +RCodeDrawPix=PIX +FR-Designer-Widget-Style_Alpha= +BorderLayout-North=North +HJS-Current_Page=Current Page +Compile=Compile +Show_Blank_Row=Show Blank Row +TableData_Dynamic_Parameter_Setting=Dynamic Parameter-Setting +FR-Background_Image_Default=Default Image +BackgroundTexture-WhiteMarble=White Marble +DataFunction-Sum=Sum +Collect-The_user_information_code_is_invalid=The user information code is invalid +Preference-Locale=Locale +M_File-Export-PDF=PDF +BiasD-From-lower_left_to_upper_right=Lower left to upper right +Border-Style=Border-Style +Sort=Sort +Image-Image_Layout=Image Layout +Panel=Panel +FR-Designer-Basic_Copy_Build_NO_OK=Build No. has been copyed +All_Border_Line=All Border Line +FR-Utils-Please_Input_a_New_Name=Please Input a New Name +FR-Base_Formula_Plugin=Plugin Function +Two_Rows_Of_Three_Grid=Two rows of three grid +FR-Designer_Certificate_Pass= +Bubble-Series_Name=Series Name +M-New_Multi_Report=Multi Report +BackgroundTexture-PinkTissuePaper=Pink Tissue Paper +Preference-Support_Default_Parent_Calculate=Support Default Parent Calculate +Show_Blank_Column=Show Blank Column +BaiduMap=Baidu Map +Report-Web_Attributes=Web Attributes +FR-Designer_StyleAlignment-Wrap_Text=Wrap Text +Need=Need +Parameter-Double=Double +Config_Servlet=Config Servlet +Form-Comma=Comma +Verify=Verify +PageSetup-Landscape=Landscape +Weeks=Weeks +FR-Designer-Widget-Style_Title_Background= +Preference-Pagination_Line_Color=Pagination Line Color +Test_URL=Test URL +Fill_blank_Data=Fill blank Data +ReportServerP-The_name_of_printer_cannot_be_null=The name of printer cannot be empty +FR-Designer-Basic_Copy_Activation_Key=Double click to copy key to clipboard +Continuum=Continuum +BackgroundTexture-MediumWood=Medium Wood +Datasource-Column_Index=Column Index +Function-Function_File=Function File +Form-Component_Bounds=Component Bounds +Utils-Submit=Submit +Conditions_formula= +M_Insert-Image=Insert Image +FR-Designer-Plugin_Will_Be_Delete=Delete plugin +FormulaD-Functions=Functions +Mobile_Terminal=The mobile terminal +CheckBox=CheckBox +FR-Designer-Plugin_Install=Install +Sun=Sun +FR-Designer_ToolBar_Bottom=Bottom ToolBar +Widget-Width=Width +Series_Name=S_N +Set_Row_Title_Start=Set_Column_Title_Start +HF-Default_Page=Default Page +Env_Des=Env_Des +Widget-User_Defined=User Defined +Url_location=url +Disk_File=Disk File +Inside=Inside +FR-Designer_filedChosen= +ServerM-Predefined_Styles=Predefined Styles +is_need_word_adjust= +Background-Null=No Background +PageSetup-Vertically=Vertically +FR-Designer_Root=Root +FR-Designer_Form-TextArea=TextArea +ReportServerP-Import_JavaScript=Import JavaScript +Form-TableTree=Table Tree +Opened=Opened +M_Edit-Delete=Delete +Widget-Form_Widget_Container=Form Container +BindColumn-Summary=Summary +Sche-Second=Second +Server-Open_Service_Manager=Open Service Manager +FRFont-Effects=Effects +OtherGroup_Name=The name of other group +Specify=Specify +Highlight-Click_to_Choose_Property_To_Modify=Click to Choose Property to Modify +triggered= +Double_Bottom_BorderLine=Double Bottom BorderLine +M_Insert-Sub_Report=Insert Sub Report +Unit_Ten=Ten +Polybolck=Polybolck +Select_sort_order=Select sort order +HJS-Mail_to=To +StyleAlignment-Left=Left +Two_Rows_Of_Two_Grid=Two rows of two grid +FR-Designer-Form-Please_Drag_ParaPane= +Milliseconds=Milliseconds +DataFunction-None=None +Delivery=Delivery +ColumnSpan=ColumnSpan +StyleAlignment-Bottom=Bottom +Read_failure=The read failure may source file is corrupted +Verify-Verify=Verify +FR-Designer-Widget-Style_Title_Format= +FR-Designer_Edit_String_To_Formula= +FR-Base_UnSignIn= +Every= +CellWrite-Preview_Cell_Content=Preview Content of Cell +FormulaD-Data_Fields=Data Fields \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index b7c7fe326..4bfbbdf89 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -516,7 +516,6 @@ FR-Designer_Create_Tree=Build Tree FR-Designer_Set_Callback_Function=Set Callback Function FR-Designer_ConfirmDialog_Content=Confirm to delete Tab Control FR-Designer_ConfirmDialog_Title=FineReport 8.0 - FR-Designer_FormulaPane_Tips=Tips\:You can input B1 to get the data in the second cell of the first row FR-Designer_FormulaPane_Variables=Variables FR-Designer_FormulaPane_Formula_Description=Formula Description @@ -525,13 +524,11 @@ FR-Designer_FormulaPane_Search=Search FR-Designer_Tab_carousel=Tab carousel FR-Designer_setCarousel=Start FR-Designer_carouselInterval=Interval - 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 @@ -547,7 +544,6 @@ 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 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 @@ -588,10 +584,8 @@ 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_Too_Large_To_Paste=Too large to paste! FR-Designer_Too_Small_To_Paste=Too small to paste! - FR-Designer_AxisReversed=Axis in reverse order FR-Designer_Logarithmic=Log scale FR-Designer_Chart_Log_Base=Log Base @@ -600,8 +594,6 @@ FR-Designer_Style=Style FR-Designer_Color=Color FR-Designer_Border=Border FR-Designer_Background-Pattern=Pattern - - FR-Designer_SimpleDetail_Report= FR-Designer_SimpleCross_Report= FR-Designer_Edit_Button_ToolBar=Edit Button ToolBar @@ -609,3 +601,1390 @@ FR-Designer_Remove_Button_ToolBar=Remove Button ToolBar FR-Designer_Get-CubeGetting= FR-Designer_DoubleLayer_Report= FR-Designer_Get-Cube= +CellWrite-InsertRow_NULL=Null +DashBoard-ChartFloat=Chart +contact_info=Contact information (optional) +Page_Setup=Page Setup +CellWrite-Print_Export=Print/Export +Cannot_Get_Date=Can not get date +FR-Designer_Modify=Modify +M-Write_Preview=Filling Preview +FR-Base_RWA-Key=Key +China=China +Set_Legend_Sytle=Set Legend Format +FR-Designer_Number=Number +FR-Designer-Widget-Style_Common=Common +M-Save_As=Save As +Following_parameters_are_not_generated=The following parameters are not generated +FR-Designer-Basic_Activation_Key_Copy_OK=Key has been copy to clipboard +Utils-Current_Sheet=Current Sheet +ConditionB-is_less_than=less than +BorderLayout-West=West +AnalysisLine=Line +Layer_Report_Warnning_info=Line report engine is suitable for large data.
Many report features will no longer support if use it,
more information in helpdocument. +Tree-Width=Tree Width +alert_word=Export without fixed height, cell hight will change according to the content and pagination position will different from the preview result. +PageSetup-Paper_Size=Paper Size +M-Page_Setup=Page Setup +DashBoard-FormBook=Form +X-Coordinate=Horizontal axis +Style-Line_Spacing=Line Spacing +FR-Designer_Plugin_Should_Update_Title=Warning +Server-Define_Data_Connection=Define Data Connection +BarInside=Bar Inside +Border-Color=Border Color +NotAllow=Invalid +Utils-File_type=File type +FR-Designer-Plugin_Install_From_Local=Install plugin from local file +Summary_Method=Summary Method +Select_Specified_Grouping=Select custom group +HF-Number_of_Page=Total Number of Page +FR-Designer-Tree_Height=Tree Height +Owner=Owner +Home=Home +FR-Server_Embedded_Server_Stop=Built-in server-Stop +FR-Designer-Plugin_Detecting_Update=Checking for updates +HF-Whether_to_define_the_selected_type=Whether to define the selected type +StyleAlignment-Right=Right +FR-Designer_Alignment-Style=Alignment Style +PageSetup-Title_Start_Column=Duplicate Title Columns +Tree-Mutiple_Selection_Or_Not=MultiSelect +FR-Designer-Plugin_Search=Search +Choose_Role=Access Control +Append_Delete_Row_Message=Warning! Please set extended properties of the specified cell. +Form-ComboBox=Drop-down Boxes +PageSetup-Footer=Footer +Sorting=Sorting +DBCP_TEST_WHILE_IDLE=Open Idle Connections Recyclers Test +DS-Embedded_TableData=Built-in Data Set +FR-Designer_No-Privilege=No Privilege +FRFont-Subscript=Subscript +Background_Settings=Background Settings +FormulaD-Invalid_Formula=Invalid Formula +FR-Base_Margin=Margin +FR-Designer-Plugin_Shop_Installed=Plug-shop installed, whether to start immediately? +M_Edit-Send_to_Back=Send to Bottom +Email-Can_Preview_Report_Content=Preview Report Content in the Body +FR-Designer-FRFont_Italic=Italic +CellWrite-Print_Background=Cell Background +Wizard=Wizard +Preference-Is_Drag_Permited=Support drag-and-drop +FR-Designer_Release_Lock=Unlock +Form-Delimiter=Separator +wrong=wrong +FR-Menu-Server_Chart_PreStyle=Chart Predefined colors +Form-Button=Button +FormulaD-Valid_Formula=Valid Formula +ParameterD-Parameter_Interface=Parameter Interface +At_least_one_visual_worksheet=A workbook must contain at least one visible worksheet. If you want to delete, please insert a new worksheet. +Need_Min_Value=Need Min Value +Allow_Blank=Allow Null +CellWrite-InsertRow_DEFAULT=Default +Widget-Load_By_Complete=Full load +FR-Designer-Basic_Only_Submit_Current_Sheet=Submit Current Sheet Only +Sort-Sort_Order=Sort +File-File_Size_Limit=File Size Limit +PrintP-Print=Print (T) +FR-Designer-StyleAlignment_Center=Center +Preference-Setting_Colors=Colors Setting +Judge=Judge +Image-Adjust=Adaptive +Collect-User_Information_DES=Simply click on the "get activation code" button above, a new browser window will pop up. Then visit the product's official website to obtain an completely free activation code, the entire process takes only 3 minutes +FR-Designer_Plugin_Normal_Update_From_Local=Update from local file +BackgroundTexture-Canvas=Canvas +BarOutSide=Bar Outside +Preview_ToolTips=Preview ToolTips +FRFont-Family=Name +FR-Lic_does_not_Support_Remote=Current lic does not support remote design, please update the lic +InterfaceStyle=Style +RWA-Key=Key +WF-Name=Name +RWA-Click_Cell_To_Edit_Value=Click Cell to Edit Value +Utils-Row_Height=Row Height +ReportD-Excel_Export=Export Attributes +Form-Please_Select_A_Kind_Of_Form_Container=Select A Form Container +Column_Does_Not_Exsit=Column Does Not Exsit +M_Insert-Hyperlink=Hyperlink +can_not_include_underline=Can not contain "_" +FR-Designer-Plugin_Jar_Expired=Jar Expired +FR-Background_Image_Extend=Extend Image +TopDownShade=Gradient(vertical) +FR-Base_Right=Right +DataBinding=Data Binding +ConnectionPool_Attr=Connection Pool Attributes +Connect_SQL_Cannot_Null=Data Connection and SQL Cannot be Null +DBCP_MAX_ACTIVE=Max Active Connections +M_Window-Preference=Options +ToolBar_Top=Top ToolBar +FR-Designer_Indent-Pixel=Pixel +FR-Designer_Unit_MM=MM +IDLE=Idle +FRFont-Underline=Underline +FR-Designer-Plugin_Read_Plugin_List_Error=Error when reading plugin list +Type_Set=Type Setting +M_Format_A-Cell_Attributes=Other Attributes +CellWrite-Show_As_Image=Show As Image +ShowAsDownload=Display the binary content using download link +Form-ComboCheckBox=Drop-down CheckBox +BackgroundTexture-WovenMat=Woven Mat +BindColumn-Custom_Data_Appearance=Custom displays +Actived=Active +Env-Local_Directory=Local Directory +Form-Colon=Colon +Preference-Vertical_Scroll_Bar_Visible=Vertical Scroll Bar Visible +Utils-Show_Cell_Value=Show Cell Value +FR-Designer_ReportColumns-Repeat_Row=Copy row sequence +SpecifiedG-Specified_Group=Custom Group +RWA-Smart_Add_Cells=Smart Add Cells +HF-Left_Section=Left Section +M_Report-Report_Background=Report Background +Image-Extend=Stretch +FS_BI=Decision-making platform +ToolBar_Bottom=Bottom ToolBar +Hgap=Horizontal gap +FR-Designer_Enter-New-FileName=Enter New File Name +Verify_Fail=Validate Failed +CellWrite-InsertRow_Policy=Policy of Insert Row +FR-Designer-Plugin_Illegal_Plugin_Zip=Illegal plugin zip +RCodeVersion=Version +Convert=Convert +Please_Drag=Please drag in row fields, column fields and rollup fields +FR-Designer-Widget-Style_Preview=Preview +mobile_number=Mobile Number +FR-Designer_Form-ComboCheckBox=Dropdown CheckBox +CacheValidateTime=Cache valid time +Hyperlink-Extends_Report_Parameters=Inherit Report Parameters +FR-Designer_Values-Editor=Values Editor +Export-Excel=Excel +Utils-Left_to_Right=Landscape +ExpandD-Vertical_Extendable=Vertically +Utils-Report_Runtime_Env=Report working directory +Utils-Right_to_Left=From right to left +Utils-Beyond_the_top_side_of_Border=Beyond top border +Exception_StackTrace=Exception StackTrace +Corresponding_Fields=Corresponding Fields +Form-CheckBox=CheckBox +Utils-Current_Row=Current Row +BuildIn=Built-in +BindColumn-Results_Filter=Result Filter +FR-Designer-Plugin_Manager=Plugin Management +M_File-Export-CSV=CSV(comma delimited) +Data_Filter=Data Filter +ReportServerP-Edit_Printer=Edit Printer +FR-Designer_Datasource-Stored_Procedure=Stored Procedure +RESTART=Restart +FormulaD-Function_name=Function Name +ChooseOneButton=Please chose one control +Priority=Priority +Datasource-Datasource=Data Source +FR-Designer_Width=W +Cannot-Add_To_This_Area=Cannot Add To This Area +Run=Run +Set_Submit_Condition=Submit Condition +FR-Base_Value=Value +fileLocked_undeleted=Template is locked, you can not delete\! Click OK to refresh the templates list +Web_Apply=Web Application +Refresh_Database=Refresh database +Set_Row_Title_End=Set Duplicate End Rows +FR-Utils-New_Folder=New Folder +BiasD-From-upper_left_to_lower_right=upper left-lower right +CapsLock=CapsLock +StyleFormat-Sample=Sample +RWA-Smart_Add_Cell_Group=Smart Add Cell Group +MConfig-CancelButton=Cancel +Function-Choose_Function_Class=Choose Function Class +LatLng=Lat and Lng +DS-Server_TableData=Server Data Set +BackgroundTexture-GreenMarble=Green Marble +read_time_out=Load Timeout +JavaScript-Commit_to_Database=Commit to DB +DS-Relation_TableData=Linked Data Set +CellWrite-Page_Before_Row=Before Row +FR-Designer-Plugin_Load_Plugins_From_Server=Loading data from plugins store +D-Dispaly_Divide_Result_Set_into_Groups=Grouping on Result Set +Closed=Closed +RWA-Help=Set "No update if no modidy", so if cell is not modified, the record will not update; it improves filling and submit performance when data is large. +FR-Designer-Widget-Style_Custom=Custom +FR-Designer-Widget-Style_Render_Style=Rendering style +Highlight-Barcode=BarCode +FR-Designer_Connect_SQL_Cannot_Null=Data connection and SQL panel cannot be Null +trigger=trigger +M-Data_Analysis=Data Analysis +Function-The_selected_file_cannot_be_null=The select file cannot be null +No-Privilege=No Privilege +ReportColumns-Repeat_Column=Copy column sequence +SecondGraduationUnit=Minor Graduation Unit +Form-Widget_Property_Value=Attribute Value +GIVE-NAME=Give Name +FR-Designer_Rename=Rename +Utils-Merge_Cell=Merge Cells +Style-Spacing_After=After Paragraph +Enlarge_Or_Reduce=Zoom +Tree-Height=Tree Height +RCodeErrorCorrect=Error-correction +Enter-New-FileName=Enter New File Name +try_resending=Please try resending +M-Open_Report=Open... +Please_Select=Please Select +InRow=InRow +Form-TextArea=Text Fields +FR-Designer_Https_Enable=Start https +Widget-Custom_Widget_Config=Custom control +already_exists=Already exists +Original_Marked_Filed=Original Tag Field +BackgroundTexture-Sand=Beach +Values=Values +Not_use_a_cell_attribute_table_editing=You may not use a cell attribute table editing +Root=Root node +cycle=Cycle +open-new-form-tip=open new form tip +Support-Current_Auto_Complete_Shortcut=Current Shortcut key +GROUPING_MODE=Ordinary Grouping +DBCP_MAX_IDLE=Max Idle Connections +BackgroundTexture-BlueTissuePaper=Blue Sandpaper +ReportD-Export_Hided_Row=Export hidden Row +FR-Custom_styles_lost=Custom style lost +Env-Des2=Servlet position should like "http\://localhost\:8080/WebReport/ReportServer",contains host name, port, web application and servlet. Input the upper items and the system will automatically generate a servlet position for you. +Env-Des1=Please select the WEB-INF directory where the Report Server is in +PageSetup-Placement_Center_on_Page=Center on Page +sure_to_delete=sure to delete +Already_exists_not_add_repeat=Already exist, please do not repeat +Axis_Title=Axis title +FR-Designer-Plugin_Install_Failed=Install failed +FR-Designer-Widget-Style_Frame=Frame +MainGraduationUnit=Major Graduation Unit +Second_Axis=Secondary Axis +Classifier-Ge=Piece +MSBold=MS YaHei +Form-Design_Size=Form Design Size +FR-App-Template_Save=Save +ExpandD-Horizontal_Extendable=Horizontally +RP_Authority_Edit=Permission +Warnning=Warning +RoleName_Can_Not_Be_Null=Role name can not be null or duplicate +Application=Applications +Formula_Dictionary_Display_Examples_Html=Real value range is \ +ECP-error_pwd=Password Error +FR-Hyperlink_ChartHyperlink=Chart Hyperlink +M_Edit-FormatBrush=Format Painter +Indent-Pixel=Pixel +FR-Designer-Widget-Style_Border_Line=Border weight +Widget-Default_Widget_Config=Basic control +Version-does-not-support=Current lic does not support remote design, please update the lic +StyleAlignment-Right_To_Left=Right To Left +Style-Spacing_Before=Above Paragraph +Has_Existed=Already Exist +FR-Designer_DisplayNothingBeforeQuery=Display Nothing Before Query +Still=Still +JS_WARNING2=\ Ex: http\://localhost\:8075/WebReport/demo.js +JS_WARNING1= \ WebReport is a relative report project directory, there is a test.js in WebReport\\js,
 the relative path is js/test.js +Connectionline=Connection Modes +Utils-Insert_Record=Insert Record +Set-Parameter-Name=Set parameter name first +More-information=More information +Parameter-Boolean=Boolean +FRFont-Strikethrough=Strikethrough +Server-version-tip=The version of the server you are connecting is older than the Designer, continue to connect, some attributes you are editing may not be saved. Please conform the versions of FineReport Designer and the deployment server are consistent. +Form-All_Files=All Files +DBCP_NUM_TEST_PER_EVCTION_RUN=Recycled and Tested Idle Connections +FR-Designer-FRFont_Family=Name +Device=Device +M_Insert-Cell=Cell Element +Present-Formula_Present=Formula Present +FRFont-Superscript=Superscript +CellWrite-Page_Before_Column=Before Column +Golden=Golden +Preference-Support_Cell_Editor_Definition=Support Cell Editor +M-Page_Preview=Page Break Preview +HJS-CC_to=CC +Tree-Select_Leaf_Only=Only return leaf node +Pointer-A-Tick-Order=Pointer value and unit value' s order of magnitude +Pink=Pink +StyleAlignment-Distibuted=Justify +Odd=Odd +already-saved=Already saved +FR-Hyperlink_Chart_Cell=Chart Hyperlink-Link Cell +Style-Left_Indent=Left Indent +Offline=Offline +Form-Hierarchy_Tree_Next=Next +Needle=Pointer +GoogleMap=Google Map +Running=Running +M_Edit-Unmerge_Cell=Un-merge Cell +Out_Border_Line=Outside Border +Style-Spacing=Spacing +FR-Utils_Submit=Submit +ReportServerP-Previous=Previous +StyleAlignment-Text_Style=Text control +RelatedChart=Linkage between charts and tables +ProcessManager=Process Management +Cancel_Repeat_Attributes=Cancel duplicate rows and columns +FR-App-File_Message=Message +Datasource-Stored_Procedure=Stored Procedure +RWA-Row_Offset=Row Offset +M_Format-Style=Style +detail_description=Detailed description +FR-Designer-Widget-Style_Title_Content=Title Content +ParameterD-Report_Parameter=Report Parameter +HF-Edit_Header=Edit Page header +Sytle-FRFont=Font +FR-Designer_Finish_Export=Export Finished +MultiFileUpload=MultiFile Upload +HF-Page_Number=Page Number +Style-Right_Indent=Right Indent +Desktop=Desktop +FR-Server-All_Error=Error +ConditionB-Operator=Operator +Today=Today +Form-Widget_Name=Control Name +Covered_All=Override All +Day=Day +External=External +Black_Font=Black Font +LOG-Report_Server_IS_Started=Report Server is Started +Tips\:You_Can_Input_B1_To_Input_The_Data_Of_The_First_Row_Second_Column=Tips\:You can input B1 to get the data in the second cell of the first row +FR-Designer_ChooseOneButton=Please chose one control +Widget-Sizing=Sizing +NO_Border_Line=NO Border +Cell_Data=Cell data +StyleAlignment-Vertical_Text=Vertical Text +Label=Label +Orange=Orange +zeroMarginWarn=The printer exist the physical margins
report page margin settings the small can
can print content insufficiency.
  +Widget-Date_Selector_Return_Type=Return value type +Utils-Switch_To_Template_Reportlet=Switch to template web report +satisfy=satisfy +FR-Designer_WidgetDisplyPosition=Control DisplyPosition +FR-Base_Top=Top +FR-Designer_Form-CheckBox=CheckBox +Reportlet-Parameter_Type=Parameter passing mode +sending=sending... +FR-Designer-FRFont_Foreground=Foreground +FR-Import-Export_SVG=SVG +M_Edit-Clear_Contents=Content +Session=Session +Widget-Load_Type=Load +template_unsaved=template can not be saved +check_communication=Please check the network communication is normal and the server is running +List-Need_Head=Need List Head +FR-Designer-Plugin_Has_Been_Installed=Plugin has been installed,switch to plugin updates to update it. +FR-Widget_Tree_And_Table=Control tree and control table +FR-Base_Help=Help +FR-Designer-Plugin_Update_Successful=Update successfully, restart the sever to enable it +August=August +LOG-Is_Being_Openned=Is Being Openned +BackgroundTexture-Oak=Oak +Multi_nam_formula=\ data set name\: +TurnOn=TurnOn +HJS-Send_Successfully=Send Successfully +Mon=Mon +Inner_Parameter=Built-in Parameter +Required=Required +Summary=Summary +template_unopened=unable to open template +FR-Base_Bottom=Bottom +DataFunction-Min=Minimum +StyleFormat-Percent=Percentage +FR-App-All_Custom=Custom +M_Insert-Data_Column=Insert Data Column +PLEASE=Please +Numbers=Numbers +Release_Lock=Unlock +Background-Background_is_NULL=No Background +FR-Designer_Sytle-FRFont=Font +Gradation=Gradation +The_current_list_is_empty=The current list is empty +Formula_Dictionary_Display_Examples=\Real value range is \ +Schedule-Template_Parameter=Template Parameter +JSShow=Dynamic display +Level_coordinates=Hierarchy coordinate +MainGraduationLine=Major Graduation Line +Hyperlink-Web_link=Web link +StyleAlignment-between_-90_and_90=between -90 and 90 +FormulaD-Custom_Function=Custom Function +FR-Designer_Integer=Integer +PageSetup-Finis_Start_Row=Duplicate Last Row +RWA-Remove_Field=Remove Field +Form-Desin_Width=Form Design Width +No-tableData=Return no dataset +Page_Total=Total +FR-Designer-Plugin_Connect_Server_Error=Error to connect plugin store, try again later +Import-Excel_Source=Excel Source Files +Utils-Left_to_Right_a=From left to right +ExpandD-Expand_Attribute=Extension Attributes +Report-Write_Attributes=Filling Attribute +Utils-Current_Column=Current Column +Need_Max_Value=Need Max Value +Report_Not_Exist=Report Not Exist +HF-Insert_Content=Insert +UpParent=Upper parent cell +PageSetup-Page=Page +Utils-Move_Up=Move Up +BackgroundTexture-PurpleMesh=Purple Grid +Export-Word=Word +ServerM-Widget_Manager=Control management +FR-Designer-Basic_Activation_Key=Activation Key\: +FR-App-Template_Report_Not_Exist=Report Not Exist\! +Protected=Protect +Skip=skip +FR-Designer_PageSetup-Vertically=Vertically +revert=revert +PageSetup-Predefined=Predefine +Border-Style-Radius=Border-radius +IntPart=Integer part +ExpandD-Data_Column=Data Column +Sort-Ascending=Ascending +FR-Designer-Widget_Style=Style +parameter_name_exist=The parameter name already exists +FR-Designer_Layer-Build=Layered Build +Please_Rename=Please Rename +Form-Editing_Listeners=Event editing +RWA-Smart_Add_Fields=Smart Add Fields +FR-Designer-Tree_Width=Tree Width +Record=Record +Poly-Report_Component=Aggregate Report Component +Options=Options +NS-war-remote=Error codes\:1117 Compression deployment does not support remote design +Sche-Minute=Minute +Three_Rows_Of_Three_Grid=A grid with 3 rows and 3 columns +WorkSheet=Free Report +FR-Designer-Widget_Size=Control Size +BindColumn-Select=List +FR-Widget_Mobile_Terminal=Mobile Terminal +FR-Background_Image_Titled=Titled Image +SetPrinterOffset=Printer Offset +FR-Designer-Plugin_Installed=Installed +FR-Designer-Hyperlink_Name=Name +FR-Designer_Form-Button=Button +Black=Black +FR-Designer-Widget-Style_Border_Color=Border Color +Set_Submit_Event=Set Submit Event +PDF-Print_isPopup=Whether display a popup settings box +LayerPageReport_CountPerPage=Number of records per page +Display_Modes=Display Modes +RowSpan=Row Span +Datasource-Test_Connection=Test Connection +Function-Function_Manager=Function Manager +Host_Name=Host Name +CellWrite-Show_As_HTML=Show As HTML +FR-Designer-Widget-Style_Shadow=Shade +FR-Designer_Parameter_String=String +Form-SupportTag=Displayed as label +ReportD-Report_Write_Attributes=Report filling attributes +DataFunction-Count=Count +Top_And_Thick_Bottom_Border_Line=Top and thick bottom border +Client=Client +BindColumn-Result_Serial_Number_Start_From_1=Serial Number Starts From 1 +History=History +Already_exists=Already exist, please input again +Datasource-Original_Charset=Original Code +FR-Base_Left=Left +ReportServerP-Next=Next +BindColumn-Top_N=Top N +Animation_Special=Special Effect +Widget-Chart_Widget_Config=Chart control +FR-Designer-Plugin_Cannot_Update_Not_Install=Cannot update, please confirm it is installed correctly +After_Changed_Some_Attributes_Are_Different=Some attributes will be changed after conversion, whether to continue? +PieStyle=Pie Style +HF-Are_you_sure_to_delete_it=Are you sure to delete it +Utils-Design-File_Open=Open +FR-Utils_Label=Label +Data-Label=Label +M_Insert-Text=Insert Text +Form-View_Tree=View Tree +M_Insert-Chart=Insert Chart +HF-Even_Page=Even Page +ReportServerP-Report_server_parameter=Report Server Parameter +JavaScript-Form_Submit=Form Submit +Horizontal-Split_Layout=Horizontal partitioning layout +BorderLayout-Center=Center +INFO-Reset_Webapp=Reset Application Server +FR-Designer_Text=Text +IN_and_INOUT_type_not_as_cursor=IN and INOUT type canot be cursor +Main_Axis=Primary axis +M_Edit-Cut=Cut +Utils-The_Name_has_been_existed=The name already exists +FR-Background_Image=Image +Character=character +Unit_Thousand=Thousand +Test=Test +Utils-Would_you_like_to_save=Would you like to save +HF-Header_and_Footer=Header and Footer +LIST_MODE=List Mode +HF-Insert_Image=Insert Image +FR-Designer-Widget-Style_Standard=Standard +FR-Designer_Form-List=List +BackgroundTexture-Denim=Denim +Execute_Report_by_Layer_Engine=Execute report by line report engine +M_Edit-Bring_Forward=Bring to Forward +Choose_All=Select All +Form-RadioGroup=Radio Button Group +FR-Base_Remove=Delete +FR-Remote_Connect2Server_Again=Connection break, whether to reconnect the sever +Semicolon=Semicolon +StyleFormat-Category=Category +Report_Template=Report Template +Utils-Beyond_the_right_side_of_Border=Beyond right border +BackgroundTexture-Papyrus=Papyrus +LayerPageReport_PageEngine=Use page-based computations and separately execute report +Schedule-The_selected_file_must_be_end_with_filter=The selected file must end with '.cpt' or '.class' or '.frm' +Provide=Provide +FormulaD-Math_&_Trig=Math and Trig +FR-Designer-StyleAlignment_Right=Right +Error_TableDataNameRepeat=\ already exsits in Server DataSet or the name is repeated. +Choose_None=Deselect +File-tree=File tree +FRFont-bold=Bold +FR-Designer_Set_Submit_Condition=Submit Condition +Form-Change_Widget_Name=Change Control Name +ReportColumns-Report_Columns=Multi-columns/lines display +Can_not_use_FormatBursh=Can't use format painter in multiple selections +CellElement-Property_Table=Cell Attribute Table +Dictionary-Dynamic_SQL=Dynamic SQL +FR-Designer_Form-CheckBoxGroup=CheckBoxGroup +DBCP_TIME_BETWEEN_EVICTIONRUNSMILLIS=Sleep Time of Idle Connections Recyclers +ReportD-Export_Hided_Column=Export hidden column +Preference-Support_Undo=Support Undo +FR-mobile_report_analysis=report analysis +Month=Month +Utils-Column_Width=Column-W +Collect-Use_Designer=Use Designer +Widget-User_Defined_Editor=Predefine editor, you can only change its properties in control mangement menu. +Unit_Ten_Thousand=Ten Thousand +Data_Setting=Data Setting +ECP_input_pwd=Enter your password\: +period=period +Note=Note +Multiline=Multi-line edit +Datasource-Convert_Charset=Encoding Conversion +DashBoard-ConnectionList=Data Connection +Utils-Submit_Forcibly=Submit forcibly +Parent_Marked_Field=Parent Tag Field +Logout=Logout +FR-Designer_Show_Blank_Row=Supplement blank line +FR-Base_Format=Format +FR-App-Export_png=png +Delete_Column=Delete Column +SecondGraduationLine=Minor Graduation Line +SpecifiedG-Groups=Groups +CONTINUUM_MODE=Continous grouping +Datasource-Connection_failed=Connection Failed +CategoryName=Category Name +DBCP_INITIAL_SIZE=Initialize Connections +Colors=Colors +FR-Import-Export_CSV=CSV(comma delimited) +FR-Designer-StyleAlignment_Left=Left +BackgroundTexture-PaperBag=Paper Bag +RWA-BuildIn_SQL=Built-in SQL +SingleLayer=Single Layer +Or-you=or you +FR-Designer_Certificate_Path=Certificate Path +Utils-Last_Page=Last Page +BarCodeD-Drawing_Text=Display Barcode Text +Warning-Template_Do_Not_Exsit=Template do not exsit +BindColumn-Group=Group +Export-SVG=SVG +Plane3D=Plane 3D +SessionID=sessionID is session ID parameter in current template +FR-Designer_Height=H +HF-Odd_Page=Odd Page +About-All_Rights_Reserved=All Rights Reserved +Utils-Current_Cell=Current Cell +Web_Preview_Message=Please save the template in the current runtime environment directory +FR-Hyperlink_Chart_Float=Chart Hyperlink-Floating Elements +Dic-Data_Query=Data Query +CellWrite-Print_Content=Content of Cell +Privilege-Selected_None_Of_Any_Items=Selected None +FRFont-Size=Size +Function-J2EE_server=J2EE server +FR-Designer_Allow_Blank=Allow NULLs +Build_Tree_Accord_Parent_Marked_Filed=Build Tree according to the parent tag field of the selected data set +Preference-Horizontal_Scroll_Bar_Visible=Horizontal Scroll Bar Visible +Scope=Scope +Save_All_Records_In_Memory=Save All Records in Memory +FreezeWarning1=Initial value can't greater than end value +FlowLayout=Fluid Layout +M_Report-Report_Footer=Report Footer +FR-Action_Add=Add +BorderLayout-East=East +feedback_tip=Please enter a description of the problem, not more than 400 words +FS_Start_Date=Start Date +FR-ConditionB_Operator=Operator +Printer-Alias=Alias +DS-Class_Name=Class Name +FR-Designer-Plugin_Has_Been_Disabled=Plugin has been disabled, restart the designer and sever to enable it and the sever need to be manually restarted +Sort-Original=Unsort +Utils-Top_to_Bottom_a=From top to bottom +Parameter-String=String +InnerRadis=Inner radius size +Want_To_Cover_It=Whether to override it +Divided_stage=Divided Stage +Seriously=Seriously +ReportServerP-PDF=PDF +Utils-Switch_To_Class_Reportlet=Switch to class web report +FR-Designer_Show_Blank_Column=Supplement blank column +M_Edit-Redo=Redo +Visibility=Visibility +Series_Use_Default=Series Default Use +Has_Selected=Already Selected +BackgroundTexture-Walnut=Walnut +FormulaD-Function_category=Function Type +Interface=Interface +FR-Designer-Beyond_Bounds=Can't go beyond the border +seconds=s +Auto-Build=Automated Build +FR-Designer-Plugin_Install_Successful=Plugin will takes effect when designer and sever are restarted and the sever need to be manually restarted +Template_Path=Template Path +FR-Designer-FRFont_Bold=Bold +Poly_Name=Aggregation block name +WorkBook=WorkBook +Hyperlink-Self_Window=Current Window +FR-Designer-Widget-Style_Title=Title +FR-Designer-FRFont_Size=Size +M_File-Export-SVG=SVG +Capacity=Capacity +Rose_Red=Rose Red +StyleAlignment-The_value_of_rotation_must_between_-90_and_90_degrees=Rotation value must between -90 and 90 degrees +HF-Move_Left=Left shift +Cell_Group=Cell Group +Week=Week +PageSetup-Orientation=Orientation +M-Open_Recent=Open Recent +NNormal= +Integer=Integer +Select_The_Source_To_Save=Select Source to Save +Transition=Branch +FR-Designer_Get_Lock=Lock +one_record_exists_in_many_groups=One record exists in many groups +FR-Designer_Cover_None=Override None +DeciPart=Decimal part +ExpandD-Up_Father_Cell=Upper Parent Cell +Deep=Deep +FRFont-Shadow=Shade +Reportlet=Web Report +Calendar=Calendar +DateFormat-Custom_Warning=Note\: Custom date format does not support the format checking +Unit_MM=MM +Server-Start=Start +CellPage-Can_Break_On_Paginate=Can break when paging +Build_Tree_Accord_Marked_Filed_Length=Build tree according to tag field's length +ComboCheckBox-Start_Symbol=Initializer +Real=Real +RWA-Batch_Modify_Cells=Batch Modify Cells +FR-Designer_Build-Way=Build Way +Read=Read +StyleAlignment-Degrees=Degrees +M_Format_A-Border=Border +Utils-Delete_Record=Delete Record +Reload=Reload +Image-Select_Picture=SelectImage +RWA-Submit=Submit +the_template=this template +FR-Designer_Component_Scale=Component Scale +FRFont-italic=Italic +Year=Year +HF-Move_Right=Right shift +Data-Check=Data Monitor +Unknown=Unknown +Submit_Style=Submit way +Left_Border_Line=Left Border +Brown=Brown +Select_A_Tree_DataSource_To_Build=Select a tree data set to build +Overlapping=Overlapping +DS-Class_TableData=Class Data Set +FR-Designer-Plugin_Illegal_Plugin_Zip_Cannot_Be_Install=Illegal plugin,cannot be installed +DisplayNothingBeforeQuery=Display Nothing Before Query +Y_Axis=Y Axis +FormulaD-Most_Recently_Used=Rencently used +FormulaD-Input_formula_in_the_text_area_below=Input formula in the text area below +Build-Way=Build Way +M_Edit-Undo=Undo +Line-Style=Line-Style +Datasource-Other_Attributes=Other Attributes +M_Server-Global_Parameters=Global Parameters +Suffix=Suffix +Image-Image_Files=Image Files +EditRC-Entire_row=Entire row(R) +HF-First_Page=Home Page +BackgroundTexture-Granite=Granite +DataList=Data Link +Recursion=Recursion +BarStyle=Bar +FR-Designer-Min_Width=Min-Width +Utils-Report-Env_Directory=Report working directory +D-ChartArea=Chart Area +Only=Only +FR-Base_No=No +SpecifiedG-Put_all_others_together=Merger all others +HF-NewLine_Des=Click on the move or delete button to operate line breaks +WLayout-Border-ThreeContainer=You have the central, northern and western border layout containers.You can adjust the height of the northern one and the width of the western one. +Parameter_Name=Parameter Name +FR-Base_Table=Table +Des-Remove_WorkSheet=The report to be deleted may contain data. If you want to delete report, please click on Yes button. +Rotation=Rotation +Undefined=Undefined +Support-Auto_Complete_Shortcut=Auto complete shortcut key +Set_Column_Title_End=Set Duplicate End Column +Submit_Url=Submit Url +ReportServerP-Are_you_sure_to_delete_the_selected_printer=Are you sure to delete the selected printer +long_data_can_not_show_fully=Long data can not be fully demonstrated +Utils-Beyond_the_bottom_side_of_Border=Beyond bottom border +FR-Import-Export_PDF=PDF +Form-CheckBoxGroup=CheckBoxGroup +Click-Me=Click Me +Hyperlink-Self=Open link in original page(S) +Tree-Select_Leaf_Only_Tips=If unchecked, only return current node, not contain its child nodes +StyleAlignment-Text_Rotation=Text orientation +Format-Error=Entered value is not in the correct format +Server-Stop=Stop +Preference-Setting_Grid=Grid Setting +ReportServerP-Add_Printer=Add printer +FR-Designer-Plugin_Active=Enable +Utils-File_name=File name +NOT_NULL_Des=NOT NULL +Right_Border_Line=Right Border +EditRC-Entire_column=Entire column(C) +PageSetup-Top_to_bottom=Down, then over +Click-Get_Default_URL=Click To Get Default URL +StyleAlignment-Wrap_Text=Word wrap +Remove_All_Button=Remove all buttons +FR-Designer_Component_Interval=Component Interval +ReportColumns-Columns_vertically=Fixed columns per line +ReportGUI-Print_Background=Print/export background +Export-CSV=CSV +M_Edit-Paste=Paste +FR-Designer-Basic_Restart_Designer=Restart designer +ReportServerP-PDF2-INFO=Only used in LINUX/UNIX when Chinese font is not installed +FormulaD-Check_Valid=Validity Checks +server_disconnected=server disconnected +ParameterD-Parameter_name_cannot_be_null=Parameter name cannot be empty +FR-Designer-Plugin_Version_Is_Lower_Than_Current=The version of plugin update package is lower than the current +RWA-NotChange_Unmodified=No modify, no update +User_Information=User Information +Custom_styles_lost=Custom Style is Missing +PageSetup-Margin=Margin +M-New_FormBook=New Form +Widget-TreeNode=Tree node button +Form-Url=URL +Utils-Beyond_the_left_side_of_Border=Beyond left border +Float_Element_Name=Float Element Name +Purple=Purple +DashBoard-Potence=Permissions +M-Close_Template=Close Template(C) +paper=Page +Not_Exsit=Not exist in report +Utils-Insert_Row=Insert Row +Utils-Delete_Row=Delete Row +not_support_authority_edit=this element does not support authority edit +Formula_Tips=The formula must be begin with "\ +FR-Action_Copy=Copy +Compile_Success=Compile Successfully +BackgroundTexture-RecycledPaper=Recycled Paper +StyleAlignment-Single_Line=Single Line +Utils-Move_Down=Move Down +Please_Set_Repeat_First=Please set duplicate title row and column first +Writer-ShortCuts_Setting=Filling Shortcut key setting +Verify-Data_Verify=Data validation +FR-mobile_analysis_style=analysis style +Confirm-Delete-File=Whether to delete the selected file +PageSetup-Header=Header +JavaScrit-Asynch=Asyn +ReportServerP-Toolbar=Toolbar +Utils-Top_to_Bottom=Portrait +Platform=Platform +FR-Designer-FRFont_Underline=Underline +Show_in_Containing_Folder=Open the folders where it stored in +BackgroundTexture-WaterDroplets=Water Drop +FR-Designer-Dependence_Install_Failed=install failed +Layout-Padding=Padding +roles_already_authority_edited=Configured role +WidgetDisplyPosition=Control disply position +SpecifiedG-Force_Group=Mandatory Group +FormulaD-Formula_Definition=Formula Definition +I-xyScatterStyle_Marker=Scatter +Hour=Hour +ColorMatch=Color +M_Edit-Order=Re-order +BackgroundTexture-Bouquet=Bouquet +Verify-Error_Information=Validate Error Information +LayerData=Underlying Data +Rename=Rename +Widget-Load_By_Async=Async load +Shape=Shape +BindColumn-This_Condition_has_been_existed=The Condition Already Exists +NS-exception_readError=Error codes\:1305 Template file parsing error +Set_Column_Title_Start=Set Duplicate Title Columns +Fri=Fri +M_Report-Report_Parameter=Report Parameter +REPORTLETS=Parameter of access path to multi-templates +WLayout-Card-ToolTip=Card layout, you can add multiple components in it. +M-Popup_ChartType=Chart Type +Please-Wait=Please Wait +FR-Designer-Form-ToolBar_Widget=Control +Widget-Array=Array +FieldBinding=Bound Field +Top_Bottom_Border_Line=Top and bottom border +M-Others=Others... +Hyperlink-Link_Opened_in=Link Opened in +FR-Utils_WorkBook=WorkBook +M_Insert-Float=Float Element +Out_Thick_Border_Line=Thick Border +FR-App-File_Lookup_range=Search range +ReportColumns-Columns_to=Split To +Transparent=Transparent +Parameter-Integer=Integer +PDF-Print_Setting=PDF Print Setting +Server-Embedded_Server=Built-in server +M_Server-Server_Config_Manager=Server Configuration Manager +FR-Utils-Would_you_like_to_cover_the_current_file=Would you like to override the current file +CellWrite-InsertRow_COPY=Original +Edit_String_To_Formula=Edit String To Formula +Edit-Column_Count=Number of columns +Father=Father +ReportColumns-Columns_after=Over +FR-Designer_Undo=Undo +DBCP_MIN_IDLE=Min Idle Connections +M-Data_Analysis_Settings=Data Analysis Settings +M-Form_Preview=Form Preview +Form-Basic_Properties=Basic Property +quote=quote +Thu=Thu +Collect-Collect_User_Information=Collect User information +Layer-Build=Layered Build +FR-Designer-FRFont_Line_Style=LineType +BackgroundTexture-BrownMarble=Brown Marble +PageSetup-Page_Setup=Page Setting +Form-Semicolon=Semicolon +ECP_re_input=Password Error, please re-enter +ExpandD-Sort_After_Expand=After Extension +FR-Designer-Dependence_Install_Succeed=install succeed +Env-Configure_Workspace=Configure working directory +feedback_info=We welcome your comments and suggestions, please fill out the information as detailed as possible, we will contact you soon +Ratio=Ratio +DBCP_TEST_ON_BORROW=Test before Getting Connections +FR-Designer_layerIndex= +WEB-Write_Setting=Filling Settings +M-New_WorkBook=New WorkBook +FR-Designer-Plugin_Has_Been_Actived=Plugin is now active, restart the designer and sever to enable it and the sever need to be manually restarted +Datasource-Maximum_Number_of_Preview_Rows=Maximum Number of Preview Rows +ExpandD-Cell_Expand_Attributes=Extension Attributes +Select_the_repeated_row_and_column=Select rows and columns need to duplicate +FormulaD-Date_&_Time=Date and Time Function +Max-Mem-Row-Count=Cache to disk when records more than +BorderLayout-South=South +Export-Text=Text(tab delimited) +JavaScript-Synch=Synch +FR-App-All_Warning=Alert +M_Edit-Send_Backward=Send to Backward +Form-Layout=Layout +FR-Designer-Plugin_Shop_Need_Update=Plugin store a new version, whether to update? +FR-Designer_WorkBook=WorkBook +UpBarBorderStyleAndColor=UpBar Border Style And Color +GridLayout=Grid Layout +Utils-Default_Value=Default Value +Widget-Comb_Widget_Config=Combination control +Import-Excel2007_Source=Excel2007 Source Files +Y-Coordinate=Vertical Coordinate +FR-Base_SimSun_Not_Found=Cannot find the song typeface, please set the system default language as the designer typeface +FR-Designer_Seriously=Seriously +Upload=Upload +Form-Widget_Property_Table=Attribute Table +Des-Merger_Cell=The selected area contains multiple data, if you merge them, only the data at the upper left corner will be reserved. +FR-Designer-Basic_Copy_Build_NO=Double click to copy build NO. +FR-Base_TurnOn=Turn On +FR-Base_Rows=Row +Form-Remove_Repeat=Remove duplicates +Yes=Yes +Datasource-JNDI_Name=JNDI Name +Utils-Delete_Column=Delete Column +HF-Delete_it=Delete it +JavaScript-Dynamic_Parameters=Dynamic Parameters +px=px +FR-App-Report_Template=Report Template +Verify-Message=Error Message +Plan=Plan +Vertical-Split_Layout=Vertical Split Layout +ParameterD-Delay_Playing=Display Nothing Before Query +TurnOff=TurnOff +FR-Please_Rename=Please Rename +Select_Data_Set=Select Data Set +Name_has_Colon=Name\: +ReportColumns-Columns_horizontally=Fixed lines per column +FR-Base_Yes=Yes +ReportColumns-Repeat_Row=Copy row sequence +Print_Setting=Print Setting +Registration-User_Name=User Name +Datasource-User_Defined=Custom +FR-Designer-Plugin_DownLoadMessage=Plugin need dependence support,need to install ({R1} m)? +Delay=Delay +FR-Designer-All_MSBold=MS YaHei +Utils-Now_create_connection=Creating data connection +FR-Template-Path_chooseRightPath=Please choose a right path +FR-Remote_Re_Connect_to_Server=The server is down, whether to reconnect it +Nation=Country +DBCP_MAX_WAIT=Max wait time +FR-App-Template_Form=Form +Address=Address +Sub_Report=Sub Report +FR-Import-Export_Word=Word +FR-Server_Version_Tip=The version of the server you are connecting is older than the Designer, continue to connect, some attributes you are editing may not be saved. Please conform the versions of FineReport Designer and the deployment server are consistent. +StyleAlignment-Left_To_Right=Left To Right +Verify-ToolTips=If not meet formula, throw up validation error message +BackgroundTexture-Stationery=Letter Paper +FR-Designer_RWA-Help=Set "No update if no modidy", so if cell is not modified, the record will not update; it improves filling and submit performance when data is large. +M_Insert-Barcode=Barcode +Bounds=Bounds +FR-Designer-Undo_All_Authority_Operations=Undo all the privilege edit operations +Datasource-Context=Context +CellWrite-Page_After_Column=After Column +FR-Designer_Cancel=Cancel +Button-Group-Display-Columns=Number of columns displayed +Widget-Height=Control Height +Examples=Examples +Formula_Dictionary_Display_Example=Real value range is \ +StyleAlignment-Horizontal=Horizontal +HyperLink_Must_Alone_Reset=Multiple hyperlink +ExpandD-Expand_Direction=Extension Direction +Include=Include +Export-Excel-Page=Page Break +FR-Designer-Min_Height=Min-Height +Filed=Field +ReportServerP-Import_Css=Reference Css +M_Insert-Formula=Insert Formula +FR-Designer_Auto-Build=Automated Build +FRFont-Foreground=Foreground +Bubble-Width=Bubble Width +Form-Hierarchy_Tree=Hierarchy Tree +WLayout-Border-LayoutContainer=You have the central and northern border layout containers.You can adjust the height of the northern one +Preference-JDK_Home=JDK Home +Utils-Insert_Column=Insert Column +FR-Designer_ToolBar_Top=Top ToolBar +BindColumn-The_Conditions_of_FatherCell=The Conditions of Parent Cell +Links=Links +M_Report-Report_Header=Report Header +Sub_Report_Description=The sub-report should exist in the runtime environment of its parent, and they can not be the same template +T_Insert-Float=Insert Float Element +BackgroundTexture-FishFossil=Fish Fossil +My_Computer=My Computer +FORMLET=Path parameter when accessing different forms +HF-Undefined=Undefined +Widget-User_Defined_Widget_Config=Predefined control +Report-Write_Attributes_Group_Warning=Number of cells in each field in all cell group must be the same +Form-Single_quote=Single Quote +Compile_Success_And_Then_Save=Compile Successfully And Then Save +FR-Designer_Layout-Padding=Padding +Layout_Container=Layout Container +Admin=Admin +Form-EC_toolbar=Report toolbar +FR-App-All_Auto=Automatic +Utils-Available_Columns=Available Columns +Form-Change_Widget_Name_Discription=Input New Control Name +FR-Module_Designer=Designer module +FR-Import-Export_Text=Text(tab delimited) +Values-Editor=Values Editor +FR-Designer_Yes=Yes +ExpandD-Expandable=Extensibility +Tree-Return_Full_Path=Return full hierarchical path +FRFont-bolditalic=BoldItalic +FR-Base_StyleFormat_Sample=Sample +Area_Value=Area Value +FR-Designer-Plugin_Disable=Disable +Utils-Are_you_sure_to_remove_the_selected_item=Are you sure to remove the selected item +Face_Write=Filling +Poly-Report_Block=Report type aggregation block +Vgap=Vertical gap +FR-Designer_HyperLink_Must_Alone_Reset=HyperLink_Must_Alone_Reset +DS-Class=Class +FR-Hyperlink_Please_Select_Reportlet=Please select webreport +FS_Report_Type=Report Type +HF-New_Line=Line breaks +Privilege=Permission +Export-Offline-Html=Output offline HTML report +FR-Designer_open-new-form-tip=The form is created by the designer older than 711 vision, it cannot be opened. Please use the corresponding designer. +FR-Designer-Widget-Style_Frame_Style=Frame Style +Present-No_Present=Cancel Present Settings +FR-Designer_Form-Password=Password +X_Axis=X Axis +FR-mobile_html_analysis=Html5 analysis +M_Edit-Bring_to_Front=Bring to Top +Null_Value_Show=Show if null +Datasource-JNDI_DES=Note\: .jar files containing INITIAL_CONTEXT_FACTORY need to be copied into the installation directory in the /lib directory +PrintP-Print_Preview=Print Preview +Form-Hierarchy_Tree_Last=Last +Has_been_gone=\ Has been lost,whether to add the style +RWA-Add_Field=Add Field +newNode=add Node +PageSetup-Shrink_to_fit_content=Automatically adjust according to cell content +FR-Designer_Date=Date +Column_Multiple=Line Numbers +FR-App-All_File=File +Sort-Descending=Descending +FR-Designer-Plugin_Delete=Delete +Above=Above Version +Utils-The-Chart=Chart +FRFont-plain=General +Calculating=Calculating +Form-Object=Form Object\: +May=May +FR-Designer_Plugin_Normal_Update=Update +FR-Hyperlink_Reportlet=Webreport +M_Edit-Copy=Copy +Sub_Report_Message2=The parent-report is not in the current runtime environment +Sub_Report_Message3=Can not choose itself +Sub_Report_Message1=Please choose the currect path +Form-Allow_CustomData=Allow custom data +FR-Server_Version_Tip_MoreInfo=Conform the version numbers of FineReport Designer and the deployment server are consistent, in order to avoid the problems caused by inconsistent versions. If you open the template produced by higher designer vision, error may occurs or the original template properties missed. If the Designer Version you used to create the template is higher than the final deployment server version, the server may not be able to properly load the template. +FR-Designer_Server-version-tip-moreInfo=Conform the version numbers of FineReport Designer and the deployment server are consistent, in order to avoid the problems caused by inconsistent versions. If you open the template produced by higher designer vision, error may occurs or the original template properties missed. If the Designer Version you used to create the template is higher than the final deployment server version, the server may not be able to properly load the template. +Get_Lock=Lock +HF-Edit_Footer=Edit page footer +Datasource-New_Charset=New Code +Preference-Custom=Custom +BackgroundTexture-Newsprint=Newsprint +ConditionB-Add_bracket=Add Parentheses +Datasource-Connection_successfully=Connection successfully +Function-The_class_must_implement_the_interface=The class must implement the interface +FR-Designer_ChartF-Transparency=Transparent +Crimson=Crimson +FR-Hyperlink_Dialog=Dialog +FR-Designer_Covered_All=Override All +Hyperlink-New_Window=New Window +Style_Name=Format Name +CSS_warning= \ Relative report project directory like WebReport, if reference a css files named test.css
 in WebReport\\css, then the relative path is css/test.css +FR-Base_Column=Column +Three_Rows_Of_Two_Grid=A grid with 3 rows and 2 columns +DBCP_VALIDATION_QUERY=SQL Validation Query +M_Edit-Clear_Formats=Format +Parameter_Setting=Parameter Setting +Related=Linkage +BorderLayout-Constraints=Placement +Write_Preview=Filling Preview +PageSetup-Page_Order=Print Order +Verify-Verify_Formula=Validation formula +State=State +FR-Designer-Widget-Style_Body_Background=Body Background +FR-App-Privilege_No=No Permission +Please_Drag_ParaPane= +Come_True=Implement +ISEMPTY=Is null +Background-Texture=Texture +FR-Designer_Verify-Message=Wrong Message +Locked=(Locked) +Utils-Design-Action_Cancel=Cancel +Image-Titled=Tile +Gradient-Direction=Gradient Direction +Green=Green +Report_Engine=Report Engine +Return-String=Return String +Margin=Margin +Pitch_Percentage=Space percentage +FR-Base_TurnOff=Turn Off +Utils-has_been_existed=Already exists +HF-Insert_Formula=Insert Formula +Utils-Exit_Designer=Exit Designer +Formula_Dictionary_Display=Every value($$$) in the actual values above, it's display value is +PageSetup-Left_to_right=Over, then down +Utils-Import_Excel_Data=Import Excel Data +M-Save=Save +redo=redo +Status=Status +Draw=Draw +FR-Designer_Message=Message +Records=Records +FR-Designer_ComboBox=Drop-down Boxes +Driver=Driver +Template_Parameters=Template Parameters +Form-Remove_Repeat_Data=Remove Repeated Data +ECP_decode=Report Decryption +Area_Name=Area Name +Others=Others +Merge=Merge +BackgroundTexture-Parchment=Parchment +BindColumn-Bottom_N=Last N +Frame=Frame +Bottom_Border_Line=Bottom Border +Muiti_In=Multi-level Drill-down +FR-Designer-Dependence_Install_Online=install online +Use_Default_ToolBar=Use default toolbar +M_Server-Platform_Manager=Platform Management +PageSetup-inches=inches +Form-Widget_Property=Attribute name +FR-Layout_Padding=Padding +Schema=Theme +Server_Path=Host location +Condition_Display=Condition Display +FR-Server-Design_template_unopened=Can't open the template +Function-Function_Class_Name=Function Class Name +Schedule-Template=Template name +Tree_Data_Field=Tree Data Field +Border-Style-Normal=Rectangular Border +Top_And_Double_Bottom_Border_Line=Top and bottom double border +FR-Server_Embedded_Server_Start=Built-in server-Open +FR-Designer-Basic_Restart_Designer_Later=Restart later +StyleAlignment-Top=Top +ReportServerP-First=First +Not_Exist=Not Exist +FR-Remote_File_is_Locked=Someone else is editing the report, please try later +Apply=Apply +Sytle-Indentation=Indentation +Parameter-Float=Single-precision +HF-Center_Section=Center Section +Form-Double_quotes=Double Quote +M_File-Export-Word=Word +M_File-Export-Text=Text File(tab delimited) +PageSetup-First_Page_Number=Starting page number +Execute=Execute +Task=Task +Custom_Button_Type_Submit=Submit +FR-Designer-Widget_Settings=Control Setting +IS_Need_Password=Need Password +PageSetup-Horizontally=Horizontally +No_Editor_Property_Definition=No Editor Property Definition +Env-Remote_Server=Remote Server +FR-Utils_Background=BG +FR-Designer-Plugin_Warning=Alert +Server-version-info=The current template file is designed by higher vision designer. Open it may result in losing original attributes or error. Please upgrade your designer. +CellWrite-Page_After_Row=After Row +HF-Right_Section=Right Section +PageSetup-Title_Start_Row=Duplicate Title Rows +From=From +Preference-Grid_Line_Color=GridLine Color +RowTo=Row To +FR-Designer_ReportColumns-Repeat_Column=Copy column sequence +M_Server-Function_Manager=Function Manager +KeyWord=KeyWord +DS-Multi_Dimensional_Database=Multi-dimensional Database +BiasD-Slope_Line=Slope Line +Tue=Tue +ReportServerP-Last=Last +FR-Base_Columns=Columns +SpecifiedG-Leave_in_their_own_groups=Leave in their own groups +LOG-Please_Wait=Please Waiting +Form-ToolBar=Form ToolBar +FR-Base_sure_remove_item=Are you sure to delete the selected item +Component_Scale=Component Scale +Hyperlink-Use_CJK_to_encode_parameter=Use CJK to process parameter +LOG-Has_Been_Openned=Report Has Been Openned +FR-Designer-Dependence= +ECP_error_pwd=Password Error +REPORTLET=Parameter of access path to template +RWA-Column_Offset=Column Offset +Forecast=Forecast +Light_Orange=Light orange +StyleAlignment-Vertical=Vert +Form-List=List +ParameterD-Show_Parameter_Window=Show Parameter Panel +FR-Designer_Set_Submit_Event=Set Submit Event +Value_Percent=Value Percentage +DBCP_MIN_EVICTABLE_IDLE_TIMEMILLIS=Keep Min Idle Time Value +Function-The_class_must_be_located_in=The class must be located in +FR-Action_Sort=Sort +DataFunction-Average=Average +FR-Designer_Show_in_Containing_Folder=Open the folders where it stored in +M_File-Export-Excel=Excel +DataFunction-Max=Maximum +FR-Designer_Form-Widget_Name=Control Name +FS_End_Date=End Date +Export-Excel-Simple=Original +ColumnTo=Column TO +SpecifiedG-Discard_all_others=Discard all others +DS-TableData=Data Set +Form-DataTable=DataTable +Sub_Report_ToolTips=Sub Report ToolTips +Right_Top=Upper right +M_Edit-Merge_Cell=Merge Cell +FR-Designer_Restore_Default=Back to default\ +Component_Interval=Components Interval +Cover_None=Override None +Datasource-From_Database=DB table +Folder=Directory +Form-Allow_Edit=Allow Edit +M_Edit-Clear=Clear +ParentCell_Setting=Parent Cell Setting +Only_selected_cell_can_paste_only=Paste when cell is selected +M_Report-Report_Columns=Multi-columns/lines +Unit_Hundred=Hundred +FR-Designer_DataTable-Build= +Widget-Form_Widget_Config=Form control +Server-version-tip-moreInfo=Conform the version numbers of FineReport Designer and the deployment server are consistent, in order to avoid the problems caused by inconsistent versions. If you open the template produced by higher designer vision, error may occurs or the original template properties missed. If the Designer Version you used to create the template is higher than the final deployment server version, the server may not be able to properly load the template. +Actions=Task +FR-Designer-Dependence_Connect_Server_Error=connect error +High=High +HJS-Send_Failed=Send Failed +HJS-Message=Message +File-Allow_Upload_Files=Uploaded files +FR-Designer-Form-ToolBar_Chart=Chart +Thick_Bottom_Border_Line=Thick Bottom Border +FR-Action_Remove=Delete +FRFont-Style=Style +Select_DataColumn=Select Data Column +StartValue=Start Value +SINGLE_FILE_UPLOAD=Only support single file upload +BackgroundTexture-Cork=Cork +M_Format-Data_Map=Data Dictionary +FR-mobile_native_analysis=native analysis +HighLight=High Light +FR-Designer_Dropdown-More-Preview= +local=local +FR-Designer_Gradation=Gradation +PageSetup-Finis_Start_Column=Duplicate Last Column +Env-Invalid_User_and_Password=Invalid User Or Password +FR-Designer-Plugin_All_Plugins=All plugins +FR-Designer_Prepare_Export=Ready to export, please wait +DBCP_TEST_ON_RETURN=Test before Returning Connections +no-alternatives=no alternatives +FR-Designer_Submmit_WClass=Submmit By Custom Class +M_Insert-Slope_Line=Insert Slope Line +FR-Designer-Plugin_Plugin_Description=Description +ExpandD-Not_Expand=No extend +Utils-Bottom_to_Top=From the bottom up +Collect-Click\!_Get_user_information_code=Get Activation Code +FR-Already_exist=Current environment is already exist\: +Send=Send +M_Edit-Clear_All=All +Brown_Orange=Brown Orange +PageSetup-Portrait=Portrait +FR-Designer_Form-RadioGroup=Radio Button Group +FR-Utils-App_AllFiles=All Files +Popup=Popup +Server_Charset=Server code +CellWrite-Repeat_Content_When_Paging=Repeat Content in New Page +Utils-No_Pagination=No Page Break +Form-NullLayout=Absolute positioning +ConditionB-Remove_bracket=Remove Parentheses +email=Email +Minute=Minute +FR-Designer-Plugin_Update=Plugins update +alraedy_close=Already closed +ComboCheckBox-End_Symbol=Terminator +DataColumn=Data Column +Form-Password=Password +FR-Background_Image_Adjust=Adjust Image +Export-Excel-PageToSheet=One Page Per Sheet +Edit-Row_Count=Number of rows +DS-Report_TableData=Report Data Set +Sche-Hour=Hour +Group_Count=Group Count +EndValue=End Value +FR-Designer_Sytle-Indentation=Indentation +DownBarBorderStyleAndColor=Downcolumn Border Style And Color +World=World +FR-Designer-Basic_Cancel=Cancel +Finally=Finally +Low=Low +Please_Input_The_Key=Please Input the key the map use +Smart=Smart +Preference-Predefined=Predefined +Current_custom_global=Custom Global Styles of Current Report +FR-Designer-Plugin_Shop_Need_Install=You are not add-ons store of resources, whether to download? +WEB-Pagination_Setting=Page Break Preview +RCodeDrawPix=PIX +FR-Designer-Widget-Style_Alpha=Opacity +BorderLayout-North=North +HJS-Current_Page=Current Page +Compile=Compile +Show_Blank_Row=Supplement blank line +TableData_Dynamic_Parameter_Setting=Dynamic parameter injections +FR-Background_Image_Default=Default Image +BackgroundTexture-WhiteMarble=White Marble +DataFunction-Sum=Sum +Collect-The_user_information_code_is_invalid=The activation code is invalid, please visit the website to get a new one +Preference-Locale=Internationalization +M_File-Export-PDF=PDF +BiasD-From-lower_left_to_upper_right=lower left-upper right +Border-Style=Border Style +Sort=Sort +Image-Image_Layout=Image Layout +Panel=Panel +FR-Designer-Basic_Copy_Build_NO_OK=Build No. has been copyed +All_Border_Line=All Border +FR-Utils-Please_Input_a_New_Name=Input a New Name +FR-Base_Formula_Plugin=Plugin Function +Two_Rows_Of_Three_Grid=A grid with 2 rows and 3 columns +FR-Designer_Certificate_Pass=Certificate Password\ +Bubble-Series_Name=Series Name +M-New_Multi_Report=New Aggregate Report +BackgroundTexture-PinkTissuePaper=Pink Sandpaper +Preference-Support_Default_Parent_Calculate=Default Parent Grid Calculate +Show_Blank_Column=Supplement blank column +BaiduMap=Baidu Map +Report-Web_Attributes=Web Attributes +FR-Designer_StyleAlignment-Wrap_Text=Word wrap +Need=Need +Parameter-Double=Double-precision +Config_Servlet=Config Remote Server +Form-Comma=Comma +Verify=Validation +PageSetup-Landscape=Landscape +Weeks=Weeks +FR-Designer-Widget-Style_Title_Background=Title Background +Preference-Pagination_Line_Color=Pagination Line Color +Test_URL=Test URL +Fill_blank_Data=Supplement blank data +ReportServerP-The_name_of_printer_cannot_be_null=Printer name cannot be empty +FR-Designer-Basic_Copy_Activation_Key=Double click to copy key to clipboard +Continuum=Proximal continuum +BackgroundTexture-MediumWood=Dark Wood +Datasource-Column_Index=Column Ordinal +Function-Function_File=Function File +Form-Component_Bounds=Component Bounds +Utils-Submit=Submit +Conditions_formula=Condition Formula +M_Insert-Image=Insert Image +FR-Designer-Plugin_Will_Be_Delete=Plugin will be deleted, restart the designer and sever to enable it and the sever need to be manually restarted +FormulaD-Functions=Functions +Mobile_Terminal=Mobile terminal +CheckBox=CheckBox +FR-Designer-Plugin_Install=Install +Sun=Sun +FR-Designer_ToolBar_Bottom=Bottom ToolBar +Widget-Width=Control width +Series_Name=Series name +Set_Row_Title_Start=Set Duplicate Title Rows +HF-Default_Page=Default Page +Env_Des=Username and password must be correspond with sign-on environment, if permissions are enabled +Widget-User_Defined=Predefine +Url_location=Absolute path +Disk_File=Disk File +Inside=Inside +FR-Designer_filedChosen= +ServerM-Predefined_Styles=Predefined Styles +is_need_word_adjust=Word Auto Adjust +Background-Null=No Background +PageSetup-Vertically=Vertically center +FR-Designer_Root=Root node +FR-Designer_Form-TextArea=Text field +ReportServerP-Import_JavaScript=Reference JavaScript +Form-TableTree=Table Tree +Opened=Opened +M_Edit-Delete=Delete +Widget-Form_Widget_Container=Form Container +BindColumn-Summary=Summary +Sche-Second=Second +Server-Open_Service_Manager=Open Service Manager +FRFont-Effects=Special Effects +OtherGroup_Name=The name of other group +Specify=Specify +Highlight-Click_to_Choose_Property_To_Modify=Click to Choose Property to Modify +triggered=triggered +Double_Bottom_BorderLine=Bottom Double Border +M_Insert-Sub_Report=Insert SubReport +Unit_Ten=Ten +Polybolck=Aggregation block +Select_sort_order=Select sort order +HJS-Mail_to=To +StyleAlignment-Left=Left +Two_Rows_Of_Two_Grid=A grid with 2 rows and 2 columns +FR-Designer-Form-Please_Drag_ParaPane=Drag to parameter panel +Milliseconds=Milliseconds +DataFunction-None=None +Delivery=Delivery +ColumnSpan=Column Span +StyleAlignment-Bottom=Bottom +Read_failure=Load failed. Source file may be corrupted +Verify-Verify=Data validation +FR-Designer-Widget-Style_Title_Format=Title Format +FR-Designer_Edit_String_To_Formula=Edit String To Formula +FR-Base_UnSignIn=\ Not Logged In +Every=Every +CellWrite-Preview_Cell_Content=Content of Cell +FormulaD-Data_Fields=Data Items \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index 99070465e..d5d9dac39 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -521,7 +521,6 @@ 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}" \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 @@ -597,3 +596,1390 @@ FR-Designer_Delete_Template=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u3092\u52 FR-Designer_Mobile_Report_Analysis_Annotation=\u8AAC\u660E\:\u8A72\u5F53\u5C5E\u6027\u3088\u308A\u3001\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u306E\u30A2\u30D7\u30EA\u3067\u306E\u89E3\u6790\u30E2\u30FC\u30C9\u3092\u8A2D\u5B9A\u3067\u304D\u307E\u3059\u3001\u9801\u5206\u3051\u30D7\u30EC\u30D3\u30E5\u30FC\u3060\u3051\u3092\u652F\u6301\u3001\u66F8\u304D\u8FBC\u307F\u306B\u8A2D\u5B9A\u3059\u308B\u6642\u7121\u52B9\u306B\u306A\u308A\u307E\u3059\u3002 FR-Designer_DoubleLayer_Report=\u4E8C\u968E\u30BF\u30A4\u30C8\u30EB FR-Designer_Validate=\u691C\u8A3C +CellWrite-InsertRow_NULL=Null\u5024 +DashBoard-ChartFloat=\u30B0\u30E9\u30D5 +contact_info=\u304A\u554F\u3044\u5408\u308F\u305B\u60C5\u5831\uFF08\u4EFB\u610F\uFF09 +Page_Setup=\u30DA\u30FC\u30B8\u8A2D\u5B9A +CellWrite-Print_Export=\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u3092\u5370\u5237 +Cannot_Get_Date=\u65E5\u6642\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093 +FR-Designer_Modify=\u6539\u6B63 +M-Write_Preview=\u5831\u544A\u30D7\u30EC\u30D3\u30E5\u30FC +FR-Base_RWA-Key=\u30E1\u30A4\u30F3\u30AD\u30FC +China=\u4E2D\u56FD +Set_Legend_Sytle=\u51E1\u4F8B\u66F8\u5F0F\u3092\u8A2D\u5B9A +FR-Designer_Number=\u6570\u5B57 +FR-Designer-Widget-Style_Common=\u666E\u901A +M-Save_As=\u540D\u524D\u3092\u3064\u3051\u3066\u4FDD\u5B58 +Following_parameters_are_not_generated=\u4EE5\u4E0B\u306E\u30D1\u30E9\u30E1\u30FC\u30BF\u306F\u751F\u6210\u3055\u308C\u307E\u305B\u3093 +FR-Designer-Basic_Activation_Key_Copy_OK=\u30AF\u30EA\u30C3\u30D7\u30DC\u30FC\u30C9\u306B\u30B3\u30D4\u30FC\u3057\u307E\u3057\u305F +Utils-Current_Sheet=\u30AB\u30EC\u30F3\u30C8\u30B7\u30FC\u30C8 +ConditionB-is_less_than=\u3088\u308A\u5C0F\u3055\u3044 +BorderLayout-West=\u897F\u90E8\u306E +AnalysisLine=\u5206\u6790\u30E9\u30A4\u30F3 +Layer_Report_Warnning_info=\u30E9\u30A4\u30F3\u30A8\u30F3\u30B8\u30F3\u306F\u5927\u30C7\u30FC\u30BF\u91CF\u306E\u72B6\u6CC1\u4E0B\u3067\u9069\u7528\u3055\u308C\u307E\u3059\u3002
+Tree-Width=\u5E45 +alert_word=\u884C\u306E\u9AD8\u3055\u3092\u56FA\u5B9A\u305B\u305A\u5C0E\u51FA\u3092\u9078\u629E\u3057\u305F\u6B73\u3001\u5C0E\u51FA\u3057\u305Fword\u306E\u7DE8\u96C6\u306F\u3001\u30BB +PageSetup-Paper_Size=\u7D19\u30B5\u30A4\u30BA +M-Page_Setup=\u30DA\u30FC\u30B8\u306E\u8A2D\u5B9A +DashBoard-FormBook=\u8868 +X-Coordinate=\u6A2A\u5EA7\u6A19 +Style-Line_Spacing=\u884C\u9593\u9694\u8DDD\u96E2 +FR-Designer_Plugin_Should_Update_Title=Warning +Server-Define_Data_Connection=\u30C7\u30FC\u30BF\u63A5\u7D9A\u5B9A\u7FA9 +BarInside=\u67F1\u5B50\u5185\u4FA7 +Border-Color=\u67A0\u7DDA\u8272 +NotAllow=\u975E\u5408\u6CD5 +Utils-File_type=\u30D5\u30A1\u30A4\u30EB\u30BF\u30A4\u30D7 +FR-Designer-Plugin_Install_From_Local=\u30ED\u30FC\u30AB\u30EB\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3059\u308B +Summary_Method=\u53D6\u308A\u307E\u3068\u3081\u65B9\u6CD5 +Select_Specified_Grouping=\u30AB\u30B9\u30BF\u30DE\u30A4\u30BA\u30B0\u30EB\u30FC\u30D7\u5206\u3051\u3092\u9078\u629E +HF-Number_of_Page=\u7DCF\u30DA\u30FC\u30B8\u6570 +FR-Designer-Tree_Height=\u9AD8\u3055 +Owner=\u30AA\u30FC\u30CA\u30FC +Home=\u30E1\u30A4\u30F3\u30DA\u30FC\u30B8 +FR-Server_Embedded_Server_Stop=\u5185\u8535\u30B5\u30FC\u30D0\u30FC-\u4E00\u6642\u505C\u6B62 +FR-Designer-Plugin_Detecting_Update=\u66F4\u65B0\u3092\u30C1\u30A7\u30C3\u30AF\u3057\u3066\u3044\u307E\u3059 +HF-Whether_to_define_the_selected_type=\u9078\u629E\u3055\u308C\u305F\u30BF\u30A4\u30D7\u3092\u5B9A\u7FA9\u3057\u307E\u3059\u304B +StyleAlignment-Right=\u53F3\u8A70\u3081 +FR-Designer_Alignment-Style=\u30A2\u30E9\u30A4\u30F3\u30E1\u30F3\u30C8 +PageSetup-Title_Start_Column=\u91CD\u8907\u3059\u308B\u6A19\u984C\u5217 +Tree-Mutiple_Selection_Or_Not=\u8907\u6570\u9078\u629E +FR-Designer-Plugin_Search=\u691C\u7D22 +Choose_Role=\u6A29\u9650\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB +Append_Delete_Row_Message=\u6CE8\u610F\uFF01\u6307\u5B9A\u3055\u308C\u305F\u30BB\u30EB\u306F\u3001\u62E1\u5F35\u5C5E\u6027\u3092\u8A2D\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059 +Form-ComboBox=\u30B3\u30F3\u30DC\u30DC\u30C3\u30AF\u30B9 +PageSetup-Footer=\u30DA\u30FC\u30B8\u30D5\u30C3\u30BF\u30FC +Sorting=\u30BD\u30FC\u30C6\u30A3\u30F3\u30B0 +DBCP_TEST_WHILE_IDLE=\u30A2\u30A4\u30C9\u30EB\u30EA\u30B5\u30A4\u30AF\u30EB\u30E6\u30CB\u30C3\u30C8\u691C\u67FB +DS-Embedded_TableData=\u5185\u8535\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8 +FR-Designer_No-Privilege=\u30A2\u30AF\u30BB\u30B9\u304C\u62D2\u5426\u3055\u308C\u307E\u3057\u305F +FRFont-Subscript=\u4E0B\u4ED8\u304D +Background_Settings=\u80CC\u666F\u8A2D\u5B9A +FormulaD-Invalid_Formula=\u7121\u52B9\u306A\u516C\u5F0F +FR-Base_Margin=\u30DE\u30FC\u30B8\u30F3 +FR-Designer-Plugin_Shop_Installed=\u30D7\u30E9\u30B0\u30A4\u30F3\u30B7\u30E7\u30C3\u30D7\u304C\u3059\u3050\u306B\u958B\u59CB\u3059\u308B\u304B\u3069\u3046\u304B\u3001\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3055\u308C\u3066\u3044\u307E\u3059\u304B\uFF1F +M_Edit-Send_to_Back=\u6700\u80CC\u9762\u3078\u79FB\u52D5(K) +Email-Can_Preview_Report_Content=\u30C6\u30AD\u30B9\u30C8\u30D7\u30EC\u30D3\u30E5\u30FC\u30EC\u30DD\u30FC\u30C8\u306E\u5185\u5BB9 +FR-Designer-FRFont_Italic=\u50BE\u659C +CellWrite-Print_Background=\u30BB\u30EB\u80CC\u666F\u3092\u5370\u5237\u3059\u308B +Wizard=\u30A6\u30A3\u30B6\u30FC\u30C9 +Preference-Is_Drag_Permited=\u30C9\u30E9\u30C3\u30B0\u3092\u30B5\u30DD\u30FC\u30C8\u3059\u308B +FR-Designer_Release_Lock=\u30A2\u30F3\u30ED\u30C3\u30AF +Form-Delimiter=\u533A\u5207\u308A\u7B26 +wrong=\u9593\u9055\u3063\u305F +FR-Menu-Server_Chart_PreStyle=\u30B0\u30E9\u30D5\u30D7\u30EC\u5B9A\u7FA9\u914D\u8272 +Form-Button=\u30DC\u30BF\u30F3 +FormulaD-Valid_Formula=\u6709\u52B9\u306A\u516C\u5F0F +ParameterD-Parameter_Interface=\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u30A4\u30F3\u30BF\u30FC\u30D5\u30A7\u30FC\u30B9 +At_least_one_visual_worksheet=\u5C11\u306A\u304F\u3068\u3082\u4E00\u3064\u306E\u30D3\u30B8\u30E5\u30A2\u30EB\u30EF\u30FC\u30AF\u3092\u6301\u3063\u3066\u3044\u308B\u30EF\u30FC\u30AF\u30D6\u30C3\u30AF\u306B\u306F\u3001\u524A\u9664\u3057\u305F\u3044\u5834\u5408\u306F\u3001\u65B0\u3057\u3044\u30EF\u30FC\u30AF\u30B7\u30FC\u30C8\u3092\u633F\u5165\u3057\u3066\u304F\u3060\u3055\u3044 +Need_Min_Value=\u6700\u5C0F\u5024\u304C\u5FC5\u8981 +Allow_Blank=\u7A7A\u6B04\u3042\u308A +CellWrite-InsertRow_DEFAULT=\u30C7\u30D5\u30A9\u30EB\u30C8\u5024\u306F +Widget-Load_By_Complete=\u5B8C\u5168\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9 +FR-Designer-Basic_Only_Submit_Current_Sheet= +Sort-Sort_Order=\u30BD\u30FC\u30C8\u9806 +File-File_Size_Limit=\u30D5\u30A1\u30A4\u30EB\u30B5\u30A4\u30BA\u3092\u5236\u9650\u3059\u308B +PrintP-Print=\u5370\u5237(T) +FR-Designer-StyleAlignment_Center=\u4E2D\u592E\u63C3\u3048 +Preference-Setting_Colors=\u8272\u306E\u8A2D\u5B9A +Judge=\u88C1\u5224\u5B98 +Image-Adjust=\u9069\u5FDC +Collect-User_Information_DES=\u30A2\u30AF\u30C6\u30A3\u30D9\u30FC\u30C8\u30B3\u30FC\u30C9\u306F\u4F7F\u7528\u8005\u60C5\u5831\u306E\u53CE\u96C6\u306E\u305F\u3081\u3060\u3051\u306B\u7528\u3044\u3089\u308C\u307E\u3059\u3002\u4E0A\u306E\u300C\u30A2\u30AF\u30C6\u30A3\u30D9\u30FC\u30C8\u30B3\u30FC\u30C9\u53D6\u5F97\u300D\u3092\u30AF\u30EA\u30C3\u30AF\u3059\u308B\u3068\u3001\u65B0\u305F\u306A\u30A6\u30A3\u30F3\u30C9\u30A6\u304C\u73FE\u308C\u307E\u3059\u3002\u88FD\u54C1 +FR-Designer_Plugin_Normal_Update_From_Local=\u30ED\u30FC\u30AB\u30EB\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u66F4\u65B0 +BackgroundTexture-Canvas=\u30AD\u30E3\u30F3\u30D0\u30B9 +BarOutSide=\u5916\u306E\u67F1 +Preview_ToolTips=\u30D7\u30EC\u30D3\u30E5\u30FC\u63D0\u793A +FRFont-Family=\u540D\u79F0 +FR-Lic_does_not_Support_Remote=\u73FE\u5728\u4F7F\u7528\u3057\u3066\u3044\u308Blic\u306F\u9060\u9694\u30C7\u30B6\u30A4\u30F3\u6A5F\u80FD\u306B\u30B5\u30DD\u30FC\u30C8\u3057\u3066\u3044\u307E\u305B +InterfaceStyle=\u30B9\u30BF\u30A4\u30EB +RWA-Key=\u4E3B\u30AD\u30FC +WF-Name=\u540D\u79F0 +RWA-Click_Cell_To_Edit_Value=\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u30BB\u30EB\u4FEE\u6B63\u5024 +Utils-Row_Height=\u884C\u306E\u9AD8\u3055 +ReportD-Excel_Export=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u5C0E\u51FA\u5C5E\u6027 +Form-Please_Select_A_Kind_Of_Form_Container=\u4E00\u7A2E\u306E\u8868\u30B3\u30F3\u30C6\u30CA\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044 +Column_Does_Not_Exsit=\u5217\u304C\u5B58\u5728\u3057\u307E\u305B\u3093 +M_Insert-Hyperlink=\u30CF\u30A4\u30D1\u30FC\u30EA\u30F3\u30AF +can_not_include_underline=_\u3092\u542B\u3081\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093 +FR-Designer-Plugin_Jar_Expired=\u65E7Jar\u30D1\u30C3\u30AF +FR-Background_Image_Extend=\u62E1\u5F35 +TopDownShade=\u30B0\u30E9\u30C7\u30FC\u30B7\u30E7\u30F3\u30C0\u30A6\u30F3 +FR-Base_Right=\u53F3 +DataBinding=\u30C7\u30FC\u30BF\u30D0\u30F3\u30C7\u30A3\u30F3\u30B0 +ConnectionPool_Attr=\u63A5\u7D9A\u30D7\u30FC\u30EB\u5C5E\u6027 +Connect_SQL_Cannot_Null=\u30C7\u30FC\u30BF\u63A5\u7D9A\u3068SQL\u30D1\u30CD\u30EB\u306F\u7A7A\u306B\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093 +DBCP_MAX_ACTIVE=\u6700\u5927\u30A2\u30AF\u30C6\u30A3\u30D6\u63A5\u7D9A\u6570 +M_Window-Preference=\u30AA\u30D7\u30B7\u30E7\u30F3 +ToolBar_Top=\u30D8\u30C3\u30C0\u30FC\u30C4\u30FC\u30EB\u30D0\u30FC +FR-Designer_Indent-Pixel=\u753B\u7D20 +FR-Designer_Unit_MM=\u30DF\u30EA\u30E1\u30FC\u30C8\u30EB +IDLE=\u30A2\u30A4\u30C9\u30EB +FRFont-Underline=\u4E0B\u7DDA +FR-Designer-Plugin_Read_Plugin_List_Error=\u30D7\u30E9\u30B0\u30A4\u30F3\u30EA\u30B9\u30C8\u306E\u8AAD\u307F\u53D6\u308A\u6642\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E +Type_Set=\u30BF\u30A4\u30D7\u8A2D\u5B9A +M_Format_A-Cell_Attributes=\u305D\u306E\u4ED6\u5C5E\u6027 +CellWrite-Show_As_Image=\u753B\u50CF\u3067\u5185\u5BB9\u3092\u8868\u793A +ShowAsDownload=\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u30EA\u30F3\u30AF\u3067\uFF12\u9032\u6CD5\u306E\u5185\u5BB9\u3092\u8868\u793A +Form-ComboCheckBox=\u30C1\u30A7\u30C3\u30AF\u30DC\u30C3\u30AF\u30B9 +BackgroundTexture-WovenMat=\u7E54\u7269 +BindColumn-Custom_Data_Appearance=\u30E6\u30FC\u30B6\u30FC\u5B9A\u7FA9\u306F\u8868\u793A\u3059\u308A\u307E\u3059 +Actived=\u6D3B\u52D5\u7684 +Env-Local_Directory=\u30ED\u30FC\u30AB\u30EB\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA +Form-Colon=\u30B3\u30ED\u30F3 +Preference-Vertical_Scroll_Bar_Visible=\u7E26\u30B9\u30AF\u30ED\u30FC\u30EB\u30D0\u30FC\u306F\u53EF\u8996 +Utils-Show_Cell_Value=\u30BB\u30EB\u5024\u3092\u8868\u793A +FR-Designer_ReportColumns-Repeat_Row=\u884C\u9806\u5E8F\u3092\u30B3\u30D4\u30FC +SpecifiedG-Specified_Group=\u30B0\u30EB\u30FC\u30D4\u30F3\u30B0\u306E\u30E6\u30FC\u30B6\u5B9A\u7FA9 +RWA-Smart_Add_Cells=\u30A4\u30F3\u30C6\u30EA\u30B8\u30A7\u30F3\u30C8\u8FFD\u52A0\u30BB\u30EB +HF-Left_Section=\u5DE6\u5074\u30BB\u30AF\u30B7\u30E7\u30F3 +M_Report-Report_Background=\u5E33\u7968\u80CC\u666F +Image-Extend=\u62E1\u5F35 +FS_BI=\u51B3\u7B56\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0 +ToolBar_Bottom=\u30D5\u30C3\u30BF\u30FC\u30C4\u30FC\u30EB\u30D0\u30FC +Hgap=\u6C34\u5E73\u9593\u9699 +FR-Designer_Enter-New-FileName=\u65B0\u3057\u3044\u30D5\u30A1\u30A4\u30EB\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044 +Verify_Fail=\u70B9\u691C\u306B\u5931\u6557\u3057\u307E\u3057\u305F +CellWrite-InsertRow_Policy=\u884C\u6226\u7565\u3092\u633F\u5165 +FR-Designer-Plugin_Illegal_Plugin_Zip=\u5408\u6CD5\u7684\u306A\u30D7\u30E9\u30B0\u30A4\u30F3\u30D1\u30C3\u30AF\u3067\u306F\u3042\u308A\u307E\u305B\u3093 +RCodeVersion=\u30D0\u30FC\u30B8\u30E7\u30F3 +Convert=\u5909\u63DB +Please_Drag=\u884C\u5217\u30D5\u30A3\u30FC\u30EB\u30C9\u3001\u53D6\u308A\u307E\u3068\u3081\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u5F15\u3063\u8FBC\u3081\u3066\u304F\u3060\u3055\u3044 +FR-Designer-Widget-Style_Preview=\u30D7\u30EC\u30D3\u30E5\u30FC +mobile_number=\u643A\u5E2F\u96FB\u8A71\u756A\u53F7 +FR-Designer_Form-ComboCheckBox=\u30C1\u30A7\u30C3\u30AF\u30DC\u30C3\u30AF\u30B9 +CacheValidateTime=\u5E33\u7968\u30AD\u30E3\u30C3\u30B7\u30F3\u30B0\u6709\u52B9\u6642\u9593 +Hyperlink-Extends_Report_Parameters=\u5E33\u7968\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u3092\u7D99\u627F\u3059\u308B +FR-Designer_Values-Editor=\u5024\u30A8\u30C7\u30A3\u30BF +Export-Excel=Excel +Utils-Left_to_Right=\u5DE6\u304B\u3089\u53F3\u3078 +ExpandD-Vertical_Extendable=\u7E26\u5E83\u304C\u308B +Utils-Report_Runtime_Env=\u5E33\u7968\u4F5C\u696D\u76EE\u6B21 +Utils-Right_to_Left=\u53F3\u304B\u3089\u5DE6\u3078 +Utils-Beyond_the_top_side_of_Border=\u4E0A\u30DC\u30FC\u30C0\u30FC\u8D85\u3048 +Exception_StackTrace=\u30A8\u30E9\u30FC\u7570\u5E38\u30B9\u30BF\u30C3\u30AF\u60C5\u5831 +Corresponding_Fields=\u5BFE\u5FDC\u3059\u308B\u30D5\u30A3\u30FC\u30EB\u30C9 +Form-CheckBox=\u30D5\u30EC\u30FC\u30E0\u3092\u8907\u6570\u9078\u629E +Utils-Current_Row=\u30AB\u30EC\u30F3\u30C8\u884C +BuildIn=\u5185\u8535 +BindColumn-Results_Filter=\u7D50\u679C\u30BB\u30C3\u30C8\u306E\u30D5\u30A3\u30EB\u30BF +FR-Designer-Plugin_Manager=\u30D7\u30E9\u30B0\u30A4\u30F3\u7BA1\u7406 +M_File-Export-CSV=CSV\u66F8\u5F0F(\u30B3\u30F3\u30DE\u3067\u5206\u5272) +Data_Filter=\u30C7\u30FC\u30BF\u9078\u5225 +ReportServerP-Edit_Printer=\u30D7\u30EA\u30F3\u30BF\u30FC\u7DE8\u96C6 +FR-Designer_Datasource-Stored_Procedure=\u30B9\u30C8\u30A2\u30C9 \u30D7\u30ED\u30B7\u30FC\u30B8\u30E3 +RESTART=\u518D\u8D77\u52D5 +FormulaD-Function_name=\u95A2\u6570\u540D +ChooseOneButton=\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u3092\u4E00\u3064\u9078\u629E\u3057\u3066\u304B\u3089\u8FFD\u52A0\u3057\u3066\u304F\u3060\u3055\u3044 +Priority=\u512A\u5148\u30E9\u30F3\u30AF +Datasource-Datasource=\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9 +FR-Designer_Width=\u5E83\u3055 +Cannot-Add_To_This_Area=\u5730\u57DF\u306B\u306F\u8FFD\u52A0\u3067\u304D\u307E\u305B\u3093 +Run=\u904B\u884C +Set_Submit_Condition=\u6761\u4EF6\u3092\u8A2D\u7F6E\u306B\u63D0\u51FA\u3059\u308B\u3053\u3068\u306B\u3057\u305F +FR-Base_Value=\u5024 +fileLocked_undeleted=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u304C\u30ED\u30C3\u30AF\u3055\u308C\u3066\u3044\u308B\u3001\u3042\u306A\u305F\u304C\u524A\u9664\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\uFF01 +Web_Apply=WEB\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3 +Refresh_Database=\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u5237\u65B0 +Set_Row_Title_End=\u91CD\u8907\u3059\u308B\u7D42\u4E86\u884C\u3092\u8A2D\u5B9A +FR-Utils-New_Folder=\u30D5\u30A1\u30A4\u30EB\u65B0\u898F\u4F5C\u6210 +BiasD-From-upper_left_to_lower_right=\u5DE6\u4E0A\u5074\u304B\u3089\u53F3\u4E0B\u5074\u3078\u5E83\u304C\u308B +CapsLock=Caps Lock\u30AD\u30FC\u304C\u30AA\u30F3\u306B\u306A\u3063\u3066\u3044\u308B +StyleFormat-Sample=\u4F8B +RWA-Smart_Add_Cell_Group=\u30A4\u30F3\u30C6\u30EA\u30B8\u30A7\u30F3\u30C8\u6DFB\u52A0\u30EC\u30A4\u30E4\u30FC\u7D44 +MConfig-CancelButton=\u30AD\u30E3\u30F3\u30BB\u30EB +Function-Choose_Function_Class=\u95A2\u6570\u30AF\u30E9\u30B9\u3092\u9078\u629E\u3059\u308B +LatLng=\u5EA7\u6A19 +DS-Server_TableData=\u30B5\u30FC\u30D0\u30FC\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8 +BackgroundTexture-GreenMarble=\u7DD1\u8272\u306E\u5927\u7406\u77F3 +read_time_out=\u30ED\u30FC\u30C9\u306E\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8 +JavaScript-Commit_to_Database=\u5165\u5EAB\u63D0\u51FA +DS-Relation_TableData=\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u95A2\u9023\u4ED8\u3051 +CellWrite-Page_Before_Row=\u884C\u524D\u306E\u6539\u9801 +FR-Designer-Plugin_Load_Plugins_From_Server=\u30D7\u30E9\u30B0\u30A4\u30F3\u30DE\u30FC\u30B1\u30C3\u30C8\u304B\u3089\u30C7\u30FC\u30BF\u53D6\u5F97\u4E2D +D-Dispaly_Divide_Result_Set_into_Groups=resultset\u306E\u30B0\u30EB\u30FC\u30D7\u5206\u3051 +Closed=\u9589\u9396\u6E08\u307F +RWA-Help=\u8A2D\u7F6E\u5F8C\u306E\u6539\u6B63\u3092\u66F4\u65B0\u3057\u306A\u3044\u3068\u3001\u7533\u544A\u30D7\u30EC\u30D3\u30E5\u30FC\u30EC\u30DD\u30FC\u30C8\u306B\u8A18\u9332\u3055\u308C\u3066\u3044\u306A\u3044\u6240\u5728\u30EC\u30A4\u30E4 +FR-Designer-Widget-Style_Custom= +FR-Designer-Widget-Style_Render_Style=\u307C\u304B\u3057\u30B9\u30BF\u30A4\u30EB +Highlight-Barcode=\u30D0\u30FC\u30B3\u30FC\u30C9 +FR-Designer_Connect_SQL_Cannot_Null=\u30C7\u30FC\u30BF\u63A5\u7D9A\u3068SQL\u30D1\u30CD\u30EB\u306F\u7A7A\u306B\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093 +trigger=\u6A19\u984C +M-Data_Analysis=\u30C7\u30FC\u30BF\u5206\u6790 +Function-The_selected_file_cannot_be_null=\u9078\u629E\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u306F\u7A7A\u5024\u306B\u306A\u3063\u3066\u306F\u3044\u3051\u307E\u305B\u3093 +No-Privilege=\u30A2\u30AF\u30BB\u30B9\u304C\u62D2\u5426\u3055\u308C\u307E\u3057\u305F +ReportColumns-Repeat_Column=\u5217\u756A\u53F7\u306E\u7E70\u308A\u8FD4\u3057 +SecondGraduationUnit=\u4E8C\u6B21\u7684\u76EE\u76DB\u308A\u5358\u4F4D +Form-Widget_Property_Value=\u5C5E\u6027\u5024 +GIVE-NAME=\u547D\u540D +FR-Designer_Rename=\u540D\u79F0\u306E\u5909\u66F4 +Utils-Merge_Cell=\u30BB\u30EB\u3092\u7D50\u5408\u3059\u308B +Style-Spacing_After=\u6BB5\u5F8C +Enlarge_Or_Reduce=\u30BA\u30FC\u30E0 +Tree-Height=\u9AD8\u3055 +RCodeErrorCorrect=\u30A8\u30E9\u30FC\u8A02\u6B63 +Enter-New-FileName=\u65B0\u3057\u3044\u30D5\u30A1\u30A4\u30EB\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044 +try_resending=\u30C8\u30EA\u30AC\u30FC\u3055\u308C\u308B +M-Open_Report=\u3092\u958B\u304F... +Please_Select=\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044 +InRow=\u884C(R) +Form-TextArea=\u6587\u66F8\u57DF +FR-Designer_Https_Enable=https\u4F7F\u7528\u958B\u59CB +Widget-Custom_Widget_Config=\u30AB\u30B9\u30BF\u30DE\u30A4\u30BA\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB +already_exists=\u3053\u3053\u306F\u3059\u3067\u306B\u5B58\u5728\u3057\u3066\u3044\u307E\u3059 +Original_Marked_Filed=\u521D\u671F\u30BF\u30B0\u30D5\u30A3\u30FC\u30EB\u30C9 +BackgroundTexture-Sand=\u7802\u6D5C +Values=\u5024 +Not_use_a_cell_attribute_table_editing=\u3042\u306A\u305F\u304C\u7DE8\u96C6\u3059\u308B\u30BB\u30EB\u306E\u5C5E\u6027\u30C6\u30FC\u30D6\u30EB\u3092\u4F7F\u7528\u3059\u308B\u3053\u3068 +Root=\u30EB\u30FC\u30C8\u30CE\u30FC\u30C9 +cycle=\u5468\u671F +open-new-form-tip=711\u4EE5\u4E0B\u306E\u751F\u7523\u306E\u305F\u3081\u306E\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u306E\u73FE\u5728\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u306F\u3001\u4E92\u63DB\u6027\u304C\u306A\u3044\u3068 +Support-Current_Auto_Complete_Shortcut=\u73FE\u5728\u306E\u30B7\u30E7\u30FC\u30C8\u30AB\u30C3\u30C8\u30AD\u30FC +GROUPING_MODE=\u666E\u901A\u30B0\u30EB\u30FC\u30D7\u5206\u3051 +DBCP_MAX_IDLE=\u6700\u5927\u30A2\u30A4\u30C9\u30EB\u63A5\u7D9A\u6570 +BackgroundTexture-BlueTissuePaper=\u9752\u3044\u30B5\u30F3\u30C9\u30DA\u30FC\u30D1\u30FC +ReportD-Export_Hided_Row=\u96A0\u3057\u305F\u884C\u3092\u5C0E\u51FA +FR-Custom_styles_lost=\u30AB\u30B9\u30BF\u30DE\u30A4\u30BA\u30B9\u30BF\u30A4\u30EB\u306F\u5931\u308F\u308C\u307E\u3057\u305F +Env-Des2=Servlet\u306E\u4F4D\u7F6E\u306F\u30DB\u30B9\u30C8\u30B3\u30F3\u30D4\u30E5\u30FC\u30BF\u540D\u3001\u30A4\u30F3\u30BF\u30FC\u30D5\u30A7\u30A4\u30B9\u3001WEB\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u3001 +Env-Des1=\u5E33\u7968\u30B5\u30FC\u30D0\u30FC\u304C\u3042\u308BWEB-INF\u76EE\u6B21\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044 +PageSetup-Placement_Center_on_Page=\u4E2D\u592E\u63C3\u3048 +sure_to_delete=\u524A\u9664\u3092\u78BA\u8A8D\u3057\u307E\u3059 +Already_exists_not_add_repeat=\u3059\u3067\u306B\u5B58\u5728\u3057\u3066\u3044\u308B\u3001\u30EA\u30D4\u30FC\u30C8\u3092\u8FFD\u52A0\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044 +Axis_Title=\u8EF8\u306E\u8868\u984C +FR-Designer-Plugin_Install_Failed=\u30D7\u30E9\u30B0\u30A4\u30F3\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u306B\u5931\u6557\u3057\u307E\u3057\u305F +FR-Designer-Widget-Style_Frame=\u30D5\u30EC\u30FC\u30E0 +MainGraduationUnit=\u4E3B\u306A\u76EE\u76DB\u308A\u5358\u4F4D +Second_Axis=\u6B21\u5EA7\u6A19\u8EF8 +Classifier-Ge=\u500B +MSBold=\u5FAE\u8EDF\u96C5\u9ED2 +Form-Design_Size=\u30C7\u30B6\u30A4\u30F3\u30B5\u30A4\u30BA +FR-App-Template_Save=\u4FDD\u5B58 +ExpandD-Horizontal_Extendable=\u6A2A\u5E83\u304C\u308B +RP_Authority_Edit=\u6A29\u9650\u7DE8\u96C6 +Warnning=\u30EA\u30DE\u30A4\u30F3\u30C9 +RoleName_Can_Not_Be_Null=\u5F79\u5272\u540D\u306F\u7A7A\u6B04\u306B\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u305A\u3001\u91CD\u8907\u3059\u308B\u3053\u3068\u3082\u3067\u304D\u307E\u305B\u3093 +Application=\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3 +Formula_Dictionary_Display_Examples_Html=\u5B9F\u969B\u5024\u7BC4\u56F2\u306F\ +ECP-error_pwd=\u30D1\u30B9\u30EF\u30FC\u30C9\u30A8\u30E9\u30FC +FR-Hyperlink_ChartHyperlink=\u30B0\u30E9\u30D5\u30CF\u30A4\u30D1\u30FC\u30EA\u30F3\u30AF +M_Edit-FormatBrush=\u66F8\u5F0F\u30D6\u30E9\u30B7(B) +Indent-Pixel=\u753B\u7D20 +FR-Designer-Widget-Style_Border_Line=\u30D5\u30EC\u30FC\u30E0\u592A\u3055 +Widget-Default_Widget_Config=\u57FA\u672C\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB +Version-does-not-support=\u73FE\u5728\u4F7F\u7528\u3057\u3066\u3044\u308Blic\u306F\u9060\u9694\u30C7\u30B6\u30A4\u30F3\u6A5F\u80FD\u306B\u30B5\u30DD\u30FC\u30C8\u3057\u3066\u3044\u307E\u305B\u3093\u3002 +StyleAlignment-Right_To_Left=\u53F3\u304B\u3089\u5DE6\u3078 +Style-Spacing_Before=\u6BB5\u524D +Has_Existed=\u3059\u3067\u306B\u5B58\u5728\u3057\u3066\u3044\u307E\u3059 +FR-Designer_DisplayNothingBeforeQuery=\u30EC\u30DD\u30FC\u30C8\u304C\u8868\u793A\u3055\u308C\u307E\u305B\u3093\u524D\u306B\u5185\u5BB9\u3092\u78BA\u8A8D\u3059\u308B]\u3092\u30AF\u30EA +Still=\u4F9D\u7136\u3068\u3057\u3066 +JS_WARNING2=\ \u4F8B\uFF1Ahttp\://localhost\:8075/WebReport/demo.js +JS_WARNING1= \u76F8\u5BFE\u7684\u5E33\u7968\u5DE5\u7A0B\u306EWebReport\u306E\u76EE\u6B21\u304C\u3001WebReport\\js\u4E0B\u306B\u5F15\u7528\u3059\u308Bjs +Connectionline=\u63A5\u7D9A\u30EF\u30A4\u30E4\u30E2\u30C7\u30EB +Utils-Insert_Record=\u8A18\u9332\u633F\u5165 +Set-Parameter-Name=\u307E\u305A\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u540D\u3092\u8A2D\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044 +More-information=\u8A73\u7D30\u60C5\u5831 +Parameter-Boolean=\u8AD6\u7406\u578B +FRFont-Strikethrough=\u53D6\u308A\u6D88\u3057\u7DDA +Server-version-tip=\u3042\u306A\u305F\u306F\u3001\u73FE\u5728\u3001\u3042\u306A\u305F\u306F\u3044\u304F\u3064\u304B\u306E\u30D7\u30ED\u30D1\u30C6\u30A3\u304C\u52B9\u679C\u7684\u306B\u4FDD\u5B58\u3059\u308B\u3053\u3068\u304C +Form-All_Files=\u5168\u3066\u306E\u30D5\u30A1\u30A4\u30EB +DBCP_NUM_TEST_PER_EVCTION_RUN=\u30A2\u30A4\u30C9\u30EB\u63A5\u7D9A\u30EA\u30B5\u30A4\u30AF\u30EB\u691C\u67FB\u6570 +FR-Designer-FRFont_Family=\u540D\u524D +Device=\u8A2D\u5099 +M_Insert-Cell=\u30BB\u30EB\u8981\u7D20 +Present-Formula_Present=\u516C\u5F0F\u30D5\u30A9\u30EB\u30E0 +FRFont-Superscript=\u4E0A\u4ED8\u304D +CellWrite-Page_Before_Column=\u5217\u524D\u306E\u6539\u9801 +Golden=\u30B4\u30FC\u30EB\u30C7\u30F3 +Preference-Support_Cell_Editor_Definition=\u30BB\u30EB\u30A8\u30C7\u30A3\u30BF\u30FC\u3092\u30B5\u30DD\u30FC\u30C8\u3059\u308B +M-Page_Preview=\u30DA\u30FC\u30B8\u5225\u30D7\u30EC\u30D3\u30E5\u30FC +HJS-CC_to=CC +Tree-Select_Leaf_Only=\u8449\u30CE\u30FC\u30C9\u306B\u623B\u308B +Pointer-A-Tick-Order=\u30DD\u30A4\u30F3\u30BF\u5024\u3068\u76EE\u76DB\u308A\u5024\u306E\u6570\u91CF\u30E9\u30F3\u30AF +Pink=\u30D4\u30F3\u30AF +StyleAlignment-Distibuted=\u5747\u7B49\u5272\u308A\u4ED8\u3051 +Odd=\u5947\u6570 +already-saved=\u4FDD\u5B58\u3055\u308C\u3066\u3044\u308B +FR-Hyperlink_Chart_Cell=\u30B0\u30E9\u30D5\u30CF\u30A4\u30D1\u30FC\u30EA\u30F3\u30AF-\u9023\u52D5\u30BB\u30EB +Style-Left_Indent=\u5DE6\u30A4\u30F3\u30C7\u30F3\u30C8 +Offline=\u79BB\u7EBF +Form-Hierarchy_Tree_Next=\u6B21 +Needle=\u30DD\u30A4\u30F3\u30BF +GoogleMap=Google\u30DE\u30C3\u30D7 +Running=\u904B\u884C\u4E2D +M_Edit-Unmerge_Cell=\u30BB\u30EB\u3092\u5206\u5272\u3059\u308B +Out_Border_Line=\u5916\u5074\u30D5\u30EC\u30FC\u30E0\u30E9\u30A4\u30F3 +Style-Spacing=\u9593\u9694\u8DDD\u96E2 +FR-Utils_Submit=\u63D0\u51FA +ReportServerP-Previous=\u524D\u30DA\u30FC\u30B8 +StyleAlignment-Text_Style=\u30C6\u30AD\u30B9\u30C8\u30B9\u30BF\u30A4\u30EB +RelatedChart=\u30B0\u30E9\u30D5\u9023\u52D5 +ProcessManager=\u30D7\u30ED\u30BB\u30B9\u7BA1\u7406 +Cancel_Repeat_Attributes=\u30EA\u30D4\u30FC\u30C8\u30E9\u30F3\u30AF\u3092\u30AD\u30E3\u30F3\u30BB\u30EB\u3059\u308B\u306B\u306F +FR-App-File_Message=\u60C5\u5831 +Datasource-Stored_Procedure=\u30B9\u30C8\u30A2\u30C9 \u30D7\u30ED\u30B7\u30FC\u30B8\u30E3 +RWA-Row_Offset=\u884C\u30AA\u30D5\u30BB\u30C3\u30C8 +M_Format-Style=\u30B9\u30BF\u30A4\u30EB +detail_description=\u8A73\u7D30\u306A\u8AAC\u660E +FR-Designer-Widget-Style_Title_Content=\u6A19\u984C\u5185\u5BB9 +ParameterD-Report_Parameter=\u5E33\u7968\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC +HF-Edit_Header=\u30D8\u30C3\u30C0\u7DE8\u96C6 +Sytle-FRFont=\u30D5\u30A9\u30F3\u30C8 +FR-Designer_Finish_Export=\u5C0E\u51FA\u5B8C\u4E86 +MultiFileUpload=\u8907\u6570\u30D5\u30A1\u30A4\u30EB\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9 +HF-Page_Number=\u30DA\u30FC\u30B8\u756A\u53F7 +Style-Right_Indent=\u53F3\u30A4\u30F3\u30C7\u30F3\u30C8 +Desktop=\u30C7\u30B9\u30AF\u30C8\u30C3\u30D7 +FR-Server-All_Error=\u30A8\u30E9\u30FC +ConditionB-Operator=\u64CD\u4F5C +Today=\u4ECA\u65E5 +Form-Widget_Name=\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u540D +Covered_All=\u5168\u3066\u8986\u3046 +Day=\u65E5 +External=\u5916\u90E8 +Black_Font=\u592A\u5B57 +LOG-Report_Server_IS_Started=\u5E33\u7968\u30B5\u30FC\u30D0\u30FC\u3082\u3046\u8D77\u52D5\u3055\u308C\u3066\u3044\u307E\u3059 +Tips\:You_Can_Input_B1_To_Input_The_Data_Of_The_First_Row_Second_Column=\u30D2\u30F3\u30C8\:B1\u3092\u5165\u529B +FR-Designer_ChooseOneButton=\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u3092\u4E00\u3064\u9078\u629E\u3057\u3066\u304B\u3089\u8FFD\u52A0\u3057\u3066\u304F\u3060\u3055\u3044 +Widget-Sizing=\u5927\u304D\u3055\u8ABF\u6574 +NO_Border_Line=\u30D5\u30EC\u30FC\u30E0\u30E9\u30A4\u30F3\u7121\u3057 +Cell_Data=\u30BB\u30EB\u30C7\u30FC\u30BF +StyleAlignment-Vertical_Text=\u6587\u5B57\u3092\u7E26\u306B\u3059\u308B +Label=\u30BF\u30B0 +Orange=\u30AA\u30EC\u30F3\u30B8 +zeroMarginWarn=\u30D7\u30EA\u30F3\u30BF\u306F\u5C0F\u3055\u306A\u7F36
\u30B3\u30F3\u30C6\u30F3\u30C4\u4E0D\u8DB3\u3092\u5370\u5237\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u3001\u7269\u7406\u30DE\u30FC\u30B8\u30F3 +Widget-Date_Selector_Return_Type=\u623B\u308A\u5024\u30BF\u30A4\u30D7 +Utils-Switch_To_Template_Reportlet=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u5E33\u7968\u306B\u5207\u308A\u66FF\u3048 +satisfy=\u6761\u4EF6\u3092\u6E80\u305F\u3059 +FR-Designer_WidgetDisplyPosition=\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u8868\u793A\u4F4D\u7F6E +FR-Base_Top=\u4E0A +FR-Designer_Form-CheckBox=\u30D5\u30EC\u30FC\u30E0\u3092\u8907\u6570\u9078\u629E +Reportlet-Parameter_Type=\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u4F1D\u9054\u65B9\u6CD5 +sending=\u9001\u4FE1\u4E2D... +FR-Designer-FRFont_Foreground=\u8272 +FR-Import-Export_SVG=SVG\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8 +M_Edit-Clear_Contents=\u5185\u5BB9(C) +Session=\u30BB\u30C3\u30B7\u30E7\u30F3 +Widget-Load_Type=\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9 +template_unsaved=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u304C\u4FDD\u5B58\u3067\u304D\u306A\u3044 +check_communication=\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u901A\u4FE1\u304C\u6B63\u5E38\u3067\u3042\u308A\u3001\u30B5\u30FC\u30D0\u304C\u52D5\u4F5C\u3057\u3066\u3044\u308B\u3053\u3068\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060 +List-Need_Head=\u30EA\u30B9\u30C8\u30D8\u30C3\u30C9\u304C\u5FC5\u8981\u3067\u3059 +FR-Designer-Plugin_Has_Been_Installed=\u30D7\u30E9\u30B0\u30A4\u30F3\u306F\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u30D7\u30E9\u30B0\u30A4\u30F3\u3092 +FR-Widget_Tree_And_Table=\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u30C4\u30EA\u30FC\u3068\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u8868 +FR-Base_Help=\u30D8\u30EB\u30D7 +FR-Designer-Plugin_Update_Successful=\u30D7\u30E9\u30B0\u30A4\u30F3\u30A2\u30C3\u30D7\u30B0\u30EC\u30FC\u30C9\u306B\u6210\u529F\u3057\u307E\u3057\u305F\u3002\u30B5\u30FC\u30D0\u30FC\u3092 +August=\u516B\u6708 +LOG-Is_Being_Openned=\u958B\u3044\u3066\u3044\u307E\u3059 +BackgroundTexture-Oak=\u30AA\u30FC\u30AF +Multi_nam_formula=\ \u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u540D\: \u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u6761\u4EF6\: +TurnOn=\u8D77\u52D5 +HJS-Send_Successfully=\u9001\u4FE1\u6210\u529F +Mon=\u6708 +Inner_Parameter=\u5185\u8535\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC +Required=\u8A18\u5165\u5FC5\u9808 +Summary=\u6982\u8981 +template_unopened=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u3092\u958B\u304F\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093 +FR-Base_Bottom=\u4E0B +DataFunction-Min=\u6700\u5C0F\u5024 +StyleFormat-Percent=\u30D1\u30FC\u30BB\u30F3\u30C6\u30FC\u30B8 +FR-App-All_Custom=\u30AB\u30B9\u30BF\u30DE\u30A4\u30BA +M_Insert-Data_Column=\u30C7\u30FC\u30BF\u5217 +PLEASE=\u3057\u3066\u304F\u3060\u3055\u3044 +Numbers=\u6841\u6570 +Release_Lock=\u30A2\u30F3\u30ED\u30C3\u30AF +Background-Background_is_NULL=\u80CC\u666F\u306A\u3057 +FR-Designer_Sytle-FRFont=\u30D5\u30A9\u30F3\u30C8 +Gradation=\u69CB\u6210 +The_current_list_is_empty=\u73FE\u5728\u306E\u30EA\u30B9\u30C8\u306F\u7A7A\u3067\u3059 +Formula_Dictionary_Display_Examples=\ \u5B9F\u969B\u5024\u7BC4\u56F2\u306F\ +Schedule-Template_Parameter=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC +JSShow=\u52D5\u614B\u8868\u793A +Level_coordinates=\u30EC\u30D9\u30EB\u306E\u5EA7\u6A19 +MainGraduationLine=\u30E1\u30A4\u30F3\u30B9\u30B1\u30FC\u30EB\u30E9\u30A4\u30F3 +Hyperlink-Web_link=\u30A6\u30A7\u30D6\u30EA\u30F3\u30AF +StyleAlignment-between_-90_and_90=-90\u304B\u308990\u307E\u3067\u306E\u7BC4\u56F2\u3067 +FormulaD-Custom_Function=\u30E6\u30FC\u30B6\u5B9A\u7FA9\u95A2\u6570 +FR-Designer_Integer=\u6574\u6570 +PageSetup-Finis_Start_Row=\u91CD\u8907\u3059\u308B\u7D42\u4E86\u884C +RWA-Remove_Field=\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u30EA\u30E0\u30FC\u30D6 +Form-Desin_Width=\u30C7\u30B6\u30A4\u30F3\u5E45 +No-tableData=\u623B\u3057\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u304C\u3042\u308A\u307E\u305B\u3093 +Page_Total=\u5408\u8A08 +FR-Designer-Plugin_Connect_Server_Error=\u30D7\u30E9\u30B0\u30A4\u30F3\u30DE\u30FC\u30B1\u30C3\u30C8\u306B\u63A5\u7D9A\u3067\u304D\u307E\u305B\u3093\u3002\uFF0C\u5F8C\u3067\u518D\u5EA6 +Import-Excel_Source=Excel\u30BD\u30FC\u30B9 +Utils-Left_to_Right_a=\u5DE6\u304B\u3089\u53F3\u3078 +ExpandD-Expand_Attribute=\u5C5E\u6027\u3092\u62E1\u5F35\u3059\u308B +Report-Write_Attributes=\u5E33\u7968\u8A18\u5165\u5C5E\u6027 +Utils-Current_Column=\u30AB\u30EC\u30F3\u30C8\u5217 +Need_Max_Value=\u6700\u5927\u5024\u304C\u5FC5\u8981 +Report_Not_Exist=\u9078\u629E\u3057\u305F\u5E33\u7968\u306F\u5B58\u5728\u3057\u307E\u305B\u3093\uFF01 +HF-Insert_Content=\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u633F\u5165 +UpParent=\u4E0A\u89AA\u30BB\u30EB +PageSetup-Page=\u30DA\u30FC\u30B8 +Utils-Move_Up=\u4E0A\u3078\u79FB\u52D5 +BackgroundTexture-PurpleMesh=\u7D2B\u8272\u306E\u30E1\u30C3\u30B7\u30E5 +Export-Word=Word\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8 +ServerM-Widget_Manager=\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u7BA1\u7406 +FR-Designer-Basic_Activation_Key=\u30C7\u30B6\u30A4\u30CA\u30FC\u6574\u7406\u756A\u53F7\uFF1A +FR-App-Template_Report_Not_Exist=\u9078\u629E\u3057\u305F\u5E33\u7968\u306F\u5B58\u5728\u3057\u307E\u305B\u3093\! +Protected=\u4FDD\u8B77 +Skip=\u30B9\u30AD\u30C3\u30D7 +FR-Designer_PageSetup-Vertically=\u5782\u76F4\u4E2D\u592E\u63C3\u3048 +revert=\u3084\u308A\u76F4\u3059 +PageSetup-Predefined=\u30D7\u30EC\u5B9A\u7FA9 +Border-Style-Radius=\u89D2\u4E38 +IntPart=\u6574\u6570\u90E8\u5206 +ExpandD-Data_Column=\u30C7\u30FC\u30BF\u30B3\u30E9\u30E0 +Sort-Ascending=\u6607\u9806 +FR-Designer-Widget_Style=\u30B9\u30BF\u30A4\u30EB +parameter_name_exist=\u30D1\u30E9\u30E1\u30FC\u30BF\u540D\u306F\u65E2\u306B\u5B58\u5728\u3057\u3066\u3044\u307E\u3059 +FR-Designer_Layer-Build=\u30D5\u30A1\u30BB\u30C3\u30C8\u7D44\u307F\u7ACB\u3066 +Please_Rename=\u518D\u5EA6\u547D\u540D\u3057\u3066\u304F\u3060\u3055\u3044 +Form-Editing_Listeners=\u4E8B\u4EF6\u7DE8\u96C6 +RWA-Smart_Add_Fields=\u30A4\u30F3\u30C6\u30EA\u30B8\u30A7\u30F3\u30C8\u8FFD\u52A0\u30D5\u30A3\u30FC\u30EB\u30C9 +FR-Designer-Tree_Width=\u5E45 +Record=\u8A18\u9332 +Poly-Report_Component=\u805A\u5408\u5E33\u7968\u30A2\u30BB\u30F3\u30D6\u30EA +Options=\u30AA\u30D7\u30B7\u30E7\u30F3 +NS-war-remote=\u30A8\u30E9\u30FC\u30B3\u30FC\u30C9\:1117 \u5727\u7E2E\u914D\u7F6E\u306F\u9060\u9694\u30C7\u30B6\u30A4\u30F3\u306B\u30B5\u30DD\u30FC\u30C8\u3057\u3066\u3044\u307E\u305B\u3093 +Sche-Minute=\u5206 +Three_Rows_Of_Three_Grid=3\u4E57\u306E3\u3064\u306E\u884C +WorkSheet=\u30EF\u30FC\u30AF\u30B7\u30FC\u30C8 +FR-Designer-Widget_Size=\u5927\u304D\u3055\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB +BindColumn-Select=\u30EA\u30B9\u30C8 +FR-Widget_Mobile_Terminal=\u30E2\u30D0\u30A4\u30EB\u7AEF\u672B +FR-Background_Image_Titled=\u5C55\u958B +SetPrinterOffset=\u5B89\u3044\u30D7\u30EA\u30F3\u30BF +FR-Designer-Plugin_Installed=\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u6E08\u307F +FR-Designer-Hyperlink_Name=\u540D\u524D +FR-Designer_Form-Button=\u30DC\u30BF\u30F3 +Black=\u30D6\u30E9\u30C3\u30AF +FR-Designer-Widget-Style_Border_Color=\u30D5\u30EC\u30FC\u30E0\u8272 +Set_Submit_Event=\u63D0\u51FA\u4E8B\u4EF6\u3092\u8A2D\u5B9A +PDF-Print_isPopup=\u8A2D\u5B9A\u30A6\u30A3\u30F3\u30C9\u30A6\u3092\u30DD\u30C3\u30D7\u30A2\u30C3\u30D7\u3059\u308B\u304B\u5426\u304B +LayerPageReport_CountPerPage=\u6BCE\u30DA\u30FC\u30B8\u8A18\u9332\u6570 +Display_Modes=\u30E2\u30C7\u30EB\u3092\u8868\u793A +RowSpan=\u884C\u7BC4\u56F2 +Datasource-Test_Connection=\u63A5\u7D9A\u30C6\u30B9\u30C8 +Function-Function_Manager=\u95A2\u6570\u30DE\u30CD\u30FC\u30B8\u30E3\u30FC +Host_Name=\u30DB\u30B9\u30C8\u30B3\u30F3\u30D4\u30E5\u30FC\u30BF\u540D +CellWrite-Show_As_HTML=HTML\u3067\u5185\u5BB9\u3092\u8868\u793A +FR-Designer-Widget-Style_Shadow=\u9670\u5F71 +FR-Designer_Parameter_String=\u6587\u5B57\u5217 +Form-SupportTag=\u30BF\u30B0\u306B\u8868\u793A +ReportD-Report_Write_Attributes=\u5E33\u7968\u66F8\u5F0F\u5C5E\u6027 +DataFunction-Count=\u4EF6\u6570 +Top_And_Thick_Bottom_Border_Line=\u4E0A\u30D5\u30EC\u30FC\u30E0\u30E9\u30A4\u30F3\u3068\u7C97\u4E0B\u30D5\u30EC\u30FC\u30E0\u30E9\u30A4\u30F3 +Client=\u9867\u5BA2\u5074 +BindColumn-Result_Serial_Number_Start_From_1=\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u306E\u756A\u53F7\u306F1\u304B\u3089 +History=\u6B74\u53F2 +Already_exists=\u3059\u3067\u306B\u5B58\u5728\u3057\u3066\u3044\u308B\u5834\u5408\u3001\u518D\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\uFF01 +Datasource-Original_Charset=\u30AA\u30EA\u30B8\u30CA\u30EB\u6587\u5B57\u30B3\u30FC\u30C9 +FR-Base_Left=\u5DE6 +ReportServerP-Next=\u6B21\u30DA\u30FC\u30B8 +BindColumn-Top_N=\u524D\u306EN\u500B +Animation_Special=\u7279\u5225\u306B\u826F\u3044\u52B9\u679C +Widget-Chart_Widget_Config=\u30B0\u30E9\u30D5\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB +FR-Designer-Plugin_Cannot_Update_Not_Install=\u30D7\u30E9\u30B0\u30A4\u30F3\u66F4\u65B0\u3092\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093\u3002\u5F53\u8A72 +After_Changed_Some_Attributes_Are_Different=\u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u3044\u304F\u3064\u304B\u306E\u30B9\u30C6\u30FC\u30C8\u30E1\u30F3\u30C8\u306E\u5F8C\u306B\u5909\u63DB\u304C\u7D99\u7D9A\u3059\u308B\u304B\u3069\u3046\u304B\u3001\u5909\u66F4\u3055\u308C\u307E\u3059 +PieStyle=\u30D1\u30A4 +HF-Are_you_sure_to_delete_it=\u5F53\u8A72\u9805\u76EE\u3092\u524A\u9664\u3057\u3066\u3082\u3088\u308D\u3057\u3044\u3067\u3059\u304B +Utils-Design-File_Open=\u958B\u304F +FR-Utils_Label=\u30BF\u30B0 +Data-Label=\u30BF\u30B0 +M_Insert-Text=\u30C6\u30AD\u30B9\u30C8 +Form-View_Tree=\u30D3\u30E5\u30FC\u30C4\u30EA\u30FC +M_Insert-Chart=\u56F3 +HF-Even_Page=\u5076\u6570\u30DA\u30FC\u30B8 +ReportServerP-Report_server_parameter=\u5E33\u7968\u30B5\u30FC\u30D0\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC +JavaScript-Form_Submit=\u8868\u63D0\u51FA +Horizontal-Split_Layout=\u6C34\u5E73\u5206\u5272\u914D\u7F6E +BorderLayout-Center=\u4E2D +INFO-Reset_Webapp=\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u30B5\u30FC\u30D0\u30FC\u306E\u518D\u8A2D\u5B9A +FR-Designer_Text=\u30C6\u30AD\u30B9\u30C8 +IN_and_INOUT_type_not_as_cursor=IN\u304A\u3088\u3073INOUT\u30BF\u30A4\u30D7\u3067\u306F\u306A\u3044\u30AB\u30FC\u30BD\u30EB\u3068 +Main_Axis=\u30E1\u30A4\u30F3\u5EA7\u6A19\u8EF8 +M_Edit-Cut=\u5207\u308A\u53D6\u308A(T) +Utils-The_Name_has_been_existed=\u5F53\u8A72\u540D\u79F0\u306F\u65E2\u306B\u5B58\u5728\u3057\u3066\u3044\u307E\u3059 +FR-Background_Image=\u753B\u50CF +Character=\u6587\u5B57 +Unit_Thousand=\u5343 +Test=\u30C6\u30B9\u30C8 +Utils-Would_you_like_to_save=\u4FDD\u5B58\u3057\u307E\u3059\u304B +HF-Header_and_Footer=\u30D8\u30C3\u30C0\u30FC\u3068\u30D5\u30C3\u30BF\u30FC +LIST_MODE=\u30EA\u30B9\u30C8 +HF-Insert_Image=\u753B\u50CF\u3092\u633F\u5165 +FR-Designer-Widget-Style_Standard=\u6A19\u6E96 +FR-Designer_Form-List=\u30EA\u30B9\u30C8 +BackgroundTexture-Denim=\u30C7\u30CB\u30E0 +Execute_Report_by_Layer_Engine=\u30E9\u30A4\u30F3\u306E\u30A8\u30F3\u30B8\u30F3\u3067\u5E33\u7968\u3092\u5B9F\u884C\u3059\u308B +M_Edit-Bring_Forward=\u524D\u9762\u3078\u79FB\u52D5(F) +Choose_All=\u5168\u9078\u629E +Form-RadioGroup=\u30E9\u30B8\u30AA\u30DC\u30BF\u30F3\u30B0\u30EB\u30FC\u30D7 +FR-Base_Remove=\u524A\u9664 +FR-Remote_Connect2Server_Again=\u63A5\u7D9A\u304C\u4E2D\u65AD\u3057\u307E\u3057\u305F\u3002\u518D\u5EA6\u30B5\u30FC\u30D0\u30FC\u306B\u63A5\u7D9A\u3057\u307E\u3059\u304B\u3002 +Semicolon=\u5206\u53F7 +StyleFormat-Category=\u5206\u985E +Report_Template=\u5E33\u7968\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8 +Utils-Beyond_the_right_side_of_Border=\u53F3\u9818\u57DF\u3092\u30AA\u30FC\u30D0\u30FC +BackgroundTexture-Papyrus=\u7D19 +LayerPageReport_PageEngine=\u30DA\u30FC\u30B8\u5225\u306E\u6F14\u7B97\u3092\u4F7F\u7528\u3057\u3066\u5E33\u7968\u3092\u57F7\u884C +Schedule-The_selected_file_must_be_end_with_filter=\u9078\u629E\u30D5\u30A1\u30A4\u30EB\u306F.cpt\u53C8\u306F.class\u53C8\u306F.frm +Provide=\u63D0\u4F9B +FormulaD-Math_&_Trig=\u6570\u5B66\u95A2\u6570\u3068\u4E09\u89D2\u95A2\u6570 +FR-Designer-StyleAlignment_Right=\u53F3\u5BC4\u305B +Error_TableDataNameRepeat=\u3059\u3067\u306B\u30B5\u30FC\u30D0\u30FC\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u306B\u5B58\u5728\u3059\u308B\u304B\u8907\u6570\u306E\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u540D\u304C\u91CD +Choose_None=\u9078\u629E\u3057\u306A\u3044 +File-tree=\u30D5\u30A1\u30A4\u30EB\u30C4\u30EA\u30FC +FRFont-bold=\u592A\u5B57 +FR-Designer_Set_Submit_Condition=\u63D0\u51FA\u6761\u4EF6\u3092\u8A2D\u5B9A +Form-Change_Widget_Name=\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u540D\u5909\u66F4 +ReportColumns-Report_Columns=\u5E33\u7968\u30B3\u30E9\u30E0 +Can_not_use_FormatBursh=\u8907\u6570\u9078\u629E\u3057\u305F\u30A8\u30EA\u30A2\u3067\u306F\u66F8\u5F0F\u30D6\u30E9\u30B7\u3092\u4F7F\u7528\u3067\u304D\u307E\u305B\u3093\! +CellElement-Property_Table=\u30BB\u30EB\u306E\u30D7\u30ED\u30D1\u30C6\u30A3\u00B7\u30B7\u30FC\u30C8 +Dictionary-Dynamic_SQL=\u52D5\u614BSQL +FR-Designer_Form-CheckBoxGroup=\u30D5\u30EC\u30FC\u30E0\u30BB\u30C3\u30C8\u3092\u8907\u6570\u9078\u629E +DBCP_TIME_BETWEEN_EVICTIONRUNSMILLIS=\u30A2\u30A4\u30C9\u30EB\u63A5\u7D9A\u30EA\u30B5\u30A4\u30AF\u30EB\u30E6\u30CB\u30C3\u30C8\u4F11\u7720\u6642\u9593 +ReportD-Export_Hided_Column=\u96A0\u3057\u305F\u5217\u3092\u5C0E\u51FA +Preference-Support_Undo=\u5143\u306B\u623B\u3057\u3092\u30B5\u30DD\u30FC\u30C8\u3059\u308B +FR-mobile_report_analysis=\u5831\u544A\u66F8\u306E\u89E3\u6790 +Month=\u6708 +Utils-Column_Width=\u5217\u5E45 +Collect-Use_Designer=\u30C7\u30B6\u30A4\u30CA\u30FC\u3092\u4F7F\u7528 +Widget-User_Defined_Editor=\u30D7\u30EC\u5B9A\u7FA9\u30A8\u30C7\u30A3\u30BF\u3067\u3059\u3002\u5F53\u8A72\u30A8\u30C7\u30A3\u30BF\u306F\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u7BA1\u7406\u30E1\u30CB\u30E5\u30FC +Unit_Ten_Thousand=\u4E07 +Data_Setting=\u30C7\u30FC\u30BF\u8A2D\u5B9A +ECP_input_pwd=\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\: +period=\u3002 +Note=\u6CE8 +Multiline=\u8907\u6570\u884C\u7DE8\u96C6 +Datasource-Convert_Charset=\u6587\u5B57\u30B3\u30FC\u30C9\u5909\u63DB +DashBoard-ConnectionList=\u30C7\u30FC\u30BF\u63A5\u7D9A +Utils-Submit_Forcibly=\u5F37\u884C\u63D0\u51FA +Parent_Marked_Field=\u89AA\u30BF\u30B0\u30D5\u30A3\u30FC\u30EB\u30C9 +Logout=\u9000\u51FA +FR-Designer_Show_Blank_Row=\u7A7A\u767D\u884C\u3092\u88DC\u5145 +FR-Base_Format=\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8 +FR-App-Export_png=PNG\u66F8\u5F0F +Delete_Column=\u5217\u524A\u9664 +SecondGraduationLine=\u5C0F\u3055\u306A\u76EE\u76DB\u308A +SpecifiedG-Groups=\u30B0\u30EB\u30FC\u30D7 +CONTINUUM_MODE=\u96A3\u63A5\u3057\u305F\u9023\u7D9A\u3057\u305F\u30D1\u30B1\u30C3\u30C8 +Datasource-Connection_failed=\u63A5\u7D9A\u5931\u6557 +CategoryName=\u30AB\u30C6\u30B4\u30EA\u30FC\u540D +DBCP_INITIAL_SIZE=\u63A5\u7D9A\u6570\u306E\u521D\u671F\u5316 +Colors=\u8272 +FR-Import-Export_CSV=CSV\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8(\u30B3\u30F3\u30DE\u3067\u5206\u5272) +FR-Designer-StyleAlignment_Left=\u5DE6\u5BC4\u305B +BackgroundTexture-PaperBag=\u7D19\u888B +RWA-BuildIn_SQL=\u5185\u8535SQL +SingleLayer=\u5358\u5C64 +Or-you=\u307E\u305F\u306F +FR-Designer_Certificate_Path=\u8A3C\u66F8\u30EB\u30FC\u30C8 +Utils-Last_Page=\u7D42\u4E86\u9801 +BarCodeD-Drawing_Text=\u30D0\u30FC\u30B3\u30FC\u30C9\u30C6\u30AD\u30B9\u30C8\u3092\u8868\u793A\u3059\u308B +Warning-Template_Do_Not_Exsit=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u306F\u5B58\u5728\u3057\u307E\u305B\u3093 +BindColumn-Group=\u30B0\u30EB\u30FC\u30D7\u5206\u3051 +Export-SVG=SVG\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8 +Plane3D=\u5E73\u97623D +SessionID=sessionID\u306F\u73FE\u5728\u306E\u30A2\u30AF\u30BB\u30B9\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u306E\u4F1A\u8A71\u30BF\u30B0\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u3067\u3059\u3002 +FR-Designer_Height=\u9AD8\u3055 +HF-Odd_Page=\u5947\u6570\u30DA\u30FC\u30B8 +About-All_Rights_Reserved=\u5168\u3066\u306E\u6A29\u5229\u3092\u6240\u6709\u3057\u3066\u3044\u308B +Utils-Current_Cell=\u30AB\u30EC\u30F3\u30C8\u30BB\u30EB +Web_Preview_Message=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u30D5\u30A1\u30A4\u30EB\u3092\u73FE\u5728\u306E\u904B\u884C\u74B0\u5883\u306E\u76EE\u6B21\u4E0B\u306B\u4FDD\u5B58\u3057\u3066\u304F\u3060\u3055\u3044 +FR-Hyperlink_Chart_Float=\u30B0\u30E9\u30D5\u30CF\u30A4\u30D1\u30FC\u30EA\u30F3\u30AF-\u9023\u52D5\u30D5\u30ED\u30FC\u8981\u7D20 +Dic-Data_Query=\u30C7\u30FC\u30BF\u30AF\u30A8\u30EA\u30FC +CellWrite-Print_Content=\u30BB\u30EB\u306E\u4E2D\u8EAB\u3092\u5370\u5237\u3059\u308B +Privilege-Selected_None_Of_Any_Items=\u9805\u76EE\u3092\u3072\u3068\u3064\u3082\u9078\u629E\u3057\u3066\u3044\u307E\u305B\u3093 +FRFont-Size=\u30B5\u30A4\u30BA +Function-J2EE_server=J2EE_server +FR-Designer_Allow_Blank=\u7A7A\u6B04\u3042\u308A +Build_Tree_Accord_Parent_Marked_Filed=\u89AA\u30BF\u30B0\u30D5\u30A3\u30FC\u30EB\u30C9\u306F\u3001\u69CB\u7BC9\u3055\u308C\u305F\u30C4\u30EA\u30FC\u3092\u8A2D\u5B9A\u3057\u3001\u9078\u629E\u3057\u305F\u30C7\u30FC\u30BF\u306B\u4F9D\u5B58 +Preference-Horizontal_Scroll_Bar_Visible=\u6C34\u5E73\u30B9\u30AF\u30ED\u30FC\u30EB\u30D0\u30FC\u306F\u53EF\u8996 +Scope=\u30B9\u30B3\u30FC\u30D7 +Save_All_Records_In_Memory=\u5168\u3066\u306E\u8A18\u9332\u306F\u30E1\u30E2\u30EA\u306B\u4FDD\u5B58\u3055\u308C\u3066\u3044\u307E\u3059 +FreezeWarning1=\u521D\u671F\u5024\u306F\u6700\u7D42\u5024\u3088\u308A\u5927\u304D\u304F\u3042\u308A\u307E\u305B\u3093 +FlowLayout=\u30D5\u30ED\u30FC\u914D\u7F6E +M_Report-Report_Footer=\u5E33\u7968\u30D5\u30C3\u30BF\u30FC +FR-Action_Add=\u5897\u52A0 +BorderLayout-East=\u6771 +feedback_tip=\u4EE5\u4E0B400\u306E\u5358\u8A9E\u306E\u554F\u984C\u306E\u8AAC\u660E\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044 +FS_Start_Date=\u958B\u59CB\u65E5\u671F +FR-ConditionB_Operator=\u6F14\u7B97\u5B50 +Printer-Alias=\u5225\u540D +DS-Class_Name=\u30AF\u30E9\u30B9\u540D +FR-Designer-Plugin_Has_Been_Disabled=\u30D7\u30E9\u30B0\u30A4\u30F3\u306F\u4F7F\u7528\u304C\u7981\u6B62\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u30C7\u30B6\u30A4\u30CA\u30FC\u3068\u30B5 +Sort-Original=\u30BD\u30FC\u30C8\u3057\u306A\u3044 +Utils-Top_to_Bottom_a=\u4E0A\u304B\u3089\u4E0B\u3078 +Parameter-String=\u6587\u5B57\u5217 +InnerRadis=\u5185\u5F84\u306E\u5927\u304D\u3055 +Want_To_Cover_It=\u3053\u308C\u3092\u8986\u3044\u307E\u3059\u304B +Divided_stage=\u5206\u5272\u3055\u308C\u305F\u30B9\u30C6\u30FC\u30B8 +Seriously=\u53B3\u91CD +ReportServerP-PDF=PDF +Utils-Switch_To_Class_Reportlet=\u30D7\u30ED\u30B0\u30E9\u30E0\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u5E33\u7968\u306B\u5207\u308A\u66FF\u3048 +FR-Designer_Show_Blank_Column=\u7A7A\u767D\u5217\u3092\u88DC\u5145 +M_Edit-Redo=\u518D\u5B9F\u884C +Visibility=\u53EF\u8996\u6027 +Series_Use_Default=\u7CFB\u5217\u30C7\u30D5\u30A9\u30EB\u30C8\u4F7F\u7528 +Has_Selected=\u3082\u3046\u9078\u629E +BackgroundTexture-Walnut=\u30AF\u30EB\u30DF +FormulaD-Function_category=\u95A2\u6570\u30BF\u30A4\u30D7 +Interface=\u30A4\u30F3\u30BF\u30FC\u30D5\u30A7\u30A4\u30B9 +FR-Designer-Beyond_Bounds= +seconds=\u79D2 +Auto-Build=\u81EA\u52D5\u7684\u306B\u30D3\u30EB\u30C9 +FR-Designer-Plugin_Install_Successful=\u5F53\u8A72\u30D7\u30E9\u30B0\u30A4\u30F3\u30C7\u30B6\u30A4\u30CA\u30FC\u3068\u30B5\u30FC\u30D0\u30FC\u3092\u518D\u8D77\u52D5\u3059\u308B\u969B\u306B +Template_Path=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u30EB\u30FC\u30C8 +FR-Designer-FRFont_Bold=\u592A\u304F\u3059\u308B +Poly_Name=\u805A\u5408\u30E2\u30B8\u30E5\u30FC\u30EB\u540D +WorkBook=\u30EF\u30FC\u30AF\u30D6\u30C3\u30AF +Hyperlink-Self_Window=\u73FE\u5728\u306E\u30A6\u30A3\u30F3\u30C9\u30A6 +FR-Designer-Widget-Style_Title=\u6A19\u984C +FR-Designer-FRFont_Size=\u5927\u304D\u3055 +M_File-Export-SVG=SVG +Capacity=\u5BB9\u91CF +Rose_Red=\u30ED\u30FC\u30BA\u30EC\u30C3\u30C9 +StyleAlignment-The_value_of_rotation_must_between_-90_and_90_degrees=\u56DE\u8EE2\u5024\u306F-90\u304B\u308990\u5EA6 +HF-Move_Left=\u5DE6\u3078\u79FB\u52D5\u3059\u308B +Cell_Group=\u30BB\u30EB\u7D44 +Week=\u5468 +PageSetup-Orientation=\u65B9\u5411 +M-Open_Recent=\u6700\u8FD1\u958B\u3044\u305F\u3082\u306E +NNormal=\u6B63\u5E38 +Integer=\u6574\u6570 +Select_The_Source_To_Save=\u8A18\u61B6\u3059\u308B\u9805\u76EE\u3092\u9078\u629E +Transition=\u5206\u679D +FR-Designer_Get_Lock=\u30ED\u30C3\u30AF +one_record_exists_in_many_groups=\u4E00\u3064\u306E\u8A18\u9332\u306F\u8907\u6570\u30B0\u30EB\u30FC\u30D7\u5185\u306B\u5B58\u5728\u53EF\u80FD +FR-Designer_Cover_None=\u5168\u3066\u8986\u308F\u306A\u3044 +DeciPart=\u5C0F\u6570\u90E8\u5206 +ExpandD-Up_Father_Cell=\u4E0A\u89AA\u30BB\u30EB +Deep=\u6DF1\u3055 +FRFont-Shadow=\u5F71 +Reportlet=\u30CD\u30C3\u30C8\u5E33\u7968 +Calendar=\u30AB\u30EC\u30F3\u30C0\u30FC +DateFormat-Custom_Warning=\u6CE8\uFF1A\u30AB\u30B9\u30BF\u30E0\u65E5\u6642\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u30B5\u30DD\u30FC\u30C8\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u691C\u67FB +Unit_MM=\u30DF\u30EA\u30E1\u30FC\u30C8\u30EB +Server-Start=\u8D77\u52D5 +CellPage-Can_Break_On_Paginate=\u30DA\u30FC\u30B8\u30F3\u30B0\u304C\u5207\u65AD\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u305F\u3068\u304D +Build_Tree_Accord_Marked_Filed_Length=\u69CB\u7BC9\u30C4\u30EA\u30FC\u3092\u8A2D\u5B9A\u3057\u3001\u9078\u629E\u3057\u305F\u30C7\u30FC\u30BF\u306B\u4F9D\u5B58\u3057\u305F\u30D5\u30A3\u30FC\u30EB\u30C9\u306E\u9577\u3055\u3092\u30DE\u30FC\u30AF +ComboCheckBox-Start_Symbol=\u958B\u59CB\u6587\u5B57 +Real=\u5B9F\u969B +RWA-Batch_Modify_Cells=\u6279\u91CF\u4FEE\u6B63\u30BB\u30EB +FR-Designer_Build-Way=\u69CB\u7BC9\u65B9\u6CD5 +Read=\u8AAD\u307F\u53D6\u308A +StyleAlignment-Degrees=\u5EA6 +M_Format_A-Border=\u67A0(B) +Utils-Delete_Record=\u8A18\u9332\u524A\u9664 +Reload=\u518D\u30ED\u30FC\u30C9 +Image-Select_Picture=\u753B\u50CF\u3092\u9078\u629E +RWA-Submit=\u63D0\u51FA\u3059\u308B +the_template=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8 +FR-Designer_Component_Scale=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u30B9\u30B1\u30FC\u30EB +FRFont-italic=\u659C\u4F53 +Year=\u5E74 +HF-Move_Right=\u53F3\u3078\u79FB\u52D5\u3059\u308B +Data-Check=\u30C7\u30FC\u30BF\u7BA1\u7406\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB +Unknown=\u672A\u77E5 +Submit_Style=\u63D0\u51FA\u65B9\u6CD5 +Left_Border_Line=\u5DE6\u30D5\u30EC\u30FC\u30E0\u30E9\u30A4\u30F3 +Brown=\u30D6\u30E9\u30A6\u30F3 +Select_A_Tree_DataSource_To_Build=\u30C4\u30EA\u30FC\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u3092\u9078\u629E\u3057\u3066\u7D44\u307F\u7ACB\u3066\u3066\u304F\u3060\u3055\u3044 +Overlapping=\u91CD\u306D\u578B +DS-Class_TableData=\u30AF\u30E9\u30B9\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9 +FR-Designer-Plugin_Illegal_Plugin_Zip_Cannot_Be_Install=\u8B58\u5225\u4E0D\u80FD\u306A\u30D7\u30E9\u30B0\u30A4\u30F3\u3067\u3059\u3002\u30A4\u30F3\u30B9 +DisplayNothingBeforeQuery=\u81EA\u52D5\u691C\u7D22\u7121\u3057 +Y_Axis=Y\u8EF8 +FormulaD-Most_Recently_Used=\u5E38\u7528\u95A2\u6570 +FormulaD-Input_formula_in_the_text_area_below=\u30C6\u30AD\u30B9\u30C8\u30DC\u30C3\u30AF\u30B9\u306B\u516C\u5F0F\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044 +Build-Way=\u69CB\u7BC9\u65B9\u6CD5 +M_Edit-Undo=\u5143\u306B\u623B\u3059 +Line-Style=\u7DDA\u5F62 +Datasource-Other_Attributes=\u305D\u306E\u4ED6\u5C5E\u6027 +M_Server-Global_Parameters=\u30B0\u30ED\u30FC\u30D0\u30EB\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC +Suffix=\u5F8C\u7F00 +Image-Image_Files=\u30A4\u30E1\u30FC\u30B8\u30D5\u30A1\u30A4\u30EB +EditRC-Entire_row=\u884C(R) +HF-First_Page=\u30C8\u30C3\u30D7\u30DA\u30FC\u30B8 +BackgroundTexture-Granite=\u307F\u304B\u3052\u77F3 +DataList=\u30C7\u30FC\u30BF\u30C1\u30A7\u30FC\u30F3 +Recursion=\u5E30\u7D0D +BarStyle=\u30B9\u30C8\u30EA\u30C3\u30D7 +FR-Designer-Min_Width= +Utils-Report-Env_Directory=\u5E33\u7968\u4F5C\u696D\u76EE\u6B21 +D-ChartArea=\u30B0\u30E9\u30D5\u30A8\u30EA\u30A2 +Only=\u305F\u3060 +FR-Base_No=\u3044\u3044\u3048 +SpecifiedG-Put_all_others_together=\u4ED6\u306E\u3059\u3079\u3066\u3092\u7D50\u5408\u3059\u308B +HF-NewLine_Des=\u4E0A\u306E\u79FB\u52D5\u3068\u524A\u9664\u30DC\u30BF\u30F3\u3092\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u6539\u884C\u30B3\u30FC\u30C9\u3092\u64CD\u4F5C\u3059\u308B +WLayout-Border-ThreeContainer=\u5317\u3001\u897F\u3001\u4E09\u56FD\u5883\u306E\u30EC\u30A4\u30A2\u30A6\u30C8\u30B3\u30F3\u30C6\u30CA\u30FC\u3068\u5E45\u3092\u8ABF\u6574\u3059\u308B\u5FC5\u8981\u304C\u3042 +Parameter_Name=\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u540D +FR-Base_Table=\u8868 +Des-Remove_WorkSheet=\u9078\u629E\u3059\u308B\u5E33\u7968\u306B\u306F\u30C7\u30FC\u30BF\u304C\u3042\u308B\u304B\u3082\u3057\u308C\u307E\u305B\u3093\u304C\u3001\u5B8C\u5168\u306B\u524A\u9664\u3059\u308B\u5834\u5408\u3001 +Rotation=\u56DE\u8EE2 +Undefined=\u672A\u5B9A\u7FA9 +Support-Auto_Complete_Shortcut=\u81EA\u52D5\u3067\u30B7\u30E7\u30FC\u30C8\u30AB\u30C3\u30C8\u30AD\u30FC\u3092\u88DC\u3046 +Set_Column_Title_End=\u91CD\u8907\u3059\u308B\u7D42\u4E86\u5217\u3092\u8A2D\u5B9A +Submit_Url=\u30A2\u30C9\u30EC\u30B9\u63D0\u51FA +ReportServerP-Are_you_sure_to_delete_the_selected_printer=\u9078\u629E\u3055\u308C\u305F\u30D7\u30EA\u30F3\u30BF\u30FC\u3092\u524A\u9664\u3057\u3066 +long_data_can_not_show_fully=\u9577\u3044\u30C7\u30FC\u30BF\u304C\u5341\u5206\u306B\u767A\u63EE\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093 +Utils-Beyond_the_bottom_side_of_Border=\u4E0B\u9818\u57DF\u3092\u30AA\u30FC\u30D0\u30FC +FR-Import-Export_PDF=PDF\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8 +Form-CheckBoxGroup=\u30D5\u30EC\u30FC\u30E0\u30BB\u30C3\u30C8\u3092\u8907\u6570\u9078\u629E +Click-Me=\u30AF\u30EA\u30C3\u30AF\u3059\u308B\u3068\u30B5\u30D7\u30E9\u30A4\u30BA\u304C\u3042\u308A\u307E\u3059\u3088\uFF01 +Hyperlink-Self=\u540C\u3058Frame(S) +Tree-Select_Leaf_Only_Tips=\u30C1\u30A7\u30C3\u30AF\u3057\u306A\u3044\u5834\u5408\u3001\u623B\u308A\u5024\u306F\u5F53\u30CE\u30FC\u30C9\u3060\u3051\u3002 +StyleAlignment-Text_Rotation=\u30C6\u30AD\u30B9\u30C8\u65B9\u5411 +Format-Error=\u5165\u529B\u3057\u305F\u5024\u306E\u66F8\u5F0F\u304C\u4E0D\u6B63\u78BA\u3067\u3059 +Server-Stop=\u4E00\u6642\u505C\u6B62 +Preference-Setting_Grid=\u30B0\u30EA\u30C3\u30C9\u8A2D\u5B9A +ReportServerP-Add_Printer=\u30D7\u30EA\u30F3\u30BF\u30FC\u8FFD\u52A0 +FR-Designer-Plugin_Active=\u4F7F\u7528\u958B\u59CB +Utils-File_name=\u30D5\u30A1\u30A4\u30EB\u540D +NOT_NULL_Des=\u3053\u3053\u306F\u7A7A\u6B04\u306B\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093 +Right_Border_Line=\u53F3\u30D5\u30EC\u30FC\u30E0\u30E9\u30A4\u30F3 +EditRC-Entire_column=\u5217(C) +PageSetup-Top_to_bottom=\u4E0A\u304B\u3089\u4E0B\u3078 +Click-Get_Default_URL=\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u30C7\u30D5\u30A9\u30EB\u30C8\u306EURL\u3092\u53D6\u5F97 +StyleAlignment-Wrap_Text=\u81EA\u52D5\u6298\u308A\u8FD4\u3057 +Remove_All_Button=\u5168\u3066\u306E\u30DC\u30BF\u30F3\u3092\u30AF\u30EA\u30A2 +FR-Designer_Component_Interval=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306E\u9593\u9694 +ReportColumns-Columns_vertically=\u5782\u76F4\u65B9\u5411\u5217 +ReportGUI-Print_Background=\u5370\u5237\u80CC\u666F +Export-CSV=CSV (\u30AB\u30F3\u30DE\u533A\u5207\u308A) +M_Edit-Paste=\u8CBC\u308A\u4ED8\u3051(P) +FR-Designer-Basic_Restart_Designer=\u30C7\u30B6\u30A4\u30CA\u30FC\u3092\u518D\u8D77\u52D5\u3059\u308B +ReportServerP-PDF2-INFO=LINUX/UNIX\u306B\u4E2D\u56FD\u8A9E\u30D5\u30A9\u30F3\u30C8\u304C\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3055\u308C\u305F\u6642\u306E\u307F\u4F7F\u7528 +FormulaD-Check_Valid=\u6709\u52B9\u6027\u30C1\u30A7\u30C3\u30AF +server_disconnected=\u5207\u65AD\u3055\u308C\u305F +ParameterD-Parameter_name_cannot_be_null=\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u540D\u306F\u7A7A\u5024\u306B\u306A\u3063\u3066\u306F\u3044\u3051\u307E\u305B\u3093 +FR-Designer-Plugin_Version_Is_Lower_Than_Current=\u30A2\u30C3\u30D7\u30B0\u30EC\u30FC\u30C9\u30D1\u30C3\u30AF\u306E\u30D7\u30E9\u30B0\u30A4\u30F3\u30D0\u30FC\u30B8 +RWA-NotChange_Unmodified=\u306E\u6539\u6B63\u3092\u66F4\u65B0\u3057\u306A\u3044 +User_Information=\u30E6\u30FC\u30B6\u30FC\u60C5\u5831 +Custom_styles_lost=\u30AB\u30B9\u30BF\u30DE\u30A4\u30BA\u30B9\u30BF\u30A4\u30EB\u306F\u5931\u308F\u308C\u307E\u3057\u305F +PageSetup-Margin=\u4F59\u767D +M-New_FormBook=\u8868\u3092\u65B0\u898F\u4F5C\u6210 +Widget-TreeNode=\u30C4\u30EA\u30FC\u30CE\u30FC\u30C9\u30DC\u30BF\u30F3 +Form-Url=\u30A2\u30C9\u30EC\u30B9 +Utils-Beyond_the_left_side_of_Border=\u5DE6\u30DC\u30FC\u30C0\u30FC\u8D85\u3048 +Float_Element_Name=\u30D5\u30ED\u30FC\u3068\u8981\u7D20\u540D\u79F0 +Purple=\u8584\u7D2B +DashBoard-Potence=\u6A29\u9650 +M-Close_Template=\u5E33\u7968\u3092\u9589\u3058\u308B(C) +paper=\u7D19 +Not_Exsit=\u5E33\u7968\u306B\u5B58\u5728\u3057\u307E\u305B\u3093 +Utils-Insert_Row=\u884C\u633F\u5165 +Utils-Delete_Row=\u884C\u524A\u9664 +not_support_authority_edit=\u8BE5\u5143\u7D20\u4E0D\u652F\u6301\u6743\u9650\u63A7\u5236 +Formula_Tips=\u5F0F\u306F "\ +FR-Action_Copy=\u30B3\u30D4\u30FC +Compile_Success=\u7DE8\u96C6\u7FFB\u8A33\u306B\u6210\u529F\u3057\u307E\u3057\u305F +BackgroundTexture-RecycledPaper=\u518D\u751F\u7D19 +StyleAlignment-Single_Line=\u4E00\u884C\u3067\u8868\u793A +Utils-Move_Down=\u4E0B\u3078\u79FB\u52D5 +Please_Set_Repeat_First=\u307E\u305A\u91CD\u8907\u3059\u308B\u6A19\u984C\u884C\u3068\u5217\u3092\u8A2D\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044 +Writer-ShortCuts_Setting=\u5831\u544A\u30B7\u30E7\u30FC\u30C8\u30AB\u30C3\u30C8\u30AD\u30FC\u8A2D\u5B9A +Verify-Data_Verify=\u30C7\u30FC\u30BF\u691C\u8A3C +FR-mobile_analysis_style=\u89E3\u6790\u65B9\u5F0F +Confirm-Delete-File=\u9078\u629E\u3057\u305F\u30D5\u30A1\u30A4\u30EB\u3092\u524A\u9664\u3057\u3066\u3082\u3088\u308D\u3057\u3044\u3067\u3059\u304B\uFF1F +PageSetup-Header=\u30DA\u30FC\u30B8\u30D8\u30C3\u30C0 +JavaScrit-Asynch=\u975E\u540C\u671F +ReportServerP-Toolbar=\u30C4\u30FC\u30EB\u30D0\u30FC +Utils-Top_to_Bottom=\u7E26\u65B9\u5411 +Platform=\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0 +FR-Designer-FRFont_Underline=\u30A2\u30F3\u30C0\u30FC\u30E9\u30A4\u30F3 +Show_in_Containing_Folder=\u6240\u5728\u3059\u308B\u30D5\u30A1\u30A4\u30EB\u3092\u958B\u304F +BackgroundTexture-WaterDroplets=\u3057\u305A\u304F +FR-Designer-Dependence_Install_Failed=install failed +Layout-Padding=\u30D1\u30C7\u30A3\u30F3\u30B0 +roles_already_authority_edited=\u69CB\u6210\u3055\u308C\u305F\u5F79\u5272 +WidgetDisplyPosition=\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u8868\u793A\u4F4D\u7F6E +SpecifiedG-Force_Group=\u5F37\u5236\u7684\u306B\u30B0\u30EB\u30FC\u30D4\u30F3\u30B0\u3059\u308B +FormulaD-Formula_Definition=\u516C\u5F0F\u5B9A\u7FA9 +I-xyScatterStyle_Marker=\u6563\u5E03\u56F3 +Hour=\u6642\u9593 +ColorMatch=\u914D\u8272 +M_Edit-Order=\u9806\u5E8F(O) +BackgroundTexture-Bouquet=\u82B1\u675F +Verify-Error_Information=\u30A8\u30E9\u30FC\u60C5\u5831 +LayerData=\u5E95\u5C42\u6570\u636E +Rename=\u540D\u79F0\u306E\u5909\u66F4 +Widget-Load_By_Async=\u975E\u540C\u671F\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9 +Shape=\u56F3\u5F62 +BindColumn-This_Condition_has_been_existed=\u5F53\u8A72\u6761\u4EF6\u306F\u5B58\u5728\u3057\u3066\u3044\u307E\u3059 +NS-exception_readError=\u30A8\u30E9\u30FC\u30B3\u30FC\u30C9\:1305 \u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u30D5\u30A1\u30A4\u30EB\u89E3\u6790\u306B\u30A8\u30E9\u30FC\u304C\u3042\u308A\u307E\u3057\u305F +Set_Column_Title_Start=\u91CD\u8907\u3059\u308B\u6A19\u984C\u5217\u3092\u8A2D\u5B9A +Fri=\u91D1 +M_Report-Report_Parameter=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC +REPORTLETS=\u8907\u6570\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u306E\u30EB\u30FC\u30C8\u306E\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u306B\u30A2\u30AF\u30BB\u30B9 +WLayout-Card-ToolTip=\u30AB\u30FC\u30C9\u306E\u30EC\u30A4\u30A2\u30A6\u30C8\u306F\u3001\u30EC\u30A4\u30A2\u30A6\u30C8\u30B3\u30F3\u30C6\u30CA\u5185\u306E\u4ED6\u306E\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306E\u6570 +M-Popup_ChartType=\u30B0\u30E9\u30D5\u30BF\u30A4\u30D7 +Please-Wait=\u5C11\u3005\u304A\u5F85\u3061\u304F\u3060\u3055\u3044 +FR-Designer-Form-ToolBar_Widget=\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB +Widget-Array=\u914D\u5217 +FieldBinding=\u30D0\u30F3\u30C7\u30A3\u30F3\u30B0\u30D5\u30A3\u30FC\u30EB\u30C9 +Top_Bottom_Border_Line=\u4E0A\u4E0B\u30D5\u30EC\u30FC\u30E0\u30E9\u30A4\u30F3 +M-Others=\u305D\u306E\u4ED6... +Hyperlink-Link_Opened_in=\u30EA\u30F3\u30AF\u306E\u958B\u3051\u65B9 +FR-Utils_WorkBook=\u4F5C\u696D\u7C3F +M_Insert-Float=\u30D5\u30ED\u30FC\u30C8\u8981\u7D20 +Out_Thick_Border_Line=\u30DC\u30C3\u30AF\u30B9\u30D5\u30EC\u30FC\u30E0\u30E9\u30A4\u30F3 +FR-App-File_Lookup_range=\u691C\u7D22\u7BC4\u56F2 +ReportColumns-Columns_to=\u306E\u3088\u3046\u306B\u6539\u5217\u3059\u308B +Transparent=\u900F\u660E +Parameter-Integer=\u6574\u6570\u578B +PDF-Print_Setting=PDF\u5370\u5237\u8A2D\u5B9A +Server-Embedded_Server=\u5185\u8535\u30B5\u30FC\u30D0\u30FC +M_Server-Server_Config_Manager=\u30B5\u30FC\u30D0\u30FC\u914D\u7F6E(S) +FR-Utils-Would_you_like_to_cover_the_current_file=\u30AB\u30EC\u30F3\u30C8\u30D5\u30A1\u30A4\u30EB\u3092\u4E0A\u66F8\u304D\u3057\u307E\u3059\u304B\uFF1F +CellWrite-InsertRow_COPY=\u5143\u306E\u5024 +Edit_String_To_Formula=\u30AD\u30E3\u30E9\u30AF\u30BF\u30FC\u6587\u5B57\u5217\u3092\u7DE8\u96C6\u3057\u3066\u516C\u5F0F\u3068\u3059\u308B\u304B\u5426\u304B +Edit-Column_Count=\u5217\u6570 +Father=\u89AA +ReportColumns-Columns_after=\u8D85\u3048\u308B +FR-Designer_Undo=\u3084\u308A\u76F4\u3059 +DBCP_MIN_IDLE=\u6700\u5C0F\u30A2\u30A4\u30C9\u30EB\u63A5\u7D9A\u6570 +M-Data_Analysis_Settings=\u30C7\u30FC\u30BF\u5206\u6790\u8A2D\u5B9A +M-Form_Preview=\u8868\u30D7\u30EC\u30D3\u30E5\u30FC +Form-Basic_Properties=\u57FA\u672C\u5C5E\u6027 +quote=\u5F15\u7528 +Thu=\u6728 +Collect-Collect_User_Information=\u30E6\u30FC\u30B6\u30FC\u60C5\u5831\u3092\u53CE\u96C6\u3059\u308B +Layer-Build=\u30D5\u30A1\u30BB\u30C3\u30C8\u7D44\u307F\u7ACB\u3066 +FR-Designer-FRFont_Line_Style=\u7DDA\u5F62 +BackgroundTexture-BrownMarble=\u8336\u8272\u306E\u5927\u7406\u77F3 +PageSetup-Page_Setup=\u30DA\u30FC\u30B8\u8A2D\u5B9A +Form-Semicolon=\u5206\u53F7 +ECP_re_input=\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u9593\u9055\u3063\u3066\u3044\u307E\u3059\u3002\u518D\u5EA6\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044 +ExpandD-Sort_After_Expand=\u62E1\u5927\u5F8C +FR-Designer-Dependence_Install_Succeed=install succeed +Env-Configure_Workspace=\u4F5C\u696D\u76EE\u6B21\u8A2D\u5B9A +feedback_info=\u8CB4\u91CD\u306A\u610F\u898B\u3042\u308A\u304C\u3068\u3046\u3054\u3056\u3044\u307E\u3059\u3002\u79C1\u9054\u306F\u3067\u304D\u308B\u3060\u3051\u65E9\u304F\u3042\u306A\u305F\u3068\u9023\u7D61\u3057\u307E\u3059\u3002 +Ratio=\u6BD4\u7387 +DBCP_TEST_ON_BORROW=\u63A5\u7D9A\u524D\u691C\u67FB\u3092\u53D6\u5F97 +FR-Designer_layerIndex= +WEB-Write_Setting=\u5831\u544A\u30DA\u30FC\u30B8\u8A2D\u5B9A +M-New_WorkBook=\u30D6\u30C3\u30AF\u3092\u65B0\u898F\u4F5C\u6210 +FR-Designer-Plugin_Has_Been_Actived=\u30D7\u30E9\u30B0\u30A4\u30F3\u306F\u3059\u3067\u306B\u8D77\u52D5\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u30C7\u30B6\u30A4\u30CA\u30FC\u3068\u30B5\u30FC +Datasource-Maximum_Number_of_Preview_Rows=\u30D7\u30EC\u30D3\u30E5\u30FC\u884C\u6570\u6700\u5927\u5024 +ExpandD-Cell_Expand_Attributes=\u62E1\u5F35\u5C5E\u6027 +Select_the_repeated_row_and_column=\u91CD\u8907\u3059\u308B\u5FC5\u8981\u304C\u3042\u308B\u884C\u5217\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044 +FormulaD-Date_&_Time=\u65E5\u4ED8\u3068\u6642\u523B\u95A2\u6570 +Max-Mem-Row-Count=\u30AD\u30E3\u30C3\u30B7\u30E5\u306E\u78C1\u6C17\u30C7\u30A3\u30B9\u30AF\u8A18\u9332\u6570\u306F\u3000\u4EE5\u4E0A +BorderLayout-South=\u5357 +Export-Text=\u30C6\u30AD\u30B9\u30C8\u30D5\u30A1\u30A4\u30EB(\u30BF\u30D6\u533A\u5207\u308A) +JavaScript-Synch=\u540C\u671F +FR-App-All_Warning=\u8B66\u544A +M_Edit-Send_Backward=\u80CC\u9762\u3078\u79FB\u52D5(B) +Form-Layout=\u914D\u7F6E +FR-Designer-Plugin_Shop_Need_Update=\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306F\u3001\u66F4\u65B0\u3059\u308B\u304B\u3069\u3046\u304B\u3001\u65B0\u3057\u3044\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u4FDD\u5B58\u3057\u307E\u3059\u304B\uFF1F +FR-Designer_WorkBook=\u30EF\u30FC\u30AF\u30D6\u30C3\u30AF +UpBarBorderStyleAndColor=\u30B9\u30B1\u30FC\u30EB\u30A2\u30C3\u30D7\u30AB\u30E9\u30E0\u30B9\u30BF\u30A4\u30EB +GridLayout=\u683C\u5B50\u914D\u7F6E +Utils-Default_Value=\u30C7\u30D5\u30A9\u30EB\u30C8\u5024 +Widget-Comb_Widget_Config=\u7D44\u307F\u5408\u308F\u305B\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB +Import-Excel2007_Source=Excel2007\u30EA\u30BD\u30FC\u30B9\u30D5\u30A1\u30A4\u30EB +Y-Coordinate=\u7E26\u5EA7\u6A19 +FR-Base_SimSun_Not_Found=\u5B8B\u4F53\u3092\u898B\u3064\u3051\u308B\u3053\u3068\u304C\u3067\u304D\u306A\u3044\u3001\u73FE\u5728\u306E\u30B7\u30B9\u30C6\u30E0\u306E\u4E0B\u3067\u30C7\u30D5\u30A9\u30EB\u30C8\u8A00\u8A9E\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u8BBE\u8BA1\u5668\u30D5\u30A9\u30F3\u30C8\u3068\u3057\u3066 +FR-Designer_Seriously=\u53B3\u91CD +Upload=\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9 +Form-Widget_Property_Table=\u5C5E\u6027\u8868 +Des-Merger_Cell=\u9078\u629E\u3055\u308C\u305F\u30D5\u30A3\u30FC\u30EB\u30C9\u306B\u306F\u8907\u6570\u306E\u30C7\u30FC\u30BF\u304C\u542B\u307F\u3001\u30BB\u30EB\u3092\u7D50\u5408\u3057\u305F\u3089\u3001\u5DE6\u4E0A\u5074\u306E\u30C7 +FR-Designer-Basic_Copy_Build_NO=\u30C0\u30D6\u30EB\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u7D44\u307F\u7ACB\u3066\u30D0\u30FC\u30B8\u30E7\u30F3\u756A\u53F7\u3092\u30AF\u30EA\u30C3\u30D7\u30DC\u30FC\u30C9 +FR-Base_TurnOn=\u8D77\u52D5 +FR-Base_Rows=\u884C +Form-Remove_Repeat=\u91CD\u8907\u3059\u308B\u9805\u76EE\u3092\u524A\u9664 +Yes=\u306F\u3044 +Datasource-JNDI_Name=JNDI\u540D +Utils-Delete_Column=\u5217\u524A\u9664 +HF-Delete_it=\u524A\u9664 +JavaScript-Dynamic_Parameters=\u52D5\u614B\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC +px=\u753B\u7D20 +FR-App-Report_Template=\u5E33\u7968\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8 +Verify-Message=\u30A8\u30E9\u30FC\u30E1\u30C3\u30BB\u30FC\u30B8 +Plan=\u30D7\u30E9\u30F3 +Vertical-Split_Layout=\u5782\u76F4\u5206\u5272\u914D\u7F6E +ParameterD-Delay_Playing=\u5831\u544A\u8868\u306E\u5C55\u793A\u3092\u5EF6\u671F\u3057\u307E\u3059 +TurnOff=\u9589\u3058\u308B +FR-Please_Rename=\u518D\u5EA6\u547D\u540D\u3057\u3066\u304F\u3060\u3055\u3044 +Select_Data_Set=\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u3092\u9078\u629E +Name_has_Colon=\u540D\u524D\: +ReportColumns-Columns_horizontally=\u6C34\u5E73\u65B9\u5411\u5217 +FR-Base_Yes=\u306F\u3044 +ReportColumns-Repeat_Row=\u884C\u756A\u53F7\u306E\u7E70\u308A\u8FD4\u3057 +Print_Setting=\u5370\u5237\u8A2D\u5B9A +Registration-User_Name=\u30E6\u30FC\u30B6\u540D +Datasource-User_Defined=\u30E6\u30FC\u30B6\u5B9A\u7FA9 +FR-Designer-Plugin_DownLoadMessage= +Delay=\u9045\u5EF6 +FR-Designer-All_MSBold=\u5FAE\u8EDF\u96C5\u9ED2 +Utils-Now_create_connection=\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u3078\u306E\u63A5\u7D9A +FR-Template-Path_chooseRightPath=\u6B63\u78BA\u306A\u30EB\u30FC\u30C8\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044 +FR-Remote_Re_Connect_to_Server=\u30B5\u30FC\u30D0\u30FC\u306F\u9589\u3058\u3089\u308C\u307E\u3057\u305F\u3002\u518D\u5EA6\u30B5\u30FC\u30D0\u30FC\u306B\u63A5\u7D9A\u3057\u307E\u3059\u304B? +Nation=\u56FD\u5BB6 +DBCP_MAX_WAIT=\u6700\u5927\u5F85\u3061\u6642\u9593 +FR-App-Template_Form=\u8868 +Address=\u30A2\u30C9\u30EC\u30B9 +Sub_Report=\u5B50\u5E33\u7968 +FR-Import-Export_Word=Word\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8 +FR-Server_Version_Tip=\u73FE\u5728\u306E\u63A5\u7D9A\u3057\u3066\u3044\u308B\u30B5\u30FC\u30D0\u30FC\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u306F\u4F7F\u7528\u3057\u3066\u3044\u308B\u30C7\u30B6\u30A4\u30CA\u30FC\u306E\u30D0 +StyleAlignment-Left_To_Right=\u5DE6\u304B\u3089\u53F3\u3078 +Verify-ToolTips=\u516C\u5F0F\u304C\u63D0\u793A\u6821\u9A8C\u3082\u6E80\u8DB3\u3057\u3066\u3044\u306A\u3044\u8BEF\u308A\u304C\u60C5\u5831\u3092\u624B\u306B\u5165\u308C\u305F +BackgroundTexture-Stationery=\u4FBF\u7B8B +FR-Designer_RWA-Help=\u8A2D\u5B9A\u3092\u672A\u4FEE\u6B63\u3067\u66F4\u65B0\u305B\u305A\u3001\u30D7\u30EC\u30D3\u30E5\u30FC\u3057\u305F\u5E33\u7968\u3092\u5831\u544A\u3057\u3001\u30BB\u30EB\u306B\u8A18\u9332\u3055\u308C +M_Insert-Barcode=\u30D0\u30FC\u30B3\u30FC\u30C9 +Bounds=\u30DC\u30FC\u30C0\u30FC +FR-Designer-Undo_All_Authority_Operations=\u524D\u56DE\u306E\u6A29\u9650\u7DE8\u96C6\u6642\u306E\u5168\u3066\u306E\u30AA\u30DA\u30EC\u30FC\u30B7\u30E7\u30F3\u3092\u64A4\u56DE\u3059 +Datasource-Context=\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8 +CellWrite-Page_After_Column=\u5217\u5F8C\u306E\u6539\u9801 +FR-Designer_Cancel=\u30AD\u30E3\u30F3\u30BB\u30EB +Button-Group-Display-Columns=\u5217\u306E\u6570\u3092\u8868\u793A\u3059\u308B +Widget-Height=\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u9AD8\u3055 +Examples=\u4F8B +Formula_Dictionary_Display_Example=\u5B9F\u969B\u5024\u7BC4\u56F2\u306F\ +StyleAlignment-Horizontal=\u6C34\u5E73\u63C3\u3048 +HyperLink_Must_Alone_Reset=\u8907\u6570\u306E\u30CF\u30A4\u30D1\u30FC\u30EA\u30F3\u30AF +ExpandD-Expand_Direction=\u62E1\u5F35\u65B9\u5411 +Include=\u542B\u3080 +Export-Excel-Page=\u30DA\u30FC\u30B8 +FR-Designer-Min_Height=\u6700\u5C0F\u9AD8\u3055 +Filed=\u30A8\u30EA\u30A2 +ReportServerP-Import_Css=Css\u5F15\u7528 +M_Insert-Formula=\u516C\u5F0F +FR-Designer_Auto-Build=\u81EA\u52D5\u7684\u306B\u30D3\u30EB\u30C9 +FRFont-Foreground=\u8272 +Bubble-Width=\u30D0\u30D6\u30EB\u306E\u5E45 +Form-Hierarchy_Tree=\u69CB\u9020\u30C4\u30EA\u30FC +WLayout-Border-LayoutContainer=\u4E2D\u90E8\u3068\u5317\u90E82\u30DC\u30FC\u30C0\u30FC\u30EC\u30A4\u30A2\u30A6\u30C8\u30B3\u30F3\u30C6\u30CA\u3068\u5317\u90E8\u30D6\u30ED\u30C3\u30AF\u3092\u542B\u3081 +Preference-JDK_Home=JDK\u30D1\u30B9 +Utils-Insert_Column=\u5217\u633F\u5165 +FR-Designer_ToolBar_Top=\u30D8\u30C3\u30C0\u30FC\u30C4\u30FC\u30EB\u30D0\u30FC +BindColumn-The_Conditions_of_FatherCell=\u89AA\u30BB\u30EB\u6761\u4EF6 +Links=\u30EA\u30F3\u30AF +M_Report-Report_Header=\u5E33\u7968\u30D8\u30C3\u30C0\u30FC +Sub_Report_Description=\u5B50\u5E33\u7968\u306F\u89AA\u8868\u904B\u884C\u74B0\u5883\u4E0B\u306B\u5B58\u5728\u3057\u306A\u3051\u308C\u3070\u306A\u3089\u305A\u3001\u4E21\u8005\u306F\u540C\u4E00\u30C6\u30F3\u30D7\u30EC +T_Insert-Float=\u30D5\u30ED\u30FC\u8981\u7D20\u3092\u633F\u5165 +BackgroundTexture-FishFossil=\u9B5A\u5316\u77F3 +My_Computer=\u30DE\u30A4 \u30B3\u30F3\u30D4\u30E5\u30FC\u30BF +FORMLET=\u7570\u306A\u308B\u8868\u306E\u30EB\u30FC\u30C8\u306E\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u306B\u30A2\u30AF\u30BB\u30B9 +HF-Undefined=\u672A\u5B9A\u7FA9 +Widget-User_Defined_Widget_Config=\u30D7\u30EC\u5B9A\u7FA9\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB +Report-Write_Attributes_Group_Warning=\u8A2D\u5B9A\u3092\u30AD\u30FC?\u30C1\u30FC\u30E0\u306E\u5404\u30B3\u30E9\u30E0\u306E\u4E2D\u306E\u30AD\u30FC\u4E2A\u6570\u306F\u540C\u3058\u3067 +Form-Single_quote=\u30B7\u30F3\u30B0\u30EB\u30AF\u30A9\u30FC\u30C6\u30FC\u30B7\u30E7\u30F3\u30DE\u30FC\u30AF +Compile_Success_And_Then_Save=\u7DE8\u96C6\u7FFB\u8A33\u6210\u529F\u5F8C\u306B\u4FDD\u5B58\u3067\u304D\u307E\u3059 +FR-Designer_Layout-Padding=\u30D1\u30C7\u30A3\u30F3\u30B0 +Layout_Container=\u30EC\u30A4\u30A2\u30A6\u30C8\u30B3\u30F3\u30C6\u30CA +Admin=\u7BA1\u7406\u8005 +Form-EC_toolbar=\u5E33\u7968\u30E2\u30B8\u30E5\u30FC\u30EB\u30C4\u30FC\u30EB\u30D0\u30FC +FR-App-All_Auto=\u81EA\u52D5 +Utils-Available_Columns=\u9078\u629E\u53EF\u80FD\u306E\u5217 +Form-Change_Widget_Name_Discription=\u65B0\u3057\u3044\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044 +FR-Module_Designer=\u30C7\u30B6\u30A4\u30CA\u30FC\u30E2\u30B8\u30E5\u30FC\u30EB +FR-Import-Export_Text=\u6587\u66F8\u30D5\u30A1\u30A4\u30EB(\u30BF\u30D6\u6587\u5B57\u5206\u9694) +Values-Editor=\u5024\u30A8\u30C7\u30A3\u30BF +FR-Designer_Yes=\u306F\u3044 +ExpandD-Expandable=\u62E1\u5F35\u6027 +Tree-Return_Full_Path=\u7D50\u679C\u306F\u5B8C\u5168\u306A\u30D1\u30B9\u3092\u623B\u308A\u307E\u3059 +FRFont-bolditalic=\u592A\u5B57\u659C\u4F53 +FR-Base_StyleFormat_Sample=\u4F8B +Area_Value=\u5730\u57DF\u5024 +FR-Designer-Plugin_Disable=\u4F7F\u7528\u7981\u6B62 +Utils-Are_you_sure_to_remove_the_selected_item=\u9078\u629E\u3055\u308C\u305F\u9805\u76EE\u3092\u524A\u9664\u3057\u3066\u3082\u3088\u308D\u3057\u3044\u3067\u3059\u304B +Face_Write=\u5831\u544A +Poly-Report_Block=\u5E33\u7968\u30BF\u30A4\u30D7\u805A\u5408\u30E2\u30B8\u30E5\u30FC\u30EB +Vgap=\u5782\u76F4\u9593\u9699 +FR-Designer_HyperLink_Must_Alone_Reset=\u8907\u6570\u306E\u30CF\u30A4\u30D1\u30FC\u30EA\u30F3\u30AF +DS-Class=\u30D7\u30ED\u30B0\u30E9\u30E0 +FR-Hyperlink_Please_Select_Reportlet=\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u5E33\u7968\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044 +FS_Report_Type=\u30BF\u30A4\u30D7 +HF-New_Line=\u6539\u884C\u30B3\u30FC\u30C9 +Privilege=\u6A29\u9650 +Export-Offline-Html=\u30AA\u30D5\u30E9\u30A4\u30F3html\u5E33\u7968\u51FA\u529B +FR-Designer_open-new-form-tip=711\u4EE5\u4E0B\u306E\u751F\u7523\u306E\u305F\u3081\u306E\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u306E\u73FE\u5728\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u306F\u3001\u4E92 +FR-Designer-Widget-Style_Frame_Style=\u30D5\u30EC\u30FC\u30E0\u30B9\u30BF\u30A4\u30EB +Present-No_Present=\u30D5\u30A9\u30EB\u30E0\u8A2D\u5B9A\u3092\u30AD\u30E3\u30F3\u30BB\u30EB +FR-Designer_Form-Password=\u30D1\u30B9\u30EF\u30FC\u30C9 +X_Axis=X\u8EF8 +FR-mobile_html_analysis=HTML5\u89E3\u6790 +M_Edit-Bring_to_Front=\u6700\u524D\u9762\u3078\u79FB\u52D5(T) +Null_Value_Show=\u7A7A\u5024\u8868\u793A +Datasource-JNDI_DES=\u6CE8\: INITIAL_CONTEXT_FACTORY\u304C\u542B\u3080\u30AF\u30E9\u30B9\u306E.jar\u30D5\u30A1\u30A4\u30EB\u3092lib\u306B\u30B3\u30D4\u30FC +PrintP-Print_Preview=\u5370\u5237\u30D7\u30EC\u30D3\u30E5\u30FC +Form-Hierarchy_Tree_Last=\u524D +Has_been_gone=\ \u5931\u308F\u308C\u307E\u3057\u305F\u3002\u5F53\u8A72\u30B9\u30BF\u30A4\u30EB\u3092\u5897\u52A0\u3057\u307E\u3059\u304B\uFF1F +RWA-Add_Field=\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u8FFD\u52A0 +newNode=\u30CE\u30FC\u30C9\u306E\u8FFD\u52A0 +PageSetup-Shrink_to_fit_content=\u30BB\u30EB\u5185\u5BB9\u306B\u3082\u3068\u3065\u3044\u3066\u81EA\u52D5\u8C03\u6574 +FR-Designer_Date=\u65E5\u4ED8 +Column_Multiple=\u30C7\u30FC\u30BF\u500D\u6570 +FR-App-All_File=\u30D5\u30A1\u30A4\u30EB +Sort-Descending=\u964D\u9806 +FR-Designer-Plugin_Delete=\u524A\u9664 +Above=\u4E0A\u8A18\u306E +Utils-The-Chart=\u30B0\u30E9\u30D5 +FRFont-plain=\u6A19\u6E96 +Calculating=\u51E6\u7406\u4E2D +Form-Object=\u30D5\u30A9\u30FC\u30E0\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8 +May=\u4E94\u6708 +FR-Designer_Plugin_Normal_Update=\u66F4\u65B0 +FR-Hyperlink_Reportlet=\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u5E33\u7968 +M_Edit-Copy=\u30B3\u30D4\u30FC(C) +Sub_Report_Message2=\u89AA\u5E33\u7968\u306F\u73FE\u5728\u306E\u904B\u884C\u74B0\u5883\u4E0B\u306B\u5B58\u5728\u3057\u307E\u305B\u3093 +Sub_Report_Message3=\u81EA\u8EAB\u3092\u9078\u629E\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093 +Sub_Report_Message1=\u6B63\u78BA\u306A\u30EB\u30FC\u30C8\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044 +Form-Allow_CustomData=\u30AB\u30B9\u30BF\u30DE\u3042\u308A +FR-Server_Version_Tip_MoreInfo=\u6240\u5C5E\u3059\u308B\u30B0\u30EB\u30FC\u30D7\u304C\u4F7F\u7528\u3059\u308BFineReport\u306E\u30C7\u30B6\u30A4\u30CA\u30FC\u306E\u30D0\u30FC\u30B8 +FR-Designer_Server-version-tip-moreInfo=\u79C1\u305F\u3061\u306E\u88FD\u54C1\u306EFineReport Designer\u30D0\u30FC\u30B8\u30E7\u30F3\u756A\u53F7 +Get_Lock=\u30ED\u30C3\u30AF +HF-Edit_Footer=\u30D5\u30C3\u30BF\u30FC\u7DE8\u96C6 +Datasource-New_Charset=\u65B0\u6587\u5B57\u30B3\u30FC\u30C9 +Preference-Custom=\u30AB\u30B9\u30BF\u30DE\u30A4\u30BA +BackgroundTexture-Newsprint=\u65B0\u805E\u7528\u7D19 +ConditionB-Add_bracket=\u62EC\u5F27\u3092\u8FFD\u52A0\u3059\u308B +Datasource-Connection_successfully=\u63A5\u7D9A\u6210\u529F +Function-The_class_must_implement_the_interface=\u5F53\u8A72\u30AF\u30E9\u30B9\u306F\u30A4\u30F3\u30BF\u30FC\u30D5\u30A7\u30FC\u30B9\u304B\u3089\u30A4\u30F3\u30D7\u30EC +FR-Designer_ChartF-Transparency=\u900F\u660E +Crimson=\u771F\u7D05 +FR-Hyperlink_Dialog=\u5BFE\u8A71\u30A6\u30A3\u30F3\u30C9\u30A6 +FR-Designer_Covered_All=\u5168\u3066\u8986\u3046 +Hyperlink-New_Window=\u65B0\u30A6\u30A3\u30F3\u30C9\u30A6 +Style_Name=\u66F8\u5F0F\u540D +CSS_warning= \u305D\u306E\u3088\u3046\u306AWebReport\\ CSS\u30EA\u30D5\u30A1\u30EC\u30F3\u30B9CSS\u30D5\u30A1\u30A4\u30EB\u304C\u5B58\u5728test.css\u306F\u3001css / test.css\u306E\u76F8\u5BFE\u30D1\u30B9\u3068\u3057\u3066
 \u6BD4\u8F03\u7684\u6587\u5DE5\u5B66\u30C7\u30A3\u30EC\u30AF\u30C8\u30EAWebReport\u3001 +FR-Base_Column=\u5217 +Three_Rows_Of_Two_Grid=2\u683C\u5B50\u306E3\u3064\u306E\u884C +DBCP_VALIDATION_QUERY=SQL\u8A8D\u8A3C\u30AF\u30A8\u30EA +M_Edit-Clear_Formats=\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8(F) +Parameter_Setting=\u30D1\u30E9\u30E1\u30FC\u30BF\u8A2D\u5B9A +Related=\u9023\u52D5 +BorderLayout-Constraints=\u5834\u6240 +Write_Preview=\u5831\u544A\u30D7\u30EC\u30D3\u30E5\u30FC +PageSetup-Page_Order=\u5370\u5237\u9806 +Verify-Verify_Formula=\u691C\u8A3C\u5F0F +State=\u7701\u5E02 +FR-Designer-Widget-Style_Body_Background=\u30E1\u30A4\u30F3\u80CC\u666F +FR-App-Privilege_No=\u6A29\u9650\u304C\u3042\u308A\u307E\u305B\u3093 +Please_Drag_ParaPane= +Come_True=\u5B9F\u73FE +ISEMPTY=\u7A7A\u6B04 +Background-Texture=\u30C6\u30AF\u30B9\u30C1\u30E3 +FR-Designer_Verify-Message=\u30A8\u30E9\u30FC\u30E1\u30C3\u30BB\u30FC\u30B8 +Locked=\uFF08\u30ED\u30C3\u30AF\u6E08\u307F\uFF09 +Utils-Design-Action_Cancel=\u30AD\u30E3\u30F3\u30BB\u30EB +Image-Titled=\u5C55\u958B +Gradient-Direction=\u65B9\u5411\u3092\u5F90\u3005\u306B\u5909\u5316 +Green=\u6DF1\u7DD1 +Report_Engine=\u5E33\u7968\u30A8\u30F3\u30B8\u30F3 +Return-String=\u30AD\u30E3\u30E9\u30AF\u30BF\u30FC\u6587\u5B57\u5217\u306B\u623B\u308B +Margin=\u30DE\u30FC\u30B8\u30F3 +Pitch_Percentage=\u30D4\u30C3\u30C1\u306E\u5272\u5408 +FR-Base_TurnOff=\u9589\u3058\u308B +Utils-has_been_existed=\u65E2\u5B58 +HF-Insert_Formula=\u516C\u5F0F\u3092\u633F\u5165 +Utils-Exit_Designer=\u30C7\u30B6\u30A4\u30CA\u30FC\u3092\u7D42\u4E86\u3059\u308B +Formula_Dictionary_Display=\u4E0A\u306E\u5B9F\u969B\u5024\u7BC4\u56F2\u5185\u306E\u3044\u305A\u308C\u306E\u5024($$$)\u306F\u3001\u305D\u306E\u8868\u793A\u5024\u306F +PageSetup-Left_to_right=\u5DE6\u304B\u3089\u53F3\u3078 +Utils-Import_Excel_Data=\u300CExcel]\u30A4\u30F3\u30D7\u30C3\u30C8 +M-Save=\u4FDD\u5B58 +redo=\u3082\u3046\u4E00\u5EA6\u3059\u308B +Status=\u72B6\u614B +Draw=\u5236\u4F5C +FR-Designer_Message=\u30E1\u30C3\u30BB\u30FC\u30B8 +Records=\u3064\u306E\u8A18\u9332 +FR-Designer_ComboBox=\u30B3\u30F3\u30DC\u30DC\u30C3\u30AF\u30B9 +Driver=\u30C9\u30E9\u30A4\u30D0\u30FC +Template_Parameters=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC +Form-Remove_Repeat_Data=\u91CD\u8907\u3059\u308B\u30C7\u30FC\u30BF\u3092\u524A\u9664 +ECP_decode=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u30A2\u30F3\u30ED\u30C3\u30AF +Area_Name=\u5730\u57DF\u540D +Others=\u305D\u306E\u4ED6 +Merge=\u5408\u4F75\u3059\u308B +BackgroundTexture-Parchment=\u7F8A\u76AE\u7D19 +BindColumn-Bottom_N=\u5F8C\u306EN\u500B +Frame=\u30D5\u30EC\u30FC\u30E0 +Bottom_Border_Line=\u30DC\u30C8\u30E0\u30DC\u30FC\u30C0\u30FC +Muiti_In=\u591A\u5C64\u53D6\u308A\u30EA\u30F3\u30B0 +FR-Designer-Dependence_Install_Online=install online +Use_Default_ToolBar=\u30C7\u30D5\u30A9\u30EB\u30C8\u30C4\u30FC\u30EB\u30D0\u30FC\u4F7F\u7528 +M_Server-Platform_Manager=\u5E33\u7968\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0\u7BA1\u7406 +PageSetup-inches=\u30A4\u30F3\u30C1 +Form-Widget_Property=\u5C5E\u6027\u540D +FR-Layout_Padding=\u5185\u30DE\u30FC\u30B8\u30F3 +Schema=\u30B9\u30AD\u30FC\u30DE +Server_Path=\u30DB\u30B9\u30C8\u30B3\u30F3\u30D4\u30E5\u30FC\u30BF\u4F4D\u7F6E +Condition_Display=\u6761\u4EF6\u8868\u793A +FR-Server-Design_template_unopened=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u3092\u958B\u304F\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093 +Function-Function_Class_Name=\u95A2\u6570\u30AF\u30E9\u30B9\u540D +Schedule-Template=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u540D +Tree_Data_Field=\u30C4\u30EA\u30FC\u30C7\u30FC\u30BF\u30D5\u30A3\u30FC\u30EB\u30C9 +Border-Style-Normal=\u76F4\u89D2\u306E\u56FD\u5883\u306B +Top_And_Double_Bottom_Border_Line=\u4E0A\u30D5\u30EC\u30FC\u30E0\u30E9\u30A4\u30F3\u3068\u53CC\u4E0B\u30D5\u30EC\u30FC\u30E0\u30E9\u30A4\u30F3 +FR-Server_Embedded_Server_Start=\u5185\u8535\u30B5\u30FC\u30D0\u30FC-\u958B\u304F +FR-Designer-Basic_Restart_Designer_Later=\u5F8C\u3067\u518D\u8D77\u52D5\u3059\u308B +StyleAlignment-Top=\u4E0A\u8A70\u3081 +ReportServerP-First=\u30C8\u30C3\u30D7\u30DA\u30FC\u30B8 +Not_Exist=\u5B58\u5728\u3057\u306A\u3044 +FR-Remote_File_is_Locked=\u958B\u3053\u3046\u3068\u3057\u3066\u3044\u308B\u5E33\u7968\u306F\u73FE\u5728\u4ED6\u306E\u4EBA\u304C\u7DE8\u96C6\u3057\u3066\u3044\u307E\u3059\u3002\u5C11\u3057\u5F85\u3063\u3066\u304B +Apply=\u30A2\u30D7\u30EA +Sytle-Indentation=\u30A4\u30F3\u30C7\u30F3\u30C8 +Parameter-Float=\u5358\u7CBE\u5EA6\u6D6E\u52D5\u5C0F\u6570\u70B9\u6570\u578B +HF-Center_Section=\u4E2D\u592E\u30BB\u30AF\u30B7\u30E7\u30F3 +Form-Double_quotes=\u30C0\u30D6\u30EB\u30AF\u30AA\u30FC\u30C6\u30FC\u30B7\u30E7\u30F3\u30DE\u30FC\u30AF +M_File-Export-Word=Word +M_File-Export-Text=\u30C6\u30AD\u30B9\u30C8\u30D5\u30A1\u30A4\u30EB(\u30BF\u30D6\u533A\u5207\u308A)(T) +PageSetup-First_Page_Number=\u30B9\u30BF\u30FC\u30C8\u306E\u30DA\u30FC\u30B8\u756A\u53F7 +Execute=\u5B9F\u884C +Task=\u30BF\u30B9\u30AF +Custom_Button_Type_Submit=\u63D0\u51FA +FR-Designer-Widget_Settings=\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u8A2D\u5B9A +IS_Need_Password=\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u5FC5\u8981\u3067\u3059 +PageSetup-Horizontally=\u6C34\u5E73\u4E2D\u592E\u63C3\u3048 +No_Editor_Property_Definition=\u5F53\u8A72\u30A8\u30C7\u30A3\u30BF\u306F\u5C5E\u6027\u5B9A\u7FA9\u304C\u3042\u308A\u307E\u305B\u3093 +Env-Remote_Server=\u30EA\u30E2\u30FC\u30C8\u30B5\u30FC\u30D0\u30FC +FR-Utils_Background=\u80CC\u666F +FR-Designer-Plugin_Warning=\u8B66\u544A +Server-version-info=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u30D5\u30A1\u30A4\u30EB\u306F\u3001\u5F8C\u3067\u8A2D\u8A08\u3084\u5143\u306E\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u5C5E\u6027\u3092\u5931\u3046\u30EA\u30B9\u30AF\u306B +CellWrite-Page_After_Row=\u884C\u5F8C\u306E\u6539\u9801 +HF-Right_Section=\u53F3\u5074\u30BB\u30AF\u30B7\u30E7\u30F3 +PageSetup-Title_Start_Row=\u91CD\u8907\u3059\u308B\u6A19\u984C\u884C +From=\u7B2C\u3000\u304B\u3089 +Preference-Grid_Line_Color=\u30B0\u30EA\u30C3\u30C9\u7DDA\u306E\u8272 +RowTo=\u884C\u304B\u3089\u7B2C\u307E\u3067 +FR-Designer_ReportColumns-Repeat_Column=\u5217\u9806\u5E8F\u3092\u30B3\u30D4\u30FC +M_Server-Function_Manager=\u95A2\u6570\u30DE\u30CD\u30FC\u30B8\u30E3\u30FC +KeyWord=\u30AD\u30FC\u30EF\u30FC\u30C9 +DS-Multi_Dimensional_Database=\u591A\u6B21\u5143\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9 +BiasD-Slope_Line=\u659C\u7DDA +Tue=\u706B +ReportServerP-Last=\u7D42\u4E86\u9801 +FR-Base_Columns=\u5217 +SpecifiedG-Leave_in_their_own_groups=\u5404\u30B0\u30EB\u30FC\u30D7\u5185\u306B\u4FDD\u7559\u3059\u308B +LOG-Please_Wait=\u5C11\u3005\u304A\u5F85\u3061\u304F\u3060\u3055\u3044 +Form-ToolBar=\u8868\u30C4\u30FC\u30EB\u30D0\u30FC +FR-Base_sure_remove_item=\u672C\u5F53\u306B\u9078\u629E\u3057\u305F\u9805\u76EE\u3092\u524A\u9664\u3057\u307E\u3059\u304B +Component_Scale=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u30B9\u30B1\u30FC\u30EB +Hyperlink-Use_CJK_to_encode_parameter=CJK\u51E6\u7406\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u4F7F\u7528 +LOG-Has_Been_Openned=\u958B\u304D\u307E\u3057\u305F +FR-Designer-Dependence= +ECP_error_pwd=\u30D1\u30B9\u30EF\u30FC\u30C9\u30A8\u30E9\u30FC +REPORTLET=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u306E\u30EB\u30FC\u30C8\u306E\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u306B\u30A2\u30AF\u30BB\u30B9 +RWA-Column_Offset=\u5217\u30AA\u30D5\u30BB\u30C3\u30C8 +Forecast=\u4E88\u6E2C +Light_Orange=\u660E\u308B\u3044\u30AA\u30EC\u30F3\u30B8 +StyleAlignment-Vertical=\u5782\u76F4\u63C3\u3048 +Form-List=\u30EA\u30B9\u30C8 +ParameterD-Show_Parameter_Window=\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u30A6\u30A4\u30F3\u30C9\u30A6\u3092\u8868\u793A\u3059\u308B +FR-Designer_Set_Submit_Event=\u63D0\u51FA\u4E8B\u4EF6\u3092\u8A2D\u5B9A +Value_Percent=\u5024\u5272\u5408\u4F8B +DBCP_MIN_EVICTABLE_IDLE_TIMEMILLIS=\u30A2\u30A4\u30C9\u30EB\u6700\u5C0F\u6642\u9593\u5024\u4FDD\u6301 +Function-The_class_must_be_located_in=\u5F53\u8A72\u30AF\u30E9\u30B9\u306F\u5B58\u5728\u3057\u306A\u3051\u308C\u3070\u306A\u308A\u307E\u305B\u3093 +FR-Action_Sort=\u30BD\u30FC\u30C8 +DataFunction-Average=\u5E73\u5747 +FR-Designer_Show_in_Containing_Folder=\u6240\u5728\u3059\u308B\u30D5\u30A1\u30A4\u30EB\u3092\u958B\u304F +M_File-Export-Excel=Excel +DataFunction-Max=\u6700\u5927\u5024 +FR-Designer_Form-Widget_Name=\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u540D +FS_End_Date=\u7D42\u4E86\u65E5\u671F +Export-Excel-Simple=\u5143 +ColumnTo=\u5217\u306F\u7B2C\u3000\u307E\u3067 +SpecifiedG-Discard_all_others=\u4ED6\u306E\u3059\u3079\u3066\u3092\u7834\u68C4\u3059\u308B +DS-TableData=\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9 +Form-DataTable=\u30C7\u30FC\u30BF\u8868 +Sub_Report_ToolTips=\u5B50\u5E33\u7968\u63D0\u793A +Right_Top=\u53F3\u4E0A +M_Edit-Merge_Cell=\u30BB\u30EB\u3092\u7D50\u5408\u3059\u308B +FR-Designer_Restore_Default=\u30C7\u30D5\u30A9\u30EB\u30C8\u5FA9\u5143 +Component_Interval=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306E\u9593\u9694 +Cover_None=\u5168\u3066\u8986\u308F\u306A\u3044 +Datasource-From_Database=\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u304B\u3089 +Folder=\u76EE\u6B21 +Form-Allow_Edit=\u76F4\u63A5\u7DE8\u96C6\u3042\u308A +M_Edit-Clear=\u30AF\u30EA\u30A2(A) +ParentCell_Setting=\u89AA\u30BB\u30EB\u8A2D\u5B9A +Only_selected_cell_can_paste_only=\u30BB\u30EB\u306F\u8CBC\u308A\u4ED8\u3051\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u9078\u629E\u3055\u308C\u3066\u3044\u308B\u5834\u5408\u306B\u306E\u307F +M_Report-Report_Columns=\u5E33\u7968\u30B3\u30E9\u30E0 +Unit_Hundred=\u767E +FR-Designer_DataTable-Build= +Widget-Form_Widget_Config=\u8868\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB +Server-version-tip-moreInfo=\u79C1\u305F\u3061\u306E\u88FD\u54C1\u306EFineReport Designer\u30D0\u30FC\u30B8\u30E7\u30F3\u756A\u53F7\u3060\u3051\u3067\u306A\u304F\u3001 +Actions=\u30A2\u30AF\u30B7\u30E7\u30F3 +FR-Designer-Dependence_Connect_Server_Error=connect error +High=\u9AD8 +HJS-Send_Failed=\u9001\u4FE1\u5931\u6557 +HJS-Message=\u30E1\u30C3\u30BB\u30FC\u30B8\u5185\u5BB9 +File-Allow_Upload_Files=\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u304C\u8A31\u53EF\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u30BF\u30A4\u30D7 +FR-Designer-Form-ToolBar_Chart=\u30B0\u30E9\u30D5 +Thick_Bottom_Border_Line=\u7C97\u5E95\u30D5\u30EC\u30FC\u30E0\u30E9\u30A4\u30F3 +FR-Action_Remove=\u524A\u9664 +FRFont-Style=\u30B9\u30BF\u30A4\u30EB +Select_DataColumn=\u30C7\u30FC\u30BF\u5217\u3092\u9078\u629E +StartValue=\u958B\u59CB\u5024 +SINGLE_FILE_UPLOAD=\u5358\u72EC\u30D5\u30A1\u30A4\u30EB\u306E\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u306E\u307F\u30B5\u30DD\u30FC\u30C8 +BackgroundTexture-Cork=\u30B3\u30EB\u30AF\u6813 +M_Format-Data_Map=\u30C7\u30FC\u30BF\u30DE\u30C3\u30D7 +FR-mobile_native_analysis=\u4E00\u6B21\u89E3\u6790 +HighLight=\u30CF\u30A4\u30E9\u30A4\u30C8 +FR-Designer_Dropdown-More-Preview=\u4E0B\u62C9\u83B7\u53D6\u66F4\u591A\u9884\u89C8\u65B9\u5F0F +local=\u30ED\u30FC\u30AB\u30EB +FR-Designer_Gradation=\u69CB\u6210 +PageSetup-Finis_Start_Column=\u91CD\u8907\u3059\u308B\u7D42\u4E86\u5217 +Env-Invalid_User_and_Password=\u7121\u52B9\u306A\u30E6\u30FC\u30B6\u30FC\u540D\u307E\u305F\u306F\u30D1\u30B9\u30EF\u30FC\u30C9\u3067\u3059 +FR-Designer-Plugin_All_Plugins=\u5168\u3066\u306E\u30D7\u30E9\u30B0\u30A4\u30F3 +FR-Designer_Prepare_Export=\u5C0E\u51FA\u3092\u958B\u59CB\u3057\u3066\u3044\u307E\u3059\u3002\u304A\u5F85\u3061\u304F\u3060\u3055\u3044 +DBCP_TEST_ON_RETURN=\u63A5\u7D9A\u524D\u691C\u67FB\u306B\u623B\u308B +no-alternatives=\u5168\u304F\u9078\u629E\u80A2\u304C\u3042\u308A\u307E\u305B\u3093 +FR-Designer_Submmit_WClass=\u30AB\u30B9\u30BF\u30E0\u9001\u4FE1 +M_Insert-Slope_Line=\u659C\u7DDA +FR-Designer-Plugin_Plugin_Description=\u30D7\u30E9\u30B0\u30A4\u30F3\u8AAC\u660E +ExpandD-Not_Expand=\u62E1\u5F35\u3057\u306A\u3044 +Utils-Bottom_to_Top=\u4E0B\u304B\u3089\u4E0A\u3078 +Collect-Click\!_Get_user_information_code=\u30AF\u30EA\u30C3\u30AF\u3057\u3066\!\u30A2\u30AF\u30C6\u30A3\u30D9\u30FC\u30C8\u30B3\u30FC\u30C9\u3092\u53D6\u5F97 +FR-Already_exist=\u73FE\u5728\u306E\u74B0\u5883\u306B\u306F\u5B58\u5728\u3057\u3066\u3044\u307E\u3059\: +Send=\u767A\u9001 +M_Edit-Clear_All=\u5168\u3066\u30AF\u30EA\u30A2(A) +Brown_Orange=\u30D6\u30E9\u30A6\u30F3 +PageSetup-Portrait=\u7E26\u65B9\u5411 +FR-Designer_Form-RadioGroup=\u30E9\u30B8\u30AA\u30DC\u30BF\u30F3\u30B0\u30EB\u30FC\u30D7 +FR-Utils-App_AllFiles=\u5168\u3066\u306E\u30D5\u30A1\u30A4\u30EB +Popup=\u30DD\u30C3\u30D7\u30A2\u30C3\u30D7 +Server_Charset=\u30B5\u30FC\u30D0\u30FC\u30B3\u30FC\u30C7\u30A3\u30F3\u30B0 +CellWrite-Repeat_Content_When_Paging=\u6539\u9801\u3059\u308B\u6642\u7E70\u308A\u8FD4\u3057\u624B\u8868\u793A\u3059\u308B +Utils-No_Pagination=\u6539\u30DA\u30FC\u30B8\u3057\u306A\u3044 +Form-NullLayout=\u7D76\u5BFE\u5B9A\u4F4D +ConditionB-Remove_bracket=\u62EC\u5F27\u3092\u524A\u9664\u3059\u308B +email=\u30E1\u30FC\u30EB\u30DC\u30C3\u30AF\u30B9 +Minute=\u5206\u9593 +FR-Designer-Plugin_Update=\u30D7\u30E9\u30B0\u30A4\u30F3\u66F4\u65B0 +alraedy_close=\u3059\u3067\u306B\u30AA\u30D5 +ComboCheckBox-End_Symbol=\u7D42\u7D50\u6587\u5B57 +DataColumn=\u30C7\u30FC\u30BF\u5217 +Form-Password=\u30D1\u30B9\u30EF\u30FC\u30C9 +FR-Background_Image_Adjust=\u9069\u5FDC +Export-Excel-PageToSheet=\u30B7\u30FC\u30C8 +Edit-Row_Count=\u884C\u6570 +DS-Report_TableData=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8 +Sche-Hour=\u6642 +Group_Count=\u7DCF\u6570\u8868\u793A +EndValue=\u7D42\u4E86\u5024 +FR-Designer_Sytle-Indentation=\u30A4\u30F3\u30C7\u30F3\u30C8 +DownBarBorderStyleAndColor=\u30D5\u30A9\u30FC\u30EB\u30AB\u30E9\u30E0\u30B9\u30BF\u30A4\u30EB +World=\u4E16\u754C +FR-Designer-Basic_Cancel=\u30AD\u30E3\u30F3\u30BB\u30EB +Finally=\u6700\u5F8C +Low=\u4F4E +Please_Input_The_Key=\u5BFE\u5FDC\u3059\u308B\u30DE\u30C3\u30D7\u306B\u4F7F\u7528\u3059\u308Bkey\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044 +Smart=\u30A4\u30F3\u30C6\u30EA\u30B8\u30A7\u30F3\u30C8 +Preference-Predefined=\u30D7\u30EC\u5B9A\u7FA9 +Current_custom_global=\u73FE\u5728\u306E\u5E33\u7968\u304C\u7528\u3044\u308B\u30AB\u30B9\u30BF\u30DE\u30A4\u30BA\u5168\u5C40\u30B9\u30BF\u30A4\u30EB +FR-Designer-Plugin_Shop_Need_Install=\u3042\u306A\u305F\u304C\u30A2\u30C9\u30AA\u30F3\u3055\u308C\u3066\u3044\u306A\u3044\u30EA\u30BD\u30FC\u30B9\u306E\u5E97\u8217\u3092\u3001\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u3059\u308B\u304B\u3069\u3046\u304B\uFF1F +WEB-Pagination_Setting=\u30DA\u30FC\u30B8\u5225\u30D7\u30EC\u30D3\u30E5\u30FC\u8A2D\u5B9A +RCodeDrawPix=\u753B\u7D20 +FR-Designer-Widget-Style_Alpha=\u4E0D\u900F\u660E\u5EA6 +BorderLayout-North=\u5317 +HJS-Current_Page=\u30AB\u30EC\u30F3\u30C8\u30DA\u30FC\u30B8 +Compile=\u7DE8\u96C6\u7FFB\u8A33 +Show_Blank_Row=\u7A7A\u767D\u884C\u3092\u88DC\u5145 +TableData_Dynamic_Parameter_Setting=\u30C0\u30A4\u30CA\u30DF\u30C3\u30AF\u30D1\u30E9\u30E1\u30FC\u30BF +FR-Background_Image_Default=\u30C7\u30D5\u30A9\u30EB\u30C8 +BackgroundTexture-WhiteMarble=\u767D\u3044\u5927\u7406\u77F3 +DataFunction-Sum=\u5408\u8A08 +Collect-The_user_information_code_is_invalid=\u3053\u306E\u30A2\u30AF\u30C6\u30A3\u30D9\u30FC\u30C8\u30B3\u30FC\u30C9\u306F\u7121\u52B9\u3067\u3059\u3002\u516C\u5F0F\u30DB\u30FC\u30E0\u30DA\u30FC\u30B8\u3067\u7533\u8ACB\u3057\u306A\u304A\u3057\u3066\u304F\u3060\u3055\u3044 +Preference-Locale=\u56FD\u969B\u5316 +M_File-Export-PDF=PDF +BiasD-From-lower_left_to_upper_right=\u5DE6\u4E0B\u5074\u304B\u3089\u53F3\u4E0A\u5074\u3078\u5E83\u304C\u308B +Border-Style=\u67A0\u7DDA\u306E\u30B9\u30BF\u30A4\u30EB +Sort=\u30BD\u30FC\u30C8 +Image-Image_Layout=\u30A4\u30E1\u30FC\u30B8\u30EC\u30A4\u30A2\u30A6\u30C8 +Panel=\u30D1\u30CD\u30EB +FR-Designer-Basic_Copy_Build_NO_OK=\u7D44\u307F\u7ACB\u3066\u30D0\u30FC\u30B8\u30E7\u30F3\u756A\u53F7\u306B\u30B3\u30D4\u30FC\u3057\u307E\u3057\u305F +All_Border_Line=\u3059\u3079\u3066\u306E\u5883\u754C +FR-Utils-Please_Input_a_New_Name=\u65B0\u3057\u3044\u540D\u79F0\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044 +FR-Base_Formula_Plugin=\u30D7\u30E9\u30B0\u30A4\u30F3\u95A2\u6570 +Two_Rows_Of_Three_Grid=3\u683C\u5B50\u306E\u4E8C\u5217 +FR-Designer_Certificate_Pass=https\u30B7\u30FC\u30AF\u30EC\u30C3\u30C8\u30AD\u30FC +Bubble-Series_Name=\u7CFB\u5217\u540D +M-New_Multi_Report=\u7D71\u8A08\u5E33\u7968\u3092\u65B0\u898F\u4F5C\u6210(M) +BackgroundTexture-PinkTissuePaper=\u30D4\u30F3\u30AF\u8272\u306E\u30B5\u30F3\u30C9\u30DA\u30FC\u30D1\u30FC +Preference-Support_Default_Parent_Calculate=\u30C7\u30D5\u30A9\u30EB\u30C8\u89AA\u30BB\u30EB\u306E\u8A08\u7B97 +Show_Blank_Column=\u7A7A\u767D\u5217\u3092\u88DC\u5145 +BaiduMap=\u767E\u5EA6\u30DE\u30C3\u30D7 +Report-Web_Attributes=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8Web\u5C5E\u6027 +FR-Designer_StyleAlignment-Wrap_Text=\u81EA\u52D5\u6298\u308A\u8FD4\u3057 +Need=\u5FC5\u8981 +Parameter-Double=\u500D\u7CBE\u5EA6\u6D6E\u52D5\u5C0F\u6570\u70B9\u6570\u578B +Config_Servlet=\u9060\u9694\u30B5\u30FC\u30D0\u30FC\u914D\u7F6E +Form-Comma=\u30B3\u30F3\u30DE +Verify=\u691C\u8A3C +PageSetup-Landscape=\u6A2A\u65B9\u5411 +Weeks=\u9031\u9593 +FR-Designer-Widget-Style_Title_Background=\u6A19\u984C\u80CC\u666F +Preference-Pagination_Line_Color=\u6539\u30DA\u30FC\u30B8\u7DDA\u306E\u8272 +Test_URL=\u30C6\u30B9\u30C8\u63A5\u7D9A +Fill_blank_Data=\u7A7A\u767D\u30C7\u30FC\u30BF\u306E\u88DC\u5145 +ReportServerP-The_name_of_printer_cannot_be_null=\u30D7\u30EA\u30F3\u30BF\u30FC\u306E\u540D\u524D\u306F\u7A7A\u5024\u306B\u306A\u306F\u3044\u3051\u307E\u305B\u3093 +FR-Designer-Basic_Copy_Activation_Key=\u30C0\u30D6\u30EB\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u30C7\u30B6\u30A4\u30CA\u30FC\u6574\u7406\u756A\u53F7\u3092\u30AF\u30EA\u30C3\u30D7\u30DC\u30FC +Continuum=\u96A3\u63A5\u9023\u7D9A +BackgroundTexture-MediumWood=\u6FC3\u3044\u8272\u306E\u6728\u76EE +Datasource-Column_Index=\u30B3\u30E9\u30E0\u756A\u53F7 +Function-Function_File=\u95A2\u6570\u30D5\u30A1\u30A4\u30EB +Form-Component_Bounds=\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u9818\u57DF +Utils-Submit=\u63D0\u51FA +Conditions_formula=\u6761\u4EF6\u516C\u5F0F +M_Insert-Image=\u30A4\u30E1\u30FC\u30B8 +FR-Designer-Plugin_Will_Be_Delete=\u30D7\u30E9\u30B0\u30A4\u30F3\u306F\u524A\u9664\u3055\u308C\u307E\u3057\u305F\u3002\u30C7\u30B6\u30A4\u30CA\u30FC\u3068\u30B5\u30FC\u30D0\u30FC\u3092\u518D\u8D77 +FormulaD-Functions=\u95A2\u6570 +Mobile_Terminal=\u79FB\u52D5\u7AEF +CheckBox=\u30C1\u30A7\u30C3\u30AF\u30DC\u30C3\u30AF\u30B9 +FR-Designer-Plugin_Install=\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB +Sun=\u65E5 +FR-Designer_ToolBar_Bottom=\u30D5\u30C3\u30BF\u30FC\u30C4\u30FC\u30EB\u30D0\u30FC +Widget-Width=\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u5E45 +Series_Name=\u7CFB\u5217\u540D +Set_Row_Title_Start=\u91CD\u8907\u3059\u308B\u6A19\u984C\u884C\u3092\u8A2D\u5B9A +HF-Default_Page=\u30C7\u30D5\u30A9\u30EB\u30C8\u30DA\u30FC\u30B8 +Env_Des=\u30ED\u30B0\u30A4\u30F3\u74B0\u5883\u4E2D\u306E\u5E33\u7968\u5DE5\u7A0B\u306B\u6A29\u9650\u3092\u4ED8\u4E0E\u3059\u308B\u5834\u5408\u3001\u30E6\u30FC\u30B6\u30FC\u540D\u3068\u30D1\u30B9\u30EF\u30FC\u30C9\u306E\u8A18\u5165\u306F\u5FC5\u305A +Widget-User_Defined=\u30D7\u30EC\u5B9A\u7FA9 +Url_location=\u7D76\u5BFE\u30EB\u30FC\u30C8 +Disk_File=\u30CF\u30FC\u30C9\u30C7\u30A3\u30B9\u30AF\u30D5\u30A1\u30A4\u30EB +Inside=\u5185\u90E8 +FR-Designer_filedChosen= +ServerM-Predefined_Styles=\u30D7\u30EC\u5B9A\u7FA9\u30B9\u30BF\u30A4\u30EB +is_need_word_adjust=\u884C\u306E\u9AD8\u3055\u3092\u56FA\u5B9A\u305B\u305A\u5C0E\u51FA +Background-Null=\u80CC\u666F\u306A\u3057 +PageSetup-Vertically=\u5782\u76F4\u4E2D\u592E\u63C3\u3048 +FR-Designer_Root=\u30EB\u30FC\u30C8\u30CE\u30FC\u30C9 +FR-Designer_Form-TextArea=\u6587\u66F8\u57DF +ReportServerP-Import_JavaScript=JavaScript\u5F15\u7528 +Form-TableTree=\u8868\u30C4\u30EA\u30FC +Opened=\u8D77\u52D5\u6E08\u307F +M_Edit-Delete=\u524A\u9664(D) +Widget-Form_Widget_Container=\u8868\u5BB9\u5668 +BindColumn-Summary=\u96C6\u8A08 +Sche-Second=\u79D2 +Server-Open_Service_Manager=\u30B5\u30FC\u30D3\u30B9\u7BA1\u7406\u5668\u3092\u958B\u304F +FRFont-Effects=\u7279\u5225\u52B9\u679C +OtherGroup_Name=\u305D\u306E\u4ED6\u30B0\u30EB\u30FC\u30D7\u306E\u540D\u524D +Specify=\u6307\u5B9A\u3059\u308B +Highlight-Click_to_Choose_Property_To_Modify=\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u5909\u66F4\u3059\u308B\u5C5E\u6027\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044 +triggered=\u30C8\u30EA\u30AC\u30FC +Double_Bottom_BorderLine=\u4E8C\u91CD\u5E95\u30D5\u30EC\u30FC\u30E0\u30E9\u30A4\u30F3 +M_Insert-Sub_Report=\u30B5\u30D6\u5E33\u7968 +Unit_Ten=\u5341 +Polybolck=\u30A2\u30B0\u30EA\u30B2\u30FC\u30B7\u30E7\u30F3\u30D6\u30ED\u30C3\u30AF +Select_sort_order=\u6392\u5217\u9806\u5E8F\u3092\u9078\u629E +HJS-Mail_to=\u53D7\u4FE1\u8005 +StyleAlignment-Left=\u5DE6\u8A70\u3081 +Two_Rows_Of_Two_Grid=2\u884C2\u5217\u306E\u683C\u5B50 +FR-Designer-Form-Please_Drag_ParaPane=\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u30D1\u30CD\u30EB\u3092\u3057\u307E\u3063\u3066\u304F\u3060\u3055\u3044 +Milliseconds=\u30DF\u30EA\u79D2 +DataFunction-None=\u306A\u3057 +Delivery=\u4F1D\u9054 +ColumnSpan=\u5217\u7BC4\u56F2 +StyleAlignment-Bottom=\u4E0B\u8A70\u3081 +Read_failure=\u8AAD\u307F\u306B\u969C\u5BB3\u304C\u767A\u751F\u3059\u308B\u3068\u3001\u30BD\u30FC\u30B9\u00B7\u30D5\u30A1\u30A4\u30EB\u304C\u7834\u640D\u3057\u3066\u3044\u308B +Verify-Verify=\u30C7\u30FC\u30BF\u691C\u8A3C +FR-Designer-Widget-Style_Title_Format=\u6A19\u984C\u66F8\u5F0F +FR-Designer_Edit_String_To_Formula=\u30AD\u30E3\u30E9\u30AF\u30BF\u30FC\u6587\u5B57\u5217\u3092\u7DE8\u96C6\u3057\u3066\u516C\u5F0F\u3068\u3059\u308B\u304B\u5426\u304B +FR-Base_UnSignIn=\ \u672A\u30ED\u30B0\u30A4\u30F3 +Every=\u6BCF +CellWrite-Preview_Cell_Content=\u30BB\u30EB\u306E\u5185\u5BB9\u3092\u30D7\u30EC\u30D3\u30E5\u30FC\u3059\u308B +FormulaD-Data_Fields=\u30C7\u30FC\u30BF\u30D5\u30A3\u30FC\u30EB\u30C9 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index 875394618..39ebe76b6 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -518,7 +518,6 @@ 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}" \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 @@ -598,3 +597,1390 @@ FR-Designer_Delete_Template= FR-Designer_Mobile_Report_Analysis_Annotation= FR-Designer_DoubleLayer_Report= FR-Designer_Validate= +CellWrite-InsertRow_NULL=\uB110\uAC12 +DashBoard-ChartFloat=\uCC28\uD2B8 +contact_info=\uC5F0\uB77D\uC815\uBCF4(\uC120\uD0DD) +Page_Setup=\uC6F9\uD398\uC774\uC9C0\uC124\uC815 +CellWrite-Print_Export=\uC778\uC1C4\uB098\uAC00\uAE30 +Cannot_Get_Date=\uB0A0\uC9DC\uB97C\uBD88\uB7EC\uC62C\uC218\uC5C6\uC2B5\uB2C8\uB2E4. +FR-Designer_Modify=\uC218\uC815 +M-Write_Preview=\uAE30\uC785\uBBF8\uB9AC\uBCF4\uAE30 +FR-Base_RWA-Key=\uB9C8\uC2A4\uD130\uD0A4 +China=\uC911\uAD6D +Set_Legend_Sytle=\uB3C4\uD45C\uBC94\uB840\uC11C\uC2DD\uC124\uC815 +FR-Designer_Number=\uC22B\uC790 +FR-Designer-Widget-Style_Common=\uC77C\uBC18 +M-Save_As=\uB2E4\uB978\uC774\uB984\uC73C\uB85C\uC800\uC7A5 +Following_parameters_are_not_generated=\uB2E4\uC74C\uB9E4\uAC1C\uBCC0\uC218\uAC00\uC0DD\uC131\uB418\uC9C0\uC54A\uC558\uC2B5\uB2C8\uB2E4. +FR-Designer-Basic_Activation_Key_Copy_OK=\uD074\uB9BD\uBCF4\uB4DC\uC5D0\uBCF5\uC0AC\uB418\uC5C8\uC2B5\uB2C8\uB2E4. +Utils-Current_Sheet=\uD604\uC7AC Sheet +ConditionB-is_less_than=< +BorderLayout-West=\uC11C +AnalysisLine=\uBD84\uC11D\uC120 +Layer_Report_Warnning_info=\uD589\uD0C0\uC785\uC5D4\uC9C4\uC740\uB300\uC6A9\uB7C9\uB370\uC774\uD130\uC5D0\uC11C\uB9CC\uC801\uC6A9\uB429\uB2C8\uB2E4.
\uC774\uC5D4\uC9C4\uC744\uC0AC\uC6A9\uD558\uBA74\uC9C0\uC6D0\uB418\uC9C0\uC54A\uB294\uBB38\uC11C\uD2B9\uC131\uC774\uB9CE\uC544\uC9D1\uB2C8\uB2E4.
\uC0C1\uC138\uB0B4\uC6A9\uC740\uBB38\uC11C\uC758\uAD00\uB828\uC7A5\uC808\uC744\uCC38\uC870\uD574\uC8FC\uC138\uC694. +Tree-Width=\uB108\uBE44 +alert_word=\uBE44\uACE0\uC815\uD589\uB192\uC774\uB0B4\uBCF4\uB0B4\uAE30\uB97C\uC120\uD0DD\uD558\uBA74\uD3B8\uC9D1\uB0B4\uBCF4\uB0B4\uAE30\uC758 word, \uC140\uD589\uB192\uC774\uAC00\uB0B4\uC6A9\uC5D0\uB530\uB77C\uC790\uB3D9\uC73C\uB85C\uB298\uC5B4\uB098\uBA70,\uC774\uC0C1\uD669\uC5D0\uC11C\uB0B4\uBCF4\uB0B4\uAE30\uACB0\uACFC\uD398\uC774\uC9C0\uB098\uB204\uAE30\uC704\uCE58\uB294\uBBF8\uB9AC\uBCF4\uAE30\uACB0\uACFC\uC640\uC77C\uCE58\uD558\uC9C0\uC54A\uC744\uC218\uC788\uC2B5\uB2C8\uB2E4. +PageSetup-Paper_Size=\uC885\uC774\uD06C\uAE30 +M-Page_Setup=\uC6F9\uD398\uC774\uC9C0\uC124\uC815 +DashBoard-FormBook=\uD3FC +X-Coordinate=\uAC00\uB85C\uC88C\uD45C +Style-Line_Spacing=\uD589\uAC04\uACA9 +FR-Designer_Plugin_Should_Update_Title= +Server-Define_Data_Connection=\uB370\uC774\uD130\uB9C1\uD06C\uC815\uC758 +BarInside=\uCEEC\uB7FC\uC548\uCABD +Border-Color=\uD14C\uB450\uB9AC\uC0C9 +NotAllow=\uD569\uBC95\uC801\uC774\uC9C0\uC54A\uC2B5\uB2C8\uB2E4. +Utils-File_type=\uD30C\uC77C\uC720\uD615 +FR-Designer-Plugin_Install_From_Local=\uB85C\uCEEC\uD30C\uC77C\uC5D0\uC11C\uC124\uCE58 +Summary_Method=\uCDE8\uD569\uBC29\uC2DD +Select_Specified_Grouping=\uC0AC\uC6A9\uC790\uC815\uC758\uADF8\uB8F9\uC120\uD0DD +HF-Number_of_Page=\uCD1D\uD398\uC774\uC9C0\uC218 +FR-Designer-Tree_Height=\uB192\uC774 +Owner=\uB9C8\uC2A4\uD130 +Home=\uD648\uD398\uC774\uC9C0 +FR-Server_Embedded_Server_Stop=\uB0B4\uC7A5\uB41C\uC11C\uBC84-\uC815\uC9C0 +FR-Designer-Plugin_Detecting_Update=\uC5C5\uB370\uC774\uD2B8\uAC80\uC0AC\uC911 +HF-Whether_to_define_the_selected_type=\uC120\uD0DD\uD55C\uC720\uD615\uC744\uC815\uC758\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C? +StyleAlignment-Right=\uC624\uB978\uCABD\uC5D0\uB9DE\uCDA4 +FR-Designer_Alignment-Style=\uC815\uB82C\uBC29\uC2DD +PageSetup-Title_Start_Column=\uC911\uBCF5\uC81C\uBAA9\uC5F4 +Tree-Mutiple_Selection_Or_Not=\uB2E4\uC911\uC120\uD0DD +FR-Designer-Plugin_Search=\uAC80\uC0C9 +Choose_Role=\uAD8C\uD55C\uCEE8\uD2B8\uB864 +Append_Delete_Row_Message=\uC8FC\uC758\uFF01 \uC9C0\uC815\uB41C\uC140\uC740\uD655\uC7A5\uC18D\uC131\uC744\uC124\uC815\uD574\uC57C\uD569\uB2C8\uB2E4. +Form-ComboBox=\uBC15\uC2A4\uD480\uB2E4\uC6B4 +PageSetup-Footer=\uD398\uC774\uC9C0\uBC14\uB2E5\uAE00 +Sorting=\uC21C\uC11C\uC911 +DBCP_TEST_WHILE_IDLE=\uC720\uD734\uD68C\uC218\uAE30\uAC80\uC0AC\uC5F4\uAE30 +DS-Embedded_TableData=\uB0B4\uC7A5 \uB370\uC774\uD130 \uC138\uD2B8 +FR-Designer_No-Privilege=\uAD8C\uD55C\uC5C6\uC74C +FRFont-Subscript=\uBC11\uC904 +Background_Settings=\uBC30\uACBD\uC124\uC815 +FormulaD-Invalid_Formula=\uC62C\uBC14\uB974\uC9C0\uC54A\uC740\uC218\uC2DD +FR-Base_Margin=\uC5EC\uBC31 +FR-Designer-Plugin_Shop_Installed=\uD50C\uB7EC\uADF8\uC778 \uC0C1\uC810 \uC989\uC2DC \uC2DC\uC791\uD560\uC9C0 \uC5EC\uBD80\uB97C \uC124\uCE58? +M_Edit-Send_to_Back=\uC81C\uC77C\uBC11\uC5D0\uB450\uAE30(K) +Email-Can_Preview_Report_Content=\uBCF8\uBB38\uBBF8\uB9AC\uBCF4\uAE30\uBB38\uC11C\uB0B4\uC6A9 +FR-Designer-FRFont_Italic=\uAE30\uC6B8\uC784\uAF34 +CellWrite-Print_Background=\uC778\uC1C4/\uBD88\uB7EC\uC624\uAE30 \uC140 \uBC30\uACBD +Wizard=\uC548\uB0B4 +Preference-Is_Drag_Permited=\uB4DC\uB798\uADF8\uC9C0\uC6D0 +FR-Designer_Release_Lock=\uBE44\uBC00\uBC88\uD638\uD574\uC81C +Form-Delimiter=\uAD6C\uBD84\uBB38\uC790 +wrong=\uC624\uB958\uAC00\uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4. +FR-Menu-Server_Chart_PreStyle=\uCC28\uD2B8\uC0AC\uC804\uC815\uC758\uB41C\uC0C9\uBC30\uD569 +Form-Button=\uD0A4 +FormulaD-Valid_Formula=\uB9DE\uB294\uC218\uC2DD +ParameterD-Parameter_Interface=\uB9E4\uAC1C\uBCC0\uC218\uC0AC\uC6A9\uC790\uC778\uD130\uD398\uC774\uC2A4 +At_least_one_visual_worksheet=\uC6CC\uD06C\uBD81\uC5D0\uCD5C\uC18C\uD55C\uAC1C\uC758\uBCF4\uC774\uB294\uC6CC\uD06C\uC2DC\uD2B8\uAC00\uC788\uC5B4\uC57C\uD558\uBA70,\uC0AD\uC81C\uB97C\uC6D0\uD560\uACBD\uC6B0\uC0C8\uC6CC\uD06C\uC2DC\uD2B8\uB97C\uC0BD\uC785\uD574\uC8FC\uC2ED\uC2DC\uC624. +Need_Min_Value=\uD544\uC694\uCD5C\uC18C\uAC12 +Allow_Blank=\uBE48\uCE78\uD5C8\uC6A9 +CellWrite-InsertRow_DEFAULT=\uAE30\uBCF8\uAC12 +Widget-Load_By_Complete=\uC644\uC804\uB85C\uB529 +FR-Designer-Basic_Only_Submit_Current_Sheet= +Sort-Sort_Order=\uC815\uB82C\uC21C\uC11C +File-File_Size_Limit=\uD30C\uC77C\uD06C\uAE30\uC81C\uD55C +PrintP-Print=\uC778\uC1C4(T) +FR-Designer-StyleAlignment_Center=\uAC00\uC6B4\uB370\uC815\uB82C +Preference-Setting_Colors=\uC0C9\uC124\uC815 +Judge=\uD310\uB2E8 +Image-Adjust=\uC801\uC6A9 +Collect-User_Information_DES=\uD65C\uC131\uCF54\uB4DC\uB294\uC0AC\uC6A9\uC790\uC815\uBCF4\uC218\uC9D1\uC5D0\uB9CC\uC774\uC6A9\uB418\uBA70, \uC0C1\uB2E8\uC758 "\uD65C\uC131\uCF54\uB4DC"\uD0A4\uC218\uB839\uC744\uD074\uB9AD\uD558\uBA74\uC0C8\uB85C\uC6B4\uC6F9\uBE0C\uB77C\uC6B0\uC800\uD31D\uC5C5\uC774\uB098\uD0C0\uB0A9\uB2C8\uB2E4.\uC81C\uD488\uD648\uD398\uC774\uC9C0\uC5D0\uB85C\uADF8\uC778\uD558\uC5EC\uBB34\uB8CC\uB85C\uC774\uD65C\uC131\uCF54\uB4DC\uB97C\uBC1B\uB294\uB3703\uBD84\uC774\uC18C\uC6A9\uB418\uBA70\uD55C\uBC88\uB9CC\uC2E4\uC2DC\uD558\uBA74\uB429\uB2C8\uB2E4. +FR-Designer_Plugin_Normal_Update_From_Local=\uB85C\uCEEC\uC5D0\uC11C\uD30C\uC77C\uC5C5\uB370\uC774\uD2B8 +BackgroundTexture-Canvas=\uCE94\uBC84\uC2A4 +BarOutSide=\uCEEC\uB7FC\uBC14\uAE65\uCABD +Preview_ToolTips=\uBBF8\uB9AC\uBCF4\uAE30\uC54C\uB9BC +FRFont-Family=\uC774\uB984 +FR-Lic_does_not_Support_Remote=\uD604\uC7AC \uC0AC\uC6A9\uD558\uACE0 \uC788\uB294 lic\uC740 \uC6D0\uACA9 \uB514\uC790\uC778 \uAE30\uB2A5\uC744 \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uC73C\uBBC0\uB85C lic\uC744 \uC5C5\uADF8\uB808\uC774\uB4DC \uD574 \uC8FC\uC2ED\uC2DC\uC624. +InterfaceStyle=\uC2A4\uD0C0\uC77C +RWA-Key=\uB9C8\uC2A4\uD130\uD0A4 +WF-Name=\uBA85\uCE6D +RWA-Click_Cell_To_Edit_Value=\uD15C\uD50C\uB9BF\uC140\uC218\uC815\uAC12\uD074\uB9AD +Utils-Row_Height=\uD589\uB192\uC774 +ReportD-Excel_Export=\uD15C\uD50C\uB9BF\uB0B4\uBCF4\uB0B4\uAE30\uC18D\uC131 +Form-Please_Select_A_Kind_Of_Form_Container=\uD3FC\uCEE8\uD14C\uC774\uB108\uB97C\uC120\uD0DD\uD574\uC8FC\uC2ED\uC2DC\uC694 +Column_Does_Not_Exsit=\uC5F4\uC774\uC874\uC7AC\uD558\uC9C0\uC54A\uC2B5\uB2C8\uB2E4. +M_Insert-Hyperlink=\uD558\uC774\uD37C\uB9C1\uD06C +can_not_include_underline="_"\uB294\uD3EC\uD568\uD560\uC218\uC5C6\uC2B5\uB2C8\uB2E4. +FR-Designer-Plugin_Jar_Expired=Jar\uD329\uC774\uB108\uBB34\uC624\uB798\uB418\uC5C8\uC2B5\uB2C8\uB2E4. +FR-Background_Image_Extend=\uC7A1\uC544\uB2F9\uAE40 +TopDownShade=\uC0C1\uD558 \uADF8\uB77C\uB370\uC774\uC158 +FR-Base_Right=\uC624\uB298\uCABD +DataBinding=\uB370\uC774\uD130\uBC14\uC778\uB529 +ConnectionPool_Attr=\uCEE4\uB125\uC158\uD480\uC18D\uC131 +Connect_SQL_Cannot_Null=\uB370\uC774\uD130\uB9C1\uD06C\uC640SQL\uD328\uB110\uC740\uBE48\uCE78\uC73C\uB85C\uB458\uC218\uC5C6\uC2B5\uB2C8\uB2E4. +DBCP_MAX_ACTIVE=\uCD5C\uB300 \uC561\uD2F0\uBE0C \uC5F0\uACB0 \uC218 +M_Window-Preference=\uC635\uC158 +ToolBar_Top=\uC0C1\uB2E8\uD234\uBC14 +FR-Designer_Indent-Pixel=\uD654\uC18C +FR-Designer_Unit_MM=\uBC00\uB9AC\uBBF8\uD130 +IDLE=\uC720\uD734 +FRFont-Underline=\uBC11\uC904 +FR-Designer-Plugin_Read_Plugin_List_Error=\uD50C\uB7EC\uADF8\uC778\uB9AC\uC2A4\uD2B8\uB97C\uC77D\uC744\uB54C\uC624\uB958\uBC1C\uC0DD +Type_Set=\uC720\uD615\uC124\uC815 +M_Format_A-Cell_Attributes=\uAE30\uD0C0\uC18D\uC131 +CellWrite-Show_As_Image=\uC774\uBBF8\uC9C0\uB85C\uB0B4\uC6A9\uBCF4\uC774\uAE30 +ShowAsDownload=\uB2E4\uC6B4\uB85C\uB4DC\uB9C1\uD06C\uB85C2\uC9C4\uBC95\uB0B4\uC6A9\uBCF4\uC774\uAE30 +Form-ComboCheckBox=\uCCB4\uD06C\uBC15\uC2A4\uD480\uB2E4\uC6B4 +BackgroundTexture-WovenMat=\uD3B8\uC9C1\uBB3C +BindColumn-Custom_Data_Appearance=\uC0AC\uC6A9\uC790\uC815\uC758\uBCF4\uC774\uAE30 +Actived=\uD65C\uC131\uD654\uB41C +Env-Local_Directory=\uB85C\uCEEC\uB514\uB809\uD130\uB9AC +Form-Colon=\uCF5C\uB860 +Preference-Vertical_Scroll_Bar_Visible=\uC218\uC9C1\uC2A4\uD06C\uB864\uBC14\uB97C\uBCFC\uC218\uC788\uC2B5\uB2C8\uB2E4. +Utils-Show_Cell_Value=\uC140\uAC12\uBCF4\uC774\uAE30 +FR-Designer_ReportColumns-Repeat_Row=\uD589\uBCF5\uC0AC\uC21C\uC11C +SpecifiedG-Specified_Group=\uC0AC\uC6A9\uC790\uC815\uC758\uADF8\uB8F9 +RWA-Smart_Add_Cells=\uC140\uC2A4\uB9C8\uD2B8\uCD94\uAC00 +HF-Left_Section=\uC67C\uCABD\uC601\uC5ED +M_Report-Report_Background=\uC885\uC774\uBC30\uACBD +Image-Extend=\uC7A1\uC544\uB2F9\uAE40 +FS_BI=\uC815\uCC45\uD50C\uB7AB\uD3FC +ToolBar_Bottom=\uD558\uB2E8\uD234\uBC14 +Hgap=\uC218\uD3C9\uD2C8 +FR-Designer_Enter-New-FileName=\uC0C8\uB85C\uC6B4\uD30C\uC77C\uBA85\uC744\uC785\uB825\uD574\uC8FC\uC2ED\uC2DC\uC624. +Verify_Fail=\uAC80\uC0AC\uC2E4\uD328 +CellWrite-InsertRow_Policy=\uD589\uC0BD\uC785\uC815\uCC45 +FR-Designer-Plugin_Illegal_Plugin_Zip=\uB9DE\uB294\uD50C\uB7EC\uADF8\uC778\uD328\uD0A4\uC9C0\uAC00\uC544\uB2D9\uB2C8\uB2E4. +RCodeVersion=\uBC84\uC804 +Convert=\uC804\uD658 +Please_Drag=\uD589\uACFC\uC5F4\uD544\uB4DC\u3001\uCDE8\uD569\uD544\uB4DC\uB97C\uB4DC\uB798\uADF8\uD574\uC8FC\uC2ED\uC2DC\uC624 +FR-Designer-Widget-Style_Preview=\uBBF8\uB9AC\uBCF4\uAE30 +mobile_number=\uD734\uB300\uD3F0\uBC88\uD638 +FR-Designer_Form-ComboCheckBox=\uCCB4\uD06C\uBC15\uC2A4\uD480\uB2E4\uC6B4 +CacheValidateTime=\uBB38\uC11C\uCE90\uC2DC\uC720\uD6A8\uAE30\uAC04 +Hyperlink-Extends_Report_Parameters=\uBB38\uC11C\uC758\uB9E4\uAC1C\uBCC0\uC218\uACC4\uC2B9 +FR-Designer_Values-Editor=\uAC12\uD3B8\uC9D1\uAE30 +Export-Excel=Excel\uC11C\uC2DD +Utils-Left_to_Right=\uAC00\uB85C +ExpandD-Vertical_Extendable=\uC138\uB85C\uB85C\uD655\uC7A5\uAC00\uB2A5 +Utils-Report_Runtime_Env=\uBB38\uC11C\uC791\uC5C5\uB514\uB809\uD130\uB9AC +Utils-Right_to_Left=\uC624\uB978\uCABD\uC5D0\uC11C\uC67C\uCABD\uAE4C\uC9C0 +Utils-Beyond_the_top_side_of_Border=\uC704\uACBD\uACC4\uC120\uBC97\uC5B4\uB0A8 +Exception_StackTrace=\uC2A4\uD0DD\uC815\uBCF4\uC624\uB958 +Corresponding_Fields=\uC0C1\uC751\uD558\uB294\uD544\uB4DC +Form-CheckBox=\uCCB4\uD06C\uBC15\uC2A4 +Utils-Current_Row=\uD604\uC7AC\uD589 +BuildIn=\uB0B4\uC7A5 +BindColumn-Results_Filter=\uACB0\uACFC\uC9D1\uC120\uBCC4 +FR-Designer-Plugin_Manager=\uD50C\uB7EC\uADF8\uC778\uAD00\uB9AC +M_File-Export-CSV=CSV\uC11C\uC2DD(\uC27C\uD45C\uAD6C\uBD84) +Data_Filter=\uB370\uC774\uD130\uC120\uBCC4 +ReportServerP-Edit_Printer=\uD504\uB9B0\uD130\uD3B8\uC9D1 +FR-Designer_Datasource-Stored_Procedure=\uC800\uC7A5\uACFC\uC815 +RESTART=\uC7AC\uBD80\uD305 +FormulaD-Function_name=\uD568\uC218\uC774\uB984 +ChooseOneButton=\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4\uC120\uD0DD\uD6C4\uCD94\uAC00\uD574\uC8FC\uC2ED\uC2DC\uC624 +Priority=\uC6B0\uC120\uC21C\uC704 +Datasource-Datasource=\uB370\uC774\uD130\uC18C\uC2A4 +FR-Designer_Width=\uB108\uBE44 +Cannot-Add_To_This_Area=\uD574\uB2F9\uC601\uC5ED\uC5D0\uCD94\uAC00\uD560\uC218\uC5C6\uC2B5\uB2C8\uB2E4. +Run=\uC2E4\uD589 +Set_Submit_Condition=\uC81C\uCD9C\uC870\uAC74\uC124\uC815 +FR-Base_Value=\uAC12 +fileLocked_undeleted=\uD15C\uD50C\uB9BF\uC774\uC7A0\uACA8\uC788\uC5B4\uC0AD\uC81C\uD560\uC218\uC5C6\uC2B5\uB2C8\uB2E4\uFF01 \uD655\uC778\uC744\uD074\uB9AD\uD558\uC5EC\uD15C\uD50C\uB9BF\uB9AC\uC2A4\uD2B8\uC0C8\uB85C\uACE0\uCE68 +Web_Apply=WEB\uC751\uC6A9 +Refresh_Database=\uB370\uC774\uD130\uBCA0\uC774\uC2A4\uC0C8\uB85C\uACE0\uCE68 +Set_Row_Title_End=\uC911\uBCF5\uC885\uB8CC\uD589\uC124\uC815 +FR-Utils-New_Folder=\uC0C8\uD3F4\uB354 +BiasD-From-upper_left_to_lower_right=\uC67C\uCABD\uC0C1\uB2E8\uC5D0\uC11C\uC624\uB978\uCABD\uC544\uB798\uB85C\uB098\uD0C0\uB0B4\uAE30 +CapsLock=\uCEA1\uC2A4\uB85C\uD06C\uD0A4\uAC00\uCF1C\uC838\uC788\uC2B5\uB2C8\uB2E4. +StyleFormat-Sample=\uC608\uC2DC +RWA-Smart_Add_Cell_Group=\uC140\uADF8\uB8F9\uC2A4\uB9C8\uD2B8\uCD94\uAC00 +MConfig-CancelButton=\uCDE8\uC18C +Function-Choose_Function_Class=\uC120\uD0DD\uD568\uC218\uD074\uB798\uC2A4 +LatLng=\uACBD\uB3C4\uCC28\uC6D0 +DS-Server_TableData=\uC11C\uBC84\uB370\uC774\uD130\uC138\uD2B8 +BackgroundTexture-GreenMarble=\uADF8\uB9B0\uB300\uB9AC\uC11D +read_time_out=\uB85C\uB529\uC2DC\uAC04\uCD08\uACFC +JavaScript-Commit_to_Database=\uC81C\uCD9C\uC785\uACE0 +DS-Relation_TableData=\uAD00\uB828\uB370\uC774\uD130\uC138\uD2B8 +CellWrite-Page_Before_Row=\uD589\uC55E\uD398\uC774\uC9C0\uB098\uB204\uAE30 +FR-Designer-Plugin_Load_Plugins_From_Server=\uD50C\uB7EC\uADF8\uC778\uC2A4\uD1A0\uC5B4\uC5D0\uC11C\uB370\uC774\uD130\uB97C\uC5BB\uB294\uC911. +D-Dispaly_Divide_Result_Set_into_Groups=Result set\uB97C\uADF8\uB8F9\uD654\uD569\uB2C8\uB2E4. +Closed=\uC774\uBBF8\uB2EB\uD614\uC2B5\uB2C8\uB2E4. +RWA-Help=\uBBF8\uC218\uC815, \uBBF8\uC5C5\uB370\uC774\uD2B8\uB85C\uC124\uC815\uD55C\uD6C4\uBBF8\uB9AC\uBCF4\uAE30\uBB38\uC11C\uB97C\uC791\uC131\uD558\uC5EC\uB808\uCF54\uB4DC\uB41C\uC140\uC5D0\uD3B8\uC9D1\uC218\uC815\uC0AC\uD56D\uC774\uC5C6\uC744\uACBD\uC6B0\uC774\uB808\uCF54\uB4DC\uB294\uD589\uC5C5\uB370\uC774\uD2B8\uB97C\uC9C4\uD589\uD560\uC218\uC5C6\uC2B5\uB2C8\uB2E4.\n\uB300\uC6A9\uB7C9\uB370\uC774\uD130\uB808\uCF54\uB4DC\uCC3E\uC544\uBCF4\uAE30\uBC0F\uAE30\uC785\uC0C1\uD669\uC5D0\uC11C\uD574\uB2F9\uC124\uC815\uC744\uD558\uBA74\uAE30\uC785\uC81C\uCD9C\uC131\uB2A5\uC744\uB192\uC77C\uC218\uC788\uC2B5\uB2C8\uB2E4. +FR-Designer-Widget-Style_Custom= +FR-Designer-Widget-Style_Render_Style=\uB80C\uB354\uC2A4\uD0C0\uC77C +Highlight-Barcode=\uBC14\uCF54\uB4DC +FR-Designer_Connect_SQL_Cannot_Null=\uB370\uC774\uD130\uB9C1\uD06C\uC640SQL\uD328\uB110\uC740\uBE48\uCE78\uC73C\uB85C\uB458\uC218\uC5C6\uC2B5\uB2C8\uB2E4. +trigger=\uD2B8\uB9AC\uAC70 +M-Data_Analysis=\uB370\uC774\uD130\uBD84\uC11D +Function-The_selected_file_cannot_be_null=\uD30C\uC77C\uC740\uBE48\uCE78\uC73C\uB85C\uB458\uC218\uC5C6\uC2B5\uB2C8\uB2E4. +No-Privilege=\uAD8C\uD55C\uC5C6\uC74C +ReportColumns-Repeat_Column=\uC5F4\uBCF5\uC0AC\uC21C\uC11C +SecondGraduationUnit=\uBCF4\uC870\uB208\uAE08\uB2E8\uC704 +Form-Widget_Property_Value=\uC18D\uC131\uAC12 +GIVE-NAME=\uB124\uC774\uBC0D +FR-Designer_Rename=\uB9AC\uB124\uC784 +Utils-Merge_Cell=\uC140\uBCD1\uD569 +Style-Spacing_After=\uC139\uC158\uB4A4 +Enlarge_Or_Reduce=\uCD95\uC18C +Tree-Height=\uB192\uC774 +RCodeErrorCorrect=\uC5D0\uB7EC\uC218\uC815 +Enter-New-FileName=\uC0C8\uB85C\uC6B4\uD30C\uC77C\uBA85\uC744\uC785\uB825\uD574\uC8FC\uC2ED\uC2DC\uC624. +try_resending=\uB2E4\uC2DC\uBC1C\uC1A1\uD574\uC8FC\uC2ED\uC2DC\uC624. +M-Open_Report=\uC5F4\uAE30... +Please_Select=\uC120\uD0DD\uD574\uC8FC\uC2ED\uC2DC\uC624 +InRow=\uD589(R) +Form-TextArea=\uD14D\uC2A4\uD2B8\uC601\uC5ED +FR-Designer_Https_Enable=\uC2E4\uD589https +Widget-Custom_Widget_Config=\uC0AC\uC6A9\uC790\uC815\uC758\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4 +already_exists=\uC774\uBBF8\uC874\uC7AC\uD569\uB2C8\uB2E4. +Original_Marked_Filed=\uCD08\uAE30\uD0DC\uADF8\uD544\uB4DC +BackgroundTexture-Sand=\uBAA8\uB798\uC0AC\uC7A5 +Values=\uAC12 +Not_use_a_cell_attribute_table_editing=\uC140\uC18D\uC131\uC73C\uB85C\uD45C\uB97C\uD3B8\uC9D1\uD560\uC218\uC5C6\uC2B5\uB2C8\uB2E4. +Root=\uB8E8\uD2B8\uB178\uB4DC +cycle=\uC8FC\uAE30 +open-new-form-tip=\uD604\uC7AC\uD15C\uD50C\uB9BF\uC740711\uC774\uD558\uBC84\uC804\uC73C\uB85C\uC791\uC131\uB418\uC5B4\uD638\uD658\uC774\uB418\uC9C0\uC54A\uC544\uC5F4\uC218\uC5C6\uC2B5\uB2C8\uB2E4. \uC774\uD3FC\uC744\uC5F4\uC5B4\uC218\uC815\uD558\uACE0\uC790\uD560\uACBD\uC6B0\uC0C1\uC751\uD558\uB294\uBC84\uC804\uC124\uACC4\uAE30\uB85C\uC5F4\uC5B4\uC8FC\uC2ED\uC2DC\uC624. +Support-Current_Auto_Complete_Shortcut=\uD604\uC7AC\uB2E8\uCD95\uD0A4 +GROUPING_MODE=\uC77C\uBC18\uADF8\uB8F9 +DBCP_MAX_IDLE=\uCD5C\uB300 \uC720\uD734 \uC5F0\uACB0 \uC218 +BackgroundTexture-BlueTissuePaper=\uBE14\uB8E8\uC0AC\uD3EC +ReportD-Export_Hided_Row=\uC228\uAE34\uD589\uBCF4\uC774\uAE30 +FR-Custom_styles_lost=\uC0AC\uC6A9\uC790\uC815\uC758\uC591\uC2DD\uC774\uC5C6\uC2B5\uB2C8\uB2E4. +Env-Des2=Servlet\uC704\uCE58\uB294\uD638\uC2A4\uD2B8\uCEF4\uD4E8\uD130\uC774\uB984\uFF0C\uD3EC\uD2B8\uFF0CWEB\uC751\uC6A9\uFF0CServlet\uC758\uADF8\uB8F9\uC774\uBA70,Servlet\uB97C\uAC00\uB9AC\uCF1C\uC57C\uD569\uB2C8\uB2E4.\uC608: "http\://localhost\:8080/WebReport/ReportServer". \uD638\uC2A4\uD2B8\uCEF4\uD4E8\uD130\uC774\uB984\uFF0C\uD3EC\uD2B8\uFF0C WEB\uC751\uC6A9\uFF0C Servlet\uC744\uC120\uD0DD\uD560\uC218\uC788\uC73C\uBA70,\uC774\uB294\uC0AC\uC6A9\uC790\uAC00\uD544\uC694\uB85C\uD558\uB294 Servlet\uC704\uCE58\uB97C\uC790\uB3D9\uC0DD\uC131\uD569\uB2C8\uB2E4. +Env-Des1=\uBB38\uC11C\uC11C\uBC84\uAC00\uC788\uB294WEB-INF\uB514\uB809\uD130\uB9AC\uB97C\uC120\uD0DD\uD574\uC8FC\uC2ED\uC2DC\uC624. +PageSetup-Placement_Center_on_Page=\uAC00\uC6B4\uB370\uC815\uB82C\uBC29\uC2DD +sure_to_delete=\uC0AD\uC81C\uD655\uC778 +Already_exists_not_add_repeat=\uC774\uBBF8\uC874\uC7AC\uD569\uB2C8\uB2E4.\uC911\uBCF5\uCD94\uAC00\uD558\uC9C0\uB9C8\uC2ED\uC2DC\uC624. +Axis_Title=\uCD95\uC81C\uBAA9 +FR-Designer-Plugin_Install_Failed=\uD50C\uB7EC\uADF8\uC778\uC124\uCE58\uC2E4\uD328 +FR-Designer-Widget-Style_Frame=\uD504\uB808\uC784 +MainGraduationUnit=\uC8FC\uB208\uAE08\uB2E8\uC704 +Second_Axis=\uBCF4\uC870\uC88C\uD45C\uCD95 +Classifier-Ge=\uAC1C +MSBold=\uB9C8\uC774\uD06C\uB85C\uC18C\uD504\uD2B8 Yahei +Form-Design_Size=\uB514\uC790\uC778\uC0AC\uC774\uC988 +FR-App-Template_Save=\uC800\uC7A5 +ExpandD-Horizontal_Extendable=\uAC00\uB85C\uB85C\uD655\uC7A5\uAC00\uB2A5 +RP_Authority_Edit=\uAD8C\uD55C\uD3B8\uC9D1 +Warnning=\uC54C\uB9BC +RoleName_Can_Not_Be_Null=\uC5ED\uD560\uC774\uB984\uC740\uBE44\uC5B4\uC788\uAC70\uB098\uC911\uBCF5\uB418\uC5B4\uC11C\uB294\uC548\uB429\uB2C8\uB2E4. +Application=\uC560\uD50C\uB9AC\uCF00\uC774\uC158 +Formula_Dictionary_Display_Examples_Html=\uC2E4\uC81C\uAC12\uBC94\uC704:\ +ECP-error_pwd=\uBE44\uBC00\uBC88\uD638\uC785\uB825\uC624\uB958 +FR-Hyperlink_ChartHyperlink=\uCC28\uD2B8\uD558\uC774\uD37C\uB9C1\uD06C +M_Edit-FormatBrush=\uC11C\uC2DD\uD504\uB9B0\uD2B8(B) +Indent-Pixel=\uD654\uC18C +FR-Designer-Widget-Style_Border_Line=\uD14C\uB450\uB9AC\uAD75\uAE30 +Widget-Default_Widget_Config=\uAE30\uBCF8\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4 +Version-does-not-support=\uD604\uC7AC \uC0AC\uC6A9\uD558\uACE0 \uC788\uB294 lic\uC740 \uC6D0\uACA9 \uB514\uC790\uC778 \uAE30\uB2A5\uC744 \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uC73C\uBBC0\uB85C lic\uC744 \uC5C5\uADF8\uB808\uC774\uB4DC \uD574 \uC8FC\uC2ED\uC2DC\uC624. +StyleAlignment-Right_To_Left=\uC624\uB978\uCABD\uC5D0\uC11C\uC67C\uCABD\uC73C\uB85C +Style-Spacing_Before=\uC139\uC158\uC55E +Has_Existed=\uC774\uBBF8\uC874\uC7AC\uD569\uB2C8\uB2E4. +FR-Designer_DisplayNothingBeforeQuery=\uCC3E\uC544\uBCF4\uAE30\uD074\uB9AD\uC804\uBB38\uC11C\uB0B4\uC6A9\uBCF4\uC774\uC9C0\uC54A\uAE30 +Still=\uC5EC\uC804\uD788 +JS_WARNING2=\\uc608\uFF1Ahttp\://localhost\:8075/WebReport/demo.js +JS_WARNING1=\\uc0c1\uB300\uBB38\uC11C\uD504\uB85C\uC81D\uD2B8\uB514\uB809\uD130\uB9AC(\uC608:WebReport,WebReport\\js\uC5D0\uC11C\uC778\uC6A9\uD55C js \uD30C\uC77Ctest.js)\uB294\uC0C1\uB300\uACBD\uB85C\uAC00js/test.js\uC785\uB2C8\uB2E4. +Connectionline=\uC5F0\uACB0\uBAA8\uB4DC +Utils-Insert_Record=\uB808\uCF54\uB4DC\uC0BD\uC785 +Set-Parameter-Name=\uB9E4\uAC1C\uBCC0\uC218\uC774\uB984\uC744\uC124\uC815\uD574\uC8FC\uC2ED\uC2DC\uC624 +More-information=\uC815\uBCF4\uB354\uBCF4\uAE30 +Parameter-Boolean=\uBD88\uB9B0\uD0C0\uC785 +FRFont-Strikethrough=\uC120\uC0AD\uC81C +Server-version-tip=\uD604\uC7AC\uC5F0\uACB0\uB41C\uC11C\uBC84\uBC84\uC804\uC774\uB2F9\uC2E0\uC774\uC0AC\uC6A9\uD558\uACE0\uC788\uB294\uC124\uACC4\uAE30\uBC84\uC804\uBC88\uD638\uBCF4\uB2E4\uB0AE\uC2B5\uB2C8\uB2E4.\uACC4\uC18D\uC5F0\uACB0\uD558\uBA74\uD3B8\uC9D1\uD558\uACE0\uC788\uB294\uC77C\uBD80\uC18D\uC131\uC774\uC800\uC7A5\uB418\uC9C0\uC54A\uC744\uC218\uC788\uC2B5\uB2C8\uB2E4. \uC5F0\uACB0\uD574\uC57C\uD560\uACBD\uC6B0\uC124\uACC4\uAE30\uBC84\uC804\uACFC\uC11C\uBC84\uBC84\uC804\uC744\uC77C\uCE58\uC2DC\uCF1C\uC8FC\uC2ED\uC2DC\uC624. +Form-All_Files=\uBAA8\uB4E0\uD30C\uC77C +DBCP_NUM_TEST_PER_EVCTION_RUN=\uC720\uD734\uB9C1\uD06C\uD68C\uC218\uAC80\uC0AC\uC218 +FR-Designer-FRFont_Family=\uC774\uB984 +Device=\uC124\uBE44 +M_Insert-Cell=\uC140\uC694\uC18C +Present-Formula_Present=\uC218\uC2DD\uD615\uD0DC +FRFont-Superscript=\uC717\uC904 +CellWrite-Page_Before_Column=\uC5F4\uC55E\uD398\uC774\uC9C0\uB098\uB204\uAE30 +Golden=\uACE8\uB4DC\uC0C9 +Preference-Support_Cell_Editor_Definition=\uC140\uD3B8\uC9D1\uAE30\uC9C0\uC6D0 +M-Page_Preview=\uD398\uC774\uC9C0\uB098\uB204\uAE30\uBBF8\uB9AC\uBCF4\uAE30 +HJS-CC_to=\uBC1C\uC1A1 +Tree-Select_Leaf_Only=\uB9C6(Leaf) \uB178\uB4DC\uB85C\uB9CC\uB418\uB3CC\uB9AC\uAE30 +Pointer-A-Tick-Order=\uD3EC\uC778\uD130\uAC12\uBC0F\uB208\uAE08\uAC12\uC218\uB4F1\uAE09 +Pink=\uD551\uD06C +StyleAlignment-Distibuted=\uBD84\uC0B0\uC815\uB82C +Odd=\uD640\uC218 +already-saved=\uC800\uC7A5\uB418\uC5C8\uC2B5\uB2C8\uB2E4. +FR-Hyperlink_Chart_Cell=\uCC28\uD2B8 \uD558\uC774\uD37C\uB9C1\uD06C-\uC140 \uC5F0\uB3D9 +Style-Left_Indent=\uC67C\uCABD\uB4E4\uC5EC\uC4F0\uAE30 +Offline=\uC624\uD504\uB77C\uC778 +Form-Hierarchy_Tree_Next=\uB2E4\uC74C +Needle=\uD3EC\uC778\uD130 +GoogleMap=\uAD6C\uAE00\uC9C0\uB3C4 +Running=\uC2E4\uD589\uC911 +M_Edit-Unmerge_Cell=\uC140\uBCD1\uD569\uCDE8\uC18C +Out_Border_Line=\uBC14\uAE65\uCABD\uD14C\uB450\uB9AC\uC120 +Style-Spacing=\uAC04\uACA9 +FR-Utils_Submit=\uC81C\uCD9C +ReportServerP-Previous=\uC774\uC804\uD398\uC774\uC9C0 +StyleAlignment-Text_Style=\uD14D\uC2A4\uD2B8\uCEE8\uD2B8\uB864 +RelatedChart=\uCC28\uD2B8\uC5F0\uB3D9 +ProcessManager=\uD504\uB85C\uC138\uC2A4\uAD00\uB9AC +Cancel_Repeat_Attributes=\uC911\uBCF5\uB41C\uD589\uACFC\uC5F4\uCDE8\uC18C +FR-App-File_Message=\uC815\uBCF4 +Datasource-Stored_Procedure=\uC800\uC7A5\uACFC\uC815 +RWA-Row_Offset=\uD589\uC635\uC14B +M_Format-Style=\uC591\uC2DD +detail_description=\uC0C1\uC138\uC124\uBA85 +FR-Designer-Widget-Style_Title_Content=\uC81C\uBAA9\uB0B4\uC6A9 +ParameterD-Report_Parameter=\uBB38\uC11C\uB9E4\uAC1C\uBCC0\uC218 +HF-Edit_Header=\uD398\uC774\uC9C0\uBA38\uB9AC\uAE00\uD3B8\uC9D1 +Sytle-FRFont=\uAE00\uAF34 +FR-Designer_Finish_Export=\uB0B4\uBCF4\uB0B4\uAE30\uC644\uB8CC +MultiFileUpload=\uC5EC\uB7EC\uD30C\uC77C\uC5C5\uB85C\uB4DC +HF-Page_Number=\uD398\uC774\uC9C0\uBC88\uD638 +Style-Right_Indent=\uC624\uB978\uCABD\uB4E4\uC5EC\uC4F0\uAE30 +Desktop=\uBC14\uD0D5\uD654\uBA74 +FR-Server-All_Error=\uC624\uB958 +ConditionB-Operator=\uC870\uC791\uBD80\uD638 +Today=\uC624\uB298 +Form-Widget_Name=\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4\uC774\uB984 +Covered_All=\uBAA8\uB450\uB36E\uC5B4\uC50C\uC6B0\uAE30 +Day=\uC77C +External=\uBC14\uAE65 +Black_Font=\uD751\uCCB4 +LOG-Report_Server_IS_Started=\uBB38\uC11C\uC11C\uBC84\uC2E4\uD589\uC911 +Tips\:You_Can_Input_B1_To_Input_The_Data_Of_The_First_Row_Second_Column=\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_ChooseOneButton=\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4\uC120\uD0DD\uD6C4\uCD94\uAC00\uD574\uC8FC\uC2ED\uC2DC\uC624 +Widget-Sizing=\uD06C\uAE30\uC870\uC815 +NO_Border_Line=\uD14C\uB450\uB9AC\uC120\uC5C6\uC74C +Cell_Data=\uC140\uB370\uC774\uD130 +StyleAlignment-Vertical_Text=\uD14D\uC2A4\uD2B8\uC138\uB85C\uC815\uB82C +Label=\uB808\uC774\uBE14 +Orange=\uC8FC\uD669 +zeroMarginWarn=\uD504\uB9B0\uD130\uC5D0\uBB3C\uB9AC\uC801\uC5EC\uBC31\uC874\uC7AC
\uBB38\uC11C\uC758\uD398\uC774\uC9C0\uC5EC\uBC31\uC124\uC815\uC774\uB108\uBB34\uC791\uC73C\uBA74
\uB0B4\uC6A9\uC774\uC644\uC804\uD558\uAC8C\uC778\uC1C4\uB418\uC9C0\uC54A\uC744\uC218\uC788\uC2B5\uB2C8\uB2E4.
  +Widget-Date_Selector_Return_Type=\uB9AC\uD134\uAC12\uC720\uD615 +Utils-Switch_To_Template_Reportlet=\uD15C\uD50C\uB9BF\uB124\uD2B8\uC6CC\uD06C\uBB38\uC11C\uB85C\uC804\uD658 +satisfy=\uC870\uAC74\uCDA9\uC871 +FR-Designer_WidgetDisplyPosition=\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4\uD654\uBA74\uC704\uCE58 +FR-Base_Top=\uC704 +FR-Designer_Form-CheckBox=\uCCB4\uD06C\uBC15\uC2A4 +Reportlet-Parameter_Type=\uB9E4\uAC1C\uBCC0\uC218\uC804\uB2EC\uBC29\uC2DD +sending=\uBC1C\uC1A1\uC911... +FR-Designer-FRFont_Foreground=\uC0C9 +FR-Import-Export_SVG=SVG\uC11C\uC2DD +M_Edit-Clear_Contents=\uB0B4\uC6A9(C) +Session=\uC138\uC158 +Widget-Load_Type=\uB85C\uB529 +template_unsaved=\uD15C\uD50C\uB9BF\uC744\uC800\uC7A5\uD560\uC218\uC5C6\uC2B5\uB2C8\uB2E4. +check_communication=\uB124\uD2B8\uC6CC\uD06C\uD1B5\uC2E0\uC774\uC815\uC0C1\uC778\uC9C0\uB610\uB294\uC11C\uBC84\uAC00\uC815\uC0C1\uC801\uC73C\uB85C\uC2E4\uD589\uB418\uACE0\uC788\uB294\uC9C0\uD655\uC778\uD574\uC8FC\uC2ED\uC2DC\uC624. +List-Need_Head=\uB9AC\uC2A4\uD2B8\uD5E4\uB4DC\uAC00\uD544\uC694\uD569\uB2C8\uB2E4. +FR-Designer-Plugin_Has_Been_Installed=\uD50C\uB7EC\uADF8\uC778\uC774\uC124\uCE58\uB418\uC5C8\uC2B5\uB2C8\uB2E4.\uD50C\uB7EC\uADF8\uC778\uC744\uC5C5\uB370\uC774\uD2B8\uD558\uB824\uBA74\uD50C\uB7EC\uADF8\uC778\uC5C5\uB370\uC774\uD2B8\uB85C\uC804\uD658\uD574\uC8FC\uC2ED\uC2DC\uC624. +FR-Widget_Tree_And_Table=\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4\uD2B8\uB9AC\uC640\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4\uD45C +FR-Base_Help=\uB3C4\uC6C0\uB9D0 +FR-Designer-Plugin_Update_Successful=\uD50C\uB7EC\uADF8\uC778\uC5C5\uADF8\uB808\uC774\uB4DC\uC131\uACF5.\uC7AC\uBD80\uD305\uC11C\uBC84\uAC00\uC720\uD6A8\uD569\uB2C8\uB2E4. +August=8\uC6D4 +LOG-Is_Being_Openned=\uC5EC\uB294\uC911 +BackgroundTexture-Oak=\uC0C1\uBAA9 +Multi_nam_formula=\\ub370\uC774\uD130\uC138\uD2B8\uBA85\: \uB370\uC774\uD130\uC138\uD2B8\uC870\uAC74\: +TurnOn=\uC5F4\uAE30 +HJS-Send_Successfully=\uBC1C\uC1A1\uC131\uACF5 +Mon=1 +Inner_Parameter=\uB0B4\uC7A5\uB9E4\uAC1C\uBCC0\uC218 +Required=\uD544\uC218\uC785\uB825\uC0AC\uD56D +Summary=\uCDE8\uD569 +template_unopened=\uD15C\uD50C\uB9BF\uC744\uC5F4\uC218\uC5C6\uC2B5\uB2C8\uB2E4. +FR-Base_Bottom=\uC544\uB798 +DataFunction-Min=\uCD5C\uC18C\uAC12 +StyleFormat-Percent=\uBC31\uBD84\uC728 +FR-App-All_Custom=\uC0AC\uC6A9\uC790\uC815\uC758 +M_Insert-Data_Column=\uC0BD\uC785\uB370\uC774\uD130\uC5F4 +PLEASE=\uC694\uCCAD +Numbers=\uC218\uB7C9 +Release_Lock=\uBE44\uBC00\uBC88\uD638\uD574\uC81C +Background-Background_is_NULL=\uBC30\uACBD\uC5C6\uC74C +FR-Designer_Sytle-FRFont=\uAE00\uAF34 +Gradation=\uB2E8\uACC4 +The_current_list_is_empty=\uD604\uC7AC\uB9AC\uC2A4\uD2B8\uBE44\uC5B4\uC788\uC74C +Formula_Dictionary_Display_Examples=\\uc2e4\uC81C\uAC12\uBC94\uC704:\ +Schedule-Template_Parameter=\uD15C\uD50C\uB9BF\uB9E4\uAC1C\uBCC0\uC218 +JSShow=\uB3D9\uC801\uB514\uC2A4\uD50C\uB808\uC774 +Level_coordinates=\uACC4\uCE35\uBCF4\uC870\uC88C\uD45C +MainGraduationLine=\uC8FC\uB208\uAE08\uC120 +Hyperlink-Web_link=\uC6F9\uB9C1\uD06C +StyleAlignment-between_-90_and_90=-90\uC64090\uC0AC\uC774 +FormulaD-Custom_Function=\uC0AC\uC6A9\uC790\uC815\uC758\uD568\uC218 +FR-Designer_Integer=\uC815\uC218 +PageSetup-Finis_Start_Row=\uC911\uBCF5\uC885\uB8CC\uD589 +RWA-Remove_Field=\uD544\uB4DC\uC81C\uAC70 +Form-Desin_Width=\uB514\uC790\uC778\uB108\uBE44 +No-tableData=\uB3CC\uC544\uAC00\uAE30\uB370\uC774\uD130\uC138\uD2B8\uAC00\uC5C6\uC2B5\uB2C8\uB2E4. +Page_Total=\uCD1D +FR-Designer-Plugin_Connect_Server_Error=\uD50C\uB7EC\uADF8\uC778\uC2A4\uD1A0\uC5B4\uB97C\uC5F0\uACB0\uD560\uC218\uC5C6\uC2B5\uB2C8\uB2E4.\uC7A0\uC2DC\uD6C4\uB2E4\uC2DC\uC2DC\uB3C4\uD574\uC8FC\uC2ED\uC2DC\uC624. +Import-Excel_Source=Excel\uC18C\uC2A4\uD30C\uC77C +Utils-Left_to_Right_a=\uC67C\uCABD\uC5D0\uC11C\uC624\uB978\uCABD\uC73C\uB85C +ExpandD-Expand_Attribute=\uD655\uC7A5\uC18D\uC131 +Report-Write_Attributes=\uBB38\uC11C\uAE30\uC785\uC18D\uC131 +Utils-Current_Column=\uD604\uC7AC\uC5F4 +Need_Max_Value=\uD544\uC694\uCD5C\uB300\uAC12 +Report_Not_Exist=\uC120\uD0DD\uD55C\uBB38\uC11C\uAC00\uC874\uC7AC\uD558\uC9C0\uC54A\uC2B5\uB2C8\uB2E4\uFF01 +HF-Insert_Content=\uB0B4\uC6A9\uC0BD\uC785 +UpParent=\uC704\uBD80\uBAA8\uC140 +PageSetup-Page=\uC6F9\uD398\uC774\uC9C0 +Utils-Move_Up=\uC704\uB85C\uC774\uB3D9 +BackgroundTexture-PurpleMesh=\uBCF4\uB77C\uC0C9\uACA9\uC790\uBAA8\uC591 +Export-Word=Word\uC11C\uC2DD +ServerM-Widget_Manager=\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4\uAD00\uB9AC +FR-Designer-Basic_Activation_Key=\uC124\uACC4\uAE30\uC77C\uB828\uBC88\uD638\uFF1A +FR-App-Template_Report_Not_Exist=\uC120\uD0DD\uD55C\uBB38\uC11C\uAC00\uC874\uC7AC\uD558\uC9C0\uC54A\uC2B5\uB2C8\uB2E4.\! +Protected=\uBCF4\uD638 +Skip=\uC810\uD504 +FR-Designer_PageSetup-Vertically=\uC218\uC9C1\uAC00\uC6B4\uB370\uC815\uB82C +revert=\uD574\uC81C +PageSetup-Predefined=\uC0AC\uC804\uC815\uC758\uB41C +Border-Style-Radius=\uB465\uADFC\uBAA8\uC11C\uB9AC\uD14C\uB450\uB9AC +IntPart=\uC815\uC218\uBD80\uBD84 +ExpandD-Data_Column=\uB370\uC774\uD130\uC5F4 +Sort-Ascending=\uC624\uB984\uCC28\uC21C +FR-Designer-Widget_Style=\uC591\uC2DD +parameter_name_exist=\uD574\uB2F9\uB9E4\uAC1C\uBCC0\uC218\uC774\uB984\uC774\uC774\uBBF8\uC874\uC7AC\uD569\uB2C8\uB2E4 +FR-Designer_Layer-Build=\uCE35\uBCC4\uC0DD\uC131 +Please_Rename=\uB9AC\uB124\uC784\uD574\uC8FC\uC2ED\uC2DC\uC624. +Form-Editing_Listeners=\uC774\uBCA4\uD2B8\uD3B8\uC9D1 +RWA-Smart_Add_Fields=\uD544\uB4DC\uC2A4\uB9C8\uD2B8\uCD94\uAC00 +FR-Designer-Tree_Width=\uB108\uBE44 +Record=\uB808\uCF54\uB4DC +Poly-Report_Component=\uCDE8\uD569\uBB38\uC11C\uC5B4\uC148\uBE14\uB9AC +Options=\uC635\uC158 +NS-war-remote=\uC624\uB958\uCF54\uB4DC\:1117 \uC555\uCD95\uC124\uCE58\uB97C\uC9C0\uC6D0\uD558\uC9C0\uC54A\uC2B5\uB2C8\uB2E4. \uC6D0\uACA9\uB514\uC790\uC778 +Sche-Minute=\uBD84 +Three_Rows_Of_Three_Grid=3\uD589 3\uC5F4\uC758\uADF8\uB9AC\uB4DC +WorkSheet=\uC790\uC720\uBB38\uC11C +FR-Designer-Widget_Size=\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4\uD06C\uAE30 +BindColumn-Select=\uB9AC\uC2A4\uD2B8 +FR-Widget_Mobile_Terminal=\uBAA8\uBC14\uC77C\uB2E8\uB9D0 +FR-Background_Image_Titled=\uD0C0\uC77C +SetPrinterOffset=\uD504\uB9B0\uD130\uC635\uC14B +FR-Designer-Plugin_Installed=\uC124\uCE58\uB418\uC5C8\uC2B5\uB2C8\uB2E4. +FR-Designer-Hyperlink_Name=\uC774\uB984 +FR-Designer_Form-Button=\uD0A4 +Black=\uBE14\uB799 +FR-Designer-Widget-Style_Border_Color=\uD14C\uB450\uB9AC\uC0C9 +Set_Submit_Event=\uC81C\uCD9C\uC774\uBCA4\uD2B8\uC124\uC815 +PDF-Print_isPopup=\uC124\uC815\uBC15\uC2A4\uD31D\uC5C5\uC5EC\uBD80 +LayerPageReport_CountPerPage=\uD398\uC774\uC9C0\uBCC4 \uAE30\uB85D\uC218 +Display_Modes=\uBAA8\uB4DC\uBCF4\uC774\uAE30 +RowSpan=\uD589\uC2A4\uD32C +Datasource-Test_Connection=\uD14C\uC2A4\uD2B8\uB9C1\uD06C +Function-Function_Manager=\uD568\uC218\uAD00\uB9AC\uC790 +Host_Name=\uD638\uC2A4\uD2B8\uCEF4\uD4E8\uD130\uC774\uB984 +CellWrite-Show_As_HTML=HTML\uB85C\uB0B4\uC6A9\uBCF4\uC774\uAE30 +FR-Designer-Widget-Style_Shadow=\uC74C\uC601 +FR-Designer_Parameter_String=\uBB38\uC790\uC5F4 +Form-SupportTag=\uB808\uC774\uBE14\uD615\uC2DD\uBCF4\uC774\uAE30 +ReportD-Report_Write_Attributes=\uBB38\uC11C\uAE30\uC785\uC18D\uC131 +DataFunction-Count=\uAC1C\uC218 +Top_And_Thick_Bottom_Border_Line=\uC704\uD14C\uB450\uB9AC\uC120\uACFC\uAD75\uC740\uBC11\uD14C\uB450\uB9AC\uC120 +Client=\uD074\uB77C\uC774\uC5B8\uD2B8\uB2E8 +BindColumn-Result_Serial_Number_Start_From_1=\uBC88\uD638\uB2941\uBD80\uD130\uC2DC\uC791 +History=\uD788\uC2A4\uD1A0\uB9AC +Already_exists=\uC774\uBBF8\uC874\uC7AC\uD569\uB2C8\uB2E4. \uB2E4\uC2DC\uC785\uB825\uD574\uC8FC\uC2ED\uC2DC\uC624\uFF01 +Datasource-Original_Charset=\uCD08\uAE30\uCF54\uB529 +FR-Base_Left=\uC67C\uCABD +ReportServerP-Next=\uB2E4\uC74C\uD398\uC774\uC9C0 +BindColumn-Top_N=\uC55EN\uAC1C +Animation_Special=\uD2B9\uD6A8 +Widget-Chart_Widget_Config=\uCC28\uD2B8\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4 +FR-Designer-Plugin_Cannot_Update_Not_Install=\uD50C\uB7EC\uADF8\uC778\uC744\uC5C5\uB370\uC774\uD2B8\uD560\uC218\uC5C6\uC2B5\uB2C8\uB2E4.\uD574\uB2F9\uD50C\uB7EC\uADF8\uC778\uC774\uC124\uCE58\uB418\uC5C8\uB294\uC9C0\uAC80\uC0AC\uD574\uC8FC\uC2ED\uC2DC\uC624. +After_Changed_Some_Attributes_Are_Different=\uC804\uD658\uD6C4, \uBB38\uC11C\uC758\uC77C\uBD80\uC18D\uC131\uC774\uBCC0\uD560\uC218\uC788\uC2B5\uB2C8\uB2E4.\uACC4\uC18D\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C? +PieStyle=\uD30C\uC774 +HF-Are_you_sure_to_delete_it=\uC774\uC694\uC18C\uB97C\uC0AD\uC81C\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C? +Utils-Design-File_Open=\uC5F4\uAE30 +FR-Utils_Label=\uB808\uC774\uBE14 +Data-Label=\uB808\uC774\uBE14 +M_Insert-Text=\uC77C\uBC18\uD14D\uC2A4\uD2B8\uC0BD\uC785 +Form-View_Tree=\uBDF0\uD2B8\uB9AC +M_Insert-Chart=\uC0BD\uC785\uCC28\uD2B8 +HF-Even_Page=\uC9DD\uC218\uD398\uC774\uC9C0 +ReportServerP-Report_server_parameter=\uBB38\uC11C\uC11C\uBC84\uB9E4\uAC1C\uBCC0\uC218 +JavaScript-Form_Submit=\uD3FC\uC81C\uCD9C +Horizontal-Split_Layout=\uC218\uD3C9\uBD84\uD560\uB808\uC774\uC544\uC6C3 +BorderLayout-Center=\uC911\uAC04 +INFO-Reset_Webapp=\uC751\uC6A9\uC11C\uBC84\uC7AC\uC124\uCE58 +FR-Designer_Text=\uD14D\uC2A4\uD2B8 +IN_and_INOUT_type_not_as_cursor=IN\uACFC INOUT \uC720\uD615\uC740\uCEE4\uC11C\uB85C\uD560\uC218\uC5C6\uB2E4. +Main_Axis=\uC8FC\uC88C\uD45C\uCD95 +M_Edit-Cut=\uC798\uB77C\uB0B4\uAE30(T) +Utils-The_Name_has_been_existed=\uC774\uC774\uB984\uC740\uC774\uBBF8\uC874\uC7AC\uD569\uB2C8\uB2E4. +FR-Background_Image=\uC774\uBBF8\uC9C0 +Character=\uD14D\uC2A4\uD2B8 +Unit_Thousand=\uCC9C +Test=\uD14C\uC2A4\uD2B8 +Utils-Would_you_like_to_save=\uC800\uC7A5\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C? +HF-Header_and_Footer=\uBA38\uB9AC\uAE00\uACFC\uBC14\uB2E5\uAE00 +LIST_MODE=\uB9AC\uC2A4\uD2B8 +HF-Insert_Image=\uC774\uBBF8\uC9C0\uC0BD\uC785 +FR-Designer-Widget-Style_Standard=\uD45C\uC900 +FR-Designer_Form-List=\uB9AC\uC2A4\uD2B8 +BackgroundTexture-Denim=\uB2A5\uC9C1\uBB3C +Execute_Report_by_Layer_Engine=\uC9C1\uB82C\uC5D4\uC9C4\uC73C\uB85C\uBB38\uC11C\uC2E4\uD589 +M_Edit-Bring_Forward=\uC704\uCE35\uC73C\uB85C\uC774\uB3D9(F) +Choose_All=\uBAA8\uB450\uC120\uD0DD +Form-RadioGroup=\uB2E8\uC77C\uC120\uD0DD\uD0A4\uD328\uB4DC +FR-Base_Remove=\uC0AD\uC81C +FR-Remote_Connect2Server_Again=\uC5F0\uACB0\uC774\uB04A\uC5B4\uC84C\uC2B5\uB2C8\uB2E4.\uB2E4\uC2DC\uC11C\uBC84\uB97C\uC5F0\uACB0\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C? +Semicolon=\uC138\uBBF8\uCF5C\uB860 +StyleFormat-Category=\uCE74\uD14C\uACE0\uB9AC +Report_Template=\uBB38\uC11C\uD15C\uD50C\uB9BF +Utils-Beyond_the_right_side_of_Border=\uC624\uB978\uCABD\uC5EC\uBC31\uBC97\uC5B4\uB0A8 +BackgroundTexture-Papyrus=\uD30C\uD53C\uB8E8\uC2A4\uC885\uC774 +LayerPageReport_PageEngine=\uD398\uC774\uC9C0\uBCC4\uC5F0\uC0B0\uBD84\uD560\uC2E4\uD589\uBB38\uC11C\uC0AC\uC6A9 +Schedule-The_selected_file_must_be_end_with_filter=\uC120\uD0DD\uD55C\uD30C\uC77C\uC740.cpt \uB610\uB294 .class \uB610\uB294 .frm \uB85C\uB05D\uB0B4\uC57C\uD569\uB2C8\uB2E4. +Provide=\uC81C\uACF5 +FormulaD-Math_&_Trig=\uC218\uD559\uACFC\uC0BC\uAC01\uD568\uC218 +FR-Designer-StyleAlignment_Right=\uC624\uB978\uCABD\uC5D0\uB9DE\uCDA4 +Error_TableDataNameRepeat=\uC11C\uBC84\uB370\uC774\uD130\uC138\uD2B8\uC5D0\uC874\uC7AC\uD558\uACE0\uC788\uAC70\uB098\uC5EC\uB7EC\uAC1C\uB370\uC774\uD130\uC138\uD2B8\uC774\uB984\uC774\uC911\uBCF5\uB418\uC5C8\uC2B5\uB2C8\uB2E4. +Choose_None=\uBBF8\uC120\uD0DD +File-tree=\uD30C\uC77C\uD2B8\uB9AC +FRFont-bold=\uAD75\uAC8C +FR-Designer_Set_Submit_Condition=\uC81C\uCD9C\uC870\uAC74\uC124\uC815 +Form-Change_Widget_Name=\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4\uC774\uB984\uBCC0\uACBD +ReportColumns-Report_Columns=\uBB38\uC11C\uC140\uB098\uB204\uAE30 +Can_not_use_FormatBursh=\uC911\uBCF5\uC120\uD0DD\uB41C\uC601\uC5ED\uC5D0\uC11C\uC2DD\uC744\uC774\uC6A9\uD558\uC5EC\uC778\uC1C4\uD560\uC218\uC5C6\uC2B5\uB2C8\uB2E4.\! +CellElement-Property_Table=\uC140\uC18D\uC131\uD45C +Dictionary-Dynamic_SQL=\uB3D9\uC801 SQL +FR-Designer_Form-CheckBoxGroup=\uCCB4\uD06C\uBC15\uC2A4\uADF8\uB8F9 +DBCP_TIME_BETWEEN_EVICTIONRUNSMILLIS=\uC720\uD734\uB9C1\uD06C\uD68C\uC218\uAE30\uD734\uBA74\uC2DC\uAC04 +ReportD-Export_Hided_Column=\uC228\uAE34\uC5F4\uBCF4\uC774\uAE30 +Preference-Support_Undo=\uD574\uC81C\uC9C0\uC6D0 +FR-mobile_report_analysis=\uBCF4\uACE0\uC11C \uD574\uC11D +Month=\uC6D4 +Utils-Column_Width=\uC5F4\uB108\uBE44 +Collect-Use_Designer=\uC124\uACC4\uAE30\uC0AC\uC6A9 +Widget-User_Defined_Editor=\uC0AC\uC804\uC815\uC758\uB41C\uD3B8\uC9D1\uAE30\uB294\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4\uAD00\uB9AC\uBA54\uB274\uC5D0\uC11C\uB9CC\uC18D\uC131\uC744\uBCC0\uACBD\uD560\uC218\uC788\uC2B5\uB2C8\uB2E4. +Unit_Ten_Thousand=\uB9CC +Data_Setting=\uB370\uC774\uD130\uC124\uC815 +ECP_input_pwd=\uC554\uD638\uB97C\uC785\uB825\uD574\uC8FC\uC2ED\uC2DC\uC624\: +period=. +Note=\uBE44\uACE0 +Multiline=\uC5EC\uB7EC\uD589\uD3B8\uC9D1 +Datasource-Convert_Charset=\uCF54\uB529\uC804\uD658 +DashBoard-ConnectionList=\uB370\uC774\uD130\uB9C1\uD06C +Utils-Submit_Forcibly=\uC81C\uCD9C\uAC15\uD589 +Parent_Marked_Field=\uBD80\uBAA8\uD0DC\uADF8\uD544\uB4DC +Logout=\uB098\uAC00\uAE30 +FR-Designer_Show_Blank_Row=\uACF5\uBC31\uD589\uBCF4\uCDA9 +FR-Base_Format=\uC11C\uC2DD +FR-App-Export_png=PNG\uC11C\uC2DD +Delete_Column=\uC5F4\uC0AD\uC81C +SecondGraduationLine=\uBCF4\uC870\uB208\uAE08\uC120 +SpecifiedG-Groups=\uADF8\uB8F9 +CONTINUUM_MODE=\uC774\uC6C3\uD558\uB294\uC5F0\uC18D\uADF8\uB8F9 +Datasource-Connection_failed=\uB9C1\uD06C\uC2E4\uD328 +CategoryName=\uCE74\uD14C\uACE0\uB9AC\uC774\uB984 +DBCP_INITIAL_SIZE=\uCD08\uAE30\uD654\uB9C1\uD06C\uC218 +Colors=\uC0C9 +FR-Import-Export_CSV=CSV\uC11C\uC2DD(\uC27C\uD45C\uAD6C\uBD84) +FR-Designer-StyleAlignment_Left=\uC67C\uCABD\uC5D0\uB9DE\uCDA4 +BackgroundTexture-PaperBag=\uC885\uC774\uBC31 +RWA-BuildIn_SQL=\uB0B4\uC7A5SQL +SingleLayer=\uB2E8\uCE35 +Or-you=\uB610\uB294\uB2F9\uC2E0\uC774 +FR-Designer_Certificate_Path=\uC778\uC99D\uC11C\uACBD\uB85C +Utils-Last_Page=\uB9C8\uC9C0\uB9C9\uD398\uC774\uC9C0 +BarCodeD-Drawing_Text=\uBC14\uCF54\uB4DC\uD14D\uC2A4\uD2B8\uBCF4\uC774\uAE30 +Warning-Template_Do_Not_Exsit=\uD15C\uD50C\uB9BF\uC774\uC874\uC7AC\uD558\uC9C0\uC54A\uC2B5\uB2C8\uB2E4. +BindColumn-Group=\uADF8\uB8F9 +Export-SVG=SVG\uC11C\uC2DD +Plane3D=\uD3C9\uBA743D +SessionID=SessionID\uB294 \uD604\uC7AC\uC811\uADFC\uD15C\uD50C\uB9BF\uC758\uC138\uC158 ID\uB9E4\uAC1C\uBCC0\uC218. +FR-Designer_Height=\uB192\uC774 +HF-Odd_Page=\uD640\uC218\uD398\uC774\uC9C0 +About-All_Rights_Reserved=\uBAA8\uB4E0\uAD8C\uB9AC\uB97C\uB0A8\uAE41\uB2C8\uB2E4. +Utils-Current_Cell=\uD604\uC7AC\uADF8\uB9AC\uB4DC +Web_Preview_Message=\uD15C\uD50C\uB9BF\uD30C\uC77C\uC744\uD604\uC7AC\uC2E4\uD589\uD658\uACBD\uB514\uB809\uD130\uB9AC\uC5D0\uC800\uC7A5\uD574\uC8FC\uC2ED\uC2DC\uC624. +FR-Hyperlink_Chart_Float=\uCC28\uD2B8\uD558\uC774\uD37C\uB9C1\uD06C-\uC5F0\uB3D9\uC11C\uC2A4\uD39C\uC2A4\uC694\uC18C +Dic-Data_Query=\uB370\uC774\uD130\uCC3E\uC544\uBCF4\uAE30 +CellWrite-Print_Content=\uC778\uC1C4/\uBD88\uB7EC\uC624\uAE30 \uC140 \uB0B4\uC6A9 +Privilege-Selected_None_Of_Any_Items=\uC120\uD0DD\uD55C\uD56D\uC774\uC5C6\uC2B5\uB2C8\uB2E4. +FRFont-Size=\uD06C\uAE30 +Function-J2EE_server=J2EE\uC11C\uBC84 +FR-Designer_Allow_Blank=\uBE48\uCE78\uD5C8\uC6A9 +Build_Tree_Accord_Parent_Marked_Filed=\uC120\uD0DD\uD55C\uB370\uC774\uD130\uC138\uD2B8\uC758\uBD80\uBAA8\uD0DC\uADF8\uD544\uB4DC\uC5D0\uB530\uB77C\uD2B8\uB9AC\uC0DD\uC131 +Preference-Horizontal_Scroll_Bar_Visible=\uC218\uD3C9\uC2A4\uD06C\uB864\uBC14\uB97C\uBCFC\uC218\uC788\uC2B5\uB2C8\uB2E4. +Scope=\uBC94\uC704 +Save_All_Records_In_Memory=\uBAA8\uB4E0\uB808\uCF54\uB4DC\uAC00\uBA54\uBAA8\uB9AC\uC5D0\uC800\uC7A5\uB418\uC5C8\uC2B5\uB2C8\uB2E4. +FreezeWarning1=\uCD08\uAE30\uAC12>\uB9C8\uC9C0\uB9C9\uAC12 +FlowLayout=\uC720\uB3D9\uC2DD\uB808\uC774\uC544\uC6C3 +M_Report-Report_Footer=\uBB38\uC11C\uD398\uC774\uC9C0\uBC14\uB2E5\uAE00 +FR-Action_Add=\uCD94\uAC00 +BorderLayout-East=\uB3D9 +feedback_tip=400\uC790\uB97C\uB118\uC9C0\uC54A\uAC8C\uBB38\uC81C\uB97C\uC124\uBA85\uD574\uC8FC\uC2ED\uC2DC\uC624. +FS_Start_Date=\uC2DC\uC791\uB0A0\uC9DC +FR-ConditionB_Operator=\uC870\uC791\uBD80\uD638 +Printer-Alias=\uB2C9\uB124\uC784 +DS-Class_Name=\uD074\uB798\uC2A4\uB124\uC784 +FR-Designer-Plugin_Has_Been_Disabled=\uD50C\uB7EC\uADF8\uC778\uC0AC\uC6A9\uC774\uAE08\uC9C0\uB418\uC5C8\uC2B5\uB2C8\uB2E4.\uC124\uACC4\uAE30\uBC0F\uC11C\uBC84\uB97C\uC7AC\uBD80\uD305\uD558\uB824\uBA74\uC11C\uBC84\uB97C\uC218\uB3D9\uC7AC\uBD80\uD305\uD574\uC57C\uD569\uB2C8\uB2E4. +Sort-Original=\uC21C\uC11C\uC5C6\uC74C +Utils-Top_to_Bottom_a=\uC704\uC5D0\uC11C\uC544\uB798\uB85C +Parameter-String=\uBB38\uC790\uC5F4 +InnerRadis=\uC548\uC9C0\uB984\uD06C\uAE30 +Want_To_Cover_It=\uB36E\uC5B4\uC50C\uC6B0\uACA0\uC2B5\uB2C8\uAE4C? +Divided_stage=\uAD6C\uBD84\uB2E8\uACC4 +Seriously=\uC2EC\uAC01 +ReportServerP-PDF=PDF +Utils-Switch_To_Class_Reportlet=\uD504\uB85C\uADF8\uB7A8\uB124\uD2B8\uC6CC\uD06C\uBB38\uC11C\uB85C\uC804\uD658 +FR-Designer_Show_Blank_Column=\uACF5\uBC31\uC5F4\uBCF4\uCDA9 +M_Edit-Redo=\uB9AC\uC6CC\uD06C +Visibility=\uC2DC\uAC01\uC131 +Series_Use_Default=\uACC4\uC5F4\uAE30\uBCF8\uC0AC\uC6A9 +Has_Selected=\uC120\uD0DD\uB428 +BackgroundTexture-Walnut=\uD638\uB450 +FormulaD-Function_category=\uD568\uC218\uC720\uD615 +Interface=\uC778\uD130\uD398\uC774\uC2A4 +FR-Designer-Beyond_Bounds= +seconds=\uCD08 +Auto-Build=\uC790\uB3D9\uC0DD\uC131 +FR-Designer-Plugin_Install_Successful=\uD574\uB2F9\uD50C\uB7EC\uADF8\uC778\uC740\uC124\uACC4\uAE30\uBC0F\uC11C\uBC84\uB97C\uC7AC\uBD80\uD305\uD560\uB54C\uC0AC\uC6A9\uB418\uBA70,\uC11C\uBC84\uB294\uC218\uB3D9\uC7AC\uBD80\uD305\uD574\uC57C\uD569\uB2C8\uB2E4. +Template_Path=\uD15C\uD50C\uB9BF\uACBD\uB85C +FR-Designer-FRFont_Bold=\uAD75\uAC8C +Poly_Name=\uCDE8\uD569\uBE14\uB7ED\uC774\uB984 +WorkBook=\uC6CC\uD06C\uBD81 +Hyperlink-Self_Window=\uD604\uC7AC\uC708\uB3C4\uC6B0 +FR-Designer-Widget-Style_Title=\uC81C\uBAA9 +FR-Designer-FRFont_Size=\uD06C\uAE30 +M_File-Export-SVG=SVG\uC11C\uC2DD +Capacity=\uC6A9\uB7C9 +Rose_Red=\uB85C\uC988\uBE68\uAC15 +StyleAlignment-The_value_of_rotation_must_between_-90_and_90_degrees=\uD68C\uC804\uAC12\uC740-90\uB3C4\uC5D0\uC11C 90\uB3C4\uAE4C\uC9C0 +HF-Move_Left=\uC67C\uCABD\uC73C\uB85C\uC774\uB3D9 +Cell_Group=\uC140\uADF8\uB8F9 +Week=\uC8FC +PageSetup-Orientation=\uBC29\uD5A5 +M-Open_Recent=\uCD5C\uADFC\uC5F4\uC5B4\uBCF8 +NNormal=\uC815\uC0C1 +Integer=\uC815\uC218 +Select_The_Source_To_Save=\uC800\uC7A5\uD558\uB824\uB294\uD56D\uBAA9\uC120\uD0DD +Transition=\uBD84\uAE30 +FR-Designer_Get_Lock=\uC554\uD638\uD654 +one_record_exists_in_many_groups=\uB808\uCF54\uB4DC\uB294\uC5EC\uB7EC\uAC1C\uADF8\uB8F9\uC5D0\uC874\uC7AC\uD560\uC218\uC788\uC2B5\uB2C8\uB2E4. +FR-Designer_Cover_None=\uBAA8\uB450\uB36E\uC5B4\uC50C\uC6B0\uC9C0\uC54A\uAE30 +DeciPart=\uC18C\uC218\uBD80\uBD84 +ExpandD-Up_Father_Cell=\uC704\uBD80\uBAA8\uC140 +Deep=\uAE4A\uC774 +FRFont-Shadow=\uC74C\uC601 +Reportlet=\uB124\uD2B8\uC6CC\uD06C\uBB38\uC11C +Calendar=\uB2EC\uB825 +DateFormat-Custom_Warning=\uBE44\uACE0\uFF1A\uC0AC\uC6A9\uC790\uC815\uC758\uB0A0\uC9DC\uC11C\uC2DD\uC740\uC11C\uC2DD\uAC80\uC0AC\uB97C\uC9C0\uC6D0\uD558\uC9C0\uC54A\uC2B5\uB2C8\uB2E4. +Unit_MM=\uBC00\uB9AC\uBBF8\uD130 +Server-Start=\uC2E4\uD589 +CellPage-Can_Break_On_Paginate=\uD398\uC774\uC9C0\uB098\uB204\uAE30\uC2DC\uB098\uB20C\uC218\uC788\uC74C +Build_Tree_Accord_Marked_Filed_Length=\uC120\uD0DD\uD55C\uB370\uC774\uD130\uC138\uD2B8\uC758\uD0DC\uADF8\uD544\uB4DC\uAE38\uC774\uC5D0\uB530\uB77C\uD2B8\uB9AC\uC0DD\uC131 +ComboCheckBox-Start_Symbol=\uC2DC\uC791\uBD80\uD638 +Real=\uC2E4\uC81C +RWA-Batch_Modify_Cells=\uB300\uB7C9\uC218\uC815\uC140 +FR-Designer_Build-Way=\uC0DD\uC131\uBC29\uC2DD +Read=\uC77D\uAE30 +StyleAlignment-Degrees=\uB3C4\uC218 +M_Format_A-Border=\uD14C\uB450\uB9AC(B) +Utils-Delete_Record=\uB808\uCF54\uB4DC\uC0AD\uC81C +Reload=\uC624\uBC84\uB85C\uB529 +Image-Select_Picture=\uC774\uBBF8\uC9C0\uC120\uD0DD +RWA-Submit=\uC81C\uCD9C +the_template=\uD574\uB2F9\uD15C\uD50C\uB9BF +FR-Designer_Component_Scale=\uC5B4\uC148\uBE14\uB9AC\uCD95\uC18C +FRFont-italic=\uAE30\uC6B8\uC784\uAF34 +Year=\uB144 +HF-Move_Right=\uC624\uB978\uCABD\uC73C\uB85C\uC774\uB3D9 +Data-Check=\uB370\uC774\uD130\uBAA8\uB2C8\uD130\uB9C1 +Unknown=\uC54C\uC218\uC5C6\uC74C +Submit_Style=\uC81C\uCD9C\uBC29\uC2DD +Left_Border_Line=\uC67C\uCABD\uD14C\uB450\uB9AC\uC120 +Brown=\uAC08\uC0C9 +Select_A_Tree_DataSource_To_Build=\uD2B8\uB9AC\uB370\uC774\uD130\uC138\uD2B8\uB97C\uC120\uD0DD\uD558\uC5EC\uC0DD\uC131\uD558\uC2ED\uC2DC\uC624. +Overlapping=\uC911\uCCA9\uD0C0\uC785 +DS-Class_TableData=\uD504\uB85C\uADF8\uB7A8\uB370\uC774\uD130\uC138\uD2B8 +FR-Designer-Plugin_Illegal_Plugin_Zip_Cannot_Be_Install=\uC2DD\uBCC4\uD560\uC218\uC5C6\uB294\uD50C\uB7EC\uADF8\uC778\uC774\uBBC0\uB85C\uC124\uCE58\uD560\uC218\uC5C6\uC2B5\uB2C8\uB2E4. +DisplayNothingBeforeQuery=\uCC3E\uC544\uBCF4\uAE30\uD074\uB9AD\uC804\uBB38\uC11C\uB0B4\uC6A9\uBCF4\uC774\uC9C0\uC54A\uAE30 +Y_Axis=Y\uCD95 +FormulaD-Most_Recently_Used=\uC0C1\uC6A9\uD568\uC218 +FormulaD-Input_formula_in_the_text_area_below=\uD558\uB2E8\uC758\uD14D\uC2A4\uD2B8\uD3B8\uC9D1\uBC15\uC2A4\uC5D0\uC218\uC2DD\uC744\uC785\uB825\uD558\uC138\uC694. +Build-Way=\uC0DD\uC131\uBC29\uC2DD +M_Edit-Undo=\uD574\uC81C +Line-Style=\uC120\uD615 +Datasource-Other_Attributes=\uAE30\uD0C0\uC18D\uC131 +M_Server-Global_Parameters=\uC804\uC5ED\uB9E4\uAC1C\uBCC0\uC218 +Suffix=\uD655\uC7A5\uC790 +Image-Image_Files=\uC774\uBBF8\uC9C0\uD30C\uC77C +EditRC-Entire_row=\uBAA8\uB4E0\uD589(R) +HF-First_Page=\uBA54\uC778\uD398\uC774\uC9C0 +BackgroundTexture-Granite=\uD654\uAC15\uC554 +DataList=\uB370\uC774\uD130\uB9C1\uD06C +Recursion=\uADC0\uB0A9 +BarStyle=\uBC14\uD0C0\uC785 +FR-Designer-Min_Width= +Utils-Report-Env_Directory=\uBB38\uC11C\uC791\uC5C5\uB514\uB809\uD130\uB9AC +D-ChartArea=\uCC28\uD2B8\uC601\uC5ED +Only=\uB2E4\uB9CC +FR-Base_No=\uC544\uB2C8\uC624 +SpecifiedG-Put_all_others_together=\uAE30\uD0C0\uBAA8\uB4E0\uAC83\uBCD1\uD569 +HF-NewLine_Des=\uC0C1\uB2E8\uC758\uC774\uB3D9\uD0A4\uC640\uC0AD\uC81C\uD0A4\uB85C\uD589\uBC14\uAFB8\uAE30\uAE30\uD638\uB97C\uC870\uC791\uD560\uC218\uC788\uC2B5\uB2C8\uB2E4. +WLayout-Border-ThreeContainer=\uBD81\u3001\uC11C\uBC0F\uC911\uAC04\uBE14\uB85D\uC744\uAC16\uACE0\uC788\uB294\uACBD\uACC4\uC120\uB808\uC774\uC544\uC6C3\uCEE8\uD14C\uC774\uB108\uC911\uBD81\uCABD\uBE14\uB7ED\uC740\uD544\uC694\uC5D0\uB530\uB77C\uB192\uC774\uB97C\uC870\uC815\uD560\uC218\uC788\uC73C\uBA70\uC11C\uCABD\uBE14\uB7ED\uC740\uD544\uC694\uC5D0\uB530\uB77C\uB108\uBE44\uB97C\uC870\uC815\uD560\uC218\uC788\uC2B5\uB2C8\uB2E4. +Parameter_Name=\uB9E4\uAC1C\uBCC0\uC218\uC774\uB984 +FR-Base_Table=\uD45C +Des-Remove_WorkSheet=\uC0AD\uC81C\uD558\uB824\uB294\uD45C\uC5D0\uB370\uC774\uD130\uAC00\uC874\uC7AC\uD569\uB2C8\uB2E4.\uC601\uAD6C\uC0AD\uC81C\uD558\uB824\uBA74'\uD655\uC778'\uD0A4\uB97C\uB20C\uB7EC\uC8FC\uC138\uC694. +Rotation=\uD68C\uC804 +Undefined=\uC815\uC758\uB418\uC9C0\uC54A\uC74C +Support-Auto_Complete_Shortcut=\uC790\uB3D9\uBCF4\uC644\uB2E8\uCD95\uD0A4 +Set_Column_Title_End=\uC911\uBCF5\uC885\uB8CC\uC5F4\uC124\uC815 +Submit_Url=\uC8FC\uC18C\uC81C\uCD9C +ReportServerP-Are_you_sure_to_delete_the_selected_printer=\uC120\uD0DD\uD55C\uD504\uB9B0\uD130\uB97C\uC0AD\uC81C\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C? +long_data_can_not_show_fully=\uAE34\uB370\uC774\uD130\uB294\uBAA8\uB450\uBCF4\uC774\uC9C0\uC54A\uC2B5\uB2C8\uB2E4. +Utils-Beyond_the_bottom_side_of_Border=\uC544\uB798\uACBD\uACC4\uC120\uBC97\uC5B4\uB0A8 +FR-Import-Export_PDF=PDF\uC11C\uC2DD +Form-CheckBoxGroup=\uCCB4\uD06C\uBC15\uC2A4\uADF8\uB8F9 +Click-Me=\uD074\uB9AD\uB9CC\uD574\uB3C4\uC11C\uD504\uB77C\uC774\uC988\uD55C\uC990\uAC70\uC6B4\uC77C\uC774\uC0DD\uAE41\uB2C8\uB2E4\uFF01 +Hyperlink-Self=\uAE30\uC874\uC6F9\uC5D0\uC11C\uB9C1\uD06C\uC5F4\uAE30(S) +Tree-Select_Leaf_Only_Tips=(\uC774\uD56D\uBAA9\uC5D0\uCCB4\uD06C\uD558\uC9C0\uC54A\uC73C\uBA74\uB9AC\uD134\uAC12\uC740\uC0AC\uC6A9\uC790\uAC00\uCCB4\uD06C\uD55C\uD604\uC7AC\uB178\uB4DC\uB9CC\uD574\uB2F9\uB418\uBA70\uC11C\uBE0C\uB178\uB4DC\uB294\uD3EC\uD568\uB418\uC9C0\uC54A\uC74C\uFF09 +StyleAlignment-Text_Rotation=\uD14D\uC2A4\uD2B8\uBC29\uD5A5 +Format-Error=\uC785\uB825\uD55C\uAC12\uC11C\uC2DD\uC774\uC815\uD655\uD558\uC9C0\uC54A\uC2B5\uB2C8\uB2E4. +Server-Stop=\uC815\uC9C0 +Preference-Setting_Grid=\uACA9\uC790\uBAA8\uC591\uC124\uC815 +ReportServerP-Add_Printer=\uD504\uB9B0\uD130\uCD94\uAC00 +FR-Designer-Plugin_Active=\uC0AC\uC6A9\uC2DC\uC791 +Utils-File_name=\uD30C\uC77C\uBA85 +NOT_NULL_Des=\uBE48\uCE78\uC73C\uB85C\uB458\uC218\uC5C6\uC2B5\uB2C8\uB2E4. +Right_Border_Line=\uC624\uB978\uCABD\uD14C\uB450\uB9AC\uC120 +EditRC-Entire_column=\uBAA8\uB4E0\uC5F4(C) +PageSetup-Top_to_bottom=\uC5F4\uBA3C\uC800\uD589\uB098\uC911 +Click-Get_Default_URL=\uBCF8\uD0A4\uB97C\uD074\uB9AD\uD558\uC5EC\uAE30\uBCF8URL\uC744\uC5BB\uC2B5\uB2C8\uB2E4. +StyleAlignment-Wrap_Text=\uC790\uB3D9\uD589\uBC14\uAFB8\uAE30 +Remove_All_Button=\uBAA8\uB4E0\uD0A4\uD074\uB9AC\uC5B4 +FR-Designer_Component_Interval=\uC5B4\uC148\uBE14\uB9AC\uAC04\uACA9 +ReportColumns-Columns_vertically=\uC5F4\uC140\uB098\uB204\uAE30 +ReportGUI-Print_Background=\uC778\uC1C4/\uB0B4\uBCF4\uB0B4\uAE30\uBB38\uC11C\uBC30\uACBD +Export-CSV=CSV\uC11C\uC2DD(\uC27C\uD45C\uAD6C\uBD84) +M_Edit-Paste=\uBD99\uC5EC\uB123\uAE30(P) +FR-Designer-Basic_Restart_Designer=\uC7AC\uBD80\uD305\uC124\uACC4\uAE30 +ReportServerP-PDF2-INFO=LINUX/UNIX\uC5D0\uC11C\uC911\uBB38\uD3F0\uD2B8\uB97C\uC124\uCE58\uD558\uC9C0\uC54A\uC558\uC744\uB54C\uB9CC\uC0AC\uC6A9 +FormulaD-Check_Valid=\uC801\uD569\uC131\uAC80\uC0AC +server_disconnected=\uC5F0\uACB0\uC774\uB04A\uC5B4\uC84C\uC2B5\uB2C8\uB2E4. +ParameterD-Parameter_name_cannot_be_null=\uB9E4\uAC1C\uBCC0\uC218\uC758\uC774\uB984\uC740\uBE44\uC6CC\uB458\uC218\uC5C6\uC2B5\uB2C8\uB2E4. +FR-Designer-Plugin_Version_Is_Lower_Than_Current=\uC5C5\uADF8\uB808\uC774\uB4DC\uD329\uC758\uD50C\uB7EC\uADF8\uC778\uBC84\uC804\uC774\uD604\uC7AC\uC758\uAC83\uBCF4\uB2E4\uB192\uC9C0\uC54A\uC2B5\uB2C8\uB2E4. +RWA-NotChange_Unmodified=\uC218\uC815\uD558\uC9C0\uC54A\uC73C\uBA74\uC5C5\uB370\uC774\uD2B8\uD558\uC9C0\uC54A\uC2B5\uB2C8\uB2E4. +User_Information=\uC0AC\uC6A9\uC790\uC815\uBCF4 +Custom_styles_lost=\uC0AC\uC6A9\uC790\uC815\uC758\uC591\uC2DD\uC774\uC5C6\uC2B5\uB2C8\uB2E4. +PageSetup-Margin=\uD398\uC774\uC9C0\uC5EC\uBC31 +M-New_FormBook=\uC0C8\uD3FC +Widget-TreeNode=\uD2B8\uB9AC\uB178\uB4DC\uD0A4 +Form-Url=\uC8FC\uC18C +Utils-Beyond_the_left_side_of_Border=\uC67C\uCABD\uC5EC\uBC31\uBC97\uC5B4\uB0A8 +Float_Element_Name=\uD638\uBC84\uC694\uC18C\uBA85\uCE6D +Purple=\uD37C\uD50C +DashBoard-Potence=\uAD8C\uD55C +M-Close_Template=\uB2EB\uAE30\uD15C\uD50C\uB9BF(C) +paper=\uC885\uC774 +Not_Exsit=\uBB38\uC11C\uAC00\uC874\uC7AC\uD558\uC9C0\uC54A\uC2B5\uB2C8\uB2E4. +Utils-Insert_Row=\uD589\uC0BD\uC785 +Utils-Delete_Row=\uD589\uC0AD\uC81C +not_support_authority_edit=\uD574\uB2F9\uC694\uC18C\uB294\uAD8C\uD55C\uCEE8\uD2B8\uB864\uC744\uC9C0\uC6D0\uD558\uC9C0\uC54A\uC2B5\uB2C8\uB2E4. +Formula_Tips=\uC218\uC2DD\uC740"\\ub97c\uB123\uC5B4\uC57C\uD569\uB2C8\uB2E4. +FR-Action_Copy=\uBCF5\uC0AC +Compile_Success=\uCEF4\uD30C\uC77C\uC131\uACF5 +BackgroundTexture-RecycledPaper=\uC7AC\uC0DD\uC6A9\uC9C0 +StyleAlignment-Single_Line=\uD55C\uC904\uBCF4\uC774\uAE30 +Utils-Move_Down=\uC544\uB798\uB85C\uC774\uB3D9 +Please_Set_Repeat_First=\uC911\uBCF5\uC81C\uBAA9\uD589\uACFC\uC5F4\uC744\uC6B0\uC120\uC120\uD0DD\uD574\uC8FC\uC2ED\uC2DC\uC624. +Writer-ShortCuts_Setting=\uB2E8\uCD95\uD0A4\uAE30\uC785\uC124\uC815 +Verify-Data_Verify=\uB370\uC774\uD130\uAC80\uC0AC +FR-mobile_analysis_style=\uD574\uC11D \uBC29\uBC95 +Confirm-Delete-File=\uC120\uD0DD\uD55C\uD30C\uC77C\uC744\uC0AD\uC81C\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C\uFF1F +PageSetup-Header=\uD398\uC774\uC9C0\uBA38\uB9AC\uAE00 +JavaScrit-Asynch=\uBE44\uB3D9\uAE30 +ReportServerP-Toolbar=\uD234\uBC14 +Utils-Top_to_Bottom=\uC138\uB85C +Platform=\uD50C\uB7AB\uD3FC +FR-Designer-FRFont_Underline=\uBC11\uC904 +Show_in_Containing_Folder=\uD574\uB2F9\uD3F4\uB354\uC5F4\uAE30 +BackgroundTexture-WaterDroplets=\uBB3C\uBC29\uC6B8 +FR-Designer-Dependence_Install_Failed=install failed +Layout-Padding=\uC548\uCABD\uC5EC\uBC31 +roles_already_authority_edited=\uC5ED\uD560\uC774\uAD6C\uC131\uB418\uC5C8\uC2B5\uB2C8\uB2E4. +WidgetDisplyPosition=\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4\uD654\uBA74\uC704\uCE58 +SpecifiedG-Force_Group=\uAC15\uC81C\uADF8\uB8F9\uD551 +FormulaD-Formula_Definition=\uC218\uC2DD\uC815\uC758 +I-xyScatterStyle_Marker=\uC0B0\uC810\uADF8\uB798\uD504 +Hour=\uC2DC\uAC04 +ColorMatch=\uC0C9\uBC30\uD569 +M_Edit-Order=\uACB9\uCE68\uC21C\uC11C(O) +BackgroundTexture-Bouquet=\uAF43\uB2E4\uBC1C +Verify-Error_Information=\uC624\uB958\uC815\uBCF4\uAC80\uC0AC +LayerData=\uB85C\uC6B0 \uB808\uBCA8 \uB370\uC774\uD130 +Rename=\uB9AC\uB124\uC784 +Widget-Load_By_Async=\uBE44\uB3D9\uAE30\uB85C\uB529 +Shape=\uADF8\uB798\uD504 +BindColumn-This_Condition_has_been_existed=\uC774\uC870\uAC74\uC740\uC774\uBBF8\uC874\uC7AC\uD569\uB2C8\uB2E4. +NS-exception_readError=\uC624\uB958\uCF54\uB4DC\:1305 \uD15C\uD50C\uB9BF\uD30C\uC77C\uD574\uC11D\uC624\uB958 +Set_Column_Title_Start=\uC911\uBCF5\uC81C\uBAA9\uC5F4\uC124\uC815 +Fri=5 +M_Report-Report_Parameter=\uD15C\uD50C\uB9BF\uB9E4\uAC1C\uBCC0\uC218 +REPORTLETS=\uC5EC\uB7EC\uC7A5\uD15C\uD50C\uB9BF\uC758\uACBD\uB85C\uC758\uB9E4\uAC1C\uBCC0\uC218\uC811\uADFC +WLayout-Card-ToolTip=\uCE74\uB4DC\uC2DD\uB808\uC774\uC544\uC6C3\uC740\uD574\uB2F9\uB808\uC774\uC544\uC6C3\uCEE8\uD14C\uC774\uB108\uC5D0\uC11C\uC5EC\uB7EC\uAC1C\uAE30\uD0C0\uC5B4\uC148\uBE14\uB9AC\uB97C\uCD94\uAC00\uD560\uC218\uC788\uC2B5\uB2C8\uB2E4. +M-Popup_ChartType=\uCC28\uD2B8\uC720\uD615 +Please-Wait=\uC7A0\uC2DC\uB9CC\uAE30\uB2E4\uB824\uC8FC\uC2ED\uC2DC\uC624 +FR-Designer-Form-ToolBar_Widget=\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4 +Widget-Array=\uBC30\uC5F4 +FieldBinding=\uBC14\uC778\uB529\uD544\uB4DC +Top_Bottom_Border_Line=\uC0C1\uD558\uD14C\uB450\uB9AC\uC120 +M-Others=\uAE30\uD0C0... +Hyperlink-Link_Opened_in=\uB9C1\uD06C\uC5F4\uB9AC\uB294\uACF3: +FR-Utils_WorkBook=\uC6CC\uD06C\uBD81 +M_Insert-Float=\uD638\uBC84\uC694\uC18C +Out_Thick_Border_Line=\uAD75\uC740\uBC14\uAE65\uCABD\uD14C\uB450\uB9AC\uC120 +FR-App-File_Lookup_range=\uBC94\uC704\uAC80\uC0C9 +ReportColumns-Columns_to=\uC140\uB098\uB204\uAE30 +Transparent=\uD22C\uBA85 +Parameter-Integer=\uC804\uCCB4\uD0C0\uC785 +PDF-Print_Setting=PDF\uC778\uC1C4\uC124\uC815 +Server-Embedded_Server=\uB0B4\uC7A5\uB41C\uC11C\uBC84 +M_Server-Server_Config_Manager=\uC11C\uBC84\uAD6C\uC131 +FR-Utils-Would_you_like_to_cover_the_current_file=\uD604\uC7AC\uD30C\uC77C\uC744\uB36E\uACA0\uC2B5\uB2C8\uAE4C? +CellWrite-InsertRow_COPY=\uC6D0\uB798\uAC12 +Edit_String_To_Formula=\uBB38\uC790\uC5F4\uC744\uC218\uC2DD\uC73C\uB85C\uD3B8\uC9D1\uD558\uACA0\uC2B5\uB2C8\uAE4C? +Edit-Column_Count=\uC5F4\uC218 +Father=\uC544\uBC84\uC9C0 +ReportColumns-Columns_after=\uCD08\uACFC +FR-Designer_Undo=\uD574\uC81C +DBCP_MIN_IDLE=\uCD5C\uC18C\uC720\uD734\uB9C1\uD06C\uC218 +M-Data_Analysis_Settings=\uB370\uC774\uD130\uBD84\uC11D\uC124\uC815 +M-Form_Preview=\uD3FC\uBBF8\uB9AC\uBCF4\uAE30 +Form-Basic_Properties=\uAE30\uBCF8\uC18D\uC131 +quote=\uC778\uC6A9 +Thu=4 +Collect-Collect_User_Information=\uC0AC\uC6A9\uC790\uC815\uBCF4\uC218\uC9D1 +Layer-Build=\uCE35\uBCC4\uC0DD\uC131 +FR-Designer-FRFont_Line_Style=\uC120\uD615 +BackgroundTexture-BrownMarble=\uAC08\uC0C9\uB300\uB9AC\uC11D +PageSetup-Page_Setup=\uC6F9\uD398\uC774\uC9C0\uC124\uC815 +Form-Semicolon=\uC138\uBBF8\uCF5C\uB860 +ECP_re_input=\uBE44\uBC00\uBC88\uD638\uC785\uB825\uC624\uB958.\uB2E4\uC2DC\uC785\uB825\uD574\uC8FC\uC2ED\uC2DC\uC624. +ExpandD-Sort_After_Expand=\uD655\uC7A5\uD6C4 +FR-Designer-Dependence_Install_Succeed=install succeed +Env-Configure_Workspace=\uAD6C\uC131\uC791\uC5C5\uB514\uB809\uD130\uB9AC +feedback_info=\uADC0\uC911\uD55C\uC758\uACAC\uACFC\uC81C\uC548\uC5D0\uAC10\uC0AC\uB4DC\uB9BD\uB2C8\uB2E4.\uC815\uBCF4\uB97C\uCD5C\uB300\uD55C\uC0C1\uC138\uD788\uC791\uC131\uD574\uC8FC\uC2DC\uBA74\uC5F0\uB77D\uB4DC\uB9AC\uACA0\uC2B5\uB2C8\uB2E4. +Ratio=\uBE44\uC728 +DBCP_TEST_ON_BORROW=\uB9C1\uD06C\uD68D\uB4DD\uC804\uAC80\uC0AC\uC9C4\uD589 +FR-Designer_layerIndex= +WEB-Write_Setting=\uC6F9\uD398\uC774\uC9C0\uC124\uC815\uAE30\uC785 +M-New_WorkBook=\uC0C8\uC6CC\uD06C\uBD81 +FR-Designer-Plugin_Has_Been_Actived=\uD50C\uB7EC\uADF8\uC778\uC774\uAD6C\uB3D9\uB418\uC5C8\uC2B5\uB2C8\uB2E4.\uC124\uACC4\uAE30\uBC0F\uC11C\uBC84\uB97C\uC7AC\uBD80\uD305\uD558\uB824\uBA74\uC11C\uBC84\uB97C\uC218\uB3D9\uC7AC\uBD80\uD305\uD574\uC57C\uD569\uB2C8\uB2E4. +Datasource-Maximum_Number_of_Preview_Rows=\uCD5C\uB300\uBBF8\uB9AC\uBCF4\uAE30\uD589\uC218 +ExpandD-Cell_Expand_Attributes=\uD655\uC7A5\uC18D\uC131 +Select_the_repeated_row_and_column=\uC911\uBCF5\uD574\uC57C\uD560\uD589\uACFC\uC5F4\uC120\uD0DD +FormulaD-Date_&_Time=\uB0A0\uC9DC\uC640\uC2DC\uAC04\uD568\uC218 +Max-Mem-Row-Count=\uB808\uCF54\uB4DC\uC218\uAC00~\uC774\uC0C1\uC77C\uB54C\uB514\uC2A4\uD06C\uB85C\uCE90\uC2DC +BorderLayout-South=\uB0A8 +Export-Text=\uD14D\uC2A4\uD2B8\uD30C\uC77C(\uD0ED\uAE30\uD638\uB85C\uAD6C\uBD84) +JavaScript-Synch=\uB3D9\uAE30\uD654 +FR-App-All_Warning=\uACBD\uACE0 +M_Edit-Send_Backward=\uC544\uB798\uB85C\uC774\uB3D9\u4E00\uACC4\uCE35(B) +Form-Layout=\uB808\uC774\uC544\uC6C3 +FR-Designer-Plugin_Shop_Need_Update=\uC704\uC82F \uC5EC\uBD80\uB97C \uC5C5\uB370\uC774\uD2B8, \uC0C8 \uBC84\uC804\uC744 \uC800\uC7A5? +FR-Designer_WorkBook=\uC6CC\uD06C\uBD81 +UpBarBorderStyleAndColor=\uC5C5\uBC14\uC591\uC2DD +GridLayout=\uADF8\uB9AC\uB4DC\uB808\uC774\uC544\uC6C3 +Utils-Default_Value=\uAE30\uBCF8\uAC12 +Widget-Comb_Widget_Config=\uADF8\uB8F9\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4 +Import-Excel2007_Source=Excel2007\uC18C\uC2A4\uD30C\uC77C +Y-Coordinate=\uC138\uB85C\uC88C\uD45C +FR-Base_SimSun_Not_Found=\uC1A1\uCCB4\uB97C\uCC3E\uC744\uC218\uC5C6\uC2B5\uB2C8\uB2E4.\uD604\uC7AC\uC2DC\uC2A4\uD15C\uC0C1\uC758\uAE30\uBCF8\uC5B8\uC5B4\uB97C\uC124\uACC4\uAE30\uAE00\uAF34\uB85C\uC120\uD0DD\uD574\uC8FC\uC2ED\uC2DC\uC624. +FR-Designer_Seriously=\uC2EC\uAC01 +Upload=\uC5C5\uB85C\uB4DC +Form-Widget_Property_Table=\uC18D\uC131\uD45C +Des-Merger_Cell=\uC120\uD0DD\uC601\uC5ED\uC740\uC5EC\uB7EC\uB370\uC774\uD130\uB97C\uD3EC\uD568\uD558\uACE0\uC788\uC73C\uBA70,\uC140\uBCD1\uD569\uD6C4\uD3B8\uC9D1\uD55C\uBAA8\uB4E0\uC140\uC911\uAC00\uC7A5\uC67C\uCABD\uC0C1\uB2E8\uBAA8\uC11C\uB9AC\uC758\uAC12\uB9CC\uB0A8\uC2B5\uB2C8\uB2E4. +FR-Designer-Basic_Copy_Build_NO=\uC0DD\uC131\uBC84\uC804\uBC88\uD638\uB97C\uB354\uBE14\uD074\uB9AD\uD558\uBA74\uD074\uB9BD\uBCF4\uB4DC\uC5D0\uBCF5\uC0AC\uB429\uB2C8\uB2E4. +FR-Base_TurnOn=\uC5F4\uAE30 +FR-Base_Rows=\uD589 +Form-Remove_Repeat=\uC911\uBCF5\uD56D\uBAA9\uC0AD\uC81C +Yes=\uC608 +Datasource-JNDI_Name=JNDI\uC758\uC774\uB984 +Utils-Delete_Column=\uC5F4\uC0AD\uC81C +HF-Delete_it=\uC0AD\uC81C +JavaScript-Dynamic_Parameters=\uB3D9\uC801\uD30C\uB77C\uBBF8\uD130 +px=\uD654\uC18C +FR-App-Report_Template=\uBB38\uC11C\uD15C\uD50C\uB9BF +Verify-Message=\uC624\uB958\uC815\uBCF4 +Plan=\uACC4\uD68D +Vertical-Split_Layout=\uC218\uC9C1\uBD84\uD560\uB808\uC774\uC544\uC6C3 +ParameterD-Delay_Playing=\uCC3E\uC544\uBCF4\uAE30\uD074\uB9AD\uC804\uBB38\uC11C\uB0B4\uC6A9\uBCF4\uC774\uC9C0\uC54A\uAE30 +TurnOff=\uB2EB\uAE30 +FR-Please_Rename=\uB9AC\uB124\uC784\uD574\uC8FC\uC2ED\uC2DC\uC624. +Select_Data_Set=\uB370\uC774\uD130\uC138\uD2B8\uC120\uD0DD +Name_has_Colon=\uC774\uB984\: +ReportColumns-Columns_horizontally=\uD589\uC140\uB098\uB204\uAE30 +FR-Base_Yes=\uC608 +ReportColumns-Repeat_Row=\uD589\uBCF5\uC0AC\uC21C\uC11C +Print_Setting=\uC778\uC1C4\uC124\uC815 +Registration-User_Name=\uC0AC\uC6A9\uC790\uC774\uB984 +Datasource-User_Defined=\uC0AC\uC6A9\uC790\uC815\uC758 +FR-Designer-Plugin_DownLoadMessage= +Delay=\uC9C0\uC5F0 +FR-Designer-All_MSBold=\uB9C8\uC774\uD06C\uB85C\uC18C\uD504\uD2B8 Yahei +Utils-Now_create_connection=\uB370\uC774\uD130\uB9C1\uD06C\uC0DD\uC131\uC911 +FR-Template-Path_chooseRightPath=\uC815\uD655\uD55C\uACBD\uB85C\uB97C\uC120\uD0DD\uD574\uC8FC\uC2ED\uC2DC\uC624. +FR-Remote_Re_Connect_to_Server=\uC11C\uBC84\uAC00\uB2EB\uD600\uC788\uC2B5\uB2C8\uB2E4.\uB2E4\uC2DC\uC11C\uBC84\uB97C\uC5F0\uACB0\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C? +Nation=\uAD6D\uAC00 +DBCP_MAX_WAIT=\uCD5C\uB300\uB300\uAE30\uC2DC\uAC04 +FR-App-Template_Form=\uD3FC +Address=\uC8FC\uC18C +Sub_Report=\uBB38\uC11C\uC548\uC758\uBB38\uC11C +FR-Import-Export_Word=Word\uC11C\uC2DD +FR-Server_Version_Tip=\uD604\uC7AC\uC5F0\uACB0\uB41C\uC11C\uBC84\uBC84\uC804\uC774\uB2F9\uC2E0\uC774\uC0AC\uC6A9\uD558\uACE0\uC788\uB294\uC124\uACC4\uAE30\uBC84\uC804\uBC88\uD638\uBCF4\uB2E4\uB0AE\uC2B5\uB2C8\uB2E4.\uACC4\uC18D\uC5F0\uACB0\uD558\uBA74\uD3B8\uC9D1\uD558\uACE0\uC788\uB294\uC77C\uBD80\uC18D\uC131\uC774\uC800\uC7A5\uB418\uC9C0\uC54A\uC744\uC218\uC788\uC2B5\uB2C8\uB2E4. \uC5F0\uACB0\uD574\uC57C\uD560\uACBD\uC6B0\uC124\uACC4\uAE30\uBC84\uC804\uACFC\uC11C\uBC84\uBC84\uC804\uC744\uC77C\uCE58\uC2DC\uCF1C\uC8FC\uC2ED\uC2DC\uC624. +StyleAlignment-Left_To_Right=\uC67C\uCABD\uC5D0\uC11C\uC624\uB978\uCABD\uC73C\uB85C +Verify-ToolTips=\uC218\uC2DD\uBE44\uCDA9\uC871\uC54C\uB9BC. \uC624\uB958\uC815\uBCF4\uAC80\uC0AC +BackgroundTexture-Stationery=\uD3B8\uC9C0\uC9C0 +FR-Designer_RWA-Help=\uBBF8\uC218\uC815, \uBBF8\uC5C5\uB370\uC774\uD2B8\uB85C\uC124\uC815\uD55C\uD6C4\uBBF8\uB9AC\uBCF4\uAE30\uBB38\uC11C\uB97C\uC791\uC131\uD558\uC5EC\uB808\uCF54\uB4DC\uB41C\uC140\uC5D0\uD3B8\uC9D1\uC218\uC815\uC0AC\uD56D\uC774\uC5C6\uC744\uACBD\uC6B0\uC774\uB808\uCF54\uB4DC\uB294\uD589\uC5C5\uB370\uC774\uD2B8\uB97C\uC9C4\uD589\uD560\uC218\uC5C6\uC2B5\uB2C8\uB2E4.\n\uB300\uC6A9\uB7C9\uB370\uC774\uD130\uB808\uCF54\uB4DC\uCC3E\uC544\uBCF4\uAE30\uBC0F\uAE30\uC785\uC0C1\uD669\uC5D0\uC11C\uD574\uB2F9\uC124\uC815\uC744\uD558\uBA74\uAE30\uC785\uC81C\uCD9C\uC131\uB2A5\uC744\uB192\uC77C\uC218\uC788\uC2B5\uB2C8\uB2E4. +M_Insert-Barcode=\uBC14\uCF54\uB4DC +Bounds=\uACBD\uACC4\uC120 +FR-Designer-Undo_All_Authority_Operations=\uC774\uC804\uAD8C\uD55C\uD3B8\uC9D1\uC758\uBAA8\uB4E0\uC870\uC791\uD574\uC81C +Datasource-Context=\uBB38\uB9E5 +CellWrite-Page_After_Column=\uC5F4\uB4A4\uD398\uC774\uC9C0\uB098\uB204\uAE30 +FR-Designer_Cancel=\uCDE8\uC18C +Button-Group-Display-Columns=\uC5F4\uC758\uC218\uB97C\uB098\uD0C0\uB0C4 +Widget-Height=\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4\uB192\uC774 +Examples=\uC608\uC2DC +Formula_Dictionary_Display_Example=\uC2E4\uC81C\uAC12\uBC94\uC704:\ +StyleAlignment-Horizontal=\uC218\uD3C9\uC815\uB82C +HyperLink_Must_Alone_Reset=\uC5EC\uB7EC\uAC1C\uD558\uC774\uD37C\uB9C1\uD06C +ExpandD-Expand_Direction=\uD655\uB300\uBC29\uD5A5 +Include=\uD3EC\uD568 +Export-Excel-Page=\uD398\uC774\uC9C0\uB098\uB204\uAE30\uC5B4\uB0B4\uBCF4\uB0B4\uAE30 +FR-Designer-Min_Height=\uCD5C\uC18C\uB192\uC774 +Filed=\uC601\uC5ED +ReportServerP-Import_Css=Css\uC778\uC6A9 +M_Insert-Formula=\uC218\uC2DD\uC0BD\uC785 +FR-Designer_Auto-Build=\uC790\uB3D9\uC0DD\uC131 +FRFont-Foreground=\uC0C9 +Bubble-Width=\uBC84\uBE14\uB108\uBE44 +Form-Hierarchy_Tree=\uAD6C\uC870\uD2B8\uB9AC +WLayout-Border-LayoutContainer=\uC911\uAC04\uACFC\uBD81\uCABD\uB450\uBE14\uB7ED\uC758\uACBD\uACC4\uC120\uB808\uC774\uC544\uC6C3\uCEE8\uD14C\uC774\uB108\uC911\uBD81\uCABD\uBE14\uB7ED\uC740\uD544\uC694\uC5D0\uB530\uB77C\uB192\uC774\uB97C\uC870\uC815\uD560\uC218\uC788\uC2B5\uB2C8\uB2E4. +Preference-JDK_Home=JDK\uACBD\uB85C +Utils-Insert_Column=\uC5F4\uC0BD\uC785 +FR-Designer_ToolBar_Top=\uC0C1\uB2E8\uD234\uBC14 +BindColumn-The_Conditions_of_FatherCell=\uBD80\uBAA8\uC140\uC870\uAC74 +Links=\uB9C1\uD06C +M_Report-Report_Header=\uBB38\uC11C\uD398\uC774\uC9C0\uBA38\uB9AC\uAE00 +Sub_Report_Description=\uBB38\uC11C\uC548\uC758\uBB38\uC11C\uB294\uBD80\uBAA8\uD14C\uC774\uBE14\uC2E4\uD589\uD658\uACBD\uD558\uC5D0\uC788\uC5B4\uC57C\uD558\uBA70,\uC774\uB458\uC740\uB3D9\uC77C\uD55C\uD15C\uD50C\uB9BF\uC774\uC544\uB2C8\uC5B4\uC57C\uD569\uB2C8\uB2E4. +T_Insert-Float=\uC0BD\uC785\uD638\uBC84\uC694\uC18C +BackgroundTexture-FishFossil=\uC5B4\uB958\uD654\uC11D +My_Computer=\uB0B4\uCEF4\uD4E8\uD130 +FORMLET=\uAC01\uD3FC\uACBD\uB85C\uC758\uB9E4\uAC1C\uBCC0\uC218\uC811\uADFC +HF-Undefined=\uC815\uC758\uC5C6\uC74C +Widget-User_Defined_Widget_Config=\uC0AC\uC804\uC815\uC758\uB41C\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4 +Report-Write_Attributes_Group_Warning=\uC140\uADF8\uB8F9\uC73C\uB85C\uC124\uC815\uB41C\uAC01\uD544\uB4DC\uC758\uC140\uAC1C\uC218\uB294\uAC19\uC544\uC57C\uD569\uB2C8\uB2E4. +Form-Single_quote=\uC791\uC740\uB530\uC634\uD45C +Compile_Success_And_Then_Save=\uCEF4\uD30C\uC77C\uC744\uC131\uACF5\uD574\uC57C\uC815\uD655\uD788\uC800\uC7A5\uAC00\uB2A5 +FR-Designer_Layout-Padding=\uC548\uCABD\uC5EC\uBC31 +Layout_Container=\uB808\uC774\uC544\uC6C3\uCEE8\uD14C\uC774\uB108 +Admin=\uAD00\uB9AC\uC790 +Form-EC_toolbar=\uBB38\uC11C\uBE14\uB85D\uD234\uBC14 +FR-App-All_Auto=\uC790\uB3D9 +Utils-Available_Columns=\uC120\uD0DD\uAC00\uB2A5\uC5F4 +Form-Change_Widget_Name_Discription=\uC0C8\uB85C\uC6B4\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4\uC774\uB984\uC744\uC785\uB825\uD574\uC8FC\uC138\uC694. +FR-Module_Designer=\uC124\uACC4\uAE30\uBAA8\uB4C8 +FR-Import-Export_Text=\uD14D\uC2A4\uD2B8\uD30C\uC77C(\uD0ED\uAE30\uD638\uB85C\uAD6C\uBD84) +Values-Editor=\uAC12\uD3B8\uC9D1\uAE30 +FR-Designer_Yes=\uC608 +ExpandD-Expandable=\uD655\uC7A5\uAC00\uB2A5\uC131 +Tree-Return_Full_Path=\uACB0\uACFC\uB97C\uC644\uC804\uACC4\uCE35\uACBD\uB85C\uB85C\uB418\uB3CC\uB9AC\uAE30 +FRFont-bolditalic=\uAD75\uAC8C\uAE30\uC6B8\uC784\uAF34 +FR-Base_StyleFormat_Sample=\uC608\uC2DC +Area_Value=\uAD6C\uC5ED\uAC12 +FR-Designer-Plugin_Disable=\uC0AC\uC6A9\uAE08\uC9C0 +Utils-Are_you_sure_to_remove_the_selected_item=\uC815\uB9D0\uB85C\uC120\uD0DD\uD55C\uD56D\uBAA9\uC744\uC0AD\uC81C\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C? +Face_Write=\uAE30\uC785 +Poly-Report_Block=\uBB38\uC11C\uC720\uD615\uCDE8\uD569\uBE14\uB7ED +Vgap=\uC218\uC9C1\uAC04\uACA9 +FR-Designer_HyperLink_Must_Alone_Reset=\uC5EC\uB7EC\uAC1C\uD558\uC774\uD37C\uB9C1\uD06C +DS-Class=\uD504\uB85C\uADF8\uB7A8 +FR-Hyperlink_Please_Select_Reportlet=\uB124\uD2B8\uC6CC\uD06C\uBB38\uC11C\uB97C\uC120\uD0DD\uD574\uC8FC\uC2ED\uC2DC\uC624. +FS_Report_Type=\uC720\uD615 +HF-New_Line=\uC904\uBC14\uAFC8 +Privilege=\uAD8C\uD55C +Export-Offline-Html=\uCD9C\uB825\uC624\uD504\uB77C\uC778html\uBB38\uC11C +FR-Designer_open-new-form-tip=\uD604\uC7AC\uD15C\uD50C\uB9BF\uC740711\uC774\uD558\uBC84\uC804\uC73C\uB85C\uC791\uC131\uB418\uC5B4\uD638\uD658\uC774\uB418\uC9C0\uC54A\uC544\uC5F4\uC218\uC5C6\uC2B5\uB2C8\uB2E4. \uC774\uD3FC\uC744\uC5F4\uC5B4\uC218\uC815\uD558\uACE0\uC790\uD560\uACBD\uC6B0\uC0C1\uC751\uD558\uB294\uBC84\uC804\uC124\uACC4\uAE30\uB85C\uC5F4\uC5B4\uC8FC\uC2ED\uC2DC\uC624. +FR-Designer-Widget-Style_Frame_Style=\uD504\uB808\uC784\uC591\uC2DD +Present-No_Present=\uCDE8\uC18C\uD615\uD0DC\uC124\uC815 +FR-Designer_Form-Password=\uC554\uD638 +X_Axis=X\uCD95 +FR-mobile_html_analysis=HTML5 \uD574\uC11D +M_Edit-Bring_to_Front=\uAF2D\uB300\uAE30\uC5D0\uB193\uAE30(T) +Null_Value_Show=\uB110\uAC12\uBCF4\uC774\uAE30 +Datasource-JNDI_DES=\uC8FC\uC758\:INITIAL_CONTEXT_FACTORY\uD074\uB798\uC2A4\uB97C\uD3EC\uD568\uD558\uACE0\uC788\uB294 .jar \uD30C\uC77C\uC744\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC124\uCE58\uB514\uB809\uD130\uB9AC\uC758 /lib\uB514\uB809\uD130\uB9AC\uC5D0\uCD94\uAC00\uD574\uC57C\uD569\uB2C8\uB2E4. +PrintP-Print_Preview=\uC778\uC1C4\uBBF8\uB9AC\uBCF4\uAE30 +Form-Hierarchy_Tree_Last=\uC774\uC804 +Has_been_gone=\\uc0ac\uB77C\uC84C\uC2B5\uB2C8\uB2E4.\uD574\uB2F9\uC591\uC2DD\uC744\uCD94\uAC00\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C? +RWA-Add_Field=\uD544\uB4DC\uCD94\uAC00 +newNode=\uB178\uB4DC\uCD94\uAC00 +PageSetup-Shrink_to_fit_content=\uC140\uB0B4\uC6A9\uC5D0\uB530\uB77C\uC790\uB3D9\uC870\uC815 +FR-Designer_Date=\uB0A0\uC9DC +Column_Multiple=\uB370\uC774\uD130\uBC30\uC218 +FR-App-All_File=\uD30C\uC77C +Sort-Descending=\uB0B4\uB9BC\uCC28\uC21C +FR-Designer-Plugin_Delete=\uC0AD\uC81C +Above=\uC0C1\uAE30\uBC84\uC804 +Utils-The-Chart=\uCC28\uD2B8 +FRFont-plain=\uC77C\uBC18 +Calculating=\uCC98\uB9AC\uC911 +Form-Object=\uD3FC\uAC1D\uCCB4\: +May=5\uC6D4 +FR-Designer_Plugin_Normal_Update=\uC5C5\uB370\uC774\uD2B8 +FR-Hyperlink_Reportlet=\uB124\uD2B8\uC6CC\uD06C\uBB38\uC11C +M_Edit-Copy=\uBCF5\uC0AC(C) +Sub_Report_Message2=\uBD80\uBAA8\uBB38\uC11C\uAC00\uD604\uC7AC\uC2E4\uD589\uD658\uACBD\uC5D0\uC5C6\uC2B5\uB2C8\uB2E4. +Sub_Report_Message3=\uC790\uC2E0\uC744\uC120\uD0DD\uD560\uC218\uC5C6\uC2B5\uB2C8\uB2E4. +Sub_Report_Message1=\uC815\uD655\uD55C\uACBD\uB85C\uB97C\uC120\uD0DD\uD574\uC8FC\uC2ED\uC2DC\uC624. +Form-Allow_CustomData=\uC0AC\uC6A9\uC790\uC815\uC758\uAC12\uD5C8\uC6A9 +FR-Server_Version_Tip_MoreInfo=\uBC84\uC804\uBD88\uC77C\uCE58\uB85C\uC778\uD55C\uBB38\uC81C\uAC00\uBC1C\uC0DD\uD558\uC9C0\uC54A\uB3C4\uB85D\uC0AC\uC6A9\uD558\uACE0\uC788\uB294 FineReport\uC81C\uD488\uC758\uC124\uACC4\uAE30\uBC84\uC804\uBC0F\uC124\uCE58\uB41C\uC11C\uBC84\uBC84\uC804\uC774\uC77C\uCE58\uD558\uB294\uC9C0\uD655\uC778\uD574\uC8FC\uC2ED\uC2DC\uC624.\ N\uB354\uB192\uC740\uC124\uACC4\uAE30\uBC84\uC804\uC73C\uB85C\uC791\uC131\uB41C\uD15C\uD50C\uB9BF\uC744\uC5F4\uACBD\uC6B0\uC5F4\uAE30\uC624\uB958\uB85C\uC778\uD574\uAE30\uC874\uD15C\uD50C\uB9BF\uC18D\uC131\uC744\uC783\uC744\uC218\uC788\uC2B5\uB2C8\uB2E4. \uC791\uC131\uD55C\uD15C\uD50C\uB9BF\uC5D0\uC11C\uC0AC\uC6A9\uD558\uACE0\uC788\uB294\uC124\uACC4\uAE30\uBC84\uC804\uC774\uB2F9\uC2E0\uC758\uCD5C\uC885\uC124\uCE58\uC11C\uBC84\uBC84\uC804\uBCF4\uB2E4\uB192\uC744\uACBD\uC6B0\uC11C\uBC84\uB294\uB2F9\uC2E0\uC774\uC791\uC131\uD55C\uD15C\uD50C\uB9BF\uC744\uB85C\uB529\uD558\uC9C0\uBABB\uD560\uC218\uC788\uC2B5\uB2C8\uB2E4. +FR-Designer_Server-version-tip-moreInfo=\uBC84\uC804\uBD88\uC77C\uCE58\uB85C\uC778\uD55C\uBB38\uC81C\uAC00\uBC1C\uC0DD\uD558\uC9C0\uC54A\uB3C4\uB85D\uC0AC\uC6A9\uD558\uACE0\uC788\uB294 FineReport\uC81C\uD488\uC758\uC124\uACC4\uAE30\uBC84\uC804\uBC0F\uC124\uCE58\uB41C\uC11C\uBC84\uBC84\uC804\uC774\uC77C\uCE58\uD558\uB294\uC9C0\uD655\uC778\uD574\uC8FC\uC2ED\uC2DC\uC624.\ N\uB354\uB192\uC740\uC124\uACC4\uAE30\uBC84\uC804\uC73C\uB85C\uC791\uC131\uB41C\uD15C\uD50C\uB9BF\uC744\uC5F4\uACBD\uC6B0\uC5F4\uAE30\uC624\uB958\uB85C\uC778\uD574\uAE30\uC874\uD15C\uD50C\uB9BF\uC18D\uC131\uC744\uC783\uC744\uC218\uC788\uC2B5\uB2C8\uB2E4. \uC791\uC131\uD55C\uD15C\uD50C\uB9BF\uC5D0\uC11C\uC0AC\uC6A9\uD558\uACE0\uC788\uB294\uC124\uACC4\uAE30\uBC84\uC804\uC774\uB2F9\uC2E0\uC758\uCD5C\uC885\uC124\uCE58\uC11C\uBC84\uBC84\uC804\uBCF4\uB2E4\uB192\uC744\uACBD\uC6B0\uC11C\uBC84\uB294\uB2F9\uC2E0\uC774\uC791\uC131\uD55C\uD15C\uD50C\uB9BF\uC744\uB85C\uB529\uD558\uC9C0\uBABB\uD560\uC218\uC788\uC2B5\uB2C8\uB2E4. +Get_Lock=\uC554\uD638\uD654 +HF-Edit_Footer=\uD398\uC774\uC9C0\uBC14\uB2E5\uAE00\uD3B8\uC9D1 +Datasource-New_Charset=\uC0C8\uCF54\uB529 +Preference-Custom=\uC0AC\uC6A9\uC790\uC815\uC758 +BackgroundTexture-Newsprint=\uC2E0\uBB38\uC9C0 +ConditionB-Add_bracket=\uAD04\uD638\uCD94\uAC00 +Datasource-Connection_successfully=\uB9C1\uD06C\uC131\uACF5 +Function-The_class_must_implement_the_interface=\uD574\uB2F9\uD074\uB798\uC2A4\uB294\uC778\uD130\uD398\uC774\uC2A4\uB97C\uD574\uC57C\uD55C\uB2E4. +FR-Designer_ChartF-Transparency=\uD22C\uBA85 +Crimson=\uC9C4\uD55C\uBE68\uAC15 +FR-Hyperlink_Dialog=\uB300\uD654\uC0C1\uC790 +FR-Designer_Covered_All=\uBAA8\uB450\uB36E\uC5B4\uC50C\uC6B0\uAE30 +Hyperlink-New_Window=\uC0C8\uC708\uB3C4\uC6B0 +Style_Name=\uC11C\uC2DD\uBA85 +CSS_warning=\\uc0c1\uB300\uBB38\uC11C\uD504\uB85C\uC81D\uD2B8\uB514\uB809\uD130\uB9AC(\uC608:WebReport,WebReport\\css)\uC5D0\uC778\uC6A9\uB41Ccss \uD30C\uC77Ctest.css\uAC00\uC788\uB294\uACBD\uC6B0\uC0C1\uB300\uACBD\uB85C\uB294css/test.css\uC774\uB2E4. +FR-Base_Column=\uC5F4 +Three_Rows_Of_Two_Grid=3\uD589 2\uC5F4\uC758\uADF8\uB9AC\uB4DC +DBCP_VALIDATION_QUERY=SQL\uAC80\uC99D\uCC3E\uC544\uBCF4\uAE30 +M_Edit-Clear_Formats=\uC11C\uC2DD(F) +Parameter_Setting=\uB9E4\uAC1C\uBCC0\uC218\uC124\uC815 +Related=\uC5F0\uB3D9 +BorderLayout-Constraints=\uC704\uCE58 +Write_Preview=\uAE30\uC785\uBBF8\uB9AC\uBCF4\uAE30 +PageSetup-Page_Order=\uC778\uC1C4\uC21C\uC11C +Verify-Verify_Formula=\uAC80\uC0AC\uC218\uC2DD +State=\uC131\uC2DC +FR-Designer-Widget-Style_Body_Background=\uBA54\uC778\uBC30\uACBD +FR-App-Privilege_No=\uAD8C\uD55C\uC5C6\uC74C +Please_Drag_ParaPane= +Come_True=\uC2E4\uD604 +ISEMPTY=\uBE44\uC5B4\uC788\uC74C +Background-Texture=\uBB34\uB2AC +FR-Designer_Verify-Message=\uC624\uB958\uC815\uBCF4 +Locked=(\uC7A0\uAE40\uFF09 +Utils-Design-Action_Cancel=\uCDE8\uC18C +Image-Titled=\uD0C0\uC77C +Gradient-Direction=\uADF8\uB77C\uB370\uC774\uC158 \uBC29\uD5A5 +Green=\uC9D9\uC740\uB179\uC0C9 +Report_Engine=\uBB38\uC11C\uC5D4\uC9C4 +Return-String=\uBB38\uC790\uC5F4\uB3CC\uC544\uAC00\uAE30 +Margin=\uC5EC\uBC31 +Pitch_Percentage=\uAC04\uACA9\uBC31\uBD84\uC728 +FR-Base_TurnOff=\uB2EB\uAE30 +Utils-has_been_existed=\uC774\uBBF8\uC874\uC7AC\uD569\uB2C8\uB2E4 +HF-Insert_Formula=\uC218\uC2DD\uC0BD\uC785 +Utils-Exit_Designer=\uC124\uACC4\uAE30\uB098\uAC00\uAE30 +Formula_Dictionary_Display=\uC704\uC2E4\uC81C\uAC12\uBC94\uC704\uC548\uC758\uAC01\uAC12($$$): \uFF0C \uD45C\uC2DC\uAC12: +PageSetup-Left_to_right=\uD589\uBA3C\uC800\uC5F4\uB098\uC911 +Utils-Import_Excel_Data=[Excel]\uBD88\uB7EC\uC624\uAE30 +M-Save=\uC800\uC7A5 +redo=\uB9AC\uC6CC\uD06C +Status=\uC0C1\uD0DC +Draw=\uADF8\uB9AC\uAE30 +FR-Designer_Message=\uC815\uBCF4 +Records=\uAC74\uC758\uB808\uCF54\uB4DC +FR-Designer_ComboBox=\uBC15\uC2A4\uD480\uB2E4\uC6B4 +Driver=\uB4DC\uB77C\uC774\uBE0C +Template_Parameters=\uD15C\uD50C\uB9BF\uB9E4\uAC1C\uBCC0\uC218 +Form-Remove_Repeat_Data=\uC911\uBCF5\uB370\uC774\uD130\uC0AD\uC81C +ECP_decode=\uD15C\uD50C\uB9BF\uC554\uD638\uD574\uC81C +Area_Name=\uC601\uC5ED\uBA85 +Others=\uAE30\uD0C0 +Merge=\uBCD1\uD569 +BackgroundTexture-Parchment=\uC591\uD53C\uC885\uC774 +BindColumn-Bottom_N=\uB4A4N\uAC1C +Frame=\uD504\uB808\uC784 +Bottom_Border_Line=\uC544\uB798\uD14C\uB450\uB9AC\uC120 +Muiti_In=\uB2E4\uCE35\uB4DC\uB9B4\uB2E4\uC6B4 +FR-Designer-Dependence_Install_Online=install online +Use_Default_ToolBar=\uAE30\uBCF8\uD234\uBC14\uC0AC\uC6A9 +M_Server-Platform_Manager=\uBB38\uC11C\uD50C\uB7AB\uD3FC\uAD00\uB9AC +PageSetup-inches=\uC778\uCE58 +Form-Widget_Property=\uC18D\uC131\uC774\uB984 +FR-Layout_Padding=\uC548\uCABD\uC5EC\uBC31 +Schema=\uD14C\uB9C8 +Server_Path=\uD638\uC2A4\uD2B8\uCEF4\uD4E8\uD130\uC704\uCE58 +Condition_Display=\uC870\uAC74\uBCF4\uC774\uAE30 +FR-Server-Design_template_unopened=\uD15C\uD50C\uB9BF\uC744\uC5F4\uC218\uC5C6\uC2B5\uB2C8\uB2E4. +Function-Function_Class_Name=\uD568\uC218\uD074\uB798\uC2A4\uB124\uC784 +Schedule-Template=\uD15C\uD50C\uB9BF\uBA85\uCE6D +Tree_Data_Field=\uD2B8\uB9AC\uB370\uC774\uD130\uD544\uB4DC +Border-Style-Normal=\uC9C1\uAC01\uD14C\uB450\uB9AC +Top_And_Double_Bottom_Border_Line=\uC704\uD14C\uB450\uB9AC\uC120\uACFC\uB450\uC904\uBC11\uD14C\uB450\uB9AC\uC120 +FR-Server_Embedded_Server_Start=\uB0B4\uC7A5\uB41C\uC11C\uBC84-\uC5F4\uAE30 +FR-Designer-Basic_Restart_Designer_Later=\uC7A0\uC2DC\uD6C4\uC7AC\uBD80\uD305\uD574\uC8FC\uC2ED\uC2DC\uC624. +StyleAlignment-Top=\uC704\uC5D0\uB9DE\uCDA4 +ReportServerP-First=\uBA54\uC778\uD398\uC774\uC9C0 +Not_Exist=\uC874\uC7AC\uD558\uC9C0\uC54A\uC2B5\uB2C8\uB2E4. +FR-Remote_File_is_Locked=\uC5F4\uB824\uB294\uBB38\uC11C\uB97C\uB2E4\uB978\uC0AC\uB78C\uC774\uC0AC\uC6A9\uC911\uC774\uB2C8\uC7A0\uC2DC\uD6C4\uC5D0\uC5F4\uC5B4\uC8FC\uC2ED\uC2DC\uC624. +Apply=\uC751\uC6A9 +Sytle-Indentation=\uB4E4\uC5EC\uC4F0\uAE30 +Parameter-Float=\uC2F1\uAE00\uC815\uB3C4\uD0C0\uC785 +HF-Center_Section=\uC911\uAC04\uC601\uC5ED +Form-Double_quotes=\uD070\uB530\uC634\uD45C +M_File-Export-Word=Word\uC11C\uC2DD +M_File-Export-Text=\uD14D\uC2A4\uD2B8\uD30C\uC77C(\uD0ED\uAE30\uD638\uB85C\uAD6C\uBD84) +PageSetup-First_Page_Number=\uC2DC\uC791\uD398\uC774\uC9C0\uBC88\uD638 +Execute=\uC2E4\uD589 +Task=\uD0DC\uC2A4\uD06C +Custom_Button_Type_Submit=\uC81C\uCD9C +FR-Designer-Widget_Settings=\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4\uC124\uC815 +IS_Need_Password=\uC554\uD638\uB97C\uC785\uB825\uD574\uC57C\uD569\uB2C8\uB2E4. +PageSetup-Horizontally=\uC218\uD3C9\uAC00\uC6B4\uB370\uC815\uB82C +No_Editor_Property_Definition=\uD574\uB2F9\uD3B8\uC9D1\uAE30\uC5D0\uC18D\uC131\uC815\uC758\uAC00\uC5C6\uC2B5\uB2C8\uB2E4. +Env-Remote_Server=\uC6D0\uACA9\uC11C\uBC84 +FR-Utils_Background=\uBC30\uACBD +FR-Designer-Plugin_Warning=\uACBD\uACE0 +Server-version-info=\uD604\uC7AC\uC5F0\uD15C\uD50C\uB9BF\uD30C\uC77C\uC740\uB354\uB192\uC740\uBC84\uC804\uC758\uC124\uACC4\uAE30\uB85C\uC791\uC131\uB418\uC5C8\uC2B5\uB2C8\uB2E4.\uC5F4\uACBD\uC6B0\uAE30\uC874\uD15C\uD50C\uB9BF\uC18D\uC131\uC774\uC624\uB958\uAC00\uB098\uAC70\uB098\uC190\uC0C1\uB420\uC704\uD5D8\uC774\uC788\uC2B5\uB2C8\uB2E4. \uC774\uD15C\uD50C\uB9BF\uC744\uC5F4\uC5B4\uC57C\uD560\uACBD\uC6B0\uC124\uACC4\uAE30\uB97C~\uB85C\uC5C5\uADF8\uB808\uC774\uB4DC\uD574\uC8FC\uC2ED\uC2DC\uC624. +CellWrite-Page_After_Row=\uD589\uB4A4\uD398\uC774\uC9C0\uB098\uB204\uAE30 +HF-Right_Section=\uC624\uB978\uCABD\uC601\uC5ED +PageSetup-Title_Start_Row=\uC911\uBCF5\uC81C\uBAA9\uD589 +From=~\uBC88\uC9F8\uBD80\uD130 +Preference-Grid_Line_Color=\uB208\uAE08\uC120\uC0C9 +RowTo=\uD589\uC5D0\uC11C~\uBC88\uC9F8 +FR-Designer_ReportColumns-Repeat_Column=\uC5F4\uBCF5\uC0AC\uC21C\uC11C +M_Server-Function_Manager=\uD568\uC218\uAD00\uB9AC\uC790 +KeyWord=\uD0A4\uC6CC\uB4DC +DS-Multi_Dimensional_Database=\uB2E4\uCC28\uC6D0\uB370\uC774\uD130\uBCA0\uC774\uC2A4 +BiasD-Slope_Line=\uC0AC\uC120 +Tue=2 +ReportServerP-Last=\uB05D\uD398\uC774\uC9C0 +FR-Base_Columns=\uC5F4 +SpecifiedG-Leave_in_their_own_groups=\uAC01\uC790\uC758\uADF8\uB8F9\uC548\uC5D0\uB0A8\uAE30\uAE30 +LOG-Please_Wait=\uC7A0\uC2DC\uB9CC\uAE30\uB2E4\uB824\uC8FC\uC2ED\uC2DC\uC624 +Form-ToolBar=\uD3FC\uD234\uBC14 +FR-Base_sure_remove_item=\uC815\uB9D0\uB85C\uC120\uD0DD\uD55C\uD56D\uBAA9\uC744\uC0AD\uC81C\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C? +Component_Scale=\uC5B4\uC148\uBE14\uB9AC\uCD95\uC18C +Hyperlink-Use_CJK_to_encode_parameter=CJK\uB85C\uB9E4\uAC1C\uBCC0\uC218\uCC98\uB9AC +LOG-Has_Been_Openned=\uC5F4\uB838\uC2B5\uB2C8\uB2E4. +FR-Designer-Dependence= +ECP_error_pwd=\uBE44\uBC00\uBC88\uD638\uC785\uB825\uC624\uB958 +REPORTLET=\uD15C\uD50C\uB9BF\uACBD\uB85C\uC758\uB9E4\uAC1C\uBCC0\uC218\uC811\uADFC +RWA-Column_Offset=\uC5F4\uC635\uC14B +Forecast=\uC608\uCE21 +Light_Orange=\uC624\uB80C\uC9C0\uC0C9 +StyleAlignment-Vertical=\uC218\uC9C1\uC815\uB82C +Form-List=\uB9AC\uC2A4\uD2B8 +ParameterD-Show_Parameter_Window=\uB9E4\uAC1C\uBCC0\uC218\uB300\uD654\uCC3D\uBCF4\uC774\uAE30 +FR-Designer_Set_Submit_Event=\uC81C\uCD9C\uC774\uBCA4\uD2B8\uC124\uC815 +Value_Percent=\uAC12\uC810\uC720\uBE44\uC728 +DBCP_MIN_EVICTABLE_IDLE_TIMEMILLIS=\uC720\uD734\uCD5C\uC18C\uC2DC\uAC04\uAC12 +Function-The_class_must_be_located_in=\uD574\uB2F9\uD074\uB798\uC2A4\uB294~\uC5D0\uB450\uC5B4\uC57C\uD55C\uB2E4. +FR-Action_Sort=\uC21C\uC11C +DataFunction-Average=\uD3C9\uADE0 +FR-Designer_Show_in_Containing_Folder=\uD574\uB2F9\uD3F4\uB354\uC5F4\uAE30 +M_File-Export-Excel=Excel\uC11C\uC2DD +DataFunction-Max=\uCD5C\uB300\uAC12 +FR-Designer_Form-Widget_Name=\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4\uC774\uB984 +FS_End_Date=\uC885\uB8CC\uB0A0\uC9DC +Export-Excel-Simple=\uC6D0\uB798\uBAA8\uC2B5\uB0B4\uBCF4\uB0B4\uAE30 +ColumnTo=\uC5F4\uC744~\uBC88\uC9F8\uB85C +SpecifiedG-Discard_all_others=\uAE30\uD0C0\uBAA8\uB4E0\uAC83\uD3EC\uAE30 +DS-TableData=\uB370\uC774\uD130\uC138\uD2B8 +Form-DataTable=\uB370\uC774\uD130\uD45C +Sub_Report_ToolTips=\uBB38\uC11C\uC548\uC758\uBB38\uC11C\uC54C\uB9BC +Right_Top=\uC624\uB978\uCABD\uC704 +M_Edit-Merge_Cell=\uC140\uBCD1\uD569 +FR-Designer_Restore_Default=\uAE30\uBCF8\uD68C\uBCF5 +Component_Interval=\uC5B4\uC148\uBE14\uB9AC\uAC04\uACA9 +Cover_None=\uBAA8\uB450\uB36E\uC5B4\uC50C\uC6B0\uC9C0\uC54A\uAE30 +Datasource-From_Database=\uB370\uC774\uD130\uBCA0\uC774\uC2A4\uD45C +Folder=\uB514\uB809\uD130\uB9AC +Form-Allow_Edit=\uC9C1\uC811\uD3B8\uC9D1\uD5C8\uC6A9 +M_Edit-Clear=\uD074\uB9AC\uC5B4(A) +ParentCell_Setting=\uBD80\uBAA8\uC140\uC124\uC815 +Only_selected_cell_can_paste_only=\uC140\uC744\uC120\uD0DD\uD574\uC57C\uBD99\uC5EC\uB123\uAE30\uB97C\uD560\uC218\uC788\uC2B5\uB2C8\uB2E4. +M_Report-Report_Columns=\uBB38\uC11C\uC140\uB098\uB204\uAE30 +Unit_Hundred=\uBC31 +FR-Designer_DataTable-Build= +Widget-Form_Widget_Config=\uD3FC\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4 +Server-version-tip-moreInfo=\uBC84\uC804\uBD88\uC77C\uCE58\uB85C\uC778\uD55C\uBB38\uC81C\uAC00\uBC1C\uC0DD\uD558\uC9C0\uC54A\uB3C4\uB85D\uC0AC\uC6A9\uD558\uACE0\uC788\uB294 FineReport\uC81C\uD488\uC758\uC124\uACC4\uAE30\uBC84\uC804\uBC0F\uC124\uCE58\uB41C\uC11C\uBC84\uBC84\uC804\uC774\uC77C\uCE58\uD558\uB294\uC9C0\uD655\uC778\uD574\uC8FC\uC2ED\uC2DC\uC624.\ N\uB354\uB192\uC740\uC124\uACC4\uAE30\uBC84\uC804\uC73C\uB85C\uC791\uC131\uB41C\uD15C\uD50C\uB9BF\uC744\uC5F4\uACBD\uC6B0\uC5F4\uAE30\uC624\uB958\uB85C\uC778\uD574\uAE30\uC874\uD15C\uD50C\uB9BF\uC18D\uC131\uC744\uC783\uC744\uC218\uC788\uC2B5\uB2C8\uB2E4. \uC791\uC131\uD55C\uD15C\uD50C\uB9BF\uC5D0\uC11C\uC0AC\uC6A9\uD558\uACE0\uC788\uB294\uC124\uACC4\uAE30\uBC84\uC804\uC774\uB2F9\uC2E0\uC758\uCD5C\uC885\uC124\uCE58\uC11C\uBC84\uBC84\uC804\uBCF4\uB2E4\uB192\uC744\uACBD\uC6B0\uC11C\uBC84\uB294\uB2F9\uC2E0\uC774\uC791\uC131\uD55C\uD15C\uD50C\uB9BF\uC744\uB85C\uB529\uD558\uC9C0\uBABB\uD560\uC218\uC788\uC2B5\uB2C8\uB2E4. +Actions=\uD0DC\uC2A4\uD06C +FR-Designer-Dependence_Connect_Server_Error=connect error +High=\uB192\uC774 +HJS-Send_Failed=\uBC1C\uC1A1\uC2E4\uD328 +HJS-Message=\uB0B4\uC6A9 +File-Allow_Upload_Files=\uC5C5\uB85C\uB4DC\uD5C8\uC6A9\uD30C\uC77C\uC720\uD615 +FR-Designer-Form-ToolBar_Chart=\uCC28\uD2B8 +Thick_Bottom_Border_Line=\uAD75\uC740\uBC11\uC904\uD14C\uB450\uB9AC\uC120 +FR-Action_Remove=\uC0AD\uC81C +FRFont-Style=\uD3F0\uD2B8 +Select_DataColumn=\uB370\uC774\uD130\uC5F4\uC120\uD0DD +StartValue=\uC2DC\uC791\uAC12 +SINGLE_FILE_UPLOAD=\uD55C\uAC1C\uD30C\uC77C\uC5C5\uB85C\uB4DC\uB9CC\uC9C0\uC6D0\uD569\uB2C8\uB2E4. +BackgroundTexture-Cork=\uCF54\uB974\uD06C\uB9C8\uAC1C +M_Format-Data_Map=\uB370\uC774\uD130\uC0AC\uC804 +FR-mobile_native_analysis=\uC6D0\uC0DD \uD574\uC11D +HighLight=\uD558\uC774\uADF8\uB85C\uC2DC +FR-Designer_Dropdown-More-Preview=\uC544\uB798\uB85C \uB4DC\uB798\uADF8\uD558\uBA74 \uB354 \uB9CE\uC740 \uBBF8\uB9AC\uBCF4\uAE30 \uBC29\uC2DD\uC774 \uB098\uC635\uB2C8\uB2E4. +local=\uB85C\uCEEC +FR-Designer_Gradation=\uB2E8\uACC4 +PageSetup-Finis_Start_Column=\uC911\uBCF5\uC885\uB8CC\uC5F4 +Env-Invalid_User_and_Password=\uC62C\uBC14\uB974\uC9C0\uC54A\uC740\uC0AC\uC6A9\uC790\uC774\uB984\uB610\uB294\uC554\uD638 +FR-Designer-Plugin_All_Plugins=\uBAA8\uB450\uD50C\uB7EC\uADF8\uC778 +FR-Designer_Prepare_Export=\uB0B4\uBCF4\uB0B4\uAE30\uB97C\uC2DC\uC791\uD558\uB2C8\uC7A0\uC2DC\uB9CC\uAE30\uB2E4\uB824\uC8FC\uC2ED\uC2DC\uC624. +DBCP_TEST_ON_RETURN=\uB9C1\uD06C\uADC0\uD658\uC804\uAC80\uC0AC\uC9C4\uD589 +no-alternatives=\uC120\uD0DD\uD55C\uD56D\uBAA9\uC774\uC5C6\uC2B5\uB2C8\uB2E4. +FR-Designer_Submmit_WClass=\uBC31\uADF8\uB77C\uC6B4\uB4DC\uD074\uB798\uC2A4\uC81C\uCD9C +M_Insert-Slope_Line=\uC0AC\uC120\uC0BD\uC785 +FR-Designer-Plugin_Plugin_Description=\uD50C\uB7EC\uADF8\uC778\uC124\uBA85 +ExpandD-Not_Expand=\uD655\uC7A5\uD558\uC9C0\uC54A\uC74C +Utils-Bottom_to_Top=\uC544\uB798\uC11C\uC704\uB85C +Collect-Click\!_Get_user_information_code=\!\uB97C\uD074\uB9AD\uD558\uC5EC\uD65C\uC131\uCF54\uB4DC\uB97C\uC5BB\uC2B5\uB2C8\uB2E4. +FR-Already_exist=\uD604\uC7AC\uD658\uACBD\uC774\uC774\uBBF8\uC874\uC7AC\uD569\uB2C8\uB2E4\: +Send=\uBC1C\uC1A1 +M_Edit-Clear_All=\uBAA8\uB450 (A) +Brown_Orange=\uC605\uC740\uAC08\uC0C9 +PageSetup-Portrait=\uC138\uB85C +FR-Designer_Form-RadioGroup=\uB2E8\uC77C\uC120\uD0DD\uD0A4\uD328\uB4DC +FR-Utils-App_AllFiles=\uBAA8\uB4E0\uD30C\uC77C +Popup=\uD31D\uC5C5 +Server_Charset=\uC11C\uBC84\uCF54\uB529 +CellWrite-Repeat_Content_When_Paging=\uD398\uC774\uC9C0\uB098\uB204\uAE30\uB85C\uB098\uB20C\uB54C\uAC12\uC911\uBCF5\uBCF4\uC774\uAE30 +Utils-No_Pagination=\uD398\uC774\uC9C0\uB098\uB204\uAE30\uB97C\uD558\uC9C0\uC54A\uC2B5\uB2C8\uB2E4. +Form-NullLayout=\uC808\uB300\uC801\uC704\uCE58 +ConditionB-Remove_bracket=\uAD04\uD638\uC0AD\uC81C +email=\uBA54\uC77C +Minute=\uBD84 +FR-Designer-Plugin_Update=\uD50C\uB7EC\uADF8\uC778\uC5C5\uB370\uC774\uD2B8 +alraedy_close=\uB2EB\uD614\uC2B5\uB2C8\uB2E4. +ComboCheckBox-End_Symbol=\uC885\uB8CC\uBD80\uD638 +DataColumn=\uB370\uC774\uD130\uC5F4 +Form-Password=\uC554\uD638 +FR-Background_Image_Adjust=\uC801\uC6A9 +Export-Excel-PageToSheet=\uD398\uC774\uC9C0\uC640 Sheet\uB098\uB204\uC5B4\uB0B4\uBCF4\uB0B4\uAE30 +Edit-Row_Count=\uD589\uC218 +DS-Report_TableData=\uD15C\uD50C\uB9BF\uB370\uC774\uD130\uC138\uD2B8 +Sche-Hour=\uC2DC +Group_Count=\uCD1D\uAC1C\uC218\uB97C\uB098\uD0C0\uB0B8\uB2E4. +EndValue=\uC885\uB8CC\uAC12 +FR-Designer_Sytle-Indentation=\uB4E4\uC5EC\uC4F0\uAE30 +DownBarBorderStyleAndColor=\uB4DC\uB86D\uCE7C\uB7FC\uC591\uC2DD +World=\uC6D4\uB4DC +FR-Designer-Basic_Cancel=\uCDE8\uC18C +Finally=\uB9C8\uC9C0\uB9C9 +Low=\uB0AE\uC74C +Please_Input_The_Key=\uD574\uB2F9\uB9F5\uC5D0\uC11C\uC0AC\uC6A9\uD558\uB294key\uB97C\uC785\uB825\uD574\uC8FC\uC2ED\uC2DC\uC624 +Smart=\uC2A4\uB9C8\uD2B8 +Preference-Predefined=\uC0AC\uC804\uC815\uC758\uB41C +Current_custom_global=\uD604\uC7AC\uBB38\uC11C\uC5D0\uC11C\uC0AC\uC6A9\uD558\uB294\uC0AC\uC6A9\uC790\uC815\uC758\uC758\uBAA8\uB4E0\uC591\uC2DD +FR-Designer-Plugin_Shop_Need_Install=\uB2F9\uC2E0\uC740 \uCD94\uAC00 \uAE30\uB2A5\uB418\uC9C0 \uC54A\uC740 \uC790\uC6D0\uC758 \uC800\uC7A5\uC18C\uB97C \uB2E4\uC6B4\uB85C\uB4DC \uD560 \uAC83\uC778\uC9C0? +WEB-Pagination_Setting=\uD398\uC774\uC9C0\uB098\uB204\uAE30\uBBF8\uB9AC\uBCF4\uAE30\uC124\uC815 +RCodeDrawPix=\uD654\uC18C +FR-Designer-Widget-Style_Alpha=\uBD88\uD22C\uBA85\uB3C4 +BorderLayout-North=\uBD81 +HJS-Current_Page=\uD604\uC7AC\uD398\uC774\uC9C0 +Compile=\uCEF4\uD30C\uC77C +Show_Blank_Row=\uACF5\uBC31\uD589\uBCF4\uCDA9 +TableData_Dynamic_Parameter_Setting=\uB3D9\uC801\uD30C\uB77C\uBBF8\uD130\uC8FC\uC785 +FR-Background_Image_Default=\uAE30\uBCF8 +BackgroundTexture-WhiteMarble=\uD770\uC0C9\uB300\uB9AC\uC11D +DataFunction-Sum=\uD569\uAD6C\uD558\uAE30 +Collect-The_user_information_code_is_invalid=\uB4F1\uB85D\uB418\uC5B4\uC788\uC9C0\uC54A\uC740\uD65C\uC131\uCF54\uB4DC\uC785\uB2C8\uB2E4.\uD648\uD398\uC774\uC9C0\uC5D0\uC11C\uC2E0\uCCAD\uD574\uC8FC\uC2ED\uC2DC\uC624. +Preference-Locale=\uAD6D\uC81C\uD654 +M_File-Export-PDF=PDF\uC11C\uC2DD +BiasD-From-lower_left_to_upper_right=\uC67C\uCABD\uD558\uB2E8\uC5D0\uC11C\uC624\uB978\uCABD\uC704\uB85C\uB098\uD0C0\uB0B4\uAE30 +Border-Style=\uD14C\uB450\uB9AC\uC591\uC2DD +Sort=\uC21C\uC11C +Image-Image_Layout=\uC774\uBBF8\uC9C0\uB808\uC774\uC544\uC6C3 +Panel=\uD328\uB110 +FR-Designer-Basic_Copy_Build_NO_OK=\uC0DD\uC131\uBC84\uC804\uBC88\uD638\uAC00\uD074\uB9BD\uBCF4\uB4DC\uC5D0\uBCF5\uC0AC\uB418\uC5C8\uC2B5\uB2C8\uB2E4. +All_Border_Line=\uBAA8\uB4E0\uD14C\uB450\uB9AC\uC120 +FR-Utils-Please_Input_a_New_Name=\uC0C8\uB85C\uC6B4\uC774\uB984\uC744\uC785\uB825\uD574\uC8FC\uC2ED\uC2DC\uC624. +FR-Base_Formula_Plugin=\uD50C\uB7EC\uADF8\uC778\uD568\uC218 +Two_Rows_Of_Three_Grid=2\uD589 3\uC5F4\uC758\uADF8\uB9AC\uB4DC +FR-Designer_Certificate_Pass=https\uBE44\uBC00\uD0A4 +Bubble-Series_Name=\uACC4\uC5F4\uBA85 +M-New_Multi_Report=\uC0C8\uCDE8\uD569\uBB38\uC11C (M) +BackgroundTexture-PinkTissuePaper=\uD551\uD06C\uC0AC\uD3EC +Preference-Support_Default_Parent_Calculate=\uAE30\uBCF8\uBD80\uBAA8\uC140\uACC4\uC0B0 +Show_Blank_Column=\uACF5\uBC31\uC5F4\uBCF4\uCDA9 +BaiduMap=\uBC14\uC774\uB450\uC9C0\uB3C4 +Report-Web_Attributes=\uD15C\uD50C\uB9BFWeb \uC18D\uC131 +FR-Designer_StyleAlignment-Wrap_Text=\uC790\uB3D9\uD589\uBC14\uAFB8\uAE30 +Need=\uD544\uC694 +Parameter-Double=\uB354\uBE14\uC815\uB3C4\uD0C0\uC785 +Config_Servlet=\uC6D0\uACA9\uC11C\uBC84\uAD6C\uC131 +Form-Comma=\uC27C\uD45C +Verify=\uAC80\uC0AC +PageSetup-Landscape=\uAC00\uB85C +Weeks=\uC694\uC77C +FR-Designer-Widget-Style_Title_Background=\uC81C\uBAA9\uBC30\uACBD +Preference-Pagination_Line_Color=\uD398\uC774\uC9C0\uB098\uB204\uAE30\uC120\uC0C9 +Test_URL=\uD14C\uC2A4\uD2B8\uB9C1\uD06C +Fill_blank_Data=\uACF5\uBC31\uB370\uC774\uD130\uBCF4\uCDA9 +ReportServerP-The_name_of_printer_cannot_be_null=\uD504\uB9B0\uD130\uC758\uC774\uB984\uC740\uBE48\uCE78\uC73C\uB85C\uB458\uC218\uC5C6\uC2B5\uB2C8\uB2E4. +FR-Designer-Basic_Copy_Activation_Key=\uC124\uACC4\uAE30\uC77C\uB828\uBC88\uD638\uB97C\uB354\uBE14\uD074\uB9AD\uD558\uBA74,\uD074\uB9BD\uBCF4\uB4DC\uC5D0\uBCF5\uC0AC\uB429\uB2C8\uB2E4. +Continuum=\uC774\uC6C3\uC5F0\uC18D +BackgroundTexture-MediumWood=\uC9D9\uC740\uB098\uBB34\uC7AC\uC9C8 +Datasource-Column_Index=\uC5F4\uBC88\uD638 +Function-Function_File=\uD568\uC218\uD30C\uC77C +Form-Component_Bounds=\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4\uACBD\uACC4\uC120 +Utils-Submit=\uC81C\uCD9C +Conditions_formula=\uC870\uAC74\uC218\uC2DD +M_Insert-Image=\uC774\uBBF8\uC9C0\uC0BD\uC785 +FR-Designer-Plugin_Will_Be_Delete=\uD50C\uB7EC\uADF8\uC778\uC774\uC0AD\uC81C\uB429\uB2C8\uB2E4.\uC124\uACC4\uAE30\uBC0F\uC11C\uBC84\uB97C\uC7AC\uBD80\uD305\uD558\uB824\uBA74\uC11C\uBC84\uB97C\uC218\uB3D9\uC7AC\uBD80\uD305\uD574\uC57C\uD569\uB2C8\uB2E4. +FormulaD-Functions=\uD568\uC218 +Mobile_Terminal=\uBAA8\uBC14\uC77C\uB2E8\uB9D0 +CheckBox=\uCCB4\uD06C\uBC15\uC2A4 +FR-Designer-Plugin_Install=\uC124\uCE58 +Sun=\uC77C +FR-Designer_ToolBar_Bottom=\uD558\uB2E8\uD234\uBC14 +Widget-Width=\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4\uB108\uBE44 +Series_Name=\uACC4\uC5F4\uBA85 +Set_Row_Title_Start=\uC911\uBCF5 \uD0C0\uC774\uD2C0 \uD589 \uC124\uC815 +HF-Default_Page=\uAE30\uBCF8\uD398\uC774\uC9C0 +Env_Des=\uB85C\uADF8\uC778\uD658\uACBD\uC911\uC758\uBB38\uC11C\uD504\uB85C\uC81D\uD2B8\uC5D0\uC11C\uAD8C\uD55C\uC0AC\uC6A9\uC744\uC2DC\uC791\uD588\uC744\uACBD\uC6B0\uC0AC\uC6A9\uC790\uC774\uB984\uACFC\uC554\uD638\uB294\uD574\uB2F9\uB85C\uADF8\uC778\uD658\uACBD\uC758\uC0AC\uC6A9\uC790\uC640\uC554\uD638\uB97C\uAE30\uC785\uD574\uC57C\uD569\uB2C8\uB2E4. +Widget-User_Defined=\uC0AC\uC804\uC815\uC758\uB41C +Url_location=\uC808\uB300\uACBD\uB85C +Disk_File=\uB514\uC2A4\uD06C\uD30C\uC77C +Inside=\uB0B4\uBD80 +FR-Designer_filedChosen= +ServerM-Predefined_Styles=\uC0AC\uC804\uC815\uC758\uB41C\uC591\uC2DD +is_need_word_adjust=\uBE44\uACE0\uC815\uD589\uB192\uC774\uB0B4\uBCF4\uB0B4\uAE30 +Background-Null=\uBC30\uACBD\uC5C6\uC74C +PageSetup-Vertically=\uC218\uC9C1\uAC00\uC6B4\uB370\uC815\uB82C +FR-Designer_Root=\uB8E8\uD2B8\uB178\uB4DC +FR-Designer_Form-TextArea=\uD14D\uC2A4\uD2B8\uC601\uC5ED +ReportServerP-Import_JavaScript=JavaScript\uC778\uC6A9 +Form-TableTree=\uC2DC\uD2B8\uD2B8\uB9AC +Opened=\uC5F4\uB824\uC788\uC2B5\uB2C8\uB2E4. +M_Edit-Delete=\uC0AD\uC81C(D) +Widget-Form_Widget_Container=\uD3FC\uCEE8\uD14C\uC774\uB108 +BindColumn-Summary=\uCDE8\uD569 +Sche-Second=\uCD08 +Server-Open_Service_Manager=\uC11C\uBE44\uC2A4\uAD00\uB9AC\uC790\uC5F4\uAE30 +FRFont-Effects=\uD2B9\uC218\uD6A8\uACFC +OtherGroup_Name=\uAE30\uD0C0\uADF8\uB8F9\uC774\uB984 +Specify=\uC9C0\uC815 +Highlight-Click_to_Choose_Property_To_Modify=\uBC14\uAFB8\uB824\uB294\uC18D\uC131\uC120\uD0DD\uD074\uB9AD +triggered=\uD2B8\uB9AC\uAC70\uB418\uC5C8\uC2B5\uB2C8\uB2E4. +Double_Bottom_BorderLine=\uC774\uC911\uBC14\uB2E5\uD14C\uB450\uB9AC\uC120 +M_Insert-Sub_Report=\uBB38\uC11C\uC548\uC758\uBB38\uC11C\uC0BD\uC785 +Unit_Ten=10 +Polybolck=\uCDE8\uD569\uBE14\uB7ED +Select_sort_order=\uC815\uB82C\uC21C\uC11C\uC120\uD0DD +HJS-Mail_to=\uC218\uC2E0\uC778 +StyleAlignment-Left=\uC67C\uCABD\uC5D0\uB9DE\uCDA4 +Two_Rows_Of_Two_Grid=2\uD589 2\uC5F4\uC758\uADF8\uB9AC\uB4DC +FR-Designer-Form-Please_Drag_ParaPane=\uB9E4\uAC1C\uBCC0\uC218\uD328\uB110\uC744\uB4DC\uB798\uADF8\uD574\uC8FC\uC2ED\uC2DC\uC624. +Milliseconds=\uBC00\uB9AC\uCD08 +DataFunction-None=\uC5C6\uC74C +Delivery=\uC804\uB2EC +ColumnSpan=\uC5F4\uC2A4\uD32C +StyleAlignment-Bottom=\uC544\uB798\uC5D0\uB9DE\uCDA4 +Read_failure=\uC77D\uAE30\uC2E4\uD328\uFF0C \uC18C\uC2A4\uD30C\uC77C\uC774\uC190\uC0C1\uB418\uC5C8\uC2B5\uB2C8\uB2E4. +Verify-Verify=\uB370\uC774\uD130\uAC80\uC0AC +FR-Designer-Widget-Style_Title_Format=\uC81C\uBAA9\uC11C\uC2DD +FR-Designer_Edit_String_To_Formula=\uBB38\uC790\uC5F4\uC744\uC218\uC2DD\uC73C\uB85C\uD3B8\uC9D1\uD558\uACA0\uC2B5\uB2C8\uAE4C? +FR-Base_UnSignIn=\uC544\uC9C1 \uB4F1\uB85D +Every=\uAC01 +CellWrite-Preview_Cell_Content=\uC140\uB0B4\uC6A9\uBBF8\uB9AC\uBCF4\uAE30 +FormulaD-Data_Fields=\uB370\uC774\uD130\uD56D\uBAA9 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 2740e54d2..db6c120c9 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -520,7 +520,6 @@ FR-Designer_Create_Tree=\u6784\u5EFA\u6811 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_Title=FineReport 8.0 - 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_FormulaPane_Variables=\u53D8\u91CF FR-Designer_FormulaPane_Formula_Description=\u516C\u5F0F\u8BF4\u660E @@ -529,13 +528,11 @@ FR-Designer_FormulaPane_Search=\u641C\u7D22 FR-Designer_Tab_carousel=tab\u8F6E\u64AD FR-Designer_setCarousel=\u5F00\u542F\u8F6E\u64AD 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 @@ -551,7 +548,6 @@ 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}" \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 @@ -588,10 +584,8 @@ FR-Designer_Background_Image_Select=\u9009\u62E9\u56FE\u7247 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_Click_Tips=\u9F20\u6807\u70B9\u51FB\u6309\u94AE\u65F6\u80CC\u666F\uFF0C\u82E5\u65E0\u5219\u4E0D\u6539\u53D8\u80CC\u666F - 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 - FR-Designer_AxisReversed=\u8F74\u9006\u5E8F FR-Designer_Logarithmic=\u5BF9\u6570\u523B\u5EA6 FR-Designer_Chart_Log_Base=\u5E95\u6570 @@ -602,3 +596,1390 @@ FR-Designer_Border=\u8FB9\u6846 FR-Designer_Background-Pattern=\u56FE\u6848 FR-Designer_Edit_Button_ToolBar=\u7F16\u8F91\u6309\u94AE\u6240\u5728\u5DE5\u5177\u680F FR-Designer_Remove_Button_ToolBar=\u79FB\u9664\u6309\u94AE\u6240\u5728\u5DE5\u5177\u680F +CellWrite-InsertRow_NULL=\u7A7A\u503C +DashBoard-ChartFloat=\u56FE\u8868 +contact_info=\u8054\u7CFB\u4FE1\u606F(\u9009\u586B) +Page_Setup=\u9875\u9762\u8BBE\u7F6E +CellWrite-Print_Export=\u6253\u5370\u5BFC\u51FA +Cannot_Get_Date=\u4E0D\u80FD\u83B7\u53D6\u65E5\u671F +FR-Designer_Modify=\u4FEE\u6539 +M-Write_Preview=\u586B\u62A5\u9884\u89C8 +FR-Base_RWA-Key=\u4E3B\u952E +China=\u4E2D\u56FD +Set_Legend_Sytle=\u8BBE\u7F6E\u56FE\u4F8B\u683C\u5F0F +FR-Designer_Number=\u6570\u5B57 +FR-Designer-Widget-Style_Common=\u666E\u901A +M-Save_As=\u53E6\u5B58\u4E3A +Following_parameters_are_not_generated=\u4EE5\u4E0B\u53C2\u6570\u672A\u751F\u6210 +FR-Designer-Basic_Activation_Key_Copy_OK=\u5DF2\u590D\u5236\u5230\u526A\u8D34\u677F +Utils-Current_Sheet=\u5F53\u524DSheet +ConditionB-is_less_than=\u5C0F\u4E8E +BorderLayout-West=\u897F +AnalysisLine=\u5206\u6790\u7EBF +Layer_Report_Warnning_info=\u884C\u5F0F\u5F15\u64CE\u9002\u7528\u4E8E\u5927\u6570\u636E\u91CF\u60C5\u5F62\u4E0B\u3002
\u4F7F\u7528\u6B64\u5F15\u64CE\u5F88\u591A\u62A5\u8868\u7279\u6027\u5C06\u4E0D\u518D\u652F\u6301\uFF0C
\u8BE6\u7EC6\u5185\u5BB9\u8BF7\u67E5\u770B\u6587\u6863\u76F8\u5173\u7AE0\u8282\u3002 +Tree-Width=\u5BBD\u5EA6 +alert_word=\u9009\u62E9\u4E0D\u56FA\u5B9A\u884C\u9AD8\u5BFC\u51FA\u65F6, \u7F16\u8F91\u5BFC\u51FA\u7684word, \u5355\u5143\u683C\u884C\u9AD8\u4F1A\u968F\u7740\u5185\u5BB9\u81EA\u52A8\u62C9\u4F38, \u6B64\u60C5\u51B5\u4E0B\u5BFC\u51FA\u7ED3\u679C\u5206\u9875\u4F4D\u7F6E\u4E0E\u9884\u89C8\u7ED3\u679C\u53EF\u80FD\u4F1A\u4E0D\u518D\u4E00\u81F4. +PageSetup-Paper_Size=\u7EB8\u5F20\u5927\u5C0F +M-Page_Setup=\u9875\u9762\u8BBE\u7F6E +DashBoard-FormBook=\u8868\u5355 +X-Coordinate=\u6A2A\u5750\u6807 +Style-Line_Spacing=\u884C\u95F4\u8DDD +FR-Designer_Plugin_Should_Update_Title=\u63D2\u4EF6\u5347\u7EA7\u63D0\u9192 +Server-Define_Data_Connection=\u5B9A\u4E49\u6570\u636E\u8FDE\u63A5 +BarInside=\u67F1\u5B50\u5185\u4FA7 +Border-Color=\u8FB9\u6846\u989C\u8272 +NotAllow=\u4E0D\u5408\u6CD5 +Utils-File_type=\u6587\u4EF6\u7C7B\u578B +FR-Designer-Plugin_Install_From_Local=\u4ECE\u672C\u5730\u6587\u4EF6\u5B89\u88C5 +Summary_Method=\u6C47\u603B\u65B9\u5F0F +Select_Specified_Grouping=\u9009\u62E9\u81EA\u5B9A\u4E49\u5206\u7EC4 +HF-Number_of_Page=\u603B\u9875\u6570 +FR-Designer-Tree_Height=\u9AD8\u5EA6 +Owner=\u4E3B +Home=\u4E3B\u9875 +FR-Server_Embedded_Server_Stop=\u5167\u7F6E\u7684\u670D\u52A1\u5668-\u505C\u6B62 +FR-Designer-Plugin_Detecting_Update=\u6B63\u5728\u68C0\u6D4B\u66F4\u65B0 +HF-Whether_to_define_the_selected_type=\u662F\u5426\u5B9A\u4E49\u9009\u4E2D\u7684\u7C7B\u578B +StyleAlignment-Right=\u9760\u53F3 +FR-Designer_Alignment-Style=\u5BF9\u9F50\u65B9\u5F0F +PageSetup-Title_Start_Column=\u91CD\u590D\u6807\u9898\u5217 +Tree-Mutiple_Selection_Or_Not=\u591A\u9009 +FR-Designer-Plugin_Search=\u641C\u7D22 +Choose_Role=\u6743\u9650\u63A7\u5236 +Append_Delete_Row_Message=\u6CE8\u610F\uFF01\u6307\u5B9A\u7684\u5355\u5143\u683C\u9700\u8981\u8BBE\u7F6E\u6269\u5C55\u5C5E\u6027 +Form-ComboBox=\u4E0B\u62C9\u6846 +PageSetup-Footer=\u9875\u811A +Sorting=\u6392\u5E8F\u4E2D +DBCP_TEST_WHILE_IDLE=\u5F00\u542F\u7A7A\u95F2\u56DE\u6536\u5668\u68C0\u9A8C +DS-Embedded_TableData=\u5185\u7F6E\u6570\u636E\u96C6 +FR-Designer_No-Privilege=\u6CA1\u6709\u6743\u9650 +FRFont-Subscript=\u4E0B\u6807 +Background_Settings=\u80CC\u666F\u8BBE\u7F6E +FormulaD-Invalid_Formula=\u975E\u6CD5\u7684\u516C\u5F0F +FR-Base_Margin=\u8FB9\u8DDD +FR-Designer-Plugin_Shop_Installed=\u63D2\u4EF6\u5546\u5E97\u5B89\u88C5\u5B8C\u6BD5,\u662F\u5426\u7ACB\u523B\u542F\u52A8? +M_Edit-Send_to_Back=\u7F6E\u4E8E\u5E95\u5C42(K) +Email-Can_Preview_Report_Content=\u6B63\u6587\u9884\u89C8\u62A5\u8868\u5185\u5BB9 +FR-Designer-FRFont_Italic=\u503E\u659C +CellWrite-Print_Background=\u6253\u5370/\u5BFC\u51FA\u5355\u5143\u683C\u80CC\u666F +Wizard=\u5411\u5BFC +Preference-Is_Drag_Permited=\u652F\u6301\u62D6\u62FD +FR-Designer_Release_Lock=\u89E3\u9501 +Form-Delimiter=\u5206\u9694\u7B26 +wrong=\u51FA\u9519\u4E86 +FR-Menu-Server_Chart_PreStyle=\u56FE\u8868\u9884\u5B9A\u4E49\u914D\u8272 +Form-Button=\u6309\u94AE +FormulaD-Valid_Formula=\u5408\u6CD5\u7684\u516C\u5F0F +ParameterD-Parameter_Interface=\u53C2\u6570\u754C\u9762 +At_least_one_visual_worksheet=\u5DE5\u4F5C\u7C3F\u4E2D\u81F3\u5C11\u8981\u6709\u4E00\u5F20\u53EF\u89C6\u5316\u5DE5\u4F5C\u8868,\u5982\u679C\u60F3\u8981\u5220\u9664\uFF0C\u8BF7\u5148\u63D2\u5165\u4E00\u5F20\u65B0\u5DE5\u4F5C\u8868 +Need_Min_Value=\u9700\u8981\u6700\u5C0F\u503C +Allow_Blank=\u5141\u8BB8\u4E3A\u7A7A +CellWrite-InsertRow_DEFAULT=\u9ED8\u8BA4\u503C +Widget-Load_By_Complete=\u5B8C\u5168\u52A0\u8F7D +FR-Designer-Basic_Only_Submit_Current_Sheet=\u53EA\u63D0\u4EA4\u5F53\u524Dsheet +Sort-Sort_Order=\u6392\u5217\u987A\u5E8F +File-File_Size_Limit=\u6587\u4EF6\u5927\u5C0F\u9650\u5236 +PrintP-Print=\u6253\u5370(T) +FR-Designer-StyleAlignment_Center=\u5C45\u4E2D +Preference-Setting_Colors=\u989C\u8272\u8BBE\u7F6E +Judge=\u5224\u65AD +Image-Adjust=\u9002\u5E94 +Collect-User_Information_DES=\u6FC0\u6D3B\u7801\u53EA\u662F\u7528\u6765\u6536\u96C6\u4F7F\u7528\u8005\u4FE1\u606F\u7684\uFF0C\u53EA\u8981\u70B9\u51FB\u4E0A\u9762\u7684"\u83B7\u53D6\u6FC0\u6D3B\u7801"\u6309\u94AE\uFF0C\u5C31\u4F1A\u5F39\u51FA\u4E00\u4E2A\u65B0\u7684\u6D4F\u89C8\u5668\u7A97\u4F53\uFF0C\u767B\u5F55\u5230\u4EA7\u54C1\u5B98\u65B9\u7F51\u7AD9\u83B7\u5F97\u8FD9\u4E2A\u6FC0\u6D3B\u7801\uFF0C\u6574\u4E2A\u8FC7\u7A0B\u53EA\u9700\u89813\u5206\u949F\uFF0C\u53EA\u9700\u8981\u64CD\u4F5C\u4E00\u6B21\uFF0C\u800C\u4E14\u5B8C\u5168\u514D\u8D39\u3002 +FR-Designer_Plugin_Normal_Update_From_Local=\u4ECE\u672C\u5730\u6587\u4EF6\u66F4\u65B0 +BackgroundTexture-Canvas=\u753B\u5E03 +BarOutSide=\u67F1\u5B50\u5916\u4FA7 +Preview_ToolTips=\u9884\u89C8\u63D0\u793A +FRFont-Family=\u540D\u5B57 +FR-Lic_does_not_Support_Remote=\u60A8\u5F53\u524D\u4F7F\u7528\u7684lic\u4E0D\u652F\u6301\u8FDC\u7A0B\u8BBE\u8BA1\u529F\u80FD\uFF0C\u8BF7\u5347\u7EA7\u60A8\u7684lic +InterfaceStyle=\u98CE\u683C +RWA-Key=\u4E3B\u952E +WF-Name=\u540D\u79F0 +RWA-Click_Cell_To_Edit_Value=\u5355\u51FB\u6A21\u677F\u5355\u5143\u683C\u4FEE\u6539\u503C +Utils-Row_Height=\u884C\u9AD8 +ReportD-Excel_Export=\u6A21\u677F\u5BFC\u51FA\u5C5E\u6027 +Form-Please_Select_A_Kind_Of_Form_Container=\u8BF7\u9009\u62E9\u4E00\u79CD\u8868\u5355\u5BB9\u5668 +Column_Does_Not_Exsit=\u5217\u4E0D\u5B58\u5728 +M_Insert-Hyperlink=\u8D85\u7EA7\u94FE\u63A5 +can_not_include_underline=\u4E0D\u80FD\u5305\u542B"_" +FR-Designer-Plugin_Jar_Expired=Jar\u5305\u8FC7\u65E7 +FR-Background_Image_Extend=\u62C9\u4F38 +TopDownShade=\u4E0A\u4E0B\u6E10\u53D8 +FR-Base_Right=\u53F3 +DataBinding=\u6570\u636E\u7ED1\u5B9A +ConnectionPool_Attr=\u8FDE\u63A5\u6C60\u5C5E\u6027 +Connect_SQL_Cannot_Null=\u6570\u636E\u8FDE\u63A5\u548CSQL\u9762\u677F\u4E0D\u80FD\u4E3A\u7A7A +DBCP_MAX_ACTIVE=\u6700\u5927\u6D3B\u52A8\u8FDE\u63A5\u6570 +M_Window-Preference=\u9009\u9879 +ToolBar_Top=\u9876\u90E8\u5DE5\u5177\u680F +FR-Designer_Indent-Pixel=\u50CF\u7D20 +FR-Designer_Unit_MM=\u6BEB\u7C73 +IDLE=\u7A7A\u95F2 +FRFont-Underline=\u4E0B\u5212\u7EBF +FR-Designer-Plugin_Read_Plugin_List_Error=\u53BB\u8BFB\u63D2\u4EF6\u5217\u8868\u65F6\u53D1\u751F\u9519\u8BEF +Type_Set=\u7C7B\u578B\u8BBE\u7F6E +M_Format_A-Cell_Attributes=\u5176\u4ED6\u5C5E\u6027 +CellWrite-Show_As_Image=\u7528\u56FE\u7247\u663E\u793A\u5185\u5BB9 +ShowAsDownload=\u7528\u4E0B\u8F7D\u94FE\u63A5\u663E\u793A\u4E8C\u8FDB\u5236\u5185\u5BB9 +Form-ComboCheckBox=\u4E0B\u62C9\u590D\u9009\u6846 +BackgroundTexture-WovenMat=\u7F16\u7EC7\u7269 +BindColumn-Custom_Data_Appearance=\u81EA\u5B9A\u4E49\u663E\u793A +Actived=\u6D3B\u52A8\u7684 +Env-Local_Directory=\u672C\u5730\u76EE\u5F55 +Form-Colon=\u5192\u53F7 +Preference-Vertical_Scroll_Bar_Visible=\u7AD6\u76F4\u6EDA\u52A8\u6761\u53EF\u89C1 +Utils-Show_Cell_Value=\u663E\u793A\u5355\u5143\u683C\u503C +FR-Designer_ReportColumns-Repeat_Row=\u590D\u5236\u884C\u5E8F\u5217 +SpecifiedG-Specified_Group=\u81EA\u5B9A\u4E49\u5206\u7EC4 +RWA-Smart_Add_Cells=\u667A\u80FD\u6DFB\u52A0\u5355\u5143\u683C +HF-Left_Section=\u5DE6\u533A\u57DF +M_Report-Report_Background=\u7EB8\u5F20\u80CC\u666F +Image-Extend=\u62C9\u4F38 +FS_BI=\u51B3\u7B56\u5E73\u53F0 +ToolBar_Bottom=\u5E95\u90E8\u5DE5\u5177\u680F +Hgap=\u6C34\u5E73\u95F4\u9699 +FR-Designer_Enter-New-FileName=\u8BF7\u8F93\u5165\u65B0\u7684\u6587\u4EF6\u540D +Verify_Fail=\u6821\u9A8C\u5931\u8D25 +CellWrite-InsertRow_Policy=\u63D2\u5165\u884C\u7B56\u7565 +FR-Designer-Plugin_Illegal_Plugin_Zip=\u4E0D\u662F\u5408\u6CD5\u7684\u63D2\u4EF6\u5305 +RCodeVersion=\u7248\u672C +Convert=\u8F6C\u6362 +Please_Drag=\u8BF7\u62D6\u5165\u884C\u5217\u5B57\u6BB5\u3001\u6C47\u603B\u5B57\u6BB5 +FR-Designer-Widget-Style_Preview=\u9884\u89C8 +mobile_number=\u624B\u673A\u53F7\u7801 +FR-Designer_Form-ComboCheckBox=\u4E0B\u62C9\u590D\u9009\u6846 +CacheValidateTime=\u62A5\u8868\u7F13\u5B58\u6709\u6548\u65F6\u95F4 +Hyperlink-Extends_Report_Parameters=\u7EE7\u627F\u62A5\u8868\u7684\u53C2\u6570 +FR-Designer_Values-Editor=\u503C\u7F16\u8F91\u5668 +Export-Excel=Excel\u683C\u5F0F +Utils-Left_to_Right=\u6A2A\u5411 +ExpandD-Vertical_Extendable=\u7EB5\u5411\u53EF\u4F38\u5C55 +Utils-Report_Runtime_Env=\u62A5\u8868\u5DE5\u4F5C\u76EE\u5F55 +Utils-Right_to_Left=\u4ECE\u53F3\u5230\u5DE6 +Utils-Beyond_the_top_side_of_Border=\u8D85\u51FA\u4E0A\u8FB9\u754C +Exception_StackTrace=\u9519\u8BEF\u5F02\u5E38\u5806\u6808\u4FE1\u606F +Corresponding_Fields=\u5BF9\u5E94\u5B57\u6BB5 +Form-CheckBox=\u590D\u9009\u6846 +Utils-Current_Row=\u5F53\u524D\u884C +BuildIn=\u5185\u7F6E +BindColumn-Results_Filter=\u7ED3\u679C\u96C6\u7B5B\u9009 +FR-Designer-Plugin_Manager=\u63D2\u4EF6\u7BA1\u7406 +M_File-Export-CSV=CSV\u683C\u5F0F(\u9017\u53F7\u5206\u9694) +Data_Filter=\u6570\u636E\u7B5B\u9009 +ReportServerP-Edit_Printer=\u7F16\u8F91\u6253\u5370\u673A +FR-Designer_Datasource-Stored_Procedure=\u5B58\u50A8\u8FC7\u7A0B +RESTART=\u91CD\u542F +FormulaD-Function_name=\u51FD\u6570\u540D +ChooseOneButton=\u8BF7\u9009\u62E9\u4E00\u4E2A\u63A7\u4EF6\u540E\u518D\u6DFB\u52A0 +Priority=\u4F18\u5148\u7EA7 +Datasource-Datasource=\u6570\u636E\u6E90 +FR-Designer_Width=\u5BBD +Cannot-Add_To_This_Area=\u65E0\u6CD5\u6DFB\u52A0\u5230\u8BE5\u533A\u57DF +Run=\u8FD0\u884C +Set_Submit_Condition=\u8BBE\u7F6E\u63D0\u4EA4\u6761\u4EF6 +FR-Base_Value=\u503C +fileLocked_undeleted=\u6A21\u677F\u88AB\u9501\u5B9A\uFF0C\u4E0D\u80FD\u5220\u9664\uFF01\u70B9\u51FB\u786E\u5B9A\uFF0C\u5237\u65B0\u6A21\u677F\u5217\u8868 +Web_Apply=WEB\u5E94\u7528 +Refresh_Database=\u5237\u65B0\u6570\u636E\u5E93 +Set_Row_Title_End=\u8BBE\u7F6E\u91CD\u590D\u7ED3\u5C3E\u884C +FR-Utils-New_Folder=\u65B0\u5EFA\u6587\u4EF6\u5939 +BiasD-From-upper_left_to_lower_right=\u4ECE\u5DE6\u4E0A\u5230\u53F3\u4E0B\u53D1\u6563 +CapsLock=\u5927\u5199\u9501\u5B9A\u5DF2\u6253\u5F00 +StyleFormat-Sample=\u793A\u4F8B +RWA-Smart_Add_Cell_Group=\u667A\u80FD\u6DFB\u52A0\u5355\u5143\u683C\u7EC4 +MConfig-CancelButton=\u53D6\u6D88 +Function-Choose_Function_Class=\u9009\u62E9\u51FD\u6570\u7C7B +LatLng=\u7ECF\u7EAC\u5EA6 +DS-Server_TableData=\u670D\u52A1\u5668\u6570\u636E\u96C6 +BackgroundTexture-GreenMarble=\u7EFF\u8272\u5927\u7406\u77F3 +read_time_out=\u52A0\u8F7D\u8D85\u65F6 +JavaScript-Commit_to_Database=\u63D0\u4EA4\u5165\u5E93 +DS-Relation_TableData=\u5173\u8054\u6570\u636E\u96C6 +CellWrite-Page_Before_Row=\u884C\u524D\u5206\u9875 +FR-Designer-Plugin_Load_Plugins_From_Server=\u6B63\u5728\u4ECE\u63D2\u4EF6\u5546\u5E97\u83B7\u53D6\u6570\u636E +D-Dispaly_Divide_Result_Set_into_Groups=\u5C06\u7ED3\u679C\u96C6\u8FDB\u884C\u5206\u7EC4 +Closed=\u5DF2\u5173\u95ED +RWA-Help=\u8BBE\u7F6E\u672A\u4FEE\u6539\u4E0D\u66F4\u65B0\u540E\uFF0C\u586B\u62A5\u9884\u89C8\u62A5\u8868\uFF0C\u8BB0\u5F55\u6240\u5728\u5355\u5143\u683C\u6CA1\u6709\u88AB\u7F16\u8F91\u4FEE\u6539\uFF0C\u5219\u6B64\u8BB0\u5F55\u4E0D\u4F1A\u8FDB\u884C\u66F4\u65B0\uFF1B\n\u5728\u5927\u6570\u636E\u91CF\u8BB0\u5F55\u67E5\u8BE2\u5E76\u56DE\u586B\u60C5\u51B5\u4E0B\uFF0C\u542F\u7528\u8BE5\u8BBE\u7F6E\uFF0C\u53EF\u4EE5\u63D0\u9AD8\u586B\u62A5\u63D0\u4EA4\u6027\u80FD\u3002 +FR-Designer-Widget-Style_Custom=\u81EA\u5B9A\u4E49 +FR-Designer-Widget-Style_Render_Style=\u6E32\u67D3\u98CE\u683C +Highlight-Barcode=\u6761\u5F62\u7801 +FR-Designer_Connect_SQL_Cannot_Null=\u6570\u636E\u8FDE\u63A5\u548CSQL\u9762\u677F\u4E0D\u80FD\u4E3A\u7A7A +trigger=\u89E6\u53D1 +M-Data_Analysis=\u6570\u636E\u5206\u6790 +Function-The_selected_file_cannot_be_null=\u6587\u4EF6\u4E0D\u80FD\u4E3A\u7A7A +No-Privilege=\u6CA1\u6709\u6743\u9650 +ReportColumns-Repeat_Column=\u590D\u5236\u5217\u5E8F\u5217 +SecondGraduationUnit=\u6B21\u8981\u523B\u5EA6\u5355\u4F4D +Form-Widget_Property_Value=\u5C5E\u6027\u503C +GIVE-NAME=\u547D\u540D +FR-Designer_Rename=\u91CD\u547D\u540D +Utils-Merge_Cell=\u5408\u5E76\u5355\u5143\u683C +Style-Spacing_After=\u6BB5\u540E +Enlarge_Or_Reduce=\u7F29\u653E +Tree-Height=\u9AD8\u5EA6 +RCodeErrorCorrect=\u7EA0\u9519 +Enter-New-FileName=\u8BF7\u8F93\u5165\u65B0\u7684\u6587\u4EF6\u540D +try_resending=\u8BF7\u5C1D\u8BD5\u91CD\u65B0\u53D1\u9001 +M-Open_Report=\u6253\u5F00... +Please_Select=\u8BF7\u9009\u62E9 +InRow=\u884C(R) +Form-TextArea=\u6587\u672C\u57DF +FR-Designer_Https_Enable=\u542F\u7528https +Widget-Custom_Widget_Config=\u81EA\u5B9A\u4E49\u63A7\u4EF6 +already_exists=\u5DF2\u7ECF\u5B58\u5728 +Original_Marked_Filed=\u539F\u59CB\u6807\u8BB0\u5B57\u6BB5 +BackgroundTexture-Sand=\u6C99\u6EE9 +Values=\u503C +Not_use_a_cell_attribute_table_editing=\u60A8\u4E0D\u53EF\u4EE5\u7528\u5355\u5143\u683C\u5C5E\u6027\u8868\u7F16\u8F91 +Root=\u6839\u8282\u70B9 +cycle=\u5468\u671F +open-new-form-tip=\u5F53\u524D\u6A21\u677F\u4E3A711\u4EE5\u4E0B\u7248\u672C\u5236\u4F5C\uFF0C\u65E0\u6CD5\u517C\u5BB9\uFF0C\u4E0D\u80FD\u6253\u5F00\u3002\u5047\u5982\u60F3\u6253\u5F00\u4FEE\u6539\u6B64\u8868\u5355\uFF0C\u8BF7\u4F7F\u7528\u5BF9\u5E94\u7248\u672C\u8BBE\u8BA1\u5668\u6253\u5F00\u3002 +Support-Current_Auto_Complete_Shortcut=\u5F53\u524D\u5FEB\u6377\u952E +GROUPING_MODE=\u666E\u901A\u5206\u7EC4 +DBCP_MAX_IDLE=\u6700\u5927\u7A7A\u95F2\u8FDE\u63A5\u6570 +BackgroundTexture-BlueTissuePaper=\u84DD\u8272\u7802\u7EB8 +ReportD-Export_Hided_Row=\u5BFC\u51FA\u9690\u85CF\u884C +FR-Custom_styles_lost=\u81EA\u5B9A\u4E49\u6837\u5F0F\u5DF2\u4E22\u5931 +Env-Des2=Servlet\u4F4D\u7F6E\u662F\u4E3B\u673A\u540D\uFF0C\u7AEF\u53E3\uFF0CWEB\u5E94\u7528\uFF0CServlet\u7684\u7EC4\u5408\uFF0C\u5B83\u5E94\u5F53\u6307\u5411\u4E00\u4E2AServlet\uFF0C\u6BD4\u5982"http\://localhost\:8080/WebReport/ReportServer"\u3002\u60A8\u53EF\u4EE5\u9009\u62E9\u586B\u5199\u4E3B\u673A\u540D\uFF0C\u7AEF\u53E3\uFF0CWEB\u5E94\u7528\uFF0CServlet\uFF0C\u5B83\u4F1A\u81EA\u52A8\u751F\u6210\u60A8\u6240\u9700\u8981\u7684Servlet\u4F4D\u7F6E\u3002 +Env-Des1=\u8BF7\u9009\u62E9\u62A5\u8868\u670D\u52A1\u5668\u6240\u5728\u7684WEB-INF\u76EE\u5F55 +PageSetup-Placement_Center_on_Page=\u5C45\u4E2D\u65B9\u5F0F +sure_to_delete=\u786E\u8BA4\u5220\u9664 +Already_exists_not_add_repeat=\u5DF2\u7ECF\u5B58\u5728\uFF0C\u8BF7\u4E0D\u8981\u91CD\u590D\u6DFB\u52A0 +Axis_Title=\u8F74\u6807\u9898 +FR-Designer-Plugin_Install_Failed=\u63D2\u4EF6\u5B89\u88C5\u5931\u8D25 +FR-Designer-Widget-Style_Frame=\u6846\u67B6 +MainGraduationUnit=\u4E3B\u8981\u523B\u5EA6\u5355\u4F4D +Second_Axis=\u6B21\u5750\u6807\u8F74 +Classifier-Ge=\u4E2A +MSBold=\u5FAE\u8F6F\u96C5\u9ED1 +Form-Design_Size=\u8BBE\u8BA1\u5C3A\u5BF8 +FR-App-Template_Save=\u4FDD\u5B58 +ExpandD-Horizontal_Extendable=\u6A2A\u5411\u53EF\u4F38\u5C55 +RP_Authority_Edit=\u6743\u9650\u7F16\u8F91 +Warnning=\u63D0\u9192 +RoleName_Can_Not_Be_Null=\u89D2\u8272\u540D\u4E0D\u5141\u8BB8\u4E3A\u7A7A\u4E14\u4E0D\u80FD\u91CD\u590D +Application=\u5E94\u7528\u7A0B\u5E8F +Formula_Dictionary_Display_Examples_Html=\u5B9E\u9645\u503C\u8303\u56F4\u4E3A \ +ECP-error_pwd=\u5BC6\u7801\u9519\u8BEF +FR-Hyperlink_ChartHyperlink=\u56FE\u8868\u8D85\u94FE +M_Edit-FormatBrush=\u683C\u5F0F\u5237(B) +Indent-Pixel=\u50CF\u7D20 +FR-Designer-Widget-Style_Border_Line=\u8FB9\u6846\u7C97\u7EC6 +Widget-Default_Widget_Config=\u57FA\u672C\u63A7\u4EF6 +Version-does-not-support=\u60A8\u5F53\u524D\u4F7F\u7528\u7684lic\u4E0D\u652F\u6301\u8FDC\u7A0B\u8BBE\u8BA1\u529F\u80FD\uFF0C\u8BF7\u5347\u7EA7\u60A8\u7684lic +StyleAlignment-Right_To_Left=\u4ECE\u53F3\u5411\u5DE6 +Style-Spacing_Before=\u6BB5\u524D +Has_Existed=\u5DF2\u7ECF\u5B58\u5728 +FR-Designer_DisplayNothingBeforeQuery=\u70B9\u51FB\u67E5\u8BE2\u524D\u4E0D\u663E\u793A\u62A5\u8868\u5185\u5BB9 +Still=\u4ECD\u7136 +JS_WARNING2=\ \u4F8B\uFF1Ahttp\://localhost\:8075/WebReport/demo.js +JS_WARNING1=\ \u76F8\u5BF9\u62A5\u8868\u5DE5\u7A0B\u76EE\u5F55\u5982WebReport,\u5982WebReport\\js\u4E0B\u6709\u5F15\u7528\u7684js\u6587\u4EF6test.js\uFF0C\u5219\u76F8\u5BF9\u8DEF\u5F84\u4E3Ajs/test.js +Connectionline=\u8FDE\u7EBF\u6A21\u5F0F +Utils-Insert_Record=\u63D2\u5165\u8BB0\u5F55 +Set-Parameter-Name=\u8BF7\u5148\u8BBE\u7F6E\u53C2\u6570\u540D +More-information=\u66F4\u591A\u4FE1\u606F +Parameter-Boolean=\u5E03\u5C14\u578B +FRFont-Strikethrough=\u5220\u9664\u7EBF +Server-version-tip=\u60A8\u5F53\u524D\u8FDE\u63A5\u7684\u670D\u52A1\u5668\u7248\u672C\u4F4E\u4E8E\u60A8\u4F7F\u7528\u7684\u8BBE\u8BA1\u5668\u7248\u672C\u53F7\uFF0C\u7EE7\u7EED\u8FDE\u63A5\uFF0C\u60A8\u7F16\u8F91\u7684\u4E00\u4E9B\u5C5E\u6027\u53EF\u80FD\u65E0\u6CD5\u6709\u6548\u4FDD\u5B58\u3002 \u5047\u5982\u9700\u8981\u8FDE\u63A5\u8BF7\u5C06\u60A8\u7684\u8BBE\u8BA1\u5668\u7248\u672C\u4E0E\u670D\u52A1\u5668\u7248\u672C\u4FDD\u6301\u4E00\u81F4 +Form-All_Files=\u5168\u90E8\u6587\u4EF6 +DBCP_NUM_TEST_PER_EVCTION_RUN=\u7A7A\u95F2\u8FDE\u63A5\u56DE\u6536\u68C0\u67E5\u6570 +FR-Designer-FRFont_Family=\u540D\u5B57 +Device=\u8BBE\u5907 +M_Insert-Cell=\u5355\u5143\u683C\u5143\u7D20 +Present-Formula_Present=\u516C\u5F0F\u5F62\u6001 +FRFont-Superscript=\u4E0A\u6807 +CellWrite-Page_Before_Column=\u5217\u524D\u5206\u9875 +Golden=\u91D1\u8272 +Preference-Support_Cell_Editor_Definition=\u652F\u6301\u5355\u5143\u683C\u7F16\u8F91\u5668 +M-Page_Preview=\u5206\u9875\u9884\u89C8 +HJS-CC_to=\u6284\u9001 +Tree-Select_Leaf_Only=\u53EA\u8FD4\u56DE\u53F6\u5B50\u8282\u70B9 +Pointer-A-Tick-Order=\u6307\u9488\u503C\u53CA\u523B\u5EA6\u503C\u6570\u91CF\u7EA7 +Pink=\u7C89\u7EA2 +StyleAlignment-Distibuted=\u5206\u6563\u5BF9\u9F50 +Odd=\u5947\u6570 +already-saved=\u5DF2\u7ECF\u4FDD\u5B58 +FR-Hyperlink_Chart_Cell=\u56FE\u8868\u8D85\u94FE-\u8054\u52A8\u5355\u5143\u683C +Style-Left_Indent=\u5DE6\u7F29\u8FDB +Offline=\u79BB\u7EBF +Form-Hierarchy_Tree_Next=\u4E0B\u4E00\u4E2A +Needle=\u6307\u9488 +GoogleMap=\u8C37\u6B4C\u5730\u56FE +Running=\u8FD0\u884C\u4E2D +M_Edit-Unmerge_Cell=\u53D6\u6D88\u5408\u5E76\u5355\u5143\u683C +Out_Border_Line=\u5916\u4FA7\u6846\u7EBF +Style-Spacing=\u95F4\u8DDD +FR-Utils_Submit=\u63D0\u4EA4 +ReportServerP-Previous=\u4E0A\u4E00\u9875 +StyleAlignment-Text_Style=\u6587\u672C\u63A7\u5236 +RelatedChart=\u56FE\u8868\u8054\u52A8 +ProcessManager=\u6D41\u7A0B\u7BA1\u7406 +Cancel_Repeat_Attributes=\u53D6\u6D88\u91CD\u590D\u884C\u5217 +FR-App-File_Message=\u4FE1\u606F +Datasource-Stored_Procedure=\u5B58\u50A8\u8FC7\u7A0B +RWA-Row_Offset=\u884C\u504F\u79FB +M_Format-Style=\u6837\u5F0F +detail_description=\u8BE6\u7EC6\u63CF\u8FF0 +FR-Designer-Widget-Style_Title_Content=\u6807\u9898\u5185\u5BB9 +ParameterD-Report_Parameter=\u62A5\u8868\u53C2\u6570 +HF-Edit_Header=\u7F16\u8F91\u9875\u7709 +Sytle-FRFont=\u5B57\u4F53 +FR-Designer_Finish_Export=\u5BFC\u51FA\u5B8C\u6BD5 +MultiFileUpload=\u591A\u6587\u4EF6\u4E0A\u4F20 +HF-Page_Number=\u9875\u7801 +Style-Right_Indent=\u53F3\u7F29\u8FDB +Desktop=\u684C\u9762 +FR-Server-All_Error=\u9519\u8BEF +ConditionB-Operator=\u64CD\u4F5C\u7B26 +Today=\u4ECA\u5929 +Form-Widget_Name=\u63A7\u4EF6\u540D +Covered_All=\u5168\u90E8\u8986\u76D6 +Day=\u5929 +External=\u5916\u90E8 +Black_Font=\u9ED1\u4F53 +LOG-Report_Server_IS_Started=\u62A5\u8868\u670D\u52A1\u5668\u5DF2\u542F\u52A8 +Tips\:You_Can_Input_B1_To_Input_The_Data_Of_The_First_Row_Second_Column=\u63D0\u793A\:\u60A8\u53EF\u4EE5\u901A\u8FC7\u8F93\u5165B1\u6765\u5199\u5165\u7B2C\u4E00\u884C\u7B2C\u4E8C\u5217\u7684\u6570\u636E\u3002 +FR-Designer_ChooseOneButton=\u8BF7\u9009\u62E9\u4E00\u4E2A\u63A7\u4EF6\u540E\u518D\u6DFB\u52A0 +Widget-Sizing=\u5927\u5C0F\u8C03\u6574 +NO_Border_Line=\u65E0\u6846\u7EBF +Cell_Data=\u5355\u5143\u683C\u6570\u636E +StyleAlignment-Vertical_Text=\u6587\u5B57\u7AD6\u6392 +Label=\u6807\u7B7E +Orange=\u6A58\u9EC4 +zeroMarginWarn=\u7531\u4E8E\u6253\u5370\u673A\u5B58\u5728\u7269\u7406\u8FB9\u8DDD
\u62A5\u8868\u7684\u9875\u8FB9\u8DDD\u8BBE\u7F6E\u8FC7\u5C0F\u53EF
\u80FD\u4F1A\u51FA\u73B0\u5185\u5BB9\u6253\u5370\u4E0D\u5168.
  +Widget-Date_Selector_Return_Type=\u8FD4\u56DE\u503C\u7C7B\u578B +Utils-Switch_To_Template_Reportlet=\u5207\u6362\u5230\u6A21\u677F\u7F51\u7EDC\u62A5\u8868 +satisfy=\u6EE1\u8DB3\u6761\u4EF6 +FR-Designer_WidgetDisplyPosition=\u63A7\u4EF6\u663E\u793A\u4F4D\u7F6E +FR-Base_Top=\u4E0A +FR-Designer_Form-CheckBox=\u590D\u9009\u6846 +Reportlet-Parameter_Type=\u53C2\u6570\u4F20\u9012\u65B9\u5F0F +sending=\u6B63\u5728\u53D1\u9001... +FR-Designer-FRFont_Foreground=\u989C\u8272 +FR-Import-Export_SVG=SVG\u683C\u5F0F +M_Edit-Clear_Contents=\u5185\u5BB9(C) +Session=\u4F1A\u8BDD +Widget-Load_Type=\u52A0\u8F7D +template_unsaved=\u65E0\u6CD5\u4FDD\u5B58\u6A21\u677F +check_communication=\u8BF7\u68C0\u67E5\u7F51\u7EDC\u901A\u8BAF\u662F\u5426\u6B63\u5E38\u53CA\u670D\u52A1\u5668\u662F\u5426\u6B63\u5E38\u8FD0\u884C +List-Need_Head=\u9700\u8981\u5217\u8868\u5934 +FR-Designer-Plugin_Has_Been_Installed=\u63D2\u4EF6\u5DF2\u5B89\u88C5\uFF0C\u82E5\u60F3\u66F4\u65B0\u63D2\u4EF6\uFF0C\u8BF7\u5207\u6362\u81F3\u63D2\u4EF6\u66F4\u65B0 +FR-Widget_Tree_And_Table=\u63A7\u4EF6\u6811\u548C\u63A7\u4EF6\u8868 +FR-Base_Help=\u5E2E\u52A9 +FR-Designer-Plugin_Update_Successful=\u63D2\u4EF6\u5347\u7EA7\u6210\u529F\uFF0C\u91CD\u542F\u670D\u52A1\u5668\u4EE5\u751F\u6548 +August=\u516B\u6708 +LOG-Is_Being_Openned=\u6B63\u5728\u6253\u5F00 +BackgroundTexture-Oak=\u6A61\u6728 +Multi_nam_formula=\ \u6570\u636E\u96C6\u540D\: \u6570\u636E\u96C6\u6761\u4EF6\: +TurnOn=\u5F00\u542F +HJS-Send_Successfully=\u53D1\u9001\u6210\u529F +Mon=\u4E00 +Inner_Parameter=\u5185\u7F6E\u53C2\u6570 +Required=\u5FC5\u586B +Summary=\u6C47\u603B +template_unopened=\u65E0\u6CD5\u6253\u5F00\u6A21\u677F +FR-Base_Bottom=\u4E0B +DataFunction-Min=\u6700\u5C0F\u503C +StyleFormat-Percent=\u767E\u5206\u6BD4 +FR-App-All_Custom=\u81EA\u5B9A\u4E49 +M_Insert-Data_Column=\u63D2\u5165\u6570\u636E\u5217 +PLEASE=\u8BF7 +Numbers=\u6570\u76EE +Release_Lock=\u89E3\u9501 +Background-Background_is_NULL=\u6CA1\u6709\u80CC\u666F +FR-Designer_Sytle-FRFont=\u5B57\u4F53 +Gradation=\u5C42\u6B21 +The_current_list_is_empty=\u5F53\u524D\u5217\u8868\u4E3A\u7A7A +Formula_Dictionary_Display_Examples=\ \u5B9E\u9645\u503C\u8303\u56F4\u4E3A \ +Schedule-Template_Parameter=\u6A21\u677F\u53C2\u6570 +JSShow=\u52A8\u6001\u5C55\u793A +Level_coordinates=\u5C42\u6B21\u5750\u6807 +MainGraduationLine=\u4E3B\u8981\u523B\u5EA6\u7EBF +Hyperlink-Web_link=\u7F51\u9875\u94FE\u63A5 +StyleAlignment-between_-90_and_90=\u5728-90\u548C90\u4E4B\u95F4 +FormulaD-Custom_Function=\u81EA\u5B9A\u4E49\u51FD\u6570 +FR-Designer_Integer=\u6574\u6570 +PageSetup-Finis_Start_Row=\u91CD\u590D\u7ED3\u5C3E\u884C +RWA-Remove_Field=\u79FB\u9664\u5B57\u6BB5 +Form-Desin_Width=\u8BBE\u8BA1\u5BBD\u5EA6 +No-tableData=\u6CA1\u6709\u8FD4\u56DE\u6570\u636E\u96C6 +Page_Total=\u5171 +FR-Designer-Plugin_Connect_Server_Error=\u65E0\u6CD5\u8FDE\u63A5\u63D2\u4EF6\u5546\u5E97\uFF0C\u8BF7\u7A0D\u5019\u518D\u8BD5 +Import-Excel_Source=Excel\u6E90\u6587\u4EF6 +Utils-Left_to_Right_a=\u4ECE\u5DE6\u5F80\u53F3 +ExpandD-Expand_Attribute=\u6269\u5C55\u5C5E\u6027 +Report-Write_Attributes=\u62A5\u8868\u586B\u62A5\u5C5E\u6027 +Utils-Current_Column=\u5F53\u524D\u5217 +Need_Max_Value=\u9700\u8981\u6700\u5927\u503C +Report_Not_Exist=\u6240\u9009\u62A5\u8868\u4E0D\u5B58\u5728\uFF01 +HF-Insert_Content=\u63D2\u5165\u5185\u5BB9 +UpParent=\u4E0A\u7236\u683C +PageSetup-Page=\u9875\u9762 +Utils-Move_Up=\u4E0A\u79FB +BackgroundTexture-PurpleMesh=\u7D2B\u8272\u7F51\u683C +Export-Word=Word\u683C\u5F0F +ServerM-Widget_Manager=\u63A7\u4EF6\u7BA1\u7406 +FR-Designer-Basic_Activation_Key=\u8BBE\u8BA1\u5668\u7F16\u53F7\uFF1A +FR-App-Template_Report_Not_Exist=\u6240\u9009\u62A5\u8868\u4E0D\u5B58\u5728\! +Protected=\u4FDD\u62A4 +Skip=\u8DF3\u8FC7 +FR-Designer_PageSetup-Vertically=\u5782\u76F4\u5C45\u4E2D +revert=\u64A4\u9500 +PageSetup-Predefined=\u9884\u5B9A\u4E49 +Border-Style-Radius=\u5706\u89D2\u8FB9\u6846 +IntPart=\u6574\u6570\u90E8\u5206 +ExpandD-Data_Column=\u6570\u636E\u5217 +Sort-Ascending=\u5347\u5E8F +FR-Designer-Widget_Style=\u6837\u5F0F +parameter_name_exist=\u8BE5\u53C2\u6570\u540D\u5DF2\u5B58\u5728 +FR-Designer_Layer-Build=\u666E\u901A\u5206\u5C42\u6784\u5EFA +Please_Rename=\u8BF7\u91CD\u547D\u540D +Form-Editing_Listeners=\u4E8B\u4EF6\u7F16\u8F91 +RWA-Smart_Add_Fields=\u667A\u80FD\u6DFB\u52A0\u5B57\u6BB5 +FR-Designer-Tree_Width=\u5BBD\u5EA6 +Record=\u8BB0\u5F55 +Poly-Report_Component=\u805A\u5408\u62A5\u8868\u7EC4\u4EF6 +Options=\u9009\u9879 +NS-war-remote=\u9519\u8BEF\u4EE3\u7801\:1117 \u538B\u7F29\u90E8\u7F72\u4E0D\u652F\u6301\u8FDC\u7A0B\u8BBE\u8BA1 +Sche-Minute=\u5206 +Three_Rows_Of_Three_Grid=\u4E09\u884C\u4E09\u5217\u7684\u683C\u5B50 +WorkSheet=\u81EA\u7531\u62A5\u8868 +FR-Designer-Widget_Size=\u63A7\u4EF6\u5927\u5C0F +BindColumn-Select=\u5217\u8868 +FR-Widget_Mobile_Terminal=\u79FB\u52A8\u7AEF +FR-Background_Image_Titled=\u5E73\u94FA +SetPrinterOffset=\u6253\u5370\u673A\u504F\u79FB +FR-Designer-Plugin_Installed=\u5DF2\u5B89\u88C5 +FR-Designer-Hyperlink_Name=\u540D\u5B57 +FR-Designer_Form-Button=\u6309\u94AE +Black=\u9ED1\u8272 +FR-Designer-Widget-Style_Border_Color=\u8FB9\u6846\u989C\u8272 +Set_Submit_Event=\u8BBE\u7F6E\u63D0\u4EA4\u4E8B\u4EF6 +PDF-Print_isPopup=\u662F\u5426\u5F39\u51FA\u8BBE\u7F6E\u6846 +LayerPageReport_CountPerPage=\u6BCF\u9875\u8BB0\u5F55\u6570 +Display_Modes=\u663E\u793A\u6A21\u5F0F +RowSpan=\u884C\u8DE8\u5EA6 +Datasource-Test_Connection=\u6D4B\u8BD5\u8FDE\u63A5 +Function-Function_Manager=\u51FD\u6570\u7BA1\u7406\u5668 +Host_Name=\u4E3B\u673A\u540D +CellWrite-Show_As_HTML=\u7528HTML\u663E\u793A\u5185\u5BB9 +FR-Designer-Widget-Style_Shadow=\u9634\u5F71 +FR-Designer_Parameter_String=\u5B57\u7B26\u4E32 +Form-SupportTag=\u6807\u7B7E\u5F62\u5F0F\u663E\u793A +ReportD-Report_Write_Attributes=\u62A5\u8868\u586B\u62A5\u5C5E\u6027 +DataFunction-Count=\u4E2A\u6570 +Top_And_Thick_Bottom_Border_Line=\u4E0A\u6846\u7EBF\u548C\u7C97\u4E0B\u6846\u7EBF +Client=\u5BA2\u6237\u7AEF +BindColumn-Result_Serial_Number_Start_From_1=\u5E8F\u53F7\u4ECE1\u5F00\u59CB +History=\u5386\u53F2 +Already_exists=\u5DF2\u5B58\u5728\uFF0C\u8BF7\u91CD\u65B0\u8F93\u5165\uFF01 +Datasource-Original_Charset=\u539F\u59CB\u7F16\u7801 +FR-Base_Left=\u5DE6 +ReportServerP-Next=\u4E0B\u4E00\u9875 +BindColumn-Top_N=\u524DN\u4E2A +Animation_Special=\u7279\u6548 +Widget-Chart_Widget_Config=\u56FE\u8868\u63A7\u4EF6 +FR-Designer-Plugin_Cannot_Update_Not_Install=\u65E0\u6CD5\u66F4\u65B0\u63D2\u4EF6\uFF0C\u8BF7\u68C0\u67E5\u8BE5\u63D2\u4EF6\u662F\u5426\u5DF2\u7ECF\u6210\u529F\u5B89\u88C5 +After_Changed_Some_Attributes_Are_Different=\u8F6C\u6362\u540E\u62A5\u8868\u7684\u67D0\u4E9B\u5C5E\u6027\u4F1A\u53D1\u751F\u6539\u53D8\uFF0C\u662F\u5426\u7EE7\u7EED +PieStyle=\u997C\u72B6 +HF-Are_you_sure_to_delete_it=\u4F60\u786E\u5B9E\u60F3\u5220\u9664\u8FD9\u4E2A\u5143\u7D20\u5417 +Utils-Design-File_Open=\u6253\u5F00 +FR-Utils_Label=\u6807\u7B7E +Data-Label=\u6807\u7B7E +M_Insert-Text=\u63D2\u5165\u666E\u901A\u6587\u672C +Form-View_Tree=\u89C6\u56FE\u6811 +M_Insert-Chart=\u63D2\u5165\u56FE\u8868 +HF-Even_Page=\u5076\u6570\u9875 +ReportServerP-Report_server_parameter=\u62A5\u8868\u670D\u52A1\u5668\u53C2\u6570 +JavaScript-Form_Submit=\u8868\u5355\u63D0\u4EA4 +Horizontal-Split_Layout=\u6C34\u5E73\u5206\u5272\u5E03\u5C40 +BorderLayout-Center=\u4E2D +INFO-Reset_Webapp=\u91CD\u7F6E\u5E94\u7528\u670D\u52A1\u5668 +FR-Designer_Text=\u6587\u672C +IN_and_INOUT_type_not_as_cursor=IN\u548CINOUT\u7C7B\u578B\u4E0D\u53EF\u4EE5\u4F5C\u4E3A\u6E38\u6807 +Main_Axis=\u4E3B\u5750\u6807\u8F74 +M_Edit-Cut=\u526A\u5207(T) +Utils-The_Name_has_been_existed=\u6B64\u540D\u5DF2\u7ECF\u5B58\u5728 +FR-Background_Image=\u56FE\u7247 +Character=\u6587\u5B57 +Unit_Thousand=\u5343 +Test=\u6D4B\u8BD5 +Utils-Would_you_like_to_save=\u4F60\u662F\u5426\u9700\u8981\u4FDD\u5B58 +HF-Header_and_Footer=\u7709\u5934\u548C\u7709\u811A +LIST_MODE=\u5217\u8868 +HF-Insert_Image=\u63D2\u5165\u56FE\u7247 +FR-Designer-Widget-Style_Standard=\u6807\u51C6 +FR-Designer_Form-List=\u5217\u8868 +BackgroundTexture-Denim=\u659C\u7EB9\u5E03 +Execute_Report_by_Layer_Engine=\u7528\u884C\u5F0F\u7684\u5F15\u64CE\u6765\u6267\u884C\u62A5\u8868 +M_Edit-Bring_Forward=\u4E0A\u79FB\u4E00\u5C42(F) +Choose_All=\u5168\u9009 +Form-RadioGroup=\u5355\u9009\u6309\u94AE\u7EC4 +FR-Base_Remove=\u5220\u9664 +FR-Remote_Connect2Server_Again=\u8FDE\u63A5\u4E2D\u65AD\uFF0C\u662F\u5426\u91CD\u65B0\u8FDE\u63A5\u670D\u52A1\u5668? +Semicolon=\u5206\u53F7 +StyleFormat-Category=\u5206\u7C7B +Report_Template=\u62A5\u8868\u6A21\u677F +Utils-Beyond_the_right_side_of_Border=\u8D85\u51FA\u53F3\u8FB9\u754C +BackgroundTexture-Papyrus=\u7EB8\u838E\u8349\u7EB8 +LayerPageReport_PageEngine=\u4F7F\u7528\u6309\u9875\u8FD0\u7B97\u5206\u6BB5\u6267\u884C\u62A5\u8868 +Schedule-The_selected_file_must_be_end_with_filter=\u9009\u62E9\u7684\u6587\u4EF6\u5FC5\u987B\u4EE5.cpt\u6216\u8005.class\u6216\u8005.frm\u7ED3\u5C3E\u3002 +Provide=\u63D0\u4F9B +FormulaD-Math_&_Trig=\u6570\u5B66\u548C\u4E09\u89D2\u51FD\u6570 +FR-Designer-StyleAlignment_Right=\u9760\u53F3 +Error_TableDataNameRepeat=\u5DF2\u7ECF\u5728\u670D\u52A1\u5668\u6570\u636E\u96C6\u4E2D\u5B58\u5728\u6216\u8005\u591A\u4E2A\u6570\u636E\u96C6\u540D\u91CD\u590D\u3002 +Choose_None=\u4E0D\u9009 +File-tree=\u6587\u4EF6\u6811 +FRFont-bold=\u52A0\u7C97 +FR-Designer_Set_Submit_Condition=\u8BBE\u7F6E\u63D0\u4EA4\u6761\u4EF6 +Form-Change_Widget_Name=\u66F4\u6539\u63A7\u4EF6\u540D +ReportColumns-Report_Columns=\u62A5\u8868\u5206\u680F +Can_not_use_FormatBursh=\u4E0D\u80FD\u5BF9\u591A\u91CD\u9009\u5B9A\u533A\u57DF\u4F7F\u7528\u683C\u5F0F\u5237\! +CellElement-Property_Table=\u5355\u5143\u683C\u5C5E\u6027\u8868 +Dictionary-Dynamic_SQL=\u52A8\u6001SQL +FR-Designer_Form-CheckBoxGroup=\u590D\u9009\u6846\u7EC4 +DBCP_TIME_BETWEEN_EVICTIONRUNSMILLIS=\u7A7A\u95F2\u8FDE\u63A5\u56DE\u6536\u5668\u4F11\u7720\u65F6\u95F4 +ReportD-Export_Hided_Column=\u5BFC\u51FA\u9690\u85CF\u5217 +Preference-Support_Undo=\u652F\u6301\u64A4\u9500 +FR-mobile_report_analysis=\u62A5\u8868\u89E3\u6790 +Month=\u6708 +Utils-Column_Width=\u5217\u5BBD +Collect-Use_Designer=\u4F7F\u7528\u8BBE\u8BA1\u5668 +Widget-User_Defined_Editor=\u9884\u5B9A\u4E49\u7F16\u8F91\u5668\uFF0C\u8BE5\u7F16\u8F91\u5668\u53EA\u80FD\u5728\u63A7\u4EF6\u7BA1\u7406\u83DC\u5355\u91CC\u66F4\u6539\u5176\u5C5E\u6027 +Unit_Ten_Thousand=\u4E07 +Data_Setting=\u6570\u636E\u8BBE\u7F6E +ECP_input_pwd=\u8BF7\u8F93\u5165\u5BC6\u7801\: +period=\u3002 +Note=\u5907\u6CE8 +Multiline=\u591A\u884C\u7F16\u8F91 +Datasource-Convert_Charset=\u7F16\u7801\u8F6C\u6362 +DashBoard-ConnectionList=\u6570\u636E\u8FDE\u63A5 +Utils-Submit_Forcibly=\u5F3A\u884C\u63D0\u4EA4 +Parent_Marked_Field=\u7236\u6807\u8BB0\u5B57\u6BB5 +Logout=\u9000\u51FA +FR-Designer_Show_Blank_Row=\u8865\u5145\u7A7A\u767D\u884C +FR-Base_Format=\u683C\u5F0F +FR-App-Export_png=PNG\u683C\u5F0F +Delete_Column=\u5220\u9664\u5217 +SecondGraduationLine=\u6B21\u8981\u523B\u5EA6\u7EBF +SpecifiedG-Groups=\u7EC4 +CONTINUUM_MODE=\u76F8\u90BB\u8FDE\u7EED\u5206\u7EC4 +Datasource-Connection_failed=\u8FDE\u63A5\u5931\u8D25 +CategoryName=\u5206\u7C7B\u540D +DBCP_INITIAL_SIZE=\u521D\u59CB\u5316\u8FDE\u63A5\u6570 +Colors=\u989C\u8272 +FR-Import-Export_CSV=CSV\u683C\u5F0F(\u9017\u53F7\u5206\u9694) +FR-Designer-StyleAlignment_Left=\u9760\u5DE6 +BackgroundTexture-PaperBag=\u7EB8\u888B +RWA-BuildIn_SQL=\u5185\u7F6ESQL +SingleLayer=\u5355\u5C42 +Or-you=\u6216\u8005\u60A8 +FR-Designer_Certificate_Path=\u8BC1\u4E66\u8DEF\u5F84 +Utils-Last_Page=\u6700\u540E\u4E00\u9875 +BarCodeD-Drawing_Text=\u663E\u793A\u6761\u5F62\u7801\u7684\u6587\u672C +Warning-Template_Do_Not_Exsit=\u6A21\u677F\u4E0D\u5B58\u5728 +BindColumn-Group=\u5206\u7EC4 +Export-SVG=SVG\u683C\u5F0F +Plane3D=\u5E73\u97623D +SessionID=sessionID\u662F\u5F53\u524D\u8BBF\u95EE\u6A21\u677F\u7684\u4F1A\u8BDD\u6807\u8BC6\u53C2\u6570\u3002 +FR-Designer_Height=\u9AD8 +HF-Odd_Page=\u5947\u6570\u9875 +About-All_Rights_Reserved=\u4FDD\u7559\u6240\u6709\u7684\u6743\u5229 +Utils-Current_Cell=\u5F53\u524D\u683C\u5B50 +Web_Preview_Message=\u8BF7\u5C06\u6A21\u677F\u6587\u4EF6\u4FDD\u5B58\u5728\u5F53\u524D\u8FD0\u884C\u73AF\u5883\u76EE\u5F55\u4E0B +FR-Hyperlink_Chart_Float=\u56FE\u8868\u8D85\u94FE-\u8054\u52A8\u60AC\u6D6E\u5143\u7D20 +Dic-Data_Query=\u6570\u636E\u67E5\u8BE2 +CellWrite-Print_Content=\u6253\u5370/\u5BFC\u51FA\u5355\u5143\u683C\u5185\u5BB9 +Privilege-Selected_None_Of_Any_Items=\u6CA1\u6709\u9009\u4E2D\u4EFB\u4F55\u4E00\u9879 +FRFont-Size=\u5927\u5C0F +Function-J2EE_server=J2EE\u670D\u52A1\u5668 +FR-Designer_Allow_Blank=\u5141\u8BB8\u4E3A\u7A7A +Build_Tree_Accord_Parent_Marked_Filed=\u4F9D\u8D56\u6240\u9009\u6570\u636E\u96C6\u7684\u7236\u6807\u8BB0\u5B57\u6BB5\u6784\u5EFA\u6811 +Preference-Horizontal_Scroll_Bar_Visible=\u6C34\u5E73\u6EDA\u52A8\u6761\u53EF\u89C1 +Scope=\u8303\u56F4 +Save_All_Records_In_Memory=\u6240\u6709\u8BB0\u5F55\u90FD\u4FDD\u5B58\u5728\u5185\u5B58\u4E2D +FreezeWarning1=\u521D\u59CB\u503C\u4E0D\u5927\u4E8E\u5C3E\u503C +FlowLayout=\u6D41\u5F0F\u5E03\u5C40 +M_Report-Report_Footer=\u62A5\u8868\u9875\u811A +FR-Action_Add=\u589E\u52A0 +BorderLayout-East=\u4E1C +feedback_tip=\u8BF7\u8F93\u5165\u4E0D\u8D85\u8FC7400\u4E2A\u5B57\u7684\u95EE\u9898\u63CF\u8FF0 +FS_Start_Date=\u8D77\u59CB\u65E5\u671F +FR-ConditionB_Operator=\u64CD\u4F5C\u7B26 +Printer-Alias=\u522B\u540D +DS-Class_Name=\u7C7B\u540D +FR-Designer-Plugin_Has_Been_Disabled=\u63D2\u4EF6\u5DF2\u88AB\u7981\u7528\uFF0C\u91CD\u542F\u8BBE\u8BA1\u5668\u53CA\u670D\u52A1\u5668\u751F\u6548\uFF0C\u670D\u52A1\u5668\u9700\u624B\u52A8\u91CD\u542F +Sort-Original=\u4E0D\u6392\u5E8F +Utils-Top_to_Bottom_a=\u4ECE\u4E0A\u5F80\u4E0B +Parameter-String=\u5B57\u7B26\u4E32 +InnerRadis=\u5185\u5F84\u5927\u5C0F +Want_To_Cover_It=\u662F\u5426\u60F3\u8986\u76D6\u5B83 +Divided_stage=\u5212\u5206\u9636\u6BB5 +Seriously=\u4E25\u91CD +ReportServerP-PDF=PDF +Utils-Switch_To_Class_Reportlet=\u5207\u6362\u5230\u7A0B\u5E8F\u7F51\u7EDC\u62A5\u8868 +FR-Designer_Show_Blank_Column=\u8865\u5145\u7A7A\u767D\u5217 +M_Edit-Redo=\u91CD\u505A +Visibility=\u53EF\u89C1\u6027 +Series_Use_Default=\u7CFB\u5217\u9ED8\u8BA4\u4F7F\u7528 +Has_Selected=\u5DF2\u7ECF\u9009\u62E9 +BackgroundTexture-Walnut=\u80E1\u6843 +FormulaD-Function_category=\u51FD\u6570\u7C7B\u578B +Interface=\u63A5\u53E3 +FR-Designer-Beyond_Bounds=\u8D85\u51FA\u6216\u8005\u5C0F\u4E8Ebody\u8FB9\u754C\uFF0C\u4E0D\u80FD\u8C03\u6574\u5927\u5C0F +seconds=\u79D2 +Auto-Build=\u81EA\u52A8\u6784\u5EFA +FR-Designer-Plugin_Install_Successful=\u8BE5\u63D2\u4EF6\u5C06\u5728\u91CD\u65B0\u542F\u52A8\u8BBE\u8BA1\u5668\u53CA\u670D\u52A1\u5668\u65F6\u88AB\u542F\u7528\uFF0C\u670D\u52A1\u5668\u9700\u624B\u52A8\u91CD\u542F +Template_Path=\u6A21\u677F\u8DEF\u5F84 +FR-Designer-FRFont_Bold=\u52A0\u7C97 +Poly_Name=\u805A\u5408\u5757\u540D +WorkBook=\u5DE5\u4F5C\u7C3F +Hyperlink-Self_Window=\u5F53\u524D\u7A97\u53E3 +FR-Designer-Widget-Style_Title=\u6807\u9898 +FR-Designer-FRFont_Size=\u5927\u5C0F +M_File-Export-SVG=SVG\u683C\u5F0F +Capacity=\u5BB9\u91CF +Rose_Red=\u73AB\u7470\u7EA2 +StyleAlignment-The_value_of_rotation_must_between_-90_and_90_degrees=\u65CB\u8F6C\u503C\u5FC5\u987B\u5728\u8D1F90\u5EA6\u523090\u5EA6 +HF-Move_Left=\u5DE6\u79FB +Cell_Group=\u5355\u5143\u683C\u7EC4 +Week=\u5468 +PageSetup-Orientation=\u65B9\u5411 +M-Open_Recent=\u6700\u8FD1\u6253\u5F00\u7684 +NNormal=\u6B63\u5E38 +Integer=\u6574\u6570 +Select_The_Source_To_Save=\u9009\u62E9\u8981\u5B58\u50A8\u7684\u9879\u76EE +Transition=\u5206\u652F +FR-Designer_Get_Lock=\u52A0\u9501 +one_record_exists_in_many_groups=\u4E00\u4E2A\u8BB0\u5F55\u53EF\u4EE5\u5B58\u5728\u4E8E\u591A\u4E2A\u7EC4\u4E2D +FR-Designer_Cover_None=\u5168\u4E0D\u8986\u76D6 +DeciPart=\u5C0F\u6570\u90E8\u5206 +ExpandD-Up_Father_Cell=\u4E0A\u7236\u683C +Deep=\u6DF1\u5EA6 +FRFont-Shadow=\u9634\u5F71 +Reportlet=\u7F51\u7EDC\u62A5\u8868 +Calendar=\u65E5\u5386 +DateFormat-Custom_Warning=\u6CE8\uFF1A\u81EA\u5B9A\u4E49\u65E5\u671F\u683C\u5F0F\u4E0D\u652F\u6301\u683C\u5F0F\u6821\u9A8C +Unit_MM=\u6BEB\u7C73 +Server-Start=\u542F\u52A8 +CellPage-Can_Break_On_Paginate=\u5206\u9875\u65F6\u53EF\u4EE5\u65AD\u5F00 +Build_Tree_Accord_Marked_Filed_Length=\u4F9D\u8D56\u6240\u9009\u6570\u636E\u96C6\u7684\u6807\u8BB0\u5B57\u6BB5\u7684\u957F\u5EA6\u6784\u5EFA\u6811 +ComboCheckBox-Start_Symbol=\u8D77\u59CB\u7B26 +Real=\u5B9E\u9645 +RWA-Batch_Modify_Cells=\u6279\u91CF\u4FEE\u6539\u5355\u5143\u683C +FR-Designer_Build-Way=\u6784\u5EFA\u65B9\u5F0F +Read=\u8BFB\u53D6 +StyleAlignment-Degrees=\u5EA6\u6570 +M_Format_A-Border=\u8FB9\u6846(B) +Utils-Delete_Record=\u5220\u9664\u8BB0\u5F55 +Reload=\u91CD\u8F7D +Image-Select_Picture=\u9009\u62E9\u56FE\u7247 +RWA-Submit=\u63D0\u4EA4 +the_template=\u8BE5\u6A21\u677F +FR-Designer_Component_Scale=\u7EC4\u4EF6\u7F29\u653E +FRFont-italic=\u503E\u659C +Year=\u5E74 +HF-Move_Right=\u53F3\u79FB +Data-Check=\u6570\u636E\u76D1\u63A7 +Unknown=\u672A\u77E5 +Submit_Style=\u63D0\u4EA4\u65B9\u5F0F +Left_Border_Line=\u5DE6\u6846\u7EBF +Brown=\u8910\u8272 +Select_A_Tree_DataSource_To_Build=\u9009\u62E9\u4E00\u4E2A\u6811\u6570\u636E\u96C6\u6765\u6784\u5EFA +Overlapping=\u91CD\u53E0\u578B +DS-Class_TableData=\u7A0B\u5E8F\u6570\u636E\u96C6 +FR-Designer-Plugin_Illegal_Plugin_Zip_Cannot_Be_Install=\u4E0D\u53EF\u8BC6\u522B\u7684\u63D2\u4EF6\uFF0C\u65E0\u6CD5\u5B89\u88C5 +DisplayNothingBeforeQuery=\u70B9\u51FB\u67E5\u8BE2\u524D\u4E0D\u663E\u793A\u62A5\u8868\u5185\u5BB9 +Y_Axis=Y\u8F74 +FormulaD-Most_Recently_Used=\u5E38\u7528\u51FD\u6570 +FormulaD-Input_formula_in_the_text_area_below=\u8BF7\u5728\u4E0B\u9762\u7684\u6587\u672C\u7F16\u8F91\u6846\u91CC\u9762\u8F93\u5165\u516C\u5F0F +Build-Way=\u6784\u5EFA\u65B9\u5F0F +M_Edit-Undo=\u64A4\u9500 +Line-Style=\u7EBF\u578B +Datasource-Other_Attributes=\u5176\u4ED6\u5C5E\u6027 +M_Server-Global_Parameters=\u5168\u5C40\u53C2\u6570 +Suffix=\u540E\u7F00 +Image-Image_Files=\u56FE\u7247\u6587\u4EF6 +EditRC-Entire_row=\u6574\u884C(R) +HF-First_Page=\u9996\u9875 +BackgroundTexture-Granite=\u82B1\u5C97\u5CA9 +DataList=\u6570\u636E\u94FE +Recursion=\u9012\u5F52 +BarStyle=\u6761\u5F62 +FR-Designer-Min_Width=\u6700\u5C0F\u5BBD\u5EA6 +Utils-Report-Env_Directory=\u62A5\u8868\u5DE5\u4F5C\u76EE\u5F55 +D-ChartArea=\u56FE\u8868\u533A +Only=\u53EA +FR-Base_No=\u5426 +SpecifiedG-Put_all_others_together=\u628A\u5176\u5B83\u6240\u6709\u7684\u5408\u5E76 +HF-NewLine_Des=\u53EF\u4EE5\u70B9\u51FB\u4E0A\u9762\u7684\u79FB\u52A8\u548C\u5220\u9664\u6309\u94AE\u6765\u64CD\u4F5C\u6362\u884C\u7B26 +WLayout-Border-ThreeContainer=\u62E5\u6709\u5317\u3001\u897F\u548C\u4E2D\u4E09\u5757\u7684\u8FB9\u754C\u5E03\u5C40\u5BB9\u5668\uFF0C\u5176\u4E2D\u5317\u90E8\u5757\u53EF\u4EE5\u6839\u636E\u9700\u8981\u8C03\u6574\u9AD8\u5EA6\uFF0C\u897F\u90E8\u5757\u53EF\u4EE5\u6839\u636E\u9700\u8981\u8C03\u6574\u5BBD\u5EA6 +Parameter_Name=\u53C2\u6570\u540D +FR-Base_Table=\u8868 +Des-Remove_WorkSheet=\u8981\u5220\u9664\u7684\u8868\u53EF\u80FD\u5B58\u5728\u6570\u636E,\u5982\u679C\u8981\u6C38\u4E45\u5220\u9664\u8FD9\u4E9B\u6570\u636E,\u8BF7\u6309'\u786E\u5B9A'\u6309\u94AE. +Rotation=\u65CB\u8F6C +Undefined=\u672A\u5B9A\u4E49 +Support-Auto_Complete_Shortcut=\u81EA\u52A8\u8865\u5168\u5FEB\u6377\u952E +Set_Column_Title_End=\u8BBE\u7F6E\u91CD\u590D\u7ED3\u5C3E\u5217 +Submit_Url=\u63D0\u4EA4\u5730\u5740 +ReportServerP-Are_you_sure_to_delete_the_selected_printer=\u4F60\u786E\u5B9E\u60F3\u5220\u9664\u9009\u4E2D\u7684\u6253\u5370\u673A\u5417 +long_data_can_not_show_fully=\u957F\u6570\u636E\u663E\u793A\u4E0D\u5168 +Utils-Beyond_the_bottom_side_of_Border=\u8D85\u51FA\u4E0B\u8FB9\u754C +FR-Import-Export_PDF=PDF\u683C\u5F0F +Form-CheckBoxGroup=\u590D\u9009\u6846\u7EC4 +Click-Me=\u70B9\u6211\u6709\u60CA\u559C\u54E6\uFF01 +Hyperlink-Self=\u5728\u539F\u7F51\u9875\u4E2D\u6253\u5F00\u94FE\u63A5(S) +Tree-Select_Leaf_Only_Tips=\uFF08\u4E0D\u52FE\u9009\u6B64\u9879\u65F6\uFF0C\u8FD4\u56DE\u503C\u4EC5\u4E3A\u7528\u6237\u52FE\u9009\u7684\u5F53\u524D\u8282\u70B9\u800C\u4E0D\u5305\u62EC\u5176\u5B50\u8282\u70B9\uFF09 +StyleAlignment-Text_Rotation=\u6587\u672C\u65B9\u5411 +Format-Error=\u8F93\u5165\u7684\u503C\u683C\u5F0F\u4E0D\u6B63\u786E +Server-Stop=\u505C\u6B62 +Preference-Setting_Grid=\u7F51\u683C\u8BBE\u7F6E +ReportServerP-Add_Printer=\u589E\u52A0\u6253\u5370\u673A +FR-Designer-Plugin_Active=\u542F\u7528 +Utils-File_name=\u6587\u4EF6\u540D +NOT_NULL_Des=\u4E0D\u80FD\u4E3A\u7A7A +Right_Border_Line=\u53F3\u6846\u7EBF +EditRC-Entire_column=\u6574\u5217(C) +PageSetup-Top_to_bottom=\u5148\u5217\u540E\u884C +Click-Get_Default_URL=\u70B9\u51FB\u6B64\u6309\u94AE\u83B7\u5F97\u9ED8\u8BA4URL +StyleAlignment-Wrap_Text=\u81EA\u52A8\u6362\u884C +Remove_All_Button=\u6E05\u9664\u6240\u6709\u6309\u94AE +FR-Designer_Component_Interval=\u7EC4\u4EF6\u95F4\u9694 +ReportColumns-Columns_vertically=\u5217\u5206\u680F +ReportGUI-Print_Background=\u6253\u5370/\u5BFC\u51FA\u62A5\u8868\u80CC\u666F +Export-CSV=CSV\u683C\u5F0F(\u9017\u53F7\u5206\u9694) +M_Edit-Paste=\u7C98\u8D34(P) +FR-Designer-Basic_Restart_Designer=\u91CD\u542F\u8BBE\u8BA1\u5668 +ReportServerP-PDF2-INFO=\u4EC5\u5728LINUX/UNIX\u4E0B\u672A\u5B89\u88C5\u4E2D\u6587\u5B57\u4F53\u65F6\u4F7F\u7528 +FormulaD-Check_Valid=\u68C0\u67E5\u5408\u6CD5\u6027 +server_disconnected=\u8FDE\u63A5\u5DF2\u65AD\u5F00 +ParameterD-Parameter_name_cannot_be_null=\u53C2\u6570\u7684\u540D\u5B57\u4E0D\u53EF\u4EE5\u4E3A\u7A7A +FR-Designer-Plugin_Version_Is_Lower_Than_Current=\u5347\u7EA7\u5305\u7684\u63D2\u4EF6\u7248\u672C\u6CA1\u6709\u6BD4\u5F53\u524D\u7684\u9AD8 +RWA-NotChange_Unmodified=\u672A\u4FEE\u6539\u4E0D\u66F4\u65B0 +User_Information=\u7528\u6237\u4FE1\u606F +Custom_styles_lost=\u81EA\u5B9A\u4E49\u6837\u5F0F\u5DF2\u4E22\u5931 +PageSetup-Margin=\u9875\u8FB9\u8DDD +M-New_FormBook=\u65B0\u5EFA\u8868\u5355 +Widget-TreeNode=\u6811\u8282\u70B9\u6309\u94AE +Form-Url=\u5730\u5740 +Utils-Beyond_the_left_side_of_Border=\u8D85\u51FA\u5DE6\u8FB9\u754C +Float_Element_Name=\u60AC\u6D6E\u5143\u7D20\u540D\u79F0 +Purple=\u7C89\u7D2B +DashBoard-Potence=\u6743\u9650 +M-Close_Template=\u5173\u95ED\u6A21\u677F(C) +paper=\u7EB8\u5F20 +Not_Exsit=\u4E0D\u5B58\u5728\u4E8E\u62A5\u8868 +Utils-Insert_Row=\u63D2\u5165\u884C +Utils-Delete_Row=\u5220\u9664\u884C +not_support_authority_edit=\u8BE5\u5143\u7D20\u4E0D\u652F\u6301\u6743\u9650\u63A7\u5236 +Formula_Tips=\u516C\u5F0F\u5FC5\u987B\u4EE5"\ +FR-Action_Copy=\u590D\u5236 +Compile_Success=\u7F16\u8BD1\u6210\u529F +BackgroundTexture-RecycledPaper=\u518D\u751F\u7EB8 +StyleAlignment-Single_Line=\u5355\u884C\u663E\u793A +Utils-Move_Down=\u4E0B\u79FB +Please_Set_Repeat_First=\u8BF7\u5148\u8BBE\u7F6E\u91CD\u590D\u6807\u9898\u884C\u548C\u5217 +Writer-ShortCuts_Setting=\u586B\u62A5\u5FEB\u6377\u952E\u8BBE\u7F6E +Verify-Data_Verify=\u6570\u636E\u6821\u9A8C +FR-mobile_analysis_style=\u89E3\u6790\u65B9\u5F0F +Confirm-Delete-File=\u662F\u5426\u5220\u9664\u6240\u9009\u6587\u4EF6\uFF1F +PageSetup-Header=\u9875\u7709 +JavaScrit-Asynch=\u5F02\u6B65 +ReportServerP-Toolbar=\u5DE5\u5177\u680F +Utils-Top_to_Bottom=\u7EB5\u5411 +Platform=\u5E73\u53F0 +FR-Designer-FRFont_Underline=\u4E0B\u5212\u7EBF +Show_in_Containing_Folder=\u6253\u5F00\u6240\u5728\u6587\u4EF6\u5939 +BackgroundTexture-WaterDroplets=\u6C34\u6EF4 +FR-Designer-Dependence_Install_Failed=\u4F9D\u8D56\u5B89\u88C5\u5931\u8D25 +Layout-Padding=\u5185\u8FB9\u8DDD +roles_already_authority_edited=\u5DF2\u914D\u7F6E\u89D2\u8272 +WidgetDisplyPosition=\u63A7\u4EF6\u663E\u793A\u4F4D\u7F6E +SpecifiedG-Force_Group=\u5F3A\u5236\u5206\u7EC4 +FormulaD-Formula_Definition=\u516C\u5F0F\u5B9A\u4E49 +I-xyScatterStyle_Marker=\u6563\u70B9\u56FE +Hour=\u5C0F\u65F6 +ColorMatch=\u914D\u8272 +M_Edit-Order=\u53E0\u653E\u6B21\u5E8F(O) +BackgroundTexture-Bouquet=\u82B1\u675F +Verify-Error_Information=\u6821\u9A8C\u51FA\u9519\u4FE1\u606F +LayerData=\u5E95\u5C42\u6570\u636E +Rename=\u91CD\u547D\u540D +Widget-Load_By_Async=\u5F02\u6B65\u52A0\u8F7D +Shape=\u56FE\u5F62 +BindColumn-This_Condition_has_been_existed=\u6B64\u6761\u4EF6\u5DF2\u7ECF\u5B58\u5728 +NS-exception_readError=\u9519\u8BEF\u4EE3\u7801\:1305 \u6A21\u677F\u6587\u4EF6\u89E3\u6790\u51FA\u9519 +Set_Column_Title_Start=\u8BBE\u7F6E\u91CD\u590D\u6807\u9898\u5217 +Fri=\u4E94 +M_Report-Report_Parameter=\u6A21\u677F\u53C2\u6570 +REPORTLETS=\u8BBF\u95EE\u591A\u5F20\u6A21\u677F\u7684\u8DEF\u5F84\u7684\u53C2\u6570 +WLayout-Card-ToolTip=\u5361\u7247\u5F0F\u5E03\u5C40\uFF0C\u8BE5\u5E03\u5C40\u5BB9\u5668\u4E2D\u53EF\u4EE5\u6DFB\u52A0\u591A\u4E2A\u5176\u5B83\u7EC4\u4EF6\u3002 +M-Popup_ChartType=\u56FE\u8868\u7C7B\u578B +Please-Wait=\u8BF7\u7A0D\u5019 +FR-Designer-Form-ToolBar_Widget=\u63A7\u4EF6 +Widget-Array=\u6570\u7EC4 +FieldBinding=\u7ED1\u5B9A\u5B57\u6BB5 +Top_Bottom_Border_Line=\u4E0A\u4E0B\u6846\u7EBF +M-Others=\u5176\u5B83... +Hyperlink-Link_Opened_in=\u94FE\u63A5\u6253\u5F00\u4E8E +FR-Utils_WorkBook=\u5DE5\u4F5C\u7C3F +M_Insert-Float=\u60AC\u6D6E\u5143\u7D20 +Out_Thick_Border_Line=\u7C97\u5323\u6846\u7EBF +FR-App-File_Lookup_range=\u67E5\u627E\u8303\u56F4 +ReportColumns-Columns_to=\u5206\u680F\u6210 +Transparent=\u900F\u660E +Parameter-Integer=\u6574\u578B +PDF-Print_Setting=PDF\u6253\u5370\u8BBE\u7F6E +Server-Embedded_Server=\u5167\u7F6E\u7684\u670D\u52A1\u5668 +M_Server-Server_Config_Manager=\u670D\u52A1\u5668\u914D\u7F6E +FR-Utils-Would_you_like_to_cover_the_current_file=\u4F60\u5E0C\u671B\u8986\u76D6\u5F53\u524D\u6587\u4EF6\u5417 +CellWrite-InsertRow_COPY=\u539F\u503C +Edit_String_To_Formula=\u662F\u5426\u5C06\u5B57\u7B26\u4E32\u7F16\u8F91\u4E3A\u516C\u5F0F +Edit-Column_Count=\u5217\u6570 +Father=\u7236 +ReportColumns-Columns_after=\u8D85\u8FC7 +FR-Designer_Undo=\u64A4\u9500 +DBCP_MIN_IDLE=\u6700\u5C0F\u7A7A\u95F2\u8FDE\u63A5\u6570 +M-Data_Analysis_Settings=\u6570\u636E\u5206\u6790\u8BBE\u7F6E +M-Form_Preview=\u8868\u5355\u9884\u89C8 +Form-Basic_Properties=\u57FA\u672C\u5C5E\u6027 +quote=\u5F15\u7528 +Thu=\u56DB +Collect-Collect_User_Information=\u6536\u96C6\u7528\u6237\u4FE1\u606F +Layer-Build=\u5206\u5C42\u6784\u5EFA +FR-Designer-FRFont_Line_Style=\u7EBF\u578B +BackgroundTexture-BrownMarble=\u68D5\u8272\u5927\u7406\u77F3 +PageSetup-Page_Setup=\u9875\u9762\u8BBE\u7F6E +Form-Semicolon=\u5206\u53F7 +ECP_re_input=\u5BC6\u7801\u9519\u8BEF, \u8BF7\u91CD\u65B0\u8F93\u5165 +ExpandD-Sort_After_Expand=\u6269\u5C55\u540E +FR-Designer-Dependence_Install_Succeed=\u4F9D\u8D56\u5B89\u88C5\u6210\u529F +Env-Configure_Workspace=\u914D\u7F6E\u5DE5\u4F5C\u76EE\u5F55 +feedback_info=\u6B22\u8FCE\u60A8\u63D0\u51FA\u5B9D\u8D35\u7684\u610F\u89C1\u548C\u5EFA\u8BAE\uFF0C\u8BF7\u5C06\u4FE1\u606F\u586B\u5199\u5F97\u5C3D\u91CF\u8BE6\u7EC6\uFF0C\u6211\u4EEC\u4F1A\u5C3D\u5FEB\u8054\u7CFB\u60A8 +Ratio=\u6BD4\u7387 +DBCP_TEST_ON_BORROW=\u83B7\u53D6\u8FDE\u63A5\u524D\u68C0\u9A8C +FR-Designer_layerIndex=\u4F9D\u8D56\u7684\u5C42\u6570 +WEB-Write_Setting=\u586B\u62A5\u9875\u9762\u8BBE\u7F6E +M-New_WorkBook=\u65B0\u5EFA\u5DE5\u4F5C\u7C3F +FR-Designer-Plugin_Has_Been_Actived=\u63D2\u4EF6\u5DF2\u88AB\u542F\u7528\uFF0C\u91CD\u542F\u8BBE\u8BA1\u5668\u53CA\u670D\u52A1\u5668\u751F\u6548\uFF0C\u670D\u52A1\u5668\u9700\u624B\u52A8\u91CD\u542F +Datasource-Maximum_Number_of_Preview_Rows=\u6700\u5927\u7684\u9884\u89C8\u884C\u6570 +ExpandD-Cell_Expand_Attributes=\u6269\u5C55\u5C5E\u6027 +Select_the_repeated_row_and_column=\u9009\u62E9\u9700\u8981\u91CD\u590D\u7684\u884C\u5217 +FormulaD-Date_&_Time=\u65E5\u671F\u548C\u65F6\u95F4\u51FD\u6570 +Max-Mem-Row-Count=\u7F13\u5B58\u81F3\u78C1\u76D8\u5F53\u8BB0\u5F55\u6570\u5927\u4E8E +BorderLayout-South=\u5357 +Export-Text=\u6587\u672C\u6587\u4EF6(\u5236\u8868\u7B26\u5206\u9694) +JavaScript-Synch=\u540C\u6B65 +FR-App-All_Warning=\u8B66\u544A +M_Edit-Send_Backward=\u4E0B\u79FB\u4E00\u5C42(B) +Form-Layout=\u5E03\u5C40 +FR-Designer-Plugin_Shop_Need_Update=\u63D2\u4EF6\u5546\u5E97\u6709\u65B0\u7248\u672C,\u662F\u5426\u66F4\u65B0? +FR-Designer_WorkBook=\u5DE5\u4F5C\u7C3F +UpBarBorderStyleAndColor=\u6DA8\u67F1\u6837\u5F0F +GridLayout=\u683C\u5B50\u5E03\u5C40 +Utils-Default_Value=\u9ED8\u8BA4\u503C +Widget-Comb_Widget_Config=\u7EC4\u5408\u63A7\u4EF6 +Import-Excel2007_Source=Excel2007\u6E90\u6587\u4EF6 +Y-Coordinate=\u7EB5\u5750\u6807 +FR-Base_SimSun_Not_Found=\u65E0\u6CD5\u627E\u5230\u5B8B\u4F53, \u8BF7\u9009\u62E9\u5F53\u524D\u7CFB\u7EDF\u4E0B\u9ED8\u8BA4\u8BED\u8A00\u4F5C\u4E3A\u8BBE\u8BA1\u5668\u5B57\u4F53. +FR-Designer_Seriously=\u4E25\u91CD +Upload=\u4E0A\u4F20 +Form-Widget_Property_Table=\u5C5E\u6027\u8868 +Des-Merger_Cell=\u9009\u62E9\u7684\u533A\u57DF\u5305\u542B\u591A\u4E2A\u6570\u636E\uFF0C\u5408\u5E76\u5355\u5143\u683C\u540E\u5C06\u53EA\u4FDD\u7559\u7F16\u8F91\u8FC7\u7684\u6240\u6709\u5355\u5143\u683C\u4E2D\u6700\u5DE6\u4E0A\u89D2\u7684\u6570\u503C. +FR-Designer-Basic_Copy_Build_NO=\u53CC\u51FB\u6784\u5EFA\u7248\u672C\u53F7\u53EF\u590D\u5236\u5230\u526A\u8D34\u677F +FR-Base_TurnOn=\u5F00\u542F +FR-Base_Rows=\u884C +Form-Remove_Repeat=\u53BB\u6389\u91CD\u590D\u9879 +Yes=\u662F +Datasource-JNDI_Name=JNDI\u7684\u540D\u5B57 +Utils-Delete_Column=\u5220\u9664\u5217 +HF-Delete_it=\u5220\u9664 +JavaScript-Dynamic_Parameters=\u52A8\u6001\u53C2\u6570 +px=\u50CF\u7D20 +FR-App-Report_Template=\u62A5\u8868\u6A21\u7248 +Verify-Message=\u9519\u8BEF\u4FE1\u606F +Plan=\u8BA1\u5212 +Vertical-Split_Layout=\u5782\u76F4\u5206\u5272\u5E03\u5C40 +ParameterD-Delay_Playing=\u70B9\u51FB\u67E5\u8BE2\u524D\u4E0D\u663E\u793A\u62A5\u8868\u5185\u5BB9 +TurnOff=\u5173\u95ED +FR-Please_Rename=\u8BF7\u91CD\u547D\u540D +Select_Data_Set=\u9009\u62E9\u6570\u636E\u96C6 +Name_has_Colon=\u540D\u5B57\: +ReportColumns-Columns_horizontally=\u884C\u5206\u680F +FR-Base_Yes=\u662F +ReportColumns-Repeat_Row=\u590D\u5236\u884C\u5E8F\u5217 +Print_Setting=\u6253\u5370\u8BBE\u7F6E +Registration-User_Name=\u7528\u6237\u540D +Datasource-User_Defined=\u81EA\u5B9A\u4E49 +FR-Designer-Plugin_DownLoadMessage=\u63D2\u4EF6\u9700\u8981\u4F9D\u8D56\u7684\u652F\u6301\uFF0C\u662F\u5426\u5B89\u88C5 ({R1} m)? +Delay=\u5EF6\u8FDF +FR-Designer-All_MSBold=\u5FAE\u8F6F\u96C5\u9ED1 +Utils-Now_create_connection=\u6B63\u5728\u5EFA\u7ACB\u6570\u636E\u8FDE\u63A5 +FR-Template-Path_chooseRightPath=\u8BF7\u9009\u62E9\u6B63\u786E\u8DEF\u5F84 +FR-Remote_Re_Connect_to_Server=\u670D\u52A1\u5668\u5DF2\u5173\u95ED\uFF0C\u662F\u5426\u91CD\u65B0\u8FDE\u63A5\u670D\u52A1\u5668? +Nation=\u56FD\u5BB6 +DBCP_MAX_WAIT=\u6700\u5927\u7B49\u5F85\u65F6\u95F4 +FR-App-Template_Form=\u8868\u5355 +Address=\u5730\u5740 +Sub_Report=\u5B50\u62A5\u8868 +FR-Import-Export_Word=Word\u683C\u5F0F +FR-Server_Version_Tip=\u60A8\u5F53\u524D\u8FDE\u63A5\u7684\u670D\u52A1\u5668\u7248\u672C\u4F4E\u4E8E\u60A8\u4F7F\u7528\u7684\u8BBE\u8BA1\u5668\u7248\u672C\u53F7\uFF0C\u7EE7\u7EED\u8FDE\u63A5\uFF0C\u60A8\u7F16\u8F91\u7684\u4E00\u4E9B\u5C5E\u6027\u53EF\u80FD\u65E0\u6CD5\u6709\u6548\u4FDD\u5B58\u3002 \u5047\u5982\u9700\u8981\u8FDE\u63A5\u8BF7\u5C06\u60A8\u7684\u8BBE\u8BA1\u5668\u7248\u672C\u4E0E\u670D\u52A1\u5668\u7248\u672C\u4FDD\u6301\u4E00\u81F4 +StyleAlignment-Left_To_Right=\u4ECE\u5DE6\u5411\u53F3 +Verify-ToolTips=\u4E0D\u6EE1\u8DB3\u516C\u5F0F\u63D0\u793A\u6821\u9A8C\u51FA\u9519\u4FE1\u606F +BackgroundTexture-Stationery=\u4FE1\u7EB8 +FR-Designer_RWA-Help=\u8BBE\u7F6E\u672A\u4FEE\u6539\u4E0D\u66F4\u65B0\u540E\uFF0C\u586B\u62A5\u9884\u89C8\u62A5\u8868\uFF0C\u8BB0\u5F55\u6240\u5728\u5355\u5143\u683C\u6CA1\u6709\u88AB\u7F16\u8F91\u4FEE\u6539\uFF0C\u5219\u6B64\u8BB0\u5F55\u4E0D\u4F1A\u8FDB\u884C\u66F4\u65B0\uFF1B\n\u5728\u5927\u6570\u636E\u91CF\u8BB0\u5F55\u67E5\u8BE2\u5E76\u56DE\u586B\u60C5\u51B5\u4E0B\uFF0C\u542F\u7528\u8BE5\u8BBE\u7F6E\uFF0C\u53EF\u4EE5\u63D0\u9AD8\u586B\u62A5\u63D0\u4EA4\u6027\u80FD\u3002 +M_Insert-Barcode=\u6761\u5F62\u7801 +Bounds=\u8FB9\u754C +FR-Designer-Undo_All_Authority_Operations=\u64A4\u9500\u524D\u4E00\u6B21\u6743\u9650\u7F16\u8F91\u7684\u6240\u6709\u64CD\u4F5C +Datasource-Context=\u4E0A\u4E0B\u6587 +CellWrite-Page_After_Column=\u5217\u540E\u5206\u9875 +FR-Designer_Cancel=\u53D6\u6D88 +Button-Group-Display-Columns=\u5C55\u793A\u5217\u6570 +Widget-Height=\u63A7\u4EF6\u9AD8\u5EA6 +Examples=\u4F8B\u5B50 +Formula_Dictionary_Display_Example=\u5B9E\u9645\u503C\u8303\u56F4\u4E3A \ +StyleAlignment-Horizontal=\u6C34\u5E73\u5BF9\u9F50 +HyperLink_Must_Alone_Reset=\u591A\u4E2A\u8D85\u94FE +ExpandD-Expand_Direction=\u6269\u5C55\u65B9\u5411 +Include=\u5305\u62EC +Export-Excel-Page=\u5206\u9875\u5BFC\u51FA +FR-Designer-Min_Height=\u6700\u5C0F\u9AD8\u5EA6 +Filed=\u533A\u57DF +ReportServerP-Import_Css=\u5F15\u7528Css +M_Insert-Formula=\u63D2\u5165\u516C\u5F0F +FR-Designer_Auto-Build=\u81EA\u52A8\u6784\u5EFA +FRFont-Foreground=\u989C\u8272 +Bubble-Width=\u6C14\u6CE1\u5BBD\u5EA6 +Form-Hierarchy_Tree=\u7ED3\u6784\u6811 +WLayout-Border-LayoutContainer=\u62E5\u6709\u4E2D\u90E8\u548C\u5317\u90E8\u4E24\u5757\u7684\u8FB9\u754C\u5E03\u5C40\u5BB9\u5668,\u5176\u4E2D\u5317\u90E8\u5757\u53EF\u4EE5\u6839\u636E\u9700\u8981\u8C03\u6574\u9AD8\u5EA6 +Preference-JDK_Home=JDK\u8DEF\u5F84 +Utils-Insert_Column=\u63D2\u5165\u5217 +FR-Designer_ToolBar_Top=\u9876\u90E8\u5DE5\u5177\u680F +BindColumn-The_Conditions_of_FatherCell=\u7236\u683C\u6761\u4EF6 +Links=\u94FE\u63A5 +M_Report-Report_Header=\u62A5\u8868\u9875\u7709 +Sub_Report_Description=\u5B50\u62A5\u8868\u9700\u8981\u5B58\u5728\u4E8E\u7236\u8868\u8FD0\u884C\u73AF\u5883\u4E0B\uFF0C\u4E14\u4E24\u8005\u4E0D\u80FD\u4E3A\u540C\u4E00\u6A21\u677F +T_Insert-Float=\u63D2\u5165\u60AC\u6D6E\u5143\u7D20 +BackgroundTexture-FishFossil=\u9C7C\u7C7B\u5316\u77F3 +My_Computer=\u6211\u7684\u7535\u8111 +FORMLET=\u8BBF\u95EE\u4E0D\u540C\u8868\u5355\u7684\u8DEF\u5F84\u7684\u53C2\u6570 +HF-Undefined=\u6CA1\u6709\u5B9A\u4E49 +Widget-User_Defined_Widget_Config=\u9884\u5B9A\u4E49\u63A7\u4EF6 +Report-Write_Attributes_Group_Warning=\u8BBE\u7F6E\u4E3A\u5355\u5143\u683C\u7EC4\u7684\u5404\u5B57\u6BB5\u4E2D\u7684\u5355\u5143\u683C\u4E2A\u6570\u5FC5\u987B\u76F8\u540C +Form-Single_quote=\u5355\u5F15\u53F7 +Compile_Success_And_Then_Save=\u7F16\u8BD1\u6210\u529F\u624D\u80FD\u6B63\u786E\u4FDD\u5B58 +FR-Designer_Layout-Padding=\u5185\u8FB9\u8DDD +Layout_Container=\u5E03\u5C40\u5BB9\u5668 +Admin=\u7BA1\u7406\u5458 +Form-EC_toolbar=\u62A5\u8868\u5757\u5DE5\u5177\u680F +FR-App-All_Auto=\u81EA\u52A8 +Utils-Available_Columns=\u53EF\u9009\u5217 +Form-Change_Widget_Name_Discription=\u8BF7\u8F93\u5165\u4E00\u4E2A\u65B0\u7684\u63A7\u4EF6\u540D +FR-Module_Designer=\u8BBE\u8BA1\u5668\u6A21\u5757 +FR-Import-Export_Text=\u6587\u672C\u6587\u4EF6(\u5236\u8868\u7B26\u5206\u9694) +Values-Editor=\u503C\u7F16\u8F91\u5668 +FR-Designer_Yes=\u662F +ExpandD-Expandable=\u53EF\u4F38\u5C55\u6027 +Tree-Return_Full_Path=\u7ED3\u679C\u8FD4\u56DE\u5B8C\u6574\u5C42\u6B21\u8DEF\u5F84 +FRFont-bolditalic=\u52A0\u7C97\u503E\u659C +FR-Base_StyleFormat_Sample=\u793A\u4F8B +Area_Value=\u533A\u57DF\u503C +FR-Designer-Plugin_Disable=\u7981\u7528 +Utils-Are_you_sure_to_remove_the_selected_item=\u4F60\u786E\u5B9E\u51B3\u5B9A\u5220\u9664\u9009\u4E2D\u7684\u9879 +Face_Write=\u586B\u62A5 +Poly-Report_Block=\u62A5\u8868\u7C7B\u578B\u805A\u5408\u5757 +Vgap=\u5782\u76F4\u95F4\u9699 +FR-Designer_HyperLink_Must_Alone_Reset=\u591A\u4E2A\u8D85\u94FE +DS-Class=\u7A0B\u5E8F +FR-Hyperlink_Please_Select_Reportlet=\u8BF7\u9009\u62E9\u7F51\u7EDC\u62A5\u8868 +FS_Report_Type=\u7C7B\u578B +HF-New_Line=\u6362\u884C\u7B26 +Privilege=\u6743\u9650 +Export-Offline-Html=\u8F93\u51FA\u79BB\u7EBFhtml\u62A5\u8868 +FR-Designer_open-new-form-tip=\u5F53\u524D\u6A21\u677F\u4E3A711\u4EE5\u4E0B\u7248\u672C\u5236\u4F5C\uFF0C\u65E0\u6CD5\u517C\u5BB9\uFF0C\u4E0D\u80FD\u6253\u5F00\u3002\u5047\u5982\u60F3\u6253\u5F00\u4FEE\u6539\u6B64\u8868\u5355\uFF0C\u8BF7\u4F7F\u7528\u5BF9\u5E94\u7248\u672C\u8BBE\u8BA1\u5668\u6253\u5F00\u3002 +FR-Designer-Widget-Style_Frame_Style=\u6846\u67B6\u6837\u5F0F +Present-No_Present=\u53D6\u6D88\u5F62\u6001\u8BBE\u7F6E +FR-Designer_Form-Password=\u5BC6\u7801 +X_Axis=X\u8F74 +FR-mobile_html_analysis=HTML5\u89E3\u6790 +M_Edit-Bring_to_Front=\u7F6E\u4E8E\u9876\u5C42(T) +Null_Value_Show=\u7A7A\u503C\u663E\u793A +Datasource-JNDI_DES=\u6CE8\u610F\:\u9700\u8981\u628A\u5305\u542BINITIAL_CONTEXT_FACTORY\u7C7B\u7684.jar\u6587\u4EF6\u590D\u5236\u5230\u8F6F\u4EF6\u5B89\u88C5\u76EE\u5F55\u4E0B\u7684/lib\u76EE\u5F55\u4E0B. +PrintP-Print_Preview=\u6253\u5370\u9884\u89C8 +Form-Hierarchy_Tree_Last=\u4E0A\u4E00\u4E2A +Has_been_gone=\ \u5DF2\u4E22\u5931\uFF0C\u662F\u5426\u589E\u52A0\u8BE5\u6837\u5F0F\uFF1F +RWA-Add_Field=\u6DFB\u52A0\u5B57\u6BB5 +newNode=\u65B0\u589E\u8282\u70B9 +PageSetup-Shrink_to_fit_content=\u6839\u636E\u5355\u5143\u683C\u5185\u5BB9\u81EA\u52A8\u8C03\u6574 +FR-Designer_Date=\u65E5\u671F +Column_Multiple=\u6570\u636E\u500D\u6570 +FR-App-All_File=\u6587\u4EF6 +Sort-Descending=\u964D\u5E8F +FR-Designer-Plugin_Delete=\u5220\u9664 +Above=\u4EE5\u4E0A\u7248\u672C +Utils-The-Chart=\u56FE\u8868 +FRFont-plain=\u5E38\u89C4 +Calculating=\u5904\u7406\u4E2D +Form-Object=\u8868\u5355\u5BF9\u8C61\: +May=\u4E94\u6708 +FR-Designer_Plugin_Normal_Update=\u66F4\u65B0 +FR-Hyperlink_Reportlet=\u7F51\u7EDC\u62A5\u8868 +M_Edit-Copy=\u590D\u5236(C) +Sub_Report_Message2=\u7236\u62A5\u8868\u4E0D\u5728\u5F53\u524D\u8FD0\u884C\u73AF\u5883\u4E0B +Sub_Report_Message3=\u4E0D\u80FD\u9009\u62E9\u81EA\u8EAB +Sub_Report_Message1=\u8BF7\u9009\u62E9\u6B63\u786E\u8DEF\u5F84 +Form-Allow_CustomData=\u5141\u8BB8\u81EA\u5B9A\u4E49\u503C +FR-Server_Version_Tip_MoreInfo=\u5EFA\u8BAE\u60A8\u6240\u5C5E\u56E2\u961F\u4F7F\u7528\u7684\u6211\u65B9FineReport\u4EA7\u54C1\u7684\u8BBE\u8BA1\u5668\u7248\u672C\u53F7\u4EE5\u53CA\u90E8\u7F72\u7684\u670D\u52A1\u5668\u7248\u672C\u53F7\u4FDD\u6301\u4E00\u81F4\uFF0C\u4EE5\u907F\u514D\u7248\u672C\u4E0D\u4E00\u81F4\u9020\u6210\u7684\u95EE\u9898\u98CE\u9669\u3002\n\u5047\u5982\u60A8\u6253\u5F00\u66F4\u9AD8\u8BBE\u8BA1\u5668\u7248\u672C\u5236\u4F5C\u7684\u6A21\u677F\uFF0C\u53EF\u80FD\u6253\u5F00\u51FA\u9519\uFF0C\u4E5F\u53EF\u80FD\u4E22\u5931\u539F\u6709\u6A21\u677F\u5C5E\u6027\u3002\u5047\u5982\u60A8\u5236\u4F5C\u7684\u6A21\u677F\u4F7F\u7528\u7684\u8BBE\u8BA1\u5668\u7248\u672C\u9AD8\u4E8E\u60A8\u6700\u7EC8\u90E8\u7F72\u6240\u7528\u7684\u670D\u52A1\u5668\u7248\u672C\uFF0C\u670D\u52A1\u5668\u53EF\u80FD\u65E0\u6CD5\u6B63\u5E38\u8F7D\u5165\u60A8\u5236\u4F5C\u7684\u6A21\u677F\u3002 +FR-Designer_Server-version-tip-moreInfo=\u5EFA\u8BAE\u60A8\u6240\u5C5E\u56E2\u961F\u4F7F\u7528\u7684\u6211\u65B9FineReport\u4EA7\u54C1\u7684\u8BBE\u8BA1\u5668\u7248\u672C\u53F7\u4EE5\u53CA\u90E8\u7F72\u7684\u670D\u52A1\u5668\u7248\u672C\u53F7\u4FDD\u6301\u4E00\u81F4\uFF0C\u4EE5\u907F\u514D\u7248\u672C\u4E0D\u4E00\u81F4\u9020\u6210\u7684\u95EE\u9898\u98CE\u9669\u3002\n\u5047\u5982\u60A8\u6253\u5F00\u66F4\u9AD8\u8BBE\u8BA1\u5668\u7248\u672C\u5236\u4F5C\u7684\u6A21\u677F\uFF0C\u53EF\u80FD\u6253\u5F00\u51FA\u9519\uFF0C\u4E5F\u53EF\u80FD\u4E22\u5931\u539F\u6709\u6A21\u677F\u5C5E\u6027\u3002\u5047\u5982\u60A8\u5236\u4F5C\u7684\u6A21\u677F\u4F7F\u7528\u7684\u8BBE\u8BA1\u5668\u7248\u672C\u9AD8\u4E8E\u60A8\u6700\u7EC8\u90E8\u7F72\u6240\u7528\u7684\u670D\u52A1\u5668\u7248\u672C\uFF0C\u670D\u52A1\u5668\u53EF\u80FD\u65E0\u6CD5\u6B63\u5E38\u8F7D\u5165\u60A8\u5236\u4F5C\u7684\u6A21\u677F\u3002 +Get_Lock=\u52A0\u9501 +HF-Edit_Footer=\u7F16\u8F91\u9875\u811A +Datasource-New_Charset=\u65B0\u7F16\u7801 +Preference-Custom=\u81EA\u5B9A\u4E49 +BackgroundTexture-Newsprint=\u65B0\u95FB\u7EB8 +ConditionB-Add_bracket=\u6DFB\u52A0\u62EC\u53F7 +Datasource-Connection_successfully=\u8FDE\u63A5\u6210\u529F +Function-The_class_must_implement_the_interface=\u8BE5\u7C7B\u5FC5\u987B\u5B9E\u73B0\u63A5\u53E3 +FR-Designer_ChartF-Transparency=\u900F\u660E +Crimson=\u6DF1\u7EA2 +FR-Hyperlink_Dialog=\u5BF9\u8BDD\u6846 +FR-Designer_Covered_All=\u5168\u90E8\u8986\u76D6 +Hyperlink-New_Window=\u65B0\u7A97\u53E3 +Style_Name=\u683C\u5F0F\u540D +CSS_warning=\ \u76F8\u5BF9\u62A5\u8868\u5DE5\u7A0B\u76EE\u5F55\u5982WebReport,\u5982WebReport\\css\u4E0B\u6709\u5F15\u7528\u7684css\u6587\u4EF6test.css\uFF0C\u5219\u76F8\u5BF9\u8DEF\u5F84\u4E3Acss/test.css +FR-Base_Column=\u5217 +Three_Rows_Of_Two_Grid=\u4E09\u884C\u4E24\u5217\u7684\u683C\u5B50 +DBCP_VALIDATION_QUERY=SQL\u9A8C\u8BC1\u67E5\u8BE2 +M_Edit-Clear_Formats=\u683C\u5F0F(F) +Parameter_Setting=\u53C2\u6570\u8BBE\u7F6E +Related=\u8054\u52A8 +BorderLayout-Constraints=\u4F4D\u7F6E +Write_Preview=\u586B\u62A5\u9884\u89C8 +PageSetup-Page_Order=\u6253\u5370\u987A\u5E8F +Verify-Verify_Formula=\u6821\u9A8C\u516C\u5F0F +State=\u7701\u5E02 +FR-Designer-Widget-Style_Body_Background=\u4E3B\u4F53\u80CC\u666F +FR-App-Privilege_No=\u6CA1\u6709\u6743\u9650 +Please_Drag_ParaPane= +Come_True=\u5B9E\u73B0 +ISEMPTY=\u4E3A\u7A7A +Background-Texture=\u7EB9\u7406 +FR-Designer_Verify-Message=\u9519\u8BEF\u4FE1\u606F +Locked=\uFF08\u5DF2\u9501\u5B9A\uFF09 +Utils-Design-Action_Cancel=\u53D6\u6D88 +Image-Titled=\u5E73\u94FA +Gradient-Direction=\u6E10\u53D8\u65B9\u5411 +Green=\u9752\u7EFF +Report_Engine=\u62A5\u8868\u5F15\u64CE +Return-String=\u8FD4\u56DE\u5B57\u7B26\u4E32 +Margin=\u8FB9\u8DDD +Pitch_Percentage=\u95F4\u8DDD\u767E\u5206\u6BD4 +FR-Base_TurnOff=\u5173\u95ED +Utils-has_been_existed=\u5DF2\u5B58\u5728 +HF-Insert_Formula=\u63D2\u5165\u516C\u5F0F +Utils-Exit_Designer=\u9000\u51FA\u8BBE\u8BA1\u5668 +Formula_Dictionary_Display=\u5BF9\u4E8E\u4E0A\u9762\u5B9E\u9645\u503C\u8303\u56F4\u5185\u7684\u6BCF\u4E2A\u503C($$$)\uFF0C\u5176\u663E\u793A\u503C\u4E3A +PageSetup-Left_to_right=\u5148\u884C\u540E\u5217 +Utils-Import_Excel_Data=\u5BFC\u5165[Excel] +M-Save=\u4FDD\u5B58 +redo=\u91CD\u505A +Status=\u72B6\u6001 +Draw=\u7ED8\u5236 +FR-Designer_Message=\u4FE1\u606F +Records=\u6761\u8BB0\u5F55 +FR-Designer_ComboBox=\u4E0B\u62C9\u6846 +Driver=\u9A71\u52A8\u5668 +Template_Parameters=\u6A21\u677F\u53C2\u6570 +Form-Remove_Repeat_Data=\u53BB\u9664\u91CD\u590D\u6570\u636E +ECP_decode=\u6A21\u677F\u89E3\u5BC6 +Area_Name=\u533A\u57DF\u540D +Others=\u5176\u5B83 +Merge=\u5408\u5E76 +BackgroundTexture-Parchment=\u7F8A\u76AE\u7EB8 +BindColumn-Bottom_N=\u540EN\u4E2A +Frame=\u6846\u67B6 +Bottom_Border_Line=\u4E0B\u6846\u7EBF +Muiti_In=\u591A\u5C42\u94BB\u53D6 +FR-Designer-Dependence_Install_Online=\u5728\u7EBF\u5B89\u88C5\u4F9D\u8D56\u73AF\u5883 +Use_Default_ToolBar=\u4F7F\u7528\u9ED8\u8BA4\u5DE5\u5177\u680F +M_Server-Platform_Manager=\u62A5\u8868\u5E73\u53F0\u7BA1\u7406 +PageSetup-inches=\u82F1\u5BF8 +Form-Widget_Property=\u5C5E\u6027\u540D +FR-Layout_Padding=\u5185\u8FB9\u8DDD +Schema=\u4E3B\u9898 +Server_Path=\u4E3B\u673A\u4F4D\u7F6E +Condition_Display=\u6761\u4EF6\u663E\u793A +FR-Server-Design_template_unopened=\u65E0\u6CD5\u6253\u5F00\u6A21\u7248 +Function-Function_Class_Name=\u51FD\u6570\u7C7B\u540D +Schedule-Template=\u6A21\u677F\u540D\u79F0 +Tree_Data_Field=\u6811\u6570\u636E\u5B57\u6BB5 +Border-Style-Normal=\u76F4\u89D2\u8FB9\u6846 +Top_And_Double_Bottom_Border_Line=\u4E0A\u6846\u7EBF\u548C\u53CC\u4E0B\u6846\u7EBF +FR-Server_Embedded_Server_Start=\u5167\u7F6E\u7684\u670D\u52A1\u5668-\u6253\u5F00 +FR-Designer-Basic_Restart_Designer_Later=\u7A0D\u540E\u91CD\u542F +StyleAlignment-Top=\u9760\u4E0A +ReportServerP-First=\u9996\u9875 +Not_Exist=\u4E0D\u5B58\u5728 +FR-Remote_File_is_Locked=\u60A8\u6240\u8981\u6253\u5F00\u7684\u62A5\u8868\u6B63\u5728\u88AB\u5176\u4ED6\u4EBA\u7F16\u8F91\uFF0C\u8BF7\u7A0D\u5019\u6253\u5F00 +Apply=\u5E94\u7528 +Sytle-Indentation=\u7F29\u8FDB +Parameter-Float=\u5355\u7CBE\u5EA6\u578B +HF-Center_Section=\u4E2D\u95F4\u533A\u57DF +Form-Double_quotes=\u53CC\u5F15\u53F7 +M_File-Export-Word=Word\u683C\u5F0F +M_File-Export-Text=\u6587\u672C\u6587\u4EF6(\u5236\u8868\u7B26\u5206\u9694) +PageSetup-First_Page_Number=\u8D77\u59CB\u9875\u7801 +Execute=\u6267\u884C +Task=\u4EFB\u52A1 +Custom_Button_Type_Submit=\u63D0\u4EA4 +FR-Designer-Widget_Settings=\u63A7\u4EF6\u8BBE\u7F6E +IS_Need_Password=\u9700\u8981\u5BC6\u7801 +PageSetup-Horizontally=\u6C34\u5E73\u5C45\u4E2D +No_Editor_Property_Definition=\u8BE5\u7F16\u8F91\u5668\u6CA1\u6709\u5C5E\u6027\u5B9A\u4E49 +Env-Remote_Server=\u8FDC\u7A0B\u670D\u52A1\u5668 +FR-Utils_Background=\u80CC\u666F +FR-Designer-Plugin_Warning=\u8B66\u544A +Server-version-info=\u60A8\u5F53\u524D\u6253\u5F00\u7684\u6A21\u677F\u6587\u4EF6\u662F\u7531\u66F4\u9AD8\u7248\u672C\u7684\u8BBE\u8BA1\u5668\u5236\u4F5C\u7684\uFF0C\u6253\u5F00\u4F1A\u6709\u51FA\u9519\u6216\u8005\u4E22\u5931\u539F\u6709\u6A21\u677F\u5C5E\u6027\u7684\u98CE\u9669\u3002 \u5047\u5982\u9700\u8981\u6253\u5F00\u6B64\u6A21\u677F\u8BF7\u60A8\u5C06\u60A8\u7684\u8BBE\u8BA1\u5668\u5347\u7EA7\u81F3 +CellWrite-Page_After_Row=\u884C\u540E\u5206\u9875 +HF-Right_Section=\u53F3\u533A\u57DF +PageSetup-Title_Start_Row=\u91CD\u590D\u6807\u9898\u884C +From=\u4ECE\u7B2C +Preference-Grid_Line_Color=\u7F51\u683C\u7EBF\u989C\u8272 +RowTo=\u884C\u81F3\u7B2C +FR-Designer_ReportColumns-Repeat_Column=\u590D\u5236\u5217\u5E8F\u5217 +M_Server-Function_Manager=\u51FD\u6570\u7BA1\u7406\u5668 +KeyWord=\u5173\u952E\u5B57 +DS-Multi_Dimensional_Database=\u591A\u7EF4\u6570\u636E\u5E93 +BiasD-Slope_Line=\u659C\u7EBF +Tue=\u4E8C +ReportServerP-Last=\u672B\u9875 +FR-Base_Columns=\u5217 +SpecifiedG-Leave_in_their_own_groups=\u7559\u5728\u5404\u81EA\u7684\u7EC4\u5185 +LOG-Please_Wait=\u8BF7\u7A0D\u5019 +Form-ToolBar=\u8868\u5355\u5DE5\u5177\u680F +FR-Base_sure_remove_item=\u4F60\u786E\u5B9E\u51B3\u5B9A\u5220\u9664\u9009\u4E2D\u7684\u9879 +Component_Scale=\u7EC4\u4EF6\u7F29\u653E +Hyperlink-Use_CJK_to_encode_parameter=\u4F7F\u7528CJK\u5904\u7406\u53C2\u6570 +LOG-Has_Been_Openned=\u5DF2\u7ECF\u6253\u5F00 +FR-Designer-Dependence=\u4F9D\u8D56\u73AF\u5883 +ECP_error_pwd=\u5BC6\u7801\u9519\u8BEF +REPORTLET=\u8BBF\u95EE\u6A21\u677F\u7684\u8DEF\u5F84\u7684\u53C2\u6570\u3002 +RWA-Column_Offset=\u5217\u504F\u79FB +Forecast=\u9884\u6D4B +Light_Orange=\u6D45\u6A58\u9EC4 +StyleAlignment-Vertical=\u5782\u76F4\u5BF9\u9F50 +Form-List=\u5217\u8868 +ParameterD-Show_Parameter_Window=\u663E\u793A\u53C2\u6570\u7A97\u4F53 +FR-Designer_Set_Submit_Event=\u8BBE\u7F6E\u63D0\u4EA4\u4E8B\u4EF6 +Value_Percent=\u503C\u6240\u5360\u6BD4\u4F8B +DBCP_MIN_EVICTABLE_IDLE_TIMEMILLIS=\u4FDD\u6301\u7A7A\u95F2\u6700\u5C0F\u65F6\u95F4\u503C +Function-The_class_must_be_located_in=\u8BE5\u7C7B\u5FC5\u987B\u653E\u7F6E\u5728 +FR-Action_Sort=\u6392\u5E8F +DataFunction-Average=\u5E73\u5747 +FR-Designer_Show_in_Containing_Folder=\u6253\u5F00\u6240\u5728\u6587\u4EF6\u5939 +M_File-Export-Excel=Excel\u683C\u5F0F +DataFunction-Max=\u6700\u5927\u503C +FR-Designer_Form-Widget_Name=\u63A7\u4EF6\u540D +FS_End_Date=\u7ED3\u675F\u65E5\u671F +Export-Excel-Simple=\u539F\u6837\u5BFC\u51FA +ColumnTo=\u5217\u81F3\u7B2C +SpecifiedG-Discard_all_others=\u4E22\u5F03\u5176\u5B83\u6240\u6709\u7684 +DS-TableData=\u6570\u636E\u96C6 +Form-DataTable=\u6570\u636E\u8868 +Sub_Report_ToolTips=\u5B50\u62A5\u8868\u63D0\u793A +Right_Top=\u53F3\u4E0A +M_Edit-Merge_Cell=\u5408\u5E76\u5355\u5143\u683C +FR-Designer_Restore_Default=\u6062\u590D\u9ED8\u8BA4 +Component_Interval=\u7EC4\u4EF6\u95F4\u9694 +Cover_None=\u5168\u4E0D\u8986\u76D6 +Datasource-From_Database=\u6570\u636E\u5E93\u8868 +Folder=\u76EE\u5F55 +Form-Allow_Edit=\u5141\u8BB8\u76F4\u63A5\u7F16\u8F91 +M_Edit-Clear=\u6E05\u9664(A) +ParentCell_Setting=\u7236\u683C\u8BBE\u7F6E +Only_selected_cell_can_paste_only=\u53EA\u6709\u9009\u4E2D\u5355\u5143\u683C\u65F6\u624D\u53EF\u4EE5\u7C98\u8D34 +M_Report-Report_Columns=\u62A5\u8868\u5206\u680F +Unit_Hundred=\u767E +FR-Designer_DataTable-Build=\u6781\u901F\u5206\u5C42\u6784\u5EFA +Widget-Form_Widget_Config=\u8868\u5355\u63A7\u4EF6 +Server-version-tip-moreInfo=\u5EFA\u8BAE\u60A8\u6240\u5C5E\u56E2\u961F\u4F7F\u7528\u7684\u6211\u65B9FineReport\u4EA7\u54C1\u7684\u8BBE\u8BA1\u5668\u7248\u672C\u53F7\u4EE5\u53CA\u90E8\u7F72\u7684\u670D\u52A1\u5668\u7248\u672C\u53F7\u4FDD\u6301\u4E00\u81F4\uFF0C\u4EE5\u907F\u514D\u7248\u672C\u4E0D\u4E00\u81F4\u9020\u6210\u7684\u95EE\u9898\u98CE\u9669\u3002\n\u5047\u5982\u60A8\u6253\u5F00\u66F4\u9AD8\u8BBE\u8BA1\u5668\u7248\u672C\u5236\u4F5C\u7684\u6A21\u677F\uFF0C\u53EF\u80FD\u6253\u5F00\u51FA\u9519\uFF0C\u4E5F\u53EF\u80FD\u4E22\u5931\u539F\u6709\u6A21\u677F\u5C5E\u6027\u3002\u5047\u5982\u60A8\u5236\u4F5C\u7684\u6A21\u677F\u4F7F\u7528\u7684\u8BBE\u8BA1\u5668\u7248\u672C\u9AD8\u4E8E\u60A8\u6700\u7EC8\u90E8\u7F72\u6240\u7528\u7684\u670D\u52A1\u5668\u7248\u672C\uFF0C\u670D\u52A1\u5668\u53EF\u80FD\u65E0\u6CD5\u6B63\u5E38\u8F7D\u5165\u60A8\u5236\u4F5C\u7684\u6A21\u677F\u3002 +Actions=\u4EFB\u52A1 +FR-Designer-Dependence_Connect_Server_Error=\u65E0\u6CD5\u8FDE\u63A5\u670D\u52A1\u5668\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5 +High=\u9AD8 +HJS-Send_Failed=\u53D1\u9001\u5931\u8D25 +HJS-Message=\u5185\u5BB9 +File-Allow_Upload_Files=\u5141\u8BB8\u4E0A\u4F20\u6587\u4EF6\u7C7B\u578B +FR-Designer-Form-ToolBar_Chart=\u56FE\u8868 +Thick_Bottom_Border_Line=\u7C97\u5E95\u6846\u7EBF +FR-Action_Remove=\u5220\u9664 +FRFont-Style=\u5B57\u5F62 +Select_DataColumn=\u9009\u62E9\u6570\u636E\u5217 +StartValue=\u5F00\u59CB\u503C +SINGLE_FILE_UPLOAD=\u53EA\u652F\u6301\u5355\u6587\u4EF6\u4E0A\u4F20 +BackgroundTexture-Cork=\u8F6F\u6728\u585E +M_Format-Data_Map=\u6570\u636E\u5B57\u5178 +FR-mobile_native_analysis=\u539F\u751F\u89E3\u6790 +HighLight=\u9AD8\u5149 +FR-Designer_Dropdown-More-Preview=\u4E0B\u62C9\u83B7\u53D6\u66F4\u591A\u9884\u89C8\u65B9\u5F0F +local=\u672C\u5730 +FR-Designer_Gradation=\u5C42\u6B21 +PageSetup-Finis_Start_Column=\u91CD\u590D\u7ED3\u5C3E\u5217 +Env-Invalid_User_and_Password=\u975E\u6CD5\u7684\u7528\u6237\u540D\u6216\u5BC6\u7801 +FR-Designer-Plugin_All_Plugins=\u5168\u90E8\u63D2\u4EF6 +FR-Designer_Prepare_Export=\u5F00\u59CB\u5BFC\u51FA\uFF0C\u8BF7\u7A0D\u5019 +DBCP_TEST_ON_RETURN=\u5F52\u8FD8\u8FDE\u63A5\u524D\u68C0\u9A8C +no-alternatives=\u6CA1\u6709\u9009\u62E9\u9879 +FR-Designer_Submmit_WClass=\u540E\u53F0\u7C7B\u63D0\u4EA4 +M_Insert-Slope_Line=\u63D2\u5165\u659C\u7EBF +FR-Designer-Plugin_Plugin_Description=\u63D2\u4EF6\u63CF\u8FF0 +ExpandD-Not_Expand=\u4E0D\u6269\u5C55 +Utils-Bottom_to_Top=\u4ECE\u4E0B\u5230\u4E0A +Collect-Click\!_Get_user_information_code=\u70B9\u51FB\!\u83B7\u53D6\u6FC0\u6D3B\u7801 +FR-Already_exist=\u5F53\u524D\u73AF\u5883\u5DF2\u5B58\u5728\: +Send=\u53D1\u9001 +M_Edit-Clear_All=\u5168\u90E8(A) +Brown_Orange=\u68D5\u9EC4 +PageSetup-Portrait=\u7EB5\u5411 +FR-Designer_Form-RadioGroup=\u5355\u9009\u6309\u94AE\u7EC4 +FR-Utils-App_AllFiles=\u6240\u6709\u6587\u4EF6 +Popup=\u5F39\u51FA +Server_Charset=\u670D\u52A1\u5668\u7F16\u7801 +CellWrite-Repeat_Content_When_Paging=\u5206\u9875\u65AD\u5F00\u65F6\u503C\u91CD\u590D\u663E\u793A +Utils-No_Pagination=\u4E0D\u5206\u9875 +Form-NullLayout=\u7EDD\u5BF9\u5B9A\u4F4D +ConditionB-Remove_bracket=\u53BB\u6389\u62EC\u53F7 +email=\u90AE\u7BB1 +Minute=\u5206\u949F +FR-Designer-Plugin_Update=\u63D2\u4EF6\u66F4\u65B0 +alraedy_close=\u5DF2\u7ECF\u5173\u95ED +ComboCheckBox-End_Symbol=\u7ED3\u675F\u7B26 +DataColumn=\u6570\u636E\u5217 +Form-Password=\u5BC6\u7801 +FR-Background_Image_Adjust=\u9002\u5E94 +Export-Excel-PageToSheet=\u5206\u9875\u5206Sheet\u5BFC\u51FA +Edit-Row_Count=\u884C\u6570 +DS-Report_TableData=\u6A21\u677F\u6570\u636E\u96C6 +Sche-Hour=\u65F6 +Group_Count=\u8868\u793A\u603B\u4E2A\u6570 +EndValue=\u7ED3\u675F\u503C +FR-Designer_Sytle-Indentation=\u7F29\u8FDB +DownBarBorderStyleAndColor=\u8DCC\u67F1\u6837\u5F0F +World=\u4E16\u754C +FR-Designer-Basic_Cancel=\u53D6\u6D88 +Finally=\u6700\u540E +Low=\u4F4E +Please_Input_The_Key=\u8BF7\u8F93\u5165\u5BF9\u5E94\u5730\u56FE\u4F7F\u7528\u7684key +Smart=\u667A\u80FD +Preference-Predefined=\u9884\u5B9A\u4E49 +Current_custom_global=\u5F53\u524D\u62A5\u8868\u6240\u7528\u81EA\u5B9A\u4E49\u5168\u5C40\u6837\u5F0F +FR-Designer-Plugin_Shop_Need_Install=\u60A8\u8FD8\u6CA1\u6709\u63D2\u4EF6\u5546\u5E97\u7684\u8D44\u6E90,\u662F\u5426\u4E0B\u8F7D? +WEB-Pagination_Setting=\u5206\u9875\u9884\u89C8\u8BBE\u7F6E +RCodeDrawPix=\u50CF\u7D20 +FR-Designer-Widget-Style_Alpha=\u4E0D\u900F\u660E\u5EA6 +BorderLayout-North=\u5317 +HJS-Current_Page=\u5F53\u524D\u9875 +Compile=\u7F16\u8BD1 +Show_Blank_Row=\u8865\u5145\u7A7A\u767D\u884C +TableData_Dynamic_Parameter_Setting=\u52A8\u6001\u53C2\u6570\u6CE8\u5165 +FR-Background_Image_Default=\u9ED8\u8BA4 +BackgroundTexture-WhiteMarble=\u767D\u8272\u5927\u7406\u77F3 +DataFunction-Sum=\u6C42\u548C +Collect-The_user_information_code_is_invalid=\u8FD9\u4E2A\u6FC0\u6D3B\u7801\u662F\u65E0\u6548\u7684, \u8BF7\u5230\u5B98\u7F51\u7533\u8BF7 +Preference-Locale=\u56FD\u9645\u5316 +M_File-Export-PDF=PDF\u683C\u5F0F +BiasD-From-lower_left_to_upper_right=\u4ECE\u5DE6\u4E0B\u5230\u53F3\u4E0A\u53D1\u6563 +Border-Style=\u8FB9\u6846\u6837\u5F0F +Sort=\u6392\u5E8F +Image-Image_Layout=\u56FE\u7247\u5E03\u5C40 +Panel=\u9762\u677F +FR-Designer-Basic_Copy_Build_NO_OK=\u6784\u5EFA\u7248\u672C\u53F7\u5DF2\u7ECF\u590D\u5236\u5230\u526A\u8D34\u677F +All_Border_Line=\u6240\u6709\u6846\u7EBF +FR-Utils-Please_Input_a_New_Name=\u8BF7\u8F93\u5165\u65B0\u7684\u540D\u5B57 +FR-Base_Formula_Plugin=\u63D2\u4EF6\u51FD\u6570 +Two_Rows_Of_Three_Grid=\u4E24\u884C\u4E09\u5217\u7684\u683C\u5B50 +FR-Designer_Certificate_Pass=https\u79D8\u94A5 +Bubble-Series_Name=\u7CFB\u5217\u540D +M-New_Multi_Report=\u65B0\u5EFA\u805A\u5408\u62A5\u8868(M) +BackgroundTexture-PinkTissuePaper=\u7C89\u8272\u7802\u7EB8 +Preference-Support_Default_Parent_Calculate=\u9ED8\u8BA4\u7236\u683C\u8BA1\u7B97 +Show_Blank_Column=\u8865\u5145\u7A7A\u767D\u5217 +BaiduMap=\u767E\u5EA6\u5730\u56FE +Report-Web_Attributes=\u6A21\u677FWeb\u5C5E\u6027 +FR-Designer_StyleAlignment-Wrap_Text=\u81EA\u52A8\u6362\u884C +Need=\u9700\u8981 +Parameter-Double=\u53CC\u7CBE\u5EA6\u578B +Config_Servlet=\u914D\u7F6E\u8FDC\u7A0B\u670D\u52A1\u5668 +Form-Comma=\u9017\u53F7 +Verify=\u6821\u9A8C +PageSetup-Landscape=\u6A2A\u5411 +Weeks=\u4E2A\u661F\u671F +FR-Designer-Widget-Style_Title_Background=\u6807\u9898\u80CC\u666F +Preference-Pagination_Line_Color=\u5206\u9875\u7EBF\u989C\u8272 +Test_URL=\u6D4B\u8BD5\u8FDE\u63A5 +Fill_blank_Data=\u8865\u5145\u7A7A\u767D\u6570\u636E +ReportServerP-The_name_of_printer_cannot_be_null=\u6253\u5370\u673A\u7684\u540D\u5B57\u4E0D\u80FD\u4E3A\u7A7A +FR-Designer-Basic_Copy_Activation_Key=\u53CC\u51FB\u8BBE\u8BA1\u5668\u7F16\u53F7\u53EF\u590D\u5236\u5230\u526A\u8D34\u677F +Continuum=\u76F8\u90BB\u8FDE\u7EED +BackgroundTexture-MediumWood=\u6DF1\u8272\u6728\u8D28 +Datasource-Column_Index=\u5217\u5E8F\u53F7 +Function-Function_File=\u51FD\u6570\u6587\u4EF6 +Form-Component_Bounds=\u63A7\u4EF6\u8FB9\u754C +Utils-Submit=\u63D0\u4EA4 +Conditions_formula=\u6761\u4EF6\u516C\u5F0F +M_Insert-Image=\u63D2\u5165\u56FE\u7247 +FR-Designer-Plugin_Will_Be_Delete=\u63D2\u4EF6\u5C06\u88AB\u5220\u9664\uFF0C\u9700\u91CD\u542F\u8BBE\u8BA1\u5668\u53CA\u670D\u52A1\u5668\uFF0C\u670D\u52A1\u5668\u9700\u624B\u52A8\u91CD\u542F +FormulaD-Functions=\u51FD\u6570 +Mobile_Terminal=\u79FB\u52A8\u7AEF +CheckBox=\u590D\u9009\u6846 +FR-Designer-Plugin_Install=\u5B89\u88C5 +Sun=\u65E5 +FR-Designer_ToolBar_Bottom=\u5E95\u90E8\u5DE5\u5177\u680F +Widget-Width=\u63A7\u4EF6\u5BBD\u5EA6 +Series_Name=\u7CFB\u5217\u540D +Set_Row_Title_Start=\u8BBE\u7F6E\u91CD\u590D\u6807\u9898\u884C +HF-Default_Page=\u9ED8\u8BA4\u9875 +Env_Des=\u5982\u679C\u767B\u5F55\u73AF\u5883\u4E2D\u7684\u62A5\u8868\u5DE5\u7A0B\u542F\u7528\u4E86\u6743\u9650,\u7528\u6237\u540D\u548C\u5BC6\u7801\u7684\u586B\u5199\u5FC5\u987B\u5BF9\u5E94\u767B\u9646\u73AF\u5883\u7684\u7528\u6237\u548C\u5BC6\u7801\u3002 +Widget-User_Defined=\u9884\u5B9A\u4E49 +Url_location=\u7EDD\u5BF9\u8DEF\u5F84 +Disk_File=\u78C1\u76D8\u6587\u4EF6 +Inside=\u5185\u90E8 +FR-Designer_filedChosen=\u4F9D\u8D56\u7684\u5B57\u6BB5 +ServerM-Predefined_Styles=\u9884\u5B9A\u4E49\u6837\u5F0F +is_need_word_adjust=\u4E0D\u56FA\u5B9A\u884C\u9AD8\u5BFC\u51FA +Background-Null=\u6CA1\u6709\u80CC\u666F +PageSetup-Vertically=\u5782\u76F4\u5C45\u4E2D +FR-Designer_Root=\u6839\u8282\u70B9 +FR-Designer_Form-TextArea=\u6587\u672C\u57DF +ReportServerP-Import_JavaScript=\u5F15\u7528JavaScript +Form-TableTree=\u8868\u683C\u6811 +Opened=\u5DF2\u5F00\u542F +M_Edit-Delete=\u5220\u9664(D) +Widget-Form_Widget_Container=\u8868\u5355\u5BB9\u5668 +BindColumn-Summary=\u6C47\u603B +Sche-Second=\u79D2 +Server-Open_Service_Manager=\u6253\u5F00\u670D\u52A1\u7BA1\u7406\u5668 +FRFont-Effects=\u7279\u6B8A\u6548\u679C +OtherGroup_Name=\u5176\u4ED6\u7EC4\u7684\u540D\u5B57 +Specify=\u6307\u5B9A +Highlight-Click_to_Choose_Property_To_Modify=\u70B9\u51FB\u9009\u62E9\u8981\u6539\u53D8\u7684\u5C5E\u6027 +triggered=\u88AB\u89E6\u53D1 +Double_Bottom_BorderLine=\u53CC\u5E95\u6846\u7EBF +M_Insert-Sub_Report=\u63D2\u5165\u5B50\u62A5\u8868 +Unit_Ten=\u5341 +Polybolck=\u805A\u5408\u5757 +Select_sort_order=\u9009\u62E9\u6392\u5217\u987A\u5E8F +HJS-Mail_to=\u6536\u4EF6\u4EBA +StyleAlignment-Left=\u9760\u5DE6 +Two_Rows_Of_Two_Grid=\u4E24\u884C\u4E24\u5217\u7684\u683C\u5B50 +FR-Designer-Form-Please_Drag_ParaPane=\u8BF7\u62D6\u5165\u53C2\u6570\u9762\u677F +Milliseconds=\u6BEB\u79D2 +DataFunction-None=\u65E0 +Delivery=\u4F20\u9012 +ColumnSpan=\u5217\u8DE8\u5EA6 +StyleAlignment-Bottom=\u9760\u4E0B +Read_failure=\u8BFB\u53D6\u5931\u8D25\uFF0C\u53EF\u80FD\u6E90\u6587\u4EF6\u5DF2\u635F\u574F +Verify-Verify=\u6570\u636E\u6821\u9A8C +FR-Designer-Widget-Style_Title_Format=\u6807\u9898\u683C\u5F0F +FR-Designer_Edit_String_To_Formula=\u662F\u5426\u5C06\u5B57\u7B26\u4E32\u7F16\u8F91\u4E3A\u516C\u5F0F +FR-Base_UnSignIn=\ \u672A\u767B\u5F55 +Every=\u6BCF +CellWrite-Preview_Cell_Content=\u9884\u89C8\u5355\u5143\u683C\u5185\u5BB9 +FormulaD-Data_Fields=\u6570\u636E\u9879 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 92897929a..674a95f90 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -508,7 +508,6 @@ FR-Designer_Create_Tree=\u69CB\u5EFA\u6A39 FR-Designer_Set_Callback_Function=\u8A2D\u7F6E\u56DE\u8ABF\u51FD\u6578 FR-Designer_ConfirmDialog_Content=\u662F\u5426\u78BA\u5B9A\u522A\u9664TAB\u63A7\u4EF6 FR-Designer_ConfirmDialog_Title=FineReport 8.0 - 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_FormulaPane_Variables=\u8B8A\u91CF FR-Designer_FormulaPane_Formula_Description=\u516C\u5F0F\u8AAA\u660E @@ -517,13 +516,11 @@ FR-Designer_FormulaPane_Search=\u641C\u7D22 FR-Designer_Tab_carousel=Tab\u8F2A\u64AD FR-Designer_setCarousel=\u958B\u555F\u8F2A\u64AD FR-Designer_carouselInterval=\u8F2A\u64AD\u9593\u9694 - 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 @@ -539,7 +536,6 @@ 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}" \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 @@ -600,3 +596,1390 @@ FR-Designer_Delete_Template= FR-Designer_Download_Template= FR-Designer_DoubleLayer_Report= FR-Designer_Validate= +CellWrite-InsertRow_NULL=\u7A7A\u503C +DashBoard-ChartFloat=\u5716\u8868 +contact_info=\u806F\u7E6B\u8A0A\u606F(\u9078\u586B) +Page_Setup=\u9801\u9762\u8A2D\u5B9A +CellWrite-Print_Export=\u5217\u5370\u532F\u51FA +Cannot_Get_Date=\u4E0D\u80FD\u7372\u53D6\u65E5\u671F +FR-Designer_Modify=\u4FEE\u6539 +M-Write_Preview=\u586B\u5831\u9810\u89BD +FR-Base_RWA-Key=\u4E3B\u9375 +China=\u4E2D\u570B +Set_Legend_Sytle=\u8A2D\u5B9A\u5716\u4F8B\u683C\u5F0F +FR-Designer_Number=\u6578\u5B57 +FR-Designer-Widget-Style_Common=\u666E\u901A +M-Save_As=\u53E6\u5B58\u70BA +Following_parameters_are_not_generated=\u4EE5\u4E0B\u53C3\u6578\u672A\u751F\u6210 +FR-Designer-Basic_Activation_Key_Copy_OK=Key has been copy to clipboard +Utils-Current_Sheet=\u7576\u524D\u7684Sheet +ConditionB-is_less_than=\u5C0F\u65BC +BorderLayout-West=\u897F +AnalysisLine=\u5206\u6790\u7DDA\u578B +Layer_Report_Warnning_info=\u5217\u5F0F\u5F15\u64CE\u9069\u7528\u65BC\u5927\u8CC7\u6599\u91CF\u60C5\u5F62\u4E0B\u3002
\u4F7F\u7528\u6B64\u5F15\u64CE\u5F88\u591A\u5831\u8868\u7279\u6027\u5C07\u4E0D\u518D\u652F\u6301\uFF0C
\u8A73\u7D30\u5167\u5BB9\u8ACB\u898B\u76F8\u95DC\u6587\u6A94\u3002 +Tree-Width=\u5BEC\u5EA6 +alert_word=\u9078\u64C7\u4E0D\u56FA\u5B9A\u5217\u9AD8\u532F\u51FA\u6642, \u7DE8\u8F2F\u532F\u51FA\u7684word, \u5132\u5B58\u683C\u5217\u9AD8\u6703\u96A8\u8457\u5167\u5BB9\u81EA\u52D5\u62C9\u4F38, \u6B64\u60C5\u6CC1\u4E0B\u532F\u51FA\u7D50\u679C\u8207\u9810\u89BD\u7D50\u679C\u53EF\u80FD\u6703\u4E0D\u518D\u4E00\u81F4. +PageSetup-Paper_Size=\u7D19\u5F35\u5927\u5C0F +M-Page_Setup=\u9801\u9762\u8A2D\u5B9A +DashBoard-FormBook=\u8868\u55AE +X-Coordinate=\u6A6B\u5EA7\u6A19 +Style-Line_Spacing=\u5217\u9593\u8DDD +FR-Designer_Plugin_Should_Update_Title=Warning +Server-Define_Data_Connection=\u5B9A\u7FA9\u8CC7\u6599\u9023\u63A5 +BarInside=\u67F1\u5B50\u5167\u5074 +Border-Color=\u6846\u7DDA\u984F\u8272 +NotAllow=\u4E0D\u5408\u6CD5 +Utils-File_type=\u6A94\u6848\u985E\u578B +FR-Designer-Plugin_Install_From_Local=Install plugin from local file +Summary_Method=\u532F\u7E3D\u65B9\u5F0F +Select_Specified_Grouping=\u9078\u64C7\u81EA\u5B9A\u7FA9\u5206\u7D44 +HF-Number_of_Page=\u7E3D\u9801\u6578 +FR-Designer-Tree_Height=\u9AD8\u5EA6 +Owner=\u4E3B +Home=\u4E3B\u9801 +FR-Server_Embedded_Server_Stop=\u5167\u7F6E\u7684\u4F3A\u670D\u5668-\u505C\u6B62 +FR-Designer-Plugin_Detecting_Update=Detecting update +HF-Whether_to_define_the_selected_type=\u662F\u5426\u5B9A\u7FA9\u9078\u4E2D\u7684\u985E\u578B +StyleAlignment-Right=\u9760\u53F3\u5C0D\u9F4A +FR-Designer_Alignment-Style=\u5C0D\u9F4A\u65B9\u5F0F +PageSetup-Title_Start_Column=\u91CD\u8907\u6A19\u984C\u6B04 +Tree-Mutiple_Selection_Or_Not=\u591A\u9078 +FR-Designer-Plugin_Search=Search +Choose_Role=\u6B0A\u9650\u63A7\u5236 +Append_Delete_Row_Message=\u6CE8\u610F\uFF01\u6307\u5B9A\u7684\u5132\u5B58\u683C\u9700\u8981\u8A2D\u5B9A\u64F4\u5C55\u5C6C\u6027 +Form-ComboBox=\u4E0B\u62C9\u6846 +PageSetup-Footer=\u9801\u5C3E +Sorting=\u6392\u5E8F\u4E2D +DBCP_TEST_WHILE_IDLE=\u958B\u555F\u7A7A\u9591\u56DE\u6536\u5668\u6AA2\u9A57 +DS-Embedded_TableData=\u5167\u7F6E\u8CC7\u6599\u96C6 +FR-Designer_No-Privilege=\u6C92\u6709\u6B0A\u9650 +FRFont-Subscript=\u4E0B\u6A19 +Background_Settings=\u80CC\u666F\u8A2D\u5B9A +FormulaD-Invalid_Formula=\u975E\u6CD5\u7684\u516C\u5F0F +FR-Base_Margin=\u908A\u8DDD +FR-Designer-Plugin_Shop_Installed=\u63D2\u4EF6\u5546\u5E97\u5B89\u88DD\u5B8C\u7562,\u662F\u5426\u7ACB\u523B\u555F\u52D5? +M_Edit-Send_to_Back=\u7F6E\u65BC\u5E95\u5C64(K) +Email-Can_Preview_Report_Content=\u6B63\u6587\u9810\u89BD\u5831\u8868\u5167\u5BB9 +FR-Designer-FRFont_Italic=\u659C\u9AD4 +CellWrite-Print_Background=\u5217\u5370/\u532F\u51FA\u5132\u5B58\u683C\u80CC\u666F +Wizard=\u56AE\u5C0E +Preference-Is_Drag_Permited=\u652F\u6301\u62D6\u62FD +FR-Designer_Release_Lock=\u89E3\u9396 +Form-Delimiter=\u5206\u9694\u7B26 +wrong=\u51FA\u932F\u4E86 +FR-Menu-Server_Chart_PreStyle=\u9810\u5B9A\u7FA9\u5716\u8868 +Form-Button=\u6309\u9215 +FormulaD-Valid_Formula=\u5408\u6CD5\u7684\u516C\u5F0F +ParameterD-Parameter_Interface=\u53C3\u6578\u754C\u9762 +At_least_one_visual_worksheet=\u5DE5\u4F5C\u7C3F\u4E2D\u81F3\u5C11\u8981\u6709\u4E00\u5F35\u53EF\u8996\u5316\u5DE5\u4F5C\u8868,\u5982\u679C\u60F3\u8981\u522A\u9664\uFF0C\u8ACB\u5148\u63D2\u5165\u4E00\u5F35\u65B0\u5DE5\u4F5C\u8868 +Need_Min_Value=\u9700\u8981\u6700\u5C0F\u503C +Allow_Blank=\u5141\u8A31\u70BA\u7A7A\u767D +CellWrite-InsertRow_DEFAULT=\u9810\u8A2D\u503C +Widget-Load_By_Complete=\u5B8C\u5168\u8F09\u5165 +FR-Designer-Basic_Only_Submit_Current_Sheet= +Sort-Sort_Order=\u6392\u5217\u9806\u5E8F +File-File_Size_Limit=\u6A94\u6848\u5927\u5C0F\u9650\u5236 +PrintP-Print=\u5217\u5370(T) +FR-Designer-StyleAlignment_Center=\u7F6E\u4E2D +Preference-Setting_Colors=\u984F\u8272\u914D\u7F6E +Judge=\u5224\u65B7 +Image-Adjust=\u9069\u61C9 +Collect-User_Information_DES=\u7528\u6236\u8A0A\u606F\u78BC\u53EA\u662F\u7528\u4F86\u6536\u96C6\u4F7F\u7528\u8005\u8A0A\u606F\u7684\uFF0C\u53EA\u8981\u9EDE\u64CA\u4E0A\u9762\u7684"\u7372\u53D6\u7528\u6236\u8A0A\u606F\u78BC"\u6309\u9215\uFF0C\u5C31\u6703\u5F48\u51FA\u4E00\u500B\u65B0\u7684\u700F\u89BD\u5668\u7A97\u9AD4\uFF0C\u767B\u9304\u5230\u7522\u54C1\u5B98\u65B9\u7DB2\u7AD9\u7372\u5F97\u9019\u500B\u7528\u6236\u8A0A\u606F\u78BC\uFF0C\u6574\u500B\u7A0B\u5E8F\u53EA\u9700\u89813\u5206\u9418\uFF0C\u53EA\u9700\u8981\u64CD\u4F5C\u4E00\u6B21\uFF0C\u800C\u4E14\u5B8C\u5168\u514D\u8CBB\u3002 +FR-Designer_Plugin_Normal_Update_From_Local=Update from local file +BackgroundTexture-Canvas=\u756B\u5E03 +BarOutSide=\u67F1\u5B50\u5916\u5074 +Preview_ToolTips=\u9810\u89BD\u63D0\u793A +FRFont-Family=\u540D\u5B57 +FR-Lic_does_not_Support_Remote=\u60A8\u7576\u524D\u4F7F\u7528\u7684lic\u4E0D\u652F\u6301\u9060\u7A0B\u8A2D\u8A08\u529F\u80FD\uFF0C\u8ACB\u5347\u7D1A\u60A8\u7684lic +InterfaceStyle=\u98A8\u683C +RWA-Key=\u4E3B\u9375 +WF-Name=\u540D\u7A31 +RWA-Click_Cell_To_Edit_Value=\u55AE\u64CA\u6A21\u677F\u5132\u5B58\u683C\u4FEE\u6539\u503C +Utils-Row_Height=\u5217\u9AD8 +ReportD-Excel_Export=\u5831\u8868\u532F\u51FA\u5C6C\u6027 +Form-Please_Select_A_Kind_Of_Form_Container=\u8ACB\u9078\u64C7\u4E00\u7A2E\u8868\u55AE\u5BB9\u5668 +Column_Does_Not_Exsit=\u6B04\u4E0D\u5B58\u5728 +M_Insert-Hyperlink=\u8D85\u7D1A\u93C8\u63A5 +can_not_include_underline=\u4E0D\u80FD\u5305\u542B"_" +FR-Designer-Plugin_Jar_Expired=Jar\u5305\u904E\u820A +FR-Background_Image_Extend=\u62C9\u4F38 +TopDownShade=\u4E0A\u4E0B\u6F38\u8B8A +FR-Base_Right=\u53F3 +DataBinding=\u8CC7\u6599\u7D81\u5B9A +ConnectionPool_Attr=\u9023\u63A5\u6C60\u5C6C\u6027 +Connect_SQL_Cannot_Null=\u8CC7\u6599\u9023\u63A5\u548CSQL\u9762\u677F\u4E0D\u80FD\u70BA\u7A7A +DBCP_MAX_ACTIVE=\u6700\u5927\u6D3B\u52D5\u9023\u63A5\u6578 +M_Window-Preference=\u9078\u9805 +ToolBar_Top=\u9802\u90E8\u5DE5\u5177\u6B04 +FR-Designer_Indent-Pixel=\u50CF\u7D20 +FR-Designer_Unit_MM=\u516C\u5398 +IDLE=\u7A7A\u9592 +FRFont-Underline=\u4E0B\u5283\u7DAB +FR-Designer-Plugin_Read_Plugin_List_Error=Error to read plugin list +Type_Set=\u985E\u578B\u8A2D\u5B9A +M_Format_A-Cell_Attributes=\u5176\u4ED6\u5C6C\u6027 +CellWrite-Show_As_Image=\u7528\u5716\u7247\u986F\u793A\u5167\u5BB9 +ShowAsDownload=\u7528\u4E0B\u8F09\u93C8\u63A5\u986F\u793A\u4E8C\u9032\u5236\u5167\u5BB9 +Form-ComboCheckBox=\u4E0B\u62C9\u8907\u9078\u6846 +BackgroundTexture-WovenMat=\u7DE8\u7E54\u7269 +BindColumn-Custom_Data_Appearance=\u81EA\u5B9A\u7FA9\u986F\u793A +Actived=\u6D3B\u52D5\u7684 +Env-Local_Directory=\u672C\u6A5F\u76EE\u9304 +Form-Colon=\u5192\u865F +Preference-Vertical_Scroll_Bar_Visible=\u8C4E\u76F4\u6EFE\u52D5\u689D\u53EF\u898B +Utils-Show_Cell_Value=\u986F\u793A\u5132\u5B58\u683C\u503C +FR-Designer_ReportColumns-Repeat_Row=\u8907\u88FD\u5217\u5E8F\u6B04 +SpecifiedG-Specified_Group=\u81EA\u5B9A\u7FA9\u5206\u7D44 +RWA-Smart_Add_Cells=\u667A\u80FD\u65B0\u589E\u5132\u5B58\u683C +HF-Left_Section=\u5DE6\u5340\u57DF +M_Report-Report_Background=\u5831\u8868\u80CC\u666F +Image-Extend=\u62C9\u4F38 +FS_BI=\u6C7A\u7B56\u5E73\u81FA +ToolBar_Bottom=\u5E95\u90E8\u5DE5\u5177\u6B04 +Hgap=\u6C34\u5E73\u9593\u9699 +FR-Designer_Enter-New-FileName=\u8ACB\u8F38\u5165\u65B0\u7684\u6A94\u6848\u540D +Verify_Fail=\u6821\u9A57\u5931\u6557 +CellWrite-InsertRow_Policy=\u63D2\u5165\u5217\u7B56\u7565 +FR-Designer-Plugin_Illegal_Plugin_Zip=Illegal plugin zip +RCodeVersion=\u7248\u672C +Convert=\u8F49\u63DB +Please_Drag=\u8ACB\u62D6\u5165\u5217\u6B04\u6B04\u4F4D\u3001\u532F\u7E3D\u6B04\u4F4D +FR-Designer-Widget-Style_Preview=\u9810\u89BD +mobile_number=\u624B\u6A5F\u865F\u78BC +FR-Designer_Form-ComboCheckBox=\u4E0B\u62C9\u8907\u9078\u6846 +CacheValidateTime=\u5831\u8868\u7DE9\u5B58\u6709\u6548\u6642\u9593 +Hyperlink-Extends_Report_Parameters=\u7E7C\u627F\u5831\u8868\u7684\u53C3\u6578 +FR-Designer_Values-Editor=\u503C\u7DE8\u8F2F\u5668 +Export-Excel=Excel\u683C\u5F0F +Utils-Left_to_Right=\u6A6B\u5411 +ExpandD-Vertical_Extendable=\u7E31\u5411\u53EF\u4F38\u5C55 +Utils-Report_Runtime_Env=\u5831\u8868\u5DE5\u4F5C\u76EE\u9304 +Utils-Right_to_Left=\u5F9E\u53F3\u5230\u5DE6 +Utils-Beyond_the_top_side_of_Border=\u8D85\u51FA\u4E0A\u908A\u754C +Exception_StackTrace=\u932F\u8AA4\u7570\u5E38\u5806\u68E7\u8A0A\u606F +Corresponding_Fields=\u5C0D\u61C9\u6B04\u4F4D +Form-CheckBox=\u5FA9\u9078\u6846 +Utils-Current_Row=\u7576\u524D\u5217 +BuildIn=\u5167\u7F6E +BindColumn-Results_Filter=\u7D50\u679C\u96C6\u7BE9\u9078 +FR-Designer-Plugin_Manager=\u63D2\u4EF6\u7BA1\u7406 +M_File-Export-CSV=CSV\u683C\u5F0F(\u9017\u865F\u5206\u9694) +Data_Filter=\u8CC7\u6599\u7BE9\u9078 +ReportServerP-Edit_Printer=\u7DE8\u8F2F\u5370\u8868\u6A5F +FR-Designer_Datasource-Stored_Procedure=\u5B58\u5132\u7A0B\u5E8F +RESTART=\u91CD\u5553 +FormulaD-Function_name=\u51FD\u6578\u540D +ChooseOneButton=\u8ACB\u9078\u64C7\u4E00\u500B\u63A7\u5236\u9805\u5F8C\u518D\u65B0\u589E +Priority=\u512A\u5148\u7D1A +Datasource-Datasource=\u8CC7\u6599\u6E90 +FR-Designer_Width=\u5BEC +Cannot-Add_To_This_Area=\u7121\u6CD5\u65B0\u589E\u5230\u8A72\u5340\u57DF +Run=\u904B\u884C +Set_Submit_Condition=\u8A2D\u5B9A\u63D0\u4EA4\u689D\u4EF6 +FR-Base_Value=\u503C +fileLocked_undeleted=\u6A21\u677F\u88AB\u9396\u5B9A\uFF0C\u4E0D\u80FD\u522A\u9664\uFF01\u9EDE\u64CA\u78BA\u5B9A\uFF0C\u91CD\u65B0\u6574\u7406\u6A21\u677F\u6B04\u8868 +Web_Apply=WEB\u61C9\u7528 +Refresh_Database=\u91CD\u65B0\u6574\u7406\u8CC7\u6599\u5EAB +Set_Row_Title_End=\u8A2D\u5B9A\u91CD\u8907\u7D50\u5C3E\u5217 +FR-Utils-New_Folder=\u65B0\u589E\u8CC7\u6599\u593E +BiasD-From-upper_left_to_lower_right=\u5F9E\u5DE6\u4E0A\u5230\u53F3\u4E0B\u767C\u6563 +CapsLock=\u5927\u5BEB\u9396\u5B9A\u5DF2\u6253\u958B +StyleFormat-Sample=\u793A\u4F8B +RWA-Smart_Add_Cell_Group=\u667A\u80FD\u65B0\u589E\u5132\u5B58\u683C\u7D44 +MConfig-CancelButton=\u53D6\u6D88 +Function-Choose_Function_Class=\u9078\u64C7\u51FD\u6578\u985E +LatLng=\u7D93\u7DEF\u5EA6 +DS-Server_TableData=\u4F3A\u670D\u5668\u8CC7\u6599\u96C6 +BackgroundTexture-GreenMarble=\u7DA0\u8272\u5927\u7406\u77F3 +read_time_out=\u52A0\u8F09\u8D85\u6642 +JavaScript-Commit_to_Database=\u63D0\u4EA4\u5165\u5EAB +DS-Relation_TableData=\u95DC\u806F\u8CC7\u6599\u96C6 +CellWrite-Page_Before_Row=\u5217\u524D\u5206\u9801 +FR-Designer-Plugin_Load_Plugins_From_Server=Loading plugins from store +D-Dispaly_Divide_Result_Set_into_Groups=\u5C07\u7D50\u679C\u96C6\u9032\u884C\u5206\u7D44 +Closed=\u5DF2\u95DC\u9589 +RWA-Help=\u8A2D\u5B9A\u672A\u4FEE\u6539\u4E0D\u66F4\u65B0\u5F8C\uFF0C\u586B\u5831\u9810\u89BD\u5831\u8868\uFF0C\u8A18\u9304\u6240\u5728\u5132\u5B58\u683C\u6C92\u6709\u88AB\u7DE8\u8F2F\u4FEE\u6539\uFF0C\u5247\u6B64\u8A18\u9304\u4E0D\u6703\u9032\u884C\u66F4\u65B0\uFF1B\n\u5728\u5927\u8CC7\u6599\u91CF\u8A18\u9304\u67E5\u8A62\u4E26\u56DE\u586B\u60C5\u6CC1\u4E0B\uFF0C\u555F\u7528\u8A72\u8A2D\u5B9A\uFF0C\u53EF\u4EE5\u63D0\u9AD8\u586B\u5831\u63D0\u4EA4\u6027\u80FD\u3002 +FR-Designer-Widget-Style_Custom=\u81EA\u5B9A\u7FA9 +FR-Designer-Widget-Style_Render_Style=\u6E32\u67D3\u98A8\u683C +Highlight-Barcode=\u689D\u78BC +FR-Designer_Connect_SQL_Cannot_Null=\u8CC7\u6599\u9023\u63A5\u548CSQL\u9762\u677F\u4E0D\u80FD\u70BA\u7A7A +trigger=\u89F8\u767C +M-Data_Analysis=\u8CC7\u6599\u5206\u6790 +Function-The_selected_file_cannot_be_null=\u6A94\u6848\u4E0D\u80FD\u70BA\u7A7A +No-Privilege=\u6C92\u6709\u6B0A\u9650 +ReportColumns-Repeat_Column=\u91CD\u8907\u6B04\u5E8F\u6B04 +SecondGraduationUnit=\u6B21\u8981\u523B\u5EA6\u55AE\u4F4D +Form-Widget_Property_Value=\u5C6C\u6027\u503C +GIVE-NAME=Give Name +FR-Designer_Rename=\u91CD\u547D\u540D +Utils-Merge_Cell=\u5408\u5E76\u5132\u5B58\u683C +Style-Spacing_After=\u6BB5\u5F8C +Enlarge_Or_Reduce=\u7E2E\u653E +Tree-Height=\u9AD8\u5EA6 +RCodeErrorCorrect=\u7CFE\u932F +Enter-New-FileName=\u8ACB\u8F38\u5165\u65B0\u7684\u6A94\u6848\u540D +try_resending=\u8ACB\u5617\u8A66\u91CD\u65B0\u767C\u9001 +M-Open_Report=\u958B\u555F\u820A\u6A94 +Please_Select=\u8ACB\u9078\u64C7 +InRow=\u5217(R) +Form-TextArea=\u6587\u672C\u57DF +FR-Designer_Https_Enable=\u555F\u7528https +Widget-Custom_Widget_Config=\u81EA\u5B9A\u7FA9\u63A7\u5236\u9805 +already_exists=\u5DF2\u7D93\u5B58\u5728 +Original_Marked_Filed=\u539F\u59CB\u6A19\u8A18\u6B04\u4F4D +BackgroundTexture-Sand=\u6C99\u7058 +Values=\u503C +Not_use_a_cell_attribute_table_editing=\u60A8\u4E0D\u53EF\u4EE5\u7528\u5132\u5B58\u683C\u5C6C\u6027\u8868\u7DE8\u8F2F +Root=\u6839\u7BC0\u9EDE +cycle=\u5468\u671F +open-new-form-tip=\u7576\u524D\u6A21\u677F\u70BA711\u4EE5\u4E0B\u7248\u672C\u88FD\u4F5C, \u7121\u6CD5\u517C\u5BB9, \u4E0D\u80FD\u6253\u958B. \u5047\u5982\u60F3\u6253\u958B\u4FEE\u6539\u6B64\u8868\u55AE, \u8ACB\u4F7F\u7528\u5C0D\u61C9\u7248\u672C\u8A2D\u8A08\u5668\u6253\u958B. +Support-Current_Auto_Complete_Shortcut=Current Shortcut +GROUPING_MODE=\u666E\u901A\u5206\u7D44 +DBCP_MAX_IDLE=\u6700\u5927\u7A7A\u9591\u9023\u63A5\u6578 +BackgroundTexture-BlueTissuePaper=\u85CD\u8272\u7802\u7D19 +ReportD-Export_Hided_Row=\u532F\u51FA\u96B1\u85CF\u5217 +FR-Custom_styles_lost=\u81EA\u5B9A\u7FA9\u6A23\u5F0F\u5DF2\u4E1F\u5931 +Env-Des2=Servlet\u4F4D\u7F6E\u662F\u4E3B\u6A5F\u540D\uFF0C\u57E0\uFF0CWEB\u61C9\u7528\uFF0CServlet\u7684\u7D44\u5408\uFF0C\u5B83\u61C9\u7576\u6307\u5411\u4E00\u500BServlet\uFF0C\u6BD4\u5982"http\://localhost\:8080/WebReport/ReportServer"\u3002\u60A8\u53EF\u4EE5\u9078\u64C7\u586B\u5BEB\u4E3B\u6A5F\u540D\uFF0C\u57E0\uFF0CWEB\u61C9\u7528\uFF0CServlet\uFF0C\u5B83\u6703\u81EA\u52D5\u751F\u6210\u60A8\u6240\u9700\u8981\u7684Servlet\u4F4D\u7F6E\u3002 +Env-Des1=\u8ACB\u9078\u64C7\u5831\u8868\u4F3A\u670D\u5668\u6240\u5728\u7684WEB-INF\u76EE\u9304 +PageSetup-Placement_Center_on_Page=\u7F6E\u4E2D\u65B9\u5F0F +sure_to_delete=\u78BA\u8A8D\u522A\u9664 +Already_exists_not_add_repeat=\u5DF2\u7D93\u5B58\u5728\uFF0C\u8ACB\u4E0D\u8981\u91CD\u8907\u65B0\u589E +Axis_Title=\u8EF8\u6A19\u984C +FR-Designer-Plugin_Install_Failed=Install failed +FR-Designer-Widget-Style_Frame=\u6846\u67B6 +MainGraduationUnit=\u4E3B\u8981\u523B\u5EA6\u55AE\u4F4D +Second_Axis=\u6B21\u5750\u6A19\u8EF8 +Classifier-Ge=\u500B +MSBold=\u5FAE\u8EDF\u96C5\u9ED1 +Form-Design_Size=\u8A2D\u8A08\u5C3A\u5BF8 +FR-App-Template_Save=\u5132\u5B58 +ExpandD-Horizontal_Extendable=\u6A6B\u5411\u53EF\u4F38\u5C55 +RP_Authority_Edit=\u6B0A\u9650\u7DE8\u8F2F +Warnning=\u63D0\u9192 +RoleName_Can_Not_Be_Null=\u89D2\u8272\u540D\u4E0D\u5141\u8A31\u70BA\u7A7A\u4E14\u4E0D\u80FD\u91CD\u8907 +Application=\u61C9\u7528\u7A0B\u5F0F +Formula_Dictionary_Display_Examples_Html= +ECP-error_pwd=\u5BC6\u78BC\u932F\u8AA4 +FR-Hyperlink_ChartHyperlink=\u5716\u8868\u8D85\u93C8 +M_Edit-FormatBrush=\u8907\u88FD\u683C\u5F0F(B) +Indent-Pixel=\u50CF\u7D20 +FR-Designer-Widget-Style_Border_Line=\u6846\u7DDA\u7C97\u7D30 +Widget-Default_Widget_Config=\u57FA\u672C\u63A7\u5236\u9805 +Version-does-not-support=\u60A8\u7576\u524D\u4F7F\u7528\u7684lic\u4E0D\u652F\u6301\u9060\u7A0B\u8A2D\u8A08\u529F\u80FD\uFF0C\u8ACB\u5347\u7D1A\u60A8\u7684lic +StyleAlignment-Right_To_Left=\u5F9E\u53F3\u5411\u5DE6 +Style-Spacing_Before=\u6BB5\u524D +Has_Existed=\u5DF2\u7D93\u5B58\u5728 +FR-Designer_DisplayNothingBeforeQuery=\u9EDE\u6483\u67E5\u8A62\u524D\u4E15\u986F\u793A\u68CA\u4ED6\u5167\u84C9 +Still=\u4ECD\u7136 +JS_WARNING2=\ \u4F8B\uFF1Ahttp\://localhost\:8075/WebReport/demo.js +JS_WARNING1=\ \u76F8\u5C0D\u5831\u8868\u5DE5\u7A0B\u76EE\u9304\u5982WebReport,\u5982WebReport\\js\u4E0B\u6709\u5F15\u7528\u7684js\u6A94\u6848test.js\uFF0C\u5247\u76F8\u5C0D\u8DEF\u5F91\u70BAjs/test.js +Connectionline=\u9023\u7DDA\u6A21\u5F0F +Utils-Insert_Record=\u63D2\u5165\u8A18\u9304 +Set-Parameter-Name=\u8ACB\u5148\u8A2D\u5B9A\u53C3\u6578\u540D +More-information=\u66F4\u591A\u8A0A\u606F +Parameter-Boolean=\u5E03\u723E\u578B +FRFont-Strikethrough=\u522A\u9664\u7DDA +Server-version-tip=\u60A8\u7576\u524D\u9023\u63A5\u7684\u4F3A\u670D\u5668\u7248\u672C\u4F4E\u65BC\u60A8\u4F7F\u7528\u7684\u8A2D\u8A08\u5668\u7248\u672C\u865F\uFF0C\u7E7C\u7E8C\u9023\u63A5\uFF0C\u60A8\u7DE8\u8F2F\u7684\u4E00\u4E9B\u5C6C\u6027\u53EF\u80FD\u7121\u6CD5\u6709\u6548\u5132\u5B58\u3002\u5047\u5982\u9700\u8981\u9023\u63A5\u8ACB\u5C07\u60A8\u7684\u8A2D\u8A08\u5668\u7248\u672C\u8207\u4F3A\u670D\u5668\u7248\u672C\u4FDD\u6301\u4E00\u81F4 +Form-All_Files=\u5168\u90E8\u6A94\u6848 +DBCP_NUM_TEST_PER_EVCTION_RUN=\u7A7A\u9591\u93C8\u63A5\u56DE\u6536\u6AA2\u67E5\u6578 +FR-Designer-FRFont_Family=\u540D\u5B57 +Device=\u8A2D\u5099 +M_Insert-Cell=\u5132\u5B58\u683C\u5143\u7D20 +Present-Formula_Present=\u516C\u5F0F\u6A21\u5F0F +FRFont-Superscript=\u4E0A\u6A19 +CellWrite-Page_Before_Column=\u6B04\u524D\u5206\u9801 +Golden=\u91D1\u8272 +Preference-Support_Cell_Editor_Definition=\u652F\u6301\u5132\u5B58\u683C\u7DE8\u8F2F\u5668 +M-Page_Preview=\u5206\u9801\u9810\u89BD +HJS-CC_to=\u6284\u9001 +Tree-Select_Leaf_Only=\u53EA\u8FD4\u56DE\u8449\u5B50\u7BC0\u9EDE +Pointer-A-Tick-Order=\u6307\u91DD\u503C\u53CA\u523B\u5EA6\u503C\u6578\u91CF\u7D1A +Pink=\u7C89\u7D05 +StyleAlignment-Distibuted=\u5206\u6563\u5C0D\u9F4A +Odd=\u5947\u6578 +already-saved=\u5DF2\u7D93\u5132\u5B58 +FR-Hyperlink_Chart_Cell=\u5716\u8868\u8D85\u93C8-\u806F\u52D5\u5132\u5B58\u683C +Style-Left_Indent=\u5DE6\u7E2E\u9032 +Offline=\u96E2\u7DDA +Form-Hierarchy_Tree_Next=\u4E0B\u4E00\u500B +Needle=\u6307\u91DD +GoogleMap=\u8C37\u6B4C\u5730\u5716 +Running=\u904B\u884C\u4E2D +M_Edit-Unmerge_Cell=\u53D6\u6D88\u5408\u4F75\u5132\u5B58\u683C +Out_Border_Line=\u5916\u5074\u6846\u7DDA +Style-Spacing=\u9593\u8DDD +FR-Utils_Submit=\u63D0\u4EA4 +ReportServerP-Previous=\u4E0A\u4E00\u9801 +StyleAlignment-Text_Style=\u6587\u672C\u63A7\u5236 +RelatedChart=\u5716\u8868\u806F\u52D5 +ProcessManager=\u6D41\u7A0B\u7BA1\u7406 +Cancel_Repeat_Attributes=\u53D6\u6D88\u91CD\u8907\u5217\u6B04 +FR-App-File_Message=\u8A0A\u606F +Datasource-Stored_Procedure=\u5132\u5B58\u7A0B\u5E8F +RWA-Row_Offset=\u5217\u504F\u79FB +M_Format-Style=\u6A23\u5F0F +detail_description=\u8A73\u7D30\u63CF\u8FF0 +FR-Designer-Widget-Style_Title_Content=\u6A19\u984C\u5167\u5BB9 +ParameterD-Report_Parameter=\u6A21\u7D44\u53C3\u6578 +HF-Edit_Header=\u7DE8\u8F2F\u9801\u9996 +Sytle-FRFont=\u5B57\u9AD4 +FR-Designer_Finish_Export=\u532F\u51FA\u5B8C\u7562 +MultiFileUpload=\u591A\u6A94\u6848\u4E0A\u50B3 +HF-Page_Number=\u9801\u78BC +Style-Right_Indent=\u53F3\u7E2E\u9032 +Desktop=\u684C\u9762 +FR-Server-All_Error=\u932F\u8AA4 +ConditionB-Operator=\u64CD\u4F5C +Today=\u4ECA\u5929 +Form-Widget_Name=\u63A7\u5236\u9805\u540D +Covered_All=\u5168\u90E8\u8986\u84CB +Day=\u5929 +External=\u5916\u90E8 +Black_Font=\u9ED1\u9AD4 +LOG-Report_Server_IS_Started=\u5831\u8868\u4F3A\u670D\u5668\u5DF2\u555F\u52D5 +Tips\:You_Can_Input_B1_To_Input_The_Data_Of_The_First_Row_Second_Column=\u63D0\u793A\:\u60A8\u53EF\u4EE5\u901A\u904E\u8F38\u5165B1\u4F86\u5BEB\u5165\u7B2C\u4E00\u5217\u7B2C\u4E8C\u6B04\u7684\u8CC7\u6599\u3002 +FR-Designer_ChooseOneButton=\u8ACB\u9078\u64C7\u4E00\u500B\u63A7\u5236\u9805\u5F8C\u518D\u65B0\u589E +Widget-Sizing=\u5927\u5C0F\u8ABF\u6574 +NO_Border_Line=\u7121\u6846\u7DDA +Cell_Data=\u5132\u5B58\u683C\u8CC7\u6599 +StyleAlignment-Vertical_Text=\u6587\u5B57\u8C4E\u6392 +Label=\u6A19\u7C64 +Orange=\u6854\u9EC3 +zeroMarginWarn=\u7531\u65BC\u5370\u8868\u6A5F\u5B58\u5728\u7269\u7406\u908A\u8DDD
\u5831\u8868\u7684\u9801\u908A\u8DDD\u8A2D\u5B9A\u904E\u5C0F\u53EF
\u80FD\u6703\u51FA\u73FE\u5167\u5BB9\u5217\u5370\u4E0D\u5168.
  +Widget-Date_Selector_Return_Type=\u8FD4\u56DE\u503C\u985E\u578B +Utils-Switch_To_Template_Reportlet=\u5207\u63DB\u5230\u7BC4\u672C\u7DB2\u8DEF\u5831\u8868 +satisfy=\u6EFF\u8DB3\u689D\u4EF6 +FR-Designer_WidgetDisplyPosition=\u63A7\u5236\u9805\u986F\u793A\u4F4D\u7F6E +FR-Base_Top=\u4E0A +FR-Designer_Form-CheckBox=\u5FA9\u9078\u6846 +Reportlet-Parameter_Type=\u53C3\u6578\u50B3\u905E\u65B9\u5F0F +sending=\u6B63\u5728\u767C\u9001... +FR-Designer-FRFont_Foreground=\u984F\u8272 +FR-Import-Export_SVG=SVG\u683C\u5F0F +M_Edit-Clear_Contents=\u5167\u5BB9(C) +Session=\u6703\u8A71 +Widget-Load_Type=\u8F09\u5165 +template_unsaved=\u7BC4\u672C\u7121\u6CD5\u5132\u5B58 +check_communication=\u8ACB\u6AA2\u67E5\u7DB2\u8DEF\u901A\u8A0A\u662F\u5426\u6B63\u5E38\u53CA\u4F3A\u670D\u5668\u662F\u5426\u6B63\u5E38\u904B\u884C +List-Need_Head=\u9700\u8981\u6B04\u8868\u982D +FR-Designer-Plugin_Has_Been_Installed=Plugin has been installed +FR-Widget_Tree_And_Table=\u63A7\u5236\u9805\u6A39\u548C\u63A7\u5236\u9805\u8868 +FR-Base_Help=\u8AAA\u660E +FR-Designer-Plugin_Update_Successful=Update successfully +August=\u516B\u6708 +LOG-Is_Being_Openned=\u6B63\u5728\u6253\u958B +BackgroundTexture-Oak=\u6A61\u6728 +Multi_nam_formula=\ \u8CC7\u6599\u96C6\u540D\: \u8CC7\u6599\u96C6\u689D\u4EF6\: +TurnOn=\u958B\u5553 +HJS-Send_Successfully=\u767C\u9001\u6210\u529F +Mon=\u661F\u671F\u4E00 +Inner_Parameter=Inner Parameter +Required=\u5FC5\u586B +Summary=\u532F\u7E3D +template_unopened=\u7121\u6CD5\u6253\u958B\u7BC4\u672C +FR-Base_Bottom=\u4E0B +DataFunction-Min=\u6700\u5C0F\u503C +StyleFormat-Percent=\u767E\u5206\u6BD4 +FR-App-All_Custom=\u81EA\u5B9A\u7FA9 +M_Insert-Data_Column=\u63D2\u5165\u8CC7\u6599\u6B04 +PLEASE=Please +Numbers=\u6578\u76EE +Release_Lock=\u89E3\u9396 +Background-Background_is_NULL=\u6C92\u6709\u80CC\u666F +FR-Designer_Sytle-FRFont=\u5B57\u9AD4 +Gradation=\u5C64\u6B21 +The_current_list_is_empty=\u7576\u524D\u6B04\u8868\u70BA\u7A7A +Formula_Dictionary_Display_Examples= +Schedule-Template_Parameter=\u7BC4\u672C\u53C3\u6578 +JSShow=\u52D5\u614B\u5C55\u793A +Level_coordinates=\u5C64\u6B21\u5750\u6A19 +MainGraduationLine=\u4E3B\u8981\u523B\u5EA6\u7DDA +Hyperlink-Web_link=\u7DB2\u9801\u93C8\u63A5 +StyleAlignment-between_-90_and_90=\u5728-90\u548C90\u4E4B\u9593 +FormulaD-Custom_Function=\u81EA\u5B9A\u7FA9\u51FD\u6578 +FR-Designer_Integer=\u6574\u6578 +PageSetup-Finis_Start_Row=\u91CD\u8907\u7D50\u5C3E\u5217 +RWA-Remove_Field=\u79FB\u9664\u6B04\u4F4D +Form-Desin_Width=\u8A2D\u8A08\u5BEC\u5EA6 +No-tableData=\u6C92\u6709\u8FD4\u56DE\u8CC7\u6599\u96C6 +Page_Total=\u5171 +FR-Designer-Plugin_Connect_Server_Error=Error to connect plugin store +Import-Excel_Source=Excel\u6E90\u6A94\u6848 +Utils-Left_to_Right_a=\u5F9E\u5DE6\u5F80\u53F3 +ExpandD-Expand_Attribute=\u64F4\u5C55\u5C6C\u6027 +Report-Write_Attributes=\u5831\u8868\u586B\u5831\u5C6C\u6027 +Utils-Current_Column=\u7576\u524D\u6B04 +Need_Max_Value=\u9700\u8981\u6700\u5927\u503C +Report_Not_Exist=\u6240\u9078\u5831\u8868\u4E0D\u5B58\u5728\uFF01 +HF-Insert_Content=\u63D2\u5165\u5167\u5BB9 +UpParent=\u4E0A\u7236\u683C +PageSetup-Page=\u9801\u9762 +Utils-Move_Up=\u4E0A\u79FB +BackgroundTexture-PurpleMesh=\u7D2B\u8272\u7DB2\u8DEF +Export-Word=Word\u683C\u5F0F +ServerM-Widget_Manager=\u5143\u4EF6\u7BA1\u7406 +FR-Designer-Basic_Activation_Key=Activation Key\: +FR-App-Template_Report_Not_Exist=\u6240\u9078\u5831\u8868\u4E0D\u5B58\u5728 +Protected=\u4FDD\u8B77 +Skip=\u8DF3\u904E +FR-Designer_PageSetup-Vertically=\u5782\u76F4\u7F6E\u4E2D +revert=\u5FA9\u539F +PageSetup-Predefined=\u9810\u5B9A\u7FA9 +Border-Style-Radius=\u5713\u89D2\u6846\u7DDA +IntPart=\u6574\u6578\u90E8\u4EFD +ExpandD-Data_Column=\u8CC7\u6599\u6B04 +Sort-Ascending=\u5347\u51AA +FR-Designer-Widget_Style=\u6A23\u5F0F +parameter_name_exist=\u8A72\u53C3\u6578\u540D\u5DF2\u5B58\u5728 +FR-Designer_Layer-Build=\u666E\u901A\u5206\u5C64\u69CB\u5EFA +Please_Rename=\u8ACB\u91CD\u547D\u540D +Form-Editing_Listeners=\u4E8B\u4EF6\u7DE8\u8F2F +RWA-Smart_Add_Fields=\u667A\u80FD\u65B0\u589E\u6B04\u4F4D +FR-Designer-Tree_Width=\u5BEC\u5EA6 +Record=\u8A18\u9304 +Poly-Report_Component=\u8907\u5408\u5F0F\u5831\u8868\u5143\u4EF6 +Options=\u9078\u9805 +NS-war-remote=\u932F\u8AA4\u4EE3\u78BC\:1117 \u58D3\u7E2E\u90E8\u7F72\u4E0D\u652F\u6301\u9060\u7A0B\u8A2D\u8A08 +Sche-Minute=\u5206 +Three_Rows_Of_Three_Grid=\u4E09\u5217\u4E09\u6B04\u7684\u683C\u5B50 +WorkSheet=\u81EA\u7531\u5831\u8868 +FR-Designer-Widget_Size=\u63A7\u5236\u9805\u5927\u5C0F +BindColumn-Select=\u6B04\u8868 +FR-Widget_Mobile_Terminal=\u884C\u52D5\u8A2D\u5099 +FR-Background_Image_Titled=\u5E73\u92EA +SetPrinterOffset=\u5370\u8868\u6A5F\u504F\u79FB +FR-Designer-Plugin_Installed=Installed +FR-Designer-Hyperlink_Name=\u540D\u5B57 +FR-Designer_Form-Button=\u6309\u9215 +Black=\u9ED1\u8272 +FR-Designer-Widget-Style_Border_Color=\u6846\u7DDA\u984F\u8272 +Set_Submit_Event=\u8A2D\u5B9A\u63D0\u4EA4\u4E8B\u4EF6 +PDF-Print_isPopup=\u662F\u5426\u5F48\u51FA\u8A2D\u5B9A\u6846 +LayerPageReport_CountPerPage=\u6BCF\u9801\u8A18\u9304\u6578 +Display_Modes=\u986F\u793A\u6A21\u5F0F +RowSpan=\u5217\u8DE8\u5EA6 +Datasource-Test_Connection=\u6E2C\u8A66\u93C8\u63A5 +Function-Function_Manager=\u51FD\u6578\u7BA1\u7406\u5668 +Host_Name=\u4E3B\u6A5F\u540D +CellWrite-Show_As_HTML=\u7528HTML\u986F\u793A\u5167\u5BB9 +FR-Designer-Widget-Style_Shadow=\u9670\u5F71 +FR-Designer_Parameter_String=\u5B57\u5143\u4E32 +Form-SupportTag=\u6A19\u7C64\u5F62\u5F0F\u986F\u793A +ReportD-Report_Write_Attributes=\u5831\u8868\u586B\u5831\u5C6C\u6027 +DataFunction-Count=\u500B\u6578 +Top_And_Thick_Bottom_Border_Line=\u4E0A\u6846\u7DDA\u548C\u7C97\u4E0B\u6846\u7DDA +Client=Client +BindColumn-Result_Serial_Number_Start_From_1=\u5E8F\u865F\u5F9E1\u958B\u59CB +History=\u6B77\u53F2 +Already_exists=\u5DF2\u5B58\u5728\uFF0C\u8ACB\u91CD\u65B0\u8F38\u5165\uFF01 +Datasource-Original_Charset=\u539F\u59CB\u7DE8\u78BC +FR-Base_Left=\u5DE6 +ReportServerP-Next=\u4E0B\u4E00\u9801 +BindColumn-Top_N=\u524DN\u500B +Animation_Special=\u7279\u6548 +Widget-Chart_Widget_Config=\u5716\u8868\u63A7\u5236\u9805 +FR-Designer-Plugin_Cannot_Update_Not_Install=\u7121\u6CD5\u66F4\u65B0\u63D2\u4EF6\uFF0C\u8ACB\u6AA2\u67E5\u8A72\u63D2\u4EF6\u662F\u5426\u5DF2\u7D93\u6210\u529F\u5B89\u88DD +After_Changed_Some_Attributes_Are_Different=\u8F49\u63DB\u5F8C\u5831\u8868\u7684\u67D0\u4E9B\u5C6C\u6027\u6703\u767C\u751F\u6539\u8B8A\uFF0C\u662F\u5426\u7E7C\u7E8C +PieStyle=\u9905\u72C0 +HF-Are_you_sure_to_delete_it=\u4F60\u78BA\u5BE6\u60F3\u8981\u522A\u9664\u9019\u500B\u5143\u7D20\u55CE +Utils-Design-File_Open=\u958B\u555F\u820A\u6A94 +FR-Utils_Label=\u6A19\u7C3D +Data-Label=\u8CC7\u6599\u6A19\u7C64 +M_Insert-Text=\u63D2\u5165\u6587\u5B57 +Form-View_Tree=\u6AA2\u8996\u8868\u6A39 +M_Insert-Chart=\u63D2\u5165\u5716\u8868 +HF-Even_Page=\u5076\u6578\u9801 +ReportServerP-Report_server_parameter=\u5831\u8868\u4F3A\u670D\u5668\u53C3\u6578 +JavaScript-Form_Submit=\u8868\u55AE\u63D0\u4EA4 +Horizontal-Split_Layout=\u6C34\u5E73\u5206\u5272\u5E03\u5C40 +BorderLayout-Center=\u4E2D +INFO-Reset_Webapp=\u91CD\u7F6E\u61C9\u7528\u4F3A\u670D\u5668 +FR-Designer_Text=\u6587\u672C +IN_and_INOUT_type_not_as_cursor=IN\u548CINOUT\u985E\u578B\u4E0D\u53EF\u4EE5\u4F5C\u70BA\u6E38\u6A19 +Main_Axis=\u4E3B\u5750\u6A19\u8EF8 +M_Edit-Cut=\u526A\u4E0B(T) +Utils-The_Name_has_been_existed=\u6B64\u540D\u5DF2\u7D93\u5B58\u5728 +FR-Background_Image=\u5716\u7247 +Character=\u6587\u5B57 +Unit_Thousand=\u4EDF +Test=\u6E2C\u8A66 +Utils-Would_you_like_to_save=\u4F60\u662F\u5426\u9700\u8981\u5132\u5B58 +HF-Header_and_Footer=\u7709\u982D\u548C\u7709\u8173 +LIST_MODE=\u6B04\u8868 +HF-Insert_Image=\u63D2\u5165\u5716\u7247 +FR-Designer-Widget-Style_Standard=\u6A19\u51C6 +FR-Designer_Form-List=\u6B04\u8868 +BackgroundTexture-Denim=\u659C\u7D0B\u5E03 +Execute_Report_by_Layer_Engine=\u7528\u5217\u5F0F\u7684\u5F15\u64CE\u4F86\u57F7\u884C\u5831\u8868 +M_Edit-Bring_Forward=\u4E0A\u79FB\u4E00\u5C64(F) +Choose_All=\u5168\u9078 +Form-RadioGroup=\u55AE\u9078\u6309\u9215\u7D44 +FR-Base_Remove=\u522A\u9664 +FR-Remote_Connect2Server_Again=\u9023\u63A5\u4E2D\u65B7\uFF0C\u662F\u5426\u91CD\u65B0\u9023\u63A5\u4F3A\u670D\u5668? +Semicolon=\u5206\u865F +StyleFormat-Category=\u5206\u985E +Report_Template=\u5831\u8868\u7BC4\u672C +Utils-Beyond_the_right_side_of_Border=\u8D85\u51FA\u53F3\u908A\u754C +BackgroundTexture-Papyrus=\u7D19\u838E\u8349\u7D19 +LayerPageReport_PageEngine=\u4F7F\u7528\u6309\u9801\u904B\u7B97\u5206\u6BB5\u57F7\u884C\u5831\u8868 +Schedule-The_selected_file_must_be_end_with_filter=\u9078\u64C7\u7684\u6A94\u6848\u5FC5\u9808\u4EE5.cpt\u6216\u8005.class\u6216\u8005.frm\u7D50\u5C3E\u3002 +Provide=\u63D0\u4F9B +FormulaD-Math_&_Trig=\u6578\u5B78\u548C\u4E09\u89D2\u51FD\u6578 +FR-Designer-StyleAlignment_Right=\u9760\u53F3\u5C0D\u9F4A +Error_TableDataNameRepeat=\u5DF2\u7D93\u5728\u4F3A\u670D\u5668\u8CC7\u6599\u96C6\u4E2D\u5B58\u5728\u6216\u8005\u591A\u500B\u8CC7\u6599\u96C6\u540D\u91CD\u8907\u3002 +Choose_None=\u4E0D\u9078 +File-tree=\u6A94\u6848\u6A39 +FRFont-bold=\u7C97\u9AD4 +FR-Designer_Set_Submit_Condition=\u8A2D\u5B9A\u63D0\u4EA4\u689D\u4EF6 +Form-Change_Widget_Name=\u66F4\u6539\u63A7\u5236\u9805\u540D +ReportColumns-Report_Columns=\u5831\u8868\u5206\u6B04 +Can_not_use_FormatBursh=\u7121\u6CD5\u4F7F\u7528\u8907\u88FD\u683C\u5F0F +CellElement-Property_Table=\u5132\u5B58\u683C\u5C6C\u6027\u8868 +Dictionary-Dynamic_SQL=\u52D5\u614BSQL +FR-Designer_Form-CheckBoxGroup=\u5FA9\u9078\u6846\u7D44 +DBCP_TIME_BETWEEN_EVICTIONRUNSMILLIS=\u7A7A\u9591\u9023\u63A5\u56DE\u6536\u5668\u4F11\u7720\u6642\u9593 +ReportD-Export_Hided_Column=\u532F\u51FA\u96B1\u85CF\u6B04 +Preference-Support_Undo=\u652F\u6301\u5FA9\u539F +FR-mobile_report_analysis=\u5831\u8868\u89E3\u6790 +Month=\u6708 +Utils-Column_Width=\u6B04\u5BEC +Collect-Use_Designer=\u4F7F\u7528\u8A2D\u8A08\u5668 +Widget-User_Defined_Editor=\u9810\u5B9A\u7FA9\u7DE8\u8F2F\u5668\uFF0C\u8A72\u7DE8\u8F2F\u5668\u53EA\u80FD\u5728\u5143\u4EF6\u7BA1\u7406\u83DC\u55AE\u91CC\u66F4\u6539\u5176\u5C6C\u6027 +Unit_Ten_Thousand=\u842C +Data_Setting=\u8CC7\u6599\u8A2D\u5B9A +ECP_input_pwd=\u8ACB\u8F38\u5165\u5BC6\u78BC\: +period=\u3002 +Note=\u5099\u6CE8 +Multiline=\u591A\u5217\u7DE8\u8F2F +Datasource-Convert_Charset=\u7DE8\u78BC\u8F49\u63DB +DashBoard-ConnectionList=\u8CC7\u6599\u9023\u63A5 +Utils-Submit_Forcibly=\u5F37\u884C\u63D0\u4EA4 +Parent_Marked_Field=\u7236\u6A19\u8A18\u6B04\u4F4D +Logout=\u9000\u51FA +FR-Designer_Show_Blank_Row=\u88DC\u5145\u7A7A\u767D\u5217 +FR-Base_Format=\u683C\u5F0F +FR-App-Export_png=png\u683C\u5F0F +Delete_Column=\u522A\u9664\u6B04 +SecondGraduationLine=\u6B21\u8981\u523B\u5EA6\u7DDA +SpecifiedG-Groups=\u7D44 +CONTINUUM_MODE=\u76F8\u9130\u9023\u7E8C\u5206\u7D44 +Datasource-Connection_failed=\u93C8\u63A5\u5931\u6557 +CategoryName=\u5206\u985E\u540D +DBCP_INITIAL_SIZE=\u521D\u59CB\u5316\u9023\u63A5\u6578 +Colors=\u984F\u8272 +FR-Import-Export_CSV=CSV\u683C\u5F0F(\u9017\u865F\u5206\u9694) +FR-Designer-StyleAlignment_Left=\u9760\u5DE6\u5C0D\u9F4A +BackgroundTexture-PaperBag=\u7D19\u888B +RWA-BuildIn_SQL=\u5167\u7F6ESQL +SingleLayer=\u55AE\u5C64 +Or-you=\u6216\u8005\u60A8 +FR-Designer_Certificate_Path=\u8B49\u66F8\u8DEF\u5F91 +Utils-Last_Page=\u6700\u5F8C\u4E00\u9801 +BarCodeD-Drawing_Text=\u986F\u793A\u689D\u78BC\u7684\u6587\u672C +Warning-Template_Do_Not_Exsit=\u7BC4\u672C\u4E0D\u5B58\u5728 +BindColumn-Group=\u5206\u7D44 +Export-SVG=SVG\u683C\u5F0F +Plane3D=\u5E73\u97623D +SessionID=sessionID\u662F\u7576\u524D\u8A2A\u554F\u6A21\u677F\u7684\u6703\u8A71\u6A19\u8B58\u53C3\u6578\u3002 +FR-Designer_Height=\u9AD8 +HF-Odd_Page=\u5947\u6578\u9801 +About-All_Rights_Reserved=\u4FDD\u7559\u6240\u6709\u7684\u6B0A\u5229 +Utils-Current_Cell=\u7576\u524D\u683C\u5B50 +Web_Preview_Message=\u8ACB\u5C07\u6A21\u677F\u6A94\u6848\u5132\u5B58\u7576\u524D\u904B\u884C\u74B0\u5883\u76EE\u9304\u4E0B +FR-Hyperlink_Chart_Float=\u5716\u8868\u8D85\u93C8-\u806F\u52D5\u61F8\u6D6E\u5143\u7D20 +Dic-Data_Query=\u8CC7\u6599\u67E5\u8A62 +CellWrite-Print_Content=\u5217\u5370/\u532F\u51FA\u5132\u5B58\u683C\u5167\u5BB9 +Privilege-Selected_None_Of_Any_Items=\u6C92\u6709\u9078\u4E2D\u4EFB\u4F55\u4E00\u9805 +FRFont-Size=\u5927\u5C0F +Function-J2EE_server=J2EE\u4F3A\u670D\u5668 +FR-Designer_Allow_Blank=\u5141\u8A31\u70BA\u7A7A +Build_Tree_Accord_Parent_Marked_Filed=\u4F9D\u8CF4\u6240\u9078\u8CC7\u6599\u96C6\u7684\u7236\u6A19\u8A18\u6B04\u4F4D\u69CB\u5EFA\u6A39 +Preference-Horizontal_Scroll_Bar_Visible=\u6C34\u5E73\u6EFE\u52D5\u689D\u53EF\u898B +Scope=\u7BC4\u570D +Save_All_Records_In_Memory=\u6240\u6709\u8A18\u9304\u90FD\u5132\u5B58\u5728\u5167\u5B58\u4E2D +FreezeWarning1=\u521D\u59CB\u503C\u4E0D\u5927\u65BC\u5C3E\u503C +FlowLayout=\u6D41\u5F0F\u5E03\u5C40 +M_Report-Report_Footer=\u5831\u8868\u9801\u5C3E +FR-Action_Add=\u589E\u52A0 +BorderLayout-East=\u6771 +feedback_tip=\u8ACB\u8F38\u5165\u4E0D\u8D85\u904E400\u500B\u5B57\u7684\u554F\u984C\u63CF\u8FF0 +FS_Start_Date=\u958B\u59CB\u65E5\u671F +FR-ConditionB_Operator=\u64CD\u4F5C\u7B26 +Printer-Alias=\u5225\u540D +DS-Class_Name=\u985E\u540D +FR-Designer-Plugin_Has_Been_Disabled=Plugin has been disabled +Sort-Original=\u4E0D\u6392\u5E8F +Utils-Top_to_Bottom_a=\u5F9E\u4E0A\u5F80\u4E0B +Parameter-String=\u5B57\u5143\u4E32 +InnerRadis=\u5167\u5F91\u5927\u5C0F +Want_To_Cover_It=\u662F\u5426\u60F3\u8981\u8986\u84CB\u5854 +Divided_stage=\u5283\u5206\u968E\u6BB5 +Seriously=\u56B4\u91CD +ReportServerP-PDF=PDF +Utils-Switch_To_Class_Reportlet=\u5207\u63DB\u5230\u985E\u5225\u7DB2\u8DEF\u5831\u8868 +FR-Designer_Show_Blank_Column=\u88DC\u5145\u7A7A\u767D\u6B04 +M_Edit-Redo=\u53D6\u6D88\u5FA9\u539F +Visibility=\u53EF\u898B\u6027 +Series_Use_Default=\u7CFB\u5217\u9810\u8A2D\u4F7F\u7528 +Has_Selected=\u5DF2\u7D93\u9078\u64C7 +BackgroundTexture-Walnut=\u8B77\u5957 +FormulaD-Function_category=\u51FD\u6578\u985E\u578B +Interface=\u4ECB\u9762 +FR-Designer-Beyond_Bounds=\u8D85\u51FA\u6216\u8005\u5C0F\u65BCbody\u908A\u754C\uFF0C\u4E0D\u80FD\u8ABF\u6574\u5927\u5C0F +seconds=\u79D2 +Auto-Build=\u81EA\u52D5\u69CB\u5EFA +FR-Designer-Plugin_Install_Successful=Install successful +Template_Path=\u7BC4\u672C\u8DEF\u5F91 +FR-Designer-FRFont_Bold=\u7C97\u9AD4 +Poly_Name=\u805A\u5408\u584A\u540D +WorkBook=\u5DE5\u4F5C\u7C3F +Hyperlink-Self_Window=\u7576\u524D\u7A97\u53E3 +FR-Designer-Widget-Style_Title=\u6A19\u984C +FR-Designer-FRFont_Size=\u5927\u5C0F +M_File-Export-SVG=SVG\u683C\u5F0F +Capacity=Capacity +Rose_Red=\u73AB\u7470\u7D05 +StyleAlignment-The_value_of_rotation_must_between_-90_and_90_degrees=\u65CB\u8F49\u503C\u5FC5\u9808\u5728\u8CA090\u5EA6\u523090\u5EA6 +HF-Move_Left=\u5DE6\u79FB +Cell_Group=\u5132\u5B58\u683C\u7D44 +Week=\u5468 +PageSetup-Orientation=\u65B9\u5411 +M-Open_Recent=\u958B\u555F\u6700\u8FD1\u4F7F\u7528\u6A94 +NNormal=\u6B63\u5E38 +Integer=\u6574\u6578 +Select_The_Source_To_Save=\u9078\u64C7\u8981\u5B58\u5132\u7684\u9805\u76EE +Transition=\u5206\u652F +FR-Designer_Get_Lock=\u52A0\u9396 +one_record_exists_in_many_groups=\u4E00\u500B\u8A18\u9304\u53EF\u4EE5\u5B58\u5728\u8207\u591A\u500B\u7D44\u4E2D +FR-Designer_Cover_None=\u5168\u4E0D\u8986\u84CB +DeciPart=\u5C0F\u6578\u90E8\u4EFD +ExpandD-Up_Father_Cell=\u4E0A\u7236\u683C +Deep=\u6DF1\u5EA6 +FRFont-Shadow=\u9670\u5F71 +Reportlet=\u7DB2\u8DEF\u5831\u8868 +Calendar=\u65E5\u66C6 +DateFormat-Custom_Warning=\u8A3B\uFF1A\u81EA\u5B9A\u7FA9\u65E5\u671F\u683C\u5F0F\u4E0D\u652F\u6301\u683C\u5F0F\u6821\u9A57 +Unit_MM=\u516C\u5398 +Server-Start=\u555F\u52D5 +CellPage-Can_Break_On_Paginate=\u5206\u9801\u6642\u53EF\u4EE5\u65B7\u958B +Build_Tree_Accord_Marked_Filed_Length=\u4F9D\u8CF4\u6240\u9078\u8CC7\u6599\u96C6\u7684\u6A19\u8A18\u6B04\u4F4D\u7684\u9577\u5EA6\u69CB\u5EFA\u6A39\u72C0 +ComboCheckBox-Start_Symbol=\u8D77\u59CB\u7B26 +Real=\u5BE6\u969B +RWA-Batch_Modify_Cells=\u6279\u91CF\u4FEE\u6539\u5132\u5B58\u683C +FR-Designer_Build-Way=\u69CB\u5EFA\u65B9\u5F0F +Read=\u8B80\u53D6 +StyleAlignment-Degrees=\u5EA6\u6578 +M_Format_A-Border=\u6846\u7DDA(B) +Utils-Delete_Record=\u522A\u9664\u8A18\u9304 +Reload=\u91CD\u8F09 +Image-Select_Picture=\u9078\u64C7\u5716\u7247 +RWA-Submit=\u63D0\u4EA4 +the_template=\u8A72\u7BC4\u672C +FR-Designer_Component_Scale=\u5143\u4EF6\u7E2E\u653E +FRFont-italic=\u659C\u9AD4 +Year=\u5E74 +HF-Move_Right=\u53F3\u79FB +Data-Check=\u8CC7\u6599\u76E3\u63A7 +Unknown=\u672A\u77E5 +Submit_Style=\u63D0\u4EA4\u65B9\u5F0F +Left_Border_Line=\u5DE6\u6846\u7DDA +Brown=\u8910\u8272 +Select_A_Tree_DataSource_To_Build=\u9078\u64C7\u4E00\u500B\u6A39\u72C0\u8CC7\u6599\u96C6\u4F86\u69CB\u5EFA +Overlapping=\u91CD\u66E1\u578B +DS-Class_TableData=\u985E\u5225\u8CC7\u6599\u96C6 +FR-Designer-Plugin_Illegal_Plugin_Zip_Cannot_Be_Install=Illegal plugin,cannot be installed +DisplayNothingBeforeQuery=\u9EDE\u64CA\u67E5\u8A62\u524D\u4E0D\u986F\u793A\u5176\u4ED6\u5167\u5BB9 +Y_Axis=Y\u8EF8 +FormulaD-Most_Recently_Used=\u5E38\u7528\u51FD\u6578 +FormulaD-Input_formula_in_the_text_area_below=\u8ACB\u5728\u4E0B\u9762\u7684\u6587\u672C\u7DE8\u8F2F\u6846\u88E1\u9762\u8F38\u5165\u516C\u5F0F +Build-Way=\u69CB\u5EFA\u65B9\u5F0F +M_Edit-Undo=\u5FA9\u539F +Line-Style=\u7DAB\u578B +Datasource-Other_Attributes=\u5176\u4ED6\u5C6C\u6027 +M_Server-Global_Parameters=\u5168\u5C40\u53C3\u6578 +Suffix=\u5F8C\u7DB4 +Image-Image_Files=\u5716\u7247\u6A94\u6848 +EditRC-Entire_row=\u6574\u5217(R) +HF-First_Page=\u9996\u9801 +BackgroundTexture-Granite=\u82B1\u5D17\u77F3 +DataList=\u8CC7\u6599\u93C8 +Recursion=\u905E\u6B78 +BarStyle=\u689D\u5F62 +FR-Designer-Min_Width=\u6700\u5C0F\u5BEC\u5EA6 +Utils-Report-Env_Directory=\u5831\u8868\u5DE5\u4F5C\u76EE\u9304 +D-ChartArea=\u5716\u8868\u5340 +Only=\u53EA +FR-Base_No=\u5426 +SpecifiedG-Put_all_others_together=\u5C07\u5176\u4ED6\u6240\u6709\u7684\u5408\u5E76 +HF-NewLine_Des=\u53EF\u4EE5\u9EDE\u64CA\u4E0A\u9762\u7684\u79FB\u52D5\u548C\u522A\u9664\u6309\u9215\u4F86\u64CD\u4F5C\u63DB\u5217\u7B26 +WLayout-Border-ThreeContainer=\u64C1\u6709\u5317\u3001\u897F\u548C\u4E2D\u4E09\u584A\u7684\u908A\u754C\u4F48\u5C40\u5BB9\u5668\uFF0C\u5176\u4E2D\u5317\u90E8\u584A\u53EF\u4EE5\u6839\u64DA\u9700\u8981\u8ABF\u6574\u9AD8\u5EA6\uFF0C\u897F\u90E8\u584A\u53EF\u4EE5\u6839\u64DA\u9700\u8981\u8ABF\u6574\u5BEC\u5EA6\u3002 +Parameter_Name=\u53C3\u6578\u540D +FR-Base_Table=\u8868 +Des-Remove_WorkSheet=\u8981\u522A\u9664\u7684\u8868\u53EF\u80FD\u5B58\u5728\u8CC7\u6599,\u5982\u679C\u8981\u6C38\u4E45\u522A\u9664\u9019\u4E9B\u8CC7\u6599,\u8ACB\u6309'\u78BA\u5B9A'\u6309\u9215. +Rotation=\u65CB\u8F49 +Undefined=\u672A\u5B9A\u7FA9 +Support-Auto_Complete_Shortcut=Auto Complete Shortcut +Set_Column_Title_End=\u8A2D\u5B9A\u91CD\u8907\u7D50\u5C3E\u6B04 +Submit_Url=\u63D0\u4EA4\u5730\u5740 +ReportServerP-Are_you_sure_to_delete_the_selected_printer=\u4F60\u78BA\u5BE6\u60F3\u522A\u9664\u9078\u4E2D\u7684\u5370\u8868\u6A5F\u55CE +long_data_can_not_show_fully=\u9577\u8CC7\u6599\u986F\u793A\u4E0D\u5168 +Utils-Beyond_the_bottom_side_of_Border=\u8D85\u51FA\u4E0B\u908A\u754C +FR-Import-Export_PDF=PDF\u683C\u5F0F +Form-CheckBoxGroup=\u5FA9\u9078\u6846\u7D44 +Click-Me=\u9EDE\u6211\u6709\u9A5A\u559C\u54E6\uFF01 +Hyperlink-Self=\u5728\u539F\u7DB2\u9801\u4E2D\u6253\u958B\u93C8\u63A5(S) +Tree-Select_Leaf_Only_Tips=(\u4E0D\u52FE\u9078\u6B64\u9805\u6642\uFF0C\u8FD4\u56DE\u503C\u50C5\u70BA\u7528\u6236\u52FE\u9078\u7684\u7576\u524D\u7BC0\u9EDE\u800C\u4E0D\u5305\u62EC\u5176\u5B50\u7BC0\u9EDE) +StyleAlignment-Text_Rotation=\u6587\u672C\u65B9\u5411 +Format-Error=\u8F38\u5165\u7684\u503C\u683C\u5F0F\u4E0D\u6B63\u78BA +Server-Stop=\u505C\u6B62 +Preference-Setting_Grid=\u7DB2\u683C\u8A2D\u5B9A +ReportServerP-Add_Printer=\u589E\u52A0\u5370\u8868\u6A5F +FR-Designer-Plugin_Active=Active +Utils-File_name=\u6A94\u6848\u540D +NOT_NULL_Des=\u4E0D\u80FD\u70BA\u7A7A +Right_Border_Line=\u53F3\u6846\u7DDA +EditRC-Entire_column=\u6574\u6B04 (c) +PageSetup-Top_to_bottom=\u5148\u6B04\u5F8C\u5217 +Click-Get_Default_URL=\u9EDE\u64CA\u6B64\u6309\u9215\u7372\u5F97\u9810\u8A2DURL +StyleAlignment-Wrap_Text=\u81EA\u52D5\u63DB\u5217 +Remove_All_Button=\u6E05\u9664\u6240\u6709\u6309\u9215 +FR-Designer_Component_Interval=\u5143\u4EF6\u9593\u9694 +ReportColumns-Columns_vertically=\u6B04\u5206\u6B04 +ReportGUI-Print_Background=\u5217\u5370/\u532F\u51FA\u5831\u8868\u80CC\u666F +Export-CSV=CSV\u683C\u5F0F(\u9017\u865F\u5206\u9694) +M_Edit-Paste=\u8CBC\u4E0A(P) +FR-Designer-Basic_Restart_Designer=Restart designer +ReportServerP-PDF2-INFO=\u50C5\u5728LINUX/UNIX\u4E0B\u672A\u5B89\u88DD\u4E2D\u6587\u5B57\u9AD4\u6642\u4F7F\u7528 +FormulaD-Check_Valid=\u6AA2\u67E5\u5408\u6CD5\u6027 +server_disconnected=\u9023\u63A5\u5DF2\u65B7\u958B +ParameterD-Parameter_name_cannot_be_null=\u53C3\u6578\u7684\u540D\u5B57\u4E0D\u53EF\u4EE5\u70BA\u7A7A +FR-Designer-Plugin_Version_Is_Lower_Than_Current=The version of plugin is lower than current +RWA-NotChange_Unmodified=\u4E0D\u6539\u8B8A\u6642\u4E0D\u66F4\u65B0 +User_Information=\u7528\u6236\u8A0A\u606F +Custom_styles_lost=\u81EA\u5B9A\u7FA9\u6A23\u5F0F\u5DF2\u4E1F\u5931 +PageSetup-Margin=\u9801\u908A\u8DDD +M-New_FormBook=\u5EFA\u7ACB\u65B0\u5831\u8868 +Widget-TreeNode=\u6A39\u7BC0\u9EDE\u6309\u9215 +Form-Url=\u5730\u5740 +Utils-Beyond_the_left_side_of_Border=\u8D85\u51FA\u5DE6\u908A\u754C +Float_Element_Name=\u61F8\u6D6E\u5143\u7D20\u540D\u7A31 +Purple=\u7C89\u7D2B +DashBoard-Potence=\u6B0A\u9650 +M-Close_Template=\u95DC\u9589\u7BC4\u672C(C) +paper=\u7D19\u5F35 +Not_Exsit=\u4E0D\u5B58\u5728\u65BC\u5831\u8868 +Utils-Insert_Row=\u63D2\u5165\u5217 +Utils-Delete_Row=\u522A\u9664\u5217 +not_support_authority_edit=\u8A72\u5143\u7D20\u4E0D\u652F\u6301\u8A31\u53EF\u6B0A\u63A7\u5236 +Formula_Tips=\u516C\u5F0F\u5FC5\u9808\u4EE5"\ +FR-Action_Copy=\u8907\u88FD +Compile_Success=Compile Success +BackgroundTexture-RecycledPaper=\u518D\u751F\u7D19 +StyleAlignment-Single_Line=\u55AE\u5217\u986F\u793A +Utils-Move_Down=\u4E0B\u79FB +Please_Set_Repeat_First=\u8ACB\u5148\u8A2D\u5B9A\u91CD\u8907\u6A19\u984C\u5217\u548C\u6B04 +Writer-ShortCuts_Setting=\u586B\u5831\u5FEB\u6377\u9375\u8A2D\u5B9A +Verify-Data_Verify=\u8CC7\u6599\u6821\u9A57 +FR-mobile_analysis_style=\u89E3\u6790\u65B9\u5F0F +Confirm-Delete-File=\u662F\u5426\u522A\u9664\u6240\u9078\u6A94\u6848\uFF1F +PageSetup-Header=\u9801\u9996 +JavaScrit-Asynch=\u975E\u540C\u6B65 +ReportServerP-Toolbar=\u5DE5\u5177\u6B04 +Utils-Top_to_Bottom=\u7E31\u5411 +Platform=\u5E73\u53F0 +FR-Designer-FRFont_Underline=\u5E95\u7DDA +Show_in_Containing_Folder=\u6253\u958B\u6240\u5728\u8CC7\u6599\u593E +BackgroundTexture-WaterDroplets=\u6C34\u6EF4 +FR-Designer-Dependence_Install_Failed=\u4F9D\u8CF4\u5B89\u88DD\u5931\u6557 +Layout-Padding=\u5167\u908A\u8DDD +roles_already_authority_edited=\u5DF2\u914D\u7F6E\u89D2\u8272 +WidgetDisplyPosition=\u63A7\u5236\u9805\u986F\u793A\u4F4D\u7F6E +SpecifiedG-Force_Group=\u5F37\u5236\u5206\u7D44 +FormulaD-Formula_Definition=\u516C\u5F0F\u5B9A\u7FA9 +I-xyScatterStyle_Marker=\u6563\u9EDE\u5716 +Hour=\u5C0F\u6642 +ColorMatch=\u914D\u8272 +M_Edit-Order=\u758A\u653E\u9806\u5E8F(O) +BackgroundTexture-Bouquet=\u82B1\u675F +Verify-Error_Information=\u6821\u9A57\u51FA\u932F\u8A0A\u606F +LayerData=\u5E95\u5C64\u8CC7\u6599 +Rename=\u91CD\u547D\u540D +Widget-Load_By_Async=\u975E\u540C\u6B65\u8F09\u5165 +Shape=\u5716\u5F62 +BindColumn-This_Condition_has_been_existed=\u6B64\u689D\u4EF6\u5DF2\u7D93\u5B58\u5728 +NS-exception_readError=\u932F\u8AA4\u4EE3\u78BC\:1305 \u6A21\u677F\u6A94\u6848\u89E3\u6790\u51FA\u932F +Set_Column_Title_Start=\u8A2D\u5B9A\u91CD\u8907\u6A19\u984C\u6B04 +Fri=\u4E94 +M_Report-Report_Parameter=\u6A21\u677F\u53C3\u6578 +REPORTLETS=\u8A2A\u554F\u591A\u5F35\u6A21\u677F\u7684\u8DEF\u5F91\u7684\u53C3\u6578 +WLayout-Card-ToolTip=\u5361\u7247\u5F0F\u4F48\u5C40\uFF0C\u8A72\u4F48\u5C40\u5BB9\u5668\u4E2D\u53EF\u4EE5\u65B0\u589E\u591A\u500B\u5176\u5B83\u5143\u4EF6\u3002 +M-Popup_ChartType=\u5716\u8868\u985E\u578B +Please-Wait=\u8ACB\u7A0D\u5019 +FR-Designer-Form-ToolBar_Widget=\u63A7\u5236\u9805 +Widget-Array=\u6578\u7D44 +FieldBinding=\u7D81\u5B9A\u6B04\u4F4D +Top_Bottom_Border_Line=\u4E0A\u4E0B\u6846\u7DDA +M-Others=\u5176\u5B83... +Hyperlink-Link_Opened_in=\u9023\u7D50\u6253\u958B\u65BC +FR-Utils_WorkBook=\u5DE5\u4F5C\u7C3F +M_Insert-Float=\u61F8\u6D6E\u5143\u7D20 +Out_Thick_Border_Line=\u7C97\u5323\u6846\u7DDA +FR-App-File_Lookup_range=\u67E5\u627E\u7BC4\u570D +ReportColumns-Columns_to=\u5206\u6B04\u6210 +Transparent=\u900F\u660E +Parameter-Integer=\u6574\u578B +PDF-Print_Setting=PDF\u5217\u5370\u8A2D\u5B9A +Server-Embedded_Server=\u5167\u7F6E\u7684\u4F3A\u670D\u5668 +M_Server-Server_Config_Manager=\u4F3A\u670D\u5668\u914D\u7F6E(S) +FR-Utils-Would_you_like_to_cover_the_current_file=\u4F60\u5E0C\u671B\u8986\u84CB\u7576\u524D\u6A94\u6848\u55CE +CellWrite-InsertRow_COPY=\u539F\u503C +Edit_String_To_Formula=\u662F\u5426\u5C07\u5B57\u5143\u4E32\u7DE8\u8F2F\u70BA\u516C\u5F0F +Edit-Column_Count=\u6B04\u6578 +Father=\u7236 +ReportColumns-Columns_after=\u8D85\u904E +FR-Designer_Undo=\u5FA9\u539F +DBCP_MIN_IDLE=\u6700\u5C0F\u7A7A\u9591\u9023\u63A5\u6578 +M-Data_Analysis_Settings=\u8CC7\u6599\u5206\u6790\u8A2D\u5B9A +M-Form_Preview=\u8868\u55AE\u9810\u89BD +Form-Basic_Properties=\u57FA\u672C\u5C6C\u6027 +quote=\u5F15\u7528 +Thu=\u56DB +Collect-Collect_User_Information=\u6536\u96C6\u7528\u6236\u8A0A\u606F +Layer-Build=\u5206\u5C64\u69CB\u5EFA +FR-Designer-FRFont_Line_Style=\u7DDA\u578B +BackgroundTexture-BrownMarble=\u68D5\u8272\u5927\u7406\u77F3 +PageSetup-Page_Setup=\u9801\u9762\u8A2D\u5B9A +Form-Semicolon=\u5206\u865F +ECP_re_input=\u8ACB\u91CD\u65B0\u8F38\u5165\u5BC6\u78BC\: +ExpandD-Sort_After_Expand=\u64F4\u5C55\u5F8C +FR-Designer-Dependence_Install_Succeed=\u4F9D\u8CF4\u5B89\u88DD\u6210\u529F +Env-Configure_Workspace=\u914D\u7F6E\u5DE5\u4F5C\u76EE\u9304 +feedback_info=\u6B61\u8FCE\u60A8\u63D0\u51FA\u5BF6\u8CB4\u7684\u610F\u898B\u548C\u5EFA\u8B70\uFF0C\u8ACB\u5C07\u8A0A\u606F\u586B\u5BEB\u5F97\u76E1\u91CF\u8A73\u7D30\uFF0C\u6211\u5011\u6703\u76E1\u5FEB\u806F\u7E6B\u4F60 +Ratio=\u6BD4\u7387 +DBCP_TEST_ON_BORROW=\u7372\u53D6\u9023\u63A5\u524D\u6AA2\u9A57 +FR-Designer_layerIndex=\u4F9D\u8CF4\u7684\u5C64\u6578 +WEB-Write_Setting=\u586B\u5831\u9762\u9762\u8A2D\u5B9A +M-New_WorkBook=\u65B0\u589E\u5DE5\u4F5C\u7C3F +FR-Designer-Plugin_Has_Been_Actived=Plugin is now active +Datasource-Maximum_Number_of_Preview_Rows=\u6700\u5927\u7684\u9810\u89BD\u5217\u6578 +ExpandD-Cell_Expand_Attributes=\u64F4\u5C55\u5C6C\u6027 +Select_the_repeated_row_and_column=\u9078\u64C7\u9700\u8981\u91CD\u8907\u7684\u5217\u6B04 +FormulaD-Date_&_Time=\u65E5\u671F\u548C\u6642\u9593\u51FD\u6578 +Max-Mem-Row-Count=\u7DE9\u5B58\u81F3\u78C1\u7247\u7576\u8A18\u9304\u6578\u5927\u65BC +BorderLayout-South=\u5357 +Export-Text=\u6587\u5B57\u6A94\u6848(\u88FD\u9304\u7B26\u5206\u9694) +JavaScript-Synch=\u540C\u6B65 +FR-App-All_Warning=\u8B66\u544A +M_Edit-Send_Backward=\u4E0B\u79FB\u4E00\u5C64(B) +Form-Layout=\u5E03\u5C40 +FR-Designer-Plugin_Shop_Need_Update=\u63D2\u4EF6\u5546\u5E97\u6709\u65B0\u7248\u672C,\u662F\u5426\u66F4\u65B0? +FR-Designer_WorkBook=\u5DE5\u4F5C\u7C3F +UpBarBorderStyleAndColor=\u6F32\u67F1\u6A23\u5F0F +GridLayout=\u683C\u5B50\u5E03\u5C40 +Utils-Default_Value=\u9810\u8A2D\u503C +Widget-Comb_Widget_Config=\u7D44\u5408\u63A7\u5236\u9805 +Import-Excel2007_Source=Excel2007\u6E90\u6A94\u6848 +Y-Coordinate=\u7E31\u5EA7\u6A19 +FR-Base_SimSun_Not_Found=\u7121\u6CD5\u627E\u5230\u5B8B\u9AD4, \u8ACB\u9078\u64C7\u7576\u524D\u7CFB\u7D71\u4E0B\u9810\u8A2D\u8A9E\u8A00\u4F5C\u70BA\u8A2D\u8A08\u5668\u5B57\u9AD4. +FR-Designer_Seriously=\u56B4\u91CD +Upload=\u4E0A\u50B3 +Form-Widget_Property_Table=\u5C6C\u6027\u8868 +Des-Merger_Cell=\u9078\u64C7\u7684\u5340\u57DF\u5305\u542B\u591A\u500B\u8CC7\u6599\uFF0C\u5408\u5E76\u5132\u5B58\u683C\u5F8C\u5C07\u53EA\u4FDD\u7559\u7DE8\u8F2F\u904E\u7684\u6240\u6709\u5132\u5B58\u683C\u4E2D\u6700\u5DE6\u4E0A\u89D2\u7684\u6578\u503C. +FR-Designer-Basic_Copy_Build_NO=\u96D9\u64CA\u8907\u88FD\u69CB\u5EFA\u7248\u672C\u865F +FR-Base_TurnOn=\u958B\u5553 +FR-Base_Rows=\u5217 +Form-Remove_Repeat=\u53BB\u6389\u91CD\u8907\u9805 +Yes=\u662F +Datasource-JNDI_Name=JNDI\u7684\u540D\u5B57 +Utils-Delete_Column=\u522A\u9664\u6B04 +HF-Delete_it=\u522A\u9664 +JavaScript-Dynamic_Parameters=\u52D5\u614B\u53C3\u6578 +px=\u50CF\u7D20 +FR-App-Report_Template=\u5831\u8868\u7BC4\u672C +Verify-Message=\u932F\u8AA4\u8A0A\u606F +Plan=\u8A08\u756B +Vertical-Split_Layout=\u5782\u76F4\u5206\u5272\u5E03\u5C40 +ParameterD-Delay_Playing=\u9EDE\u64CA\u67E5\u8A62\u524D\u4E0D\u986F\u793A\u5831\u8868\u5167\u5BB9 +TurnOff=\u95DC\u9589 +FR-Please_Rename=\u8ACB\u91CD\u547D\u540D +Select_Data_Set=\u9078\u64C7\u8CC7\u6599\u96C6 +Name_has_Colon=\u540D\u5B57\: +ReportColumns-Columns_horizontally=\u5217\u5206\u6B04 +FR-Base_Yes=\u662F +ReportColumns-Repeat_Row=\u8907\u88FD\u5217\u5E8F\u6B04 +Print_Setting=\u5217\u5370\u8A2D\u5B9A +Registration-User_Name=\u5E33\u865F +Datasource-User_Defined=\u81EA\u5B9A\u7FA9 +FR-Designer-Plugin_DownLoadMessage=\u63D2\u4EF6\u9700\u8981\u4F9D\u8CF4\u7684\u652F\u6301\uFF0C\u662F\u5426\u5B89\u88DD({R1} m)? +Delay=\u5EF6\u9072 +FR-Designer-All_MSBold=\u5FAE\u8EDF\u96C5\u9ED1 +Utils-Now_create_connection=\u6B63\u5728\u5EFA\u7ACB\u8CC7\u6599\u9023\u63A5 +FR-Template-Path_chooseRightPath=\u8ACB\u9078\u64C7\u6B63\u78BA\u8DEF\u5F91 +FR-Remote_Re_Connect_to_Server=\u4F3A\u670D\u5668\u5DF2\u95DC\u9589\uFF0C\u662F\u5426\u91CD\u65B0\u9023\u63A5\u4F3A\u670D\u5668? +Nation=\u570B\u5BB6 +DBCP_MAX_WAIT=\u6700\u5927\u7B49\u5F85\u6642\u9593 +FR-App-Template_Form=\u8868\u55AE +Address=\u5730\u5740 +Sub_Report=\u5B50\u5831\u8868 +FR-Import-Export_Word=Word\u683C\u5F0F +FR-Server_Version_Tip=\u60A8\u7576\u524D\u9023\u63A5\u7684\u4F3A\u670D\u5668\u7248\u672C\u4F4E\u65BC\u60A8\u4F7F\u7528\u7684\u8A2D\u8A08\u5668\u7248\u672C\u865F\uFF0C\u7E7C\u7E8C\u9023\u63A5\uFF0C\u60A8\u7DE8\u8F2F\u7684\u4E00\u4E9B\u5C6C\u6027\u53EF\u80FD\u7121\u6CD5\u6709\u6548\u5132\u5B58\u3002 \u5047\u5982\u9700\u8981\u9023\u63A5\u8ACB\u5C07\u60A8\u7684\u8A2D\u8A08\u5668\u7248\u672C\u8207\u4F3A\u670D\u5668\u7248\u672C\u4FDD\u6301\u4E00\u81F4 +StyleAlignment-Left_To_Right=\u5F9E\u5DE6\u5411\u53F3 +Verify-ToolTips=\u4E0D\u6EFF\u8DB3\u516C\u5F0F\u63D0\u793A\u6821\u9A57\u51FA\u932F\u8A0A\u606F +BackgroundTexture-Stationery=\u4FE1\u7D19 +FR-Designer_RWA-Help=\u8A2D\u5B9A\u672A\u4FEE\u6539\u4E0D\u66F4\u65B0\u5F8C\uFF0C\u586B\u5831\u9810\u89BD\u5831\u8868\uFF0C\u8A18\u9304\u6240\u5728\u5132\u5B58\u683C\u6C92\u6709\u88AB\u7DE8\u8F2F\u4FEE\u6539\uFF0C\u5247\u6B64\u8A18\u9304\u4E0D\u6703\u9032\u884C\u66F4\u65B0\uFF1B\n\u5728\u5927\u8CC7\u6599\u91CF\u8A18\u9304\u67E5\u8A62\u4E26\u56DE\u586B\u60C5\u6CC1\u4E0B\uFF0C\u555F\u7528\u8A72\u8A2D\u5B9A\uFF0C\u53EF\u4EE5\u63D0\u9AD8\u586B\u5831\u63D0\u4EA4\u6027\u80FD\u3002 +M_Insert-Barcode=\u689D\u78BC +Bounds=\u908A\u754C +FR-Designer-Undo_All_Authority_Operations=\u5FA9\u539F\u524D\u4E00\u6B21\u7DE8\u8F2F +Datasource-Context=\u4E0A\u4E0B\u6587 +CellWrite-Page_After_Column=\u6B04\u5F8C\u5206\u9801 +FR-Designer_Cancel=\u53D6\u6D88 +Button-Group-Display-Columns=\u5C55\u793A\u6B04\u6578 +Widget-Height=\u63A7\u5236\u9805\u9AD8\u5EA6 +Examples=\u4F8B\u5B50 +Formula_Dictionary_Display_Example=\u5BE6\u969B\u503C\u7BC4\u570D\u70BA Formula_Dictionary_Display_Examples\ +StyleAlignment-Horizontal=\u6C34\u5E73\u5C0D\u9F4A +HyperLink_Must_Alone_Reset=\u591A\u500B\u8D85\u93C8 +ExpandD-Expand_Direction=\u64F4\u5C55\u65B9\u5411 +Include=\u5305\u62EC +Export-Excel-Page=\u5206\u9801\u532F\u51FA +FR-Designer-Min_Height=\u6700\u5C0F\u9AD8\u5EA6 +Filed=\u5340\u57DF +ReportServerP-Import_Css=\u5F15\u7528Css +M_Insert-Formula=\u63D2\u5165\u516C\u5F0F +FR-Designer_Auto-Build=\u81EA\u52D5\u69CB\u5EFA +FRFont-Foreground=\u984F\u8272 +Bubble-Width=\u6C23\u6CE1\u5BEC\u5EA6 +Form-Hierarchy_Tree=\u7D50\u69CB\u6A39 +WLayout-Border-LayoutContainer=\u64C1\u6709\u4E2D\u90E8\u548C\u5317\u90E8\u5169\u584A\u7684\u908A\u754C\u4F48\u5C40\u5BB9\u5668\uFF0C\u5176\u4E2D\u5317\u90E8\u584A\u53EF\u4EE5\u6839\u64DA\u9700\u8981\u8ABF\u6574\u9AD8\u5EA6 +Preference-JDK_Home=JDK\u8DEF\u5F91 +Utils-Insert_Column=\u63D2\u5165\u6B04 +FR-Designer_ToolBar_Top=\u9802\u90E8\u5DE5\u5177\u6B04 +BindColumn-The_Conditions_of_FatherCell=\u7236\u683C\u689D\u4EF6 +Links=\u93C8\u63A5 +M_Report-Report_Header=\u5831\u8868\u9801\u9996 +Sub_Report_Description=\u5B50\u5831\u8868\u9700\u8981\u5B58\u5728\u65BC\u7236\u8868\u904B\u884C\u74B0\u5883\u4E0B\uFF0C\u4E14\u5169\u8005\u4E0D\u80FD\u662F\u540C\u4E00\u6A21\u677F +T_Insert-Float=\u63D2\u5165\u61F8\u6D6E\u5143\u7D20 +BackgroundTexture-FishFossil=\u9B5A\u985E\u5316\u77F3 +My_Computer=\u6211\u7684\u96FB\u8166 +FORMLET=\u8A2A\u554F\u4E0D\u540C\u8868\u55AE\u7684\u8DEF\u5F91\u7684\u53C3\u6578 +HF-Undefined=\u6C92\u6709\u5B9A\u7FA9 +Widget-User_Defined_Widget_Config=\u9810\u5B9A\u7FA9\u63A7\u5236\u9805 +Report-Write_Attributes_Group_Warning=\u8A2D\u5B9A\u7232\u5132\u5B58\u683C\u7D44\u7684\u5404\u6B04\u4F4D\u4E2D\u7684\u5132\u5B58\u683C\u500B\u6578\u5FC5\u9808\u76F8\u540C +Form-Single_quote=\u55AE\u5F15\u865F +Compile_Success_And_Then_Save=Compile Success And Then Save +FR-Designer_Layout-Padding=\u5167\u908A\u8DDD +Layout_Container=\u4F48\u5C40\u5BB9\u5668 +Admin=\u7BA1\u7406\u54E1 +Form-EC_toolbar=\u5831\u8868\u584A\u5DE5\u5177\u6B04 +FR-App-All_Auto=\u81EA\u52D5 +Utils-Available_Columns=\u53EF\u9078\u6B04 +Form-Change_Widget_Name_Discription=\u8ACB\u8F38\u5165\u4E00\u500B\u65B0\u7684\u63A7\u5236\u9805\u540D +FR-Module_Designer=\u8A2D\u8A08\u5668\u6A21\u584A +FR-Import-Export_Text=\u6587\u5B57\u6A94\u6848(\u88FD\u8868\u7B26\u5206\u9694) +Values-Editor=\u503C\u7DE8\u8F2F\u5668 +FR-Designer_Yes=\u662F +ExpandD-Expandable=\u53EF\u4F38\u5C55\u6027 +Tree-Return_Full_Path=\u7D50\u679C\u8FD4\u56DE\u5B8C\u6574\u5C64\u6B21\u8DEF\u5F91 +FRFont-bolditalic=\u7C97\u9AD4\u659C\u9AD4 +FR-Base_StyleFormat_Sample=\u793A\u4F8B +Area_Value=\u5340\u57DF\u503C +FR-Designer-Plugin_Disable=Disable +Utils-Are_you_sure_to_remove_the_selected_item=\u4F60\u78BA\u5BE6\u6C7A\u5B9A\u522A\u9664\u9078\u4E2D\u7684\u9805 +Face_Write=\u586B\u5831 +Poly-Report_Block=\u8868\u683C\u985E\u578B\u805A\u5408\u584A +Vgap=\u5782\u76F4\u9593\u9699 +FR-Designer_HyperLink_Must_Alone_Reset=\u591A\u500B\u8D85\u93C8 +DS-Class=\u985E\u5225 +FR-Hyperlink_Please_Select_Reportlet=\u8ACB\u9078\u64C7\u7DB2\u8DEF\u5831\u8868 +FS_Report_Type=\u985E\u578B +HF-New_Line=\u63DB\u5217\u7B26 +Privilege=\u6B0A\u9650 +Export-Offline-Html=\u8F38\u51FA\u96E2\u7DDAhtml\u5831\u8868 +FR-Designer_open-new-form-tip=\u7576\u524D\u6A21\u677F\u70BA711\u4EE5\u4E0B\u7248\u672C\u88FD\u4F5C, \u7121\u6CD5\u517C\u5BB9, \u4E0D\u80FD\u6253\u958B. \u5047\u5982\u60F3\u6253\u958B\u4FEE\u6539\u6B64\u8868\u55AE, \u8ACB\u4F7F\u7528\u5C0D\u61C9\u7248\u672C\u8A2D\u8A08\u5668\u6253\u958B. +FR-Designer-Widget-Style_Frame_Style=\u6846\u67B6\u6A23\u5F0F +Present-No_Present=\u53D6\u6D88\u6A21\u5F0F\u8A2D\u5B9A +FR-Designer_Form-Password=\u5BC6\u78BC +X_Axis=X\u8EF8 +FR-mobile_html_analysis=HTML5\u89E3\u6790 +M_Edit-Bring_to_Front=\u7F6E\u65BC\u9802\u5C64(T) +Null_Value_Show=\u7A7A\u503C\u986F\u793A +Datasource-JNDI_DES=\u6CE8\u610F\:\u9700\u8981\u628A\u5305\u542BINITIAL_CONTEXT_FACTORY\u985E\u7684.jar\u6A94\u6848\u8907\u88FD\u5230\u8EDF\u9AD4\u5B89\u88DD\u6A94\u6848\u4E0B\u7684/lib\u76EE\u9304\u4E0B +PrintP-Print_Preview=\u5217\u5370\u9810\u89BD +Form-Hierarchy_Tree_Last=\u4E0A\u4E00\u500B +Has_been_gone=\ \u5DF2\u4E1F\u5931\uFF0C\u662F\u5426\u589E\u52A0\u8A72\u6A23\u5F0F\uFF1F +RWA-Add_Field=\u65B0\u589E\u6B04\u4F4D +newNode=\u65B0\u589E\u7BC0\u9EDE +PageSetup-Shrink_to_fit_content=\u6839\u64DA\u5132\u5B58\u683C\u5167\u5BB9\u81EA\u52D5\u8ABF\u6574 +FR-Designer_Date=\u65E5\u671F +Column_Multiple=\u8CC7\u6599\u500D\u6578 +FR-App-All_File=\u6A94\u6848 +Sort-Descending=\u964D\u51AA +FR-Designer-Plugin_Delete=Delete +Above=\u4EE5\u4E0A\u7248\u672C +Utils-The-Chart=\u5716\u8868 +FRFont-plain=\u5E38\u898F +Calculating=\u8655\u7406\u4E2D +Form-Object=\u8868\u55AE\u5C0D\u8C61 +May=\u4E94\u6708 +FR-Designer_Plugin_Normal_Update=Update +FR-Hyperlink_Reportlet=\u7DB2\u8DEF\u5831\u8868 +M_Edit-Copy=\u8907\u88FD(C) +Sub_Report_Message2=\u7236\u5831\u8868\u4E0D\u5728\u7576\u524D\u904B\u884C\u74B0\u5883\u4E0B +Sub_Report_Message3=\u4E0D\u80FD\u9078\u64C7\u81EA\u8EAB +Sub_Report_Message1=\u8ACB\u9078\u64C7\u6B63\u78BA\u8DEF\u5F91 +Form-Allow_CustomData=\u5141\u8A31\u81EA\u5B9A\u7FA9\u503C +FR-Server_Version_Tip_MoreInfo=\u5EFA\u8B70\u60A8\u6240\u5C6C\u5718\u968A\u4F7F\u7528\u7684\u6211\u65B9FineReport\u7523\u54C1\u7684\u8A2D\u8A08\u5668\u7248\u672C\u865F\u4EE5\u53CA\u90E8\u7F72\u7684\u4F3A\u670D\u5668\u7248\u672C\u865F\u4FDD\u6301\u4E00\u81F4\uFF0C\u4EE5\u907F\u514D\u7248\u672C\u4E0D\u4E00\u81F4\u9020\u6210\u7684\u554F\u984C\u98A8\u96AA\u3002\n\u5047\u5982\u60A8\u6253\u958B\u66F4\u9AD8\u8A2D\u8A08\u5668\u7248\u672C\u88FD\u4F5C\u7684\u6A21\u677F\uFF0C\u53EF\u80FD\u6253\u958B\u51FA\u932F\uFF0C\u4E5F\u53EF\u80FD\u4E1F\u5931\u539F\u6709\u6A21\u677F\u5C6C\u6027\u3002\u5047\u5982\u60A8\u88FD\u4F5C\u7684\u6A21\u677F\u4F7F\u7528\u7684\u8A2D\u8A08\u5668\u7248\u672C\u9AD8\u65BC\u60A8\u6700\u7D42\u90E8\u7F72\u6240\u7528\u7684\u4F3A\u670D\u5668\u7248\u672C\uFF0C\u4F3A\u670D\u5668\u53EF\u80FD\u7121\u6CD5\u6B63\u5E38\u8F09\u5165\u60A8\u88FD\u4F5C\u7684\u6A21\u677F\u3002 +FR-Designer_Server-version-tip-moreInfo=\u5EFA\u8B70\u60A8\u6240\u5C6C\u5718\u968A\u4F7F\u7528\u7684\u6211\u65B9FineReport\u7522\u54C1\u7684\u8A2D\u8A08\u5668\u7248\u672C\u865F\u4EE5\u53CA\u90E8\u7F72\u7684\u4F3A\u670D\u5668\u7248\u672C\u865F\u4FDD\u6301\u4E00\u81F4\uFF0C\u4EE5\u907F\u514D\u7248\u672C\u4E0D\u4E00\u81F4\u9020\u6210\u7684\u554F\u984C\u98A8\u96AA\u3002\u5047\u5982\u60A8\u6253\u958B\u66F4\u9AD8\u8A2D\u8A08\u5668\u7248\u672C\u88FD\u4F5C\u7684\u6A21\u677F\uFF0C\u53EF\u80FD\u6253\u958B\u51FA\u932F\uFF0C\u4E5F\u53EF\u80FD\u4E1F\u5931\u539F\u6709\u6A21\u677F\u5C6C\u6027\u3002\u5047\u5982\u60A8\u88FD\u4F5C\u7684\u6A21\u677F\u4F7F\u7528\u7684\u8A2D\u8A08\u5668\u7248\u672C\u9AD8\u65BC\u60A8\u6700\u7D42\u90E8\u7F72\u6240\u7528\u7684\u4F3A\u670D\u5668\u7248\u672C\uFF0C\u4F3A\u670D\u5668\u53EF\u80FD\u7121\u6CD5\u6B63\u5E38\u8F09\u5165\u60A8\u88FD\u4F5C\u7684\u6A21\u677F +Get_Lock=\u52A0\u9396 +HF-Edit_Footer=\u7DE8\u8F2F\u9801\u5C3E +Datasource-New_Charset=\u65B0\u7DE8\u78BC +Preference-Custom=Custom +BackgroundTexture-Newsprint=\u65B0\u805E\u7D19 +ConditionB-Add_bracket=\u65B0\u589E\u62EC\u865F +Datasource-Connection_successfully=\u93C8\u63A5\u6210\u529F +Function-The_class_must_implement_the_interface=\u6539\u985E\u5FC5\u9808\u5BE6\u73FE\u4ECB\u9762 +FR-Designer_ChartF-Transparency=\u900F\u660E +Crimson=\u6DF1\u7D05 +FR-Hyperlink_Dialog=\u5C0D\u8A71\u6846 +FR-Designer_Covered_All=\u5168\u90E8\u8986\u84CB +Hyperlink-New_Window=\u65B0\u7A97\u53E3 +Style_Name=\u683C\u5F0F\u540D +CSS_warning=\ \u76F8\u5C0D\u5831\u8868\u5DE5\u7A0B\u76EE\u9304\u5982WebReport,\u5982WebReport\\css\u4E0B\u6709\u5F15\u7528\u7684css\u6A94\u6848test.css\uFF0C\u5247\u76F8\u5C0D\u8DEF\u5F91\u70BAcss/test.css +FR-Base_Column=\u6B04 +Three_Rows_Of_Two_Grid=\u4E09\u5217\u5169\u6B04\u7684\u683C\u5B50 +DBCP_VALIDATION_QUERY=SQL\u9A57\u8B49\u67E5\u8A62 +M_Edit-Clear_Formats=\u683C\u5F0F(F) +Parameter_Setting=\u53C3\u6578\u8A2D\u5B9A +Related=\u806F\u52D5 +BorderLayout-Constraints=\u4F4D\u7F6E +Write_Preview=\u586B\u5831\u9810\u89BD +PageSetup-Page_Order=\u5217\u5370\u9806\u5E8F +Verify-Verify_Formula=\u6821\u9A57\u516C\u5F0F +State=\u7701\u5E02 +FR-Designer-Widget-Style_Body_Background=\u4E3B\u9AD4\u80CC\u666F +FR-App-Privilege_No=\u6C92\u6709\u6B0A\u9650 +Please_Drag_ParaPane= +Come_True=\u5BE6\u73FE +ISEMPTY=is empty +Background-Texture=\u7D0B\u7406 +FR-Designer_Verify-Message=\u932F\u8AA4\u8A0A\u606F +Locked=\uFF08\u5DF2\u9396\u5B9A\uFF09 +Utils-Design-Action_Cancel=\u53D6\u6D88 +Image-Titled=\u5E73\u92EA +Gradient-Direction=\u6F38\u8B8A\u65B9\u5411 +Green=\u9752\u7DA0 +Report_Engine=\u5831\u8868\u5F15\u64CE +Return-String=\u8FD4\u56DE\u5B57\u5143\u4E32 +Margin=\u908A\u8DDD +Pitch_Percentage=\u9593\u8DDD\u767E\u5206\u6BD4 +FR-Base_TurnOff=\u95DC\u9589 +Utils-has_been_existed=\u5DF2\u5B58\u5728 +HF-Insert_Formula=\u63D2\u5165\u516C\u5F0F +Utils-Exit_Designer=\u9000\u51FA\u8A2D\u8A08\u5668 +Formula_Dictionary_Display=\u5C0D\u65BC\u4E0A\u9762\u5BE6\u969B\u503C\u7BC4\u570D\u5167\u7684\u6BCF\u500B\u503C($$$)\uFF0C\u5176\u986F\u793A\u503C\u70BA +PageSetup-Left_to_right=\u5148\u5217\u5F8C\u6B04 +Utils-Import_Excel_Data=\u532F\u5165[Excel] +M-Save=\u5132\u5B58 +redo=\u53D6\u6D88\u5FA9\u539F +Status=\u72C0\u614B +Draw=\u7E6A\u88FD +FR-Designer_Message=\u8A0A\u606F +Records=\u689D\u8A18\u9304 +FR-Designer_ComboBox=\u4E0B\u62C9\u6846 +Driver=\u9A45\u52D5\u5668 +Template_Parameters=\u7BC4\u672C\u53C3\u6578 +Form-Remove_Repeat_Data=\u53BB\u9664\u91CD\u8907\u8CC7\u6599 +ECP_decode=\u6A21\u677F\u89E3\u5BC6 +Area_Name=\u5340\u57DF\u540D +Others=\u5176\u5B83 +Merge=\u5408\u5E76 +BackgroundTexture-Parchment=\u7F8A\u76AE\u7D19 +BindColumn-Bottom_N=\u5F8CN\u500B +Frame=\u6846\u67B6 +Bottom_Border_Line=\u4E0B\u6846\u7DDA +Muiti_In=\u591A\u5C64\u947D\u53D6 +FR-Designer-Dependence_Install_Online=\u5728\u7DDA\u5B89\u88DD\u4F9D\u8CF4\u74B0\u5883 +Use_Default_ToolBar=\u4F7F\u7528\u9810\u8A2D\u5DE5\u5177\u6B04 +M_Server-Platform_Manager=\u5831\u8868\u5E73\u81FA\u7BA1\u7406(P) +PageSetup-inches=\u82F1\u5BF8 +Form-Widget_Property=\u5C6C\u6027\u540D +FR-Layout_Padding=\u5167\u908A\u8DDD +Schema=\u4E3B\u984C +Server_Path=\u4E3B\u6A5F\u4F4D\u7F6E +Condition_Display=\u689D\u4EF6\u986F\u793A +FR-Server-Design_template_unopened=\u7121\u6CD5\u6253\u958B\u7BC4\u672C +Function-Function_Class_Name=\u51FD\u6578\u985E\u540D +Schedule-Template=\u7BC4\u672C\u540D\u7A31 +Tree_Data_Field=\u6A39\u72C0\u8CC7\u6599\u6B04\u4F4D +Border-Style-Normal=\u76F4\u89D2\u6846\u7DDA +Top_And_Double_Bottom_Border_Line=\u4E0A\u6846\u7DDA\u548C\u96D9\u4E0B\u6846\u7DDA +FR-Server_Embedded_Server_Start=\u5167\u7F6E\u7684\u4F3A\u670D\u5668-\u555F\u52D5 +FR-Designer-Basic_Restart_Designer_Later=Restart later +StyleAlignment-Top=\u9760\u4E0A\u5C0D\u9F4A +ReportServerP-First=\u9996\u9801 +Not_Exist=\u4E0D\u5B58\u5728 +FR-Remote_File_is_Locked=\u60A8\u6240\u8981\u6253\u958B\u7684\u5831\u8868\u6B63\u5728\u88AB\u5176\u4ED6\u4EBA\u7DE8\u8F2F\uFF0C\u8ACB\u7A0D\u5019\u6253\u958B +Apply=\u61C9\u7528 +Sytle-Indentation=\u7E2E\u9032 +Parameter-Float=\u55AE\u7CBE\u5EA6\u578B +HF-Center_Section=\u4E2D\u9593\u5340\u57DF +Form-Double_quotes=\u96D9\u5F15\u865F +M_File-Export-Word=Word\u683C\u5F0F +M_File-Export-Text=\u6587\u5B57\u6A94\u6848(\u88FD\u9304\u7B26\u5206\u9694) +PageSetup-First_Page_Number=\u8D77\u59CB\u9801\u78BC +Execute=\u57F7\u884C +Task=\u4EFB\u52D9 +Custom_Button_Type_Submit=\u63D0\u4EA4 +FR-Designer-Widget_Settings=\u63A7\u5236\u9805\u8A2D\u5B9A +IS_Need_Password=\u9700\u8981\u5BC6\u78BC +PageSetup-Horizontally=\u6C34\u5E73\u7F6E\u4E2D +No_Editor_Property_Definition=\u8A72\u7DE8\u8F2F\u5668\u6C92\u6709\u5C6C\u6027\u5B9A\u7FA9 +Env-Remote_Server=\u9060\u7A0B\u4F3A\u670D\u5668 +FR-Utils_Background=\u80CC\u666F +FR-Designer-Plugin_Warning=Warning +Server-version-info=\u60A8\u7576\u524D\u6253\u958B\u7684\u6A21\u677F\u6A94\u6848\u662F\u7531\u66F4\u9AD8\u7248\u672C\u7684\u8A2D\u8A08\u5668\u88FD\u4F5C\u7684\uFF0C\u6253\u958B\u6703\u6709\u51FA\u932F\u6216\u8005\u4E1F\u5931\u539F\u6709\u6A21\u677F\u5C6C\u6027\u7684\u98A8\u96AA\u3002\u5047\u5982\u9700\u8981\u6253\u958B\u6B64\u6A21\u677F\u8ACB\u60A8\u5C07\u60A8\u7684\u8A2D\u8A08\u5668\u5347\u7D1A\u81F3 +CellWrite-Page_After_Row=\u5217\u5F8C\u5206\u9801 +HF-Right_Section=\u53F3\u5340\u57DF +PageSetup-Title_Start_Row=\u91CD\u8907\u6A19\u984C\u5217 +From=\u5F9E\u7B2C +Preference-Grid_Line_Color=\u7DB2\u683C\u7DDA\u984F\u8272 +RowTo=\u5217\u81F3\u7B2C +FR-Designer_ReportColumns-Repeat_Column=\u91CD\u8907\u6B04\u5E8F\u6B04 +M_Server-Function_Manager=\u51FD\u6578\u7BA1\u7406\u5668 +KeyWord=\u95DC\u9375\u5B57 +DS-Multi_Dimensional_Database=\u591A\u7DAD\u8CC7\u6599\u5EAB +BiasD-Slope_Line=\u659C\u7DDA +Tue=\u4E8C +ReportServerP-Last=\u672B\u9801 +FR-Base_Columns=\u6B04 +SpecifiedG-Leave_in_their_own_groups=\u7559\u5728\u5404\u81EA\u7684\u7D44\u5167 +LOG-Please_Wait=\u8ACB\u7A0D\u5019 +Form-ToolBar=\u8868\u55AE\u5DE5\u5177\u6B04 +FR-Base_sure_remove_item=\u4F60\u78BA\u5BE6\u6C7A\u5B9A\u522A\u9664\u9078\u4E2D\u7684\u9805 +Component_Scale=\u5143\u4EF6\u7E2E\u653E +Hyperlink-Use_CJK_to_encode_parameter=\u4F7F\u7528CJK\u8655\u7406\u53C3\u6578 +LOG-Has_Been_Openned=\u5DF2\u7D93\u6253\u958B +FR-Designer-Dependence= +ECP_error_pwd=\u5BC6\u78BC\u932F\u8AA4 +REPORTLET=\u8A2A\u554F\u6A21\u677F\u7684\u8DEF\u5F91\u7684\u53C3\u6578\u3002 +RWA-Column_Offset=\u6B04\u504F\u79FB +Forecast=\u9810\u6E2C +Light_Orange=\u6DFA\u6854\u9EC3 +StyleAlignment-Vertical=\u5782\u76F4\u5C0D\u9F4A +Form-List=\u6B04\u8868 +ParameterD-Show_Parameter_Window=\u986F\u793A\u53C3\u6578\u7A97\u9AD4 +FR-Designer_Set_Submit_Event=\u8A2D\u5B9A\u63D0\u4EA4\u4E8B\u4EF6 +Value_Percent=\u503C\u6240\u4F54\u6BD4\u4F8B +DBCP_MIN_EVICTABLE_IDLE_TIMEMILLIS=\u4FDD\u6301\u7A7A\u9591\u6700\u5C0F\u6642\u9593\u503C +Function-The_class_must_be_located_in=\u6539\u985E\u5FC5\u9808\u653E\u7F6E\u5728 +FR-Action_Sort=\u6392\u5E8F +DataFunction-Average=\u5E73\u5747 +FR-Designer_Show_in_Containing_Folder=\u6253\u958B\u6240\u5728\u8CC7\u6599\u593E +M_File-Export-Excel=Excel\u683C\u5F0F +DataFunction-Max=\u6700\u5927\u503C +FR-Designer_Form-Widget_Name=\u63A7\u5236\u9805\u540D +FS_End_Date=\u7D50\u675F\u65E5\u671F +Export-Excel-Simple=\u539F\u6A23\u532F\u51FA +ColumnTo=\u6B04\u81F3\u7B2C +SpecifiedG-Discard_all_others=\u4E1F\u68C4\u5176\u4ED6\u6240\u6709\u7684 +DS-TableData=\u8CC7\u6599\u96C6 +Form-DataTable=\u8CC7\u6599\u8868 +Sub_Report_ToolTips=\u5B50\u5831\u8868\u63D0\u793A +Right_Top=\u53F3\u4E0A +M_Edit-Merge_Cell=\u5408\u5E76\u5132\u5B58\u683C +FR-Designer_Restore_Default=\u6062\u5FA9\u9810\u8A2D +Component_Interval=\u5143\u4EF6\u9593\u9694 +Cover_None=\u5168\u4E0D\u8986\u84CB +Datasource-From_Database=\u8CC7\u6599\u5EAB\u8868 +Folder=\u76EE\u9304 +Form-Allow_Edit=\u5141\u8A31\u76F4\u63A5\u7DE8\u8F2F +M_Edit-Clear=\u6E05\u9664(A) +ParentCell_Setting=\u7236\u683C\u8A2D\u5B9A +Only_selected_cell_can_paste_only=\u53EA\u6709\u9078\u4E2D\u5132\u5B58\u683C\u6642\u624D\u53EF\u4EE5\u8CBC\u4E0A +M_Report-Report_Columns=\u5831\u8868\u5206\u6B04 +Unit_Hundred=\u4F70 +FR-Designer_DataTable-Build=\u6975\u901F\u5206\u5C64\u69CB\u5EFA +Widget-Form_Widget_Config=\u8868\u55AE\u63A7\u5236\u9805 +Server-version-tip-moreInfo=\u5EFA\u8B70\u60A8\u6240\u5C6C\u5718\u968A\u4F7F\u7528\u7684\u6211\u65B9FineReport\u7522\u54C1\u7684\u8A2D\u8A08\u5668\u7248\u672C\u865F\u4EE5\u53CA\u90E8\u7F72\u7684\u4F3A\u670D\u5668\u7248\u672C\u865F\u4FDD\u6301\u4E00\u81F4\uFF0C\u4EE5\u907F\u514D\u7248\u672C\u4E0D\u4E00\u81F4\u9020\u6210\u7684\u554F\u984C\u98A8\u96AA\u3002\u5047\u5982\u60A8\u6253\u958B\u66F4\u9AD8\u8A2D\u8A08\u5668\u7248\u672C\u88FD\u4F5C\u7684\u6A21\u677F\uFF0C\u53EF\u80FD\u6253\u958B\u51FA\u932F\uFF0C\u4E5F\u53EF\u80FD\u4E1F\u5931\u539F\u6709\u6A21\u677F\u5C6C\u6027\u3002\u5047\u5982\u60A8\u88FD\u4F5C\u7684\u6A21\u677F\u4F7F\u7528\u7684\u8A2D\u8A08\u5668\u7248\u672C\u9AD8\u65BC\u60A8\u6700\u7D42\u90E8\u7F72\u6240\u7528\u7684\u4F3A\u670D\u5668\u7248\u672C\uFF0C\u4F3A\u670D\u5668\u53EF\u80FD\u7121\u6CD5\u6B63\u5E38\u8F09\u5165\u60A8\u88FD\u4F5C\u7684\u6A21\u677F +Actions=\u4EFB\u52D9 +FR-Designer-Dependence_Connect_Server_Error=\u7121\u6CD5\u9023\u63A5\u670D\u52D9\u5668\uFF0C\u8ACB\u7A0D\u5F8C\u518D\u8A66 +High=\u9AD8 +HJS-Send_Failed=\u767C\u9001\u5931\u6557 +HJS-Message=\u5167\u5BB9 +File-Allow_Upload_Files=\u5141\u8A31\u4E0A\u50B3\u6A94\u6848\u985E\u578B +FR-Designer-Form-ToolBar_Chart=\u5716\u8868 +Thick_Bottom_Border_Line=\u7C97\u5730\u6846\u7DDA +FR-Action_Remove=\u522A\u9664 +FRFont-Style=\u5B57\u5F62 +Select_DataColumn=\u9078\u64C7\u8CC7\u6599\u6B04 +StartValue=\u958B\u59CB\u503C +SINGLE_FILE_UPLOAD=\u53EA\u652F\u6301\u55AE\u6A94\u6848\u4E0A\u50B3 +BackgroundTexture-Cork=\u8EDF\u6728\u585E +M_Format-Data_Map=\u8CC7\u6599\u5B57\u5178 +FR-mobile_native_analysis=\u539F\u751F\u89E3\u6790 +HighLight=\u9AD8\u5149 +FR-Designer_Dropdown-More-Preview=\u4E0B\u62C9\u7372\u5F97\u66F4\u591A..... +local=\u672C\u6A5F +FR-Designer_Gradation=\u5C64\u6B21 +PageSetup-Finis_Start_Column=\u91CD\u8907\u7D50\u5C3E\u6B04 +Env-Invalid_User_and_Password=\u975E\u6CD5\u7684\u5E33\u865F\u6216\u5BC6\u78BC +FR-Designer-Plugin_All_Plugins=All plugins +FR-Designer_Prepare_Export=\u958B\u59CB\u532F\u51FA\uFF0C\u8ACB\u7A0D\u5019 +DBCP_TEST_ON_RETURN=\u6B78\u9084\u93C8\u63A5\u524D\u6AA2\u9A57 +no-alternatives=\u6C92\u6709\u9078\u64C7\u9805 +FR-Designer_Submmit_WClass=\u5F8C\u53F0\u985E\u63D0\u4EA4 +M_Insert-Slope_Line=\u63D2\u5165\u659C\u7DDA +FR-Designer-Plugin_Plugin_Description=Description +ExpandD-Not_Expand=\u4E0D\u64F4\u5C55 +Utils-Bottom_to_Top=\u5F9E\u4E0B\u5230\u4E0A +Collect-Click\!_Get_user_information_code=\u9EDE\u64CA\!\u7372\u53D6\u7528\u6236\u8A0A\u606F\u78BC +FR-Already_exist=\u7576\u524D\u74B0\u5883\u5DF2\u5B58\u5728 +Send=\u767C\u9001 +M_Edit-Clear_All=\u5168\u90E8(A) +Brown_Orange=\u68D5\u9EC3 +PageSetup-Portrait=\u7E31\u5411 +FR-Designer_Form-RadioGroup=\u55AE\u9078\u6309\u9215\u7D44 +FR-Utils-App_AllFiles=\u6240\u6709\u6A94\u6848 +Popup=\u5F48\u51FA +Server_Charset=\u4F3A\u670D\u5668\u7DE8\u78BC +CellWrite-Repeat_Content_When_Paging=\u5206\u9801\u65B7\u958B\u6642\u503C\u91CD\u8907\u986F\u793A +Utils-No_Pagination=\u4E0D\u5206\u9801 +Form-NullLayout=\u7D55\u5C0D\u5B9A\u4F4D +ConditionB-Remove_bracket=\u53BB\u6389\u62EC\u865F +email=\u90F5\u7BB1 +Minute=\u5206\u9418 +FR-Designer-Plugin_Update=Plugins to update +alraedy_close=\u5DF2\u7D93\u95DC\u9589 +ComboCheckBox-End_Symbol=\u7D50\u675F\u7B26 +DataColumn=\u8CC7\u6599\u6B04 +Form-Password=\u5BC6\u78BC +FR-Background_Image_Adjust=\u9069\u61C9 +Export-Excel-PageToSheet=\u5206\u9801\u5206Sheet\u532F\u51FA +Edit-Row_Count=\u5217\u6578 +DS-Report_TableData=\u5831\u8868\u8CC7\u6599\u96C6 +Sche-Hour=\u6642 +Group_Count=Group Count +EndValue=\u7D50\u675F\u503C +FR-Designer_Sytle-Indentation=\u7E2E\u9032 +DownBarBorderStyleAndColor=\u8DCC\u67F1\u6A23\u5F0F +World=\u4E16\u754C +FR-Designer-Basic_Cancel=Cancel +Finally=\u6700\u5F8C +Low=\u4F4E +Please_Input_The_Key=\u8ACB\u8F38\u5165\u5C0D\u61C9\u5730\u5716\u4F7F\u7528\u7684key +Smart=\u667A\u80FD +Preference-Predefined=Predefined +Current_custom_global=\u7576\u524D\u5831\u8868\u6240\u7528\u81EA\u5B9A\u7FA9\u5168\u5C40\u6A23\u5F0F +FR-Designer-Plugin_Shop_Need_Install=\u60A8\u9084\u6C92\u6709\u63D2\u4EF6\u5546\u5E97\u7684\u8CC7\u6E90,\u662F\u5426\u4E0B\u8F09? +WEB-Pagination_Setting=\u5206\u9801\u9810\u89BD\u8A2D\u5B9A +RCodeDrawPix=\u50CF\u7D20 +FR-Designer-Widget-Style_Alpha=\u4E0D\u900F\u660E\u5EA6 +BorderLayout-North=\u5317 +HJS-Current_Page=\u7576\u524D\u9801 +Compile=Compile +Show_Blank_Row=\u88DC\u5145\u7A7A\u767D\u5217 +TableData_Dynamic_Parameter_Setting=\u52D5\u614B\u53C3\u6578\u6CE8\u5165 +FR-Background_Image_Default=\u9810\u8A2D +BackgroundTexture-WhiteMarble=\u767D\u8272\u5927\u7406\u77F3 +DataFunction-Sum=\u6C42\u548C +Collect-The_user_information_code_is_invalid=\u9019\u500B\u7528\u6236\u8A0A\u606F\u78BC\u662F\u975E\u6CD5\u7684 +Preference-Locale=Locale +M_File-Export-PDF=PDF\u683C\u5F0F +BiasD-From-lower_left_to_upper_right=\u7E3D\u5DE6\u4E0B\u5230\u53F3\u4E0A\u767C\u6563 +Border-Style=\u6846\u7DDA\u6A23\u5F0F +Sort=\u6392\u5E8F +Image-Image_Layout=\u5716\u7247\u5E03\u5C40 +Panel=\u9762\u677F +FR-Designer-Basic_Copy_Build_NO_OK=\u69CB\u5EFA\u7248\u672C\u865F\u5DF2\u7D93\u5FA9\u88FD\u5230\u526A\u8CBC\u677F +All_Border_Line=\u6240\u6709\u6846\u7DDA +FR-Utils-Please_Input_a_New_Name=\u8ACB\u8F38\u5165\u65B0\u7684\u540D\u5B57 +FR-Base_Formula_Plugin=\u63D2\u4EF6\u51FD\u6578 +Two_Rows_Of_Three_Grid=\u5169\u5217\u4E09\u6B04\u7684\u683C\u5B50 +FR-Designer_Certificate_Pass=https\u79D8\u9470 +Bubble-Series_Name=\u7CFB\u5217\u540D +M-New_Multi_Report=\u65B0\u589E\u8907\u5408\u5F0F\u5831\u8868 +BackgroundTexture-PinkTissuePaper=\u7C89\u8272\u7802\u7D19 +Preference-Support_Default_Parent_Calculate=\u9810\u8A2D\u7236\u683C\u8A08\u7B97 +Show_Blank_Column=\u88DC\u5145\u7A7A\u767D\u6B04 +BaiduMap=\u767E\u5EA6\u5730\u5716 +Report-Web_Attributes=\u5831\u8868Web\u5C6C\u6027 +FR-Designer_StyleAlignment-Wrap_Text=\u81EA\u52D5\u63DB\u5217 +Need=\u9700\u8981 +Parameter-Double=\u96D9\u7CBE\u5EA6\u578B +Config_Servlet=\u914D\u7F6E\u9060\u7A0B\u4F3A\u670D\u5668 +Form-Comma=\u9017\u865F +Verify=\u6821\u9A57 +PageSetup-Landscape=\u6A6B\u5411 +Weeks=\u500B\u661F\u671F +FR-Designer-Widget-Style_Title_Background=\u6A19\u984C\u80CC\u666F +Preference-Pagination_Line_Color=\u5206\u9801\u7DDA\u984F\u8272 +Test_URL=\u6E2C\u8A66\u9023\u63A5 +Fill_blank_Data=\u88DC\u5145\u7A7A\u767D\u8CC7\u6599 +ReportServerP-The_name_of_printer_cannot_be_null=\u5370\u8868\u6A5F\u7684\u540D\u5B57\u4E0D\u80FD\u70BA\u7A7A +FR-Designer-Basic_Copy_Activation_Key=Double click to copy key to clipboard +Continuum=\u76F8\u9130\u9023\u7E8C +BackgroundTexture-MediumWood=\u6DF1\u8272\u6728\u88FD +Datasource-Column_Index=\u6B04\u5E8F\u865F +Function-Function_File=\u51FD\u6578\u6A94\u6848 +Form-Component_Bounds=\u5143\u4EF6\u908A\u754C +Utils-Submit=\u63D0\u4EA4 +Conditions_formula=\u689D\u4EF6\u516C\u5F0F +M_Insert-Image=\u63D2\u5165\u5716\u7247 +FR-Designer-Plugin_Will_Be_Delete=Delete plugin +FormulaD-Functions=\u51FD\u6578 +Mobile_Terminal=\u884C\u52D5\u8A2D\u5099 +CheckBox=\u5FA9\u9078\u6846 +FR-Designer-Plugin_Install=Install +Sun=\u65E5 +FR-Designer_ToolBar_Bottom=\u5E95\u90E8\u5DE5\u5177\u6B04 +Widget-Width=\u63A7\u5236\u9805\u5BEC\u5EA6 +Series_Name=\u7CFB\u5217\u540D +Set_Row_Title_Start=\u8A2D\u5B9A\u91CD\u8907\u6A19\u984C\u5217 +HF-Default_Page=\u9810\u8A2D\u9801 +Env_Des=\u5982\u679C\u767B\u9304\u74B0\u5883\u4E2D\u7684\u5831\u8868\u5DE5\u7A0B\u555F\u7528\u4E86\u6B0A\u9650\uFF0C\u5E33\u865F\u548C\u5BC6\u78BC\u7684\u586B\u5BEB\u5FC5\u9808\u5C0D\u61C9\u767B\u9304\u74B0\u5883\u7684\u7528\u6236\u548C\u5BC6\u78BC\u3002 +Widget-User_Defined=\u9810\u5B9A\u7FA9 +Url_location=\u7D55\u5C0D\u8DEF\u5F91 +Disk_File=\u78C1\u789F\u6A94\u6848 +Inside=\u5167\u90E8 +FR-Designer_filedChosen=\u4F9D\u8CF4\u7684\u5B57\u6BB5 +ServerM-Predefined_Styles=\u9810\u5B9A\u7FA9\u6A23\u5F0F +is_need_word_adjust=\u4E0D\u56FA\u5B9A\u5217\u9AD8\u532F\u51FA +Background-Null=\u6C92\u6709\u80CC\u666F +PageSetup-Vertically=\u5782\u76F4\u7F6E\u4E2D +FR-Designer_Root=\u6839\u7BC0\u9EDE +FR-Designer_Form-TextArea=\u6587\u672C\u57DF +ReportServerP-Import_JavaScript=\u5F15\u7528JavaScript +Form-TableTree=\u8868\u683C\u6A39 +Opened=\u5DF2\u958B\u5553 +M_Edit-Delete=\u522A\u9664(D) +Widget-Form_Widget_Container=\u8868\u55AE\u5BB9\u5668 +BindColumn-Summary=\u532F\u7E3D +Sche-Second=\u79D2 +Server-Open_Service_Manager=\u6253\u958B\u4F3A\u670D\u5668\u7BA1\u7406\u5668 +FRFont-Effects=\u7279\u6B8A\u6548\u679C +OtherGroup_Name=\u5176\u4ED6\u7D44\u7684\u540D\u5B57 +Specify=\u6307\u5B9A +Highlight-Click_to_Choose_Property_To_Modify=\u9EDE\u64CA\u9078\u64C7\u8981\u6539\u8B8A\u7684\u5C6C\u6027 +triggered=\u88AB\u89F8\u767C +Double_Bottom_BorderLine=\u96D9\u5E95\u6846\u7DDA +M_Insert-Sub_Report=\u63D2\u5165\u5B50\u5831\u8868 +Unit_Ten=\u5341 +Polybolck=\u805A\u5408\u584A +Select_sort_order=\u9078\u64C7\u6392\u6B04\u9806\u5E8F +HJS-Mail_to=\u6536\u4EF6\u4EBA +StyleAlignment-Left=\u9760\u5DE6\u5C0D\u9F4A +Two_Rows_Of_Two_Grid=\u5169\u5217\u5169\u6B04\u7684\u683C\u5B50 +FR-Designer-Form-Please_Drag_ParaPane=\u8ACB\u62D6\u5165\u53C3\u6578\u9762\u677F +Milliseconds=\u6BEB\u79D2 +DataFunction-None=\u7121 +Delivery=\u50B3\u905E +ColumnSpan=\u6B04\u8DE8\u5EA6 +StyleAlignment-Bottom=\u9760\u4E0B\u5C0D\u9F4A +Read_failure=\u8B80\u53D6\u5931\u6557\uFF0C\u53EF\u80FD\u6E90\u6A94\u6848\u5DF2\u640D\u58DE +Verify-Verify=\u8CC7\u6599\u6821\u9A57 +FR-Designer-Widget-Style_Title_Format=\u6A19\u984C\u683C\u5F0F +FR-Designer_Edit_String_To_Formula=\u662F\u5426\u5C07\u5B57\u5143\u4E32\u7DE8\u8F2F\u70BA\u516C\u5F0F +FR-Base_UnSignIn=\u672A\u767B\u9304 +Every=\u6BCF +CellWrite-Preview_Cell_Content=\u9810\u89BD\u5132\u5B58\u683C\u5167\u5BB9 +FormulaD-Data_Fields=\u8CC7\u6599\u9805 \ No newline at end of file From 3f32486fd88250b9a0faeaa75526d3e38ce287d0 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Wed, 3 May 2017 15:15:05 +0800 Subject: [PATCH 323/343] =?UTF-8?q?REPORT-2537=20=E5=A4=9A=E5=B1=82?= =?UTF-8?q?=E6=AC=A1=E9=83=A8=E9=97=A8=E5=B7=A5=E5=85=B7=E6=A0=8F=E6=9D=83?= =?UTF-8?q?=E9=99=90=E7=BB=86=E7=B2=92=E5=BA=A6=E8=AE=BE=E7=BD=AE=E4=B8=8D?= =?UTF-8?q?=E7=94=9F=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/AuthorityEditToolBarPane.java | 249 +++++- .../ElementCasePaneAuthorityEditPane.java | 836 +++++++++++++++++- 2 files changed, 1083 insertions(+), 2 deletions(-) diff --git a/designer/src/com/fr/design/mainframe/AuthorityEditToolBarPane.java b/designer/src/com/fr/design/mainframe/AuthorityEditToolBarPane.java index d464d8f48..296d72b96 100644 --- a/designer/src/com/fr/design/mainframe/AuthorityEditToolBarPane.java +++ b/designer/src/com/fr/design/mainframe/AuthorityEditToolBarPane.java @@ -1 +1,248 @@ -package com.fr.design.mainframe; import com.fr.design.constants.LayoutConstants; import com.fr.design.constants.UIConstants; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itree.refreshabletree.ExpandMutableTreeNode; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.roleAuthority.ReportAndFSManagePane; import com.fr.design.roleAuthority.RolesAlreadyEditedPane; import com.fr.design.webattr.ToolBarButton; import com.fr.general.ComparatorUtils; import com.fr.general.Inter; import com.fr.stable.StringUtils; import javax.swing.*; import javax.swing.tree.TreePath; import java.awt.*; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.List; /** * 用于在权限编辑状态对工具栏的元素进行权限编辑的面板 * Author : daisy * Date: 13-9-18 * Time: 下午2:15 */ public class AuthorityEditToolBarPane extends AuthorityPropertyPane { private static final int TITLE_HEIGHT = 19; private AuthorityEditPane authorityEditPane = null; private AuthorityToolBarPane authorityToolBarPane; private String[] selectedPathArray; public AuthorityEditToolBarPane(List buttonlists) { super(HistoryTemplateListPane.getInstance().getCurrentEditingTemplate()); this.setLayout(new BorderLayout()); this.setBorder(null); UILabel authorityTitle = new UILabel(Inter.getLocText(new String[]{"DashBoard-Potence", "Edit"})) { @Override public Dimension getPreferredSize() { return new Dimension(super.getPreferredSize().width, TITLE_HEIGHT); } }; authorityTitle.setHorizontalAlignment(SwingConstants.CENTER); authorityTitle.setVerticalAlignment(SwingConstants.CENTER); JPanel northPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); northPane.add(authorityTitle, BorderLayout.CENTER); northPane.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, UIConstants.LINE_COLOR)); this.add(northPane, BorderLayout.NORTH); authorityEditPane = new AuthorityEditPane(buttonlists); this.add(authorityEditPane, BorderLayout.CENTER); } public void setAuthorityToolBarPane(AuthorityToolBarPane authorityToolBarPane) { this.authorityToolBarPane = authorityToolBarPane; } public void populate() { authorityToolBarPane.populateAuthority(); signelSelection(); authorityEditPane.populateDetials(); } private void signelSelection() { JTemplate jTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); if (jTemplate.isJWorkBook()) { //清参数面板 jTemplate.removeParameterPaneSelection(); //清报表主体 jTemplate.removeTemplateSelection(); } } private class AuthorityEditPane extends JPanel { private static final int TOP_GAP = 11; private static final int LEFT_GAP = 8; private static final int ALIGNMENT_GAP = -3; private UILabel type = null; private UILabel name = null; private JPanel checkPane = null; private List buttonlists; private UICheckBox buttonVisible = new UICheckBox(Inter.getLocText("Widget-Visible")); private ItemListener itemListener = new ItemListener() { public void itemStateChanged(ItemEvent e) { String selectedRole = ReportAndFSManagePane.getInstance().getRoleTree().getSelectedRoleName(); initSelectedselectedPathArray(); if (ComparatorUtils.equals(selectedRole, Inter.getLocText("Role"))) { return; } if (selectedRole == null) { return; } if (selectedPathArray == null) { return; } for (int t = 0; t _buttonlists = AuthorityEditPane.this.buttonlists; for (int j = 0; j < _buttonlists.size(); j++) { if (_buttonlists.get(j).isSelected()) { //由引擎实现保存进模板报表 authorityToolBarPane.setAuthorityWebAttr(_buttonlists.get(j).getWidget(), checkbox.isSelected(), selectedPathArray[t]); } } } } }; private void initSelectedselectedPathArray () { TreePath[] selectionPaths = ReportAndFSManagePane.getInstance().getRoleTree().getCheckBoxTreeSelectionModel().getSelectionPaths(); if (selectionPaths.length == 1){ if(((ExpandMutableTreeNode)(selectionPaths[0].getLastPathComponent())).getChildCount() > 0){ ExpandMutableTreeNode node = (ExpandMutableTreeNode) ((ExpandMutableTreeNode)(selectionPaths[0].getLastPathComponent())).getLastChild(); selectedPathArray = new String[node.getChildCount()]; for (int i = 0 ; i < node.getChildCount(); i++) { ExpandMutableTreeNode n = (ExpandMutableTreeNode) node.getChildAt(i); String nodeName = n.getUserObject().toString(); selectedPathArray[i] = nodeName; } } else { selectedPathArray = pathToString(selectionPaths); } } else { selectedPathArray = pathToString(selectionPaths); } } protected String[] pathToString(TreePath[] path) { String roles = StringUtils.EMPTY; if(path == null || path.length == 0){ return null; } for(TreePath tempPath:path){ String temp = tempPath.toString(); boolean isTrue = temp.length() > 0 && temp.charAt(0) == '[' && temp.endsWith("]"); if (isTrue) { temp = temp.substring(1, temp.length() - 1); String[] selectedRoles = temp.split(","); String role = selectedRoles[2].trim(); if(roles.isEmpty()){ roles = role; }else{ roles = roles + "," + role; } } } String[] selectedRole = roles.split(","); return selectedRole; } public AuthorityEditPane(List buttonlists) { setLayout(new BorderLayout()); type = new UILabel(); name = new UILabel(); checkPane = new JPanel(); checkPane.setLayout(new BorderLayout()); this.add(layoutText(), BorderLayout.WEST); this.add(layoutPane(), BorderLayout.CENTER); this.setBorder(BorderFactory.createEmptyBorder(TOP_GAP, LEFT_GAP, 0, 0)); this.buttonlists = buttonlists; buttonVisible.addItemListener(itemListener); } private JPanel layoutText() { double p = TableLayout.PREFERRED; Component[][] components = new Component[][]{ new Component[]{new UILabel(Inter.getLocText("Type") + ":", SwingConstants.RIGHT)}, new Component[]{new UILabel(Inter.getLocText("WF-Name") + ":", SwingConstants.RIGHT)}, new Component[]{new UILabel(Inter.getLocText("DashBoard-Potence") + ":", SwingConstants.RIGHT)}, }; double[] rowSize = {p, p, p}; double[] columnSize = {p}; int[][] rowCount = {{1}, {1}, {1}}; return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM); } private JPanel layoutPane() { double f = TableLayout.FILL; double p = TableLayout.PREFERRED; Component[][] components = new Component[][]{ new Component[]{type}, new Component[]{name}, new Component[]{checkPane}, }; double[] rowSize = {p, p, p}; double[] columnSize = {f}; int[][] rowCount = {{1}, {1}, {1}}; return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM); } /** * 更新权限编辑面板的具体内容:类型、名称、权限面板 */ public void populateDetials() { populateName(); populateType(); populateCheckPane(); checkVisibleCheckBoxes(); } private void checkVisibleCheckBoxes() { buttonVisible.removeItemListener(itemListener); String selected = ReportAndFSManagePane.getInstance().getRoleTree().getSelectedRoleName(); if (selected == null) { buttonVisible.setSelected(true); } for (int i = 0; i < buttonlists.size(); i++) { if (buttonlists.get(i).isSelected()) { buttonVisible.setSelected(!buttonlists.get(i).isDoneAuthorityEdited(selected)); break; } } buttonVisible.addItemListener(itemListener); } public void populateType() { if (name.getText() == "") { type.setText(""); } else { type.setText(Inter.getLocText(new String[]{"ReportServerP-Toolbar", "Form-Button"})); } } public void populateName() { String names = ""; for (int i = 0; i < buttonlists.size(); i++) { if (buttonlists.get(i).isSelected()) { names += "," + buttonlists.get(i).getNameOption().optionName(); } } if (names != "") { names = names.substring(1); } name.setText(names); } public void populateCheckPane() { checkPane.removeAll(); if (name.getText() == "") { return; } double f = TableLayout.FILL; double p = TableLayout.PREFERRED; Component[][] components = new Component[][]{ new Component[]{new UILabel(Inter.getLocText("Form-Button"), SwingConstants.LEFT), buttonVisible}, }; double[] rowSize = {p, p}; double[] columnSize = {p, p, f}; int[][] rowCount = {{1, 1, 1}, {1, 1, 1}}; JPanel check = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM); checkPane.add(check, BorderLayout.CENTER); checkPane.setBorder(BorderFactory.createEmptyBorder(ALIGNMENT_GAP, 0, 0, 0)); } } } \ No newline at end of file +package com.fr.design.mainframe; + +import com.fr.design.constants.LayoutConstants; +import com.fr.design.constants.UIConstants; +import com.fr.design.file.HistoryTemplateListPane; +import com.fr.design.gui.icheckbox.UICheckBox; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.itree.refreshabletree.ExpandMutableTreeNode; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.roleAuthority.ReportAndFSManagePane; +import com.fr.design.roleAuthority.RolesAlreadyEditedPane; +import com.fr.design.webattr.ToolBarButton; +import com.fr.general.ComparatorUtils; +import com.fr.general.Inter; + +import javax.swing.*; +import javax.swing.tree.TreePath; +import java.awt.*; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.util.List; + +/** + * 用于在权限编辑状态对工具栏的元素进行权限编辑的面板 + * Author : daisy + * Date: 13-9-18 + * Time: 下午2:15 + */ +public class AuthorityEditToolBarPane extends AuthorityPropertyPane { + + private static final int TITLE_HEIGHT = 19; + private AuthorityEditPane authorityEditPane = null; + private AuthorityToolBarPane authorityToolBarPane; + private String[] selectedPathArray; + + public AuthorityEditToolBarPane(List buttonlists) { + super(HistoryTemplateListPane.getInstance().getCurrentEditingTemplate()); + this.setLayout(new BorderLayout()); + this.setBorder(null); + UILabel authorityTitle = new UILabel(Inter.getLocText(new String[]{"DashBoard-Potence", "Edit"})) { + @Override + public Dimension getPreferredSize() { + return new Dimension(super.getPreferredSize().width, TITLE_HEIGHT); + } + }; + authorityTitle.setHorizontalAlignment(SwingConstants.CENTER); + authorityTitle.setVerticalAlignment(SwingConstants.CENTER); + JPanel northPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + northPane.add(authorityTitle, BorderLayout.CENTER); + northPane.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, UIConstants.LINE_COLOR)); + this.add(northPane, BorderLayout.NORTH); + authorityEditPane = new AuthorityEditPane(buttonlists); + this.add(authorityEditPane, BorderLayout.CENTER); + } + + public void setAuthorityToolBarPane(AuthorityToolBarPane authorityToolBarPane) { + this.authorityToolBarPane = authorityToolBarPane; + } + + + public void populate() { + authorityToolBarPane.populateAuthority(); + signelSelection(); + authorityEditPane.populateDetials(); + } + + + private void signelSelection() { + JTemplate jTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); + if (jTemplate.isJWorkBook()) { + //清参数面板 + jTemplate.removeParameterPaneSelection(); + //清报表主体 + jTemplate.removeTemplateSelection(); + } + } + + + private class AuthorityEditPane extends JPanel { + private static final int TOP_GAP = 11; + private static final int LEFT_GAP = 8; + private static final int ALIGNMENT_GAP = -3; + private UILabel type = null; + private UILabel name = null; + private JPanel checkPane = null; + private List buttonlists; + private UICheckBox buttonVisible = new UICheckBox(Inter.getLocText("Widget-Visible")); + private ItemListener itemListener = new ItemListener() { + public void itemStateChanged(ItemEvent e) { + String selectedRole = ReportAndFSManagePane.getInstance().getRoleTree().getSelectedRoleName(); + initSelectedPathArray(); + if (ComparatorUtils.equals(selectedRole, Inter.getLocText("Role")) || selectedRole == + null || selectedPathArray == null) { + return; + } + for (int t = 0; t < selectedPathArray.length; t++) { + for (int i = 0; i < buttonlists.size(); i++) { + if (buttonlists.get(i).isSelected()) { + buttonlists.get(i).changeAuthorityState(selectedPathArray[t], buttonVisible.isSelected()); + authorityToolBarPane.repaint(); + } + } + HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().fireTargetModified(); + RolesAlreadyEditedPane.getInstance().refreshDockingView(); + UICheckBox checkbox = (UICheckBox) e.getSource(); + List btns = AuthorityEditPane.this.buttonlists; + for (int j = 0; j < btns.size(); j++) { + if (btns.get(j).isSelected()) { + //由引擎实现保存进模板报表 + authorityToolBarPane.setAuthorityWebAttr(btns.get(j).getWidget(), checkbox.isSelected(), selectedPathArray[t]); + } + } + } + } + }; + + /** + * @see ElementCasePaneAuthorityEditPane initSelectedPathArray() + */ + private void initSelectedPathArray() { + TreePath[] selectionPaths = ReportAndFSManagePane.getInstance().getRoleTree().getCheckBoxTreeSelectionModel().getSelectionPaths(); + if (selectionPaths.length == 1) { + if (((ExpandMutableTreeNode) (selectionPaths[0].getLastPathComponent())).getChildCount() > 0) { + ExpandMutableTreeNode node = (ExpandMutableTreeNode) ((ExpandMutableTreeNode) (selectionPaths[0].getLastPathComponent())).getLastChild(); + selectedPathArray = new String[node.getChildCount()]; + for (int i = 0; i < node.getChildCount(); i++) { + ExpandMutableTreeNode n = (ExpandMutableTreeNode) node.getChildAt(i); + String nodeName = n.getUserObject().toString(); + selectedPathArray[i] = nodeName; + } + } else { + selectedPathArray = ElementCasePaneAuthorityEditPane.pathToString(selectionPaths); + } + } else { + selectedPathArray = ElementCasePaneAuthorityEditPane.pathToString(selectionPaths); + } + + } + + public AuthorityEditPane(List buttonlists) { + setLayout(new BorderLayout()); + type = new UILabel(); + name = new UILabel(); + checkPane = new JPanel(); + checkPane.setLayout(new BorderLayout()); + this.add(layoutText(), BorderLayout.WEST); + this.add(layoutPane(), BorderLayout.CENTER); + this.setBorder(BorderFactory.createEmptyBorder(TOP_GAP, LEFT_GAP, 0, 0)); + this.buttonlists = buttonlists; + buttonVisible.addItemListener(itemListener); + } + + private JPanel layoutText() { + double p = TableLayout.PREFERRED; + Component[][] components = new Component[][]{ + new Component[]{new UILabel(Inter.getLocText("Type") + ":", SwingConstants.RIGHT)}, + new Component[]{new UILabel(Inter.getLocText("WF-Name") + ":", SwingConstants.RIGHT)}, + new Component[]{new UILabel(Inter.getLocText("DashBoard-Potence") + ":", SwingConstants.RIGHT)}, + }; + double[] rowSize = {p, p, p}; + double[] columnSize = {p}; + int[][] rowCount = {{1}, {1}, {1}}; + return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM); + } + + + private JPanel layoutPane() { + double f = TableLayout.FILL; + double p = TableLayout.PREFERRED; + Component[][] components = new Component[][]{ + new Component[]{type}, + new Component[]{name}, + new Component[]{checkPane}, + }; + double[] rowSize = {p, p, p}; + double[] columnSize = {f}; + int[][] rowCount = {{1}, {1}, {1}}; + return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM); + } + + /** + * 更新权限编辑面板的具体内容:类型、名称、权限面板 + */ + public void populateDetials() { + populateName(); + populateType(); + populateCheckPane(); + checkVisibleCheckBoxes(); + } + + private void checkVisibleCheckBoxes() { + buttonVisible.removeItemListener(itemListener); + String selected = ReportAndFSManagePane.getInstance().getRoleTree().getSelectedRoleName(); + if (selected == null) { + buttonVisible.setSelected(true); + } + for (int i = 0; i < buttonlists.size(); i++) { + if (buttonlists.get(i).isSelected()) { + buttonVisible.setSelected(!buttonlists.get(i).isDoneAuthorityEdited(selected)); + break; + } + } + buttonVisible.addItemListener(itemListener); + } + + + public void populateType() { + if (name.getText() == "") { + type.setText(""); + } else { + type.setText(Inter.getLocText(new String[]{"ReportServerP-Toolbar", "Form-Button"})); + } + } + + public void populateName() { + String names = ""; + for (int i = 0; i < buttonlists.size(); i++) { + if (buttonlists.get(i).isSelected()) { + names += "," + buttonlists.get(i).getNameOption().optionName(); + } + } + if (names != "") { + names = names.substring(1); + } + name.setText(names); + } + + public void populateCheckPane() { + checkPane.removeAll(); + if (name.getText() == "") { + return; + } + double f = TableLayout.FILL; + double p = TableLayout.PREFERRED; + Component[][] components = new Component[][]{ + new Component[]{new UILabel(Inter.getLocText("Form-Button"), SwingConstants.LEFT), buttonVisible}, + }; + double[] rowSize = {p, p}; + double[] columnSize = {p, p, f}; + int[][] rowCount = {{1, 1, 1}, {1, 1, 1}}; + JPanel check = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM); + checkPane.add(check, BorderLayout.CENTER); + checkPane.setBorder(BorderFactory.createEmptyBorder(ALIGNMENT_GAP, 0, 0, 0)); + } + } +} \ No newline at end of file diff --git a/designer/src/com/fr/design/mainframe/ElementCasePaneAuthorityEditPane.java b/designer/src/com/fr/design/mainframe/ElementCasePaneAuthorityEditPane.java index 3f9a717dd..f654b3d29 100644 --- a/designer/src/com/fr/design/mainframe/ElementCasePaneAuthorityEditPane.java +++ b/designer/src/com/fr/design/mainframe/ElementCasePaneAuthorityEditPane.java @@ -1 +1,835 @@ -package com.fr.design.mainframe; import com.fr.design.constants.LayoutConstants; import com.fr.design.editor.ValueEditorPane; import com.fr.design.editor.ValueEditorPaneFactory; import com.fr.design.event.UIObserverListener; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itree.refreshabletree.ExpandMutableTreeNode; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.toolbar.AuthorityEditToolBarComponent; import com.fr.design.roleAuthority.ReportAndFSManagePane; import com.fr.design.roleAuthority.RolesAlreadyEditedPane; import com.fr.form.ui.Widget; import com.fr.general.ComparatorUtils; import com.fr.general.Inter; import com.fr.grid.selection.CellSelection; import com.fr.grid.selection.FloatSelection; import com.fr.grid.selection.Selection; import com.fr.js.NameJavaScriptGroup; import com.fr.report.cell.AbstractCellElement; import com.fr.report.cell.DefaultTemplateCellElement; import com.fr.report.cell.FloatElement; import com.fr.report.cell.TemplateCellElement; import com.fr.report.elementcase.TemplateElementCase; import com.fr.report.worksheet.WorkSheet; import com.fr.stable.ColumnRow; import com.fr.stable.StringUtils; import javax.swing.*; import javax.swing.tree.TreePath; import java.awt.*; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; /** * Author : daisy * Date: 13-9-4 * Time: 下午4:01 */ public class ElementCasePaneAuthorityEditPane extends AuthorityEditPane { private static final int WIDGET_VISIBLE = 0; private static final int WIDGET_USABLE = 1; private static final int CELL = 2; private static final int HYPER_LINK = 3; private static final int FLOAT_SELECTION = 3; private static final int NEW_VALUE = 4; //新值下面的编辑器的宽度 private static final int NEW_PANE_WIDTH = 120; private UICheckBox floatElementVisibleCheckBoxes = new UICheckBox(Inter.getLocText("FR-Designer_Visible")); private UICheckBox cellElementVisibleCheckBoxes = new UICheckBox(Inter.getLocText("FR-Designer_Visible")); private UICheckBox widgetVisible = new UICheckBox(Inter.getLocText("FR-Designer_Visible")); private UICheckBox widgetAvailable = new UICheckBox(Inter.getLocText("FR-Designer_Enabled")); private UICheckBox gridColumnRowVisible = new UICheckBox(Inter.getLocText("FR-Designer_Hide")); private UICheckBox newValue = new UICheckBox(Inter.getLocText("FR-Designer_New_Value")); private ValueEditorPane valueEditor = ValueEditorPaneFactory.createBasicValueEditorPane(NEW_PANE_WIDTH); private UICheckBox[] hyperlinkCheckBoxes = null; private ElementCasePane elementCasePane = null; private int selectionType = CellSelection.NORMAL; private CellSelection cellSelection; private FloatSelection floatSelection; private boolean isAllHasWidget; private boolean isAllHasHyperlink; private String[] selectedPathArray; private UIObserverListener observerListener = new UIObserverListener() { @Override public void doChange() { if (elementCasePane == null || cellSelection == null) { return; } if (setAuthorityStyle(NEW_VALUE)) { elementCasePane.fireTargetModified(); } } }; private ItemListener newValuelistener = new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if (elementCasePane == null || cellSelection == null) { return; } if (setAuthorityStyle(NEW_VALUE)) { valueEditor.setEnabled(newValue.isSelected()); doAfterAuthority(); } } }; private ItemListener columnRowAuthorityListener = new ItemListener() { public void itemStateChanged(ItemEvent e) { if (elementCasePane == null) { return; } boolean isDone = false; if (selectionType == CellSelection.CHOOSE_COLUMN) { isDone = setAuthorityColumn(); } else { isDone = setAuthorityRow(); } if (isDone) { doAfterAuthority(); } } }; private ItemListener floatElementAuthorityListener = new ItemListener() { public void itemStateChanged(ItemEvent e) { if (elementCasePane == null || floatSelection == null) { return; } if (setLFloatAuthorityStyle()) { doAfterAuthority(); } } }; private ItemListener cellRolesAuthorityListener = new ItemListener() { public void itemStateChanged(ItemEvent e) { if (elementCasePane == null || cellSelection == null) { return; } if (setAuthorityStyle(CELL)) { doAfterAuthority(); } } }; private ItemListener widgetVisibleRoleAuthorityListener = new ItemListener() { public void itemStateChanged(ItemEvent e) { if (elementCasePane == null || cellSelection == null) { return; } if (setAuthorityStyle(WIDGET_VISIBLE)) { doAfterAuthority(); } } }; private ItemListener widgetUsableAuthorityListener = new ItemListener() { public void itemStateChanged(ItemEvent e) { if (elementCasePane == null || cellSelection == null) { return; } if (setAuthorityStyle(WIDGET_USABLE)) { doAfterAuthority(); } } }; public ElementCasePaneAuthorityEditPane(ElementCasePane elementCasePane) { super(elementCasePane); this.elementCasePane = elementCasePane; initCheckBoxesState(); initListener(); } private void doAfterAuthority() { elementCasePane.repaint(); elementCasePane.fireTargetModified(); RolesAlreadyEditedPane.getInstance().refreshDockingView(); RolesAlreadyEditedPane.getInstance().setReportAndFSSelectedRoles(); RolesAlreadyEditedPane.getInstance().repaint(); checkCheckBoxes(); } private boolean setAuthorityColumn() { initSelectedselectedPathArray(); String selectedRoles = ReportAndFSManagePane.getInstance().getRoleTree().getSelectedRoleName(); if (ComparatorUtils.equals(selectedRoles, Inter.getLocText("FR-Designer_Role"))) { return false; } if (selectedRoles == null) { return false; } if (selectedPathArray == null) { return false; } final TemplateElementCase elementCase = elementCasePane.getEditingElementCase(); boolean isVisible = !gridColumnRowVisible.isSelected(); for (int t = 0; t= 0; j--) { for (int i = cellRectangle.width - 1; i >= 0; i--) { int column = i + cellRectangle.x; int row = j + cellRectangle.y; TemplateCellElement editCellElement = elementCase.getTemplateCellElement(column, row); if (editCellElement == null) { editCellElement = new DefaultTemplateCellElement(column, row); elementCase.addCellElement(editCellElement); } else { // 对于合并的格子,我们不多次计算的权限. if (editCellElement.getColumn() != column || editCellElement.getRow() != row) { continue; } } if (type == CELL) { editCellElement.changeAuthorityState(selectedPathArray[t], cellElementVisibleCheckBoxes.isSelected()); } else if (type == NEW_VALUE) { editCellElement.changeNewValueAuthorityState(selectedPathArray[t], newValue.isSelected(), valueEditor.update()); } else if (type == WIDGET_VISIBLE) { Widget widget = editCellElement.getWidget(); widget.changeVisibleAuthorityState(selectedPathArray[t], widgetVisible.isSelected()); } else { Widget widget = editCellElement.getWidget(); widget.changeUsableAuthorityState(selectedPathArray[t], widgetAvailable.isSelected()); } } } } } return true; } private void initSelectedselectedPathArray () { TreePath[] selectionPaths = ReportAndFSManagePane.getInstance().getRoleTree().getCheckBoxTreeSelectionModel().getSelectionPaths(); if (selectionPaths.length == 1){ if(((ExpandMutableTreeNode)(selectionPaths[0].getLastPathComponent())).getChildCount() > 0){ ExpandMutableTreeNode node = (ExpandMutableTreeNode) ((ExpandMutableTreeNode)(selectionPaths[0].getLastPathComponent())).getLastChild(); System.out.printf(node.getUserObject().toString()); selectedPathArray = new String[node.getChildCount()]; for (int i = 0; i < node.getChildCount(); i++) { ExpandMutableTreeNode n = (ExpandMutableTreeNode) node.getChildAt(i); String nodeName = n.getUserObject().toString(); selectedPathArray[i] = nodeName; } } else { selectedPathArray = pathToString(selectionPaths); } } else { selectedPathArray = pathToString(selectionPaths); } } protected String[] pathToString(TreePath[] path) { String roles = StringUtils.EMPTY; if(path == null || path.length == 0){ return null; } for(TreePath tempPath:path){ String temp = tempPath.toString(); boolean isTrue = temp.length() > 0 && temp.charAt(0) == '[' && temp.endsWith("]"); if (isTrue) { temp = temp.substring(1, temp.length() - 1); String[] selectedRoles = temp.split(","); String role = selectedRoles[2].trim(); if(roles.isEmpty()){ roles = role; }else{ roles = roles + "," + role; } } } String[] selectedRole = roles.split(","); return selectedRole; } /** * 选中的单元格的乐见状态以第一个单元格为齐 */ public void initCheckBoxesState() { final TemplateElementCase elementCase = elementCasePane.getEditingElementCase(); if (cellSelection == null) { cellElementVisibleCheckBoxes.setSelected(true); } else { Rectangle cellRectangle = cellSelection.getCellRectangle(0); DefaultTemplateCellElement cellElement = (DefaultTemplateCellElement) elementCase.getCellElement(cellRectangle.x, cellRectangle.y); if (cellElement == null) { cellElement = new DefaultTemplateCellElement(cellRectangle.x, cellRectangle.y); } boolean firstCellDoneaAuthority = cellElement.isDoneAuthority( ReportAndFSManagePane.getInstance().getRoleTree().getSelectedRoleName()); cellElementVisibleCheckBoxes.setSelected(!firstCellDoneaAuthority); } widgetAvailable.setEnabled(cellElementVisibleCheckBoxes.isSelected()); widgetVisible.setEnabled(cellElementVisibleCheckBoxes.isSelected()); } private void initListener() { cellElementVisibleCheckBoxes.addItemListener(cellRolesAuthorityListener); widgetVisible.addItemListener(widgetVisibleRoleAuthorityListener); widgetAvailable.addItemListener(widgetUsableAuthorityListener); floatElementVisibleCheckBoxes.addItemListener(floatElementAuthorityListener); gridColumnRowVisible.addItemListener(columnRowAuthorityListener); newValue.addItemListener(newValuelistener); valueEditor.registerChangeListener(observerListener); } private void removeListener() { cellElementVisibleCheckBoxes.removeItemListener(cellRolesAuthorityListener); widgetVisible.removeItemListener(widgetVisibleRoleAuthorityListener); widgetAvailable.removeItemListener(widgetUsableAuthorityListener); floatElementVisibleCheckBoxes.removeItemListener(floatElementAuthorityListener); gridColumnRowVisible.removeItemListener(columnRowAuthorityListener); newValue.removeItemListener(newValuelistener); valueEditor.registerChangeListener(null); } private void addHyperlinkListener() { cellElementVisibleCheckBoxes.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { if (hyperlinkCheckBoxes != null) { for (int i = 0; i < hyperlinkCheckBoxes.length; i++) { hyperlinkCheckBoxes[i].setEnabled(cellElementVisibleCheckBoxes.isSelected()); if (!cellElementVisibleCheckBoxes.isSelected()) { hyperlinkCheckBoxes[i].setSelected(false); } } } } }); for (int i = 0; i < hyperlinkCheckBoxes.length; i++) { hyperlinkCheckBoxes[i].addItemListener(cellRolesAuthorityListener); } } /** * 更新适合的类型 */ public void populateType() { if (selectionType == CellSelection.NORMAL) { type.setText(Inter.getLocText("FR-Designer_Cell")); } else if (selectionType == CellSelection.CHOOSE_ROW) { type.setText(Inter.getLocText("FR-Designer_Row")); } else if (selectionType == CellSelection.CHOOSE_COLUMN) { type.setText(Inter.getLocText("FR-Designer_Column")); } else { type.setText(Inter.getLocText("M_Insert-Float")); } } /** * 名字 */ public void populateName() { if (selectionType == CellSelection.NORMAL) { name.setText(getCellSelectionName()); } else if (selectionType == CellSelection.CHOOSE_ROW || selectionType == CellSelection.CHOOSE_COLUMN) { name.setText(getCellColumnRowName()); } else { name.setText(getFloatSelectionName()); } } private String getCellSelectionName() { String nameText = ""; int count = cellSelection.getCellRectangleCount(); for (int rect = 0; rect < count; rect++) { nameText += ","; Rectangle cellRectangle = cellSelection.getCellRectangle(rect); ColumnRow beginCR = ColumnRow.valueOf(cellRectangle.x, cellRectangle.y); nameText += beginCR.toString(); if (cellRectangle.width * cellRectangle.height != 1) { ColumnRow endCR = ColumnRow.valueOf(cellRectangle.width + cellRectangle.x - 1, cellRectangle.height + cellRectangle.y - 1); nameText += ":" + endCR.toString(); } } return nameText.substring(1); } private String getCellColumnRowName() { int count = cellSelection.getCellRectangleCount(); String nameText = ""; ColumnRow cr = ColumnRow.valueOf(cellSelection.getColumn(), cellSelection.getRow()); if (cellSelection.getSelectedType() == CellSelection.CHOOSE_COLUMN && count == 1) { if (cellSelection.getColumnSpan() == 1) { nameText = cr.toString().substring(0, 1); } else { ColumnRow endCr = ColumnRow.valueOf(cellSelection.getColumn() + cellSelection.getColumnSpan() - 1, cellSelection.getRow() + cellSelection.getRowSpan() - 1); nameText = cr.toString().substring(0, 1) + "-" + endCr.toString().substring(0, 1); } } else if (cellSelection.getSelectedType() == CellSelection.CHOOSE_ROW && count == 1) { if (cellSelection.getRowSpan() == 1) { nameText = cr.toString().substring(1); } else { ColumnRow endCr = ColumnRow.valueOf(cellSelection.getColumn() + cellSelection.getColumnSpan() - 1, cellSelection.getRow() + cellSelection.getRowSpan() - 1); nameText = cr.toString().substring(1) + "-" + endCr.toString().substring(1); } } return nameText; } private String getFloatSelectionName() { return floatSelection.getSelectedFloatName(); } private void mutilRect(CellSelection cellSelection) { isAllHasWidget = true; isAllHasHyperlink = true; int count = cellSelection.getCellRectangleCount(); final TemplateElementCase elementCase = elementCasePane.getEditingElementCase(); for (int rect = 0; rect < count; rect++) { Rectangle cellRectangle = cellSelection.getCellRectangle(rect); for (int j = 0; j < cellRectangle.height; j++) { for (int i = 0; i < cellRectangle.width; i++) { int column = i + cellRectangle.x; int row = j + cellRectangle.y; DefaultTemplateCellElement cellElement = (DefaultTemplateCellElement) elementCase.getCellElement(column, row); if (cellElement == null) { cellElement = new DefaultTemplateCellElement(cellSelection.getColumn(), cellSelection.getRow()); } if (cellElement.getCellWidgetAttr() == null) { isAllHasWidget = false; } if (cellElement.getNameHyperlinkGroup() == null) { isAllHasHyperlink = false; } } } } } /** * 更新适合的pane * * @return 返回Pane */ public JPanel populateCheckPane() { checkPane.removeAll(); if (selectionType == CellSelection.NORMAL) { populateCellSelectionCheckPane(checkPane); } else if (selectionType == CellSelection.CHOOSE_COLUMN || selectionType == CellSelection.CHOOSE_ROW) { populateColumnRowCheckPane(checkPane); } else if (selectionType == FLOAT_SELECTION) { populateFloatSelectionCheckPane(checkPane); } checkPane.setBorder(BorderFactory.createEmptyBorder(ALIGNMENT_GAP, 0, 0, 0)); return checkPane; } private void populateColumnRowCheckPane(JPanel checkPane) { double f = TableLayout.FILL; double p = TableLayout.PREFERRED; Component[][] components = new Component[][]{ new Component[]{gridColumnRowVisible} }; double[] rowSize = {p}; double[] columnSize = {f}; int[][] rowCount = {{1}}; checkPane.add( TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM) , BorderLayout.WEST); } private void populateFloatSelectionCheckPane(JPanel checkPane) { checkPane.add(populateFloatElementCheckPane(), BorderLayout.WEST); } private void populateCellSelectionCheckPane(JPanel checkPane) { if (elementCasePane.isSelectedOneCell()) { //只选中了一个单元格 final TemplateElementCase elementCase = elementCasePane.getEditingElementCase(); DefaultTemplateCellElement cellElement = (DefaultTemplateCellElement) elementCase.getCellElement(cellSelection.getColumn(), cellSelection.getRow()); if (cellElement == null) { cellElement = new DefaultTemplateCellElement(cellSelection.getColumn(), cellSelection.getRow()); } //单元格带控件 if (cellElement.getCellWidgetAttr() != null) { checkPane.add(populateWidgetCheckPane(), BorderLayout.WEST); } else { checkPane.add(populatCellCheckPane(), BorderLayout.WEST); } } else { //批量选中单元格 mutilRect(cellSelection); if (!isAllHasWidget && !isAllHasHyperlink) { checkPane.add(populateMutilCellCheckPane(), BorderLayout.WEST); } else if (isAllHasWidget) { checkPane.add(populateMutilWidgetCheckPane(), BorderLayout.WEST); } } } /** * 对单元格区域进行操作时的权限编辑页面 ,对应的角色的populate */ public void populateDetials() { //做模式标记,此时鼠标焦点是在报表主体,为下一次退出权限编辑时做准备 HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().setAuthorityMode(false); TemplateElementCase templateElementCase = elementCasePane.getEditingElementCase(); if (templateElementCase instanceof WorkSheet) { ((WorkSheet) templateElementCase).setPaintSelection(true); } signelSelection(); Selection selection = elementCasePane.getSelection(); if (selection instanceof CellSelection) { selectionType = CellSelection.NORMAL; this.cellSelection = ((CellSelection) selection).clone(); this.floatSelection = null; judgeChooseCR(); } else if (selection instanceof FloatSelection) { selectionType = FLOAT_SELECTION; cellSelection = null; floatSelection = new FloatSelection(((FloatSelection) selection).getSelectedFloatName()); } populateType(); populateName(); populateCheckPane(); checkCheckBoxes(); } //判断是否选择的行列 private void judgeChooseCR() { if (cellSelection.getSelectedType() == CellSelection.CHOOSE_COLUMN && cellSelection.getCellRectangleCount() == 1) { selectionType = CellSelection.CHOOSE_COLUMN; } if (cellSelection.getSelectedType() == CellSelection.CHOOSE_ROW && cellSelection.getCellRectangleCount() == 1) { selectionType = CellSelection.CHOOSE_ROW; } } //实现单选 private void signelSelection() { JTemplate jTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); if (jTemplate.isJWorkBook()) { //清工具栏 JComponent component = DesignerContext.getDesignerFrame().getToolbarComponent(); if (component instanceof AuthorityEditToolBarComponent) { ((AuthorityEditToolBarComponent) component).removeSelection(); } //清参数面板 jTemplate.removeParameterPaneSelection(); } } private JPanel populateFloatElementCheckPane() { double f = TableLayout.FILL; double p = TableLayout.PREFERRED; Component[][] components = new Component[][]{ new Component[]{new UILabel(Inter.getLocText("M_Insert-Float"), SwingConstants.LEFT), floatElementVisibleCheckBoxes} }; double[] rowSize = {p}; double[] columnSize = {p, f}; int[][] rowCount = {{1, 1}}; return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM); } private JPanel populateWidgetCheckPane() { double f = TableLayout.FILL; double p = TableLayout.PREFERRED; Component[][] components = new Component[][]{ new Component[]{new UILabel(Inter.getLocText("FR-Designer_Cell"), SwingConstants.LEFT), cellElementVisibleCheckBoxes}, new Component[]{null, newValue}, new Component[]{null, valueEditor}, new Component[]{new UILabel(Inter.getLocText("FR-Designer_Widget"), SwingConstants.LEFT), widgetVisible}, new Component[]{null, widgetAvailable} }; double[] rowSize = {p, p, p, p, p}; double[] columnSize = {p, f}; int[][] rowCount = {{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}}; return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM); } private JPanel populateMutilWidgetCheckPane() { double f = TableLayout.FILL; double p = TableLayout.PREFERRED; Component[][] components = new Component[][]{ new Component[]{new UILabel(Inter.getLocText("FR-Designer_Cell"), SwingConstants.LEFT), cellElementVisibleCheckBoxes}, new Component[]{new UILabel(Inter.getLocText("FR-Designer_Widget"), SwingConstants.LEFT), widgetVisible}, new Component[]{null, widgetAvailable} }; double[] rowSize = {p, p, p}; double[] columnSize = {p, f}; int[][] rowCount = {{1, 1}, {1, 1}, {1, 1}}; return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM); } private JPanel populateMutilCellCheckPane() { double f = TableLayout.FILL; double p = TableLayout.PREFERRED; Component[][] components = new Component[][]{ new Component[]{cellElementVisibleCheckBoxes}, }; double[] rowSize = {p}; double[] columnSize = {f}; int[][] rowCount = {{1}}; return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM); } private JPanel populatCellCheckPane() { double f = TableLayout.FILL; double p = TableLayout.PREFERRED; Component[][] components = new Component[][]{ new Component[]{cellElementVisibleCheckBoxes}, new Component[]{newValue}, new Component[]{valueEditor} }; double[] rowSize = {p, p, p}; double[] columnSize = {f}; int[][] rowCount = {{1}, {1}, {1}}; return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM); } public TemplateCellElement getFirstCell() { final TemplateElementCase elementCase = elementCasePane.getEditingElementCase(); Rectangle cellRectangle = cellSelection.getCellRectangle(0); // 从最后循环起以保证最后一个修改标准单元格(originalStyle)。 TemplateCellElement firstCell = null; for (int j = cellRectangle.height - 1; j >= 0; j--) { for (int i = cellRectangle.width - 1; i >= 0; i--) { int column = i + cellRectangle.x; int row = j + cellRectangle.y; TemplateCellElement editCellElement = elementCase.getTemplateCellElement(column, row); if (editCellElement != null) { // 对于合并的格子,我们不多次计算的权限. if (editCellElement.getColumn() != column || editCellElement.getRow() != row) { continue; } firstCell = editCellElement; } } } return firstCell; } private void checkCheckBoxes() { String selected = ReportAndFSManagePane.getInstance().getRoleTree().getSelectedRoleName(); removeListener(); if (selectionType == CellSelection.NORMAL) { checkCellSelectionCkeckboxes(selected); } else if (selectionType == CellSelection.CHOOSE_COLUMN || selectionType == CellSelection.CHOOSE_ROW) { checkColumnRowCheckBoxes(selected); } else if (selectionType == FLOAT_SELECTION) { checkFloatSelectionCkeckboxes(selected); } initListener(); } private void checkCellSelectionCkeckboxes(String selected) { TemplateCellElement firstCell = getFirstCell(); if (firstCell == null) { resetCellElementCheckBoxes(); return; } cellElementVisibleCheckBoxes.setSelected(!firstCell.isDoneAuthority(selected)); newValue.setEnabled(!firstCell.isDoneAuthority(selected)); if (!firstCell.isDoneAuthority(selected)) { newValue.setSelected(firstCell.isDoneNewValueAuthority(selected)); if (newValue.isSelected()) { valueEditor.setEnabled(true); valueEditor.populate(firstCell.getCellPrivilegeControl().getNewValueMap().get(selected)); } else { valueEditor.setEnabled(false); } } else { newValue.setSelected(false); valueEditor.setEnabled(false); } populateWidgetButton(firstCell.getWidget(), selected, firstCell); } private void populateWidgetButton(Widget widget, String selected, TemplateCellElement firstCell){ if(widget == null){ return; } if(widget.isVisible()){ widgetVisible.setSelected(!widget.isDoneVisibleAuthority(selected)); widgetVisible.setEnabled(!firstCell.isDoneAuthority(selected)); }else{ widgetVisible.setSelected(widget.isVisibleAuthority(selected)); } if(widget.isEnabled()){ widgetAvailable.setSelected(!widget.isDoneUsableAuthority(selected)); widgetAvailable.setEnabled(!widget.isDoneVisibleAuthority(selected)); }else{ widgetAvailable.setSelected(widget.isUsableAuthority(selected)); } } private void resetCellElementCheckBoxes() { cellElementVisibleCheckBoxes.setSelected(true); widgetVisible.setSelected(true); widgetVisible.setEnabled(true); widgetAvailable.setSelected(true); widgetAvailable.setEnabled(true); newValue.setSelected(false); valueEditor.setEnabled(false); } private void checkColumnRowCheckBoxes(String selected) { if (cellSelection == null) { gridColumnRowVisible.setSelected(false); return; } TemplateElementCase elementCase = elementCasePane.getEditingElementCase(); boolean isInside = selectionType == CellSelection.CHOOSE_COLUMN ? elementCase.getColumnPrivilegeControl(cellSelection.getColumn()).checkInvisible(selected) : elementCase.getRowPrivilegeControl(cellSelection.getRow()).checkInvisible(selected); gridColumnRowVisible.setSelected(isInside); } private void checkFloatSelectionCkeckboxes(String selected) { String name = floatSelection.getSelectedFloatName(); TemplateElementCase ec = elementCasePane.getEditingElementCase(); FloatElement fe = ec.getFloatElement(name); floatElementVisibleCheckBoxes.setSelected(!fe.isDoneAuthority(selected)); } private JPanel populateHyperlinkCheckPane(AbstractCellElement cellElement) { NameJavaScriptGroup linkGroup = cellElement.getNameHyperlinkGroup(); //超链接的个数+单元格可见的操作 hyperlinkCheckBoxes = new UICheckBox[linkGroup.size()]; double f = TableLayout.FILL; double p = TableLayout.PREFERRED; Component[][] components = new Component[hyperlinkCheckBoxes.length + 1][]; if (linkGroup.size() == 1) { components[0] = new Component[]{new UILabel(Inter.getLocText("FR-Designer_Cell"), SwingConstants.LEFT), cellElementVisibleCheckBoxes}; components[1] = new Component[]{new UILabel(Inter.getLocText("FR-Designer_Hyperlink"), SwingConstants.LEFT), hyperlinkCheckBoxes[0] = new UICheckBox(Inter.getLocText("FR-Designer_Visible"))}; } else { components[0] = new Component[]{new UILabel(Inter.getLocText("FR-Designer_Cell"), SwingConstants.LEFT), cellElementVisibleCheckBoxes = new UICheckBox(Inter.getLocText("FR-Designer_Visible"))}; components[1] = new Component[]{new UILabel(Inter.getLocText("FR-Designer_Hyperlink"), SwingConstants.LEFT), hyperlinkCheckBoxes[0] = new UICheckBox(linkGroup.getNameHyperlink(0).getName() + Inter.getLocText("FR-Designer_Visible"))}; for (int i = 1; i < hyperlinkCheckBoxes.length; i++) { components[i + 1] = new Component[]{null, hyperlinkCheckBoxes[i] = new UICheckBox(linkGroup.getNameHyperlink(i).getName() + Inter.getLocText("FR-Designer_Visible"))}; } } for (int i = 0; i < hyperlinkCheckBoxes.length; i++) { hyperlinkCheckBoxes[i].setEnabled(cellElementVisibleCheckBoxes.isSelected()); } addHyperlinkListener(); double[] rowSize = new double[hyperlinkCheckBoxes.length + 1]; int[][] rowCount = new int[hyperlinkCheckBoxes.length + 1][]; for (int i = 0; i < hyperlinkCheckBoxes.length + 1; i++) { rowSize[i] = p; rowCount[i] = new int[]{1, 1}; } double[] columnSize = {p, f}; return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM); } private JPanel populateMutilHyperlinkCheckPane() { //超链接的个数+单元格可见的操作 hyperlinkCheckBoxes = new UICheckBox[1]; double f = TableLayout.FILL; double p = TableLayout.PREFERRED; Component[][] components = new Component[2][]; components[0] = new Component[]{new UILabel(Inter.getLocText("FR-Designer_Cell"), SwingConstants.LEFT), cellElementVisibleCheckBoxes}; components[1] = new Component[]{new UILabel(Inter.getLocText("FR-Designer_Hyperlink"), SwingConstants.LEFT), hyperlinkCheckBoxes[0] = new UICheckBox(Inter.getLocText("FR-Designer_Visible"))}; hyperlinkCheckBoxes[0].setEnabled(cellElementVisibleCheckBoxes.isSelected()); addHyperlinkListener(); double[] rowSize = {p, p}; double[] columnSize = {p, f}; int[][] rowCount = {{1, 1}, {1, 1}}; return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM); } } \ No newline at end of file +package com.fr.design.mainframe; + +import com.fr.design.constants.LayoutConstants; +import com.fr.design.editor.ValueEditorPane; +import com.fr.design.editor.ValueEditorPaneFactory; +import com.fr.design.event.UIObserverListener; +import com.fr.design.file.HistoryTemplateListPane; +import com.fr.design.gui.icheckbox.UICheckBox; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.itree.refreshabletree.ExpandMutableTreeNode; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.mainframe.toolbar.AuthorityEditToolBarComponent; +import com.fr.design.roleAuthority.ReportAndFSManagePane; +import com.fr.design.roleAuthority.RolesAlreadyEditedPane; +import com.fr.form.ui.Widget; +import com.fr.general.ComparatorUtils; +import com.fr.general.Inter; +import com.fr.grid.selection.CellSelection; +import com.fr.grid.selection.FloatSelection; +import com.fr.grid.selection.Selection; +import com.fr.js.NameJavaScriptGroup; +import com.fr.report.cell.AbstractCellElement; +import com.fr.report.cell.DefaultTemplateCellElement; +import com.fr.report.cell.FloatElement; +import com.fr.report.cell.TemplateCellElement; +import com.fr.report.elementcase.TemplateElementCase; +import com.fr.report.worksheet.WorkSheet; +import com.fr.stable.ColumnRow; +import com.fr.stable.StringUtils; + +import javax.swing.*; +import javax.swing.tree.TreePath; +import java.awt.*; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.util.ArrayList; + +/** + * Author : daisy + * Date: 13-9-4 + * Time: 下午4:01 + */ +public class ElementCasePaneAuthorityEditPane extends AuthorityEditPane { + private static final int WIDGET_VISIBLE = 0; + private static final int WIDGET_USABLE = 1; + private static final int CELL = 2; + private static final int HYPER_LINK = 3; + private static final int FLOAT_SELECTION = 3; + private static final int NEW_VALUE = 4; + //新值下面的编辑器的宽度 + private static final int NEW_PANE_WIDTH = 120; + + + private UICheckBox floatElementVisibleCheckBoxes = new UICheckBox(Inter.getLocText("FR-Designer_Visible")); + private UICheckBox cellElementVisibleCheckBoxes = new UICheckBox(Inter.getLocText("FR-Designer_Visible")); + private UICheckBox widgetVisible = new UICheckBox(Inter.getLocText("FR-Designer_Visible")); + private UICheckBox widgetAvailable = new UICheckBox(Inter.getLocText("FR-Designer_Enabled")); + private UICheckBox gridColumnRowVisible = new UICheckBox(Inter.getLocText("FR-Designer_Hide")); + private UICheckBox newValue = new UICheckBox(Inter.getLocText("FR-Designer_New_Value")); + private ValueEditorPane valueEditor = ValueEditorPaneFactory.createBasicValueEditorPane(NEW_PANE_WIDTH); + private UICheckBox[] hyperlinkCheckBoxes = null; + private ElementCasePane elementCasePane = null; + private int selectionType = CellSelection.NORMAL; + private CellSelection cellSelection; + private FloatSelection floatSelection; + private boolean isAllHasWidget; + private boolean isAllHasHyperlink; + private String[] selectedPathArray; + private UIObserverListener observerListener = new UIObserverListener() { + @Override + public void doChange() { + if (elementCasePane == null || cellSelection == null) { + return; + } + if (setAuthorityStyle(NEW_VALUE)) { + elementCasePane.fireTargetModified(); + } + + } + }; + private ItemListener newValuelistener = new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + if (elementCasePane == null || cellSelection == null) { + return; + } + if (setAuthorityStyle(NEW_VALUE)) { + valueEditor.setEnabled(newValue.isSelected()); + doAfterAuthority(); + } + } + }; + private ItemListener columnRowAuthorityListener = new ItemListener() { + public void itemStateChanged(ItemEvent e) { + if (elementCasePane == null) { + return; + } + boolean isDone = false; + if (selectionType == CellSelection.CHOOSE_COLUMN) { + isDone = setAuthorityColumn(); + } else { + isDone = setAuthorityRow(); + } + if (isDone) { + doAfterAuthority(); + } + } + }; + private ItemListener floatElementAuthorityListener = new ItemListener() { + public void itemStateChanged(ItemEvent e) { + if (elementCasePane == null || floatSelection == null) { + return; + } + if (setLFloatAuthorityStyle()) { + doAfterAuthority(); + } + } + }; + private ItemListener cellRolesAuthorityListener = new ItemListener() { + public void itemStateChanged(ItemEvent e) { + if (elementCasePane == null || cellSelection == null) { + return; + } + if (setAuthorityStyle(CELL)) { + doAfterAuthority(); + } + } + }; + private ItemListener widgetVisibleRoleAuthorityListener = new ItemListener() { + public void itemStateChanged(ItemEvent e) { + if (elementCasePane == null || cellSelection == null) { + return; + } + if (setAuthorityStyle(WIDGET_VISIBLE)) { + doAfterAuthority(); + } + } + }; + private ItemListener widgetUsableAuthorityListener = new ItemListener() { + public void itemStateChanged(ItemEvent e) { + if (elementCasePane == null || cellSelection == null) { + return; + } + + if (setAuthorityStyle(WIDGET_USABLE)) { + doAfterAuthority(); + } + } + }; + + public ElementCasePaneAuthorityEditPane(ElementCasePane elementCasePane) { + super(elementCasePane); + this.elementCasePane = elementCasePane; + initCheckBoxesState(); + initListener(); + } + + private void doAfterAuthority() { + elementCasePane.repaint(); + elementCasePane.fireTargetModified(); + RolesAlreadyEditedPane.getInstance().refreshDockingView(); + RolesAlreadyEditedPane.getInstance().setReportAndFSSelectedRoles(); + RolesAlreadyEditedPane.getInstance().repaint(); + checkCheckBoxes(); + } + + private boolean setAuthorityColumn() { + initSelectedPathArray(); + String selectedRoles = ReportAndFSManagePane.getInstance().getRoleTree().getSelectedRoleName(); + if (ComparatorUtils.equals(selectedRoles, Inter.getLocText("FR-Designer_Role"))) { + return false; + } + if (selectedRoles == null) { + return false; + } + if (selectedPathArray == null) { + return false; + } + final TemplateElementCase elementCase = elementCasePane.getEditingElementCase(); + boolean isVisible = !gridColumnRowVisible.isSelected(); + for (int t = 0; t < selectedPathArray.length; t++) { + if (!isVisible) { + for (int col = cellSelection.getColumn(); col < cellSelection.getColumn() + cellSelection.getColumnSpan(); col++) { + elementCase.addColumnPrivilegeControl(col, selectedPathArray[t]); + } + } else { + for (int col = cellSelection.getColumn(); col < cellSelection.getColumn() + cellSelection.getColumnSpan(); col++) { + elementCase.removeColumnPrivilegeControl(col, selectedPathArray[t]); + } + } + } + + return true; + } + + private boolean setAuthorityRow() { + initSelectedPathArray(); + String selectedRoles = ReportAndFSManagePane.getInstance().getRoleTree().getSelectedRoleName(); + if (ComparatorUtils.equals(selectedRoles, Inter.getLocText("FR-Designer_Role"))) { + return false; + } + if (selectedRoles == null) { + return false; + } + if (selectedPathArray == null) { + return false; + } + final TemplateElementCase elementCase = elementCasePane.getEditingElementCase(); + boolean isVisible = !gridColumnRowVisible.isSelected(); + for (int t = 0; t < selectedPathArray.length; t++) { + if (!isVisible) { + for (int row = cellSelection.getRow(); row < cellSelection.getRow() + cellSelection.getRowSpan(); row++) { + elementCase.addRowPrivilegeControl(row, selectedPathArray[t]); + } + } else { + for (int row = cellSelection.getRow(); row < cellSelection.getRow() + cellSelection.getRowSpan(); row++) { + elementCase.removeRowPrivilegeControl(row, selectedPathArray[t]); + } + } + } + + + return true; + } + + private boolean setLFloatAuthorityStyle() { + initSelectedPathArray(); + String selectedRoles = ReportAndFSManagePane.getInstance().getRoleTree().getSelectedRoleName(); + if (ComparatorUtils.equals(selectedRoles, Inter.getLocText("FR-Designer_Role"))) { + return false; + } + if (selectedRoles == null) { + return false; + } + if (selectedPathArray == null) { + return false; + } + String name = floatSelection.getSelectedFloatName(); + TemplateElementCase ec = elementCasePane.getEditingElementCase(); + FloatElement fe = ec.getFloatElement(name); + for (int t = 0; t < selectedPathArray.length; t++) { + fe.changeAuthorityState(selectedPathArray[t], floatElementVisibleCheckBoxes.isSelected()); + } + + return true; + } + + private boolean setAuthorityStyle(int type) { + initSelectedPathArray(); + String selectedRoles = ReportAndFSManagePane.getInstance().getRoleTree().getSelectedRoleName(); + if (ComparatorUtils.equals(selectedRoles, Inter.getLocText("FR-Designer_Role"))) { + return false; + } + if (selectedRoles == null) { + return false; + } + if (selectedPathArray == null) { + return false; + } + final TemplateElementCase elementCase = elementCasePane.getEditingElementCase(); + int cellRectangleCount = cellSelection.getCellRectangleCount(); + for (int t = 0; t < selectedPathArray.length; t++) { + + for (int rec = 0; rec < cellRectangleCount; rec++) { + Rectangle cellRectangle = cellSelection.getCellRectangle(rec); + // 从最后循环起以保证最后一个修改标准单元格(originalStyle)。 + for (int j = cellRectangle.height - 1; j >= 0; j--) { + for (int i = cellRectangle.width - 1; i >= 0; i--) { + int column = i + cellRectangle.x; + int row = j + cellRectangle.y; + TemplateCellElement editCellElement = elementCase.getTemplateCellElement(column, row); + if (editCellElement == null) { + editCellElement = new DefaultTemplateCellElement(column, row); + elementCase.addCellElement(editCellElement); + } else { + // 对于合并的格子,我们不多次计算的权限. + if (editCellElement.getColumn() != column + || editCellElement.getRow() != row) { + continue; + } + } + if (type == CELL) { + editCellElement.changeAuthorityState(selectedPathArray[t], cellElementVisibleCheckBoxes.isSelected()); + } else if (type == NEW_VALUE) { + editCellElement.changeNewValueAuthorityState(selectedPathArray[t], newValue.isSelected(), valueEditor.update()); + } else if (type == WIDGET_VISIBLE) { + Widget widget = editCellElement.getWidget(); + widget.changeVisibleAuthorityState(selectedPathArray[t], widgetVisible.isSelected()); + } else { + Widget widget = editCellElement.getWidget(); + widget.changeUsableAuthorityState(selectedPathArray[t], widgetAvailable.isSelected()); + } + + } + } + } + } + return true; + } + + /** + * @see AuthorityEditToolBarPane initSelectedPathArray + */ + private void initSelectedPathArray() { + TreePath[] selectionPaths = ReportAndFSManagePane.getInstance().getRoleTree().getCheckBoxTreeSelectionModel().getSelectionPaths(); + if (selectionPaths.length == 1) { + if (((ExpandMutableTreeNode) (selectionPaths[0].getLastPathComponent())).getChildCount() > 0) { + ExpandMutableTreeNode node = (ExpandMutableTreeNode) ((ExpandMutableTreeNode) (selectionPaths[0].getLastPathComponent())).getLastChild(); + System.out.printf(node.getUserObject().toString()); + selectedPathArray = new String[node.getChildCount()]; + for (int i = 0; i < node.getChildCount(); i++) { + ExpandMutableTreeNode n = (ExpandMutableTreeNode) node.getChildAt(i); + String nodeName = n.getUserObject().toString(); + selectedPathArray[i] = nodeName; + } + } else { + selectedPathArray = pathToString(selectionPaths); + } + } else { + selectedPathArray = pathToString(selectionPaths); + } + + } + + public static String[] pathToString(TreePath[] path) { + java.util.List roles = new ArrayList(); + if (path != null && path.length > 0) { + for (TreePath tempPath : path) { + String temp = tempPath.toString(); + boolean isTrue = temp.length() > 0 && temp.charAt(0) == '[' && temp.endsWith("]"); + if (isTrue) { + temp = temp.substring(1, temp.length() - 1); + String[] selectedRoles = temp.split("," + StringUtils.BLANK); + String role = selectedRoles[2].trim(); + roles.add(role); + } + + } + } + return roles.toArray(new String[0]); + } + + /** + * 选中的单元格的乐见状态以第一个单元格为齐 + */ + public void initCheckBoxesState() { + final TemplateElementCase elementCase = elementCasePane.getEditingElementCase(); + if (cellSelection == null) { + cellElementVisibleCheckBoxes.setSelected(true); + } else { + Rectangle cellRectangle = cellSelection.getCellRectangle(0); + DefaultTemplateCellElement cellElement = (DefaultTemplateCellElement) elementCase.getCellElement(cellRectangle.x, cellRectangle.y); + if (cellElement == null) { + cellElement = new DefaultTemplateCellElement(cellRectangle.x, cellRectangle.y); + } + boolean firstCellDoneaAuthority = cellElement.isDoneAuthority( + ReportAndFSManagePane.getInstance().getRoleTree().getSelectedRoleName()); + cellElementVisibleCheckBoxes.setSelected(!firstCellDoneaAuthority); + } + widgetAvailable.setEnabled(cellElementVisibleCheckBoxes.isSelected()); + widgetVisible.setEnabled(cellElementVisibleCheckBoxes.isSelected()); + } + + private void initListener() { + cellElementVisibleCheckBoxes.addItemListener(cellRolesAuthorityListener); + widgetVisible.addItemListener(widgetVisibleRoleAuthorityListener); + widgetAvailable.addItemListener(widgetUsableAuthorityListener); + floatElementVisibleCheckBoxes.addItemListener(floatElementAuthorityListener); + gridColumnRowVisible.addItemListener(columnRowAuthorityListener); + newValue.addItemListener(newValuelistener); + valueEditor.registerChangeListener(observerListener); + } + + private void removeListener() { + cellElementVisibleCheckBoxes.removeItemListener(cellRolesAuthorityListener); + widgetVisible.removeItemListener(widgetVisibleRoleAuthorityListener); + widgetAvailable.removeItemListener(widgetUsableAuthorityListener); + floatElementVisibleCheckBoxes.removeItemListener(floatElementAuthorityListener); + gridColumnRowVisible.removeItemListener(columnRowAuthorityListener); + newValue.removeItemListener(newValuelistener); + valueEditor.registerChangeListener(null); + } + + private void addHyperlinkListener() { + cellElementVisibleCheckBoxes.addItemListener(new ItemListener() { + public void itemStateChanged(ItemEvent e) { + if (hyperlinkCheckBoxes != null) { + for (int i = 0; i < hyperlinkCheckBoxes.length; i++) { + hyperlinkCheckBoxes[i].setEnabled(cellElementVisibleCheckBoxes.isSelected()); + if (!cellElementVisibleCheckBoxes.isSelected()) { + hyperlinkCheckBoxes[i].setSelected(false); + } + } + } + } + }); + for (int i = 0; i < hyperlinkCheckBoxes.length; i++) { + hyperlinkCheckBoxes[i].addItemListener(cellRolesAuthorityListener); + } + } + + /** + * 更新适合的类型 + */ + public void populateType() { + if (selectionType == CellSelection.NORMAL) { + type.setText(Inter.getLocText("FR-Designer_Cell")); + } else if (selectionType == CellSelection.CHOOSE_ROW) { + type.setText(Inter.getLocText("FR-Designer_Row")); + } else if (selectionType == CellSelection.CHOOSE_COLUMN) { + type.setText(Inter.getLocText("FR-Designer_Column")); + } else { + type.setText(Inter.getLocText("M_Insert-Float")); + } + } + + /** + * 名字 + */ + public void populateName() { + if (selectionType == CellSelection.NORMAL) { + name.setText(getCellSelectionName()); + } else if (selectionType == CellSelection.CHOOSE_ROW || selectionType == CellSelection.CHOOSE_COLUMN) { + name.setText(getCellColumnRowName()); + } else { + name.setText(getFloatSelectionName()); + } + } + + private String getCellSelectionName() { + String nameText = ""; + int count = cellSelection.getCellRectangleCount(); + for (int rect = 0; rect < count; rect++) { + nameText += ","; + Rectangle cellRectangle = cellSelection.getCellRectangle(rect); + ColumnRow beginCR = ColumnRow.valueOf(cellRectangle.x, cellRectangle.y); + nameText += beginCR.toString(); + if (cellRectangle.width * cellRectangle.height != 1) { + ColumnRow endCR = ColumnRow.valueOf(cellRectangle.width + cellRectangle.x - 1, cellRectangle.height + cellRectangle.y - 1); + nameText += ":" + endCR.toString(); + } + } + return nameText.substring(1); + } + + private String getCellColumnRowName() { + int count = cellSelection.getCellRectangleCount(); + String nameText = ""; + ColumnRow cr = ColumnRow.valueOf(cellSelection.getColumn(), cellSelection.getRow()); + if (cellSelection.getSelectedType() == CellSelection.CHOOSE_COLUMN && count == 1) { + if (cellSelection.getColumnSpan() == 1) { + nameText = cr.toString().substring(0, 1); + } else { + ColumnRow endCr = ColumnRow.valueOf(cellSelection.getColumn() + cellSelection.getColumnSpan() - 1, + cellSelection.getRow() + cellSelection.getRowSpan() - 1); + nameText = cr.toString().substring(0, 1) + "-" + endCr.toString().substring(0, 1); + } + } else if (cellSelection.getSelectedType() == CellSelection.CHOOSE_ROW && count == 1) { + if (cellSelection.getRowSpan() == 1) { + nameText = cr.toString().substring(1); + } else { + ColumnRow endCr = ColumnRow.valueOf(cellSelection.getColumn() + cellSelection.getColumnSpan() - 1, + cellSelection.getRow() + cellSelection.getRowSpan() - 1); + nameText = cr.toString().substring(1) + "-" + endCr.toString().substring(1); + } + } + return nameText; + } + + private String getFloatSelectionName() { + return floatSelection.getSelectedFloatName(); + } + + private void mutilRect(CellSelection cellSelection) { + isAllHasWidget = true; + isAllHasHyperlink = true; + int count = cellSelection.getCellRectangleCount(); + final TemplateElementCase elementCase = elementCasePane.getEditingElementCase(); + for (int rect = 0; rect < count; rect++) { + Rectangle cellRectangle = cellSelection.getCellRectangle(rect); + for (int j = 0; j < cellRectangle.height; j++) { + for (int i = 0; i < cellRectangle.width; i++) { + int column = i + cellRectangle.x; + int row = j + cellRectangle.y; + DefaultTemplateCellElement cellElement = (DefaultTemplateCellElement) elementCase.getCellElement(column, row); + if (cellElement == null) { + cellElement = new DefaultTemplateCellElement(cellSelection.getColumn(), cellSelection.getRow()); + } + if (cellElement.getCellWidgetAttr() == null) { + isAllHasWidget = false; + } + if (cellElement.getNameHyperlinkGroup() == null) { + isAllHasHyperlink = false; + } + } + } + } + } + + /** + * 更新适合的pane + * + * @return 返回Pane + */ + public JPanel populateCheckPane() { + checkPane.removeAll(); + if (selectionType == CellSelection.NORMAL) { + populateCellSelectionCheckPane(checkPane); + } else if (selectionType == CellSelection.CHOOSE_COLUMN || selectionType == CellSelection.CHOOSE_ROW) { + populateColumnRowCheckPane(checkPane); + } else if (selectionType == FLOAT_SELECTION) { + populateFloatSelectionCheckPane(checkPane); + } + checkPane.setBorder(BorderFactory.createEmptyBorder(ALIGNMENT_GAP, 0, 0, 0)); + return checkPane; + } + + private void populateColumnRowCheckPane(JPanel checkPane) { + double f = TableLayout.FILL; + double p = TableLayout.PREFERRED; + Component[][] components = new Component[][]{ + new Component[]{gridColumnRowVisible} + }; + double[] rowSize = {p}; + double[] columnSize = {f}; + int[][] rowCount = {{1}}; + checkPane.add( + TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM) + , BorderLayout.WEST); + } + + private void populateFloatSelectionCheckPane(JPanel checkPane) { + checkPane.add(populateFloatElementCheckPane(), BorderLayout.WEST); + } + + private void populateCellSelectionCheckPane(JPanel checkPane) { + if (elementCasePane.isSelectedOneCell()) { + //只选中了一个单元格 + final TemplateElementCase elementCase = elementCasePane.getEditingElementCase(); + DefaultTemplateCellElement cellElement = (DefaultTemplateCellElement) elementCase.getCellElement(cellSelection.getColumn(), cellSelection.getRow()); + if (cellElement == null) { + cellElement = new DefaultTemplateCellElement(cellSelection.getColumn(), cellSelection.getRow()); + } + //单元格带控件 + if (cellElement.getCellWidgetAttr() != null) { + checkPane.add(populateWidgetCheckPane(), BorderLayout.WEST); + } else { + checkPane.add(populatCellCheckPane(), BorderLayout.WEST); + } + } else { + //批量选中单元格 + mutilRect(cellSelection); + if (!isAllHasWidget && !isAllHasHyperlink) { + checkPane.add(populateMutilCellCheckPane(), BorderLayout.WEST); + } else if (isAllHasWidget) { + checkPane.add(populateMutilWidgetCheckPane(), BorderLayout.WEST); + } + } + } + + /** + * 对单元格区域进行操作时的权限编辑页面 ,对应的角色的populate + */ + public void populateDetials() { + //做模式标记,此时鼠标焦点是在报表主体,为下一次退出权限编辑时做准备 + HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().setAuthorityMode(false); + TemplateElementCase templateElementCase = elementCasePane.getEditingElementCase(); + if (templateElementCase instanceof WorkSheet) { + ((WorkSheet) templateElementCase).setPaintSelection(true); + } + signelSelection(); + Selection selection = elementCasePane.getSelection(); + if (selection instanceof CellSelection) { + selectionType = CellSelection.NORMAL; + this.cellSelection = ((CellSelection) selection).clone(); + this.floatSelection = null; + judgeChooseCR(); + } else if (selection instanceof FloatSelection) { + selectionType = FLOAT_SELECTION; + cellSelection = null; + floatSelection = new FloatSelection(((FloatSelection) selection).getSelectedFloatName()); + } + populateType(); + populateName(); + populateCheckPane(); + checkCheckBoxes(); + } + + //判断是否选择的行列 + private void judgeChooseCR() { + if (cellSelection.getSelectedType() == CellSelection.CHOOSE_COLUMN && cellSelection.getCellRectangleCount() == 1) { + selectionType = CellSelection.CHOOSE_COLUMN; + } + if (cellSelection.getSelectedType() == CellSelection.CHOOSE_ROW && cellSelection.getCellRectangleCount() == 1) { + selectionType = CellSelection.CHOOSE_ROW; + } + } + + //实现单选 + private void signelSelection() { + JTemplate jTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); + if (jTemplate.isJWorkBook()) { + //清工具栏 + JComponent component = DesignerContext.getDesignerFrame().getToolbarComponent(); + if (component instanceof AuthorityEditToolBarComponent) { + ((AuthorityEditToolBarComponent) component).removeSelection(); + } + //清参数面板 + jTemplate.removeParameterPaneSelection(); + } + } + + private JPanel populateFloatElementCheckPane() { + double f = TableLayout.FILL; + double p = TableLayout.PREFERRED; + Component[][] components = new Component[][]{ + new Component[]{new UILabel(Inter.getLocText("M_Insert-Float"), SwingConstants.LEFT), floatElementVisibleCheckBoxes} + }; + double[] rowSize = {p}; + double[] columnSize = {p, f}; + int[][] rowCount = {{1, 1}}; + return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM); + } + + private JPanel populateWidgetCheckPane() { + double f = TableLayout.FILL; + double p = TableLayout.PREFERRED; + Component[][] components = new Component[][]{ + new Component[]{new UILabel(Inter.getLocText("FR-Designer_Cell"), SwingConstants.LEFT), cellElementVisibleCheckBoxes}, + new Component[]{null, newValue}, + new Component[]{null, valueEditor}, + new Component[]{new UILabel(Inter.getLocText("FR-Designer_Widget"), SwingConstants.LEFT), widgetVisible}, + new Component[]{null, widgetAvailable} + }; + double[] rowSize = {p, p, p, p, p}; + double[] columnSize = {p, f}; + int[][] rowCount = {{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}}; + return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM); + } + + private JPanel populateMutilWidgetCheckPane() { + double f = TableLayout.FILL; + double p = TableLayout.PREFERRED; + Component[][] components = new Component[][]{ + new Component[]{new UILabel(Inter.getLocText("FR-Designer_Cell"), SwingConstants.LEFT), cellElementVisibleCheckBoxes}, + new Component[]{new UILabel(Inter.getLocText("FR-Designer_Widget"), SwingConstants.LEFT), widgetVisible}, + new Component[]{null, widgetAvailable} + }; + double[] rowSize = {p, p, p}; + double[] columnSize = {p, f}; + int[][] rowCount = {{1, 1}, {1, 1}, {1, 1}}; + return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM); + } + + private JPanel populateMutilCellCheckPane() { + double f = TableLayout.FILL; + double p = TableLayout.PREFERRED; + Component[][] components = new Component[][]{ + new Component[]{cellElementVisibleCheckBoxes}, + }; + double[] rowSize = {p}; + double[] columnSize = {f}; + int[][] rowCount = {{1}}; + return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM); + } + + private JPanel populatCellCheckPane() { + double f = TableLayout.FILL; + double p = TableLayout.PREFERRED; + Component[][] components = new Component[][]{ + new Component[]{cellElementVisibleCheckBoxes}, + new Component[]{newValue}, + new Component[]{valueEditor} + }; + double[] rowSize = {p, p, p}; + double[] columnSize = {f}; + int[][] rowCount = {{1}, {1}, {1}}; + return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM); + } + + public TemplateCellElement getFirstCell() { + final TemplateElementCase elementCase = elementCasePane.getEditingElementCase(); + Rectangle cellRectangle = cellSelection.getCellRectangle(0); + // 从最后循环起以保证最后一个修改标准单元格(originalStyle)。 + TemplateCellElement firstCell = null; + for (int j = cellRectangle.height - 1; j >= 0; j--) { + for (int i = cellRectangle.width - 1; i >= 0; i--) { + int column = i + cellRectangle.x; + int row = j + cellRectangle.y; + TemplateCellElement editCellElement = elementCase.getTemplateCellElement(column, row); + if (editCellElement != null) { + // 对于合并的格子,我们不多次计算的权限. + if (editCellElement.getColumn() != column || editCellElement.getRow() != row) { + continue; + } + firstCell = editCellElement; + } + } + } + return firstCell; + } + + private void checkCheckBoxes() { + String selected = ReportAndFSManagePane.getInstance().getRoleTree().getSelectedRoleName(); + removeListener(); + if (selectionType == CellSelection.NORMAL) { + checkCellSelectionCkeckboxes(selected); + } else if (selectionType == CellSelection.CHOOSE_COLUMN || selectionType == CellSelection.CHOOSE_ROW) { + checkColumnRowCheckBoxes(selected); + } else if (selectionType == FLOAT_SELECTION) { + checkFloatSelectionCkeckboxes(selected); + } + initListener(); + } + + private void checkCellSelectionCkeckboxes(String selected) { + TemplateCellElement firstCell = getFirstCell(); + if (firstCell == null) { + resetCellElementCheckBoxes(); + return; + } + cellElementVisibleCheckBoxes.setSelected(!firstCell.isDoneAuthority(selected)); + newValue.setEnabled(!firstCell.isDoneAuthority(selected)); + if (!firstCell.isDoneAuthority(selected)) { + newValue.setSelected(firstCell.isDoneNewValueAuthority(selected)); + if (newValue.isSelected()) { + valueEditor.setEnabled(true); + valueEditor.populate(firstCell.getCellPrivilegeControl().getNewValueMap().get(selected)); + } else { + valueEditor.setEnabled(false); + } + } else { + newValue.setSelected(false); + valueEditor.setEnabled(false); + } + populateWidgetButton(firstCell.getWidget(), selected, firstCell); + } + + private void populateWidgetButton(Widget widget, String selected, TemplateCellElement firstCell) { + if (widget != null) { + if (widget.isVisible()) { + widgetVisible.setSelected(!widget.isDoneVisibleAuthority(selected)); + widgetVisible.setEnabled(!firstCell.isDoneAuthority(selected)); + } else { + widgetVisible.setSelected(widget.isVisibleAuthority(selected)); + } + if (widget.isEnabled()) { + widgetAvailable.setSelected(!widget.isDoneUsableAuthority(selected)); + widgetAvailable.setEnabled(!widget.isDoneVisibleAuthority(selected)); + } else { + widgetAvailable.setSelected(widget.isUsableAuthority(selected)); + } + } + } + + private void resetCellElementCheckBoxes() { + cellElementVisibleCheckBoxes.setSelected(true); + widgetVisible.setSelected(true); + widgetVisible.setEnabled(true); + widgetAvailable.setSelected(true); + widgetAvailable.setEnabled(true); + newValue.setSelected(false); + valueEditor.setEnabled(false); + } + + private void checkColumnRowCheckBoxes(String selected) { + if (cellSelection == null) { + gridColumnRowVisible.setSelected(false); + return; + } + TemplateElementCase elementCase = elementCasePane.getEditingElementCase(); + boolean isInside = selectionType == CellSelection.CHOOSE_COLUMN ? + elementCase.getColumnPrivilegeControl(cellSelection.getColumn()).checkInvisible(selected) : + elementCase.getRowPrivilegeControl(cellSelection.getRow()).checkInvisible(selected); + + gridColumnRowVisible.setSelected(isInside); + } + + private void checkFloatSelectionCkeckboxes(String selected) { + String name = floatSelection.getSelectedFloatName(); + TemplateElementCase ec = elementCasePane.getEditingElementCase(); + FloatElement fe = ec.getFloatElement(name); + floatElementVisibleCheckBoxes.setSelected(!fe.isDoneAuthority(selected)); + } + + private JPanel populateHyperlinkCheckPane(AbstractCellElement cellElement) { + NameJavaScriptGroup linkGroup = cellElement.getNameHyperlinkGroup(); + //超链接的个数+单元格可见的操作 + hyperlinkCheckBoxes = new UICheckBox[linkGroup.size()]; + double f = TableLayout.FILL; + double p = TableLayout.PREFERRED; + Component[][] components = new Component[hyperlinkCheckBoxes.length + 1][]; + if (linkGroup.size() == 1) { + components[0] = new Component[]{new UILabel(Inter.getLocText("FR-Designer_Cell"), SwingConstants.LEFT), cellElementVisibleCheckBoxes}; + components[1] = new Component[]{new UILabel(Inter.getLocText("FR-Designer_Hyperlink"), SwingConstants.LEFT), hyperlinkCheckBoxes[0] = new UICheckBox(Inter.getLocText("FR-Designer_Visible"))}; + + } else { + components[0] = new Component[]{new UILabel(Inter.getLocText("FR-Designer_Cell"), SwingConstants.LEFT), cellElementVisibleCheckBoxes = new UICheckBox(Inter.getLocText("FR-Designer_Visible"))}; + components[1] = new Component[]{new UILabel(Inter.getLocText("FR-Designer_Hyperlink"), SwingConstants.LEFT), hyperlinkCheckBoxes[0] = new UICheckBox(linkGroup.getNameHyperlink(0).getName() + Inter.getLocText("FR-Designer_Visible"))}; + for (int i = 1; i < hyperlinkCheckBoxes.length; i++) { + components[i + 1] = new Component[]{null, hyperlinkCheckBoxes[i] = new UICheckBox(linkGroup.getNameHyperlink(i).getName() + Inter.getLocText("FR-Designer_Visible"))}; + } + } + for (int i = 0; i < hyperlinkCheckBoxes.length; i++) { + hyperlinkCheckBoxes[i].setEnabled(cellElementVisibleCheckBoxes.isSelected()); + } + addHyperlinkListener(); + double[] rowSize = new double[hyperlinkCheckBoxes.length + 1]; + int[][] rowCount = new int[hyperlinkCheckBoxes.length + 1][]; + for (int i = 0; i < hyperlinkCheckBoxes.length + 1; i++) { + rowSize[i] = p; + rowCount[i] = new int[]{1, 1}; + } + double[] columnSize = {p, f}; + return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM); + + } + + private JPanel populateMutilHyperlinkCheckPane() { + //超链接的个数+单元格可见的操作 + hyperlinkCheckBoxes = new UICheckBox[1]; + double f = TableLayout.FILL; + double p = TableLayout.PREFERRED; + Component[][] components = new Component[2][]; + components[0] = new Component[]{new UILabel(Inter.getLocText("FR-Designer_Cell"), SwingConstants.LEFT), cellElementVisibleCheckBoxes}; + components[1] = new Component[]{new UILabel(Inter.getLocText("FR-Designer_Hyperlink"), SwingConstants.LEFT), hyperlinkCheckBoxes[0] = new UICheckBox(Inter.getLocText("FR-Designer_Visible"))}; + hyperlinkCheckBoxes[0].setEnabled(cellElementVisibleCheckBoxes.isSelected()); + addHyperlinkListener(); + double[] rowSize = {p, p}; + double[] columnSize = {p, f}; + int[][] rowCount = {{1, 1}, {1, 1}}; + return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM); + } +} \ No newline at end of file From 8ce956556f22a5fc2390b193beb095a74c6ad4fa Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Wed, 3 May 2017 15:33:14 +0800 Subject: [PATCH 324/343] =?UTF-8?q?=E6=97=A0=E4=BB=BB=E5=8A=A1=EF=BC=8Cpmd?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/AuthorityEditToolBarPane.java | 19 +++++++++++-------- .../ElementCasePaneAuthorityEditPane.java | 10 ++-------- .../com/fr/design/locale/designer.properties | 6 +++++- .../design/locale/designer_en_US.properties | 6 +++++- .../design/locale/designer_zh_CN.properties | 6 +++++- .../design/locale/designer_zh_TW.properties | 6 +++++- 6 files changed, 33 insertions(+), 20 deletions(-) diff --git a/designer/src/com/fr/design/mainframe/AuthorityEditToolBarPane.java b/designer/src/com/fr/design/mainframe/AuthorityEditToolBarPane.java index 296d72b96..a760e0043 100644 --- a/designer/src/com/fr/design/mainframe/AuthorityEditToolBarPane.java +++ b/designer/src/com/fr/design/mainframe/AuthorityEditToolBarPane.java @@ -39,7 +39,8 @@ public class AuthorityEditToolBarPane extends AuthorityPropertyPane { super(HistoryTemplateListPane.getInstance().getCurrentEditingTemplate()); this.setLayout(new BorderLayout()); this.setBorder(null); - UILabel authorityTitle = new UILabel(Inter.getLocText(new String[]{"DashBoard-Potence", "Edit"})) { + UILabel authorityTitle = new UILabel(Inter.getLocText(new String[]{"FR-Designer_Permissions", + "FR-Designer_Edit"})) { @Override public Dimension getPreferredSize() { return new Dimension(super.getPreferredSize().width, TITLE_HEIGHT); @@ -86,12 +87,12 @@ public class AuthorityEditToolBarPane extends AuthorityPropertyPane { private UILabel name = null; private JPanel checkPane = null; private List buttonlists; - private UICheckBox buttonVisible = new UICheckBox(Inter.getLocText("Widget-Visible")); + private UICheckBox buttonVisible = new UICheckBox(Inter.getLocText("FR-Designer_Visible")); private ItemListener itemListener = new ItemListener() { public void itemStateChanged(ItemEvent e) { String selectedRole = ReportAndFSManagePane.getInstance().getRoleTree().getSelectedRoleName(); initSelectedPathArray(); - if (ComparatorUtils.equals(selectedRole, Inter.getLocText("Role")) || selectedRole == + if (ComparatorUtils.equals(selectedRole, Inter.getLocText("FR-Designer_Role")) || selectedRole == null || selectedPathArray == null) { return; } @@ -155,9 +156,10 @@ public class AuthorityEditToolBarPane extends AuthorityPropertyPane { private JPanel layoutText() { double p = TableLayout.PREFERRED; Component[][] components = new Component[][]{ - new Component[]{new UILabel(Inter.getLocText("Type") + ":", SwingConstants.RIGHT)}, - new Component[]{new UILabel(Inter.getLocText("WF-Name") + ":", SwingConstants.RIGHT)}, - new Component[]{new UILabel(Inter.getLocText("DashBoard-Potence") + ":", SwingConstants.RIGHT)}, + new Component[]{new UILabel(Inter.getLocText("FR-Designer_Type") + ":", SwingConstants.RIGHT)}, + new Component[]{new UILabel(Inter.getLocText("FR-Designer_WF_Name") + ":", SwingConstants.RIGHT)}, + new Component[]{new UILabel(Inter.getLocText("FR-Designer_Permissions") + ":", SwingConstants + .RIGHT)}, }; double[] rowSize = {p, p, p}; double[] columnSize = {p}; @@ -210,7 +212,7 @@ public class AuthorityEditToolBarPane extends AuthorityPropertyPane { if (name.getText() == "") { type.setText(""); } else { - type.setText(Inter.getLocText(new String[]{"ReportServerP-Toolbar", "Form-Button"})); + type.setText(Inter.getLocText(new String[]{"ReportServerP-Toolbar", "FR-Designer_Form_Button"})); } } @@ -235,7 +237,8 @@ public class AuthorityEditToolBarPane extends AuthorityPropertyPane { double f = TableLayout.FILL; double p = TableLayout.PREFERRED; Component[][] components = new Component[][]{ - new Component[]{new UILabel(Inter.getLocText("Form-Button"), SwingConstants.LEFT), buttonVisible}, + new Component[]{new UILabel(Inter.getLocText("FR-Designer_Form_Button"), SwingConstants.LEFT), + buttonVisible}, }; double[] rowSize = {p, p}; double[] columnSize = {p, p, f}; diff --git a/designer/src/com/fr/design/mainframe/ElementCasePaneAuthorityEditPane.java b/designer/src/com/fr/design/mainframe/ElementCasePaneAuthorityEditPane.java index f654b3d29..fe6c616ed 100644 --- a/designer/src/com/fr/design/mainframe/ElementCasePaneAuthorityEditPane.java +++ b/designer/src/com/fr/design/mainframe/ElementCasePaneAuthorityEditPane.java @@ -249,13 +249,8 @@ public class ElementCasePaneAuthorityEditPane extends AuthorityEditPane { private boolean setAuthorityStyle(int type) { initSelectedPathArray(); String selectedRoles = ReportAndFSManagePane.getInstance().getRoleTree().getSelectedRoleName(); - if (ComparatorUtils.equals(selectedRoles, Inter.getLocText("FR-Designer_Role"))) { - return false; - } - if (selectedRoles == null) { - return false; - } - if (selectedPathArray == null) { + if (ComparatorUtils.equals(selectedRoles, Inter.getLocText("FR-Designer_Role")) || + selectedRoles == null || selectedPathArray == null) { return false; } final TemplateElementCase elementCase = elementCasePane.getEditingElementCase(); @@ -307,7 +302,6 @@ public class ElementCasePaneAuthorityEditPane extends AuthorityEditPane { if (selectionPaths.length == 1) { if (((ExpandMutableTreeNode) (selectionPaths[0].getLastPathComponent())).getChildCount() > 0) { ExpandMutableTreeNode node = (ExpandMutableTreeNode) ((ExpandMutableTreeNode) (selectionPaths[0].getLastPathComponent())).getLastChild(); - System.out.printf(node.getUserObject().toString()); selectedPathArray = new String[node.getChildCount()]; for (int i = 0; i < node.getChildCount(); i++) { ExpandMutableTreeNode n = (ExpandMutableTreeNode) node.getChildAt(i); diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index b3b020ac3..182239ee8 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -1986,4 +1986,8 @@ FR-Designer_Edit_String_To_Formula= FR-Base_UnSignIn= Every= CellWrite-Preview_Cell_Content=Preview Content of Cell -FormulaD-Data_Fields=Data Fields \ No newline at end of file +FormulaD-Data_Fields=Data Fields +FR-Designer_Role=Role +FR-Designer_Permissions=Permissions +FR-Designer_Form_Button=Button +FR-Designer_WF_Name=Name \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index 4bfbbdf89..4c0135daf 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -1987,4 +1987,8 @@ FR-Designer_Edit_String_To_Formula=Edit String To Formula FR-Base_UnSignIn=\ Not Logged In Every=Every CellWrite-Preview_Cell_Content=Content of Cell -FormulaD-Data_Fields=Data Items \ No newline at end of file +FormulaD-Data_Fields=Data Items +FR-Designer_Role=Role +FR-Designer_Permissions=Permissions +FR-Designer_Form_Button=Button +FR-Designer_WF_Name=Name \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index db6c120c9..64aff3d0f 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -1982,4 +1982,8 @@ FR-Designer_Edit_String_To_Formula=\u662F\u5426\u5C06\u5B57\u7B26\u4E32\u7F16\u8 FR-Base_UnSignIn=\ \u672A\u767B\u5F55 Every=\u6BCF CellWrite-Preview_Cell_Content=\u9884\u89C8\u5355\u5143\u683C\u5185\u5BB9 -FormulaD-Data_Fields=\u6570\u636E\u9879 \ No newline at end of file +FormulaD-Data_Fields=\u6570\u636E\u9879 +FR-Designer_Role=\u89D2\u8272 +FR-Designer_Permissions=\u6743\u9650 +FR-Designer_Form_Button=\u6309\u94AE +FR-Designer_WF_Name=\u540D\u79F0 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 674a95f90..9994427d8 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -1982,4 +1982,8 @@ FR-Designer_Edit_String_To_Formula=\u662F\u5426\u5C07\u5B57\u5143\u4E32\u7DE8\u8 FR-Base_UnSignIn=\u672A\u767B\u9304 Every=\u6BCF CellWrite-Preview_Cell_Content=\u9810\u89BD\u5132\u5B58\u683C\u5167\u5BB9 -FormulaD-Data_Fields=\u8CC7\u6599\u9805 \ No newline at end of file +FormulaD-Data_Fields=\u8CC7\u6599\u9805 +FR-Designer_Role=\u89D2\u8272 +FR-Designer_Permissions=\u6B0A\u9650 +FR-Designer_Form_Button=\u6309\u9215 +FR-Designer_WF_Name=\u540D\u7A31 \ No newline at end of file From 4da0c31392e79f93176e17c5514afcbe166006fb Mon Sep 17 00:00:00 2001 From: plough Date: Wed, 3 May 2017 15:52:17 +0800 Subject: [PATCH 325/343] =?UTF-8?q?REPORT-1885=20frm=E8=B7=91=E9=A9=AC?= =?UTF-8?q?=E7=81=AF=3D>=E9=BB=98=E8=AE=A4=E5=AD=97=E4=BD=93=E7=94=B1textP?= =?UTF-8?q?ane=E7=A1=AE=E5=AE=9A=EF=BC=8C=E4=B8=8D=E5=86=99=E6=AD=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer/src/com/fr/design/cell/editor/RichTextToolBar.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer/src/com/fr/design/cell/editor/RichTextToolBar.java b/designer/src/com/fr/design/cell/editor/RichTextToolBar.java index 8d7708c9c..1bf8a2f56 100644 --- a/designer/src/com/fr/design/cell/editor/RichTextToolBar.java +++ b/designer/src/com/fr/design/cell/editor/RichTextToolBar.java @@ -134,7 +134,7 @@ public class RichTextToolBar extends BasicPane{ } private void bindListener(){ - FRFont defaultFont = RichTextPane.DEFAUL_FONT; + FRFont defaultFont = (this.textPane != null) ? FRFont.getInstance(this.textPane.getFont()) : RichTextPane.DEFAUL_FONT; fontNameComboBox.addItemListener(fontNameItemListener); fontNameComboBox.setSelectedItem(defaultFont.getFontName()); fontSizeComboBox.addItemListener(fontSizeItemListener); From 534b886a028cf659b1a9081a8a9cfe1fa901db02 Mon Sep 17 00:00:00 2001 From: zack Date: Wed, 3 May 2017 15:56:54 +0800 Subject: [PATCH 326/343] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1=20=20?= =?UTF-8?q?=E5=90=88=E5=B9=B6=E4=BB=A3=E7=A0=81=E6=97=B6=E7=9A=84=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E8=A6=86=E7=9B=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/designer/creator/XElementCase.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/creator/XElementCase.java b/designer_form/src/com/fr/design/designer/creator/XElementCase.java index 7eb967a9f..c22c6acf5 100644 --- a/designer_form/src/com/fr/design/designer/creator/XElementCase.java +++ b/designer_form/src/com/fr/design/designer/creator/XElementCase.java @@ -10,11 +10,9 @@ import com.fr.design.fun.WidgetPropertyUIProvider; import com.fr.design.fun.impl.AbstractFormElementCaseEditorProvider; import com.fr.design.gui.ilable.UILabel; import com.fr.design.mainframe.*; -import com.fr.design.mainframe.widget.editors.BooleanEditor; +import com.fr.design.mainframe.widget.editors.ElementCaseToolBarEditor; import com.fr.design.mainframe.widget.editors.PaddingMarginEditor; import com.fr.design.mainframe.widget.editors.WLayoutBorderStyleEditor; -import com.fr.design.mainframe.widget.renderer.LayoutBorderStyleRenderer; -import com.fr.design.mainframe.widget.renderer.PaddingMarginCellRenderer; import com.fr.form.FormElementCaseContainerProvider; import com.fr.form.FormElementCaseProvider; import com.fr.form.FormProvider; @@ -104,7 +102,7 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme new CRPropertyDescriptor("margin", this.data.getClass()).setEditorClass(PaddingMarginEditor.class) .setI18NName(Inter.getLocText("FR-Layout_Padding")) .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced"), - new CRPropertyDescriptor("showToolBar", this.data.getClass()).setEditorClass(BooleanEditor.class) + new CRPropertyDescriptor("toolBars", this.data.getClass()).setEditorClass(ElementCaseToolBarEditor.class) .setI18NName(Inter.getLocText("Form-EC_toolbar")) .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced") }; From 3b736749f5744fc30bdf39543c383240c1feb84a Mon Sep 17 00:00:00 2001 From: vito Date: Fri, 5 May 2017 16:33:35 +0800 Subject: [PATCH 327/343] =?UTF-8?q?REPORT-2335=20=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E7=95=8C=E9=9D=A2=E4=BB=A5=E5=8F=8A=E5=8F=B3?= =?UTF-8?q?=E4=B8=8A=E8=A7=92=E7=9A=84=E7=99=BB=E5=BD=95=E7=95=8C=E9=9D=A2?= =?UTF-8?q?=EF=BC=8C=E5=A4=9A=E6=AC=A1=E7=82=B9=E5=87=BB=E5=90=8E=EF=BC=8C?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E6=97=A0=E6=B3=95=E5=85=B3=E9=97=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/bbs/LoginDialog.java | 10 ++-- .../src/com/fr/design/extra/LoginPane.java | 12 ----- .../com/fr/design/extra/LoginWebBridge.java | 1 + .../com/fr/design/extra/PluginWebBridge.java | 10 ++-- .../com/fr/design/extra/QQLoginWebBridge.java | 11 ++-- .../com/fr/design/extra/ReuseWebBridge.java | 36 ------------- .../src/com/fr/design/extra/ReuseWebPane.java | 54 ------------------- .../src/com/fr/design/extra/WebDialog.java | 6 +-- 8 files changed, 21 insertions(+), 119 deletions(-) delete mode 100644 designer_base/src/com/fr/design/extra/ReuseWebBridge.java delete mode 100644 designer_base/src/com/fr/design/extra/ReuseWebPane.java diff --git a/designer/src/com/fr/design/mainframe/bbs/LoginDialog.java b/designer/src/com/fr/design/mainframe/bbs/LoginDialog.java index e3013e487..2155b2437 100644 --- a/designer/src/com/fr/design/mainframe/bbs/LoginDialog.java +++ b/designer/src/com/fr/design/mainframe/bbs/LoginDialog.java @@ -3,10 +3,7 @@ package com.fr.design.mainframe.bbs; import com.fr.design.dialog.BasicPane; import com.fr.design.dialog.UIDialog; import com.fr.design.utils.gui.GUICoreUtils; -import com.fr.general.Inter; -import com.fr.general.SiteCenter; -import com.fr.general.http.HttpClient; -import com.fr.stable.StringUtils; +import com.fr.stable.StableUtils; import javax.swing.*; import java.awt.*; @@ -19,14 +16,15 @@ public class LoginDialog extends UIDialog { public LoginDialog(Frame frame, BasicPane pane) { super(frame); - setUndecorated(true); + if (StableUtils.getMajorJavaVersion() == 8) { + setUndecorated(true); + } JPanel panel = (JPanel) getContentPane(); panel.setLayout(new BorderLayout()); add(pane, BorderLayout.CENTER); setSize(DEFAULT_SHOP); GUICoreUtils.centerWindow(this); setResizable(false); - setTitle(Inter.getLocText("FR-Designer-Plugin_Manager")); } @Override diff --git a/designer_base/src/com/fr/design/extra/LoginPane.java b/designer_base/src/com/fr/design/extra/LoginPane.java index 41a2ce8ce..c751a987c 100644 --- a/designer_base/src/com/fr/design/extra/LoginPane.java +++ b/designer_base/src/com/fr/design/extra/LoginPane.java @@ -4,7 +4,6 @@ import com.fr.base.FRContext; import com.fr.design.DesignerEnvManager; import com.fr.design.RestartHelper; import com.fr.design.dialog.BasicPane; -import com.fr.design.gui.frpane.UITabbedPane; import com.fr.general.ComparatorUtils; import com.fr.general.IOUtils; import com.fr.general.Inter; @@ -53,8 +52,6 @@ public class LoginPane extends BasicPane { updateShopScripts(); } } - } else { - initTraditionalStore(); } } @@ -140,13 +137,4 @@ public class LoginPane extends BasicPane { } }.execute(); } - - private void initTraditionalStore() { - UITabbedPane tabbedPane = new UITabbedPane(); - add(tabbedPane, BorderLayout.CENTER); - PluginInstalledPane installedPane = new PluginInstalledPane(); - tabbedPane.addTab(installedPane.tabTitle(), installedPane); - tabbedPane.addTab(Inter.getLocText("FR-Designer-Plugin_Update"), new PluginUpdatePane(tabbedPane)); - tabbedPane.addTab(Inter.getLocText("FR-Designer-Plugin_All_Plugins"), new PluginFromStorePane(tabbedPane)); - } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/extra/LoginWebBridge.java b/designer_base/src/com/fr/design/extra/LoginWebBridge.java index 41ed99beb..49719142c 100644 --- a/designer_base/src/com/fr/design/extra/LoginWebBridge.java +++ b/designer_base/src/com/fr/design/extra/LoginWebBridge.java @@ -91,6 +91,7 @@ public class LoginWebBridge { } public void setDialogHandle(UIDialog uiDialog) { + closeWindow(); this.uiDialog = uiDialog; } diff --git a/designer_base/src/com/fr/design/extra/PluginWebBridge.java b/designer_base/src/com/fr/design/extra/PluginWebBridge.java index 12c3e85c4..f1759f016 100644 --- a/designer_base/src/com/fr/design/extra/PluginWebBridge.java +++ b/designer_base/src/com/fr/design/extra/PluginWebBridge.java @@ -136,6 +136,7 @@ public class PluginWebBridge { } public void setDialogHandle(UIDialog uiDialog) { + closeWindow(); this.uiDialog = uiDialog; } @@ -367,6 +368,7 @@ public class PluginWebBridge { /** * 获取系统登录的用户名 + * * @param callback */ public void getLoginInfo(final JSObject callback) { @@ -381,7 +383,7 @@ public class PluginWebBridge { try { String loginUrl = SiteCenter.getInstance().acquireUrlByKind("bbs.default"); Desktop.getDesktop().browse(new URI(loginUrl)); - }catch (Exception exp) { + } catch (Exception exp) { FRContext.getLogger().info(exp.getMessage()); } } @@ -493,13 +495,14 @@ public class PluginWebBridge { /*-------------------------------登录部分的处理----------------------------------*/ + /** * 注册页面 */ public void registerHref() { try { Desktop.getDesktop().browse(new URI(SiteCenter.getInstance().acquireUrlByKind("bbs.register"))); - }catch (Exception e) { + } catch (Exception e) { FRContext.getLogger().info(e.getMessage()); } } @@ -510,7 +513,7 @@ public class PluginWebBridge { public void forgetHref() { try { Desktop.getDesktop().browse(new URI(SiteCenter.getInstance().acquireUrlByKind("bbs.reset"))); - }catch (Exception e) { + } catch (Exception e) { FRContext.getLogger().info(e.getMessage()); } } @@ -521,6 +524,7 @@ public class PluginWebBridge { /** * 登录操作的回调 + * * @param username * @param password * @return diff --git a/designer_base/src/com/fr/design/extra/QQLoginWebBridge.java b/designer_base/src/com/fr/design/extra/QQLoginWebBridge.java index d0bcc27e1..7c2dd3e50 100644 --- a/designer_base/src/com/fr/design/extra/QQLoginWebBridge.java +++ b/designer_base/src/com/fr/design/extra/QQLoginWebBridge.java @@ -3,15 +3,13 @@ package com.fr.design.extra; import com.fr.design.DesignerEnvManager; import com.fr.design.dialog.UIDialog; import com.fr.design.gui.ilable.UILabel; -import com.fr.general.FRLogger; import com.fr.general.SiteCenter; import javafx.scene.web.WebEngine; -import org.json.JSONObject; import netscape.javascript.JSObject; +import org.json.JSONObject; import javax.swing.*; import java.awt.*; -import java.io.IOException; import java.net.URI; /** @@ -50,10 +48,12 @@ public class QQLoginWebBridge { } public void setDialogHandle(UIDialog uiDialog) { + closeParentWindow(); this.uiDialog = uiDialog; } public void setQQDialogHandle(UIDialog uiDialog) { + closeQQWindow(); this.qqDialog = uiDialog; } @@ -99,6 +99,7 @@ public class QQLoginWebBridge { /** * 获取用户信息 + * * @param userInfo */ public void getLoginInfo(String userInfo) { @@ -113,12 +114,12 @@ public class QQLoginWebBridge { DesignerEnvManager.getEnvManager().setBBSName(username); DesignerEnvManager.getEnvManager().setBbsUid(uid); DesignerEnvManager.getEnvManager().setInShowBBsName(username); - }else if (status.equals(LOGINFAILED)){ + } else if (status.equals(LOGINFAILED)) { //账号没有QQ授权 closeQQWindow(); try { Desktop.getDesktop().browse(new URI(SiteCenter.getInstance().acquireUrlByKind("QQ_binding"))); - }catch (Exception exp) { + } catch (Exception exp) { } } } diff --git a/designer_base/src/com/fr/design/extra/ReuseWebBridge.java b/designer_base/src/com/fr/design/extra/ReuseWebBridge.java deleted file mode 100644 index 413f86275..000000000 --- a/designer_base/src/com/fr/design/extra/ReuseWebBridge.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.fr.design.extra; - -import javafx.scene.web.WebEngine; - -/** - * Created by vito on 2016/9/28. - */ -public class ReuseWebBridge { - public static ReuseWebBridge helper; - private WebEngine webEngine; - - public static ReuseWebBridge getHelper() { - if (helper != null) { - return helper; - } - synchronized (ReuseWebBridge.class) { - if (helper == null) { - helper = new ReuseWebBridge(); - } - return helper; - } - } - - public static ReuseWebBridge getHelper(WebEngine webEngine) { - getHelper(); - helper.setEngine(webEngine); - return helper; - } - - private ReuseWebBridge() { - } - - public void setEngine(WebEngine webEngine) { - this.webEngine = webEngine; - } -} diff --git a/designer_base/src/com/fr/design/extra/ReuseWebPane.java b/designer_base/src/com/fr/design/extra/ReuseWebPane.java deleted file mode 100644 index b48957e0f..000000000 --- a/designer_base/src/com/fr/design/extra/ReuseWebPane.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.fr.design.extra; - -import javafx.application.Platform; -import javafx.embed.swing.JFXPanel; -import javafx.event.EventHandler; -import javafx.scene.Scene; -import javafx.scene.layout.BorderPane; -import javafx.scene.web.WebEngine; -import javafx.scene.web.WebEvent; -import javafx.scene.web.WebView; -import netscape.javascript.JSObject; - -import javax.swing.*; - -/** - * Created by vito on 2016/9/28. - */ -public class ReuseWebPane extends JFXPanel { - private WebEngine webEngine; - - public ReuseWebPane(final String mainJs) { - Platform.setImplicitExit(false); - Platform.runLater(new Runnable() { - @Override - public void run() { - BorderPane root = new BorderPane(); - Scene scene = new Scene(root); - ReuseWebPane.this.setScene(scene); - WebView webView = new WebView(); - webEngine = webView.getEngine(); - webEngine.load("file:///" + mainJs); - webEngine.setOnAlert(new EventHandler>() { - @Override - public void handle(WebEvent event) { - showAlert(event.getData()); - } - }); - JSObject obj = (JSObject) webEngine.executeScript("window"); - obj.setMember("ReuseHelper", ReuseWebBridge.getHelper(webEngine)); - webView.setContextMenuEnabled(false);//屏蔽右键 - root.setCenter(webView); - } - }); - } - - private void showAlert(final String message) { - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - JOptionPane.showMessageDialog(ReuseWebPane.this, message); - } - }); - } -} diff --git a/designer_base/src/com/fr/design/extra/WebDialog.java b/designer_base/src/com/fr/design/extra/WebDialog.java index ed7d73563..22a4e5ac8 100644 --- a/designer_base/src/com/fr/design/extra/WebDialog.java +++ b/designer_base/src/com/fr/design/extra/WebDialog.java @@ -70,10 +70,10 @@ public class WebDialog { /** * 以关键词打开设计器商店 - *

- * // * @param keyword 关键词 + * + * @param keyword 关键词 */ - public void createPluginDialog(String keyword) { + public static void createPluginDialog(String keyword) { PluginWebBridge.getHelper().openWithSearch(keyword); createPluginDialog(); } From 33ab06ff91f6d467c383f844ac90f5060683722e Mon Sep 17 00:00:00 2001 From: vito Date: Fri, 5 May 2017 16:38:27 +0800 Subject: [PATCH 328/343] =?UTF-8?q?REPORT-2213=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E5=8F=B3=E4=B8=8A=E8=A7=92=E4=BD=BF=E7=94=A8qq?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E5=90=8E=EF=BC=8C=E7=99=BB=E5=BD=95=E7=95=8C?= =?UTF-8?q?=E9=9D=A2=E5=85=B3=E4=B8=8D=E6=8E=89=20&=20=E8=BF=99=E9=83=A8?= =?UTF-8?q?=E5=88=86=E7=9A=84=E4=BB=A3=E7=A0=81=E8=B4=A8=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/bbs/UserInfoLabel.java | 9 +- .../freeze/RepeatAndFreezeSettingPane.java | 4 +- .../actions/server/PluginManagerAction.java | 4 +- .../src/com/fr/design/extra/LoginDialog.java | 32 +++ .../src/com/fr/design/extra/LoginPane.java | 140 ------------ .../com/fr/design/extra/LoginWebBridge.java | 150 ++++++++----- .../src/com/fr/design/extra/LoginWebPane.java | 14 +- .../com/fr/design/extra/QQLoginDialog.java | 4 +- .../src/com/fr/design/extra/QQLoginPane.java | 145 ------------- .../com/fr/design/extra/QQLoginWebBridge.java | 132 ------------ .../com/fr/design/extra/QQLoginWebPane.java | 6 +- .../com/fr/design/extra/WebViewDlgHelper.java | 203 ++++++++++++++++++ .../src/com/fr/start/BaseDesigner.java | 4 +- 13 files changed, 347 insertions(+), 500 deletions(-) create mode 100644 designer_base/src/com/fr/design/extra/LoginDialog.java delete mode 100644 designer_base/src/com/fr/design/extra/LoginPane.java delete mode 100644 designer_base/src/com/fr/design/extra/QQLoginPane.java delete mode 100644 designer_base/src/com/fr/design/extra/QQLoginWebBridge.java create mode 100644 designer_base/src/com/fr/design/extra/WebViewDlgHelper.java diff --git a/designer/src/com/fr/design/mainframe/bbs/UserInfoLabel.java b/designer/src/com/fr/design/mainframe/bbs/UserInfoLabel.java index f6e3d3e7c..90d84059b 100644 --- a/designer/src/com/fr/design/mainframe/bbs/UserInfoLabel.java +++ b/designer/src/com/fr/design/mainframe/bbs/UserInfoLabel.java @@ -5,7 +5,6 @@ package com.fr.design.mainframe.bbs; import com.fr.base.FRContext; import com.fr.design.DesignerEnvManager; -import com.fr.design.dialog.UIDialog; import com.fr.design.extra.*; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.imenu.UIMenuItem; @@ -103,17 +102,13 @@ public class UserInfoLabel extends UILabel { if (StableUtils.getMajorJavaVersion() == 8) { PluginWebBridge.getHelper().setUILabel(UserInfoLabel.this); } - QQLoginWebBridge.getHelper().setUILabelInPlugin(UserInfoLabel.this); + LoginWebBridge.getHelper().setUILabelInPlugin(UserInfoLabel.this); UserLoginContext.addLoginContextListener(new LoginContextListener() { @Override public void showLoginContext() { - LoginPane managerPane = new LoginPane(); - UIDialog qqdlg = new LoginDialog(DesignerContext.getDesignerFrame(), managerPane); - LoginWebBridge.getHelper().setDialogHandle(qqdlg); + WebViewDlgHelper.createLoginDialog(); LoginWebBridge.getHelper().setUILabel(UserInfoLabel.this); - QQLoginWebBridge.getHelper().setLoginlabel(); - qqdlg.setVisible(true); clearLoginInformation(); updateInfoPane(); } diff --git a/designer/src/com/fr/design/report/freeze/RepeatAndFreezeSettingPane.java b/designer/src/com/fr/design/report/freeze/RepeatAndFreezeSettingPane.java index 46bc378ae..af5906c33 100644 --- a/designer/src/com/fr/design/report/freeze/RepeatAndFreezeSettingPane.java +++ b/designer/src/com/fr/design/report/freeze/RepeatAndFreezeSettingPane.java @@ -10,7 +10,7 @@ import javax.swing.event.ChangeListener; import com.fr.base.FRContext; import com.fr.design.dialog.BasicPane; -import com.fr.design.extra.WebDialog; +import com.fr.design.extra.WebViewDlgHelper; import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.ilable.ActionLabel; import com.fr.design.gui.ilable.UILabel; @@ -553,7 +553,7 @@ public class RepeatAndFreezeSettingPane extends BasicPane { public void actionPerformed(ActionEvent e) { try { //Desktop.getDesktop().browse(new URI(url)); - WebDialog.createPluginDialog(); + WebViewDlgHelper.createPluginDialog(); RepeatAndFreezeSettingPane.this.getTopLevelAncestor().setVisible(false); } catch (Exception exp) { diff --git a/designer_base/src/com/fr/design/actions/server/PluginManagerAction.java b/designer_base/src/com/fr/design/actions/server/PluginManagerAction.java index 08dc91b07..bd77bfa0c 100644 --- a/designer_base/src/com/fr/design/actions/server/PluginManagerAction.java +++ b/designer_base/src/com/fr/design/actions/server/PluginManagerAction.java @@ -2,7 +2,7 @@ package com.fr.design.actions.server; import com.fr.base.BaseUtils; import com.fr.design.actions.UpdateAction; -import com.fr.design.extra.WebDialog; +import com.fr.design.extra.WebViewDlgHelper; import com.fr.design.menu.MenuKeySet; import com.fr.general.Inter; @@ -25,7 +25,7 @@ public class PluginManagerAction extends UpdateAction { @Override public void actionPerformed(ActionEvent e) { - WebDialog.createPluginDialog(); + WebViewDlgHelper.createPluginDialog(); } public static final MenuKeySet PLUGIN_MANAGER = new MenuKeySet() { diff --git a/designer_base/src/com/fr/design/extra/LoginDialog.java b/designer_base/src/com/fr/design/extra/LoginDialog.java new file mode 100644 index 000000000..32d4dca03 --- /dev/null +++ b/designer_base/src/com/fr/design/extra/LoginDialog.java @@ -0,0 +1,32 @@ +package com.fr.design.extra; + +import com.fr.design.dialog.UIDialog; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.stable.StableUtils; + +import javax.swing.*; +import java.awt.*; + +/** + * Created by vito on 2017/5/5. + */ +public class LoginDialog extends UIDialog { + private static final Dimension DEFAULT_SHOP = new Dimension(401, 201); + + public LoginDialog(Frame frame, Component pane) { + super(frame); + if (StableUtils.getMajorJavaVersion() == 8) { + setUndecorated(true); + } + JPanel panel = (JPanel) getContentPane(); + panel.setLayout(new BorderLayout()); + add(pane, BorderLayout.CENTER); + setSize(DEFAULT_SHOP); + GUICoreUtils.centerWindow(this); + setResizable(false); + } + + @Override + public void checkValid() throws Exception { + } +} diff --git a/designer_base/src/com/fr/design/extra/LoginPane.java b/designer_base/src/com/fr/design/extra/LoginPane.java deleted file mode 100644 index c751a987c..000000000 --- a/designer_base/src/com/fr/design/extra/LoginPane.java +++ /dev/null @@ -1,140 +0,0 @@ -package com.fr.design.extra; - -import com.fr.base.FRContext; -import com.fr.design.DesignerEnvManager; -import com.fr.design.RestartHelper; -import com.fr.design.dialog.BasicPane; -import com.fr.general.ComparatorUtils; -import com.fr.general.IOUtils; -import com.fr.general.Inter; -import com.fr.general.SiteCenter; -import com.fr.general.http.HttpClient; -import com.fr.plugin.PluginVerifyException; -import com.fr.stable.StableUtils; - -import javax.swing.*; -import java.awt.*; -import java.io.File; -import java.net.HttpURLConnection; -import java.net.URL; -import java.util.concurrent.ExecutionException; - -/** - * Created by zhaohehe on 16/7/27. - */ -public class LoginPane extends BasicPane { - private static final String LATEST = "latest"; - - public LoginPane() { - setLayout(new BorderLayout()); - if (StableUtils.getMajorJavaVersion() == 8) { - String installHome; - if (StableUtils.isDebug()) { - URL url = ClassLoader.getSystemResource(""); - installHome = url.getPath(); - addPane(installHome); - } else { - installHome = StableUtils.getInstallHome(); - File file = new File(StableUtils.pathJoin(installHome, "scripts")); - if (!file.exists()) { - int rv = JOptionPane.showConfirmDialog( - this, - Inter.getLocText("FR-Designer-Plugin_Shop_Need_Install"), - Inter.getLocText("FR-Designer-Plugin_Warning"), - JOptionPane.OK_CANCEL_OPTION, - JOptionPane.INFORMATION_MESSAGE - ); - if (rv == JOptionPane.OK_OPTION) { - downloadShopScripts(); - } - } else { - addPane(installHome); - updateShopScripts(); - } - } - } - } - - private void addPane(String installHome) { - LoginWebPane webPane = new LoginWebPane(new File(installHome).getAbsolutePath(),LoginPane.this); - add(webPane, BorderLayout.CENTER); - } - - @Override - protected String title4PopupWindow() { - return Inter.getLocText("FR-Designer-Plugin_Manager"); - } - - private void downloadShopScripts() { - new SwingWorker() { - @Override - protected Boolean doInBackground() throws Exception { - String id = "shop_scripts"; - String username = DesignerEnvManager.getEnvManager().getBBSName(); - String password = DesignerEnvManager.getEnvManager().getBBSPassword(); - try { - PluginHelper.downloadPluginFile(id, username, password, new Process() { - @Override - public void process(Double integer) { - } - }); - } catch (PluginVerifyException e) { - JOptionPane.showMessageDialog(LoginPane.this, e.getMessage(), Inter.getLocText("FR-Designer-Plugin_Warning"), JOptionPane.ERROR_MESSAGE); - return false; - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage(), e); - return false; - } - return true; - } - - @Override - protected void done() { - try { - if (get()) { - IOUtils.unzip(new File(StableUtils.pathJoin(PluginHelper.DOWNLOAD_PATH, PluginHelper.TEMP_FILE)), StableUtils.getInstallHome()); - int rv = JOptionPane.showOptionDialog( - LoginPane.this, - Inter.getLocText("FR-Designer-Plugin_Shop_Installed"), - Inter.getLocText("FR-Designer-Plugin_Warning"), - JOptionPane.YES_NO_OPTION, - JOptionPane.INFORMATION_MESSAGE, - null, - new String[]{Inter.getLocText("FR-Designer-Basic_Restart_Designer"), Inter.getLocText("FR-Designer-Basic_Restart_Designer_Later")}, - null - ); - if (rv == JOptionPane.OK_OPTION) { - RestartHelper.restart(); - } - } - } catch (InterruptedException | ExecutionException e) { - FRContext.getLogger().error(e.getMessage(), e); - } - } - }.execute(); - } - - private void updateShopScripts() { - new SwingWorker() { - @Override - protected Void doInBackground() throws Exception { - HttpClient httpClient = new HttpClient(SiteCenter.getInstance().acquireUrlByKind("store.version") + "&version=" + PluginStoreConstants.VERSION); - if (httpClient.getResponseCode() == HttpURLConnection.HTTP_OK) { - if (!ComparatorUtils.equals(httpClient.getResponseText(), LATEST)) { - int rv = JOptionPane.showConfirmDialog( - LoginPane.this, - Inter.getLocText("FR-Designer-Plugin_Shop_Need_Update"), - Inter.getLocText("FR-Designer-Plugin_Warning"), - JOptionPane.OK_CANCEL_OPTION, - JOptionPane.INFORMATION_MESSAGE - ); - if (rv == JOptionPane.OK_OPTION) { - downloadShopScripts(); - } - } - } - return null; - } - }.execute(); - } -} \ No newline at end of file diff --git a/designer_base/src/com/fr/design/extra/LoginWebBridge.java b/designer_base/src/com/fr/design/extra/LoginWebBridge.java index 49719142c..611166bc0 100644 --- a/designer_base/src/com/fr/design/extra/LoginWebBridge.java +++ b/designer_base/src/com/fr/design/extra/LoginWebBridge.java @@ -6,7 +6,6 @@ import com.fr.design.dialog.UIDialog; import com.fr.design.extra.ucenter.Client; import com.fr.design.extra.ucenter.XMLHelper; import com.fr.design.gui.ilable.UILabel; -import com.fr.design.mainframe.DesignerContext; import com.fr.general.SiteCenter; import com.fr.general.http.HttpClient; import com.fr.json.JSONObject; @@ -14,10 +13,10 @@ import com.fr.stable.EncodeConstants; import com.fr.stable.StringUtils; import javafx.scene.web.WebEngine; -import java.io.UnsupportedEncodingException; -import java.net.URI; import javax.swing.*; import java.awt.*; +import java.io.UnsupportedEncodingException; +import java.net.URI; import java.net.URLEncoder; import java.util.HashMap; import java.util.LinkedList; @@ -47,47 +46,44 @@ public class LoginWebBridge { //用户名,密码为空 private static final String LOGIN_INFO_EMPTY = "-5"; private static final int TIME_OUT = 10000; + private static final String LOGIN_SUCCESS = "ok"; + private static final String LOGIN_FAILED = "failed"; - private static com.fr.design.extra.LoginWebBridge helper; + private static LoginWebBridge helper; + private UILabel pluginuiLabel; private UIDialog uiDialog; + private UIDialog qqDialog; private UILabel uiLabel; private String userName; - public int getMessageCount() { - return messageCount; - } - - /** - * 测试论坛网络连接 - * @return - */ - private boolean testConnection() { - HttpClient client = new HttpClient(SiteCenter.getInstance().acquireUrlByKind("bbs.test")); - return client.isServerAlive(); + public LoginWebBridge() { + String username = DesignerEnvManager.getEnvManager().getBBSName(); + setUserName(username, uiLabel); } - public static com.fr.design.extra.LoginWebBridge getHelper() { + public static LoginWebBridge getHelper() { if (helper != null) { return helper; } - synchronized (com.fr.design.extra.LoginWebBridge.class) { + synchronized (LoginWebBridge.class) { if (helper == null) { - helper = new com.fr.design.extra.LoginWebBridge(); + helper = new LoginWebBridge(); } return helper; } } - public static com.fr.design.extra.LoginWebBridge getHelper(WebEngine webEngine) { - getHelper(); - helper.setEngine(webEngine); - return helper; + public int getMessageCount() { + return messageCount; } - private WebEngine webEngine; + public void setUILabelInPlugin(UILabel uiLabel) { + this.pluginuiLabel = uiLabel; + } - public void setEngine(WebEngine webEngine) { - this.webEngine = webEngine; + public void setQqDialog(UIDialog qqDialog) { + closeQQWindow(); + this.qqDialog = qqDialog; } public void setDialogHandle(UIDialog uiDialog) { @@ -99,50 +95,56 @@ public class LoginWebBridge { this.uiLabel = uiLabel; } - public LoginWebBridge() { - String username = DesignerEnvManager.getEnvManager().getBBSName(); - setUserName(username, uiLabel); - } - /** * 设置显示的用户名 + * * @param userName 登录用户名 - * @param label label显示 + * @param label label显示 */ public void setUserName(String userName, UILabel label) { if (uiLabel == null) { this.uiLabel = label; } - if(StringUtils.isEmpty(userName)){ + if (StringUtils.isEmpty(userName)) { return; } - if(!StringUtils.isEmpty(this.userName)){ + if (!StringUtils.isEmpty(this.userName)) { updateMessageCount(); } this.userName = userName; } + /** + * 测试论坛网络连接 + * + * @return + */ + private boolean testConnection() { + HttpClient client = new HttpClient(SiteCenter.getInstance().acquireUrlByKind("bbs.test")); + return client.isServerAlive(); + } + /** * 定时取后台论坛消息 */ - public void updateMessageCount(){ + public void updateMessageCount() { //启动获取消息更新的线程 //登陆状态, 根据存起来的用户名密码, 每1分钟发起一次请求, 更新消息条数. Thread updateMessageThread = new Thread(new Runnable() { @Override public void run() { sleep(CHECK_MESSAGE_TIME); - while(StringUtils.isNotEmpty(DesignerEnvManager.getEnvManager().getBBSName())){ + while (StringUtils.isNotEmpty(DesignerEnvManager.getEnvManager().getBBSName())) { HashMap para = new HashMap<>(); int uid = DesignerEnvManager.getEnvManager().getBbsUid(); para.put("uid", String.valueOf(uid)); HttpClient getMessage = new HttpClient(SiteCenter.getInstance().acquireUrlByKind("bbs.message"), para); getMessage.asGet(); - if(getMessage.isServerAlive()){ + if (getMessage.isServerAlive()) { try { String res = getMessage.getResponseText(); if (res.equals(FAILED_MESSAGE_STATUS)) { - }else { + } else { JSONObject jo = new JSONObject(res); if (jo.getString("status").equals(SUCCESS_MESSAGE_STATUS)) { setMessageCount(Integer.parseInt(jo.getString("message"))); @@ -161,6 +163,7 @@ public class LoginWebBridge { /** * 设置获取的消息长度,并设置显示 + * * @param count */ public void setMessageCount(int count) { @@ -178,7 +181,7 @@ public class LoginWebBridge { uiLabel.setText(sb.toString()); } - private String encode(String str){ + private String encode(String str) { try { return URLEncoder.encode(str, EncodeConstants.ENCODING_UTF_8); } catch (UnsupportedEncodingException e) { @@ -186,7 +189,7 @@ public class LoginWebBridge { } } - private void sleep(long millis){ + private void sleep(long millis) { try { Thread.sleep(millis); } catch (InterruptedException e) { @@ -200,7 +203,7 @@ public class LoginWebBridge { public void registerHref() { try { Desktop.getDesktop().browse(new URI(SiteCenter.getInstance().acquireUrlByKind("bbs.register"))); - }catch (Exception e) { + } catch (Exception e) { FRContext.getLogger().info(e.getMessage()); } } @@ -211,13 +214,14 @@ public class LoginWebBridge { public void forgetHref() { try { Desktop.getDesktop().browse(new URI(SiteCenter.getInstance().acquireUrlByKind("bbs.reset"))); - }catch (Exception e) { + } catch (Exception e) { FRContext.getLogger().info(e.getMessage()); } } /** * 设计器端的用户登录 + * * @param username 用户名 * @param password 密码 * @return 登录信息标志 @@ -228,9 +232,10 @@ public class LoginWebBridge { /** * 插件管理的用户登录部分 + * * @param username 用户名 * @param password 密码 - * @param uiLabel 设计器端的label + * @param uiLabel 设计器端的label * @return 登录信息标志 */ public String pluginManageLogin(String username, String password, UILabel uiLabel) { @@ -239,9 +244,10 @@ public class LoginWebBridge { /** * 登录操作 + * * @param username 用户名 * @param password 密码 - * @param uiLabel 两边的label显示 + * @param uiLabel 两边的label显示 * @return 登录信息标志 */ public String login(String username, String password, UILabel uiLabel) { @@ -272,8 +278,8 @@ public class LoginWebBridge { /** * 更新后台的用户信息 + * * @param username 用户名 - * @param password 密码 */ public void updateUserInfo(String username) { this.userName = username; @@ -281,6 +287,7 @@ public class LoginWebBridge { /** * 关闭窗口并且重新赋值 + * * @param username */ public void loginSuccess(String username, UILabel uiLabel) { @@ -295,13 +302,7 @@ public class LoginWebBridge { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { - //弹出qq登录的窗口 - QQLoginPane managerPane = new QQLoginPane(); - UIDialog qqlog = new QQLoginDialog(DesignerContext.getDesignerFrame(),managerPane); - QQLoginWebBridge.getHelper().setDialogHandle(uiDialog); - QQLoginWebBridge.getHelper().setQQDialogHandle(qqlog); - QQLoginWebBridge.getHelper().setUILabel(uiLabel); - qqlog.setVisible(true); + WebViewDlgHelper.createQQLoginDialog(); } }); } @@ -327,12 +328,55 @@ public class LoginWebBridge { } else { return UNKNOWN_ERROR;//未知错误,-3 } - }else { + } else { return NET_FAILED; } - }catch (Exception e) { + } catch (Exception e) { FRContext.getLogger().info(e.getMessage()); } return UNKNOWN_ERROR; } + + /** + * 关闭QQ授权窗口 + */ + public void closeQQWindow() { + if (qqDialog != null) { + qqDialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); + qqDialog.setVisible(false); + } + } + + /** + * 获取用户信息 + * + * @param userInfo + */ + public void getLoginInfo(String userInfo) { + org.json.JSONObject jo = new org.json.JSONObject(userInfo); + String status = jo.get("status").toString(); + if (status.equals(LOGIN_SUCCESS)) { + String username = jo.get("username").toString(); + int uid = Integer.parseInt(jo.get("uid") == null ? "" : jo.get("uid").toString()); + closeWindow(); + closeQQWindow(); + pluginuiLabel.setText(username); + DesignerEnvManager.getEnvManager().setBBSName(username); + DesignerEnvManager.getEnvManager().setBbsUid(uid); + DesignerEnvManager.getEnvManager().setInShowBBsName(username); + } else if (status.equals(LOGIN_FAILED)) { + //账号没有QQ授权 + closeQQWindow(); + try { + Desktop.getDesktop().browse(new URI(SiteCenter.getInstance().acquireUrlByKind("QQ_binding"))); + } catch (Exception exp) { + } + } + } + + public void openUrlAtLocalWebBrowser(WebEngine eng, String url) { + if (url.indexOf("qqLogin.html") > 0) { + return; + } + } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/extra/LoginWebPane.java b/designer_base/src/com/fr/design/extra/LoginWebPane.java index b49db6ace..ee0a3275a 100644 --- a/designer_base/src/com/fr/design/extra/LoginWebPane.java +++ b/designer_base/src/com/fr/design/extra/LoginWebPane.java @@ -17,11 +17,7 @@ import javax.swing.*; */ public class LoginWebPane extends JFXPanel { - private WebEngine webEngine; - private LoginPane loginPane; - - public LoginWebPane(final String installHome,LoginPane loginPane) { - this.loginPane = loginPane; + public LoginWebPane(final String installHome) { Platform.setImplicitExit(false); Platform.runLater(new Runnable() { @Override @@ -30,7 +26,7 @@ public class LoginWebPane extends JFXPanel { Scene scene = new Scene(root); LoginWebPane.this.setScene(scene); WebView webView = new WebView(); - webEngine = webView.getEngine(); + WebEngine webEngine = webView.getEngine(); webEngine.load("file:///" + installHome + "/scripts/qqLogin/web/login.html"); webEngine.setOnAlert(new EventHandler>() { @Override @@ -39,17 +35,13 @@ public class LoginWebPane extends JFXPanel { } }); JSObject obj = (JSObject) webEngine.executeScript("window"); - obj.setMember("LoginHelper", LoginWebBridge.getHelper(webEngine)); + obj.setMember("LoginHelper", LoginWebBridge.getHelper()); webView.setContextMenuEnabled(false);//屏蔽右键 root.setCenter(webView); } }); } - public void setEngine(WebEngine webEngine) { - this.webEngine = webEngine; - } - private void showAlert(final String message) { SwingUtilities.invokeLater(new Runnable() { @Override diff --git a/designer_base/src/com/fr/design/extra/QQLoginDialog.java b/designer_base/src/com/fr/design/extra/QQLoginDialog.java index 1a6416174..71224c3a8 100644 --- a/designer_base/src/com/fr/design/extra/QQLoginDialog.java +++ b/designer_base/src/com/fr/design/extra/QQLoginDialog.java @@ -1,6 +1,5 @@ package com.fr.design.extra; -import com.fr.design.dialog.BasicPane; import com.fr.design.dialog.UIDialog; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.Inter; @@ -14,7 +13,7 @@ import java.awt.*; public class QQLoginDialog extends UIDialog { private static final Dimension DEFAULT_SHOP = new Dimension(700, 500); - public QQLoginDialog(Frame frame, BasicPane pane) { + public QQLoginDialog(Frame frame, Component pane) { super(frame); setUndecorated(true); JPanel panel = (JPanel) getContentPane(); @@ -24,7 +23,6 @@ public class QQLoginDialog extends UIDialog { GUICoreUtils.centerWindow(this); setResizable(false); setTitle(Inter.getLocText("FR-Designer-Plugin_Manager")); - } @Override diff --git a/designer_base/src/com/fr/design/extra/QQLoginPane.java b/designer_base/src/com/fr/design/extra/QQLoginPane.java deleted file mode 100644 index 2bbdd7e53..000000000 --- a/designer_base/src/com/fr/design/extra/QQLoginPane.java +++ /dev/null @@ -1,145 +0,0 @@ -package com.fr.design.extra; - -import com.fr.base.FRContext; -import com.fr.design.DesignerEnvManager; -import com.fr.design.RestartHelper; -import com.fr.design.dialog.BasicPane; -import com.fr.general.ComparatorUtils; -import com.fr.general.IOUtils; -import com.fr.general.Inter; -import com.fr.general.SiteCenter; -import com.fr.general.http.HttpClient; -import com.fr.plugin.PluginVerifyException; -import com.fr.stable.StableUtils; - -import javax.swing.*; -import java.awt.*; -import java.io.File; -import java.net.HttpURLConnection; -import java.net.URL; -import java.util.concurrent.ExecutionException; - -/** - * Created by zhaohehe on 16/7/28. - */ -public class QQLoginPane extends BasicPane { - private static final String LATEST = "latest"; - - public QQLoginPane() { - setLayout(new BorderLayout()); - if (StableUtils.getMajorJavaVersion() == 8) { - String installHome; - if (StableUtils.isDebug()) { - URL url = ClassLoader.getSystemResource(""); - installHome = url.getPath(); - addPane(installHome); - } else { - installHome = StableUtils.getInstallHome(); - File file = new File(StableUtils.pathJoin(installHome, "scripts")); - if (!file.exists()) { - int rv = JOptionPane.showConfirmDialog( - this, - Inter.getLocText("FR-Designer-Plugin_Shop_Need_Install"), - Inter.getLocText("FR-Designer-Plugin_Warning"), - JOptionPane.OK_CANCEL_OPTION, - JOptionPane.INFORMATION_MESSAGE - ); - if (rv == JOptionPane.OK_OPTION) { - downloadShopScripts(); - } - } else { - addPane(installHome); - updateShopScripts(); - } - } - } else { - } - } - - private void addPane(String installHome) { - QQLoginWebPane webPane = new QQLoginWebPane(new File(installHome).getAbsolutePath()); - add(webPane, BorderLayout.CENTER); - } - - - @Override - protected String title4PopupWindow() { - return Inter.getLocText("FR-Designer-Plugin_Manager"); - } - - - private void downloadShopScripts() { - new SwingWorker() { - @Override - protected Boolean doInBackground() throws Exception { - String id = "shop_scripts"; - String username = DesignerEnvManager.getEnvManager().getBBSName(); - String password = DesignerEnvManager.getEnvManager().getBBSPassword(); - try { - PluginHelper.downloadPluginFile(id, username, password, new Process() { - @Override - public void process(Double integer) { - } - }); - } catch (PluginVerifyException e) { - JOptionPane.showMessageDialog(QQLoginPane.this, e.getMessage(), Inter.getLocText("FR-Designer-Plugin_Warning"), JOptionPane.ERROR_MESSAGE); - return false; - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage(), e); - return false; - } - return true; - } - - @Override - protected void done() { - - try { - if (get()) { - IOUtils.unzip(new File(StableUtils.pathJoin(PluginHelper.DOWNLOAD_PATH, PluginHelper.TEMP_FILE)), StableUtils.getInstallHome()); - int rv = JOptionPane.showOptionDialog( - QQLoginPane.this, - Inter.getLocText("FR-Designer-Plugin_Shop_Installed"), - Inter.getLocText("FR-Designer-Plugin_Warning"), - JOptionPane.YES_NO_OPTION, - JOptionPane.INFORMATION_MESSAGE, - null, - new String[]{Inter.getLocText("FR-Designer-Basic_Restart_Designer"), Inter.getLocText("FR-Designer-Basic_Restart_Designer_Later")}, - null - ); - if (rv == JOptionPane.OK_OPTION) { - RestartHelper.restart(); - } - } - } catch (InterruptedException | ExecutionException e) { - FRContext.getLogger().error(e.getMessage(), e); - } - - } - }.execute(); - } - - private void updateShopScripts() { - new SwingWorker() { - @Override - protected Void doInBackground() throws Exception { - HttpClient httpClient = new HttpClient(SiteCenter.getInstance().acquireUrlByKind("store.version") + "&version=" + PluginStoreConstants.VERSION); - if (httpClient.getResponseCode() == HttpURLConnection.HTTP_OK) { - if (!ComparatorUtils.equals(httpClient.getResponseText(), LATEST)) { - int rv = JOptionPane.showConfirmDialog( - QQLoginPane.this, - Inter.getLocText("FR-Designer-Plugin_Shop_Need_Update"), - Inter.getLocText("FR-Designer-Plugin_Warning"), - JOptionPane.OK_CANCEL_OPTION, - JOptionPane.INFORMATION_MESSAGE - ); - if (rv == JOptionPane.OK_OPTION) { - downloadShopScripts(); - } - } - } - return null; - } - }.execute(); - } -} \ No newline at end of file diff --git a/designer_base/src/com/fr/design/extra/QQLoginWebBridge.java b/designer_base/src/com/fr/design/extra/QQLoginWebBridge.java deleted file mode 100644 index 7c2dd3e50..000000000 --- a/designer_base/src/com/fr/design/extra/QQLoginWebBridge.java +++ /dev/null @@ -1,132 +0,0 @@ -package com.fr.design.extra; - -import com.fr.design.DesignerEnvManager; -import com.fr.design.dialog.UIDialog; -import com.fr.design.gui.ilable.UILabel; -import com.fr.general.SiteCenter; -import javafx.scene.web.WebEngine; -import netscape.javascript.JSObject; -import org.json.JSONObject; - -import javax.swing.*; -import java.awt.*; -import java.net.URI; - -/** - * Created by lp on 2016/8/10. - */ -public class QQLoginWebBridge { - - private static com.fr.design.extra.QQLoginWebBridge helper; - private WebEngine webEngine; - private static String LOGINSUCCESS = "ok"; - private static String LOGINFAILED = "failed"; - private UIDialog uiDialog; - private UILabel uiLabel; - private UILabel pluginuiLabel; - private UIDialog qqDialog; - private String username; - - - private QQLoginWebBridge() { - } - - public static com.fr.design.extra.QQLoginWebBridge getHelper() { - if (helper != null) { - return helper; - } - synchronized (com.fr.design.extra.QQLoginWebBridge.class) { - if (helper == null) { - helper = new com.fr.design.extra.QQLoginWebBridge(); - } - return helper; - } - } - - public void setEngine(WebEngine webEngine) { - this.webEngine = webEngine; - } - - public void setDialogHandle(UIDialog uiDialog) { - closeParentWindow(); - this.uiDialog = uiDialog; - } - - public void setQQDialogHandle(UIDialog uiDialog) { - closeQQWindow(); - this.qqDialog = uiDialog; - } - - public void setUILabel(UILabel uiLabel) { - this.uiLabel = uiLabel; - } - - public void setUILabelInPlugin(UILabel uiLabel) { - this.pluginuiLabel = uiLabel; - } - - public void setLoginlabel() { - username = DesignerEnvManager.getEnvManager().getBBSName(); - } - - private static JSObject window; - - public static com.fr.design.extra.QQLoginWebBridge getHelper(WebEngine webEngine) { - getHelper(); - helper.setEngine(webEngine); - return helper; - } - - /** - * 关闭QQ授权窗口 - */ - public void closeQQWindow() { - if (qqDialog != null) { - qqDialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); - qqDialog.setVisible(false); - } - } - - /** - * 关闭父窗口 - */ - public void closeParentWindow() { - if (uiDialog != null) { - uiDialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); - uiDialog.setVisible(false); - } - } - - /** - * 获取用户信息 - * - * @param userInfo - */ - public void getLoginInfo(String userInfo) { - JSONObject jo = new JSONObject(userInfo); - String status = jo.get("status").toString(); - if (status.equals(LOGINSUCCESS)) { - String username = jo.get("username").toString(); - int uid = Integer.parseInt(jo.get("uid") == null ? "" : jo.get("uid").toString()); - closeQQWindow(); - closeParentWindow(); - pluginuiLabel.setText(username); - DesignerEnvManager.getEnvManager().setBBSName(username); - DesignerEnvManager.getEnvManager().setBbsUid(uid); - DesignerEnvManager.getEnvManager().setInShowBBsName(username); - } else if (status.equals(LOGINFAILED)) { - //账号没有QQ授权 - closeQQWindow(); - try { - Desktop.getDesktop().browse(new URI(SiteCenter.getInstance().acquireUrlByKind("QQ_binding"))); - } catch (Exception exp) { - } - } - } - - public void openUrlAtLocalWebBrowser(WebEngine eng, String url) { - if (url.indexOf("qqLogin.html") > 0) { - return; - } - } -} diff --git a/designer_base/src/com/fr/design/extra/QQLoginWebPane.java b/designer_base/src/com/fr/design/extra/QQLoginWebPane.java index 5861bb9ed..7dfa277eb 100644 --- a/designer_base/src/com/fr/design/extra/QQLoginWebPane.java +++ b/designer_base/src/com/fr/design/extra/QQLoginWebPane.java @@ -95,7 +95,7 @@ public class QQLoginWebPane extends JFXPanel { if (ComparatorUtils.equals(newValue, "file:///" + installHome + "/scripts/qqLogin/web/qqLogin.html") || ComparatorUtils.equals(newValue, SiteCenter.getInstance().acquireUrlByKind("bbs.mobile"))) { return; } - QQLoginWebBridge.getHelper().openUrlAtLocalWebBrowser(webEngine, newValue); + LoginWebBridge.getHelper().openUrlAtLocalWebBrowser(webEngine, newValue); } }); webEngine.setOnAlert(new EventHandler>() { @@ -109,7 +109,7 @@ public class QQLoginWebPane extends JFXPanel { public void changed(ObservableValue ov, Worker.State oldState, Worker.State newState) { if (newState == Worker.State.SUCCEEDED) { window = (JSObject) webEngine.executeScript("window"); - window.setMember("QQLoginHelper", QQLoginWebBridge.getHelper(webEngine)); + window.setMember("QQLoginHelper", LoginWebBridge.getHelper()); } } } @@ -138,7 +138,7 @@ public class QQLoginWebPane extends JFXPanel { @Override public void run() { eng.executeScript("location.reload()"); - QQLoginWebBridge.getHelper().closeQQWindow(); + LoginWebBridge.getHelper().closeQQWindow(); } }); } catch (Exception e) { diff --git a/designer_base/src/com/fr/design/extra/WebViewDlgHelper.java b/designer_base/src/com/fr/design/extra/WebViewDlgHelper.java new file mode 100644 index 000000000..f07a4edd5 --- /dev/null +++ b/designer_base/src/com/fr/design/extra/WebViewDlgHelper.java @@ -0,0 +1,203 @@ +package com.fr.design.extra; + +import com.fr.base.FRContext; +import com.fr.design.DesignerEnvManager; +import com.fr.design.RestartHelper; +import com.fr.design.dialog.BasicPane; +import com.fr.design.dialog.UIDialog; +import com.fr.design.gui.frpane.UITabbedPane; +import com.fr.design.mainframe.DesignerContext; +import com.fr.general.ComparatorUtils; +import com.fr.general.IOUtils; +import com.fr.general.Inter; +import com.fr.general.SiteCenter; +import com.fr.general.http.HttpClient; +import com.fr.plugin.PluginVerifyException; +import com.fr.stable.StableUtils; + +import javax.swing.*; +import java.awt.*; +import java.io.File; +import java.net.HttpURLConnection; +import java.util.concurrent.ExecutionException; + +/** + * Created by vito on 2016/9/28. + */ +public class WebViewDlgHelper { + private static final String LATEST = "latest"; + private static final String SHOP_SCRIPTS = "shop_scripts"; + private static final int VERSION_8 = 8; + // 调试时,使用installHome = ClassLoader.getSystemResource("").getPath()代替下面 + private static String installHome = StableUtils.getInstallHome(); + + public static void createPluginDialog() { + if (StableUtils.getMajorJavaVersion() >= VERSION_8) { + String relativePath = "/scripts/store/web/index.html"; + String mainJsPath = StableUtils.pathJoin(new File(installHome).getAbsolutePath(), relativePath); + File file = new File(mainJsPath); + if (!file.exists()) { + int rv = JOptionPane.showConfirmDialog( + null, + Inter.getLocText("FR-Designer-Plugin_Shop_Need_Install"), + Inter.getLocText("FR-Designer-Plugin_Warning"), + JOptionPane.OK_CANCEL_OPTION, + JOptionPane.INFORMATION_MESSAGE + ); + if (rv == JOptionPane.OK_OPTION) { + downloadShopScripts(SHOP_SCRIPTS); + } + } else { + updateShopScripts(SHOP_SCRIPTS); + showPluginDlg(mainJsPath); + } + } else { + BasicPane traditionalStorePane = new BasicPane() { + @Override + protected String title4PopupWindow() { + return Inter.getLocText("FR-Designer-Plugin_Manager"); + } + }; + traditionalStorePane.setLayout(new BorderLayout()); + traditionalStorePane.add(initTraditionalStore(), BorderLayout.CENTER); + UIDialog dlg = new ShopDialog(DesignerContext.getDesignerFrame(), traditionalStorePane); + dlg.setVisible(true); + } + } + + /** + * 以关键词打开设计器商店 + * + * @param keyword 关键词 + */ + public static void createPluginDialog(String keyword) { + PluginWebBridge.getHelper().openWithSearch(keyword); + createPluginDialog(); + } + + public static void createLoginDialog() { + if (StableUtils.getMajorJavaVersion() == 8) { + File file = new File(StableUtils.pathJoin(installHome, "scripts")); + if (!file.exists()) { + int rv = JOptionPane.showConfirmDialog( + null, + Inter.getLocText("FR-Designer-Plugin_Shop_Need_Install"), + Inter.getLocText("FR-Designer-Plugin_Warning"), + JOptionPane.OK_CANCEL_OPTION, + JOptionPane.INFORMATION_MESSAGE + ); + if (rv == JOptionPane.OK_OPTION) { + downloadShopScripts(SHOP_SCRIPTS); + } + } else { + showLoginDlg(); + updateShopScripts(SHOP_SCRIPTS); + } + } + } + + public static void createQQLoginDialog() { + QQLoginWebPane webPane = new QQLoginWebPane(new File(installHome).getAbsolutePath()); + UIDialog qqlog = new QQLoginDialog(DesignerContext.getDesignerFrame(), webPane); + LoginWebBridge.getHelper().setQqDialog(qqlog); + qqlog.setVisible(true); + } + + private static void showPluginDlg(String mainJsPath) { + BasicPane managerPane = new ShopManagerPane(new PluginWebPane(mainJsPath)); + UIDialog dlg = new ShopDialog(DesignerContext.getDesignerFrame(), managerPane); + PluginWebBridge.getHelper().setDialogHandle(dlg); + dlg.setVisible(true); + } + + private static void showLoginDlg() { + LoginWebPane webPane = new LoginWebPane(new File(installHome).getAbsolutePath()); + UIDialog qqdlg = new LoginDialog(DesignerContext.getDesignerFrame(), webPane); + LoginWebBridge.getHelper().setDialogHandle(qqdlg); + qqdlg.setVisible(true); + } + + private static Component initTraditionalStore() { + UITabbedPane tabbedPane = new UITabbedPane(); + PluginInstalledPane installedPane = new PluginInstalledPane(); + tabbedPane.addTab(installedPane.tabTitle(), installedPane); + tabbedPane.addTab(Inter.getLocText("FR-Designer-Plugin_Update"), new PluginUpdatePane(tabbedPane)); + tabbedPane.addTab(Inter.getLocText("FR-Designer-Plugin_All_Plugins"), new PluginFromStorePane(tabbedPane)); + return tabbedPane; + } + + private static void downloadShopScripts(final String scriptsId) { + new SwingWorker() { + @Override + protected Boolean doInBackground() throws Exception { + String username = DesignerEnvManager.getEnvManager().getBBSName(); + String password = DesignerEnvManager.getEnvManager().getBBSPassword(); + try { + PluginHelper.downloadPluginFile(scriptsId, username, password, new Process() { + @Override + public void process(Double integer) { + } + }); + } catch (PluginVerifyException e) { + JOptionPane.showMessageDialog(null, e.getMessage(), Inter.getLocText("FR-Designer-Plugin_Warning"), JOptionPane.ERROR_MESSAGE); + return false; + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage(), e); + return false; + } + return true; + } + + @Override + protected void done() { + + try { + if (get()) { + IOUtils.unzip(new File(StableUtils.pathJoin(PluginHelper.DOWNLOAD_PATH, PluginHelper.TEMP_FILE)), StableUtils.getInstallHome()); + int rv = JOptionPane.showOptionDialog( + null, + Inter.getLocText("FR-Designer-Plugin_Shop_Installed"), + Inter.getLocText("FR-Designer-Plugin_Warning"), + JOptionPane.YES_NO_OPTION, + JOptionPane.INFORMATION_MESSAGE, + null, + new String[]{Inter.getLocText("FR-Designer-Basic_Restart_Designer"), Inter.getLocText("FR-Designer-Basic_Restart_Designer_Later")}, + null + ); + if (rv == JOptionPane.OK_OPTION) { + RestartHelper.restart(); + } + } + } catch (InterruptedException | ExecutionException e) { + FRContext.getLogger().error(e.getMessage(), e); + } + + } + }.execute(); + } + + private static void updateShopScripts(final String scriptsId) { + new SwingWorker() { + @Override + protected Void doInBackground() throws Exception { + HttpClient httpClient = new HttpClient(SiteCenter.getInstance().acquireUrlByKind("store.version") + "&version=" + PluginStoreConstants.VERSION); + if (httpClient.getResponseCode() == HttpURLConnection.HTTP_OK) { + String text = httpClient.getResponseText(); + if (!ComparatorUtils.equals(text, LATEST)) { + int rv = JOptionPane.showConfirmDialog( + null, + Inter.getLocText("FR-Designer-Plugin_Shop_Need_Update"), + Inter.getLocText("FR-Designer-Plugin_Warning"), + JOptionPane.OK_CANCEL_OPTION, + JOptionPane.INFORMATION_MESSAGE + ); + if (rv == JOptionPane.OK_OPTION) { + downloadShopScripts(scriptsId); + } + } + } + return null; + } + }.execute(); + } +} diff --git a/designer_base/src/com/fr/start/BaseDesigner.java b/designer_base/src/com/fr/start/BaseDesigner.java index 0e036c534..301a9191f 100644 --- a/designer_base/src/com/fr/start/BaseDesigner.java +++ b/designer_base/src/com/fr/start/BaseDesigner.java @@ -7,7 +7,7 @@ import com.fr.base.FRContext; import com.fr.design.DesignerEnvManager; import com.fr.design.ExtraDesignClassManager; import com.fr.design.RestartHelper; -import com.fr.design.extra.WebDialog; +import com.fr.design.extra.WebViewDlgHelper; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.file.MutilTempalteTabPane; import com.fr.design.file.TemplateTreePane; @@ -127,7 +127,7 @@ public abstract class BaseDesigner extends ToolBarMenuDock { String text = StableUtils.join(plugins, ",") + ": " + Inter.getLocText("FR-Designer_Plugin_Should_Update_Please_Contact_Developer"); int r = JOptionPane.showConfirmDialog(null, text, Inter.getLocText("FR-Designer_Plugin_Should_Update_Title"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE); if (r == JOptionPane.OK_OPTION) { - WebDialog.createPluginDialog(); + WebViewDlgHelper.createPluginDialog(); } } timer.stop(); From 25521cf932cea359490bdfb25da2ad9219837d12 Mon Sep 17 00:00:00 2001 From: vito Date: Fri, 5 May 2017 16:58:53 +0800 Subject: [PATCH 329/343] pmd --- .../com/fr/design/extra/LoginWebBridge.java | 2 +- .../com/fr/design/extra/QQLoginWebPane.java | 127 ++++++++++-------- .../com/fr/design/extra/WebViewDlgHelper.java | 2 +- 3 files changed, 73 insertions(+), 58 deletions(-) diff --git a/designer_base/src/com/fr/design/extra/LoginWebBridge.java b/designer_base/src/com/fr/design/extra/LoginWebBridge.java index 611166bc0..6592e1601 100644 --- a/designer_base/src/com/fr/design/extra/LoginWebBridge.java +++ b/designer_base/src/com/fr/design/extra/LoginWebBridge.java @@ -108,7 +108,7 @@ public class LoginWebBridge { if (StringUtils.isEmpty(userName)) { return; } - if (!StringUtils.isEmpty(this.userName)) { + if (StringUtils.isNotEmpty(this.userName)) { updateMessageCount(); } this.userName = userName; diff --git a/designer_base/src/com/fr/design/extra/QQLoginWebPane.java b/designer_base/src/com/fr/design/extra/QQLoginWebPane.java index 7dfa277eb..f3c96d219 100644 --- a/designer_base/src/com/fr/design/extra/QQLoginWebPane.java +++ b/designer_base/src/com/fr/design/extra/QQLoginWebPane.java @@ -40,6 +40,7 @@ import java.awt.*; public class QQLoginWebPane extends JFXPanel { private WebEngine webEngine; + private String url; private static JSObject window; @@ -50,7 +51,9 @@ public class QQLoginWebPane extends JFXPanel { private static int DEFAULT_CONFIRM_HEIGHT = 160; private static int DEFAULT_OFFEST = 20; - class Delta { double x, y; } + class Delta { + double x, y; + } public QQLoginWebPane(final String installHome) { Platform.setImplicitExit(false); @@ -62,7 +65,8 @@ public class QQLoginWebPane extends JFXPanel { QQLoginWebPane.this.setScene(scene); final WebView webView = new WebView(); webEngine = webView.getEngine(); - webEngine.load("file:///" + installHome + "/scripts/qqLogin/web/qqLogin.html"); + url = "file:///" + installHome + "/scripts/qqLogin/web/qqLogin.html"; + webEngine.load(url); final Stage primaryStage = new Stage(); @@ -76,51 +80,56 @@ public class QQLoginWebPane extends JFXPanel { primaryStage.setX(0); primaryStage.setY(Screen.getPrimary().getBounds().getHeight() + DEFAULT_PRIMARYSTAGE_HEIGHT); primaryStage.show(); - }catch (Exception e) { + } catch (Exception e) { FRContext.getLogger().info(e.getMessage()); } - - webView.getEngine().setConfirmHandler(new Callback() { - @Override public Boolean call(String msg) { - Boolean confirmed = confirm(primaryStage, msg, installHome, webView); - return confirmed; - } - }); - - webEngine.locationProperty().addListener(new ChangeListener() { - @Override - public void changed(ObservableValue observable, final String oldValue, String newValue) { - disableLink(webEngine); - // webView好像默认以手机版显示网页,浏览器里过滤掉这个跳转 - if (ComparatorUtils.equals(newValue, "file:///" + installHome + "/scripts/qqLogin/web/qqLogin.html") || ComparatorUtils.equals(newValue, SiteCenter.getInstance().acquireUrlByKind("bbs.mobile"))) { - return; - } - LoginWebBridge.getHelper().openUrlAtLocalWebBrowser(webEngine, newValue); - } - }); - webEngine.setOnAlert(new EventHandler>() { + webEngine.setConfirmHandler(new Callback() { @Override - public void handle(WebEvent event) { - showAlert(event.getData()); + public Boolean call(String msg) { + Boolean confirmed = confirm(primaryStage, msg, webView); + return confirmed; } }); - webEngine.getLoadWorker().stateProperty().addListener( - new ChangeListener() { - public void changed(ObservableValue ov, Worker.State oldState, Worker.State newState) { - if (newState == Worker.State.SUCCEEDED) { - window = (JSObject) webEngine.executeScript("window"); - window.setMember("QQLoginHelper", LoginWebBridge.getHelper()); - } - } - } - ); - + configWebEngine(); webView.setContextMenuEnabled(false);//屏蔽右键 root.setCenter(webView); } }); } + private void configWebEngine() { + + webEngine.locationProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue observable, final String oldValue, String newValue) { + disableLink(webEngine); + // webView好像默认以手机版显示网页,浏览器里过滤掉这个跳转 + if (ComparatorUtils.equals(newValue, url) || ComparatorUtils.equals(newValue, SiteCenter.getInstance().acquireUrlByKind("bbs.mobile"))) { + return; + } + LoginWebBridge.getHelper().openUrlAtLocalWebBrowser(webEngine, newValue); + } + }); + + webEngine.setOnAlert(new EventHandler>() { + @Override + public void handle(WebEvent event) { + showAlert(event.getData()); + } + }); + + webEngine.getLoadWorker().stateProperty().addListener( + new ChangeListener() { + public void changed(ObservableValue ov, Worker.State oldState, Worker.State newState) { + if (newState == Worker.State.SUCCEEDED) { + window = (JSObject) webEngine.executeScript("window"); + window.setMember("QQLoginHelper", LoginWebBridge.getHelper()); + } + } + } + ); + } + private void showAlert(final String message) { SwingUtilities.invokeLater(new Runnable() { @Override @@ -146,12 +155,12 @@ public class QQLoginWebPane extends JFXPanel { } } - private Boolean confirm(final Stage parent, String msg, final String installHome,final WebView webView) { + private Boolean confirm(final Stage parent, String msg, final WebView webView) { final BooleanProperty confirmationResult = new SimpleBooleanProperty(); // initialize the confirmation dialog final Stage dialog = new Stage(StageStyle.UTILITY); - dialog.setX(Toolkit.getDefaultToolkit().getScreenSize().getWidth()/2 - DEFAULT_CONFIRM_WIDTH / 2 + DEFAULT_OFFEST); - dialog.setY(Toolkit.getDefaultToolkit().getScreenSize().getHeight()/2 + DEFAULT_OFFEST); + dialog.setX(Toolkit.getDefaultToolkit().getScreenSize().getWidth() / 2 - DEFAULT_CONFIRM_WIDTH / 2 + DEFAULT_OFFEST); + dialog.setY(Toolkit.getDefaultToolkit().getScreenSize().getHeight() / 2 + DEFAULT_OFFEST); dialog.setHeight(DEFAULT_CONFIRM_HEIGHT); dialog.setWidth(DEFAULT_CONFIRM_WIDTH); dialog.setIconified(false); @@ -162,7 +171,8 @@ public class QQLoginWebPane extends JFXPanel { HBoxBuilder.create().styleClass("modal-dialog").children( LabelBuilder.create().text(msg).build(), ButtonBuilder.create().text(Inter.getLocText("FR-Designer-BBSLogin_Switch-Account")).defaultButton(true).onAction(new EventHandler() { - @Override public void handle(ActionEvent actionEvent) { + @Override + public void handle(ActionEvent actionEvent) { // take action and close the dialog. confirmationResult.set(true); webView.getEngine().reload(); @@ -170,7 +180,8 @@ public class QQLoginWebPane extends JFXPanel { } }).build(), ButtonBuilder.create().text(Inter.getLocText("FR-Engine_Cancel")).cancelButton(true).onAction(new EventHandler() { - @Override public void handle(ActionEvent actionEvent) { + @Override + public void handle(ActionEvent actionEvent) { // abort action and close the dialog. confirmationResult.set(false); dialog.close(); @@ -180,35 +191,39 @@ public class QQLoginWebPane extends JFXPanel { , Color.TRANSPARENT ) ); + configDrag(dialog); + // style and show the dialog. + dialog.getScene().getStylesheets().add(getClass().getResource("modal-dialog.css").toExternalForm()); + dialog.setOnCloseRequest(new EventHandler() { + @Override + public void handle(WindowEvent event) { + event.consume(); + dialog.close(); + } + }); + dialog.showAndWait(); + return confirmationResult.get(); + } + + private void configDrag(final Stage dialog) { // allow the dialog to be dragged around. final Node root = dialog.getScene().getRoot(); final Delta dragDelta = new Delta(); root.setOnMousePressed(new EventHandler() { - @Override public void handle(MouseEvent mouseEvent) { + @Override + public void handle(MouseEvent mouseEvent) { // record a delta distance for the drag and drop operation. dragDelta.x = dialog.getX() - mouseEvent.getScreenX(); dragDelta.y = dialog.getY() - mouseEvent.getScreenY(); } }); root.setOnMouseDragged(new EventHandler() { - @Override public void handle(MouseEvent mouseEvent) { + @Override + public void handle(MouseEvent mouseEvent) { dialog.setX(mouseEvent.getScreenX() + dragDelta.x); dialog.setY(mouseEvent.getScreenY() + dragDelta.y); } }); - // style and show the dialog. - dialog.getScene().getStylesheets().add(getClass().getResource("modal-dialog.css").toExternalForm()); - - dialog.setOnCloseRequest(new EventHandler(){ - @Override - public void handle(WindowEvent event){ - event.consume(); - dialog.close(); - } - }); - - dialog.showAndWait(); - return confirmationResult.get(); } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/extra/WebViewDlgHelper.java b/designer_base/src/com/fr/design/extra/WebViewDlgHelper.java index f07a4edd5..481498fc8 100644 --- a/designer_base/src/com/fr/design/extra/WebViewDlgHelper.java +++ b/designer_base/src/com/fr/design/extra/WebViewDlgHelper.java @@ -76,7 +76,7 @@ public class WebViewDlgHelper { } public static void createLoginDialog() { - if (StableUtils.getMajorJavaVersion() == 8) { + if (StableUtils.getMajorJavaVersion() == VERSION_8) { File file = new File(StableUtils.pathJoin(installHome, "scripts")); if (!file.exists()) { int rv = JOptionPane.showConfirmDialog( From f51dbd6c26425c4a9f7f05fefc9b8e373d0e16b3 Mon Sep 17 00:00:00 2001 From: vito Date: Fri, 5 May 2017 17:01:38 +0800 Subject: [PATCH 330/343] =?UTF-8?q?=E7=A7=BB=E5=88=B0designer=5Fbase?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/bbs/LoginDialog.java | 33 ------------------- 1 file changed, 33 deletions(-) delete mode 100644 designer/src/com/fr/design/mainframe/bbs/LoginDialog.java diff --git a/designer/src/com/fr/design/mainframe/bbs/LoginDialog.java b/designer/src/com/fr/design/mainframe/bbs/LoginDialog.java deleted file mode 100644 index 2155b2437..000000000 --- a/designer/src/com/fr/design/mainframe/bbs/LoginDialog.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.fr.design.mainframe.bbs; - -import com.fr.design.dialog.BasicPane; -import com.fr.design.dialog.UIDialog; -import com.fr.design.utils.gui.GUICoreUtils; -import com.fr.stable.StableUtils; - -import javax.swing.*; -import java.awt.*; - -/** - * Created by zhaohehe on 16/7/26. - */ -public class LoginDialog extends UIDialog { - private static final Dimension DEFAULT_SHOP = new Dimension(401, 201); - - public LoginDialog(Frame frame, BasicPane pane) { - super(frame); - if (StableUtils.getMajorJavaVersion() == 8) { - setUndecorated(true); - } - JPanel panel = (JPanel) getContentPane(); - panel.setLayout(new BorderLayout()); - add(pane, BorderLayout.CENTER); - setSize(DEFAULT_SHOP); - GUICoreUtils.centerWindow(this); - setResizable(false); - } - - @Override - public void checkValid() throws Exception { - } -} From 52ab6e88ebd1e1915987151ad1a5301af424fa49 Mon Sep 17 00:00:00 2001 From: vito Date: Fri, 5 May 2017 17:26:19 +0800 Subject: [PATCH 331/343] =?UTF-8?q?=E6=97=A0jira=E4=BB=BB=E5=8A=A1=20?= =?UTF-8?q?=E5=BA=94=E7=94=A8=E8=A1=A5=E4=B8=81=E7=9A=84=E6=97=B6=E5=80=99?= =?UTF-8?q?=E6=9C=89=E4=B8=80=E4=B8=AA=E6=B2=A1=E6=9C=89=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/extra/WebDialog.java | 165 ------------------ 1 file changed, 165 deletions(-) delete mode 100644 designer_base/src/com/fr/design/extra/WebDialog.java diff --git a/designer_base/src/com/fr/design/extra/WebDialog.java b/designer_base/src/com/fr/design/extra/WebDialog.java deleted file mode 100644 index 22a4e5ac8..000000000 --- a/designer_base/src/com/fr/design/extra/WebDialog.java +++ /dev/null @@ -1,165 +0,0 @@ -package com.fr.design.extra; - -import com.fr.base.FRContext; -import com.fr.design.DesignerEnvManager; -import com.fr.design.RestartHelper; -import com.fr.design.dialog.BasicPane; -import com.fr.design.dialog.UIDialog; -import com.fr.design.gui.frpane.UITabbedPane; -import com.fr.design.mainframe.DesignerContext; -import com.fr.general.ComparatorUtils; -import com.fr.general.IOUtils; -import com.fr.general.Inter; -import com.fr.general.SiteCenter; -import com.fr.general.http.HttpClient; -import com.fr.plugin.PluginVerifyException; -import com.fr.stable.StableUtils; - -import javax.swing.*; -import java.awt.*; -import java.io.File; -import java.net.HttpURLConnection; -import java.util.concurrent.ExecutionException; - -/** - * Created by vito on 2016/9/28. - */ -public class WebDialog { - private static final String LATEST = "latest"; - private static final String SHOP_SCRIPTS = "shop_scripts"; - private static final int VERSION_8 = 8; - private static String installHome = StableUtils.getInstallHome(); - - public static void createPluginDialog() { - UIDialog dlg; - if (StableUtils.getMajorJavaVersion() >= VERSION_8) { - String relativePath = "/scripts/store/web/index.html"; - String mainJsPath = StableUtils.pathJoin(new File(installHome).getAbsolutePath(), relativePath); - File file = new File(mainJsPath); - if (!file.exists()) { - int rv = JOptionPane.showConfirmDialog( - null, - Inter.getLocText("FR-Designer-Plugin_Shop_Need_Install"), - Inter.getLocText("FR-Designer-Plugin_Warning"), - JOptionPane.OK_CANCEL_OPTION, - JOptionPane.INFORMATION_MESSAGE - ); - if (rv == JOptionPane.OK_OPTION) { - downloadShopScripts(SHOP_SCRIPTS); - } - } else { - updateShopScripts(SHOP_SCRIPTS); - BasicPane managerPane = new ShopManagerPane(new PluginWebPane(mainJsPath)); - dlg = new ShopDialog(DesignerContext.getDesignerFrame(), managerPane); - PluginWebBridge.getHelper().setDialogHandle(dlg); - dlg.setVisible(true); - } - } else { - BasicPane traditionalStorePane = new BasicPane() { - @Override - protected String title4PopupWindow() { - return Inter.getLocText("FR-Designer-Plugin_Manager"); - } - }; - traditionalStorePane.setLayout(new BorderLayout()); - traditionalStorePane.add(initTraditionalStore(), BorderLayout.CENTER); - dlg = new ShopDialog(DesignerContext.getDesignerFrame(), traditionalStorePane); - dlg.setVisible(true); - } - } - - /** - * 以关键词打开设计器商店 - * - * @param keyword 关键词 - */ - public static void createPluginDialog(String keyword) { - PluginWebBridge.getHelper().openWithSearch(keyword); - createPluginDialog(); - } - - - private static Component initTraditionalStore() { - UITabbedPane tabbedPane = new UITabbedPane(); - PluginInstalledPane installedPane = new PluginInstalledPane(); - tabbedPane.addTab(installedPane.tabTitle(), installedPane); - tabbedPane.addTab(Inter.getLocText("FR-Designer-Plugin_Update"), new PluginUpdatePane(tabbedPane)); - tabbedPane.addTab(Inter.getLocText("FR-Designer-Plugin_All_Plugins"), new PluginFromStorePane(tabbedPane)); - return tabbedPane; - } - - private static void downloadShopScripts(final String scriptsId) { - new SwingWorker() { - @Override - protected Boolean doInBackground() throws Exception { - String username = DesignerEnvManager.getEnvManager().getBBSName(); - String password = DesignerEnvManager.getEnvManager().getBBSPassword(); - try { - PluginHelper.downloadPluginFile(scriptsId, username, password, new Process() { - @Override - public void process(Double integer) { - } - }); - } catch (PluginVerifyException e) { - JOptionPane.showMessageDialog(null, e.getMessage(), Inter.getLocText("FR-Designer-Plugin_Warning"), JOptionPane.ERROR_MESSAGE); - return false; - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage(), e); - return false; - } - return true; - } - - @Override - protected void done() { - - try { - if (get()) { - IOUtils.unzip(new File(StableUtils.pathJoin(PluginHelper.DOWNLOAD_PATH, PluginHelper.TEMP_FILE)), StableUtils.getInstallHome()); - int rv = JOptionPane.showOptionDialog( - null, - Inter.getLocText("FR-Designer-Plugin_Shop_Installed"), - Inter.getLocText("FR-Designer-Plugin_Warning"), - JOptionPane.YES_NO_OPTION, - JOptionPane.INFORMATION_MESSAGE, - null, - new String[]{Inter.getLocText("FR-Designer-Basic_Restart_Designer"), Inter.getLocText("FR-Designer-Basic_Restart_Designer_Later")}, - null - ); - if (rv == JOptionPane.OK_OPTION) { - RestartHelper.restart(); - } - } - } catch (InterruptedException | ExecutionException e) { - FRContext.getLogger().error(e.getMessage(), e); - } - - } - }.execute(); - } - - private static void updateShopScripts(final String scriptsId) { - new SwingWorker() { - @Override - protected Void doInBackground() throws Exception { - HttpClient httpClient = new HttpClient(SiteCenter.getInstance().acquireUrlByKind("store.version") + "&version=" + PluginStoreConstants.VERSION); - if (httpClient.getResponseCode() == HttpURLConnection.HTTP_OK) { - String text = httpClient.getResponseText(); - if (!ComparatorUtils.equals(text, LATEST)) { - int rv = JOptionPane.showConfirmDialog( - null, - Inter.getLocText("FR-Designer-Plugin_Shop_Need_Update"), - Inter.getLocText("FR-Designer-Plugin_Warning"), - JOptionPane.OK_CANCEL_OPTION, - JOptionPane.INFORMATION_MESSAGE - ); - if (rv == JOptionPane.OK_OPTION) { - downloadShopScripts(scriptsId); - } - } - } - return null; - } - }.execute(); - } -} From 45adf67ff30da5eea6e4c652bfc8c3fce3901769 Mon Sep 17 00:00:00 2001 From: hzzz Date: Mon, 8 May 2017 17:14:34 +0800 Subject: [PATCH 332/343] fix REPORT-2600 --- .../src/com/fr/design/data/DesignTableDataManager.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/designer_base/src/com/fr/design/data/DesignTableDataManager.java b/designer_base/src/com/fr/design/data/DesignTableDataManager.java index e0569424d..acd344dbe 100644 --- a/designer_base/src/com/fr/design/data/DesignTableDataManager.java +++ b/designer_base/src/com/fr/design/data/DesignTableDataManager.java @@ -416,6 +416,11 @@ public abstract class DesignTableDataManager { loadingBar.start(); } try { + for (ParameterProvider parameter : currentEnv.getTableDataParameters(tabledata)) { + if (parameterMap.containsKey(parameter.getName())) { + parameter.setValue(parameterMap.get(parameter.getName())); + } + } embeddedTableData = currentEnv.previewTableData(tabledata, parameterMap, rowCount); } catch (TableDataException e) { throw new TableDataException(e.getMessage(), e); From 810686c8a39314eb22d8fe92a457a6c9d2cdc8c7 Mon Sep 17 00:00:00 2001 From: hzzz Date: Mon, 8 May 2017 17:18:56 +0800 Subject: [PATCH 333/343] fix PMD --- .../src/com/fr/design/data/DesignTableDataManager.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/data/DesignTableDataManager.java b/designer_base/src/com/fr/design/data/DesignTableDataManager.java index acd344dbe..e593f5944 100644 --- a/designer_base/src/com/fr/design/data/DesignTableDataManager.java +++ b/designer_base/src/com/fr/design/data/DesignTableDataManager.java @@ -378,7 +378,8 @@ public abstract class DesignTableDataManager { * 而获取数据集的字段名字时,则没必要 * @return */ - private static EmbeddedTableData previewTableData(TableData tabledata, int rowCount, boolean isMustInputParameters, boolean needLoadingBar) throws Exception { + private static EmbeddedTableData previewTableData(TableData tabledata, int rowCount, boolean isMustInputParameters, + boolean needLoadingBar) throws Exception { final AutoProgressBar loadingBar = PreviewTablePane.getInstance().getProgressBar(); Env currentEnv = FRContext.getCurrentEnv(); EmbeddedTableData embeddedTableData = null; From ad1e62a59cf6de0f7932902f0253d2a5a8e7ef87 Mon Sep 17 00:00:00 2001 From: hzzz Date: Mon, 8 May 2017 17:19:52 +0800 Subject: [PATCH 334/343] .. --- .../src/com/fr/design/data/DesignTableDataManager.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/designer_base/src/com/fr/design/data/DesignTableDataManager.java b/designer_base/src/com/fr/design/data/DesignTableDataManager.java index e593f5944..acd344dbe 100644 --- a/designer_base/src/com/fr/design/data/DesignTableDataManager.java +++ b/designer_base/src/com/fr/design/data/DesignTableDataManager.java @@ -378,8 +378,7 @@ public abstract class DesignTableDataManager { * 而获取数据集的字段名字时,则没必要 * @return */ - private static EmbeddedTableData previewTableData(TableData tabledata, int rowCount, boolean isMustInputParameters, - boolean needLoadingBar) throws Exception { + private static EmbeddedTableData previewTableData(TableData tabledata, int rowCount, boolean isMustInputParameters, boolean needLoadingBar) throws Exception { final AutoProgressBar loadingBar = PreviewTablePane.getInstance().getProgressBar(); Env currentEnv = FRContext.getCurrentEnv(); EmbeddedTableData embeddedTableData = null; From 87c302e4a5e4ffb8e238ce6eed1d9fb343520f54 Mon Sep 17 00:00:00 2001 From: hzzz Date: Mon, 8 May 2017 17:37:08 +0800 Subject: [PATCH 335/343] fix --- .../design/data/DesignTableDataManager.java | 53 ++++++++++--------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/designer_base/src/com/fr/design/data/DesignTableDataManager.java b/designer_base/src/com/fr/design/data/DesignTableDataManager.java index acd344dbe..c15faec63 100644 --- a/designer_base/src/com/fr/design/data/DesignTableDataManager.java +++ b/designer_base/src/com/fr/design/data/DesignTableDataManager.java @@ -36,7 +36,6 @@ import java.io.ByteArrayOutputStream; import java.text.Collator; import java.util.*; import java.util.Map.Entry; -import java.util.concurrent.ConcurrentHashMap; /** * 设计器管理操作数据集的类: @@ -59,7 +58,7 @@ public abstract class DesignTableDataManager { private static java.util.Map dsNameChangedMap = new HashMap(); // private static List dsListeners = new ArrayList(); - private static Map> dsListenersMap = new HashMap>(); + private static Map> dsListenersMap = new HashMap>(); public static String NO_PARAMETER = "no_paramater_pane"; @@ -79,7 +78,7 @@ public abstract class DesignTableDataManager { * 响应数据集改变. */ private static void fireDsChanged() { - for(Entry> listenerEntry : dsListenersMap.entrySet()) { + for (Entry> listenerEntry : dsListenersMap.entrySet()) { List dsListeners = listenerEntry.getValue(); for (int i = 0; i < dsListeners.size(); i++) { //增强for循环用的iterator实现的, 如果中间哪个listener修改或删除了(如ChartEditPane.dsChangeListener), @@ -91,8 +90,8 @@ public abstract class DesignTableDataManager { } } - public static void closeTemplate(JTemplate template) { - if(template != null) { + public static void closeTemplate(JTemplate template) { + if (template != null) { dsListenersMap.remove(template.getFullPathName()); } } @@ -151,7 +150,7 @@ public abstract class DesignTableDataManager { public static void addDsChangeListener(ChangeListener l) { JTemplate template = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); String key = StringUtils.EMPTY; - if(template != null) { + if (template != null) { key = template.getFullPathName(); } List dsListeners = dsListenersMap.get(key); @@ -180,7 +179,7 @@ public abstract class DesignTableDataManager { * august:返回当前正在编辑的具有报表数据源的模板(基本报表、聚合报表) 包括 : 图表模板 * * @return TableDataSource - * attention:与这个方法有关系的静态组件(不随着切换模板tab而变化的),应该重新执行该方法,再刷新组件 + * attention:与这个方法有关系的静态组件(不随着切换模板tab而变化的),应该重新执行该方法,再刷新组件 */ public static TableDataSource getEditingTableDataSource() { return DesignModelAdapter.getCurrentModelAdapter() == null ? null : DesignModelAdapter.getCurrentModelAdapter().getBook(); @@ -319,7 +318,6 @@ public abstract class DesignTableDataManager { } - private static void addStoreProcedureData(java.util.Map resMap) { DatasourceManagerProvider mgr = DatasourceManager.getProviderInstance(); String[] namearray = new String[0]; @@ -381,12 +379,10 @@ public abstract class DesignTableDataManager { private static EmbeddedTableData previewTableData(TableData tabledata, int rowCount, boolean isMustInputParameters, boolean needLoadingBar) throws Exception { final AutoProgressBar loadingBar = PreviewTablePane.getInstance().getProgressBar(); Env currentEnv = FRContext.getCurrentEnv(); - EmbeddedTableData embeddedTableData = null; ParameterProvider[] parameters = currentEnv.getTableDataParameters(tabledata); - boolean isNullParameter = parameters == null || parameters.length == 0; - ParameterProvider[] tableDataParameter = tabledata.getParameters(Calculator.createCalculator()); - boolean isOriginalNUllParameter = tableDataParameter == null || tableDataParameter.length == 0; - if (isNullParameter && !isOriginalNUllParameter) { + if (isNullOrEmpty(parameters)) { + ParameterProvider[] tableDataParameter = tabledata.getParameters(Calculator.createCalculator()); + checkArgument(!isNullOrEmpty(tableDataParameter), "both parameters and tableDataParameter are empty"); parameters = tableDataParameter; } boolean hasValue = true; @@ -396,25 +392,24 @@ public abstract class DesignTableDataManager { break; } } - final Map parameterMap = new HashMap(); + final Map parameterMap = new HashMap<>(); if (!hasValue || isMustInputParameters) { - if (parameters != null && parameters.length > 0) { - final ParameterInputPane pPane = new ParameterInputPane(parameters); - pPane.showSmallWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { - - public void doOk() { - parameterMap.putAll(pPane.update()); - } - }).setVisible(true); - } + final ParameterInputPane pPane = new ParameterInputPane(parameters); + pPane.showSmallWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { + @Override + public void doOk() { + parameterMap.putAll(pPane.update()); + } + }).setVisible(true); } else { - for (int i = 0; i < parameters.length; i++) { - parameterMap.put(parameters[i].getName(), parameters[i].getValue()); + for (ParameterProvider parameter : parameters) { + parameterMap.put(parameter.getName(), parameter.getValue()); } } if (loadingBar != null && needLoadingBar) { loadingBar.start(); } + EmbeddedTableData embeddedTableData = null; try { for (ParameterProvider parameter : currentEnv.getTableDataParameters(tabledata)) { if (parameterMap.containsKey(parameter.getName())) { @@ -501,5 +496,13 @@ public abstract class DesignTableDataManager { threadLocal.set(value); } + private static boolean isNullOrEmpty(Object[] objs) { + return objs == null || objs.length == 0; + } + private static void checkArgument(boolean expression, String errorMessage) { + if (!expression) { + throw new IllegalArgumentException(errorMessage); + } + } } \ No newline at end of file From 999d5e2b52be7cd07b0597aa607cd0c431183b99 Mon Sep 17 00:00:00 2001 From: hzzz Date: Tue, 9 May 2017 09:15:06 +0800 Subject: [PATCH 336/343] fix --- .../com/fr/design/data/DesignTableDataManager.java | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/designer_base/src/com/fr/design/data/DesignTableDataManager.java b/designer_base/src/com/fr/design/data/DesignTableDataManager.java index c15faec63..3f67d6d4c 100644 --- a/designer_base/src/com/fr/design/data/DesignTableDataManager.java +++ b/designer_base/src/com/fr/design/data/DesignTableDataManager.java @@ -380,9 +380,9 @@ public abstract class DesignTableDataManager { final AutoProgressBar loadingBar = PreviewTablePane.getInstance().getProgressBar(); Env currentEnv = FRContext.getCurrentEnv(); ParameterProvider[] parameters = currentEnv.getTableDataParameters(tabledata); - if (isNullOrEmpty(parameters)) { + if (ArrayUtils.isEmpty(parameters)) { ParameterProvider[] tableDataParameter = tabledata.getParameters(Calculator.createCalculator()); - checkArgument(!isNullOrEmpty(tableDataParameter), "both parameters and tableDataParameter are empty"); + checkArgument(!ArrayUtils.isEmpty(tableDataParameter), "both parameters and tableDataParameter are empty"); parameters = tableDataParameter; } boolean hasValue = true; @@ -409,14 +409,13 @@ public abstract class DesignTableDataManager { if (loadingBar != null && needLoadingBar) { loadingBar.start(); } - EmbeddedTableData embeddedTableData = null; try { for (ParameterProvider parameter : currentEnv.getTableDataParameters(tabledata)) { if (parameterMap.containsKey(parameter.getName())) { parameter.setValue(parameterMap.get(parameter.getName())); } } - embeddedTableData = currentEnv.previewTableData(tabledata, parameterMap, rowCount); + return currentEnv.previewTableData(tabledata, parameterMap, rowCount); } catch (TableDataException e) { throw new TableDataException(e.getMessage(), e); } finally { @@ -426,7 +425,6 @@ public abstract class DesignTableDataManager { } }, 100); } - return embeddedTableData; } /** @@ -496,10 +494,6 @@ public abstract class DesignTableDataManager { threadLocal.set(value); } - private static boolean isNullOrEmpty(Object[] objs) { - return objs == null || objs.length == 0; - } - private static void checkArgument(boolean expression, String errorMessage) { if (!expression) { throw new IllegalArgumentException(errorMessage); From 542d6f9980514027bfac00cee2405d624f89cc10 Mon Sep 17 00:00:00 2001 From: hzzz Date: Tue, 9 May 2017 11:40:54 +0800 Subject: [PATCH 337/343] fix --- .../src/com/fr/design/data/DesignTableDataManager.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/designer_base/src/com/fr/design/data/DesignTableDataManager.java b/designer_base/src/com/fr/design/data/DesignTableDataManager.java index 3f67d6d4c..3b4877154 100644 --- a/designer_base/src/com/fr/design/data/DesignTableDataManager.java +++ b/designer_base/src/com/fr/design/data/DesignTableDataManager.java @@ -381,9 +381,7 @@ public abstract class DesignTableDataManager { Env currentEnv = FRContext.getCurrentEnv(); ParameterProvider[] parameters = currentEnv.getTableDataParameters(tabledata); if (ArrayUtils.isEmpty(parameters)) { - ParameterProvider[] tableDataParameter = tabledata.getParameters(Calculator.createCalculator()); - checkArgument(!ArrayUtils.isEmpty(tableDataParameter), "both parameters and tableDataParameter are empty"); - parameters = tableDataParameter; + parameters = tabledata.getParameters(Calculator.createCalculator()); } boolean hasValue = true; for (ParameterProvider parameter : parameters) { From 8b8e30196ba1b8e8a7381db9b1b1d694fdef27c0 Mon Sep 17 00:00:00 2001 From: hzzz Date: Tue, 9 May 2017 11:44:37 +0800 Subject: [PATCH 338/343] remove unused code --- .../src/com/fr/design/data/DesignTableDataManager.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/designer_base/src/com/fr/design/data/DesignTableDataManager.java b/designer_base/src/com/fr/design/data/DesignTableDataManager.java index 3b4877154..c2e039a44 100644 --- a/designer_base/src/com/fr/design/data/DesignTableDataManager.java +++ b/designer_base/src/com/fr/design/data/DesignTableDataManager.java @@ -491,10 +491,4 @@ public abstract class DesignTableDataManager { public static void setThreadLocal(String value) { threadLocal.set(value); } - - private static void checkArgument(boolean expression, String errorMessage) { - if (!expression) { - throw new IllegalArgumentException(errorMessage); - } - } } \ No newline at end of file From 9baa73b95f392ec118d49969aca659e2fb7cff1c Mon Sep 17 00:00:00 2001 From: hzzz Date: Thu, 11 May 2017 15:46:13 +0800 Subject: [PATCH 339/343] fix --- .../design/data/DesignTableDataManager.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/designer_base/src/com/fr/design/data/DesignTableDataManager.java b/designer_base/src/com/fr/design/data/DesignTableDataManager.java index c2e039a44..73d222938 100644 --- a/designer_base/src/com/fr/design/data/DesignTableDataManager.java +++ b/designer_base/src/com/fr/design/data/DesignTableDataManager.java @@ -383,15 +383,8 @@ public abstract class DesignTableDataManager { if (ArrayUtils.isEmpty(parameters)) { parameters = tabledata.getParameters(Calculator.createCalculator()); } - boolean hasValue = true; - for (ParameterProvider parameter : parameters) { - if (parameter.getValue() == null || ComparatorUtils.equals(StringUtils.EMPTY, parameter.getValue())) { - hasValue = false; - break; - } - } final Map parameterMap = new HashMap<>(); - if (!hasValue || isMustInputParameters) { + if (needInputParams(isMustInputParameters, parameters)) { final ParameterInputPane pPane = new ParameterInputPane(parameters); pPane.showSmallWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { @Override @@ -425,6 +418,18 @@ public abstract class DesignTableDataManager { } } + /** + * 是否需要展示输入框让用户输入参数 == 当前不是所有参数都有值 && 必须有值 + */ + private static boolean needInputParams(boolean mustInputParameters, ParameterProvider[] parameters) { + for (ParameterProvider parameter : parameters) { + if (parameter.getValue() == null || StringUtils.EMPTY.equals(parameter.getValue())) { + return mustInputParameters; + } + } + return false; + } + /** * 返回TableData的数据列,注意TableData * 是没有考虑参数的。用于简单的查询语句生成的TableData, 或者 From f0bb46a9cdc0e7addc5206965c0ee70fa458e9dd Mon Sep 17 00:00:00 2001 From: hzzz Date: Fri, 12 May 2017 09:17:11 +0800 Subject: [PATCH 340/343] fix --- .../src/com/fr/design/data/DesignTableDataManager.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/designer_base/src/com/fr/design/data/DesignTableDataManager.java b/designer_base/src/com/fr/design/data/DesignTableDataManager.java index 73d222938..621e303b1 100644 --- a/designer_base/src/com/fr/design/data/DesignTableDataManager.java +++ b/designer_base/src/com/fr/design/data/DesignTableDataManager.java @@ -418,13 +418,13 @@ public abstract class DesignTableDataManager { } } - /** - * 是否需要展示输入框让用户输入参数 == 当前不是所有参数都有值 && 必须有值 - */ private static boolean needInputParams(boolean mustInputParameters, ParameterProvider[] parameters) { + if (mustInputParameters && ArrayUtils.isNotEmpty(parameters)) { + return true; + } for (ParameterProvider parameter : parameters) { if (parameter.getValue() == null || StringUtils.EMPTY.equals(parameter.getValue())) { - return mustInputParameters; + return true; } } return false; From 52653d5bc779d0ce749dbfe8e92aa972f588fd8e Mon Sep 17 00:00:00 2001 From: neil Date: Fri, 12 May 2017 10:12:44 +0800 Subject: [PATCH 341/343] ct --- .../com/fr/design/locale/designer.properties | 1488 +--------------- .../design/locale/designer_en_US.properties | 1555 +--------------- .../design/locale/designer_ja_JP.properties | 1573 +---------------- .../design/locale/designer_ko_KR.properties | 1491 +--------------- .../design/locale/designer_zh_CN.properties | 1479 +--------------- .../design/locale/designer_zh_TW.properties | 1524 +--------------- .../mainframe/toolbar/ToolBarMenuDock.java | 51 +- 7 files changed, 242 insertions(+), 8919 deletions(-) diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 182239ee8..de3f1896f 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -101,7 +101,6 @@ FR-Designer_File= FR-Designer_Filter_Conditions= FR-Designer_Finish-Modify-Share= FR-Designer_Fit= -FR-Designer_Fit-App= FR-Designer_Font-Family= FR-Designer_Font-Size= FR-Designer_Forbid_Drag_into_Adapt_Pane=Forbid Drag into Para Pane @@ -358,7 +357,6 @@ FR-Designer_KeyPoint=KeyPoint FR-Designer_loadedTreeModel=loadedTreeModel FR-Designer-Failed_to_load_the_plugin=Failed to load the plugin\uFF0Cplease update the plugin\: FR-Designer-Plugin_Please_Update_Jar= -FR-Designer-Invalid_Page_Number=Invalid Page Number FR-Designer_XMLA_Database=Database FR-Designer_XMLA_UserName=User name FR-Designer_XMLA_Password=Password @@ -489,10 +487,6 @@ FR-Designer-LayerPageReport_PageQuery= FR-Designer-LayerPageReport_Define_PageQuerySQL= FR-Designer_Event= 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_Exported_successfully=Exported successfully FR-Designer_Exporting=Exporting @@ -516,19 +510,6 @@ FR-Designer_Create_Tree= FR-Designer_Set_Callback_Function= FR-Designer_ConfirmDialog_Content= FR-Designer_ConfirmDialog_Title= -FR-Designer_FormulaPane_Tips=Tips\:You_Can_Input_B1_To_Input_The_Data_Of_The_First_Row_Second_Column -FR-Designer_FormulaPane_Variables=Variables -FR-Designer_FormulaPane_Formula_Description=Formula_Description -FR-Designer_FormulaPane_Function_Detail=Function Detail -FR-Designer_FormulaPane_Search=Search -FR-Designer_Tab_carousel= -FR-Designer_setCarousel= -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 @@ -536,39 +517,6 @@ 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_Null=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=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}' directory.\nAdd the source code(.java file) into the same folder if need.\nExample: {R2}} -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-Move_Tab_First=move to first -FR-Designer-Move_Tab_End=move to end -FR-Designer-Move_Tab_Next=move to next -FR-Designer-Move_Tab_Prev=move to previous -FR-Designer_DS_TableData=Data Set -FR-Designer_Parameter-Formula=Formula -FR-Designer_Plugin_Should_Update_Please_Contact_Developer=Plugin version is too low, and is not compatible with current API. Please contact the developer to update. -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. FR-Designer_Background_Null= FR-Designer_Background_Color= FR-Designer_Background_Texture= @@ -577,1417 +525,31 @@ FR-Designer_Background_Gradient_Color= FR-Designer_Background_Image= FR-Designer_Background_Clear= FR-Designer_Background_Image_Select= +FR-Designer_Tab_carousel= +FR-Designer_setCarousel= +FR-Designer_carouselInterval= FR-Designer_Initial_Background_Tips= FR-Designer_Mouse_Move_Tips= FR-Designer_Mouse_Click_Tips= -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_Too_Large_To_Paste=too large to paste -FR-Designer_Too_Small_To_Paste=Too small to paste -FR-Designer_AxisReversed=AxisValue -FR-Designer_Logarithmic=Logarithmic -FR-Designer_Chart_Log_Base=Log Base -FR-Designer_Chart_F_Radar_Axis=Chart_F_Radar_Axis -FR-Designer_Style=Style -FR-Designer_Color=Color -FR-Designer_Border=Border -FR-Designer_Background-Pattern=Pattern -FR-Designer_Properties_Mobile= -FR-Designer_Edit_Button_ToolBar= -FR-Designer_Remove_Button_ToolBar= -FR-Designer_Get-CubeGetting= -FR-Designer_Oracle= -FR-Designer_Validate= -CellWrite-InsertRow_NULL=Null -DashBoard-ChartFloat=Chart -contact_info=Contact information (optional) -Page_Setup=Page_Setup -CellWrite-Print_Export= -Cannot_Get_Date=Can not get date -FR-Designer_Modify=Modify -M-Write_Preview=Write Preview -FR-Base_RWA-Key= -China=China -Set_Legend_Sytle=Set_Legend_Sytle -FR-Designer_Number=Number -FR-Designer-Widget-Style_Common= -M-Save_As=Save As -Following_parameters_are_not_generated=The following parameters are not generated -FR-Designer-Basic_Activation_Key_Copy_OK=Key has been copy to clipboard -Utils-Current_Sheet=Current Sheet -ConditionB-is_less_than=Is less than -BorderLayout-West=West -AnalysisLine=Analysis Line -Layer_Report_Warnning_info=Warnning info for LayerReport -Tree-Width=Tree Width -alert_word= -PageSetup-Paper_Size=Paper Size -M-Page_Setup=Page Setup -DashBoard-FormBook=Form -X-Coordinate=X Coordinate -Style-Line_Spacing=Line Spacing -FR-Designer_Plugin_Should_Update_Title=Warning -Server-Define_Data_Connection=Define Data Connection -BarInside=Bar Inside -Border-Color=Border-Color -NotAllow= -Utils-File_type=File type -FR-Designer-Plugin_Install_From_Local=Install plugin from local file -Summary_Method=Summary Method -Select_Specified_Grouping=Select Specified Grouping -HF-Number_of_Page=Total Number of Page -FR-Designer-Tree_Height=Tree Height -Owner=Owner -Home=Home -FR-Server_Embedded_Server_Stop=Server in Design-Stop -FR-Designer-Plugin_Detecting_Update=Detecting update -HF-Whether_to_define_the_selected_type=Whether to define the selected type -StyleAlignment-Right=Right -FR-Designer_Alignment-Style=Alignment-Style -PageSetup-Title_Start_Column=Title Columns -Tree-Mutiple_Selection_Or_Not=Mutiple Selection -FR-Designer-Plugin_Search=Search -Choose_Role=Choose Role -Append_Delete_Row_Message=WarningThe specify cell should set the expand-attribute,otherwise it won't work. -Form-ComboBox=ComboBox -PageSetup-Footer=Footer -Sorting=Sorting -DBCP_TEST_WHILE_IDLE=TestWhileIdle -DS-Embedded_TableData=Embedded Table Data -FR-Designer_No-Privilege=No Privilege -FRFont-Subscript=Subscript -Background_Settings=Background Setting -FormulaD-Invalid_Formula=Invalid Formula -FR-Base_Margin= -FR-Designer-Plugin_Shop_Installed= -M_Edit-Send_to_Back=Send to Back -Email-Can_Preview_Report_Content=Preview the report contents -FR-Designer-FRFont_Italic= -CellWrite-Print_Background=Print Background -Wizard=Wizard -Preference-Is_Drag_Permited=Is Drag Permitted -FR-Designer_Release_Lock= -Form-Delimiter=Delimiter -wrong=wrong -FR-Menu-Server_Chart_PreStyle=Chart PreStyle -Form-Button=Button -FormulaD-Valid_Formula=Valid Formula -ParameterD-Parameter_Interface=Parameter Interface -At_least_one_visual_worksheet=Workbook to have at least one visual worksheet, if you want to delete, please insert a new worksheet -Need_Min_Value=Need Min Value -Allow_Blank=All Blank -CellWrite-InsertRow_DEFAULT=Default value -Widget-Load_By_Complete=Load By Complete -FR-Designer-Basic_Only_Submit_Current_Sheet= -Sort-Sort_Order=Order -File-File_Size_Limit=File Size Limit -PrintP-Print=Print (T) -FR-Designer-StyleAlignment_Center= -Preference-Setting_Colors=Setting Colors -Judge=Judge -Image-Adjust= -Collect-User_Information_DES= -FR-Designer_Plugin_Normal_Update_From_Local=Update from local file -BackgroundTexture-Canvas=Canvas -BarOutSide=Bar Out Side -Preview_ToolTips=Preview ToolTips -FRFont-Family=Family -FR-Lic_does_not_Support_Remote= -InterfaceStyle=InterfaceStyle -RWA-Key=Primary Key -WF-Name=Name -RWA-Click_Cell_To_Edit_Value=Click Cell to Edit Value -Utils-Row_Height=Row Height -ReportD-Excel_Export=ReportD Excel Export -Form-Please_Select_A_Kind_Of_Form_Container=Select Form Container -Column_Does_Not_Exsit=Column Does Not Exsit -M_Insert-Hyperlink=Hyperlink -can_not_include_underline=can not contain "_" -FR-Designer-Plugin_Jar_Expired= -FR-Background_Image_Extend=Extend Image -TopDownShade=Top Down Shade -FR-Base_Right= -DataBinding=Data Binding -ConnectionPool_Attr=Connection Pool Attributes -Connect_SQL_Cannot_Null=Connect SQL Cannot be Null -DBCP_MAX_ACTIVE=MaxActive -M_Window-Preference=Preference -ToolBar_Top=Top ToolBar -FR-Designer_Indent-Pixel=Pixel -FR-Designer_Unit_MM=MM -IDLE= -FRFont-Underline=Underline -FR-Designer-Plugin_Read_Plugin_List_Error=Error to read plugin list -Type_Set=Type Set -M_Format_A-Cell_Attributes=Other Attributes -CellWrite-Show_As_Image=Show As Image -ShowAsDownload= -Form-ComboCheckBox=ComboCheckBox -BackgroundTexture-WovenMat=Woven Mat -BindColumn-Custom_Data_Appearance=Customize Data Appearance -Actived=Actived -Env-Local_Directory=Local Directory -Form-Colon=Colon -Preference-Vertical_Scroll_Bar_Visible=Vertical Scroll Bar Visible -Utils-Show_Cell_Value=Show Cell Value -FR-Designer_ReportColumns-Repeat_Row= -SpecifiedG-Specified_Group=Specified Group -RWA-Smart_Add_Cells=Smart Add Cells -HF-Left_Section=Left Section -M_Report-Report_Background=Report Background -Image-Extend=Extend -FS_BI= -ToolBar_Bottom=Bottom ToolBar -Hgap=Hgap -FR-Designer_Enter-New-FileName= -Verify_Fail=Verify Fail -CellWrite-InsertRow_Policy=Policy of Insert Row -FR-Designer-Plugin_Illegal_Plugin_Zip=Illegal plugin zip -RCodeVersion=VER -Convert=Convert -Please_Drag=Please Drag -FR-Designer-Widget-Style_Preview= -mobile_number=Mobile Number -FR-Designer_Form-ComboCheckBox=ComboCheckBox -CacheValidateTime=Cache Validate Time -Hyperlink-Extends_Report_Parameters=Extends Report Parameters -FR-Designer_Values-Editor= -Export-Excel=Excel -Utils-Left_to_Right=Left to Right -ExpandD-Vertical_Extendable=Enable to Insert Cell to Display Field Data Vertically -Utils-Report_Runtime_Env=Report Workspace -Utils-Right_to_Left=Right to Left -Utils-Beyond_the_top_side_of_Border=Beyond the top side of border -Exception_StackTrace=Exception_StackTrace -Corresponding_Fields=Corresponding_Fields -Form-CheckBox=CheckBox -Utils-Current_Row=Current Row -BuildIn=Build-in -BindColumn-Results_Filter=Result Filter -FR-Designer-Plugin_Manager=Plugin Manager -M_File-Export-CSV=CSV -Data_Filter=Data Filter -ReportServerP-Edit_Printer=Edit Printer -FR-Designer_Datasource-Stored_Procedure=Stored Procedure -RESTART=RESTART -FormulaD-Function_name=Function Name -ChooseOneButton=chose one toolbutton -Priority=Priority -Datasource-Datasource=Data Source -FR-Designer_Width= -Cannot-Add_To_This_Area=Cannot Add To This Area -Run= -Set_Submit_Condition=Set Submit Condition -FR-Base_Value= -fileLocked_undeleted=Template is locked, you can not delete\! Click OK to refresh the list of templates -Web_Apply=Web Application -Refresh_Database=Refresh database -Set_Row_Title_End=Set_Column_Title_End -FR-Utils-New_Folder=New Folder -BiasD-From-upper_left_to_lower_right=Upper left to lower right -CapsLock= -StyleFormat-Sample=Sample -RWA-Smart_Add_Cell_Group=Smart Add Cell Group -MConfig-CancelButton=Cancel -Function-Choose_Function_Class=Choose Function Class -LatLng=Lat and Lng -DS-Server_TableData=Server Table Data -BackgroundTexture-GreenMarble=Green Marble -read_time_out=Load Timeout -JavaScript-Commit_to_Database=Commit to Database -DS-Relation_TableData=Relation Table Data -CellWrite-Page_Before_Row=Page Break Before Row -FR-Designer-Plugin_Load_Plugins_From_Server=Loading plugins from store -D-Dispaly_Divide_Result_Set_into_Groups=Divide result set into groups -Closed=Closed -RWA-Help=helpdetail -FR-Designer-Widget-Style_Custom= -FR-Designer-Widget-Style_Render_Style= -Highlight-Barcode=BarCode -FR-Designer_Connect_SQL_Cannot_Null=Connect SQL Cannot be Null -trigger= -M-Data_Analysis=Data Analysis -Function-The_selected_file_cannot_be_null=The select file cannot be empty -No-Privilege=No Privilege -ReportColumns-Repeat_Column=Repeat Column -SecondGraduationUnit=SecondGraduationUnit -Form-Widget_Property_Value=Widget Property Value -GIVE-NAME=Give_Name -FR-Designer_Rename= -Utils-Merge_Cell=Merge Cells -Style-Spacing_After=Spacing After -Enlarge_Or_Reduce=Enlarge Or Reduce -Tree-Height=Tree Height -RCodeErrorCorrect=ERC -Enter-New-FileName=Enter New File Name -try_resending=Please try resending -M-Open_Report=Open... -Please_Select=Please Select -InRow=InRow -Form-TextArea=TextArea -FR-Designer_Https_Enable= -Widget-Custom_Widget_Config=Custom Widget -already_exists=already exists -Original_Marked_Filed=Original Marked Filed -BackgroundTexture-Sand=Beach -Values=Values -Not_use_a_cell_attribute_table_editing=You may not use a cell attribute table editing -Root=Root -cycle=cycle -open-new-form-tip=open new form tip -Support-Current_Auto_Complete_Shortcut=Current Shortcut -GROUPING_MODE=Grouping -DBCP_MAX_IDLE=MaxIdle -BackgroundTexture-BlueTissuePaper=Blue Tissue Paper -ReportD-Export_Hided_Row=ReportD Export Hided Row -FR-Custom_styles_lost= -Env-Des2=Position should be a Servlet like "http\://localhost\:8080/WebReport/ReportServer" -Env-Des1=Please select the WEB-INF directory of Report Server -PageSetup-Placement_Center_on_Page=Page Center -sure_to_delete=sure to delete -Already_exists_not_add_repeat=Already exists, do not add repeat -Axis_Title=Axis title -FR-Designer-Plugin_Install_Failed=Install failed -FR-Designer-Widget-Style_Frame= -MainGraduationUnit=MainGraduationUnit -Second_Axis=Second Axis -Classifier-Ge= -MSBold=MSBold -Form-Design_Size=Form Design Size -FR-App-Template_Save= -ExpandD-Horizontal_Extendable=Display Field Data Horizontal -RP_Authority_Edit=Authority -Warnning=Warning -RoleName_Can_Not_Be_Null=RoleName_Can_Not_Be_Null -Application=Applications -Formula_Dictionary_Display_Examples_Html=the real value is \ -ECP-error_pwd= -FR-Hyperlink_ChartHyperlink= -M_Edit-FormatBrush=Format Painter -Indent-Pixel=Pixel -FR-Designer-Widget-Style_Border_Line= -Widget-Default_Widget_Config=Default Widget -Version-does-not-support= -StyleAlignment-Right_To_Left=Right To Left -Style-Spacing_Before=Spacing Before -Has_Existed=Has Existed -FR-Designer_DisplayNothingBeforeQuery=Display Nothing Before Query -Still=Still -JS_WARNING2=information -JS_WARNING1=information -Connectionline=Connectionline -Utils-Insert_Record=Insert Record -Set-Parameter-Name= -More-information=More information -Parameter-Boolean=Boolean -FRFont-Strikethrough=Strikethrough -Server-version-tip=You are currently connected to the server version is less than the designer version number you are using to continue to connect you to edit some of the properties may not be able to effectively save. If the need to connect, please send your designer version and the server version is consistent -Form-All_Files=All Files -DBCP_NUM_TEST_PER_EVCTION_RUN=NumTestsPerEvictionRun -FR-Designer-FRFont_Family= -Device= -M_Insert-Cell=Cell Element -Present-Formula_Present=Formula Present -FRFont-Superscript=Superscript -CellWrite-Page_Before_Column=Page Break Before Column -Golden=Golden -Preference-Support_Cell_Editor_Definition=Support Cell Editor Definition -M-Page_Preview=Page Preview -HJS-CC_to=Copied to -Tree-Select_Leaf_Only=Select Leaf Only -Pointer-A-Tick-Order=pointer and tick value -Pink=Pink -StyleAlignment-Distibuted=Distributed -Odd=Odd -already-saved=already saved -FR-Hyperlink_Chart_Cell= -Style-Left_Indent=Left Indent -Offline=Offline -Form-Hierarchy_Tree_Next=Next -Needle=Needle -GoogleMap=Google Map -Running=Running -M_Edit-Unmerge_Cell=Unmerge Cell -Out_Border_Line=Out Border Line -Style-Spacing=Spacing -FR-Utils_Submit= -ReportServerP-Previous=Previous -StyleAlignment-Text_Style=Text Style -RelatedChart=RelatedChart -ProcessManager=ProcessManager -Cancel_Repeat_Attributes=Cancel_Repeat_Attributes -FR-App-File_Message= -Datasource-Stored_Procedure=Stored Procedure -RWA-Row_Offset=Row Offset -M_Format-Style=Style -detail_description=Detailed description -FR-Designer-Widget-Style_Title_Content= -ParameterD-Report_Parameter=Report Parameter -HF-Edit_Header=Edit Page Header -Sytle-FRFont=Font -FR-Designer_Finish_Export=Finish_Export -MultiFileUpload=MultiFile Upload -HF-Page_Number=Page Number -Style-Right_Indent=Right Indent -Desktop=Desktop -FR-Server-All_Error= -ConditionB-Operator=Operator -Today=Today -Form-Widget_Name=Widget Name -Covered_All=Covered All -Day=Day -External=External -Black_Font=Black Font -LOG-Report_Server_IS_Started=Report Server is Started -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 -FR-Designer_ChooseOneButton=chose one toolbutton -Widget-Sizing=Sizing -NO_Border_Line=NO Border Line -Cell_Data=cell data -StyleAlignment-Vertical_Text=Vertical Text -Label=Label -Orange=Orange -zeroMarginWarn=The printer exist the physical margins
report page margin settings the small can
can print content insufficiency.
  -Widget-Date_Selector_Return_Type=Return Type -Utils-Switch_To_Template_Reportlet=Switch To Template Reportlet -satisfy= -FR-Designer_WidgetDisplyPosition=Widget DisplyPosition -FR-Base_Top= -FR-Designer_Form-CheckBox=CheckBox -Reportlet-Parameter_Type=Parameter Type -sending=sending... -FR-Designer-FRFont_Foreground= -FR-Import-Export_SVG= -M_Edit-Clear_Contents=Contents -Session=Session -Widget-Load_Type=Load Type -template_unsaved=template can not be saved -check_communication=please check the network communication is normal and that the server is running -List-Need_Head=Need Head -FR-Designer-Plugin_Has_Been_Installed=Plugin has been installed -FR-Widget_Tree_And_Table= -FR-Base_Help= -FR-Designer-Plugin_Update_Successful=Update successfully -August=August -LOG-Is_Being_Openned=Is Being Openned -BackgroundTexture-Oak=Oak -Multi_nam_formula= -TurnOn=TurnOn -HJS-Send_Successfully=Send Successfully -Mon=Mon -Inner_Parameter=Inner Parameter -Required=Required -Summary=Summary -template_unopened=unable to open template -FR-Base_Bottom= -DataFunction-Min=Minimum -StyleFormat-Percent=Percent -FR-App-All_Custom= -M_Insert-Data_Column=Insert Data Column -PLEASE=PLEASE -Numbers=Numbers -Release_Lock=Release Lock -Background-Background_is_NULL=No Background -FR-Designer_Sytle-FRFont=Font -Gradation=Gradation -The_current_list_is_empty=The current list is empty -Formula_Dictionary_Display_Examples=the real value is \ -Schedule-Template_Parameter=Template Parameter -JSShow=Show In Action -Level_coordinates=Level coordinates -MainGraduationLine=Main Graduation Line -Hyperlink-Web_link=Web link -StyleAlignment-between_-90_and_90=between -90 and 90 -FormulaD-Custom_Function=Custom Function -FR-Designer_Integer=Integer -PageSetup-Finis_Start_Row=Finis Rows -RWA-Remove_Field=Remove Field -Form-Desin_Width=Form Design Width -No-tableData=No tableData -Page_Total=Page_Total -FR-Designer-Plugin_Connect_Server_Error=Error to connect plugin store -Import-Excel_Source=Excel Source -Utils-Left_to_Right_a=Left to Right -ExpandD-Expand_Attribute=Attribute to Insert Cell to Display Field Data -Report-Write_Attributes=Write Attribute -Utils-Current_Column=Current Column -Need_Max_Value=Need Max Value -Report_Not_Exist=Report_Not_Exist -HF-Insert_Content=Insert Content -UpParent=Up Parent -PageSetup-Page=Page -Utils-Move_Up=Move Up -BackgroundTexture-PurpleMesh=Purple Mesh -Export-Word=Word -ServerM-Widget_Manager=Widget Manager -FR-Designer-Basic_Activation_Key=Activation Key\: -FR-App-Template_Report_Not_Exist= -Protected=Protected -Skip=skip -FR-Designer_PageSetup-Vertically=Vertically -revert= -PageSetup-Predefined= -Border-Style-Radius=RoundBorder -IntPart= -ExpandD-Data_Column=Data Column -Sort-Ascending=Ascending -FR-Designer-Widget_Style= -parameter_name_exist=The parameter name already exists -FR-Designer_Layer-Build=Layer-Build -Please_Rename=Please_Rename -Form-Editing_Listeners=Editing Listener -RWA-Smart_Add_Fields=Smart Add Fields -FR-Designer-Tree_Width=Tree Width -Record=Record -Poly-Report_Component=Poly Report Component -Options=Options -NS-war-remote= -Sche-Minute=Minute -Three_Rows_Of_Three_Grid=Three rows of three grid -WorkSheet=Worksheet -FR-Designer-Widget_Size= -BindColumn-Select=Select -FR-Widget_Mobile_Terminal= -FR-Background_Image_Titled=Titled Image -SetPrinterOffset=SetPrinterOffset -FR-Designer-Plugin_Installed=Installed -FR-Designer-Hyperlink_Name= -FR-Designer_Form-Button=Button -Black=Black -FR-Designer-Widget-Style_Border_Color= -Set_Submit_Event=Set Submit Event -PDF-Print_isPopup=Is Popup -LayerPageReport_CountPerPage=Data count per page -Display_Modes=Display Modes -RowSpan=RowSpan -Datasource-Test_Connection=Test Connection -Function-Function_Manager=Function Manager -Host_Name=Host Name -CellWrite-Show_As_HTML=Show As HTML -FR-Designer-Widget-Style_Shadow= -FR-Designer_Parameter_String=String -Form-SupportTag=SupportTag -ReportD-Report_Write_Attributes=Report Write Attributes -DataFunction-Count=Count -Top_And_Thick_Bottom_Border_Line=Top And Thick Bottom Border Line -Client=Client -BindColumn-Result_Serial_Number_Start_From_1=Serial Number Starts From One -History=History -Already_exists= -Datasource-Original_Charset=Original Char Set -FR-Base_Left= -ReportServerP-Next=Next -BindColumn-Top_N=Top N -Animation_Special=Specially good effect -Widget-Chart_Widget_Config=Chart Widget -FR-Designer-Plugin_Cannot_Update_Not_Install=FR-Designer-Plugin_Cannot_Update_Not_Install -After_Changed_Some_Attributes_Are_Different=After_Changed_Some_Attributes_Are_Different -PieStyle=Pie Style -HF-Are_you_sure_to_delete_it=Are you sure to delete it -Utils-Design-File_Open= -FR-Utils_Label= -Data-Label=Data Label -M_Insert-Text=Insert Text -Form-View_Tree=Tree View -M_Insert-Chart=Insert Chart -HF-Even_Page=Even Page -ReportServerP-Report_server_parameter=Report Server Parameter -JavaScript-Form_Submit=Form Submit -Horizontal-Split_Layout=Horizontal Split Layout -BorderLayout-Center=Center -INFO-Reset_Webapp=Reset Webapp -FR-Designer_Text=Text -IN_and_INOUT_type_not_as_cursor=IN and INOUT type not as cursor -Main_Axis=Main Axis -M_Edit-Cut=Cut -Utils-The_Name_has_been_existed=The Name has been existed -FR-Background_Image=Image -Character=character -Unit_Thousand=Thousand -Test=Test -Utils-Would_you_like_to_save= -HF-Header_and_Footer=Header and Footer -LIST_MODE=List Mode -HF-Insert_Image=Insert Image -FR-Designer-Widget-Style_Standard= -FR-Designer_Form-List=List -BackgroundTexture-Denim=Denim -Execute_Report_by_Layer_Engine=Execute Report by Layer Engine -M_Edit-Bring_Forward=Bring to Forward -Choose_All=Choose All -Form-RadioGroup=Radio Group -FR-Base_Remove= -FR-Remote_Connect2Server_Again= -Semicolon=semicolon -StyleFormat-Category=Category -Report_Template=Report Template -Utils-Beyond_the_right_side_of_Border=Beyond The Right Side Of The Border -BackgroundTexture-Papyrus=Papyrus -LayerPageReport_PageEngine=Execute for page -Schedule-The_selected_file_must_be_end_with_filter=The selected file must end with '.cpt' or '.class' or '.frm' -Provide=Provide -FormulaD-Math_&_Trig=Math and Trig Function -FR-Designer-StyleAlignment_Right= -Error_TableDataNameRepeat=\ already exsits in ServerTableData or the name is repeated. -Choose_None=Choose None -File-tree=File tree -FRFont-bold=bold -FR-Designer_Set_Submit_Condition= -Form-Change_Widget_Name=Change Widget Name -ReportColumns-Report_Columns=Report Columns -Can_not_use_FormatBursh= -CellElement-Property_Table=CellElement Property Table -Dictionary-Dynamic_SQL=Dynamic SQL -FR-Designer_Form-CheckBoxGroup=CheckBoxGroup -DBCP_TIME_BETWEEN_EVICTIONRUNSMILLIS=TimeBetweenEvictionRunsMillis -ReportD-Export_Hided_Column=Export hided column -Preference-Support_Undo=Support Undo -FR-mobile_report_analysis= -Month=Month -Utils-Column_Width=Column Width -Collect-Use_Designer=Use Designer -Widget-User_Defined_Editor=User Defined Editor -Unit_Ten_Thousand=Unit_Ten_Thousand -Data_Setting=Data Setting -ECP_input_pwd= -period= -Note=Note -Multiline=Multiline -Datasource-Convert_Charset=Convert Char Set -DashBoard-ConnectionList=ConnectionList -Utils-Submit_Forcibly=Submit Forcibly -Parent_Marked_Field=Parent Marked Field -Logout=Logout -FR-Designer_Show_Blank_Row= -FR-Base_Format= -FR-App-Export_png= -Delete_Column=Delete Column -SecondGraduationLine=Second Graduation Line -SpecifiedG-Groups=Groups -CONTINUUM_MODE=Continuum Grouing -Datasource-Connection_failed=Connection Failed -CategoryName=CategoryName -DBCP_INITIAL_SIZE=InitialSize -Colors=Colors -FR-Import-Export_CSV= -FR-Designer-StyleAlignment_Left= -BackgroundTexture-PaperBag=Paper Bag -RWA-BuildIn_SQL=BuildIn SQL -SingleLayer=SingleLayer -Or-you=or you -FR-Designer_Certificate_Path= -Utils-Last_Page=Last Page -BarCodeD-Drawing_Text=Drawing Barcode Text -Warning-Template_Do_Not_Exsit=Template Do Not Exsit -BindColumn-Group=Group -Export-SVG=SVG -Plane3D=Plane 3D -SessionID= -FR-Designer_Height= -HF-Odd_Page=Odd Page -About-All_Rights_Reserved=All Rights Reserved -Utils-Current_Cell=Current Cell -Web_Preview_Message=Please save the template in the current Runtime Environment folder -FR-Hyperlink_Chart_Float= -Dic-Data_Query=Data Query -CellWrite-Print_Content=Print Content of Cell -Privilege-Selected_None_Of_Any_Items=Selected None Of Any Items -FRFont-Size=Size -Function-J2EE_server=J2EE server -FR-Designer_Allow_Blank=All Blank -Build_Tree_Accord_Parent_Marked_Filed=Build Tree according parent's marked filed -Preference-Horizontal_Scroll_Bar_Visible=Horizontal Scroll Bar Visible -Scope=Scope -Save_All_Records_In_Memory=Save All Records in Memory -FreezeWarning1=FreezeWarning -FlowLayout=FlowLayout -M_Report-Report_Footer=Report Footer -FR-Action_Add= -BorderLayout-East=East -feedback_tip=Please enter a description of the problem of not more than 400 words -FS_Start_Date=Start Date -FR-ConditionB_Operator= -Printer-Alias=Alias -DS-Class_Name=Class Name -FR-Designer-Plugin_Has_Been_Disabled=Plugin has been disabled -Sort-Original=Original -Utils-Top_to_Bottom_a=Top to Bottom -Parameter-String=String -InnerRadis=InnerRadis -Want_To_Cover_It=Want To Cover It -Divided_stage=Divided stage -Seriously=Seriously -ReportServerP-PDF=PDF -Utils-Switch_To_Class_Reportlet=Switch To Class Reportlet -FR-Designer_Show_Blank_Column= -M_Edit-Redo=Redo -Visibility=Visibility -Series_Use_Default=Series_Use_Default -Has_Selected=Has Selected -BackgroundTexture-Walnut=Walnut -FormulaD-Function_category=Function Category -Interface=Interface -FR-Designer-Beyond_Bounds= -seconds=seconds -Auto-Build=Auto-Build -FR-Designer-Plugin_Install_Successful=Install successful -Template_Path=Template_Path -FR-Designer-FRFont_Bold= -Poly_Name=Poly Name -WorkBook=WorkBook -Hyperlink-Self_Window=Self Window -FR-Designer-Widget-Style_Title= -FR-Designer-FRFont_Size= -M_File-Export-SVG=SVG -Capacity=Capacity -Rose_Red=Rose Red -StyleAlignment-The_value_of_rotation_must_between_-90_and_90_degrees=The value of rotation must between -90 and 90 degrees -HF-Move_Left=To the left -Cell_Group=Cell Group -Week=Week -PageSetup-Orientation=Orientation -M-Open_Recent=Open Recent -NNormal=Noraml -Integer=Integer -Select_The_Source_To_Save=Select Source to Save -Transition=Transition -FR-Designer_Get_Lock= -one_record_exists_in_many_groups=One record exists in many groups -FR-Designer_Cover_None= -DeciPart= -ExpandD-Up_Father_Cell=Upper Parent Cell -Deep=Deep -FRFont-Shadow=Shadow -Reportlet=Reportlet -Calendar=Calendar -DateFormat-Custom_Warning=Note\: Custom date format does not support the format checking -Unit_MM=MM -Server-Start=Start -CellPage-Can_Break_On_Paginate=Can Break On Paginate -Build_Tree_Accord_Marked_Filed_Length=Build Tree according marked filed's length -ComboCheckBox-Start_Symbol=Start Symbol -Real=Real -RWA-Batch_Modify_Cells=Batch Modify Cells -FR-Designer_Build-Way=Build-Way -Read=Read -StyleAlignment-Degrees=Degrees -M_Format_A-Border=Border -Utils-Delete_Record=Delete Record -Reload=Reload -Image-Select_Picture=Select Picture -RWA-Submit=Submit -the_template=this template -FR-Designer_Component_Scale=Component Scale -FRFont-italic=italic -Year=Year -HF-Move_Right=To the right -Data-Check= -Unknown=Unknown -Submit_Style=Submit Style -Left_Border_Line=Left Border Line -Brown=Brown -Select_A_Tree_DataSource_To_Build=Select a tree data source to build -Overlapping=Overlapping -DS-Class_TableData=Class Table Data -FR-Designer-Plugin_Illegal_Plugin_Zip_Cannot_Be_Install=Illegal plugin,cannot be installed -DisplayNothingBeforeQuery=Display Nothing Before Query -Y_Axis=Y Axis -FormulaD-Most_Recently_Used=Most Recently Used -FormulaD-Input_formula_in_the_text_area_below=Input formula in the text area below -Build-Way=Build-Way -M_Edit-Undo=Undo -Line-Style=Line-Style -Datasource-Other_Attributes=Other Attributes -M_Server-Global_Parameters=Global Parameters -Suffix=Suffix -Image-Image_Files=Image Files -EditRC-Entire_row=Entire row(R) -HF-First_Page=First Page -BackgroundTexture-Granite=Granite -DataList=DataList -Recursion=Recursion -BarStyle=Bar Style -FR-Designer-Min_Width=Min-Width -Utils-Report-Env_Directory=Report Workspace -D-ChartArea=Chart Area -Only= -FR-Base_No= -SpecifiedG-Put_all_others_together=Put all others together -HF-NewLine_Des=Click on the move or delete button to operate newline -WLayout-Border-ThreeContainer=With north, west, and in the three border layout containerIncluding the northern block may need to adjust the height of the western block may need to adjust the width. -Parameter_Name=Parameter Name -FR-Base_Table= -Des-Remove_WorkSheet=The report to be deleted may contain data. If you want to delete report, please click on Yes button. -Rotation=Rotation -Undefined=Undefined -Support-Auto_Complete_Shortcut=Auto Complete Shortcut -Set_Column_Title_End=Set_Row_Title_End -Submit_Url=Submit Url -ReportServerP-Are_you_sure_to_delete_the_selected_printer=Are you sure to delete the selected printer -long_data_can_not_show_fully=Long data can not be fully demonstrated -Utils-Beyond_the_bottom_side_of_Border=Beyond The Bottom Side Of The Border -FR-Import-Export_PDF= -Form-CheckBoxGroup=CheckBoxGroup -Click-Me=Click-Me -Hyperlink-Self=Self Frame(S) -Tree-Select_Leaf_Only_Tips=Tree-Select_Leaf_Only_Tips -StyleAlignment-Text_Rotation=Text Rotation -Format-Error=Format Error -Server-Stop=Stop -Preference-Setting_Grid=Setting Grid -ReportServerP-Add_Printer=Add printer -FR-Designer-Plugin_Active=Active -Utils-File_name=File name -NOT_NULL_Des=Can not be null -Right_Border_Line=Right Border Line -EditRC-Entire_column=Entire column(C) -PageSetup-Top_to_bottom=Top to bottom -Click-Get_Default_URL=Click To Get Default URL -StyleAlignment-Wrap_Text=Wrap Text -Remove_All_Button=Remove_All_Button -FR-Designer_Component_Interval=Components Interval -ReportColumns-Columns_vertically=Columns vertically -ReportGUI-Print_Background=Print Background -Export-CSV=CSV -M_Edit-Paste=Paste -FR-Designer-Basic_Restart_Designer=Restart designer -ReportServerP-PDF2-INFO=The PDF Button Info -FormulaD-Check_Valid=Check Valid -server_disconnected=server disconnected -ParameterD-Parameter_name_cannot_be_null=Parameter name cannot be empty -FR-Designer-Plugin_Version_Is_Lower_Than_Current=The version of plugin is lower than current -RWA-NotChange_Unmodified=NotChangeUnmodified -User_Information=User_Information -Custom_styles_lost= -PageSetup-Margin=Margin -M-New_FormBook=FormBook -Widget-TreeNode=TreeNode -Form-Url=URL -Utils-Beyond_the_left_side_of_Border=Beyond the left side of border -Float_Element_Name=Float Element Name -Purple=Purple -DashBoard-Potence=Permissions -M-Close_Template=Close Template(C) -paper= -Not_Exsit=not exist in WorkSheet. -Utils-Insert_Row=Insert Row -Utils-Delete_Row=Delete Row -not_support_authority_edit=this element does not support authority edit -Formula_Tips=The formula must be from the beginning of the "\ -FR-Action_Copy= -Compile_Success=Compile Success -BackgroundTexture-RecycledPaper=Recycled Paper -StyleAlignment-Single_Line=Single Line -Utils-Move_Down=Move Down -Please_Set_Repeat_First=please set repeat Columns and Rows first -Writer-ShortCuts_Setting= -Verify-Data_Verify=Verify Data -FR-mobile_analysis_style= -Confirm-Delete-File= -PageSetup-Header=Header -JavaScrit-Asynch=Asyn -ReportServerP-Toolbar=Toolbar -Utils-Top_to_Bottom=Top to Bottom -Platform=Platform -FR-Designer-FRFont_Underline= -Show_in_Containing_Folder=Show in Containing Folder -BackgroundTexture-WaterDroplets=Water Drip -FR-Designer-Dependence_Install_Failed=install failed -Layout-Padding=Padding -roles_already_authority_edited=Configured role -WidgetDisplyPosition=Widget DisplyPosition -SpecifiedG-Force_Group=Force Group -FormulaD-Formula_Definition=Formula Definition -I-xyScatterStyle_Marker= -Hour= -ColorMatch=ColorMatch -M_Edit-Order=Order -BackgroundTexture-Bouquet=Bouquet -Verify-Error_Information=Error Information -LayerData=LayerData -Rename=Rename -Widget-Load_By_Async=Load By Async -Shape=Shape -BindColumn-This_Condition_has_been_existed=The Condition Already Exists -NS-exception_readError= -Set_Column_Title_Start=Set_Row_Title_Start -Fri=Fri -M_Report-Report_Parameter=Report Parameter -REPORTLETS= -WLayout-Card-ToolTip=Card layout, you can add a number of other components in the layout container. -M-Popup_ChartType=Chart Type -Please-Wait=Please Wait -FR-Designer-Form-ToolBar_Widget= -Widget-Array=Array -FieldBinding=Field Binding -Top_Bottom_Border_Line=Top bottom border line -M-Others=Others... -Hyperlink-Link_Opened_in=Link Opened in -FR-Utils_WorkBook= -M_Insert-Float=Float Element -Out_Thick_Border_Line=Out Thick Border Line -FR-App-File_Lookup_range= -ReportColumns-Columns_to=Columns to -Transparent=Transparent -Parameter-Integer=Integer -PDF-Print_Setting=PDF Print Setting -Server-Embedded_Server=Embedded Server -M_Server-Server_Config_Manager=Server Configuration Manager -FR-Utils-Would_you_like_to_cover_the_current_file=Would you like to cover the current file -CellWrite-InsertRow_COPY=The Original Value -Edit_String_To_Formula=Edit String To Formula -Edit-Column_Count=Column Count -Father=Father -ReportColumns-Columns_after=Columns after -FR-Designer_Undo= -DBCP_MIN_IDLE=MinIdle -M-Data_Analysis_Settings=Data Analysis Settings -M-Form_Preview=Form Preview -Form-Basic_Properties=Basic Properties -quote= -Thu=Thu -Collect-Collect_User_Information=Collect User information -Layer-Build=Layer-Build -FR-Designer-FRFont_Line_Style= -BackgroundTexture-BrownMarble=Brown Marble -PageSetup-Page_Setup=Page Setup -Form-Semicolon=Semicolon -ECP_re_input= -ExpandD-Sort_After_Expand=Sort After Expand -FR-Designer-Dependence_Install_Succeed=install succeed -Env-Configure_Workspace=Configure Workspace -feedback_info=We welcome your comments and suggestions, please fill out the information too much detail, we will contact you as soon as possible -Ratio=Ratio -DBCP_TEST_ON_BORROW=TestOnBorrow -FR-Designer_layerIndex= -WEB-Write_Setting=Write Setting -M-New_WorkBook=New WorkBook -FR-Designer-Plugin_Has_Been_Actived=Plugin is now active -Datasource-Maximum_Number_of_Preview_Rows=Maximum Number of Preview Rows -ExpandD-Cell_Expand_Attributes=Attribute to Insert Cell to Display Data -Select_the_repeated_row_and_column=Select the repeated rows and columns -FormulaD-Date_&_Time=Date and Time Function -Max-Mem-Row-Count=Use disk cache when records more than -BorderLayout-South=South -Export-Text=Text -JavaScript-Synch=Synch -FR-App-All_Warning= -M_Edit-Send_Backward=Send to Backward -Form-Layout=Layout -FR-Designer-Plugin_Shop_Need_Update= -FR-Designer_WorkBook=WorkBook -UpBarBorderStyleAndColor=UpBarBorderStyleAndColor -GridLayout=GridLayout -Utils-Default_Value=Default Value -Widget-Comb_Widget_Config=Comb Widget -Import-Excel2007_Source=Excel2007 Source -Y-Coordinate=Y Coordinate -FR-Base_SimSun_Not_Found= -FR-Designer_Seriously= -Upload=Upload -Form-Widget_Property_Table=Widget Property Table -Des-Merger_Cell=The Selected Area Contains multiple values, if you merge them, only the data at the upper left corner will be reserved. -FR-Designer-Basic_Copy_Build_NO=Double click to copy build NO. -FR-Base_TurnOn= -FR-Base_Rows= -Form-Remove_Repeat=Remove Repeat -Yes=Yes -Datasource-JNDI_Name=JNDI Name -Utils-Delete_Column=Delete Column -HF-Delete_it=Delete it -JavaScript-Dynamic_Parameters=Dynamic Parameters -px=px -FR-App-Report_Template= -Verify-Message=Message -Plan=Plan -Vertical-Split_Layout=Vertical Split Layout -ParameterD-Delay_Playing=Delay Playing -TurnOff=TurnOff -FR-Please_Rename= -Select_Data_Set=Select Data Set -Name_has_Colon= -ReportColumns-Columns_horizontally=Columns horizontally -FR-Base_Yes= -ReportColumns-Repeat_Row=Repeat Row -Print_Setting=Print Setting -Registration-User_Name=User Name -Datasource-User_Defined=User Defined -FR-Designer-Plugin_DownLoadMessage=Plugin need dependence support,need to install ({R1} m)? -Delay=Delay -FR-Designer-All_MSBold= -Utils-Now_create_connection=Connecting to database -FR-Template-Path_chooseRightPath= -FR-Remote_Re_Connect_to_Server= -Nation=Nation -DBCP_MAX_WAIT=MaxWait -FR-App-Template_Form= -Address= -Sub_Report=Sub Report -FR-Import-Export_Word= -FR-Server_Version_Tip= -StyleAlignment-Left_To_Right=Left To Right -Verify-ToolTips=Not meet formula,Error message prompt -BackgroundTexture-Stationery=Letter Paper -FR-Designer_RWA-Help= -M_Insert-Barcode=Barcode -Bounds=Bounds -FR-Designer-Undo_All_Authority_Operations= -Datasource-Context=Context -CellWrite-Page_After_Column=Page Break After Column -FR-Designer_Cancel= -Button-Group-Display-Columns=Display Column Count -Widget-Height=Height -Examples=Examples -Formula_Dictionary_Display_Example=the real value is \ -StyleAlignment-Horizontal=Horizontal -HyperLink_Must_Alone_Reset=HyperLink_Must_Alone_Reset -ExpandD-Expand_Direction=Display Data Direction -Include=Include -Export-Excel-Page=Page -FR-Designer-Min_Height=Min-Height -Filed=filed -ReportServerP-Import_Css=Import Css -M_Insert-Formula=Insert Formula -FR-Designer_Auto-Build= -FRFont-Foreground=Foreground -Bubble-Width=Bubble Width -Form-Hierarchy_Tree=Hierarchy Tree -WLayout-Border-LayoutContainer=With central and northern two border layout container.Including the northern block may need to adjust the height -Preference-JDK_Home=JDK Home -Utils-Insert_Column=Insert Column -FR-Designer_ToolBar_Top= -BindColumn-The_Conditions_of_FatherCell=The Conditions of Parent Cell -Links=Links -M_Report-Report_Header=Report Header -Sub_Report_Description=The sub-report should exist in the runtime environment of its parent, and the two can not be the same -T_Insert-Float=Insert Float Element -BackgroundTexture-FishFossil=Fish Fossil -My_Computer=My Computer -FORMLET= -HF-Undefined=Undefined -Widget-User_Defined_Widget_Config=User Defined Widget -Report-Write_Attributes_Group_Warning=Group is set to the cell number of cells in each field must be the same -Form-Single_quote=Single Quote -Compile_Success_And_Then_Save=Compile Success And Then Save -FR-Designer_Layout-Padding=Padding -Layout_Container=Layout Container -Admin=Admin -Form-EC_toolbar= -FR-App-All_Auto= -Utils-Available_Columns=Available Columns -Form-Change_Widget_Name_Discription=Change Widget Name Discription -FR-Module_Designer= -FR-Import-Export_Text= -Values-Editor=Values ??Editor -FR-Designer_Yes= -ExpandD-Expandable=Ability to Insert Cell to Display Data -Tree-Return_Full_Path=Tree-Return_Full_Path -FRFont-bolditalic=bolditalic -FR-Base_StyleFormat_Sample=Sample -Area_Value=Area Value -FR-Designer-Plugin_Disable=Disable -Utils-Are_you_sure_to_remove_the_selected_item=Are you sure to remove the selected item -Face_Write=Write -Poly-Report_Block=Poly Report Block -Vgap=Vgap -FR-Designer_HyperLink_Must_Alone_Reset=HyperLink_Must_Alone_Reset -DS-Class=Class -FR-Hyperlink_Please_Select_Reportlet= -FS_Report_Type=Report Type -HF-New_Line=New Line -Privilege=Privilege -Export-Offline-Html=Export Offline HTML -FR-Designer_open-new-form-tip=open new form tip -FR-Designer-Widget-Style_Frame_Style= -Present-No_Present=No Present -FR-Designer_Form-Password=Password -X_Axis=X Axis -FR-mobile_html_analysis= -M_Edit-Bring_to_Front=Bring to Front -Null_Value_Show=Null_Value_Show -Datasource-JNDI_DES=Note\: .jar files containing INITIAL_CONTEXT_FACTORY class need to be copied into the Directory of $installed/lib. -PrintP-Print_Preview=Print Preview -Form-Hierarchy_Tree_Last=Last -Has_been_gone= -RWA-Add_Field=Add Field -newNode=add Node -PageSetup-Shrink_to_fit_content=Shrink to fit content -FR-Designer_Date=Date -Column_Multiple=Column Multiple -FR-App-All_File= -Sort-Descending=Descending -FR-Designer-Plugin_Delete=Delete -Above=Above -Utils-The-Chart= -FRFont-plain=plain -Calculating=Calculating -Form-Object=Form Object -May=May -FR-Designer_Plugin_Normal_Update=Update -FR-Hyperlink_Reportlet= -M_Edit-Copy=Copy -Sub_Report_Message2=The parent-report is not in the current runtime environment -Sub_Report_Message3=Can not choose itself -Sub_Report_Message1=Please choose the currect path -Form-Allow_CustomData=Allow Custom Data -FR-Server_Version_Tip_MoreInfo= -FR-Designer_Server-version-tip-moreInfo=Your own team of our FineReport Designer version number of the product as well as the deployment server version number is consistent, in order to avoid the problems caused by inconsistent versions of risk.If you open a template produced higher Designer version, may open the error may be missing the original template properties. If you create the template used Designer Version higher than your final deployment with the server version, the server may not be able to properly load the template you create. -Get_Lock=Get Lock -HF-Edit_Footer=Edit page Footer -Datasource-New_Charset=New Char Set -Preference-Custom=Custom -BackgroundTexture-Newsprint=Newsprint -ConditionB-Add_bracket=Add bracket -Datasource-Connection_successfully=Connection successfully -Function-The_class_must_implement_the_interface=The class must be interface -FR-Designer_ChartF-Transparency=Transparency -Crimson=Crimson -FR-Hyperlink_Dialog= -FR-Designer_Covered_All= -Hyperlink-New_Window=New Window -Style_Name=Style Name -CSS_warning=CSS_warning -FR-Base_Column= -Three_Rows_Of_Two_Grid=Three rows of two grid -DBCP_VALIDATION_QUERY=ValidationQuery -M_Edit-Clear_Formats=Formats -Parameter_Setting=Parameter Setting -Related=Related -BorderLayout-Constraints=Constraints -Write_Preview=Write Preview -PageSetup-Page_Order=Page Order on print -Verify-Verify_Formula=Verify Formula -State=State -FR-Designer-Widget-Style_Body_Background= -FR-App-Privilege_No= -Please_Drag_ParaPane= -Come_True=Come_True -ISEMPTY=IS_EMPTY -Background-Texture=Texture -FR-Designer_Verify-Message=Message -Locked= -Utils-Design-Action_Cancel= -Image-Titled=Titled -Gradient-Direction=Gradient Direction -Green=Green -Report_Engine=Report Engine -Return-String=Return String -Margin=Margin -Pitch_Percentage=Pitch percentage -FR-Base_TurnOff= -Utils-has_been_existed=has been existed -HF-Insert_Formula=Insert Formula -Utils-Exit_Designer=Exit Designer -Formula_Dictionary_Display=For every value($$$) in the actual values above, it's display value is -PageSetup-Left_to_right=Left to right -Utils-Import_Excel_Data=Import Excel Data -M-Save=Save -redo=redo -Status=Status -Draw= -FR-Designer_Message= -Records=Records -FR-Designer_ComboBox=ComboBox -Driver=Driver -Template_Parameters=Template_Parameters -Form-Remove_Repeat_Data=Remove Repeated Data -ECP_decode= -Area_Name=Area Name -Others=Others -Merge=Merge -BackgroundTexture-Parchment=Parchment -BindColumn-Bottom_N=Last N -Frame= -Bottom_Border_Line=Bottom Border Line -Muiti_In= -FR-Designer-Dependence_Install_Online=install online -Use_Default_ToolBar=Use_Default_ToolBar -M_Server-Platform_Manager=Platform_Manager -PageSetup-inches=inches -Form-Widget_Property=Widget Property -FR-Layout_Padding= -Schema=Schema -Server_Path=Servlet Path -Condition_Display=Condition Display -FR-Server-Design_template_unopened= -Function-Function_Class_Name=Function Class Name -Schedule-Template=Template -Tree_Data_Field=Tree Data Field -Border-Style-Normal=Rectangular -Top_And_Double_Bottom_Border_Line=Top And Double Bottom Border Line -FR-Server_Embedded_Server_Start=Server in Design-Start -FR-Designer-Basic_Restart_Designer_Later=Restart later -StyleAlignment-Top=Top -ReportServerP-First=First -Not_Exist=Not Exist -FR-Remote_File_is_Locked= -Apply=Apply -Sytle-Indentation=Indentation -Parameter-Float=Float -HF-Center_Section=Center Section -Form-Double_quotes=Double Quotes -M_File-Export-Word=Word -M_File-Export-Text=Text File -PageSetup-First_Page_Number=The Number of First Page -Execute= -Task=Task -Custom_Button_Type_Submit=Submit -FR-Designer-Widget_Settings= -IS_Need_Password=IS Need Password -PageSetup-Horizontally=Horizontally -No_Editor_Property_Definition=No Editor Property Definition -Env-Remote_Server=Remote Server -FR-Utils_Background= -FR-Designer-Plugin_Warning=Warning -Server-version-info=You open the template file is open there will be an error made ??by the later design or the risk of losing the original template attribute. Please upgrade to your designer if need to open this template -CellWrite-Page_After_Row=Page Break After Row -HF-Right_Section=Right Section -PageSetup-Title_Start_Row=Title Rows -From= -Preference-Grid_Line_Color=GridLine Color -RowTo=RowTo -FR-Designer_ReportColumns-Repeat_Column= -M_Server-Function_Manager=Function Manager -KeyWord= -DS-Multi_Dimensional_Database= -BiasD-Slope_Line=Slope Line -Tue=Tue -ReportServerP-Last=Last -FR-Base_Columns= -SpecifiedG-Leave_in_their_own_groups=Leave in their own groups -LOG-Please_Wait=Please Waiting -Form-ToolBar=Form ToolBar -FR-Base_sure_remove_item= -Component_Scale=Component Scale -Hyperlink-Use_CJK_to_encode_parameter=Use CJK to encode parameter -LOG-Has_Been_Openned=Report Has Been Openned -FR-Designer-Dependence= -ECP_error_pwd= -REPORTLET= -RWA-Column_Offset=Column Offset -Forecast=forecast -Light_Orange=Light orange -StyleAlignment-Vertical=Vertical -Form-List=List -ParameterD-Show_Parameter_Window=Show Parameter Window -FR-Designer_Set_Submit_Event= -Value_Percent=Value In Percent -DBCP_MIN_EVICTABLE_IDLE_TIMEMILLIS=MinEvictableIdleTimeMillis -Function-The_class_must_be_located_in=The class must be located in -FR-Action_Sort= -DataFunction-Average=Average -FR-Designer_Show_in_Containing_Folder= -M_File-Export-Excel=Excel -DataFunction-Max=Maximum -FR-Designer_Form-Widget_Name=Widget Name -FS_End_Date=End Date -Export-Excel-Simple=Simple -ColumnTo=ColumnTo -SpecifiedG-Discard_all_others=Discard all others -DS-TableData=TableData -Form-DataTable=DataTable -Sub_Report_ToolTips=ToolTips of Sub Report -Right_Top=Right_Top -M_Edit-Merge_Cell=Merge Cell -FR-Designer_Restore_Default=Restore Default -Component_Interval=Components Interval -Cover_None=Cover None -Datasource-From_Database=From Database -Folder=Folder -Form-Allow_Edit=Allow Edit -M_Edit-Clear=Clear -ParentCell_Setting=Parent Cell Setting -Only_selected_cell_can_paste_only=Only selected cell can paste only -M_Report-Report_Columns=Report Columns -Unit_Hundred=Hundred -FR-Designer_DataTable-Build= -Widget-Form_Widget_Config=Form Widget -Server-version-tip-moreInfo=Your own team of our FineReport Designer version number of the product as well as the deployment server version number is consistent, in order to avoid the problems caused by inconsistent versions of risk.If you open a template produced higher Designer version, may open the error may be missing the original template properties. If you create the template used Designer Version higher than your final deployment with the server version, the server may not be able to properly load the template you create. -Actions=Actions -FR-Designer-Dependence_Connect_Server_Error=connect error -High=High -HJS-Send_Failed=Send Failed -HJS-Message=Message -File-Allow_Upload_Files=Allow Upload Files -FR-Designer-Form-ToolBar_Chart= -Thick_Bottom_Border_Line=Thick Bottom Border Line -FR-Action_Remove= -FRFont-Style=Style -Select_DataColumn=Select Data Column -StartValue= -SINGLE_FILE_UPLOAD= -BackgroundTexture-Cork=Cork -M_Format-Data_Map=Data Map -FR-mobile_native_analysis= -HighLight=HighLight -FR-Designer_Dropdown-More-Preview=Drop-down for more preview -local=local -FR-Designer_Gradation=Gradation -PageSetup-Finis_Start_Column=Finis Columns -Env-Invalid_User_and_Password=Invalid User Or Password -FR-Designer-Plugin_All_Plugins=All plugins -FR-Designer_Prepare_Export=Prepare_Export -DBCP_TEST_ON_RETURN=TestOnReturn -no-alternatives=no alternatives -FR-Designer_Submmit_WClass= -M_Insert-Slope_Line=Insert Slope Line -FR-Designer-Plugin_Plugin_Description=Description -ExpandD-Not_Expand=Not to Insert Cell to Display Data -Utils-Bottom_to_Top=Bottom to Top -Collect-Click\!_Get_user_information_code=Click\! Get user information code -FR-Already_exist= -Send=Send -M_Edit-Clear_All=All -Brown_Orange=Brown Orange -PageSetup-Portrait=Portrait -FR-Designer_Form-RadioGroup=Radio Group -FR-Utils-App_AllFiles=All Files -Popup=Popup -Server_Charset=Server_Charset -CellWrite-Repeat_Content_When_Paging=Repeat Content in New Page -Utils-No_Pagination=No Pagination -Form-NullLayout=NullLayout -ConditionB-Remove_bracket=Remove bracket -email=email -Minute= -FR-Designer-Plugin_Update=Plugins to update -alraedy_close=already closed -ComboCheckBox-End_Symbol=End Symbol -DataColumn=Data Column -Form-Password=Password -FR-Background_Image_Adjust=Adjust Image -Export-Excel-PageToSheet=Page To Sheet -Edit-Row_Count=Row Count -DS-Report_TableData=Report Table Data -Sche-Hour=Hour -Group_Count=Group Count -EndValue=End Value -FR-Designer_Sytle-Indentation=Indentation -DownBarBorderStyleAndColor=DownBarBorderStyleAndColor -World=World -FR-Designer-Basic_Cancel=Cancel -Finally=Finally -Low=Low -Please_Input_The_Key=Please Input the key the map use -Smart=Smart -Preference-Predefined=Predefined -Current_custom_global= -FR-Designer-Plugin_Shop_Need_Install= -WEB-Pagination_Setting=Pagination Setting -RCodeDrawPix=PIX -FR-Designer-Widget-Style_Alpha= -BorderLayout-North=North -HJS-Current_Page=Current Page -Compile=Compile -Show_Blank_Row=Show Blank Row -TableData_Dynamic_Parameter_Setting=Dynamic Parameter-Setting -FR-Background_Image_Default=Default Image -BackgroundTexture-WhiteMarble=White Marble -DataFunction-Sum=Sum -Collect-The_user_information_code_is_invalid=The user information code is invalid -Preference-Locale=Locale -M_File-Export-PDF=PDF -BiasD-From-lower_left_to_upper_right=Lower left to upper right -Border-Style=Border-Style -Sort=Sort -Image-Image_Layout=Image Layout -Panel=Panel -FR-Designer-Basic_Copy_Build_NO_OK=Build No. has been copyed -All_Border_Line=All Border Line -FR-Utils-Please_Input_a_New_Name=Please Input a New Name -FR-Base_Formula_Plugin=Plugin Function -Two_Rows_Of_Three_Grid=Two rows of three grid -FR-Designer_Certificate_Pass= -Bubble-Series_Name=Series Name -M-New_Multi_Report=Multi Report -BackgroundTexture-PinkTissuePaper=Pink Tissue Paper -Preference-Support_Default_Parent_Calculate=Support Default Parent Calculate -Show_Blank_Column=Show Blank Column -BaiduMap=Baidu Map -Report-Web_Attributes=Web Attributes -FR-Designer_StyleAlignment-Wrap_Text=Wrap Text -Need=Need -Parameter-Double=Double -Config_Servlet=Config Servlet -Form-Comma=Comma -Verify=Verify -PageSetup-Landscape=Landscape -Weeks=Weeks -FR-Designer-Widget-Style_Title_Background= -Preference-Pagination_Line_Color=Pagination Line Color -Test_URL=Test URL -Fill_blank_Data=Fill blank Data -ReportServerP-The_name_of_printer_cannot_be_null=The name of printer cannot be empty -FR-Designer-Basic_Copy_Activation_Key=Double click to copy key to clipboard -Continuum=Continuum -BackgroundTexture-MediumWood=Medium Wood -Datasource-Column_Index=Column Index -Function-Function_File=Function File -Form-Component_Bounds=Component Bounds -Utils-Submit=Submit -Conditions_formula= -M_Insert-Image=Insert Image -FR-Designer-Plugin_Will_Be_Delete=Delete plugin -FormulaD-Functions=Functions -Mobile_Terminal=The mobile terminal -CheckBox=CheckBox -FR-Designer-Plugin_Install=Install -Sun=Sun -FR-Designer_ToolBar_Bottom=Bottom ToolBar -Widget-Width=Width -Series_Name=S_N -Set_Row_Title_Start=Set_Column_Title_Start -HF-Default_Page=Default Page -Env_Des=Env_Des -Widget-User_Defined=User Defined -Url_location=url -Disk_File=Disk File -Inside=Inside -FR-Designer_filedChosen= -ServerM-Predefined_Styles=Predefined Styles -is_need_word_adjust= -Background-Null=No Background -PageSetup-Vertically=Vertically -FR-Designer_Root=Root -FR-Designer_Form-TextArea=TextArea -ReportServerP-Import_JavaScript=Import JavaScript -Form-TableTree=Table Tree -Opened=Opened -M_Edit-Delete=Delete -Widget-Form_Widget_Container=Form Container -BindColumn-Summary=Summary -Sche-Second=Second -Server-Open_Service_Manager=Open Service Manager -FRFont-Effects=Effects -OtherGroup_Name=The name of other group -Specify=Specify -Highlight-Click_to_Choose_Property_To_Modify=Click to Choose Property to Modify -triggered= -Double_Bottom_BorderLine=Double Bottom BorderLine -M_Insert-Sub_Report=Insert Sub Report -Unit_Ten=Ten -Polybolck=Polybolck -Select_sort_order=Select sort order -HJS-Mail_to=To -StyleAlignment-Left=Left -Two_Rows_Of_Two_Grid=Two rows of two grid -FR-Designer-Form-Please_Drag_ParaPane= -Milliseconds=Milliseconds -DataFunction-None=None -Delivery=Delivery -ColumnSpan=ColumnSpan -StyleAlignment-Bottom=Bottom -Read_failure=The read failure may source file is corrupted -Verify-Verify=Verify -FR-Designer-Widget-Style_Title_Format= -FR-Designer_Edit_String_To_Formula= -FR-Base_UnSignIn= -Every= -CellWrite-Preview_Cell_Content=Preview Content of Cell -FormulaD-Data_Fields=Data Fields -FR-Designer_Role=Role -FR-Designer_Permissions=Permissions -FR-Designer_Form_Button=Button -FR-Designer_WF_Name=Name \ No newline at end of file +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_AlphaFine_Enable=enable +FR-Designer_AlphaFine_EnableAlphaFine=FR-Designer_AlphaFine_EnableAlphaFine +FR-Designer_AlphaFine_EnableInternet=Designer_AlphaFine_EnableInternet +FR-Designer_AlphaFine_EnableInternetSearch= +FR-Designer_AlphaFine_Shortcut_Config= +FR-Designer_AlphaFine_SearchRange= +FR-Designer_AlphaFine_Conclude= +FR-Designer-Plugin_Addon= +FR-Designer_Templates=FR-Designer_Templates +FR-Designer_Templates_Content= +FR-Designer_AlphaFine_ShowAll= +FR-Designer_AlphaFine_Latest= +FR-Designer_AlphaFine_ShowLess= +FR-Designer_Alphafine= \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index 4c0135daf..e1f77a53e 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/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_Cell=cell FR-Designer_Chart_Cell=Chart Hyperlink-Link Cell -FR-Designer_Chart_Float=Chart Hyperlink-Floating Element -FR-Designer_Chart_Float_chart=Chart Hyperlink-Floating Chart +FR-Designer_Chart_Float=Chart Hyperlink-Floating Elements +FR-Designer_Chart_Float_chart=Chart Hyperlink-Floating-window Chart 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_Close=close @@ -100,7 +100,6 @@ FR-Designer_FS_Close_Other_Templates=Close other templates FR-Designer_File=file FR-Designer_Filter_Conditions=Filter condition FR-Designer_Finish-Modify-Share=Finish Modification And Share -FR-Designer_Fit-App=App self-adaption FR-Designer_Fit=self-adaption FR-Designer_Font-Family=Font name FR-Designer_Font-Size=Font size @@ -119,7 +118,7 @@ FR-Designer_Get-CubeGetting cube= FR-Designer_Help=Help FR-Designer_Hide=Hide FR-Designer_Hyperlink=Hyperlink -FR-Designer_Hyperlink-Form_link=Current dashboard object +FR-Designer_Hyperlink-Form_link=Current form object FR-Designer_IDCard=IDCard FR-Designer_Icon=Icon FR-Designer_Index=index @@ -127,7 +126,7 @@ FR-Designer_Input_Rule=Input Rule FR-Designer_Language_Default=Default FR-Designer_Layout=Layout FR-Designer_Layout-HBox=Horizontal Box Layout -FR-Designer_Layout-Index=Index +FR-Designer_Layout-Index=Layout Index FR-Designer_Layout_Constraints=Layout Constraints FR-Designer_Length=Length FR-Designer_Loading_Data=Loading Data @@ -174,12 +173,12 @@ FR-Designer_Search=Search FR-Designer_Set=Set FR-Designer_Share-Template=Share Template FR-Designer_Simple_general=Simple custom query -FR-Designer_Song_TypeFace=Song typeface +FR-Designer_Song_TypeFace=song typeface FR-Designer_Start-Date=Start Date FR-Designer_Subscript=Subscript FR-Designer_Superscript=Superscript FR-Designer_Support_QQ=Support online -FR-Designer_Swatch=Sample +FR-Designer_Swatch=Swatch FR-Designer_Tab_title=Tab title FR-Designer_TableData=Data set FR-Designer_Thank_guest=Special thanks to @@ -191,8 +190,8 @@ FR-Designer_Underline=Underline FR-Designer_Used=Recently Used FR-Designer_User-defined-MDX=Custom MDX query FR-Designer_SampleText=SampleText SampleText -FR-Designer_Vertical-LeftToRight=Vertical Text (left to right) -FR-Designer_Vertical-RightToLeft=Vertical Text (right to left) +FR-Designer_Vertical-LeftToRight=Vertical Text (Left to Right) +FR-Designer_Vertical-RightToLeft=Vertical Text (Right To Left) FR-Designer_VerticalBoxLayout=Vertical Box Layout 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. @@ -359,7 +358,6 @@ FR-Designer_KeyPoint=KeyPoint FR-Designer_loadedTreeModel=loadedTreeModel FR-Designer-Failed_to_load_the_plugin=Failed to load the plugin\uFF0Cplease update the plugin\: FR-Designer-Plugin_Please_Update_Jar=Please Update Jar -FR-Designer-Invalid_Page_Number=Invalid Page Number FR-Designer_XMLA_Database=DB FR-Designer_XMLA_UserName=User name FR-Designer_XMLA_Password=Password @@ -415,12 +413,12 @@ FR-Designer_Unit_PT=Pound FR-Designer-Write_Auto_Stash=auto stash FR-Designer_Printer_Native_Button=Native Print 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_Error=Error FR-Designer_formDesignerModule=Form Designer FR-Designer-Website_Url=http\://www.finereport.com/en -FR-Designer-BBSLogin_Download-Unlogin-Tip=Login to download +FR-Designer-BBSLogin_Download-Unlogin-Tip= FR-Designer-App_ReLayout=AppRelayout FR-Designer_Mobile-Attr=Mobile Attr FR-Designer_Mobile-Vertical=Vertical Screen @@ -434,42 +432,42 @@ FR-Designer_COMMUNITY_NEED=need FR-Designer_COMMUNITY_BUG=bug report FR-Designer_COMMUNITY_SIGN=sign FR-Designer_COMMUNITY_QUESTIONS=questions -FR-Designer_Mobile-Zoom=Zoom +FR-Designer_Mobile-Zoom=zoom FR-Designer_Mobile-Open=Open -FR-Designer_Mobile-Warning=Max height cannot exceed 80% of display area +FR-Designer_Mobile-Warning= FR-Designer_Button-OK=OK FR-Designer_Button-Cancel=Cancel FR-Designer_Write-Save-Formula=Preserve formula when fill FR-Designer_Export-Save-Formula=Preserve formula when export -FR-Designer_Form-Fit-Tip=Adaptive plug-in -FR-Designer_Form-Frozen-Tip=When use Frozen, suggest install -FR-Designer_Form-Forzen-Speed=, use bidirectional and horizontal adaption to improve the speed. -FR-Designer_Attention=Attention -FR-Designer_Forbid_Widgets_Intersects=Forbid component overlap +FR-Designer_Form-Fit-Tip=Fit Plugin +FR-Designer_Form-Frozen-Tip=When Use Form Frozen, Suggest Install +FR-Designer_Form-Forzen-Speed=To Speed UP. +FR-Designer_Attention=attention +FR-Designer_Forbid_Widgets_Intersects=Forbid Widgets Intersects FR-Designer_Widget_Scaling_Mode_Fit=Area-Fit FR-Designer_Widget_Scaling_Mode_Fixed=Area-Fixed -FR-Designer-Widget_Area_Scaling=Component area scaling -FR-Designer-Widget_Scaling_Mode=Scaling mode +FR-Designer-Widget_Area_Scaling=Widget Area Scaling +FR-Designer-Widget_Scaling_Mode=Widget Scaling Mode FR-Designer-QQLogin-Determine=Determine FR-Designer-QQLogin-Cancel=Cancel -FR-Designer-Reuse_Manager=Component management -FR-Designer_TableData-Default-Para=Default parameter -FR-Designer_Layout_Block_Absolute=Absolute layout block -FR-Designer_Layout_Block_Tab=Tab block -FR-Designer_Layout_Block_Blank=Blank block -FR-Designer_Attr_Layout=Layout -FR-Designer_Attr_Layout_Type=Layout type -FR-Designer_Attr_Bidirectional_Adaptive=Bidirectional adaptive -FR-Designer-Selected_Widget=Selected widget -FR-Designer_LocalWidget=Local component library -FR-Designer_AllCategories=All categories -FR-Designer_Download_Template=Download components -FR-Designer_Install_Template=Install components -FR-Designer_Delete_Template=Delete components -FR-Designer_Mobile-Refresh=Refresh -FR-Designer_Mobile-ToolBar=Toolbar +FR-Designer-Reuse_Manager=Reuse Manager +FR-Designer_TableData-Default-Para=Default Para +FR-Designer_Layout_Block_Absolute=Absolute Layout Block +FR-Designer_Layout_Block_Tab=TabLayout +FR-Designer_Layout_Block_Blank=Blank Block +FR-Designer_Attr_Layout=layout +FR-Designer_Attr_Layout_Type=layout type +FR-Designer_Attr_Bidirectional_Adaptive=Bidirectional Adaptive +FR-Designer-Selected_Widget=selected widget +FR-Designer_LocalWidget=local widget +FR-Designer_AllCategories=all categories +FR-Designer_Download_Template=download template +FR-Designer_Install_Template=install template +FR-Designer_Delete_Template=delete template +FR-Designer_Mobile-Refresh=refresh +FR-Designer_Mobile-ToolBar=toolbar 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_Language_Change_Successful=New language setting will be enabled when designer is restarted FR-Designer_Template_Web_Attributes=Web Attributes @@ -488,10 +486,6 @@ FR-Designer-DS-Database_Query=DB Query FR-Designer_Is_Share_DBTableData=Shared data set FR-Designer_Event=Event 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_Exported_successfully=Exported successfully FR-Designer_Exporting=Exporting @@ -514,21 +508,8 @@ FR-Designer_Form_Basic_Properties=Basic Property FR-Designer_DS_Dictionary=Data Dictionary FR-Designer_Create_Tree=Build Tree FR-Designer_Set_Callback_Function=Set Callback Function -FR-Designer_ConfirmDialog_Content=Confirm to delete Tab Control -FR-Designer_ConfirmDialog_Title=FineReport 8.0 -FR-Designer_FormulaPane_Tips=Tips\:You can input B1 to get the data in the second cell of the first row -FR-Designer_FormulaPane_Variables=Variables -FR-Designer_FormulaPane_Formula_Description=Formula Description -FR-Designer_FormulaPane_Function_Detail=Function Detail -FR-Designer_FormulaPane_Search=Search -FR-Designer_Tab_carousel=Tab carousel -FR-Designer_setCarousel=Start -FR-Designer_carouselInterval=Interval -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_ConfirmDialog_Content= +FR-Designer_ConfirmDialog_Title= 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 @@ -536,39 +517,6 @@ 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_Null=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 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_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-Move_Tab_First=move to first -FR-Designer-Move_Tab_End=move to end -FR-Designer-Move_Tab_Next=move to next -FR-Designer-Move_Tab_Prev=move to previous -FR-Designer_DS_TableData=Data Set -FR-Designer_Parameter-Formula=Formula -FR-Designer_Plugin_Should_Update_Please_Contact_Developer=Plugin version is too low, and is not compatible with current API. Please contact the developer to update. -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. FR-Designer_Background_Null=No Background FR-Designer_Background_Color=Color FR-Designer_Background_Texture=Texture @@ -577,1418 +525,21 @@ FR-Designer_Background_Gradient_Color=Gradient Color FR-Designer_Background_Image=Image FR-Designer_Background_Clear=Clear FR-Designer_Background_Image_Select=Select Picture +FR-Designer_Tab_carousel= +FR-Designer_setCarousel= +FR-Designer_carouselInterval= FR-Designer_Initial_Background_Tips=Initial background of the button FR-Designer_Mouse_Move_Tips=Move the mouse to the button on the background, in the absence of not changing the background FR-Designer_Mouse_Click_Tips=The background of the mouse to click the button, in the absence of not changing the background -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_Too_Large_To_Paste=Too large to paste! -FR-Designer_Too_Small_To_Paste=Too small to paste! -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_Style=Style -FR-Designer_Color=Color -FR-Designer_Border=Border -FR-Designer_Background-Pattern=Pattern -FR-Designer_SimpleDetail_Report= -FR-Designer_SimpleCross_Report= -FR-Designer_Edit_Button_ToolBar=Edit Button ToolBar -FR-Designer_Remove_Button_ToolBar=Remove Button ToolBar -FR-Designer_Get-CubeGetting= -FR-Designer_DoubleLayer_Report= -FR-Designer_Get-Cube= -CellWrite-InsertRow_NULL=Null -DashBoard-ChartFloat=Chart -contact_info=Contact information (optional) -Page_Setup=Page Setup -CellWrite-Print_Export=Print/Export -Cannot_Get_Date=Can not get date -FR-Designer_Modify=Modify -M-Write_Preview=Filling Preview -FR-Base_RWA-Key=Key -China=China -Set_Legend_Sytle=Set Legend Format -FR-Designer_Number=Number -FR-Designer-Widget-Style_Common=Common -M-Save_As=Save As -Following_parameters_are_not_generated=The following parameters are not generated -FR-Designer-Basic_Activation_Key_Copy_OK=Key has been copy to clipboard -Utils-Current_Sheet=Current Sheet -ConditionB-is_less_than=less than -BorderLayout-West=West -AnalysisLine=Line -Layer_Report_Warnning_info=Line report engine is suitable for large data.
Many report features will no longer support if use it,
more information in helpdocument. -Tree-Width=Tree Width -alert_word=Export without fixed height, cell hight will change according to the content and pagination position will different from the preview result. -PageSetup-Paper_Size=Paper Size -M-Page_Setup=Page Setup -DashBoard-FormBook=Form -X-Coordinate=Horizontal axis -Style-Line_Spacing=Line Spacing -FR-Designer_Plugin_Should_Update_Title=Warning -Server-Define_Data_Connection=Define Data Connection -BarInside=Bar Inside -Border-Color=Border Color -NotAllow=Invalid -Utils-File_type=File type -FR-Designer-Plugin_Install_From_Local=Install plugin from local file -Summary_Method=Summary Method -Select_Specified_Grouping=Select custom group -HF-Number_of_Page=Total Number of Page -FR-Designer-Tree_Height=Tree Height -Owner=Owner -Home=Home -FR-Server_Embedded_Server_Stop=Built-in server-Stop -FR-Designer-Plugin_Detecting_Update=Checking for updates -HF-Whether_to_define_the_selected_type=Whether to define the selected type -StyleAlignment-Right=Right -FR-Designer_Alignment-Style=Alignment Style -PageSetup-Title_Start_Column=Duplicate Title Columns -Tree-Mutiple_Selection_Or_Not=MultiSelect -FR-Designer-Plugin_Search=Search -Choose_Role=Access Control -Append_Delete_Row_Message=Warning! Please set extended properties of the specified cell. -Form-ComboBox=Drop-down Boxes -PageSetup-Footer=Footer -Sorting=Sorting -DBCP_TEST_WHILE_IDLE=Open Idle Connections Recyclers Test -DS-Embedded_TableData=Built-in Data Set -FR-Designer_No-Privilege=No Privilege -FRFont-Subscript=Subscript -Background_Settings=Background Settings -FormulaD-Invalid_Formula=Invalid Formula -FR-Base_Margin=Margin -FR-Designer-Plugin_Shop_Installed=Plug-shop installed, whether to start immediately? -M_Edit-Send_to_Back=Send to Bottom -Email-Can_Preview_Report_Content=Preview Report Content in the Body -FR-Designer-FRFont_Italic=Italic -CellWrite-Print_Background=Cell Background -Wizard=Wizard -Preference-Is_Drag_Permited=Support drag-and-drop -FR-Designer_Release_Lock=Unlock -Form-Delimiter=Separator -wrong=wrong -FR-Menu-Server_Chart_PreStyle=Chart Predefined colors -Form-Button=Button -FormulaD-Valid_Formula=Valid Formula -ParameterD-Parameter_Interface=Parameter Interface -At_least_one_visual_worksheet=A workbook must contain at least one visible worksheet. If you want to delete, please insert a new worksheet. -Need_Min_Value=Need Min Value -Allow_Blank=Allow Null -CellWrite-InsertRow_DEFAULT=Default -Widget-Load_By_Complete=Full load -FR-Designer-Basic_Only_Submit_Current_Sheet=Submit Current Sheet Only -Sort-Sort_Order=Sort -File-File_Size_Limit=File Size Limit -PrintP-Print=Print (T) -FR-Designer-StyleAlignment_Center=Center -Preference-Setting_Colors=Colors Setting -Judge=Judge -Image-Adjust=Adaptive -Collect-User_Information_DES=Simply click on the "get activation code" button above, a new browser window will pop up. Then visit the product's official website to obtain an completely free activation code, the entire process takes only 3 minutes -FR-Designer_Plugin_Normal_Update_From_Local=Update from local file -BackgroundTexture-Canvas=Canvas -BarOutSide=Bar Outside -Preview_ToolTips=Preview ToolTips -FRFont-Family=Name -FR-Lic_does_not_Support_Remote=Current lic does not support remote design, please update the lic -InterfaceStyle=Style -RWA-Key=Key -WF-Name=Name -RWA-Click_Cell_To_Edit_Value=Click Cell to Edit Value -Utils-Row_Height=Row Height -ReportD-Excel_Export=Export Attributes -Form-Please_Select_A_Kind_Of_Form_Container=Select A Form Container -Column_Does_Not_Exsit=Column Does Not Exsit -M_Insert-Hyperlink=Hyperlink -can_not_include_underline=Can not contain "_" -FR-Designer-Plugin_Jar_Expired=Jar Expired -FR-Background_Image_Extend=Extend Image -TopDownShade=Gradient(vertical) -FR-Base_Right=Right -DataBinding=Data Binding -ConnectionPool_Attr=Connection Pool Attributes -Connect_SQL_Cannot_Null=Data Connection and SQL Cannot be Null -DBCP_MAX_ACTIVE=Max Active Connections -M_Window-Preference=Options -ToolBar_Top=Top ToolBar -FR-Designer_Indent-Pixel=Pixel -FR-Designer_Unit_MM=MM -IDLE=Idle -FRFont-Underline=Underline -FR-Designer-Plugin_Read_Plugin_List_Error=Error when reading plugin list -Type_Set=Type Setting -M_Format_A-Cell_Attributes=Other Attributes -CellWrite-Show_As_Image=Show As Image -ShowAsDownload=Display the binary content using download link -Form-ComboCheckBox=Drop-down CheckBox -BackgroundTexture-WovenMat=Woven Mat -BindColumn-Custom_Data_Appearance=Custom displays -Actived=Active -Env-Local_Directory=Local Directory -Form-Colon=Colon -Preference-Vertical_Scroll_Bar_Visible=Vertical Scroll Bar Visible -Utils-Show_Cell_Value=Show Cell Value -FR-Designer_ReportColumns-Repeat_Row=Copy row sequence -SpecifiedG-Specified_Group=Custom Group -RWA-Smart_Add_Cells=Smart Add Cells -HF-Left_Section=Left Section -M_Report-Report_Background=Report Background -Image-Extend=Stretch -FS_BI=Decision-making platform -ToolBar_Bottom=Bottom ToolBar -Hgap=Horizontal gap -FR-Designer_Enter-New-FileName=Enter New File Name -Verify_Fail=Validate Failed -CellWrite-InsertRow_Policy=Policy of Insert Row -FR-Designer-Plugin_Illegal_Plugin_Zip=Illegal plugin zip -RCodeVersion=Version -Convert=Convert -Please_Drag=Please drag in row fields, column fields and rollup fields -FR-Designer-Widget-Style_Preview=Preview -mobile_number=Mobile Number -FR-Designer_Form-ComboCheckBox=Dropdown CheckBox -CacheValidateTime=Cache valid time -Hyperlink-Extends_Report_Parameters=Inherit Report Parameters -FR-Designer_Values-Editor=Values Editor -Export-Excel=Excel -Utils-Left_to_Right=Landscape -ExpandD-Vertical_Extendable=Vertically -Utils-Report_Runtime_Env=Report working directory -Utils-Right_to_Left=From right to left -Utils-Beyond_the_top_side_of_Border=Beyond top border -Exception_StackTrace=Exception StackTrace -Corresponding_Fields=Corresponding Fields -Form-CheckBox=CheckBox -Utils-Current_Row=Current Row -BuildIn=Built-in -BindColumn-Results_Filter=Result Filter -FR-Designer-Plugin_Manager=Plugin Management -M_File-Export-CSV=CSV(comma delimited) -Data_Filter=Data Filter -ReportServerP-Edit_Printer=Edit Printer -FR-Designer_Datasource-Stored_Procedure=Stored Procedure -RESTART=Restart -FormulaD-Function_name=Function Name -ChooseOneButton=Please chose one control -Priority=Priority -Datasource-Datasource=Data Source -FR-Designer_Width=W -Cannot-Add_To_This_Area=Cannot Add To This Area -Run=Run -Set_Submit_Condition=Submit Condition -FR-Base_Value=Value -fileLocked_undeleted=Template is locked, you can not delete\! Click OK to refresh the templates list -Web_Apply=Web Application -Refresh_Database=Refresh database -Set_Row_Title_End=Set Duplicate End Rows -FR-Utils-New_Folder=New Folder -BiasD-From-upper_left_to_lower_right=upper left-lower right -CapsLock=CapsLock -StyleFormat-Sample=Sample -RWA-Smart_Add_Cell_Group=Smart Add Cell Group -MConfig-CancelButton=Cancel -Function-Choose_Function_Class=Choose Function Class -LatLng=Lat and Lng -DS-Server_TableData=Server Data Set -BackgroundTexture-GreenMarble=Green Marble -read_time_out=Load Timeout -JavaScript-Commit_to_Database=Commit to DB -DS-Relation_TableData=Linked Data Set -CellWrite-Page_Before_Row=Before Row -FR-Designer-Plugin_Load_Plugins_From_Server=Loading data from plugins store -D-Dispaly_Divide_Result_Set_into_Groups=Grouping on Result Set -Closed=Closed -RWA-Help=Set "No update if no modidy", so if cell is not modified, the record will not update; it improves filling and submit performance when data is large. -FR-Designer-Widget-Style_Custom=Custom -FR-Designer-Widget-Style_Render_Style=Rendering style -Highlight-Barcode=BarCode -FR-Designer_Connect_SQL_Cannot_Null=Data connection and SQL panel cannot be Null -trigger=trigger -M-Data_Analysis=Data Analysis -Function-The_selected_file_cannot_be_null=The select file cannot be null -No-Privilege=No Privilege -ReportColumns-Repeat_Column=Copy column sequence -SecondGraduationUnit=Minor Graduation Unit -Form-Widget_Property_Value=Attribute Value -GIVE-NAME=Give Name -FR-Designer_Rename=Rename -Utils-Merge_Cell=Merge Cells -Style-Spacing_After=After Paragraph -Enlarge_Or_Reduce=Zoom -Tree-Height=Tree Height -RCodeErrorCorrect=Error-correction -Enter-New-FileName=Enter New File Name -try_resending=Please try resending -M-Open_Report=Open... -Please_Select=Please Select -InRow=InRow -Form-TextArea=Text Fields -FR-Designer_Https_Enable=Start https -Widget-Custom_Widget_Config=Custom control -already_exists=Already exists -Original_Marked_Filed=Original Tag Field -BackgroundTexture-Sand=Beach -Values=Values -Not_use_a_cell_attribute_table_editing=You may not use a cell attribute table editing -Root=Root node -cycle=Cycle -open-new-form-tip=open new form tip -Support-Current_Auto_Complete_Shortcut=Current Shortcut key -GROUPING_MODE=Ordinary Grouping -DBCP_MAX_IDLE=Max Idle Connections -BackgroundTexture-BlueTissuePaper=Blue Sandpaper -ReportD-Export_Hided_Row=Export hidden Row -FR-Custom_styles_lost=Custom style lost -Env-Des2=Servlet position should like "http\://localhost\:8080/WebReport/ReportServer",contains host name, port, web application and servlet. Input the upper items and the system will automatically generate a servlet position for you. -Env-Des1=Please select the WEB-INF directory where the Report Server is in -PageSetup-Placement_Center_on_Page=Center on Page -sure_to_delete=sure to delete -Already_exists_not_add_repeat=Already exist, please do not repeat -Axis_Title=Axis title -FR-Designer-Plugin_Install_Failed=Install failed -FR-Designer-Widget-Style_Frame=Frame -MainGraduationUnit=Major Graduation Unit -Second_Axis=Secondary Axis -Classifier-Ge=Piece -MSBold=MS YaHei -Form-Design_Size=Form Design Size -FR-App-Template_Save=Save -ExpandD-Horizontal_Extendable=Horizontally -RP_Authority_Edit=Permission -Warnning=Warning -RoleName_Can_Not_Be_Null=Role name can not be null or duplicate -Application=Applications -Formula_Dictionary_Display_Examples_Html=Real value range is \ -ECP-error_pwd=Password Error -FR-Hyperlink_ChartHyperlink=Chart Hyperlink -M_Edit-FormatBrush=Format Painter -Indent-Pixel=Pixel -FR-Designer-Widget-Style_Border_Line=Border weight -Widget-Default_Widget_Config=Basic control -Version-does-not-support=Current lic does not support remote design, please update the lic -StyleAlignment-Right_To_Left=Right To Left -Style-Spacing_Before=Above Paragraph -Has_Existed=Already Exist -FR-Designer_DisplayNothingBeforeQuery=Display Nothing Before Query -Still=Still -JS_WARNING2=\ Ex: http\://localhost\:8075/WebReport/demo.js -JS_WARNING1= \ WebReport is a relative report project directory, there is a test.js in WebReport\\js,
 the relative path is js/test.js -Connectionline=Connection Modes -Utils-Insert_Record=Insert Record -Set-Parameter-Name=Set parameter name first -More-information=More information -Parameter-Boolean=Boolean -FRFont-Strikethrough=Strikethrough -Server-version-tip=The version of the server you are connecting is older than the Designer, continue to connect, some attributes you are editing may not be saved. Please conform the versions of FineReport Designer and the deployment server are consistent. -Form-All_Files=All Files -DBCP_NUM_TEST_PER_EVCTION_RUN=Recycled and Tested Idle Connections -FR-Designer-FRFont_Family=Name -Device=Device -M_Insert-Cell=Cell Element -Present-Formula_Present=Formula Present -FRFont-Superscript=Superscript -CellWrite-Page_Before_Column=Before Column -Golden=Golden -Preference-Support_Cell_Editor_Definition=Support Cell Editor -M-Page_Preview=Page Break Preview -HJS-CC_to=CC -Tree-Select_Leaf_Only=Only return leaf node -Pointer-A-Tick-Order=Pointer value and unit value' s order of magnitude -Pink=Pink -StyleAlignment-Distibuted=Justify -Odd=Odd -already-saved=Already saved -FR-Hyperlink_Chart_Cell=Chart Hyperlink-Link Cell -Style-Left_Indent=Left Indent -Offline=Offline -Form-Hierarchy_Tree_Next=Next -Needle=Pointer -GoogleMap=Google Map -Running=Running -M_Edit-Unmerge_Cell=Un-merge Cell -Out_Border_Line=Outside Border -Style-Spacing=Spacing -FR-Utils_Submit=Submit -ReportServerP-Previous=Previous -StyleAlignment-Text_Style=Text control -RelatedChart=Linkage between charts and tables -ProcessManager=Process Management -Cancel_Repeat_Attributes=Cancel duplicate rows and columns -FR-App-File_Message=Message -Datasource-Stored_Procedure=Stored Procedure -RWA-Row_Offset=Row Offset -M_Format-Style=Style -detail_description=Detailed description -FR-Designer-Widget-Style_Title_Content=Title Content -ParameterD-Report_Parameter=Report Parameter -HF-Edit_Header=Edit Page header -Sytle-FRFont=Font -FR-Designer_Finish_Export=Export Finished -MultiFileUpload=MultiFile Upload -HF-Page_Number=Page Number -Style-Right_Indent=Right Indent -Desktop=Desktop -FR-Server-All_Error=Error -ConditionB-Operator=Operator -Today=Today -Form-Widget_Name=Control Name -Covered_All=Override All -Day=Day -External=External -Black_Font=Black Font -LOG-Report_Server_IS_Started=Report Server is Started -Tips\:You_Can_Input_B1_To_Input_The_Data_Of_The_First_Row_Second_Column=Tips\:You can input B1 to get the data in the second cell of the first row -FR-Designer_ChooseOneButton=Please chose one control -Widget-Sizing=Sizing -NO_Border_Line=NO Border -Cell_Data=Cell data -StyleAlignment-Vertical_Text=Vertical Text -Label=Label -Orange=Orange -zeroMarginWarn=The printer exist the physical margins
report page margin settings the small can
can print content insufficiency.
  -Widget-Date_Selector_Return_Type=Return value type -Utils-Switch_To_Template_Reportlet=Switch to template web report -satisfy=satisfy -FR-Designer_WidgetDisplyPosition=Control DisplyPosition -FR-Base_Top=Top -FR-Designer_Form-CheckBox=CheckBox -Reportlet-Parameter_Type=Parameter passing mode -sending=sending... -FR-Designer-FRFont_Foreground=Foreground -FR-Import-Export_SVG=SVG -M_Edit-Clear_Contents=Content -Session=Session -Widget-Load_Type=Load -template_unsaved=template can not be saved -check_communication=Please check the network communication is normal and the server is running -List-Need_Head=Need List Head -FR-Designer-Plugin_Has_Been_Installed=Plugin has been installed,switch to plugin updates to update it. -FR-Widget_Tree_And_Table=Control tree and control table -FR-Base_Help=Help -FR-Designer-Plugin_Update_Successful=Update successfully, restart the sever to enable it -August=August -LOG-Is_Being_Openned=Is Being Openned -BackgroundTexture-Oak=Oak -Multi_nam_formula=\ data set name\: -TurnOn=TurnOn -HJS-Send_Successfully=Send Successfully -Mon=Mon -Inner_Parameter=Built-in Parameter -Required=Required -Summary=Summary -template_unopened=unable to open template -FR-Base_Bottom=Bottom -DataFunction-Min=Minimum -StyleFormat-Percent=Percentage -FR-App-All_Custom=Custom -M_Insert-Data_Column=Insert Data Column -PLEASE=Please -Numbers=Numbers -Release_Lock=Unlock -Background-Background_is_NULL=No Background -FR-Designer_Sytle-FRFont=Font -Gradation=Gradation -The_current_list_is_empty=The current list is empty -Formula_Dictionary_Display_Examples=\Real value range is \ -Schedule-Template_Parameter=Template Parameter -JSShow=Dynamic display -Level_coordinates=Hierarchy coordinate -MainGraduationLine=Major Graduation Line -Hyperlink-Web_link=Web link -StyleAlignment-between_-90_and_90=between -90 and 90 -FormulaD-Custom_Function=Custom Function -FR-Designer_Integer=Integer -PageSetup-Finis_Start_Row=Duplicate Last Row -RWA-Remove_Field=Remove Field -Form-Desin_Width=Form Design Width -No-tableData=Return no dataset -Page_Total=Total -FR-Designer-Plugin_Connect_Server_Error=Error to connect plugin store, try again later -Import-Excel_Source=Excel Source Files -Utils-Left_to_Right_a=From left to right -ExpandD-Expand_Attribute=Extension Attributes -Report-Write_Attributes=Filling Attribute -Utils-Current_Column=Current Column -Need_Max_Value=Need Max Value -Report_Not_Exist=Report Not Exist -HF-Insert_Content=Insert -UpParent=Upper parent cell -PageSetup-Page=Page -Utils-Move_Up=Move Up -BackgroundTexture-PurpleMesh=Purple Grid -Export-Word=Word -ServerM-Widget_Manager=Control management -FR-Designer-Basic_Activation_Key=Activation Key\: -FR-App-Template_Report_Not_Exist=Report Not Exist\! -Protected=Protect -Skip=skip -FR-Designer_PageSetup-Vertically=Vertically -revert=revert -PageSetup-Predefined=Predefine -Border-Style-Radius=Border-radius -IntPart=Integer part -ExpandD-Data_Column=Data Column -Sort-Ascending=Ascending -FR-Designer-Widget_Style=Style -parameter_name_exist=The parameter name already exists -FR-Designer_Layer-Build=Layered Build -Please_Rename=Please Rename -Form-Editing_Listeners=Event editing -RWA-Smart_Add_Fields=Smart Add Fields -FR-Designer-Tree_Width=Tree Width -Record=Record -Poly-Report_Component=Aggregate Report Component -Options=Options -NS-war-remote=Error codes\:1117 Compression deployment does not support remote design -Sche-Minute=Minute -Three_Rows_Of_Three_Grid=A grid with 3 rows and 3 columns -WorkSheet=Free Report -FR-Designer-Widget_Size=Control Size -BindColumn-Select=List -FR-Widget_Mobile_Terminal=Mobile Terminal -FR-Background_Image_Titled=Titled Image -SetPrinterOffset=Printer Offset -FR-Designer-Plugin_Installed=Installed -FR-Designer-Hyperlink_Name=Name -FR-Designer_Form-Button=Button -Black=Black -FR-Designer-Widget-Style_Border_Color=Border Color -Set_Submit_Event=Set Submit Event -PDF-Print_isPopup=Whether display a popup settings box -LayerPageReport_CountPerPage=Number of records per page -Display_Modes=Display Modes -RowSpan=Row Span -Datasource-Test_Connection=Test Connection -Function-Function_Manager=Function Manager -Host_Name=Host Name -CellWrite-Show_As_HTML=Show As HTML -FR-Designer-Widget-Style_Shadow=Shade -FR-Designer_Parameter_String=String -Form-SupportTag=Displayed as label -ReportD-Report_Write_Attributes=Report filling attributes -DataFunction-Count=Count -Top_And_Thick_Bottom_Border_Line=Top and thick bottom border -Client=Client -BindColumn-Result_Serial_Number_Start_From_1=Serial Number Starts From 1 -History=History -Already_exists=Already exist, please input again -Datasource-Original_Charset=Original Code -FR-Base_Left=Left -ReportServerP-Next=Next -BindColumn-Top_N=Top N -Animation_Special=Special Effect -Widget-Chart_Widget_Config=Chart control -FR-Designer-Plugin_Cannot_Update_Not_Install=Cannot update, please confirm it is installed correctly -After_Changed_Some_Attributes_Are_Different=Some attributes will be changed after conversion, whether to continue? -PieStyle=Pie Style -HF-Are_you_sure_to_delete_it=Are you sure to delete it -Utils-Design-File_Open=Open -FR-Utils_Label=Label -Data-Label=Label -M_Insert-Text=Insert Text -Form-View_Tree=View Tree -M_Insert-Chart=Insert Chart -HF-Even_Page=Even Page -ReportServerP-Report_server_parameter=Report Server Parameter -JavaScript-Form_Submit=Form Submit -Horizontal-Split_Layout=Horizontal partitioning layout -BorderLayout-Center=Center -INFO-Reset_Webapp=Reset Application Server -FR-Designer_Text=Text -IN_and_INOUT_type_not_as_cursor=IN and INOUT type canot be cursor -Main_Axis=Primary axis -M_Edit-Cut=Cut -Utils-The_Name_has_been_existed=The name already exists -FR-Background_Image=Image -Character=character -Unit_Thousand=Thousand -Test=Test -Utils-Would_you_like_to_save=Would you like to save -HF-Header_and_Footer=Header and Footer -LIST_MODE=List Mode -HF-Insert_Image=Insert Image -FR-Designer-Widget-Style_Standard=Standard -FR-Designer_Form-List=List -BackgroundTexture-Denim=Denim -Execute_Report_by_Layer_Engine=Execute report by line report engine -M_Edit-Bring_Forward=Bring to Forward -Choose_All=Select All -Form-RadioGroup=Radio Button Group -FR-Base_Remove=Delete -FR-Remote_Connect2Server_Again=Connection break, whether to reconnect the sever -Semicolon=Semicolon -StyleFormat-Category=Category -Report_Template=Report Template -Utils-Beyond_the_right_side_of_Border=Beyond right border -BackgroundTexture-Papyrus=Papyrus -LayerPageReport_PageEngine=Use page-based computations and separately execute report -Schedule-The_selected_file_must_be_end_with_filter=The selected file must end with '.cpt' or '.class' or '.frm' -Provide=Provide -FormulaD-Math_&_Trig=Math and Trig -FR-Designer-StyleAlignment_Right=Right -Error_TableDataNameRepeat=\ already exsits in Server DataSet or the name is repeated. -Choose_None=Deselect -File-tree=File tree -FRFont-bold=Bold -FR-Designer_Set_Submit_Condition=Submit Condition -Form-Change_Widget_Name=Change Control Name -ReportColumns-Report_Columns=Multi-columns/lines display -Can_not_use_FormatBursh=Can't use format painter in multiple selections -CellElement-Property_Table=Cell Attribute Table -Dictionary-Dynamic_SQL=Dynamic SQL -FR-Designer_Form-CheckBoxGroup=CheckBoxGroup -DBCP_TIME_BETWEEN_EVICTIONRUNSMILLIS=Sleep Time of Idle Connections Recyclers -ReportD-Export_Hided_Column=Export hidden column -Preference-Support_Undo=Support Undo -FR-mobile_report_analysis=report analysis -Month=Month -Utils-Column_Width=Column-W -Collect-Use_Designer=Use Designer -Widget-User_Defined_Editor=Predefine editor, you can only change its properties in control mangement menu. -Unit_Ten_Thousand=Ten Thousand -Data_Setting=Data Setting -ECP_input_pwd=Enter your password\: -period=period -Note=Note -Multiline=Multi-line edit -Datasource-Convert_Charset=Encoding Conversion -DashBoard-ConnectionList=Data Connection -Utils-Submit_Forcibly=Submit forcibly -Parent_Marked_Field=Parent Tag Field -Logout=Logout -FR-Designer_Show_Blank_Row=Supplement blank line -FR-Base_Format=Format -FR-App-Export_png=png -Delete_Column=Delete Column -SecondGraduationLine=Minor Graduation Line -SpecifiedG-Groups=Groups -CONTINUUM_MODE=Continous grouping -Datasource-Connection_failed=Connection Failed -CategoryName=Category Name -DBCP_INITIAL_SIZE=Initialize Connections -Colors=Colors -FR-Import-Export_CSV=CSV(comma delimited) -FR-Designer-StyleAlignment_Left=Left -BackgroundTexture-PaperBag=Paper Bag -RWA-BuildIn_SQL=Built-in SQL -SingleLayer=Single Layer -Or-you=or you -FR-Designer_Certificate_Path=Certificate Path -Utils-Last_Page=Last Page -BarCodeD-Drawing_Text=Display Barcode Text -Warning-Template_Do_Not_Exsit=Template do not exsit -BindColumn-Group=Group -Export-SVG=SVG -Plane3D=Plane 3D -SessionID=sessionID is session ID parameter in current template -FR-Designer_Height=H -HF-Odd_Page=Odd Page -About-All_Rights_Reserved=All Rights Reserved -Utils-Current_Cell=Current Cell -Web_Preview_Message=Please save the template in the current runtime environment directory -FR-Hyperlink_Chart_Float=Chart Hyperlink-Floating Elements -Dic-Data_Query=Data Query -CellWrite-Print_Content=Content of Cell -Privilege-Selected_None_Of_Any_Items=Selected None -FRFont-Size=Size -Function-J2EE_server=J2EE server -FR-Designer_Allow_Blank=Allow NULLs -Build_Tree_Accord_Parent_Marked_Filed=Build Tree according to the parent tag field of the selected data set -Preference-Horizontal_Scroll_Bar_Visible=Horizontal Scroll Bar Visible -Scope=Scope -Save_All_Records_In_Memory=Save All Records in Memory -FreezeWarning1=Initial value can't greater than end value -FlowLayout=Fluid Layout -M_Report-Report_Footer=Report Footer -FR-Action_Add=Add -BorderLayout-East=East -feedback_tip=Please enter a description of the problem, not more than 400 words -FS_Start_Date=Start Date -FR-ConditionB_Operator=Operator -Printer-Alias=Alias -DS-Class_Name=Class Name -FR-Designer-Plugin_Has_Been_Disabled=Plugin has been disabled, restart the designer and sever to enable it and the sever need to be manually restarted -Sort-Original=Unsort -Utils-Top_to_Bottom_a=From top to bottom -Parameter-String=String -InnerRadis=Inner radius size -Want_To_Cover_It=Whether to override it -Divided_stage=Divided Stage -Seriously=Seriously -ReportServerP-PDF=PDF -Utils-Switch_To_Class_Reportlet=Switch to class web report -FR-Designer_Show_Blank_Column=Supplement blank column -M_Edit-Redo=Redo -Visibility=Visibility -Series_Use_Default=Series Default Use -Has_Selected=Already Selected -BackgroundTexture-Walnut=Walnut -FormulaD-Function_category=Function Type -Interface=Interface -FR-Designer-Beyond_Bounds=Can't go beyond the border -seconds=s -Auto-Build=Automated Build -FR-Designer-Plugin_Install_Successful=Plugin will takes effect when designer and sever are restarted and the sever need to be manually restarted -Template_Path=Template Path -FR-Designer-FRFont_Bold=Bold -Poly_Name=Aggregation block name -WorkBook=WorkBook -Hyperlink-Self_Window=Current Window -FR-Designer-Widget-Style_Title=Title -FR-Designer-FRFont_Size=Size -M_File-Export-SVG=SVG -Capacity=Capacity -Rose_Red=Rose Red -StyleAlignment-The_value_of_rotation_must_between_-90_and_90_degrees=Rotation value must between -90 and 90 degrees -HF-Move_Left=Left shift -Cell_Group=Cell Group -Week=Week -PageSetup-Orientation=Orientation -M-Open_Recent=Open Recent -NNormal= -Integer=Integer -Select_The_Source_To_Save=Select Source to Save -Transition=Branch -FR-Designer_Get_Lock=Lock -one_record_exists_in_many_groups=One record exists in many groups -FR-Designer_Cover_None=Override None -DeciPart=Decimal part -ExpandD-Up_Father_Cell=Upper Parent Cell -Deep=Deep -FRFont-Shadow=Shade -Reportlet=Web Report -Calendar=Calendar -DateFormat-Custom_Warning=Note\: Custom date format does not support the format checking -Unit_MM=MM -Server-Start=Start -CellPage-Can_Break_On_Paginate=Can break when paging -Build_Tree_Accord_Marked_Filed_Length=Build tree according to tag field's length -ComboCheckBox-Start_Symbol=Initializer -Real=Real -RWA-Batch_Modify_Cells=Batch Modify Cells -FR-Designer_Build-Way=Build Way -Read=Read -StyleAlignment-Degrees=Degrees -M_Format_A-Border=Border -Utils-Delete_Record=Delete Record -Reload=Reload -Image-Select_Picture=SelectImage -RWA-Submit=Submit -the_template=this template -FR-Designer_Component_Scale=Component Scale -FRFont-italic=Italic -Year=Year -HF-Move_Right=Right shift -Data-Check=Data Monitor -Unknown=Unknown -Submit_Style=Submit way -Left_Border_Line=Left Border -Brown=Brown -Select_A_Tree_DataSource_To_Build=Select a tree data set to build -Overlapping=Overlapping -DS-Class_TableData=Class Data Set -FR-Designer-Plugin_Illegal_Plugin_Zip_Cannot_Be_Install=Illegal plugin,cannot be installed -DisplayNothingBeforeQuery=Display Nothing Before Query -Y_Axis=Y Axis -FormulaD-Most_Recently_Used=Rencently used -FormulaD-Input_formula_in_the_text_area_below=Input formula in the text area below -Build-Way=Build Way -M_Edit-Undo=Undo -Line-Style=Line-Style -Datasource-Other_Attributes=Other Attributes -M_Server-Global_Parameters=Global Parameters -Suffix=Suffix -Image-Image_Files=Image Files -EditRC-Entire_row=Entire row(R) -HF-First_Page=Home Page -BackgroundTexture-Granite=Granite -DataList=Data Link -Recursion=Recursion -BarStyle=Bar -FR-Designer-Min_Width=Min-Width -Utils-Report-Env_Directory=Report working directory -D-ChartArea=Chart Area -Only=Only -FR-Base_No=No -SpecifiedG-Put_all_others_together=Merger all others -HF-NewLine_Des=Click on the move or delete button to operate line breaks -WLayout-Border-ThreeContainer=You have the central, northern and western border layout containers.You can adjust the height of the northern one and the width of the western one. -Parameter_Name=Parameter Name -FR-Base_Table=Table -Des-Remove_WorkSheet=The report to be deleted may contain data. If you want to delete report, please click on Yes button. -Rotation=Rotation -Undefined=Undefined -Support-Auto_Complete_Shortcut=Auto complete shortcut key -Set_Column_Title_End=Set Duplicate End Column -Submit_Url=Submit Url -ReportServerP-Are_you_sure_to_delete_the_selected_printer=Are you sure to delete the selected printer -long_data_can_not_show_fully=Long data can not be fully demonstrated -Utils-Beyond_the_bottom_side_of_Border=Beyond bottom border -FR-Import-Export_PDF=PDF -Form-CheckBoxGroup=CheckBoxGroup -Click-Me=Click Me -Hyperlink-Self=Open link in original page(S) -Tree-Select_Leaf_Only_Tips=If unchecked, only return current node, not contain its child nodes -StyleAlignment-Text_Rotation=Text orientation -Format-Error=Entered value is not in the correct format -Server-Stop=Stop -Preference-Setting_Grid=Grid Setting -ReportServerP-Add_Printer=Add printer -FR-Designer-Plugin_Active=Enable -Utils-File_name=File name -NOT_NULL_Des=NOT NULL -Right_Border_Line=Right Border -EditRC-Entire_column=Entire column(C) -PageSetup-Top_to_bottom=Down, then over -Click-Get_Default_URL=Click To Get Default URL -StyleAlignment-Wrap_Text=Word wrap -Remove_All_Button=Remove all buttons -FR-Designer_Component_Interval=Component Interval -ReportColumns-Columns_vertically=Fixed columns per line -ReportGUI-Print_Background=Print/export background -Export-CSV=CSV -M_Edit-Paste=Paste -FR-Designer-Basic_Restart_Designer=Restart designer -ReportServerP-PDF2-INFO=Only used in LINUX/UNIX when Chinese font is not installed -FormulaD-Check_Valid=Validity Checks -server_disconnected=server disconnected -ParameterD-Parameter_name_cannot_be_null=Parameter name cannot be empty -FR-Designer-Plugin_Version_Is_Lower_Than_Current=The version of plugin update package is lower than the current -RWA-NotChange_Unmodified=No modify, no update -User_Information=User Information -Custom_styles_lost=Custom Style is Missing -PageSetup-Margin=Margin -M-New_FormBook=New Form -Widget-TreeNode=Tree node button -Form-Url=URL -Utils-Beyond_the_left_side_of_Border=Beyond left border -Float_Element_Name=Float Element Name -Purple=Purple -DashBoard-Potence=Permissions -M-Close_Template=Close Template(C) -paper=Page -Not_Exsit=Not exist in report -Utils-Insert_Row=Insert Row -Utils-Delete_Row=Delete Row -not_support_authority_edit=this element does not support authority edit -Formula_Tips=The formula must be begin with "\ -FR-Action_Copy=Copy -Compile_Success=Compile Successfully -BackgroundTexture-RecycledPaper=Recycled Paper -StyleAlignment-Single_Line=Single Line -Utils-Move_Down=Move Down -Please_Set_Repeat_First=Please set duplicate title row and column first -Writer-ShortCuts_Setting=Filling Shortcut key setting -Verify-Data_Verify=Data validation -FR-mobile_analysis_style=analysis style -Confirm-Delete-File=Whether to delete the selected file -PageSetup-Header=Header -JavaScrit-Asynch=Asyn -ReportServerP-Toolbar=Toolbar -Utils-Top_to_Bottom=Portrait -Platform=Platform -FR-Designer-FRFont_Underline=Underline -Show_in_Containing_Folder=Open the folders where it stored in -BackgroundTexture-WaterDroplets=Water Drop -FR-Designer-Dependence_Install_Failed=install failed -Layout-Padding=Padding -roles_already_authority_edited=Configured role -WidgetDisplyPosition=Control disply position -SpecifiedG-Force_Group=Mandatory Group -FormulaD-Formula_Definition=Formula Definition -I-xyScatterStyle_Marker=Scatter -Hour=Hour -ColorMatch=Color -M_Edit-Order=Re-order -BackgroundTexture-Bouquet=Bouquet -Verify-Error_Information=Validate Error Information -LayerData=Underlying Data -Rename=Rename -Widget-Load_By_Async=Async load -Shape=Shape -BindColumn-This_Condition_has_been_existed=The Condition Already Exists -NS-exception_readError=Error codes\:1305 Template file parsing error -Set_Column_Title_Start=Set Duplicate Title Columns -Fri=Fri -M_Report-Report_Parameter=Report Parameter -REPORTLETS=Parameter of access path to multi-templates -WLayout-Card-ToolTip=Card layout, you can add multiple components in it. -M-Popup_ChartType=Chart Type -Please-Wait=Please Wait -FR-Designer-Form-ToolBar_Widget=Control -Widget-Array=Array -FieldBinding=Bound Field -Top_Bottom_Border_Line=Top and bottom border -M-Others=Others... -Hyperlink-Link_Opened_in=Link Opened in -FR-Utils_WorkBook=WorkBook -M_Insert-Float=Float Element -Out_Thick_Border_Line=Thick Border -FR-App-File_Lookup_range=Search range -ReportColumns-Columns_to=Split To -Transparent=Transparent -Parameter-Integer=Integer -PDF-Print_Setting=PDF Print Setting -Server-Embedded_Server=Built-in server -M_Server-Server_Config_Manager=Server Configuration Manager -FR-Utils-Would_you_like_to_cover_the_current_file=Would you like to override the current file -CellWrite-InsertRow_COPY=Original -Edit_String_To_Formula=Edit String To Formula -Edit-Column_Count=Number of columns -Father=Father -ReportColumns-Columns_after=Over -FR-Designer_Undo=Undo -DBCP_MIN_IDLE=Min Idle Connections -M-Data_Analysis_Settings=Data Analysis Settings -M-Form_Preview=Form Preview -Form-Basic_Properties=Basic Property -quote=quote -Thu=Thu -Collect-Collect_User_Information=Collect User information -Layer-Build=Layered Build -FR-Designer-FRFont_Line_Style=LineType -BackgroundTexture-BrownMarble=Brown Marble -PageSetup-Page_Setup=Page Setting -Form-Semicolon=Semicolon -ECP_re_input=Password Error, please re-enter -ExpandD-Sort_After_Expand=After Extension -FR-Designer-Dependence_Install_Succeed=install succeed -Env-Configure_Workspace=Configure working directory -feedback_info=We welcome your comments and suggestions, please fill out the information as detailed as possible, we will contact you soon -Ratio=Ratio -DBCP_TEST_ON_BORROW=Test before Getting Connections -FR-Designer_layerIndex= -WEB-Write_Setting=Filling Settings -M-New_WorkBook=New WorkBook -FR-Designer-Plugin_Has_Been_Actived=Plugin is now active, restart the designer and sever to enable it and the sever need to be manually restarted -Datasource-Maximum_Number_of_Preview_Rows=Maximum Number of Preview Rows -ExpandD-Cell_Expand_Attributes=Extension Attributes -Select_the_repeated_row_and_column=Select rows and columns need to duplicate -FormulaD-Date_&_Time=Date and Time Function -Max-Mem-Row-Count=Cache to disk when records more than -BorderLayout-South=South -Export-Text=Text(tab delimited) -JavaScript-Synch=Synch -FR-App-All_Warning=Alert -M_Edit-Send_Backward=Send to Backward -Form-Layout=Layout -FR-Designer-Plugin_Shop_Need_Update=Plugin store a new version, whether to update? -FR-Designer_WorkBook=WorkBook -UpBarBorderStyleAndColor=UpBar Border Style And Color -GridLayout=Grid Layout -Utils-Default_Value=Default Value -Widget-Comb_Widget_Config=Combination control -Import-Excel2007_Source=Excel2007 Source Files -Y-Coordinate=Vertical Coordinate -FR-Base_SimSun_Not_Found=Cannot find the song typeface, please set the system default language as the designer typeface -FR-Designer_Seriously=Seriously -Upload=Upload -Form-Widget_Property_Table=Attribute Table -Des-Merger_Cell=The selected area contains multiple data, if you merge them, only the data at the upper left corner will be reserved. -FR-Designer-Basic_Copy_Build_NO=Double click to copy build NO. -FR-Base_TurnOn=Turn On -FR-Base_Rows=Row -Form-Remove_Repeat=Remove duplicates -Yes=Yes -Datasource-JNDI_Name=JNDI Name -Utils-Delete_Column=Delete Column -HF-Delete_it=Delete it -JavaScript-Dynamic_Parameters=Dynamic Parameters -px=px -FR-App-Report_Template=Report Template -Verify-Message=Error Message -Plan=Plan -Vertical-Split_Layout=Vertical Split Layout -ParameterD-Delay_Playing=Display Nothing Before Query -TurnOff=TurnOff -FR-Please_Rename=Please Rename -Select_Data_Set=Select Data Set -Name_has_Colon=Name\: -ReportColumns-Columns_horizontally=Fixed lines per column -FR-Base_Yes=Yes -ReportColumns-Repeat_Row=Copy row sequence -Print_Setting=Print Setting -Registration-User_Name=User Name -Datasource-User_Defined=Custom -FR-Designer-Plugin_DownLoadMessage=Plugin need dependence support,need to install ({R1} m)? -Delay=Delay -FR-Designer-All_MSBold=MS YaHei -Utils-Now_create_connection=Creating data connection -FR-Template-Path_chooseRightPath=Please choose a right path -FR-Remote_Re_Connect_to_Server=The server is down, whether to reconnect it -Nation=Country -DBCP_MAX_WAIT=Max wait time -FR-App-Template_Form=Form -Address=Address -Sub_Report=Sub Report -FR-Import-Export_Word=Word -FR-Server_Version_Tip=The version of the server you are connecting is older than the Designer, continue to connect, some attributes you are editing may not be saved. Please conform the versions of FineReport Designer and the deployment server are consistent. -StyleAlignment-Left_To_Right=Left To Right -Verify-ToolTips=If not meet formula, throw up validation error message -BackgroundTexture-Stationery=Letter Paper -FR-Designer_RWA-Help=Set "No update if no modidy", so if cell is not modified, the record will not update; it improves filling and submit performance when data is large. -M_Insert-Barcode=Barcode -Bounds=Bounds -FR-Designer-Undo_All_Authority_Operations=Undo all the privilege edit operations -Datasource-Context=Context -CellWrite-Page_After_Column=After Column -FR-Designer_Cancel=Cancel -Button-Group-Display-Columns=Number of columns displayed -Widget-Height=Control Height -Examples=Examples -Formula_Dictionary_Display_Example=Real value range is \ -StyleAlignment-Horizontal=Horizontal -HyperLink_Must_Alone_Reset=Multiple hyperlink -ExpandD-Expand_Direction=Extension Direction -Include=Include -Export-Excel-Page=Page Break -FR-Designer-Min_Height=Min-Height -Filed=Field -ReportServerP-Import_Css=Reference Css -M_Insert-Formula=Insert Formula -FR-Designer_Auto-Build=Automated Build -FRFont-Foreground=Foreground -Bubble-Width=Bubble Width -Form-Hierarchy_Tree=Hierarchy Tree -WLayout-Border-LayoutContainer=You have the central and northern border layout containers.You can adjust the height of the northern one -Preference-JDK_Home=JDK Home -Utils-Insert_Column=Insert Column -FR-Designer_ToolBar_Top=Top ToolBar -BindColumn-The_Conditions_of_FatherCell=The Conditions of Parent Cell -Links=Links -M_Report-Report_Header=Report Header -Sub_Report_Description=The sub-report should exist in the runtime environment of its parent, and they can not be the same template -T_Insert-Float=Insert Float Element -BackgroundTexture-FishFossil=Fish Fossil -My_Computer=My Computer -FORMLET=Path parameter when accessing different forms -HF-Undefined=Undefined -Widget-User_Defined_Widget_Config=Predefined control -Report-Write_Attributes_Group_Warning=Number of cells in each field in all cell group must be the same -Form-Single_quote=Single Quote -Compile_Success_And_Then_Save=Compile Successfully And Then Save -FR-Designer_Layout-Padding=Padding -Layout_Container=Layout Container -Admin=Admin -Form-EC_toolbar=Report toolbar -FR-App-All_Auto=Automatic -Utils-Available_Columns=Available Columns -Form-Change_Widget_Name_Discription=Input New Control Name -FR-Module_Designer=Designer module -FR-Import-Export_Text=Text(tab delimited) -Values-Editor=Values Editor -FR-Designer_Yes=Yes -ExpandD-Expandable=Extensibility -Tree-Return_Full_Path=Return full hierarchical path -FRFont-bolditalic=BoldItalic -FR-Base_StyleFormat_Sample=Sample -Area_Value=Area Value -FR-Designer-Plugin_Disable=Disable -Utils-Are_you_sure_to_remove_the_selected_item=Are you sure to remove the selected item -Face_Write=Filling -Poly-Report_Block=Report type aggregation block -Vgap=Vertical gap -FR-Designer_HyperLink_Must_Alone_Reset=HyperLink_Must_Alone_Reset -DS-Class=Class -FR-Hyperlink_Please_Select_Reportlet=Please select webreport -FS_Report_Type=Report Type -HF-New_Line=Line breaks -Privilege=Permission -Export-Offline-Html=Output offline HTML report -FR-Designer_open-new-form-tip=The form is created by the designer older than 711 vision, it cannot be opened. Please use the corresponding designer. -FR-Designer-Widget-Style_Frame_Style=Frame Style -Present-No_Present=Cancel Present Settings -FR-Designer_Form-Password=Password -X_Axis=X Axis -FR-mobile_html_analysis=Html5 analysis -M_Edit-Bring_to_Front=Bring to Top -Null_Value_Show=Show if null -Datasource-JNDI_DES=Note\: .jar files containing INITIAL_CONTEXT_FACTORY need to be copied into the installation directory in the /lib directory -PrintP-Print_Preview=Print Preview -Form-Hierarchy_Tree_Last=Last -Has_been_gone=\ Has been lost,whether to add the style -RWA-Add_Field=Add Field -newNode=add Node -PageSetup-Shrink_to_fit_content=Automatically adjust according to cell content -FR-Designer_Date=Date -Column_Multiple=Line Numbers -FR-App-All_File=File -Sort-Descending=Descending -FR-Designer-Plugin_Delete=Delete -Above=Above Version -Utils-The-Chart=Chart -FRFont-plain=General -Calculating=Calculating -Form-Object=Form Object\: -May=May -FR-Designer_Plugin_Normal_Update=Update -FR-Hyperlink_Reportlet=Webreport -M_Edit-Copy=Copy -Sub_Report_Message2=The parent-report is not in the current runtime environment -Sub_Report_Message3=Can not choose itself -Sub_Report_Message1=Please choose the currect path -Form-Allow_CustomData=Allow custom data -FR-Server_Version_Tip_MoreInfo=Conform the version numbers of FineReport Designer and the deployment server are consistent, in order to avoid the problems caused by inconsistent versions. If you open the template produced by higher designer vision, error may occurs or the original template properties missed. If the Designer Version you used to create the template is higher than the final deployment server version, the server may not be able to properly load the template. -FR-Designer_Server-version-tip-moreInfo=Conform the version numbers of FineReport Designer and the deployment server are consistent, in order to avoid the problems caused by inconsistent versions. If you open the template produced by higher designer vision, error may occurs or the original template properties missed. If the Designer Version you used to create the template is higher than the final deployment server version, the server may not be able to properly load the template. -Get_Lock=Lock -HF-Edit_Footer=Edit page footer -Datasource-New_Charset=New Code -Preference-Custom=Custom -BackgroundTexture-Newsprint=Newsprint -ConditionB-Add_bracket=Add Parentheses -Datasource-Connection_successfully=Connection successfully -Function-The_class_must_implement_the_interface=The class must implement the interface -FR-Designer_ChartF-Transparency=Transparent -Crimson=Crimson -FR-Hyperlink_Dialog=Dialog -FR-Designer_Covered_All=Override All -Hyperlink-New_Window=New Window -Style_Name=Format Name -CSS_warning= \ Relative report project directory like WebReport, if reference a css files named test.css
 in WebReport\\css, then the relative path is css/test.css -FR-Base_Column=Column -Three_Rows_Of_Two_Grid=A grid with 3 rows and 2 columns -DBCP_VALIDATION_QUERY=SQL Validation Query -M_Edit-Clear_Formats=Format -Parameter_Setting=Parameter Setting -Related=Linkage -BorderLayout-Constraints=Placement -Write_Preview=Filling Preview -PageSetup-Page_Order=Print Order -Verify-Verify_Formula=Validation formula -State=State -FR-Designer-Widget-Style_Body_Background=Body Background -FR-App-Privilege_No=No Permission -Please_Drag_ParaPane= -Come_True=Implement -ISEMPTY=Is null -Background-Texture=Texture -FR-Designer_Verify-Message=Wrong Message -Locked=(Locked) -Utils-Design-Action_Cancel=Cancel -Image-Titled=Tile -Gradient-Direction=Gradient Direction -Green=Green -Report_Engine=Report Engine -Return-String=Return String -Margin=Margin -Pitch_Percentage=Space percentage -FR-Base_TurnOff=Turn Off -Utils-has_been_existed=Already exists -HF-Insert_Formula=Insert Formula -Utils-Exit_Designer=Exit Designer -Formula_Dictionary_Display=Every value($$$) in the actual values above, it's display value is -PageSetup-Left_to_right=Over, then down -Utils-Import_Excel_Data=Import Excel Data -M-Save=Save -redo=redo -Status=Status -Draw=Draw -FR-Designer_Message=Message -Records=Records -FR-Designer_ComboBox=Drop-down Boxes -Driver=Driver -Template_Parameters=Template Parameters -Form-Remove_Repeat_Data=Remove Repeated Data -ECP_decode=Report Decryption -Area_Name=Area Name -Others=Others -Merge=Merge -BackgroundTexture-Parchment=Parchment -BindColumn-Bottom_N=Last N -Frame=Frame -Bottom_Border_Line=Bottom Border -Muiti_In=Multi-level Drill-down -FR-Designer-Dependence_Install_Online=install online -Use_Default_ToolBar=Use default toolbar -M_Server-Platform_Manager=Platform Management -PageSetup-inches=inches -Form-Widget_Property=Attribute name -FR-Layout_Padding=Padding -Schema=Theme -Server_Path=Host location -Condition_Display=Condition Display -FR-Server-Design_template_unopened=Can't open the template -Function-Function_Class_Name=Function Class Name -Schedule-Template=Template name -Tree_Data_Field=Tree Data Field -Border-Style-Normal=Rectangular Border -Top_And_Double_Bottom_Border_Line=Top and bottom double border -FR-Server_Embedded_Server_Start=Built-in server-Open -FR-Designer-Basic_Restart_Designer_Later=Restart later -StyleAlignment-Top=Top -ReportServerP-First=First -Not_Exist=Not Exist -FR-Remote_File_is_Locked=Someone else is editing the report, please try later -Apply=Apply -Sytle-Indentation=Indentation -Parameter-Float=Single-precision -HF-Center_Section=Center Section -Form-Double_quotes=Double Quote -M_File-Export-Word=Word -M_File-Export-Text=Text File(tab delimited) -PageSetup-First_Page_Number=Starting page number -Execute=Execute -Task=Task -Custom_Button_Type_Submit=Submit -FR-Designer-Widget_Settings=Control Setting -IS_Need_Password=Need Password -PageSetup-Horizontally=Horizontally -No_Editor_Property_Definition=No Editor Property Definition -Env-Remote_Server=Remote Server -FR-Utils_Background=BG -FR-Designer-Plugin_Warning=Alert -Server-version-info=The current template file is designed by higher vision designer. Open it may result in losing original attributes or error. Please upgrade your designer. -CellWrite-Page_After_Row=After Row -HF-Right_Section=Right Section -PageSetup-Title_Start_Row=Duplicate Title Rows -From=From -Preference-Grid_Line_Color=GridLine Color -RowTo=Row To -FR-Designer_ReportColumns-Repeat_Column=Copy column sequence -M_Server-Function_Manager=Function Manager -KeyWord=KeyWord -DS-Multi_Dimensional_Database=Multi-dimensional Database -BiasD-Slope_Line=Slope Line -Tue=Tue -ReportServerP-Last=Last -FR-Base_Columns=Columns -SpecifiedG-Leave_in_their_own_groups=Leave in their own groups -LOG-Please_Wait=Please Waiting -Form-ToolBar=Form ToolBar -FR-Base_sure_remove_item=Are you sure to delete the selected item -Component_Scale=Component Scale -Hyperlink-Use_CJK_to_encode_parameter=Use CJK to process parameter -LOG-Has_Been_Openned=Report Has Been Openned -FR-Designer-Dependence= -ECP_error_pwd=Password Error -REPORTLET=Parameter of access path to template -RWA-Column_Offset=Column Offset -Forecast=Forecast -Light_Orange=Light orange -StyleAlignment-Vertical=Vert -Form-List=List -ParameterD-Show_Parameter_Window=Show Parameter Panel -FR-Designer_Set_Submit_Event=Set Submit Event -Value_Percent=Value Percentage -DBCP_MIN_EVICTABLE_IDLE_TIMEMILLIS=Keep Min Idle Time Value -Function-The_class_must_be_located_in=The class must be located in -FR-Action_Sort=Sort -DataFunction-Average=Average -FR-Designer_Show_in_Containing_Folder=Open the folders where it stored in -M_File-Export-Excel=Excel -DataFunction-Max=Maximum -FR-Designer_Form-Widget_Name=Control Name -FS_End_Date=End Date -Export-Excel-Simple=Original -ColumnTo=Column TO -SpecifiedG-Discard_all_others=Discard all others -DS-TableData=Data Set -Form-DataTable=DataTable -Sub_Report_ToolTips=Sub Report ToolTips -Right_Top=Upper right -M_Edit-Merge_Cell=Merge Cell -FR-Designer_Restore_Default=Back to default\ -Component_Interval=Components Interval -Cover_None=Override None -Datasource-From_Database=DB table -Folder=Directory -Form-Allow_Edit=Allow Edit -M_Edit-Clear=Clear -ParentCell_Setting=Parent Cell Setting -Only_selected_cell_can_paste_only=Paste when cell is selected -M_Report-Report_Columns=Multi-columns/lines -Unit_Hundred=Hundred -FR-Designer_DataTable-Build= -Widget-Form_Widget_Config=Form control -Server-version-tip-moreInfo=Conform the version numbers of FineReport Designer and the deployment server are consistent, in order to avoid the problems caused by inconsistent versions. If you open the template produced by higher designer vision, error may occurs or the original template properties missed. If the Designer Version you used to create the template is higher than the final deployment server version, the server may not be able to properly load the template. -Actions=Task -FR-Designer-Dependence_Connect_Server_Error=connect error -High=High -HJS-Send_Failed=Send Failed -HJS-Message=Message -File-Allow_Upload_Files=Uploaded files -FR-Designer-Form-ToolBar_Chart=Chart -Thick_Bottom_Border_Line=Thick Bottom Border -FR-Action_Remove=Delete -FRFont-Style=Style -Select_DataColumn=Select Data Column -StartValue=Start Value -SINGLE_FILE_UPLOAD=Only support single file upload -BackgroundTexture-Cork=Cork -M_Format-Data_Map=Data Dictionary -FR-mobile_native_analysis=native analysis -HighLight=High Light -FR-Designer_Dropdown-More-Preview= -local=local -FR-Designer_Gradation=Gradation -PageSetup-Finis_Start_Column=Duplicate Last Column -Env-Invalid_User_and_Password=Invalid User Or Password -FR-Designer-Plugin_All_Plugins=All plugins -FR-Designer_Prepare_Export=Ready to export, please wait -DBCP_TEST_ON_RETURN=Test before Returning Connections -no-alternatives=no alternatives -FR-Designer_Submmit_WClass=Submmit By Custom Class -M_Insert-Slope_Line=Insert Slope Line -FR-Designer-Plugin_Plugin_Description=Description -ExpandD-Not_Expand=No extend -Utils-Bottom_to_Top=From the bottom up -Collect-Click\!_Get_user_information_code=Get Activation Code -FR-Already_exist=Current environment is already exist\: -Send=Send -M_Edit-Clear_All=All -Brown_Orange=Brown Orange -PageSetup-Portrait=Portrait -FR-Designer_Form-RadioGroup=Radio Button Group -FR-Utils-App_AllFiles=All Files -Popup=Popup -Server_Charset=Server code -CellWrite-Repeat_Content_When_Paging=Repeat Content in New Page -Utils-No_Pagination=No Page Break -Form-NullLayout=Absolute positioning -ConditionB-Remove_bracket=Remove Parentheses -email=Email -Minute=Minute -FR-Designer-Plugin_Update=Plugins update -alraedy_close=Already closed -ComboCheckBox-End_Symbol=Terminator -DataColumn=Data Column -Form-Password=Password -FR-Background_Image_Adjust=Adjust Image -Export-Excel-PageToSheet=One Page Per Sheet -Edit-Row_Count=Number of rows -DS-Report_TableData=Report Data Set -Sche-Hour=Hour -Group_Count=Group Count -EndValue=End Value -FR-Designer_Sytle-Indentation=Indentation -DownBarBorderStyleAndColor=Downcolumn Border Style And Color -World=World -FR-Designer-Basic_Cancel=Cancel -Finally=Finally -Low=Low -Please_Input_The_Key=Please Input the key the map use -Smart=Smart -Preference-Predefined=Predefined -Current_custom_global=Custom Global Styles of Current Report -FR-Designer-Plugin_Shop_Need_Install=You are not add-ons store of resources, whether to download? -WEB-Pagination_Setting=Page Break Preview -RCodeDrawPix=PIX -FR-Designer-Widget-Style_Alpha=Opacity -BorderLayout-North=North -HJS-Current_Page=Current Page -Compile=Compile -Show_Blank_Row=Supplement blank line -TableData_Dynamic_Parameter_Setting=Dynamic parameter injections -FR-Background_Image_Default=Default Image -BackgroundTexture-WhiteMarble=White Marble -DataFunction-Sum=Sum -Collect-The_user_information_code_is_invalid=The activation code is invalid, please visit the website to get a new one -Preference-Locale=Internationalization -M_File-Export-PDF=PDF -BiasD-From-lower_left_to_upper_right=lower left-upper right -Border-Style=Border Style -Sort=Sort -Image-Image_Layout=Image Layout -Panel=Panel -FR-Designer-Basic_Copy_Build_NO_OK=Build No. has been copyed -All_Border_Line=All Border -FR-Utils-Please_Input_a_New_Name=Input a New Name -FR-Base_Formula_Plugin=Plugin Function -Two_Rows_Of_Three_Grid=A grid with 2 rows and 3 columns -FR-Designer_Certificate_Pass=Certificate Password\ -Bubble-Series_Name=Series Name -M-New_Multi_Report=New Aggregate Report -BackgroundTexture-PinkTissuePaper=Pink Sandpaper -Preference-Support_Default_Parent_Calculate=Default Parent Grid Calculate -Show_Blank_Column=Supplement blank column -BaiduMap=Baidu Map -Report-Web_Attributes=Web Attributes -FR-Designer_StyleAlignment-Wrap_Text=Word wrap -Need=Need -Parameter-Double=Double-precision -Config_Servlet=Config Remote Server -Form-Comma=Comma -Verify=Validation -PageSetup-Landscape=Landscape -Weeks=Weeks -FR-Designer-Widget-Style_Title_Background=Title Background -Preference-Pagination_Line_Color=Pagination Line Color -Test_URL=Test URL -Fill_blank_Data=Supplement blank data -ReportServerP-The_name_of_printer_cannot_be_null=Printer name cannot be empty -FR-Designer-Basic_Copy_Activation_Key=Double click to copy key to clipboard -Continuum=Proximal continuum -BackgroundTexture-MediumWood=Dark Wood -Datasource-Column_Index=Column Ordinal -Function-Function_File=Function File -Form-Component_Bounds=Component Bounds -Utils-Submit=Submit -Conditions_formula=Condition Formula -M_Insert-Image=Insert Image -FR-Designer-Plugin_Will_Be_Delete=Plugin will be deleted, restart the designer and sever to enable it and the sever need to be manually restarted -FormulaD-Functions=Functions -Mobile_Terminal=Mobile terminal -CheckBox=CheckBox -FR-Designer-Plugin_Install=Install -Sun=Sun -FR-Designer_ToolBar_Bottom=Bottom ToolBar -Widget-Width=Control width -Series_Name=Series name -Set_Row_Title_Start=Set Duplicate Title Rows -HF-Default_Page=Default Page -Env_Des=Username and password must be correspond with sign-on environment, if permissions are enabled -Widget-User_Defined=Predefine -Url_location=Absolute path -Disk_File=Disk File -Inside=Inside -FR-Designer_filedChosen= -ServerM-Predefined_Styles=Predefined Styles -is_need_word_adjust=Word Auto Adjust -Background-Null=No Background -PageSetup-Vertically=Vertically center -FR-Designer_Root=Root node -FR-Designer_Form-TextArea=Text field -ReportServerP-Import_JavaScript=Reference JavaScript -Form-TableTree=Table Tree -Opened=Opened -M_Edit-Delete=Delete -Widget-Form_Widget_Container=Form Container -BindColumn-Summary=Summary -Sche-Second=Second -Server-Open_Service_Manager=Open Service Manager -FRFont-Effects=Special Effects -OtherGroup_Name=The name of other group -Specify=Specify -Highlight-Click_to_Choose_Property_To_Modify=Click to Choose Property to Modify -triggered=triggered -Double_Bottom_BorderLine=Bottom Double Border -M_Insert-Sub_Report=Insert SubReport -Unit_Ten=Ten -Polybolck=Aggregation block -Select_sort_order=Select sort order -HJS-Mail_to=To -StyleAlignment-Left=Left -Two_Rows_Of_Two_Grid=A grid with 2 rows and 2 columns -FR-Designer-Form-Please_Drag_ParaPane=Drag to parameter panel -Milliseconds=Milliseconds -DataFunction-None=None -Delivery=Delivery -ColumnSpan=Column Span -StyleAlignment-Bottom=Bottom -Read_failure=Load failed. Source file may be corrupted -Verify-Verify=Data validation -FR-Designer-Widget-Style_Title_Format=Title Format -FR-Designer_Edit_String_To_Formula=Edit String To Formula -FR-Base_UnSignIn=\ Not Logged In -Every=Every -CellWrite-Preview_Cell_Content=Content of Cell -FormulaD-Data_Fields=Data Items -FR-Designer_Role=Role -FR-Designer_Permissions=Permissions -FR-Designer_Form_Button=Button -FR-Designer_WF_Name=Name \ No newline at end of file +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_AlphaFine_Enable=enable +FR-Designer_AlphaFine_EnableAlphaFine=Enable AlphaFine +FR-Designer_AlphaFine_EnableInternet=EnableInternet +FR-Designer_Templates=Templates diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index d5d9dac39..ba6114955 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -100,7 +100,6 @@ FR-Designer_FS_Close_Other_Templates=\u305D\u306E\u4ED6\u30C6\u30F3\u30D7\u30EC\ FR-Designer_File=\u30D5\u30A1\u30A4\u30EB 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_Fit-App=App\u81EA\u9069\u5FDC FR-Designer_Fit=\u81EA\u9069\u5FDC FR-Designer_Font-Family=\u30D5\u30A9\u30F3\u30C8\u540D\u79F0 FR-Designer_Font-Size=\u30D5\u30A9\u30F3\u30C8\u5927\u5C0F @@ -223,7 +222,7 @@ FR-Designer-StyleAlignment_Style_Indentation=\u30A4\u30F3\u30C7\u30F3\u30C8 FR-Designer-StyleAlignment_Style_Spacing=\u9593\u9694\u8DDD\u96E2 FR-Designer-StyleAlignment_Style_Alignment=\u63C3\u3048 FR-Designer-CommitTab_Submit=\u63D0\u51FA\u3059\u308B -FR-Designer-CommitTab_SureToDelete=\u524A\u9664\u3057\u307E\u3059\u304B +FR-Designer-CommitTab_SureToDelete=Sure to delete FR-Designer-CommitTab_Remove=\u524A\u9664 FR-Designer-Collect_Information_free=\u7121\u6599 FR-Designer-Collect_Information_Description=\u8A18\u8FF0 @@ -370,13 +369,13 @@ FR-Designer_LiteCondition_ConditionB-OR=\u30AA\u30A2(OR) FR-Designer_LiteCondition_Common_Condition=\u666E\u901A\u6761\u4EF6 FR-Designer_LiteCondition_Formula_Condition=\u516C\u5F0F\u6761\u4EF6 FR-Designer_LiteCondition_Define=\u5B9A\u7FA9 -FR-Designer_Select_All=\u5168\u9078\u629E +FR-Designer_Select_All= 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_Finerest_Addon=\u5E06\u8EDF\u5FDC\u7528\u30BB\u30F3\u30BF\u30FC FR-Designer_Performance_First=\u6027\u80FD\u512A\u5148 FR-Designer_Total_N_Grade=\u5168\u90E8\u3067\:${N}\u5C64 -FR-Designer_time(s)=\u56DE +FR-Designer_time(s)= FR-Designer_General=\u5E38\u7528 FR-Designer_Advanced=\u9AD8\u7D1A FR-Designer_Oracle=\u3059\u3079\u3066\u306E\u30C6\u30FC\u30D6\u30EB @@ -408,10 +407,10 @@ FR-Designer_Current_Preview_Rows=\u73FE\u5728\u306E\u30D7\u30EC\u30D3\u30E5\u30F FR-Designer_Data=\u30C7\u30FC\u30BF FR-Designer_Error=\u30A8\u30E9\u30FC FR-Designer-Website_Url=http\://www.finereport.com/jp -FR-Designer_formDesignerModule=\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u30C7\u30B6\u30A4\u30CA\u30FC -FR-Designer-BBSLogin_Login-Title=BBS\u30ED\u30B0\u30A4\u30F3 -FR-Designer_Get-CubeGetting=cube\u53D6\u5F97 -FR-Designer-BBSLogin_Download-Unlogin-Tip=\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9 +FR-Designer_formDesignerModule= +FR-Designer-BBSLogin_Login-Title= +FR-Designer_Get-CubeGetting= +FR-Designer-BBSLogin_Download-Unlogin-Tip= 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-Vertical=\u7E26 @@ -436,76 +435,60 @@ 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-QQLogin-Determine=\u6C7A\u5B9A\u3057\u307E\u3059 FR-Designer-QQLogin-Cancel=\u30AD\u30E3\u30F3\u30BB\u30EB -FR-Designer-Reuse_Manager=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8 -FR-Designer_Layout_Block_Absolute=\u7D76\u5BFE\u30EC\u30A4\u30A2\u30A6\u30C8\u30D6\u30ED\u30C3\u30AF -FR-Designer_Layout_Block_Tab=Tab\u30D6\u30ED\u30C3\u30AF -FR-Designer_Layout_Block_Blank=\u7A7A\u767D\u30D6\u30ED\u30C3\u30AF -FR-Designer_Attr_Layout=\u30EC\u30A4\u30A2\u30A6\u30C8 -FR-Designer_Attr_Layout_Type=\u30EC\u30A4\u30A2\u30A6\u30C8\u65B9\u5F0F -FR-Designer_Attr_Bidirectional_Adaptive=\u53CC\u65B9\u5411\u81EA\u5DF1\u8ABF\u6574 -FR-Designer_Download_Template=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u3092\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9 +FR-Designer-Reuse_Manager= +FR-Designer_Layout_Block_Absolute= +FR-Designer_Layout_Block_Tab= +FR-Designer_Layout_Block_Blank= +FR-Designer_Attr_Layout= +FR-Designer_Attr_Layout_Type= +FR-Designer_Attr_Bidirectional_Adaptive= +FR-Designer_Download_Template= FR-Designer-Widget_Scaling_Mode=\u30B9\u30B1\u30FC\u30EA\u30F3\u30B0\u8AD6\u7406 -FR-Designer_Mobile-Refresh=\u66F4\u65B0 -FR-Designer_Mobile-ToolBar=\u30C4\u30FC\u30EB\u30D0\u30FC +FR-Designer_Mobile-Refresh= +FR-Designer_Mobile-ToolBar= 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_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=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u30A6\u30A7\u30D6\u30D7\u30ED\u30D1\u30C6\u30A3 +FR-Designer_Language_Change_Successful= +FR-Designer_Template_Web_Attributes= FR-Designer_Basic=\u57FA\u672C 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_Write_Setting=\u66F8\u304D\u8FBC\u307F\u30DA\u30FC\u30B8\u8A2D\u5B9A +FR-Designer_Write_Setting=\u5831\u544A\u30DA\u30FC\u30B8\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_Import_Css=Css\u5F15\u7528 FR-Designer_Import_JavaScript=JavaScript\u5F15\u7528 FR-Designer-Datasource-Param_DES=  "${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
 select * from table where id\=${abc}\u3002
 select * from table where id\='${abc}'\u3002(\u3082\u3057id\u306F\u6587\u5B57\u5217\u306A\u3089)\uFFFD FR-Designer-DS-Database_Query=\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u30AF\u30A8\u30EA\u30FC -FR-Designer-LayerPageReport_PageQuery=\u6539\u30DA\u30FC\u30B8\u691C\u7D22 -FR-Designer-LayerPageReport_Define_PageQuerySQL=\u6539\u30DA\u30FC\u30B8\u691C\u7D22sql\u3092\u66F8\u304F +FR-Designer-LayerPageReport_PageQuery=\u30DA\u30FC\u30B8\u5225\u30AF\u30A8\u30EA +FR-Designer-LayerPageReport_Define_PageQuerySQL=\u5B9A\u7FA9\u30DA\u30FC\u30B8\u5225\u30AF\u30A8\u30EAsql FR-Designer_Is_Share_DBTableData=\u5171\u6709\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8 -FR-Designer_Event=\u30A4\u30D9\u30F3\u30C8 -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_Event=\ +FR-Designer_Properties=FR-Designer_Properties=\ +\ FR-Designer_Export_failed=\u5C0E\u51FA\u306B\u5931\u6557\u3057\u307E\u3057\u305F FR-Designer_Exported_successfully=\u5C0E\u51FA\u6210\u529F FR-Designer_Exporting=\u5C0E\u51FA\u3057\u3066\u3044\u307E\u3059 -FR-Designer_Export-PDF=PDF\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8 -FR-Designer_Button_OK=\u78BA\u5B9A +FR-Designer_Export-PDF=PDF\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8FR-Designer_Button_OK=FR-Designer_Button_OK=\u78BA\u5B9A FR-Designer_Button_Cancel=\u30AD\u30E3\u30F3\u30BB\u30EB -FR-Designer_JavaScript=JavaScript -FR-Designer_JavaScript_Form_Submit=\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u66F8\u304D\u8FBC\u307F -FR-Designer_JavaScript_Commit_to_Database=DB\u306B\u66F8\u304D\u8FBC\u307F -FR-Designer_JavaScript_Custom=\u30AB\u30B9\u30BF\u30E0 -FR-Designer_RWA_Submit=\u66F8\u304D\u8FBC\u307F -FR-Designer_Event_Name=\u30A4\u30D9\u30F3\u30C8\u540D -FR-Designer_Event_Type=\u30A4\u30D9\u30F3\u30C8\u30BF\u30A4\u30D7 -FR-Designer_Event_Name_Type=\u30A4\u30D9\u30F3\u30C8\u540D\u3068\u30BF\u30A4\u30D7 -FR-Designer_JavaScript_Set=JS\u8A2D\u5B9A -FR-Designer_Attribute=\u30D7\u30ED\u30D1\u30C6\u30A3 -FR-Designer_Form_Editing_Listeners=\u30A4\u30D9\u30F3\u30C8\u7DE8\u96C6 -FR-Designer_Form_Basic_Properties=\u57FA\u672C\u30D7\u30ED\u30D1\u30C6\u30A3 -FR-Designer_DS_Dictionary=\u30C7\u30FC\u30BF\u8F9E\u66F8 -FR-Designer_Create_Tree=\u30C4\u30EA\u30FC\u69CB\u7BC9 -FR-Designer_Set_Callback_Function=\u30B3\u30FC\u30EB\u30D0\u30C3\u30AF\u95A2\u6570\u8A2D\u5B9A -FR-Designer_ConfirmDialog_Content=tab\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u3092\u524A\u9664\u3057\u307E\u3059\u304B -FR-Designer_ConfirmDialog_Title=FineReport 8.0 -FR-Designer_FormulaPane_Tips=\u30D2\u30F3\u30C8\:B1\u3092\u5165\u529B -FR-Designer_FormulaPane_Variables=\u5909\u6570 -FR-Designer_FormulaPane_Formula_Description=\u516C\u5F0F\u8AAC\u660E -FR-Designer_FormulaPane_Function_Detail=\u95A2\u6570\u660E\u7D30 -FR-Designer_FormulaPane_Search=\u691C\u7D22 -FR-Designer_Tab_carousel=tab\u30AB\u30EB\u30FC\u30BB\u30EB -FR-Designer_setCarousel=\u30AB\u30EB\u30FC\u30BB\u30EB\u30AA\u30F3 -FR-Designer_carouselInterval=\u30AB\u30EB\u30FC\u30BB\u30EB\u9593\u9694 -FR-Designer_ClassName_panel=\u985E\u540D -FR-Designer_Description_panel=\u8A18\u8FF0 -FR-Designer_Edit_panel=\u7DE8\u96C6 -FR-Designer_Property_panel=\u5C5E\u6027 -FR-Designer_Select_panel=\u9078\u629E +\uFFFD +FR-Designer_JavaScript= +FR-Designer_JavaScript_Form_Submit= +FR-Designer_JavaScript_Commit_to_Database= +FR-Designer_JavaScript_Custom= +FR-Designer_RWA_Submit= +FR-Designer_Event_Name= +FR-Designer_Event_Type= +FR-Designer_Event_Name_Type= +FR-Designer_JavaScript_Set= +FR-Designer_Attribute= +FR-Designer_Form_Editing_Listeners= +FR-Designer_Form_Basic_Properties= +FR-Designer_DS_Dictionary= +FR-Designer_Create_Tree= +FR-Designer_Set_Callback_Function= +FR-Designer_ConfirmDialog_Content= +FR-Designer_ConfirmDialog_Title= 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 @@ -513,35 +496,6 @@ 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_Null=\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}" \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_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-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_Parameter-Formula=\u6570\u5F0F FR-Designer_Background_Null= FR-Designer_Background_Color= FR-Designer_Background_Texture= @@ -550,1436 +504,17 @@ FR-Designer_Background_Gradient_Color= FR-Designer_Background_Image= FR-Designer_Background_Clear= FR-Designer_Background_Image_Select= +FR-Designer_Tab_carousel= +FR-Designer_setCarousel= +FR-Designer_carouselInterval= FR-Designer_Initial_Background_Tips= FR-Designer_Mouse_Move_Tips= -FR-Designer_Too_Large_To_Paste=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306E\u30B5\u30A4\u30BA\u306F\u30DC\u30FC\u30C0\u30FC\u306B\u8D85\u3048\u305F\u306E\u3067\u3001\u8CBC\u308A\u4ED8\u3051\u3067\u304D\u307E\u305B\u3093\uFF01 -FR-Designer_Too_Small_To_Paste=\u8A72\u5F53\u51E6\u306B\u8CBC\u308A\u4ED8\u3051\u3067\u304D\u307E\u305B\u3093\u3001\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306E\u30B5\u30A4\u30BA\u306F\u9AD8\u3059\u304E\uFF01 FR-Designer_Mouse_Click_Tips= -FR-Designer_Plugin_Should_Update_Please_Contact_Developer= -FR-Designer_AxisReversed=\u8EF8\u9006\u9806 -FR-Designer_Logarithmic=\u5BFE\u6570\u76EE\u76DB\u308A -FR-Designer_Chart_Log_Base=\u5E95\u6570 -FR-Designer_Chart_F_Radar_Axis=\u5782\u76F4\u8EF8 -FR-Designer_Style=\u30B9\u30BF\u30A4\u30EB -FR-Designer_Color=\u8272 -FR-Designer_Border=\u67A0 -FR-Designer_Background-Pattern=\u30D1\u30BF\u30FC\u30F3 -FR-Designer_Printer_Native_Button=\u30ED\u30FC\u30AB\u30EB\u5370\u5237 -FR-Designer_SimpleDetail_Report=\u7C21\u5358\u660E\u7D30\u8868 -FR-Designer_Reset=\u30EA\u30BB\u30C3\u30C8 -FR-Designer_WidgetOrder=\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306E\u9806\u756A -FR-Designer_Button-OK=\u5206\u304B\u308A\u307E\u3057\u305F -FR-Designer_Mobile-Warning=\u6700\u5927\u306E\u9AD8\u3055\u306F\u8868\u793A\u30A8\u30EA\u30A2\u306E80\uFF05\u4EE5\u4E0A\u306B\u306A\u308A\u307E\u305B\u3093 -FR-Designer_Mobile_Form_Analysis_Annotation=\u8AAC\u660E\:\u8A72\u5F53\u8A2D\u5B9A\u3088\u308A\u3001\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u306E\u30A2\u30D7\u30EA\u3067\u306E\u89E3\u6790\u30E2\u30FC\u30C9\u3092\u8A2D\u5B9A\u3067\u304D\u307E\u3059\u3002 -FR-Designer-Invalid_Page_Number=\u7121\u52B9\u306A\u30DA\u30FC\u30B8\u756A\u53F7 -FR-Designer_Form-Forzen-Speed=\u3001\u305D\u3057\u3066\u6A2A\u65B9\u5411\u81EA\u5DF1\u9069\u5FDC\u307E\u305F\u306F2\u65B9\u5411\u81EA\u52D5\u9069\u5FDC\u3092\u5229\u7528\u3057\u3001\u5E33\u7968\u8868\u793A\u306E\u30B9\u30D4\u30FC\u30C9\u3092\u4E0A\u3052\u3067\u304D\u307E\u3059\u3002 -FR-Designer_Properties_Mobile=\u30B9\u30DE\u30FC\u30C8\u30D5\u30A9\u30F3\u5C5E\u6027 -FR-Designer_AllCategories=\u5168\u3066\u306E\u7A2E\u985E -FR-Designer-Selected_Widget=\u5F53\u306E\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8 -FR-Designer_SimpleCross_Report=\u7C21\u5358\u30AF\u30ED\u30FC\u30B9\u8868 -FR-Designer_Log=\u30ED\u30B0 -FR-Designer_Form-Fit-Tip=\u81EA\u5DF1\u9069\u5FDC\u30D7\u30E9\u30B0\u30A4\u30F3 -FR-Designer_Button-Cancel=\u53D6\u308A\u6D88\u3057 -FR-Designer_LocalWidget=\u30ED\u30FC\u30AB\u30EB\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u30E9\u30A4\u30D6\u30E9\u30EA -FR-Designer_Alert=\u30A2\u30E9\u30FC\u30C8 -FR-Designer_TableData-Default-Para=\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u306E\u30C7\u30D5\u30A9\u30EB\u30C8\u30D1\u30E9\u30E1\u30FC\u30BF -FR-Designer_Edit_Button_ToolBar=\u30DC\u30BF\u30F3\u306E\u30C4\u30FC\u30EB\u30D0\u30FC\u3092\u7DE8\u96C6 -FR-Designer-Plugin_Please_Update_Jar=jar\u30D1\u30C3\u30AF\u3092\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u3057\u3066\u304F\u3060\u3055\u3044 -FR-Designer_Form-Frozen-Tip=\u30D5\u30EA\u30FC\u30BA\u3092\u4F7F\u3046\u6642\u3001\u5F8C\u8A18\u306E\u30D7\u30E9\u30B0\u30A4\u30F3\u3092\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3057\u3066\u304F\u3060\u3055\u3044\uFF1A -FR-Designer_Remove_Button_ToolBar=\u30DC\u30BF\u30F3\u306E\u30C4\u30FC\u30EB\u30D0\u30FC\u3092\u524A\u9664 -FR-Designer_Normal=\u6B63\u5E38 -FR-Designer_Install_Template=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u3092\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB -FR-Designer_Copy=\u30B3\u30D4\u30FC -FR-Designer_Allow-Blank=\u7A7A\u306B\u8A31\u3059 -FR-Designer_Clear_All=\u5168\u3066\u3092\u30AF\u30EA\u30A2 -FR-Designer_Delete_Template=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u3092\u524A\u9664 -FR-Designer_Mobile_Report_Analysis_Annotation=\u8AAC\u660E\:\u8A72\u5F53\u5C5E\u6027\u3088\u308A\u3001\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u306E\u30A2\u30D7\u30EA\u3067\u306E\u89E3\u6790\u30E2\u30FC\u30C9\u3092\u8A2D\u5B9A\u3067\u304D\u307E\u3059\u3001\u9801\u5206\u3051\u30D7\u30EC\u30D3\u30E5\u30FC\u3060\u3051\u3092\u652F\u6301\u3001\u66F8\u304D\u8FBC\u307F\u306B\u8A2D\u5B9A\u3059\u308B\u6642\u7121\u52B9\u306B\u306A\u308A\u307E\u3059\u3002 -FR-Designer_DoubleLayer_Report=\u4E8C\u968E\u30BF\u30A4\u30C8\u30EB -FR-Designer_Validate=\u691C\u8A3C -CellWrite-InsertRow_NULL=Null\u5024 -DashBoard-ChartFloat=\u30B0\u30E9\u30D5 -contact_info=\u304A\u554F\u3044\u5408\u308F\u305B\u60C5\u5831\uFF08\u4EFB\u610F\uFF09 -Page_Setup=\u30DA\u30FC\u30B8\u8A2D\u5B9A -CellWrite-Print_Export=\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u3092\u5370\u5237 -Cannot_Get_Date=\u65E5\u6642\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093 -FR-Designer_Modify=\u6539\u6B63 -M-Write_Preview=\u5831\u544A\u30D7\u30EC\u30D3\u30E5\u30FC -FR-Base_RWA-Key=\u30E1\u30A4\u30F3\u30AD\u30FC -China=\u4E2D\u56FD -Set_Legend_Sytle=\u51E1\u4F8B\u66F8\u5F0F\u3092\u8A2D\u5B9A -FR-Designer_Number=\u6570\u5B57 -FR-Designer-Widget-Style_Common=\u666E\u901A -M-Save_As=\u540D\u524D\u3092\u3064\u3051\u3066\u4FDD\u5B58 -Following_parameters_are_not_generated=\u4EE5\u4E0B\u306E\u30D1\u30E9\u30E1\u30FC\u30BF\u306F\u751F\u6210\u3055\u308C\u307E\u305B\u3093 -FR-Designer-Basic_Activation_Key_Copy_OK=\u30AF\u30EA\u30C3\u30D7\u30DC\u30FC\u30C9\u306B\u30B3\u30D4\u30FC\u3057\u307E\u3057\u305F -Utils-Current_Sheet=\u30AB\u30EC\u30F3\u30C8\u30B7\u30FC\u30C8 -ConditionB-is_less_than=\u3088\u308A\u5C0F\u3055\u3044 -BorderLayout-West=\u897F\u90E8\u306E -AnalysisLine=\u5206\u6790\u30E9\u30A4\u30F3 -Layer_Report_Warnning_info=\u30E9\u30A4\u30F3\u30A8\u30F3\u30B8\u30F3\u306F\u5927\u30C7\u30FC\u30BF\u91CF\u306E\u72B6\u6CC1\u4E0B\u3067\u9069\u7528\u3055\u308C\u307E\u3059\u3002
-Tree-Width=\u5E45 -alert_word=\u884C\u306E\u9AD8\u3055\u3092\u56FA\u5B9A\u305B\u305A\u5C0E\u51FA\u3092\u9078\u629E\u3057\u305F\u6B73\u3001\u5C0E\u51FA\u3057\u305Fword\u306E\u7DE8\u96C6\u306F\u3001\u30BB -PageSetup-Paper_Size=\u7D19\u30B5\u30A4\u30BA -M-Page_Setup=\u30DA\u30FC\u30B8\u306E\u8A2D\u5B9A -DashBoard-FormBook=\u8868 -X-Coordinate=\u6A2A\u5EA7\u6A19 -Style-Line_Spacing=\u884C\u9593\u9694\u8DDD\u96E2 -FR-Designer_Plugin_Should_Update_Title=Warning -Server-Define_Data_Connection=\u30C7\u30FC\u30BF\u63A5\u7D9A\u5B9A\u7FA9 -BarInside=\u67F1\u5B50\u5185\u4FA7 -Border-Color=\u67A0\u7DDA\u8272 -NotAllow=\u975E\u5408\u6CD5 -Utils-File_type=\u30D5\u30A1\u30A4\u30EB\u30BF\u30A4\u30D7 -FR-Designer-Plugin_Install_From_Local=\u30ED\u30FC\u30AB\u30EB\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3059\u308B -Summary_Method=\u53D6\u308A\u307E\u3068\u3081\u65B9\u6CD5 -Select_Specified_Grouping=\u30AB\u30B9\u30BF\u30DE\u30A4\u30BA\u30B0\u30EB\u30FC\u30D7\u5206\u3051\u3092\u9078\u629E -HF-Number_of_Page=\u7DCF\u30DA\u30FC\u30B8\u6570 -FR-Designer-Tree_Height=\u9AD8\u3055 -Owner=\u30AA\u30FC\u30CA\u30FC -Home=\u30E1\u30A4\u30F3\u30DA\u30FC\u30B8 -FR-Server_Embedded_Server_Stop=\u5185\u8535\u30B5\u30FC\u30D0\u30FC-\u4E00\u6642\u505C\u6B62 -FR-Designer-Plugin_Detecting_Update=\u66F4\u65B0\u3092\u30C1\u30A7\u30C3\u30AF\u3057\u3066\u3044\u307E\u3059 -HF-Whether_to_define_the_selected_type=\u9078\u629E\u3055\u308C\u305F\u30BF\u30A4\u30D7\u3092\u5B9A\u7FA9\u3057\u307E\u3059\u304B -StyleAlignment-Right=\u53F3\u8A70\u3081 -FR-Designer_Alignment-Style=\u30A2\u30E9\u30A4\u30F3\u30E1\u30F3\u30C8 -PageSetup-Title_Start_Column=\u91CD\u8907\u3059\u308B\u6A19\u984C\u5217 -Tree-Mutiple_Selection_Or_Not=\u8907\u6570\u9078\u629E -FR-Designer-Plugin_Search=\u691C\u7D22 -Choose_Role=\u6A29\u9650\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB -Append_Delete_Row_Message=\u6CE8\u610F\uFF01\u6307\u5B9A\u3055\u308C\u305F\u30BB\u30EB\u306F\u3001\u62E1\u5F35\u5C5E\u6027\u3092\u8A2D\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059 -Form-ComboBox=\u30B3\u30F3\u30DC\u30DC\u30C3\u30AF\u30B9 -PageSetup-Footer=\u30DA\u30FC\u30B8\u30D5\u30C3\u30BF\u30FC -Sorting=\u30BD\u30FC\u30C6\u30A3\u30F3\u30B0 -DBCP_TEST_WHILE_IDLE=\u30A2\u30A4\u30C9\u30EB\u30EA\u30B5\u30A4\u30AF\u30EB\u30E6\u30CB\u30C3\u30C8\u691C\u67FB -DS-Embedded_TableData=\u5185\u8535\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8 -FR-Designer_No-Privilege=\u30A2\u30AF\u30BB\u30B9\u304C\u62D2\u5426\u3055\u308C\u307E\u3057\u305F -FRFont-Subscript=\u4E0B\u4ED8\u304D -Background_Settings=\u80CC\u666F\u8A2D\u5B9A -FormulaD-Invalid_Formula=\u7121\u52B9\u306A\u516C\u5F0F -FR-Base_Margin=\u30DE\u30FC\u30B8\u30F3 -FR-Designer-Plugin_Shop_Installed=\u30D7\u30E9\u30B0\u30A4\u30F3\u30B7\u30E7\u30C3\u30D7\u304C\u3059\u3050\u306B\u958B\u59CB\u3059\u308B\u304B\u3069\u3046\u304B\u3001\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3055\u308C\u3066\u3044\u307E\u3059\u304B\uFF1F -M_Edit-Send_to_Back=\u6700\u80CC\u9762\u3078\u79FB\u52D5(K) -Email-Can_Preview_Report_Content=\u30C6\u30AD\u30B9\u30C8\u30D7\u30EC\u30D3\u30E5\u30FC\u30EC\u30DD\u30FC\u30C8\u306E\u5185\u5BB9 -FR-Designer-FRFont_Italic=\u50BE\u659C -CellWrite-Print_Background=\u30BB\u30EB\u80CC\u666F\u3092\u5370\u5237\u3059\u308B -Wizard=\u30A6\u30A3\u30B6\u30FC\u30C9 -Preference-Is_Drag_Permited=\u30C9\u30E9\u30C3\u30B0\u3092\u30B5\u30DD\u30FC\u30C8\u3059\u308B -FR-Designer_Release_Lock=\u30A2\u30F3\u30ED\u30C3\u30AF -Form-Delimiter=\u533A\u5207\u308A\u7B26 -wrong=\u9593\u9055\u3063\u305F -FR-Menu-Server_Chart_PreStyle=\u30B0\u30E9\u30D5\u30D7\u30EC\u5B9A\u7FA9\u914D\u8272 -Form-Button=\u30DC\u30BF\u30F3 -FormulaD-Valid_Formula=\u6709\u52B9\u306A\u516C\u5F0F -ParameterD-Parameter_Interface=\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u30A4\u30F3\u30BF\u30FC\u30D5\u30A7\u30FC\u30B9 -At_least_one_visual_worksheet=\u5C11\u306A\u304F\u3068\u3082\u4E00\u3064\u306E\u30D3\u30B8\u30E5\u30A2\u30EB\u30EF\u30FC\u30AF\u3092\u6301\u3063\u3066\u3044\u308B\u30EF\u30FC\u30AF\u30D6\u30C3\u30AF\u306B\u306F\u3001\u524A\u9664\u3057\u305F\u3044\u5834\u5408\u306F\u3001\u65B0\u3057\u3044\u30EF\u30FC\u30AF\u30B7\u30FC\u30C8\u3092\u633F\u5165\u3057\u3066\u304F\u3060\u3055\u3044 -Need_Min_Value=\u6700\u5C0F\u5024\u304C\u5FC5\u8981 -Allow_Blank=\u7A7A\u6B04\u3042\u308A -CellWrite-InsertRow_DEFAULT=\u30C7\u30D5\u30A9\u30EB\u30C8\u5024\u306F -Widget-Load_By_Complete=\u5B8C\u5168\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9 -FR-Designer-Basic_Only_Submit_Current_Sheet= -Sort-Sort_Order=\u30BD\u30FC\u30C8\u9806 -File-File_Size_Limit=\u30D5\u30A1\u30A4\u30EB\u30B5\u30A4\u30BA\u3092\u5236\u9650\u3059\u308B -PrintP-Print=\u5370\u5237(T) -FR-Designer-StyleAlignment_Center=\u4E2D\u592E\u63C3\u3048 -Preference-Setting_Colors=\u8272\u306E\u8A2D\u5B9A -Judge=\u88C1\u5224\u5B98 -Image-Adjust=\u9069\u5FDC -Collect-User_Information_DES=\u30A2\u30AF\u30C6\u30A3\u30D9\u30FC\u30C8\u30B3\u30FC\u30C9\u306F\u4F7F\u7528\u8005\u60C5\u5831\u306E\u53CE\u96C6\u306E\u305F\u3081\u3060\u3051\u306B\u7528\u3044\u3089\u308C\u307E\u3059\u3002\u4E0A\u306E\u300C\u30A2\u30AF\u30C6\u30A3\u30D9\u30FC\u30C8\u30B3\u30FC\u30C9\u53D6\u5F97\u300D\u3092\u30AF\u30EA\u30C3\u30AF\u3059\u308B\u3068\u3001\u65B0\u305F\u306A\u30A6\u30A3\u30F3\u30C9\u30A6\u304C\u73FE\u308C\u307E\u3059\u3002\u88FD\u54C1 -FR-Designer_Plugin_Normal_Update_From_Local=\u30ED\u30FC\u30AB\u30EB\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u66F4\u65B0 -BackgroundTexture-Canvas=\u30AD\u30E3\u30F3\u30D0\u30B9 -BarOutSide=\u5916\u306E\u67F1 -Preview_ToolTips=\u30D7\u30EC\u30D3\u30E5\u30FC\u63D0\u793A -FRFont-Family=\u540D\u79F0 -FR-Lic_does_not_Support_Remote=\u73FE\u5728\u4F7F\u7528\u3057\u3066\u3044\u308Blic\u306F\u9060\u9694\u30C7\u30B6\u30A4\u30F3\u6A5F\u80FD\u306B\u30B5\u30DD\u30FC\u30C8\u3057\u3066\u3044\u307E\u305B -InterfaceStyle=\u30B9\u30BF\u30A4\u30EB -RWA-Key=\u4E3B\u30AD\u30FC -WF-Name=\u540D\u79F0 -RWA-Click_Cell_To_Edit_Value=\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u30BB\u30EB\u4FEE\u6B63\u5024 -Utils-Row_Height=\u884C\u306E\u9AD8\u3055 -ReportD-Excel_Export=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u5C0E\u51FA\u5C5E\u6027 -Form-Please_Select_A_Kind_Of_Form_Container=\u4E00\u7A2E\u306E\u8868\u30B3\u30F3\u30C6\u30CA\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044 -Column_Does_Not_Exsit=\u5217\u304C\u5B58\u5728\u3057\u307E\u305B\u3093 -M_Insert-Hyperlink=\u30CF\u30A4\u30D1\u30FC\u30EA\u30F3\u30AF -can_not_include_underline=_\u3092\u542B\u3081\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093 -FR-Designer-Plugin_Jar_Expired=\u65E7Jar\u30D1\u30C3\u30AF -FR-Background_Image_Extend=\u62E1\u5F35 -TopDownShade=\u30B0\u30E9\u30C7\u30FC\u30B7\u30E7\u30F3\u30C0\u30A6\u30F3 -FR-Base_Right=\u53F3 -DataBinding=\u30C7\u30FC\u30BF\u30D0\u30F3\u30C7\u30A3\u30F3\u30B0 -ConnectionPool_Attr=\u63A5\u7D9A\u30D7\u30FC\u30EB\u5C5E\u6027 -Connect_SQL_Cannot_Null=\u30C7\u30FC\u30BF\u63A5\u7D9A\u3068SQL\u30D1\u30CD\u30EB\u306F\u7A7A\u306B\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093 -DBCP_MAX_ACTIVE=\u6700\u5927\u30A2\u30AF\u30C6\u30A3\u30D6\u63A5\u7D9A\u6570 -M_Window-Preference=\u30AA\u30D7\u30B7\u30E7\u30F3 -ToolBar_Top=\u30D8\u30C3\u30C0\u30FC\u30C4\u30FC\u30EB\u30D0\u30FC -FR-Designer_Indent-Pixel=\u753B\u7D20 -FR-Designer_Unit_MM=\u30DF\u30EA\u30E1\u30FC\u30C8\u30EB -IDLE=\u30A2\u30A4\u30C9\u30EB -FRFont-Underline=\u4E0B\u7DDA -FR-Designer-Plugin_Read_Plugin_List_Error=\u30D7\u30E9\u30B0\u30A4\u30F3\u30EA\u30B9\u30C8\u306E\u8AAD\u307F\u53D6\u308A\u6642\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E -Type_Set=\u30BF\u30A4\u30D7\u8A2D\u5B9A -M_Format_A-Cell_Attributes=\u305D\u306E\u4ED6\u5C5E\u6027 -CellWrite-Show_As_Image=\u753B\u50CF\u3067\u5185\u5BB9\u3092\u8868\u793A -ShowAsDownload=\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u30EA\u30F3\u30AF\u3067\uFF12\u9032\u6CD5\u306E\u5185\u5BB9\u3092\u8868\u793A -Form-ComboCheckBox=\u30C1\u30A7\u30C3\u30AF\u30DC\u30C3\u30AF\u30B9 -BackgroundTexture-WovenMat=\u7E54\u7269 -BindColumn-Custom_Data_Appearance=\u30E6\u30FC\u30B6\u30FC\u5B9A\u7FA9\u306F\u8868\u793A\u3059\u308A\u307E\u3059 -Actived=\u6D3B\u52D5\u7684 -Env-Local_Directory=\u30ED\u30FC\u30AB\u30EB\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA -Form-Colon=\u30B3\u30ED\u30F3 -Preference-Vertical_Scroll_Bar_Visible=\u7E26\u30B9\u30AF\u30ED\u30FC\u30EB\u30D0\u30FC\u306F\u53EF\u8996 -Utils-Show_Cell_Value=\u30BB\u30EB\u5024\u3092\u8868\u793A -FR-Designer_ReportColumns-Repeat_Row=\u884C\u9806\u5E8F\u3092\u30B3\u30D4\u30FC -SpecifiedG-Specified_Group=\u30B0\u30EB\u30FC\u30D4\u30F3\u30B0\u306E\u30E6\u30FC\u30B6\u5B9A\u7FA9 -RWA-Smart_Add_Cells=\u30A4\u30F3\u30C6\u30EA\u30B8\u30A7\u30F3\u30C8\u8FFD\u52A0\u30BB\u30EB -HF-Left_Section=\u5DE6\u5074\u30BB\u30AF\u30B7\u30E7\u30F3 -M_Report-Report_Background=\u5E33\u7968\u80CC\u666F -Image-Extend=\u62E1\u5F35 -FS_BI=\u51B3\u7B56\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0 -ToolBar_Bottom=\u30D5\u30C3\u30BF\u30FC\u30C4\u30FC\u30EB\u30D0\u30FC -Hgap=\u6C34\u5E73\u9593\u9699 -FR-Designer_Enter-New-FileName=\u65B0\u3057\u3044\u30D5\u30A1\u30A4\u30EB\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044 -Verify_Fail=\u70B9\u691C\u306B\u5931\u6557\u3057\u307E\u3057\u305F -CellWrite-InsertRow_Policy=\u884C\u6226\u7565\u3092\u633F\u5165 -FR-Designer-Plugin_Illegal_Plugin_Zip=\u5408\u6CD5\u7684\u306A\u30D7\u30E9\u30B0\u30A4\u30F3\u30D1\u30C3\u30AF\u3067\u306F\u3042\u308A\u307E\u305B\u3093 -RCodeVersion=\u30D0\u30FC\u30B8\u30E7\u30F3 -Convert=\u5909\u63DB -Please_Drag=\u884C\u5217\u30D5\u30A3\u30FC\u30EB\u30C9\u3001\u53D6\u308A\u307E\u3068\u3081\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u5F15\u3063\u8FBC\u3081\u3066\u304F\u3060\u3055\u3044 -FR-Designer-Widget-Style_Preview=\u30D7\u30EC\u30D3\u30E5\u30FC -mobile_number=\u643A\u5E2F\u96FB\u8A71\u756A\u53F7 -FR-Designer_Form-ComboCheckBox=\u30C1\u30A7\u30C3\u30AF\u30DC\u30C3\u30AF\u30B9 -CacheValidateTime=\u5E33\u7968\u30AD\u30E3\u30C3\u30B7\u30F3\u30B0\u6709\u52B9\u6642\u9593 -Hyperlink-Extends_Report_Parameters=\u5E33\u7968\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u3092\u7D99\u627F\u3059\u308B -FR-Designer_Values-Editor=\u5024\u30A8\u30C7\u30A3\u30BF -Export-Excel=Excel -Utils-Left_to_Right=\u5DE6\u304B\u3089\u53F3\u3078 -ExpandD-Vertical_Extendable=\u7E26\u5E83\u304C\u308B -Utils-Report_Runtime_Env=\u5E33\u7968\u4F5C\u696D\u76EE\u6B21 -Utils-Right_to_Left=\u53F3\u304B\u3089\u5DE6\u3078 -Utils-Beyond_the_top_side_of_Border=\u4E0A\u30DC\u30FC\u30C0\u30FC\u8D85\u3048 -Exception_StackTrace=\u30A8\u30E9\u30FC\u7570\u5E38\u30B9\u30BF\u30C3\u30AF\u60C5\u5831 -Corresponding_Fields=\u5BFE\u5FDC\u3059\u308B\u30D5\u30A3\u30FC\u30EB\u30C9 -Form-CheckBox=\u30D5\u30EC\u30FC\u30E0\u3092\u8907\u6570\u9078\u629E -Utils-Current_Row=\u30AB\u30EC\u30F3\u30C8\u884C -BuildIn=\u5185\u8535 -BindColumn-Results_Filter=\u7D50\u679C\u30BB\u30C3\u30C8\u306E\u30D5\u30A3\u30EB\u30BF -FR-Designer-Plugin_Manager=\u30D7\u30E9\u30B0\u30A4\u30F3\u7BA1\u7406 -M_File-Export-CSV=CSV\u66F8\u5F0F(\u30B3\u30F3\u30DE\u3067\u5206\u5272) -Data_Filter=\u30C7\u30FC\u30BF\u9078\u5225 -ReportServerP-Edit_Printer=\u30D7\u30EA\u30F3\u30BF\u30FC\u7DE8\u96C6 -FR-Designer_Datasource-Stored_Procedure=\u30B9\u30C8\u30A2\u30C9 \u30D7\u30ED\u30B7\u30FC\u30B8\u30E3 -RESTART=\u518D\u8D77\u52D5 -FormulaD-Function_name=\u95A2\u6570\u540D -ChooseOneButton=\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u3092\u4E00\u3064\u9078\u629E\u3057\u3066\u304B\u3089\u8FFD\u52A0\u3057\u3066\u304F\u3060\u3055\u3044 -Priority=\u512A\u5148\u30E9\u30F3\u30AF -Datasource-Datasource=\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9 -FR-Designer_Width=\u5E83\u3055 -Cannot-Add_To_This_Area=\u5730\u57DF\u306B\u306F\u8FFD\u52A0\u3067\u304D\u307E\u305B\u3093 -Run=\u904B\u884C -Set_Submit_Condition=\u6761\u4EF6\u3092\u8A2D\u7F6E\u306B\u63D0\u51FA\u3059\u308B\u3053\u3068\u306B\u3057\u305F -FR-Base_Value=\u5024 -fileLocked_undeleted=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u304C\u30ED\u30C3\u30AF\u3055\u308C\u3066\u3044\u308B\u3001\u3042\u306A\u305F\u304C\u524A\u9664\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\uFF01 -Web_Apply=WEB\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3 -Refresh_Database=\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u5237\u65B0 -Set_Row_Title_End=\u91CD\u8907\u3059\u308B\u7D42\u4E86\u884C\u3092\u8A2D\u5B9A -FR-Utils-New_Folder=\u30D5\u30A1\u30A4\u30EB\u65B0\u898F\u4F5C\u6210 -BiasD-From-upper_left_to_lower_right=\u5DE6\u4E0A\u5074\u304B\u3089\u53F3\u4E0B\u5074\u3078\u5E83\u304C\u308B -CapsLock=Caps Lock\u30AD\u30FC\u304C\u30AA\u30F3\u306B\u306A\u3063\u3066\u3044\u308B -StyleFormat-Sample=\u4F8B -RWA-Smart_Add_Cell_Group=\u30A4\u30F3\u30C6\u30EA\u30B8\u30A7\u30F3\u30C8\u6DFB\u52A0\u30EC\u30A4\u30E4\u30FC\u7D44 -MConfig-CancelButton=\u30AD\u30E3\u30F3\u30BB\u30EB -Function-Choose_Function_Class=\u95A2\u6570\u30AF\u30E9\u30B9\u3092\u9078\u629E\u3059\u308B -LatLng=\u5EA7\u6A19 -DS-Server_TableData=\u30B5\u30FC\u30D0\u30FC\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8 -BackgroundTexture-GreenMarble=\u7DD1\u8272\u306E\u5927\u7406\u77F3 -read_time_out=\u30ED\u30FC\u30C9\u306E\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8 -JavaScript-Commit_to_Database=\u5165\u5EAB\u63D0\u51FA -DS-Relation_TableData=\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u95A2\u9023\u4ED8\u3051 -CellWrite-Page_Before_Row=\u884C\u524D\u306E\u6539\u9801 -FR-Designer-Plugin_Load_Plugins_From_Server=\u30D7\u30E9\u30B0\u30A4\u30F3\u30DE\u30FC\u30B1\u30C3\u30C8\u304B\u3089\u30C7\u30FC\u30BF\u53D6\u5F97\u4E2D -D-Dispaly_Divide_Result_Set_into_Groups=resultset\u306E\u30B0\u30EB\u30FC\u30D7\u5206\u3051 -Closed=\u9589\u9396\u6E08\u307F -RWA-Help=\u8A2D\u7F6E\u5F8C\u306E\u6539\u6B63\u3092\u66F4\u65B0\u3057\u306A\u3044\u3068\u3001\u7533\u544A\u30D7\u30EC\u30D3\u30E5\u30FC\u30EC\u30DD\u30FC\u30C8\u306B\u8A18\u9332\u3055\u308C\u3066\u3044\u306A\u3044\u6240\u5728\u30EC\u30A4\u30E4 -FR-Designer-Widget-Style_Custom= -FR-Designer-Widget-Style_Render_Style=\u307C\u304B\u3057\u30B9\u30BF\u30A4\u30EB -Highlight-Barcode=\u30D0\u30FC\u30B3\u30FC\u30C9 -FR-Designer_Connect_SQL_Cannot_Null=\u30C7\u30FC\u30BF\u63A5\u7D9A\u3068SQL\u30D1\u30CD\u30EB\u306F\u7A7A\u306B\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093 -trigger=\u6A19\u984C -M-Data_Analysis=\u30C7\u30FC\u30BF\u5206\u6790 -Function-The_selected_file_cannot_be_null=\u9078\u629E\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u306F\u7A7A\u5024\u306B\u306A\u3063\u3066\u306F\u3044\u3051\u307E\u305B\u3093 -No-Privilege=\u30A2\u30AF\u30BB\u30B9\u304C\u62D2\u5426\u3055\u308C\u307E\u3057\u305F -ReportColumns-Repeat_Column=\u5217\u756A\u53F7\u306E\u7E70\u308A\u8FD4\u3057 -SecondGraduationUnit=\u4E8C\u6B21\u7684\u76EE\u76DB\u308A\u5358\u4F4D -Form-Widget_Property_Value=\u5C5E\u6027\u5024 -GIVE-NAME=\u547D\u540D -FR-Designer_Rename=\u540D\u79F0\u306E\u5909\u66F4 -Utils-Merge_Cell=\u30BB\u30EB\u3092\u7D50\u5408\u3059\u308B -Style-Spacing_After=\u6BB5\u5F8C -Enlarge_Or_Reduce=\u30BA\u30FC\u30E0 -Tree-Height=\u9AD8\u3055 -RCodeErrorCorrect=\u30A8\u30E9\u30FC\u8A02\u6B63 -Enter-New-FileName=\u65B0\u3057\u3044\u30D5\u30A1\u30A4\u30EB\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044 -try_resending=\u30C8\u30EA\u30AC\u30FC\u3055\u308C\u308B -M-Open_Report=\u3092\u958B\u304F... -Please_Select=\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044 -InRow=\u884C(R) -Form-TextArea=\u6587\u66F8\u57DF -FR-Designer_Https_Enable=https\u4F7F\u7528\u958B\u59CB -Widget-Custom_Widget_Config=\u30AB\u30B9\u30BF\u30DE\u30A4\u30BA\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB -already_exists=\u3053\u3053\u306F\u3059\u3067\u306B\u5B58\u5728\u3057\u3066\u3044\u307E\u3059 -Original_Marked_Filed=\u521D\u671F\u30BF\u30B0\u30D5\u30A3\u30FC\u30EB\u30C9 -BackgroundTexture-Sand=\u7802\u6D5C -Values=\u5024 -Not_use_a_cell_attribute_table_editing=\u3042\u306A\u305F\u304C\u7DE8\u96C6\u3059\u308B\u30BB\u30EB\u306E\u5C5E\u6027\u30C6\u30FC\u30D6\u30EB\u3092\u4F7F\u7528\u3059\u308B\u3053\u3068 -Root=\u30EB\u30FC\u30C8\u30CE\u30FC\u30C9 -cycle=\u5468\u671F -open-new-form-tip=711\u4EE5\u4E0B\u306E\u751F\u7523\u306E\u305F\u3081\u306E\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u306E\u73FE\u5728\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u306F\u3001\u4E92\u63DB\u6027\u304C\u306A\u3044\u3068 -Support-Current_Auto_Complete_Shortcut=\u73FE\u5728\u306E\u30B7\u30E7\u30FC\u30C8\u30AB\u30C3\u30C8\u30AD\u30FC -GROUPING_MODE=\u666E\u901A\u30B0\u30EB\u30FC\u30D7\u5206\u3051 -DBCP_MAX_IDLE=\u6700\u5927\u30A2\u30A4\u30C9\u30EB\u63A5\u7D9A\u6570 -BackgroundTexture-BlueTissuePaper=\u9752\u3044\u30B5\u30F3\u30C9\u30DA\u30FC\u30D1\u30FC -ReportD-Export_Hided_Row=\u96A0\u3057\u305F\u884C\u3092\u5C0E\u51FA -FR-Custom_styles_lost=\u30AB\u30B9\u30BF\u30DE\u30A4\u30BA\u30B9\u30BF\u30A4\u30EB\u306F\u5931\u308F\u308C\u307E\u3057\u305F -Env-Des2=Servlet\u306E\u4F4D\u7F6E\u306F\u30DB\u30B9\u30C8\u30B3\u30F3\u30D4\u30E5\u30FC\u30BF\u540D\u3001\u30A4\u30F3\u30BF\u30FC\u30D5\u30A7\u30A4\u30B9\u3001WEB\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u3001 -Env-Des1=\u5E33\u7968\u30B5\u30FC\u30D0\u30FC\u304C\u3042\u308BWEB-INF\u76EE\u6B21\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044 -PageSetup-Placement_Center_on_Page=\u4E2D\u592E\u63C3\u3048 -sure_to_delete=\u524A\u9664\u3092\u78BA\u8A8D\u3057\u307E\u3059 -Already_exists_not_add_repeat=\u3059\u3067\u306B\u5B58\u5728\u3057\u3066\u3044\u308B\u3001\u30EA\u30D4\u30FC\u30C8\u3092\u8FFD\u52A0\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044 -Axis_Title=\u8EF8\u306E\u8868\u984C -FR-Designer-Plugin_Install_Failed=\u30D7\u30E9\u30B0\u30A4\u30F3\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u306B\u5931\u6557\u3057\u307E\u3057\u305F -FR-Designer-Widget-Style_Frame=\u30D5\u30EC\u30FC\u30E0 -MainGraduationUnit=\u4E3B\u306A\u76EE\u76DB\u308A\u5358\u4F4D -Second_Axis=\u6B21\u5EA7\u6A19\u8EF8 -Classifier-Ge=\u500B -MSBold=\u5FAE\u8EDF\u96C5\u9ED2 -Form-Design_Size=\u30C7\u30B6\u30A4\u30F3\u30B5\u30A4\u30BA -FR-App-Template_Save=\u4FDD\u5B58 -ExpandD-Horizontal_Extendable=\u6A2A\u5E83\u304C\u308B -RP_Authority_Edit=\u6A29\u9650\u7DE8\u96C6 -Warnning=\u30EA\u30DE\u30A4\u30F3\u30C9 -RoleName_Can_Not_Be_Null=\u5F79\u5272\u540D\u306F\u7A7A\u6B04\u306B\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u305A\u3001\u91CD\u8907\u3059\u308B\u3053\u3068\u3082\u3067\u304D\u307E\u305B\u3093 -Application=\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3 -Formula_Dictionary_Display_Examples_Html=\u5B9F\u969B\u5024\u7BC4\u56F2\u306F\ -ECP-error_pwd=\u30D1\u30B9\u30EF\u30FC\u30C9\u30A8\u30E9\u30FC -FR-Hyperlink_ChartHyperlink=\u30B0\u30E9\u30D5\u30CF\u30A4\u30D1\u30FC\u30EA\u30F3\u30AF -M_Edit-FormatBrush=\u66F8\u5F0F\u30D6\u30E9\u30B7(B) -Indent-Pixel=\u753B\u7D20 -FR-Designer-Widget-Style_Border_Line=\u30D5\u30EC\u30FC\u30E0\u592A\u3055 -Widget-Default_Widget_Config=\u57FA\u672C\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB -Version-does-not-support=\u73FE\u5728\u4F7F\u7528\u3057\u3066\u3044\u308Blic\u306F\u9060\u9694\u30C7\u30B6\u30A4\u30F3\u6A5F\u80FD\u306B\u30B5\u30DD\u30FC\u30C8\u3057\u3066\u3044\u307E\u305B\u3093\u3002 -StyleAlignment-Right_To_Left=\u53F3\u304B\u3089\u5DE6\u3078 -Style-Spacing_Before=\u6BB5\u524D -Has_Existed=\u3059\u3067\u306B\u5B58\u5728\u3057\u3066\u3044\u307E\u3059 -FR-Designer_DisplayNothingBeforeQuery=\u30EC\u30DD\u30FC\u30C8\u304C\u8868\u793A\u3055\u308C\u307E\u305B\u3093\u524D\u306B\u5185\u5BB9\u3092\u78BA\u8A8D\u3059\u308B]\u3092\u30AF\u30EA -Still=\u4F9D\u7136\u3068\u3057\u3066 -JS_WARNING2=\ \u4F8B\uFF1Ahttp\://localhost\:8075/WebReport/demo.js -JS_WARNING1= \u76F8\u5BFE\u7684\u5E33\u7968\u5DE5\u7A0B\u306EWebReport\u306E\u76EE\u6B21\u304C\u3001WebReport\\js\u4E0B\u306B\u5F15\u7528\u3059\u308Bjs -Connectionline=\u63A5\u7D9A\u30EF\u30A4\u30E4\u30E2\u30C7\u30EB -Utils-Insert_Record=\u8A18\u9332\u633F\u5165 -Set-Parameter-Name=\u307E\u305A\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u540D\u3092\u8A2D\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044 -More-information=\u8A73\u7D30\u60C5\u5831 -Parameter-Boolean=\u8AD6\u7406\u578B -FRFont-Strikethrough=\u53D6\u308A\u6D88\u3057\u7DDA -Server-version-tip=\u3042\u306A\u305F\u306F\u3001\u73FE\u5728\u3001\u3042\u306A\u305F\u306F\u3044\u304F\u3064\u304B\u306E\u30D7\u30ED\u30D1\u30C6\u30A3\u304C\u52B9\u679C\u7684\u306B\u4FDD\u5B58\u3059\u308B\u3053\u3068\u304C -Form-All_Files=\u5168\u3066\u306E\u30D5\u30A1\u30A4\u30EB -DBCP_NUM_TEST_PER_EVCTION_RUN=\u30A2\u30A4\u30C9\u30EB\u63A5\u7D9A\u30EA\u30B5\u30A4\u30AF\u30EB\u691C\u67FB\u6570 -FR-Designer-FRFont_Family=\u540D\u524D -Device=\u8A2D\u5099 -M_Insert-Cell=\u30BB\u30EB\u8981\u7D20 -Present-Formula_Present=\u516C\u5F0F\u30D5\u30A9\u30EB\u30E0 -FRFont-Superscript=\u4E0A\u4ED8\u304D -CellWrite-Page_Before_Column=\u5217\u524D\u306E\u6539\u9801 -Golden=\u30B4\u30FC\u30EB\u30C7\u30F3 -Preference-Support_Cell_Editor_Definition=\u30BB\u30EB\u30A8\u30C7\u30A3\u30BF\u30FC\u3092\u30B5\u30DD\u30FC\u30C8\u3059\u308B -M-Page_Preview=\u30DA\u30FC\u30B8\u5225\u30D7\u30EC\u30D3\u30E5\u30FC -HJS-CC_to=CC -Tree-Select_Leaf_Only=\u8449\u30CE\u30FC\u30C9\u306B\u623B\u308B -Pointer-A-Tick-Order=\u30DD\u30A4\u30F3\u30BF\u5024\u3068\u76EE\u76DB\u308A\u5024\u306E\u6570\u91CF\u30E9\u30F3\u30AF -Pink=\u30D4\u30F3\u30AF -StyleAlignment-Distibuted=\u5747\u7B49\u5272\u308A\u4ED8\u3051 -Odd=\u5947\u6570 -already-saved=\u4FDD\u5B58\u3055\u308C\u3066\u3044\u308B -FR-Hyperlink_Chart_Cell=\u30B0\u30E9\u30D5\u30CF\u30A4\u30D1\u30FC\u30EA\u30F3\u30AF-\u9023\u52D5\u30BB\u30EB -Style-Left_Indent=\u5DE6\u30A4\u30F3\u30C7\u30F3\u30C8 -Offline=\u79BB\u7EBF -Form-Hierarchy_Tree_Next=\u6B21 -Needle=\u30DD\u30A4\u30F3\u30BF -GoogleMap=Google\u30DE\u30C3\u30D7 -Running=\u904B\u884C\u4E2D -M_Edit-Unmerge_Cell=\u30BB\u30EB\u3092\u5206\u5272\u3059\u308B -Out_Border_Line=\u5916\u5074\u30D5\u30EC\u30FC\u30E0\u30E9\u30A4\u30F3 -Style-Spacing=\u9593\u9694\u8DDD\u96E2 -FR-Utils_Submit=\u63D0\u51FA -ReportServerP-Previous=\u524D\u30DA\u30FC\u30B8 -StyleAlignment-Text_Style=\u30C6\u30AD\u30B9\u30C8\u30B9\u30BF\u30A4\u30EB -RelatedChart=\u30B0\u30E9\u30D5\u9023\u52D5 -ProcessManager=\u30D7\u30ED\u30BB\u30B9\u7BA1\u7406 -Cancel_Repeat_Attributes=\u30EA\u30D4\u30FC\u30C8\u30E9\u30F3\u30AF\u3092\u30AD\u30E3\u30F3\u30BB\u30EB\u3059\u308B\u306B\u306F -FR-App-File_Message=\u60C5\u5831 -Datasource-Stored_Procedure=\u30B9\u30C8\u30A2\u30C9 \u30D7\u30ED\u30B7\u30FC\u30B8\u30E3 -RWA-Row_Offset=\u884C\u30AA\u30D5\u30BB\u30C3\u30C8 -M_Format-Style=\u30B9\u30BF\u30A4\u30EB -detail_description=\u8A73\u7D30\u306A\u8AAC\u660E -FR-Designer-Widget-Style_Title_Content=\u6A19\u984C\u5185\u5BB9 -ParameterD-Report_Parameter=\u5E33\u7968\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC -HF-Edit_Header=\u30D8\u30C3\u30C0\u7DE8\u96C6 -Sytle-FRFont=\u30D5\u30A9\u30F3\u30C8 -FR-Designer_Finish_Export=\u5C0E\u51FA\u5B8C\u4E86 -MultiFileUpload=\u8907\u6570\u30D5\u30A1\u30A4\u30EB\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9 -HF-Page_Number=\u30DA\u30FC\u30B8\u756A\u53F7 -Style-Right_Indent=\u53F3\u30A4\u30F3\u30C7\u30F3\u30C8 -Desktop=\u30C7\u30B9\u30AF\u30C8\u30C3\u30D7 -FR-Server-All_Error=\u30A8\u30E9\u30FC -ConditionB-Operator=\u64CD\u4F5C -Today=\u4ECA\u65E5 -Form-Widget_Name=\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u540D -Covered_All=\u5168\u3066\u8986\u3046 -Day=\u65E5 -External=\u5916\u90E8 -Black_Font=\u592A\u5B57 -LOG-Report_Server_IS_Started=\u5E33\u7968\u30B5\u30FC\u30D0\u30FC\u3082\u3046\u8D77\u52D5\u3055\u308C\u3066\u3044\u307E\u3059 -Tips\:You_Can_Input_B1_To_Input_The_Data_Of_The_First_Row_Second_Column=\u30D2\u30F3\u30C8\:B1\u3092\u5165\u529B -FR-Designer_ChooseOneButton=\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u3092\u4E00\u3064\u9078\u629E\u3057\u3066\u304B\u3089\u8FFD\u52A0\u3057\u3066\u304F\u3060\u3055\u3044 -Widget-Sizing=\u5927\u304D\u3055\u8ABF\u6574 -NO_Border_Line=\u30D5\u30EC\u30FC\u30E0\u30E9\u30A4\u30F3\u7121\u3057 -Cell_Data=\u30BB\u30EB\u30C7\u30FC\u30BF -StyleAlignment-Vertical_Text=\u6587\u5B57\u3092\u7E26\u306B\u3059\u308B -Label=\u30BF\u30B0 -Orange=\u30AA\u30EC\u30F3\u30B8 -zeroMarginWarn=\u30D7\u30EA\u30F3\u30BF\u306F\u5C0F\u3055\u306A\u7F36
\u30B3\u30F3\u30C6\u30F3\u30C4\u4E0D\u8DB3\u3092\u5370\u5237\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u3001\u7269\u7406\u30DE\u30FC\u30B8\u30F3 -Widget-Date_Selector_Return_Type=\u623B\u308A\u5024\u30BF\u30A4\u30D7 -Utils-Switch_To_Template_Reportlet=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u5E33\u7968\u306B\u5207\u308A\u66FF\u3048 -satisfy=\u6761\u4EF6\u3092\u6E80\u305F\u3059 -FR-Designer_WidgetDisplyPosition=\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u8868\u793A\u4F4D\u7F6E -FR-Base_Top=\u4E0A -FR-Designer_Form-CheckBox=\u30D5\u30EC\u30FC\u30E0\u3092\u8907\u6570\u9078\u629E -Reportlet-Parameter_Type=\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u4F1D\u9054\u65B9\u6CD5 -sending=\u9001\u4FE1\u4E2D... -FR-Designer-FRFont_Foreground=\u8272 -FR-Import-Export_SVG=SVG\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8 -M_Edit-Clear_Contents=\u5185\u5BB9(C) -Session=\u30BB\u30C3\u30B7\u30E7\u30F3 -Widget-Load_Type=\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9 -template_unsaved=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u304C\u4FDD\u5B58\u3067\u304D\u306A\u3044 -check_communication=\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u901A\u4FE1\u304C\u6B63\u5E38\u3067\u3042\u308A\u3001\u30B5\u30FC\u30D0\u304C\u52D5\u4F5C\u3057\u3066\u3044\u308B\u3053\u3068\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060 -List-Need_Head=\u30EA\u30B9\u30C8\u30D8\u30C3\u30C9\u304C\u5FC5\u8981\u3067\u3059 -FR-Designer-Plugin_Has_Been_Installed=\u30D7\u30E9\u30B0\u30A4\u30F3\u306F\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u30D7\u30E9\u30B0\u30A4\u30F3\u3092 -FR-Widget_Tree_And_Table=\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u30C4\u30EA\u30FC\u3068\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u8868 -FR-Base_Help=\u30D8\u30EB\u30D7 -FR-Designer-Plugin_Update_Successful=\u30D7\u30E9\u30B0\u30A4\u30F3\u30A2\u30C3\u30D7\u30B0\u30EC\u30FC\u30C9\u306B\u6210\u529F\u3057\u307E\u3057\u305F\u3002\u30B5\u30FC\u30D0\u30FC\u3092 -August=\u516B\u6708 -LOG-Is_Being_Openned=\u958B\u3044\u3066\u3044\u307E\u3059 -BackgroundTexture-Oak=\u30AA\u30FC\u30AF -Multi_nam_formula=\ \u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u540D\: \u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u6761\u4EF6\: -TurnOn=\u8D77\u52D5 -HJS-Send_Successfully=\u9001\u4FE1\u6210\u529F -Mon=\u6708 -Inner_Parameter=\u5185\u8535\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC -Required=\u8A18\u5165\u5FC5\u9808 -Summary=\u6982\u8981 -template_unopened=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u3092\u958B\u304F\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093 -FR-Base_Bottom=\u4E0B -DataFunction-Min=\u6700\u5C0F\u5024 -StyleFormat-Percent=\u30D1\u30FC\u30BB\u30F3\u30C6\u30FC\u30B8 -FR-App-All_Custom=\u30AB\u30B9\u30BF\u30DE\u30A4\u30BA -M_Insert-Data_Column=\u30C7\u30FC\u30BF\u5217 -PLEASE=\u3057\u3066\u304F\u3060\u3055\u3044 -Numbers=\u6841\u6570 -Release_Lock=\u30A2\u30F3\u30ED\u30C3\u30AF -Background-Background_is_NULL=\u80CC\u666F\u306A\u3057 -FR-Designer_Sytle-FRFont=\u30D5\u30A9\u30F3\u30C8 -Gradation=\u69CB\u6210 -The_current_list_is_empty=\u73FE\u5728\u306E\u30EA\u30B9\u30C8\u306F\u7A7A\u3067\u3059 -Formula_Dictionary_Display_Examples=\ \u5B9F\u969B\u5024\u7BC4\u56F2\u306F\ -Schedule-Template_Parameter=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC -JSShow=\u52D5\u614B\u8868\u793A -Level_coordinates=\u30EC\u30D9\u30EB\u306E\u5EA7\u6A19 -MainGraduationLine=\u30E1\u30A4\u30F3\u30B9\u30B1\u30FC\u30EB\u30E9\u30A4\u30F3 -Hyperlink-Web_link=\u30A6\u30A7\u30D6\u30EA\u30F3\u30AF -StyleAlignment-between_-90_and_90=-90\u304B\u308990\u307E\u3067\u306E\u7BC4\u56F2\u3067 -FormulaD-Custom_Function=\u30E6\u30FC\u30B6\u5B9A\u7FA9\u95A2\u6570 -FR-Designer_Integer=\u6574\u6570 -PageSetup-Finis_Start_Row=\u91CD\u8907\u3059\u308B\u7D42\u4E86\u884C -RWA-Remove_Field=\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u30EA\u30E0\u30FC\u30D6 -Form-Desin_Width=\u30C7\u30B6\u30A4\u30F3\u5E45 -No-tableData=\u623B\u3057\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u304C\u3042\u308A\u307E\u305B\u3093 -Page_Total=\u5408\u8A08 -FR-Designer-Plugin_Connect_Server_Error=\u30D7\u30E9\u30B0\u30A4\u30F3\u30DE\u30FC\u30B1\u30C3\u30C8\u306B\u63A5\u7D9A\u3067\u304D\u307E\u305B\u3093\u3002\uFF0C\u5F8C\u3067\u518D\u5EA6 -Import-Excel_Source=Excel\u30BD\u30FC\u30B9 -Utils-Left_to_Right_a=\u5DE6\u304B\u3089\u53F3\u3078 -ExpandD-Expand_Attribute=\u5C5E\u6027\u3092\u62E1\u5F35\u3059\u308B -Report-Write_Attributes=\u5E33\u7968\u8A18\u5165\u5C5E\u6027 -Utils-Current_Column=\u30AB\u30EC\u30F3\u30C8\u5217 -Need_Max_Value=\u6700\u5927\u5024\u304C\u5FC5\u8981 -Report_Not_Exist=\u9078\u629E\u3057\u305F\u5E33\u7968\u306F\u5B58\u5728\u3057\u307E\u305B\u3093\uFF01 -HF-Insert_Content=\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u633F\u5165 -UpParent=\u4E0A\u89AA\u30BB\u30EB -PageSetup-Page=\u30DA\u30FC\u30B8 -Utils-Move_Up=\u4E0A\u3078\u79FB\u52D5 -BackgroundTexture-PurpleMesh=\u7D2B\u8272\u306E\u30E1\u30C3\u30B7\u30E5 -Export-Word=Word\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8 -ServerM-Widget_Manager=\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u7BA1\u7406 -FR-Designer-Basic_Activation_Key=\u30C7\u30B6\u30A4\u30CA\u30FC\u6574\u7406\u756A\u53F7\uFF1A -FR-App-Template_Report_Not_Exist=\u9078\u629E\u3057\u305F\u5E33\u7968\u306F\u5B58\u5728\u3057\u307E\u305B\u3093\! -Protected=\u4FDD\u8B77 -Skip=\u30B9\u30AD\u30C3\u30D7 -FR-Designer_PageSetup-Vertically=\u5782\u76F4\u4E2D\u592E\u63C3\u3048 -revert=\u3084\u308A\u76F4\u3059 -PageSetup-Predefined=\u30D7\u30EC\u5B9A\u7FA9 -Border-Style-Radius=\u89D2\u4E38 -IntPart=\u6574\u6570\u90E8\u5206 -ExpandD-Data_Column=\u30C7\u30FC\u30BF\u30B3\u30E9\u30E0 -Sort-Ascending=\u6607\u9806 -FR-Designer-Widget_Style=\u30B9\u30BF\u30A4\u30EB -parameter_name_exist=\u30D1\u30E9\u30E1\u30FC\u30BF\u540D\u306F\u65E2\u306B\u5B58\u5728\u3057\u3066\u3044\u307E\u3059 -FR-Designer_Layer-Build=\u30D5\u30A1\u30BB\u30C3\u30C8\u7D44\u307F\u7ACB\u3066 -Please_Rename=\u518D\u5EA6\u547D\u540D\u3057\u3066\u304F\u3060\u3055\u3044 -Form-Editing_Listeners=\u4E8B\u4EF6\u7DE8\u96C6 -RWA-Smart_Add_Fields=\u30A4\u30F3\u30C6\u30EA\u30B8\u30A7\u30F3\u30C8\u8FFD\u52A0\u30D5\u30A3\u30FC\u30EB\u30C9 -FR-Designer-Tree_Width=\u5E45 -Record=\u8A18\u9332 -Poly-Report_Component=\u805A\u5408\u5E33\u7968\u30A2\u30BB\u30F3\u30D6\u30EA -Options=\u30AA\u30D7\u30B7\u30E7\u30F3 -NS-war-remote=\u30A8\u30E9\u30FC\u30B3\u30FC\u30C9\:1117 \u5727\u7E2E\u914D\u7F6E\u306F\u9060\u9694\u30C7\u30B6\u30A4\u30F3\u306B\u30B5\u30DD\u30FC\u30C8\u3057\u3066\u3044\u307E\u305B\u3093 -Sche-Minute=\u5206 -Three_Rows_Of_Three_Grid=3\u4E57\u306E3\u3064\u306E\u884C -WorkSheet=\u30EF\u30FC\u30AF\u30B7\u30FC\u30C8 -FR-Designer-Widget_Size=\u5927\u304D\u3055\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB -BindColumn-Select=\u30EA\u30B9\u30C8 -FR-Widget_Mobile_Terminal=\u30E2\u30D0\u30A4\u30EB\u7AEF\u672B -FR-Background_Image_Titled=\u5C55\u958B -SetPrinterOffset=\u5B89\u3044\u30D7\u30EA\u30F3\u30BF -FR-Designer-Plugin_Installed=\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u6E08\u307F -FR-Designer-Hyperlink_Name=\u540D\u524D -FR-Designer_Form-Button=\u30DC\u30BF\u30F3 -Black=\u30D6\u30E9\u30C3\u30AF -FR-Designer-Widget-Style_Border_Color=\u30D5\u30EC\u30FC\u30E0\u8272 -Set_Submit_Event=\u63D0\u51FA\u4E8B\u4EF6\u3092\u8A2D\u5B9A -PDF-Print_isPopup=\u8A2D\u5B9A\u30A6\u30A3\u30F3\u30C9\u30A6\u3092\u30DD\u30C3\u30D7\u30A2\u30C3\u30D7\u3059\u308B\u304B\u5426\u304B -LayerPageReport_CountPerPage=\u6BCE\u30DA\u30FC\u30B8\u8A18\u9332\u6570 -Display_Modes=\u30E2\u30C7\u30EB\u3092\u8868\u793A -RowSpan=\u884C\u7BC4\u56F2 -Datasource-Test_Connection=\u63A5\u7D9A\u30C6\u30B9\u30C8 -Function-Function_Manager=\u95A2\u6570\u30DE\u30CD\u30FC\u30B8\u30E3\u30FC -Host_Name=\u30DB\u30B9\u30C8\u30B3\u30F3\u30D4\u30E5\u30FC\u30BF\u540D -CellWrite-Show_As_HTML=HTML\u3067\u5185\u5BB9\u3092\u8868\u793A -FR-Designer-Widget-Style_Shadow=\u9670\u5F71 -FR-Designer_Parameter_String=\u6587\u5B57\u5217 -Form-SupportTag=\u30BF\u30B0\u306B\u8868\u793A -ReportD-Report_Write_Attributes=\u5E33\u7968\u66F8\u5F0F\u5C5E\u6027 -DataFunction-Count=\u4EF6\u6570 -Top_And_Thick_Bottom_Border_Line=\u4E0A\u30D5\u30EC\u30FC\u30E0\u30E9\u30A4\u30F3\u3068\u7C97\u4E0B\u30D5\u30EC\u30FC\u30E0\u30E9\u30A4\u30F3 -Client=\u9867\u5BA2\u5074 -BindColumn-Result_Serial_Number_Start_From_1=\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u306E\u756A\u53F7\u306F1\u304B\u3089 -History=\u6B74\u53F2 -Already_exists=\u3059\u3067\u306B\u5B58\u5728\u3057\u3066\u3044\u308B\u5834\u5408\u3001\u518D\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\uFF01 -Datasource-Original_Charset=\u30AA\u30EA\u30B8\u30CA\u30EB\u6587\u5B57\u30B3\u30FC\u30C9 -FR-Base_Left=\u5DE6 -ReportServerP-Next=\u6B21\u30DA\u30FC\u30B8 -BindColumn-Top_N=\u524D\u306EN\u500B -Animation_Special=\u7279\u5225\u306B\u826F\u3044\u52B9\u679C -Widget-Chart_Widget_Config=\u30B0\u30E9\u30D5\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB -FR-Designer-Plugin_Cannot_Update_Not_Install=\u30D7\u30E9\u30B0\u30A4\u30F3\u66F4\u65B0\u3092\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093\u3002\u5F53\u8A72 -After_Changed_Some_Attributes_Are_Different=\u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u3044\u304F\u3064\u304B\u306E\u30B9\u30C6\u30FC\u30C8\u30E1\u30F3\u30C8\u306E\u5F8C\u306B\u5909\u63DB\u304C\u7D99\u7D9A\u3059\u308B\u304B\u3069\u3046\u304B\u3001\u5909\u66F4\u3055\u308C\u307E\u3059 -PieStyle=\u30D1\u30A4 -HF-Are_you_sure_to_delete_it=\u5F53\u8A72\u9805\u76EE\u3092\u524A\u9664\u3057\u3066\u3082\u3088\u308D\u3057\u3044\u3067\u3059\u304B -Utils-Design-File_Open=\u958B\u304F -FR-Utils_Label=\u30BF\u30B0 -Data-Label=\u30BF\u30B0 -M_Insert-Text=\u30C6\u30AD\u30B9\u30C8 -Form-View_Tree=\u30D3\u30E5\u30FC\u30C4\u30EA\u30FC -M_Insert-Chart=\u56F3 -HF-Even_Page=\u5076\u6570\u30DA\u30FC\u30B8 -ReportServerP-Report_server_parameter=\u5E33\u7968\u30B5\u30FC\u30D0\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC -JavaScript-Form_Submit=\u8868\u63D0\u51FA -Horizontal-Split_Layout=\u6C34\u5E73\u5206\u5272\u914D\u7F6E -BorderLayout-Center=\u4E2D -INFO-Reset_Webapp=\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u30B5\u30FC\u30D0\u30FC\u306E\u518D\u8A2D\u5B9A -FR-Designer_Text=\u30C6\u30AD\u30B9\u30C8 -IN_and_INOUT_type_not_as_cursor=IN\u304A\u3088\u3073INOUT\u30BF\u30A4\u30D7\u3067\u306F\u306A\u3044\u30AB\u30FC\u30BD\u30EB\u3068 -Main_Axis=\u30E1\u30A4\u30F3\u5EA7\u6A19\u8EF8 -M_Edit-Cut=\u5207\u308A\u53D6\u308A(T) -Utils-The_Name_has_been_existed=\u5F53\u8A72\u540D\u79F0\u306F\u65E2\u306B\u5B58\u5728\u3057\u3066\u3044\u307E\u3059 -FR-Background_Image=\u753B\u50CF -Character=\u6587\u5B57 -Unit_Thousand=\u5343 -Test=\u30C6\u30B9\u30C8 -Utils-Would_you_like_to_save=\u4FDD\u5B58\u3057\u307E\u3059\u304B -HF-Header_and_Footer=\u30D8\u30C3\u30C0\u30FC\u3068\u30D5\u30C3\u30BF\u30FC -LIST_MODE=\u30EA\u30B9\u30C8 -HF-Insert_Image=\u753B\u50CF\u3092\u633F\u5165 -FR-Designer-Widget-Style_Standard=\u6A19\u6E96 -FR-Designer_Form-List=\u30EA\u30B9\u30C8 -BackgroundTexture-Denim=\u30C7\u30CB\u30E0 -Execute_Report_by_Layer_Engine=\u30E9\u30A4\u30F3\u306E\u30A8\u30F3\u30B8\u30F3\u3067\u5E33\u7968\u3092\u5B9F\u884C\u3059\u308B -M_Edit-Bring_Forward=\u524D\u9762\u3078\u79FB\u52D5(F) -Choose_All=\u5168\u9078\u629E -Form-RadioGroup=\u30E9\u30B8\u30AA\u30DC\u30BF\u30F3\u30B0\u30EB\u30FC\u30D7 -FR-Base_Remove=\u524A\u9664 -FR-Remote_Connect2Server_Again=\u63A5\u7D9A\u304C\u4E2D\u65AD\u3057\u307E\u3057\u305F\u3002\u518D\u5EA6\u30B5\u30FC\u30D0\u30FC\u306B\u63A5\u7D9A\u3057\u307E\u3059\u304B\u3002 -Semicolon=\u5206\u53F7 -StyleFormat-Category=\u5206\u985E -Report_Template=\u5E33\u7968\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8 -Utils-Beyond_the_right_side_of_Border=\u53F3\u9818\u57DF\u3092\u30AA\u30FC\u30D0\u30FC -BackgroundTexture-Papyrus=\u7D19 -LayerPageReport_PageEngine=\u30DA\u30FC\u30B8\u5225\u306E\u6F14\u7B97\u3092\u4F7F\u7528\u3057\u3066\u5E33\u7968\u3092\u57F7\u884C -Schedule-The_selected_file_must_be_end_with_filter=\u9078\u629E\u30D5\u30A1\u30A4\u30EB\u306F.cpt\u53C8\u306F.class\u53C8\u306F.frm -Provide=\u63D0\u4F9B -FormulaD-Math_&_Trig=\u6570\u5B66\u95A2\u6570\u3068\u4E09\u89D2\u95A2\u6570 -FR-Designer-StyleAlignment_Right=\u53F3\u5BC4\u305B -Error_TableDataNameRepeat=\u3059\u3067\u306B\u30B5\u30FC\u30D0\u30FC\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u306B\u5B58\u5728\u3059\u308B\u304B\u8907\u6570\u306E\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u540D\u304C\u91CD -Choose_None=\u9078\u629E\u3057\u306A\u3044 -File-tree=\u30D5\u30A1\u30A4\u30EB\u30C4\u30EA\u30FC -FRFont-bold=\u592A\u5B57 -FR-Designer_Set_Submit_Condition=\u63D0\u51FA\u6761\u4EF6\u3092\u8A2D\u5B9A -Form-Change_Widget_Name=\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u540D\u5909\u66F4 -ReportColumns-Report_Columns=\u5E33\u7968\u30B3\u30E9\u30E0 -Can_not_use_FormatBursh=\u8907\u6570\u9078\u629E\u3057\u305F\u30A8\u30EA\u30A2\u3067\u306F\u66F8\u5F0F\u30D6\u30E9\u30B7\u3092\u4F7F\u7528\u3067\u304D\u307E\u305B\u3093\! -CellElement-Property_Table=\u30BB\u30EB\u306E\u30D7\u30ED\u30D1\u30C6\u30A3\u00B7\u30B7\u30FC\u30C8 -Dictionary-Dynamic_SQL=\u52D5\u614BSQL -FR-Designer_Form-CheckBoxGroup=\u30D5\u30EC\u30FC\u30E0\u30BB\u30C3\u30C8\u3092\u8907\u6570\u9078\u629E -DBCP_TIME_BETWEEN_EVICTIONRUNSMILLIS=\u30A2\u30A4\u30C9\u30EB\u63A5\u7D9A\u30EA\u30B5\u30A4\u30AF\u30EB\u30E6\u30CB\u30C3\u30C8\u4F11\u7720\u6642\u9593 -ReportD-Export_Hided_Column=\u96A0\u3057\u305F\u5217\u3092\u5C0E\u51FA -Preference-Support_Undo=\u5143\u306B\u623B\u3057\u3092\u30B5\u30DD\u30FC\u30C8\u3059\u308B -FR-mobile_report_analysis=\u5831\u544A\u66F8\u306E\u89E3\u6790 -Month=\u6708 -Utils-Column_Width=\u5217\u5E45 -Collect-Use_Designer=\u30C7\u30B6\u30A4\u30CA\u30FC\u3092\u4F7F\u7528 -Widget-User_Defined_Editor=\u30D7\u30EC\u5B9A\u7FA9\u30A8\u30C7\u30A3\u30BF\u3067\u3059\u3002\u5F53\u8A72\u30A8\u30C7\u30A3\u30BF\u306F\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u7BA1\u7406\u30E1\u30CB\u30E5\u30FC -Unit_Ten_Thousand=\u4E07 -Data_Setting=\u30C7\u30FC\u30BF\u8A2D\u5B9A -ECP_input_pwd=\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\: -period=\u3002 -Note=\u6CE8 -Multiline=\u8907\u6570\u884C\u7DE8\u96C6 -Datasource-Convert_Charset=\u6587\u5B57\u30B3\u30FC\u30C9\u5909\u63DB -DashBoard-ConnectionList=\u30C7\u30FC\u30BF\u63A5\u7D9A -Utils-Submit_Forcibly=\u5F37\u884C\u63D0\u51FA -Parent_Marked_Field=\u89AA\u30BF\u30B0\u30D5\u30A3\u30FC\u30EB\u30C9 -Logout=\u9000\u51FA -FR-Designer_Show_Blank_Row=\u7A7A\u767D\u884C\u3092\u88DC\u5145 -FR-Base_Format=\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8 -FR-App-Export_png=PNG\u66F8\u5F0F -Delete_Column=\u5217\u524A\u9664 -SecondGraduationLine=\u5C0F\u3055\u306A\u76EE\u76DB\u308A -SpecifiedG-Groups=\u30B0\u30EB\u30FC\u30D7 -CONTINUUM_MODE=\u96A3\u63A5\u3057\u305F\u9023\u7D9A\u3057\u305F\u30D1\u30B1\u30C3\u30C8 -Datasource-Connection_failed=\u63A5\u7D9A\u5931\u6557 -CategoryName=\u30AB\u30C6\u30B4\u30EA\u30FC\u540D -DBCP_INITIAL_SIZE=\u63A5\u7D9A\u6570\u306E\u521D\u671F\u5316 -Colors=\u8272 -FR-Import-Export_CSV=CSV\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8(\u30B3\u30F3\u30DE\u3067\u5206\u5272) -FR-Designer-StyleAlignment_Left=\u5DE6\u5BC4\u305B -BackgroundTexture-PaperBag=\u7D19\u888B -RWA-BuildIn_SQL=\u5185\u8535SQL -SingleLayer=\u5358\u5C64 -Or-you=\u307E\u305F\u306F -FR-Designer_Certificate_Path=\u8A3C\u66F8\u30EB\u30FC\u30C8 -Utils-Last_Page=\u7D42\u4E86\u9801 -BarCodeD-Drawing_Text=\u30D0\u30FC\u30B3\u30FC\u30C9\u30C6\u30AD\u30B9\u30C8\u3092\u8868\u793A\u3059\u308B -Warning-Template_Do_Not_Exsit=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u306F\u5B58\u5728\u3057\u307E\u305B\u3093 -BindColumn-Group=\u30B0\u30EB\u30FC\u30D7\u5206\u3051 -Export-SVG=SVG\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8 -Plane3D=\u5E73\u97623D -SessionID=sessionID\u306F\u73FE\u5728\u306E\u30A2\u30AF\u30BB\u30B9\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u306E\u4F1A\u8A71\u30BF\u30B0\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u3067\u3059\u3002 -FR-Designer_Height=\u9AD8\u3055 -HF-Odd_Page=\u5947\u6570\u30DA\u30FC\u30B8 -About-All_Rights_Reserved=\u5168\u3066\u306E\u6A29\u5229\u3092\u6240\u6709\u3057\u3066\u3044\u308B -Utils-Current_Cell=\u30AB\u30EC\u30F3\u30C8\u30BB\u30EB -Web_Preview_Message=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u30D5\u30A1\u30A4\u30EB\u3092\u73FE\u5728\u306E\u904B\u884C\u74B0\u5883\u306E\u76EE\u6B21\u4E0B\u306B\u4FDD\u5B58\u3057\u3066\u304F\u3060\u3055\u3044 -FR-Hyperlink_Chart_Float=\u30B0\u30E9\u30D5\u30CF\u30A4\u30D1\u30FC\u30EA\u30F3\u30AF-\u9023\u52D5\u30D5\u30ED\u30FC\u8981\u7D20 -Dic-Data_Query=\u30C7\u30FC\u30BF\u30AF\u30A8\u30EA\u30FC -CellWrite-Print_Content=\u30BB\u30EB\u306E\u4E2D\u8EAB\u3092\u5370\u5237\u3059\u308B -Privilege-Selected_None_Of_Any_Items=\u9805\u76EE\u3092\u3072\u3068\u3064\u3082\u9078\u629E\u3057\u3066\u3044\u307E\u305B\u3093 -FRFont-Size=\u30B5\u30A4\u30BA -Function-J2EE_server=J2EE_server +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 -Build_Tree_Accord_Parent_Marked_Filed=\u89AA\u30BF\u30B0\u30D5\u30A3\u30FC\u30EB\u30C9\u306F\u3001\u69CB\u7BC9\u3055\u308C\u305F\u30C4\u30EA\u30FC\u3092\u8A2D\u5B9A\u3057\u3001\u9078\u629E\u3057\u305F\u30C7\u30FC\u30BF\u306B\u4F9D\u5B58 -Preference-Horizontal_Scroll_Bar_Visible=\u6C34\u5E73\u30B9\u30AF\u30ED\u30FC\u30EB\u30D0\u30FC\u306F\u53EF\u8996 -Scope=\u30B9\u30B3\u30FC\u30D7 -Save_All_Records_In_Memory=\u5168\u3066\u306E\u8A18\u9332\u306F\u30E1\u30E2\u30EA\u306B\u4FDD\u5B58\u3055\u308C\u3066\u3044\u307E\u3059 -FreezeWarning1=\u521D\u671F\u5024\u306F\u6700\u7D42\u5024\u3088\u308A\u5927\u304D\u304F\u3042\u308A\u307E\u305B\u3093 -FlowLayout=\u30D5\u30ED\u30FC\u914D\u7F6E -M_Report-Report_Footer=\u5E33\u7968\u30D5\u30C3\u30BF\u30FC -FR-Action_Add=\u5897\u52A0 -BorderLayout-East=\u6771 -feedback_tip=\u4EE5\u4E0B400\u306E\u5358\u8A9E\u306E\u554F\u984C\u306E\u8AAC\u660E\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044 -FS_Start_Date=\u958B\u59CB\u65E5\u671F -FR-ConditionB_Operator=\u6F14\u7B97\u5B50 -Printer-Alias=\u5225\u540D -DS-Class_Name=\u30AF\u30E9\u30B9\u540D -FR-Designer-Plugin_Has_Been_Disabled=\u30D7\u30E9\u30B0\u30A4\u30F3\u306F\u4F7F\u7528\u304C\u7981\u6B62\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u30C7\u30B6\u30A4\u30CA\u30FC\u3068\u30B5 -Sort-Original=\u30BD\u30FC\u30C8\u3057\u306A\u3044 -Utils-Top_to_Bottom_a=\u4E0A\u304B\u3089\u4E0B\u3078 -Parameter-String=\u6587\u5B57\u5217 -InnerRadis=\u5185\u5F84\u306E\u5927\u304D\u3055 -Want_To_Cover_It=\u3053\u308C\u3092\u8986\u3044\u307E\u3059\u304B -Divided_stage=\u5206\u5272\u3055\u308C\u305F\u30B9\u30C6\u30FC\u30B8 -Seriously=\u53B3\u91CD -ReportServerP-PDF=PDF -Utils-Switch_To_Class_Reportlet=\u30D7\u30ED\u30B0\u30E9\u30E0\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u5E33\u7968\u306B\u5207\u308A\u66FF\u3048 -FR-Designer_Show_Blank_Column=\u7A7A\u767D\u5217\u3092\u88DC\u5145 -M_Edit-Redo=\u518D\u5B9F\u884C -Visibility=\u53EF\u8996\u6027 -Series_Use_Default=\u7CFB\u5217\u30C7\u30D5\u30A9\u30EB\u30C8\u4F7F\u7528 -Has_Selected=\u3082\u3046\u9078\u629E -BackgroundTexture-Walnut=\u30AF\u30EB\u30DF -FormulaD-Function_category=\u95A2\u6570\u30BF\u30A4\u30D7 -Interface=\u30A4\u30F3\u30BF\u30FC\u30D5\u30A7\u30A4\u30B9 -FR-Designer-Beyond_Bounds= -seconds=\u79D2 -Auto-Build=\u81EA\u52D5\u7684\u306B\u30D3\u30EB\u30C9 -FR-Designer-Plugin_Install_Successful=\u5F53\u8A72\u30D7\u30E9\u30B0\u30A4\u30F3\u30C7\u30B6\u30A4\u30CA\u30FC\u3068\u30B5\u30FC\u30D0\u30FC\u3092\u518D\u8D77\u52D5\u3059\u308B\u969B\u306B -Template_Path=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u30EB\u30FC\u30C8 -FR-Designer-FRFont_Bold=\u592A\u304F\u3059\u308B -Poly_Name=\u805A\u5408\u30E2\u30B8\u30E5\u30FC\u30EB\u540D -WorkBook=\u30EF\u30FC\u30AF\u30D6\u30C3\u30AF -Hyperlink-Self_Window=\u73FE\u5728\u306E\u30A6\u30A3\u30F3\u30C9\u30A6 -FR-Designer-Widget-Style_Title=\u6A19\u984C -FR-Designer-FRFont_Size=\u5927\u304D\u3055 -M_File-Export-SVG=SVG -Capacity=\u5BB9\u91CF -Rose_Red=\u30ED\u30FC\u30BA\u30EC\u30C3\u30C9 -StyleAlignment-The_value_of_rotation_must_between_-90_and_90_degrees=\u56DE\u8EE2\u5024\u306F-90\u304B\u308990\u5EA6 -HF-Move_Left=\u5DE6\u3078\u79FB\u52D5\u3059\u308B -Cell_Group=\u30BB\u30EB\u7D44 -Week=\u5468 -PageSetup-Orientation=\u65B9\u5411 -M-Open_Recent=\u6700\u8FD1\u958B\u3044\u305F\u3082\u306E -NNormal=\u6B63\u5E38 -Integer=\u6574\u6570 -Select_The_Source_To_Save=\u8A18\u61B6\u3059\u308B\u9805\u76EE\u3092\u9078\u629E -Transition=\u5206\u679D -FR-Designer_Get_Lock=\u30ED\u30C3\u30AF -one_record_exists_in_many_groups=\u4E00\u3064\u306E\u8A18\u9332\u306F\u8907\u6570\u30B0\u30EB\u30FC\u30D7\u5185\u306B\u5B58\u5728\u53EF\u80FD -FR-Designer_Cover_None=\u5168\u3066\u8986\u308F\u306A\u3044 -DeciPart=\u5C0F\u6570\u90E8\u5206 -ExpandD-Up_Father_Cell=\u4E0A\u89AA\u30BB\u30EB -Deep=\u6DF1\u3055 -FRFont-Shadow=\u5F71 -Reportlet=\u30CD\u30C3\u30C8\u5E33\u7968 -Calendar=\u30AB\u30EC\u30F3\u30C0\u30FC -DateFormat-Custom_Warning=\u6CE8\uFF1A\u30AB\u30B9\u30BF\u30E0\u65E5\u6642\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u30B5\u30DD\u30FC\u30C8\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u691C\u67FB -Unit_MM=\u30DF\u30EA\u30E1\u30FC\u30C8\u30EB -Server-Start=\u8D77\u52D5 -CellPage-Can_Break_On_Paginate=\u30DA\u30FC\u30B8\u30F3\u30B0\u304C\u5207\u65AD\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u305F\u3068\u304D -Build_Tree_Accord_Marked_Filed_Length=\u69CB\u7BC9\u30C4\u30EA\u30FC\u3092\u8A2D\u5B9A\u3057\u3001\u9078\u629E\u3057\u305F\u30C7\u30FC\u30BF\u306B\u4F9D\u5B58\u3057\u305F\u30D5\u30A3\u30FC\u30EB\u30C9\u306E\u9577\u3055\u3092\u30DE\u30FC\u30AF -ComboCheckBox-Start_Symbol=\u958B\u59CB\u6587\u5B57 -Real=\u5B9F\u969B -RWA-Batch_Modify_Cells=\u6279\u91CF\u4FEE\u6B63\u30BB\u30EB -FR-Designer_Build-Way=\u69CB\u7BC9\u65B9\u6CD5 -Read=\u8AAD\u307F\u53D6\u308A -StyleAlignment-Degrees=\u5EA6 -M_Format_A-Border=\u67A0(B) -Utils-Delete_Record=\u8A18\u9332\u524A\u9664 -Reload=\u518D\u30ED\u30FC\u30C9 -Image-Select_Picture=\u753B\u50CF\u3092\u9078\u629E -RWA-Submit=\u63D0\u51FA\u3059\u308B -the_template=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8 -FR-Designer_Component_Scale=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u30B9\u30B1\u30FC\u30EB -FRFont-italic=\u659C\u4F53 -Year=\u5E74 -HF-Move_Right=\u53F3\u3078\u79FB\u52D5\u3059\u308B -Data-Check=\u30C7\u30FC\u30BF\u7BA1\u7406\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB -Unknown=\u672A\u77E5 -Submit_Style=\u63D0\u51FA\u65B9\u6CD5 -Left_Border_Line=\u5DE6\u30D5\u30EC\u30FC\u30E0\u30E9\u30A4\u30F3 -Brown=\u30D6\u30E9\u30A6\u30F3 -Select_A_Tree_DataSource_To_Build=\u30C4\u30EA\u30FC\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u3092\u9078\u629E\u3057\u3066\u7D44\u307F\u7ACB\u3066\u3066\u304F\u3060\u3055\u3044 -Overlapping=\u91CD\u306D\u578B -DS-Class_TableData=\u30AF\u30E9\u30B9\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9 -FR-Designer-Plugin_Illegal_Plugin_Zip_Cannot_Be_Install=\u8B58\u5225\u4E0D\u80FD\u306A\u30D7\u30E9\u30B0\u30A4\u30F3\u3067\u3059\u3002\u30A4\u30F3\u30B9 -DisplayNothingBeforeQuery=\u81EA\u52D5\u691C\u7D22\u7121\u3057 -Y_Axis=Y\u8EF8 -FormulaD-Most_Recently_Used=\u5E38\u7528\u95A2\u6570 -FormulaD-Input_formula_in_the_text_area_below=\u30C6\u30AD\u30B9\u30C8\u30DC\u30C3\u30AF\u30B9\u306B\u516C\u5F0F\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044 -Build-Way=\u69CB\u7BC9\u65B9\u6CD5 -M_Edit-Undo=\u5143\u306B\u623B\u3059 -Line-Style=\u7DDA\u5F62 -Datasource-Other_Attributes=\u305D\u306E\u4ED6\u5C5E\u6027 -M_Server-Global_Parameters=\u30B0\u30ED\u30FC\u30D0\u30EB\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC -Suffix=\u5F8C\u7F00 -Image-Image_Files=\u30A4\u30E1\u30FC\u30B8\u30D5\u30A1\u30A4\u30EB -EditRC-Entire_row=\u884C(R) -HF-First_Page=\u30C8\u30C3\u30D7\u30DA\u30FC\u30B8 -BackgroundTexture-Granite=\u307F\u304B\u3052\u77F3 -DataList=\u30C7\u30FC\u30BF\u30C1\u30A7\u30FC\u30F3 -Recursion=\u5E30\u7D0D -BarStyle=\u30B9\u30C8\u30EA\u30C3\u30D7 -FR-Designer-Min_Width= -Utils-Report-Env_Directory=\u5E33\u7968\u4F5C\u696D\u76EE\u6B21 -D-ChartArea=\u30B0\u30E9\u30D5\u30A8\u30EA\u30A2 -Only=\u305F\u3060 -FR-Base_No=\u3044\u3044\u3048 -SpecifiedG-Put_all_others_together=\u4ED6\u306E\u3059\u3079\u3066\u3092\u7D50\u5408\u3059\u308B -HF-NewLine_Des=\u4E0A\u306E\u79FB\u52D5\u3068\u524A\u9664\u30DC\u30BF\u30F3\u3092\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u6539\u884C\u30B3\u30FC\u30C9\u3092\u64CD\u4F5C\u3059\u308B -WLayout-Border-ThreeContainer=\u5317\u3001\u897F\u3001\u4E09\u56FD\u5883\u306E\u30EC\u30A4\u30A2\u30A6\u30C8\u30B3\u30F3\u30C6\u30CA\u30FC\u3068\u5E45\u3092\u8ABF\u6574\u3059\u308B\u5FC5\u8981\u304C\u3042 -Parameter_Name=\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u540D -FR-Base_Table=\u8868 -Des-Remove_WorkSheet=\u9078\u629E\u3059\u308B\u5E33\u7968\u306B\u306F\u30C7\u30FC\u30BF\u304C\u3042\u308B\u304B\u3082\u3057\u308C\u307E\u305B\u3093\u304C\u3001\u5B8C\u5168\u306B\u524A\u9664\u3059\u308B\u5834\u5408\u3001 -Rotation=\u56DE\u8EE2 -Undefined=\u672A\u5B9A\u7FA9 -Support-Auto_Complete_Shortcut=\u81EA\u52D5\u3067\u30B7\u30E7\u30FC\u30C8\u30AB\u30C3\u30C8\u30AD\u30FC\u3092\u88DC\u3046 -Set_Column_Title_End=\u91CD\u8907\u3059\u308B\u7D42\u4E86\u5217\u3092\u8A2D\u5B9A -Submit_Url=\u30A2\u30C9\u30EC\u30B9\u63D0\u51FA -ReportServerP-Are_you_sure_to_delete_the_selected_printer=\u9078\u629E\u3055\u308C\u305F\u30D7\u30EA\u30F3\u30BF\u30FC\u3092\u524A\u9664\u3057\u3066 -long_data_can_not_show_fully=\u9577\u3044\u30C7\u30FC\u30BF\u304C\u5341\u5206\u306B\u767A\u63EE\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093 -Utils-Beyond_the_bottom_side_of_Border=\u4E0B\u9818\u57DF\u3092\u30AA\u30FC\u30D0\u30FC -FR-Import-Export_PDF=PDF\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8 -Form-CheckBoxGroup=\u30D5\u30EC\u30FC\u30E0\u30BB\u30C3\u30C8\u3092\u8907\u6570\u9078\u629E -Click-Me=\u30AF\u30EA\u30C3\u30AF\u3059\u308B\u3068\u30B5\u30D7\u30E9\u30A4\u30BA\u304C\u3042\u308A\u307E\u3059\u3088\uFF01 -Hyperlink-Self=\u540C\u3058Frame(S) -Tree-Select_Leaf_Only_Tips=\u30C1\u30A7\u30C3\u30AF\u3057\u306A\u3044\u5834\u5408\u3001\u623B\u308A\u5024\u306F\u5F53\u30CE\u30FC\u30C9\u3060\u3051\u3002 -StyleAlignment-Text_Rotation=\u30C6\u30AD\u30B9\u30C8\u65B9\u5411 -Format-Error=\u5165\u529B\u3057\u305F\u5024\u306E\u66F8\u5F0F\u304C\u4E0D\u6B63\u78BA\u3067\u3059 -Server-Stop=\u4E00\u6642\u505C\u6B62 -Preference-Setting_Grid=\u30B0\u30EA\u30C3\u30C9\u8A2D\u5B9A -ReportServerP-Add_Printer=\u30D7\u30EA\u30F3\u30BF\u30FC\u8FFD\u52A0 -FR-Designer-Plugin_Active=\u4F7F\u7528\u958B\u59CB -Utils-File_name=\u30D5\u30A1\u30A4\u30EB\u540D -NOT_NULL_Des=\u3053\u3053\u306F\u7A7A\u6B04\u306B\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093 -Right_Border_Line=\u53F3\u30D5\u30EC\u30FC\u30E0\u30E9\u30A4\u30F3 -EditRC-Entire_column=\u5217(C) -PageSetup-Top_to_bottom=\u4E0A\u304B\u3089\u4E0B\u3078 -Click-Get_Default_URL=\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u30C7\u30D5\u30A9\u30EB\u30C8\u306EURL\u3092\u53D6\u5F97 -StyleAlignment-Wrap_Text=\u81EA\u52D5\u6298\u308A\u8FD4\u3057 -Remove_All_Button=\u5168\u3066\u306E\u30DC\u30BF\u30F3\u3092\u30AF\u30EA\u30A2 -FR-Designer_Component_Interval=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306E\u9593\u9694 -ReportColumns-Columns_vertically=\u5782\u76F4\u65B9\u5411\u5217 -ReportGUI-Print_Background=\u5370\u5237\u80CC\u666F -Export-CSV=CSV (\u30AB\u30F3\u30DE\u533A\u5207\u308A) -M_Edit-Paste=\u8CBC\u308A\u4ED8\u3051(P) -FR-Designer-Basic_Restart_Designer=\u30C7\u30B6\u30A4\u30CA\u30FC\u3092\u518D\u8D77\u52D5\u3059\u308B -ReportServerP-PDF2-INFO=LINUX/UNIX\u306B\u4E2D\u56FD\u8A9E\u30D5\u30A9\u30F3\u30C8\u304C\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3055\u308C\u305F\u6642\u306E\u307F\u4F7F\u7528 -FormulaD-Check_Valid=\u6709\u52B9\u6027\u30C1\u30A7\u30C3\u30AF -server_disconnected=\u5207\u65AD\u3055\u308C\u305F -ParameterD-Parameter_name_cannot_be_null=\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u540D\u306F\u7A7A\u5024\u306B\u306A\u3063\u3066\u306F\u3044\u3051\u307E\u305B\u3093 -FR-Designer-Plugin_Version_Is_Lower_Than_Current=\u30A2\u30C3\u30D7\u30B0\u30EC\u30FC\u30C9\u30D1\u30C3\u30AF\u306E\u30D7\u30E9\u30B0\u30A4\u30F3\u30D0\u30FC\u30B8 -RWA-NotChange_Unmodified=\u306E\u6539\u6B63\u3092\u66F4\u65B0\u3057\u306A\u3044 -User_Information=\u30E6\u30FC\u30B6\u30FC\u60C5\u5831 -Custom_styles_lost=\u30AB\u30B9\u30BF\u30DE\u30A4\u30BA\u30B9\u30BF\u30A4\u30EB\u306F\u5931\u308F\u308C\u307E\u3057\u305F -PageSetup-Margin=\u4F59\u767D -M-New_FormBook=\u8868\u3092\u65B0\u898F\u4F5C\u6210 -Widget-TreeNode=\u30C4\u30EA\u30FC\u30CE\u30FC\u30C9\u30DC\u30BF\u30F3 -Form-Url=\u30A2\u30C9\u30EC\u30B9 -Utils-Beyond_the_left_side_of_Border=\u5DE6\u30DC\u30FC\u30C0\u30FC\u8D85\u3048 -Float_Element_Name=\u30D5\u30ED\u30FC\u3068\u8981\u7D20\u540D\u79F0 -Purple=\u8584\u7D2B -DashBoard-Potence=\u6A29\u9650 -M-Close_Template=\u5E33\u7968\u3092\u9589\u3058\u308B(C) -paper=\u7D19 -Not_Exsit=\u5E33\u7968\u306B\u5B58\u5728\u3057\u307E\u305B\u3093 -Utils-Insert_Row=\u884C\u633F\u5165 -Utils-Delete_Row=\u884C\u524A\u9664 -not_support_authority_edit=\u8BE5\u5143\u7D20\u4E0D\u652F\u6301\u6743\u9650\u63A7\u5236 -Formula_Tips=\u5F0F\u306F "\ -FR-Action_Copy=\u30B3\u30D4\u30FC -Compile_Success=\u7DE8\u96C6\u7FFB\u8A33\u306B\u6210\u529F\u3057\u307E\u3057\u305F -BackgroundTexture-RecycledPaper=\u518D\u751F\u7D19 -StyleAlignment-Single_Line=\u4E00\u884C\u3067\u8868\u793A -Utils-Move_Down=\u4E0B\u3078\u79FB\u52D5 -Please_Set_Repeat_First=\u307E\u305A\u91CD\u8907\u3059\u308B\u6A19\u984C\u884C\u3068\u5217\u3092\u8A2D\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044 -Writer-ShortCuts_Setting=\u5831\u544A\u30B7\u30E7\u30FC\u30C8\u30AB\u30C3\u30C8\u30AD\u30FC\u8A2D\u5B9A -Verify-Data_Verify=\u30C7\u30FC\u30BF\u691C\u8A3C -FR-mobile_analysis_style=\u89E3\u6790\u65B9\u5F0F -Confirm-Delete-File=\u9078\u629E\u3057\u305F\u30D5\u30A1\u30A4\u30EB\u3092\u524A\u9664\u3057\u3066\u3082\u3088\u308D\u3057\u3044\u3067\u3059\u304B\uFF1F -PageSetup-Header=\u30DA\u30FC\u30B8\u30D8\u30C3\u30C0 -JavaScrit-Asynch=\u975E\u540C\u671F -ReportServerP-Toolbar=\u30C4\u30FC\u30EB\u30D0\u30FC -Utils-Top_to_Bottom=\u7E26\u65B9\u5411 -Platform=\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0 -FR-Designer-FRFont_Underline=\u30A2\u30F3\u30C0\u30FC\u30E9\u30A4\u30F3 -Show_in_Containing_Folder=\u6240\u5728\u3059\u308B\u30D5\u30A1\u30A4\u30EB\u3092\u958B\u304F -BackgroundTexture-WaterDroplets=\u3057\u305A\u304F -FR-Designer-Dependence_Install_Failed=install failed -Layout-Padding=\u30D1\u30C7\u30A3\u30F3\u30B0 -roles_already_authority_edited=\u69CB\u6210\u3055\u308C\u305F\u5F79\u5272 -WidgetDisplyPosition=\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u8868\u793A\u4F4D\u7F6E -SpecifiedG-Force_Group=\u5F37\u5236\u7684\u306B\u30B0\u30EB\u30FC\u30D4\u30F3\u30B0\u3059\u308B -FormulaD-Formula_Definition=\u516C\u5F0F\u5B9A\u7FA9 -I-xyScatterStyle_Marker=\u6563\u5E03\u56F3 -Hour=\u6642\u9593 -ColorMatch=\u914D\u8272 -M_Edit-Order=\u9806\u5E8F(O) -BackgroundTexture-Bouquet=\u82B1\u675F -Verify-Error_Information=\u30A8\u30E9\u30FC\u60C5\u5831 -LayerData=\u5E95\u5C42\u6570\u636E -Rename=\u540D\u79F0\u306E\u5909\u66F4 -Widget-Load_By_Async=\u975E\u540C\u671F\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9 -Shape=\u56F3\u5F62 -BindColumn-This_Condition_has_been_existed=\u5F53\u8A72\u6761\u4EF6\u306F\u5B58\u5728\u3057\u3066\u3044\u307E\u3059 -NS-exception_readError=\u30A8\u30E9\u30FC\u30B3\u30FC\u30C9\:1305 \u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u30D5\u30A1\u30A4\u30EB\u89E3\u6790\u306B\u30A8\u30E9\u30FC\u304C\u3042\u308A\u307E\u3057\u305F -Set_Column_Title_Start=\u91CD\u8907\u3059\u308B\u6A19\u984C\u5217\u3092\u8A2D\u5B9A -Fri=\u91D1 -M_Report-Report_Parameter=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC -REPORTLETS=\u8907\u6570\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u306E\u30EB\u30FC\u30C8\u306E\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u306B\u30A2\u30AF\u30BB\u30B9 -WLayout-Card-ToolTip=\u30AB\u30FC\u30C9\u306E\u30EC\u30A4\u30A2\u30A6\u30C8\u306F\u3001\u30EC\u30A4\u30A2\u30A6\u30C8\u30B3\u30F3\u30C6\u30CA\u5185\u306E\u4ED6\u306E\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306E\u6570 -M-Popup_ChartType=\u30B0\u30E9\u30D5\u30BF\u30A4\u30D7 -Please-Wait=\u5C11\u3005\u304A\u5F85\u3061\u304F\u3060\u3055\u3044 -FR-Designer-Form-ToolBar_Widget=\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB -Widget-Array=\u914D\u5217 -FieldBinding=\u30D0\u30F3\u30C7\u30A3\u30F3\u30B0\u30D5\u30A3\u30FC\u30EB\u30C9 -Top_Bottom_Border_Line=\u4E0A\u4E0B\u30D5\u30EC\u30FC\u30E0\u30E9\u30A4\u30F3 -M-Others=\u305D\u306E\u4ED6... -Hyperlink-Link_Opened_in=\u30EA\u30F3\u30AF\u306E\u958B\u3051\u65B9 -FR-Utils_WorkBook=\u4F5C\u696D\u7C3F -M_Insert-Float=\u30D5\u30ED\u30FC\u30C8\u8981\u7D20 -Out_Thick_Border_Line=\u30DC\u30C3\u30AF\u30B9\u30D5\u30EC\u30FC\u30E0\u30E9\u30A4\u30F3 -FR-App-File_Lookup_range=\u691C\u7D22\u7BC4\u56F2 -ReportColumns-Columns_to=\u306E\u3088\u3046\u306B\u6539\u5217\u3059\u308B -Transparent=\u900F\u660E -Parameter-Integer=\u6574\u6570\u578B -PDF-Print_Setting=PDF\u5370\u5237\u8A2D\u5B9A -Server-Embedded_Server=\u5185\u8535\u30B5\u30FC\u30D0\u30FC -M_Server-Server_Config_Manager=\u30B5\u30FC\u30D0\u30FC\u914D\u7F6E(S) -FR-Utils-Would_you_like_to_cover_the_current_file=\u30AB\u30EC\u30F3\u30C8\u30D5\u30A1\u30A4\u30EB\u3092\u4E0A\u66F8\u304D\u3057\u307E\u3059\u304B\uFF1F -CellWrite-InsertRow_COPY=\u5143\u306E\u5024 -Edit_String_To_Formula=\u30AD\u30E3\u30E9\u30AF\u30BF\u30FC\u6587\u5B57\u5217\u3092\u7DE8\u96C6\u3057\u3066\u516C\u5F0F\u3068\u3059\u308B\u304B\u5426\u304B -Edit-Column_Count=\u5217\u6570 -Father=\u89AA -ReportColumns-Columns_after=\u8D85\u3048\u308B -FR-Designer_Undo=\u3084\u308A\u76F4\u3059 -DBCP_MIN_IDLE=\u6700\u5C0F\u30A2\u30A4\u30C9\u30EB\u63A5\u7D9A\u6570 -M-Data_Analysis_Settings=\u30C7\u30FC\u30BF\u5206\u6790\u8A2D\u5B9A -M-Form_Preview=\u8868\u30D7\u30EC\u30D3\u30E5\u30FC -Form-Basic_Properties=\u57FA\u672C\u5C5E\u6027 -quote=\u5F15\u7528 -Thu=\u6728 -Collect-Collect_User_Information=\u30E6\u30FC\u30B6\u30FC\u60C5\u5831\u3092\u53CE\u96C6\u3059\u308B -Layer-Build=\u30D5\u30A1\u30BB\u30C3\u30C8\u7D44\u307F\u7ACB\u3066 -FR-Designer-FRFont_Line_Style=\u7DDA\u5F62 -BackgroundTexture-BrownMarble=\u8336\u8272\u306E\u5927\u7406\u77F3 -PageSetup-Page_Setup=\u30DA\u30FC\u30B8\u8A2D\u5B9A -Form-Semicolon=\u5206\u53F7 -ECP_re_input=\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u9593\u9055\u3063\u3066\u3044\u307E\u3059\u3002\u518D\u5EA6\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044 -ExpandD-Sort_After_Expand=\u62E1\u5927\u5F8C -FR-Designer-Dependence_Install_Succeed=install succeed -Env-Configure_Workspace=\u4F5C\u696D\u76EE\u6B21\u8A2D\u5B9A -feedback_info=\u8CB4\u91CD\u306A\u610F\u898B\u3042\u308A\u304C\u3068\u3046\u3054\u3056\u3044\u307E\u3059\u3002\u79C1\u9054\u306F\u3067\u304D\u308B\u3060\u3051\u65E9\u304F\u3042\u306A\u305F\u3068\u9023\u7D61\u3057\u307E\u3059\u3002 -Ratio=\u6BD4\u7387 -DBCP_TEST_ON_BORROW=\u63A5\u7D9A\u524D\u691C\u67FB\u3092\u53D6\u5F97 -FR-Designer_layerIndex= -WEB-Write_Setting=\u5831\u544A\u30DA\u30FC\u30B8\u8A2D\u5B9A -M-New_WorkBook=\u30D6\u30C3\u30AF\u3092\u65B0\u898F\u4F5C\u6210 -FR-Designer-Plugin_Has_Been_Actived=\u30D7\u30E9\u30B0\u30A4\u30F3\u306F\u3059\u3067\u306B\u8D77\u52D5\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u30C7\u30B6\u30A4\u30CA\u30FC\u3068\u30B5\u30FC -Datasource-Maximum_Number_of_Preview_Rows=\u30D7\u30EC\u30D3\u30E5\u30FC\u884C\u6570\u6700\u5927\u5024 -ExpandD-Cell_Expand_Attributes=\u62E1\u5F35\u5C5E\u6027 -Select_the_repeated_row_and_column=\u91CD\u8907\u3059\u308B\u5FC5\u8981\u304C\u3042\u308B\u884C\u5217\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044 -FormulaD-Date_&_Time=\u65E5\u4ED8\u3068\u6642\u523B\u95A2\u6570 -Max-Mem-Row-Count=\u30AD\u30E3\u30C3\u30B7\u30E5\u306E\u78C1\u6C17\u30C7\u30A3\u30B9\u30AF\u8A18\u9332\u6570\u306F\u3000\u4EE5\u4E0A -BorderLayout-South=\u5357 -Export-Text=\u30C6\u30AD\u30B9\u30C8\u30D5\u30A1\u30A4\u30EB(\u30BF\u30D6\u533A\u5207\u308A) -JavaScript-Synch=\u540C\u671F -FR-App-All_Warning=\u8B66\u544A -M_Edit-Send_Backward=\u80CC\u9762\u3078\u79FB\u52D5(B) -Form-Layout=\u914D\u7F6E -FR-Designer-Plugin_Shop_Need_Update=\u30A6\u30A3\u30B8\u30A7\u30C3\u30C8\u306F\u3001\u66F4\u65B0\u3059\u308B\u304B\u3069\u3046\u304B\u3001\u65B0\u3057\u3044\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u4FDD\u5B58\u3057\u307E\u3059\u304B\uFF1F -FR-Designer_WorkBook=\u30EF\u30FC\u30AF\u30D6\u30C3\u30AF -UpBarBorderStyleAndColor=\u30B9\u30B1\u30FC\u30EB\u30A2\u30C3\u30D7\u30AB\u30E9\u30E0\u30B9\u30BF\u30A4\u30EB -GridLayout=\u683C\u5B50\u914D\u7F6E -Utils-Default_Value=\u30C7\u30D5\u30A9\u30EB\u30C8\u5024 -Widget-Comb_Widget_Config=\u7D44\u307F\u5408\u308F\u305B\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB -Import-Excel2007_Source=Excel2007\u30EA\u30BD\u30FC\u30B9\u30D5\u30A1\u30A4\u30EB -Y-Coordinate=\u7E26\u5EA7\u6A19 -FR-Base_SimSun_Not_Found=\u5B8B\u4F53\u3092\u898B\u3064\u3051\u308B\u3053\u3068\u304C\u3067\u304D\u306A\u3044\u3001\u73FE\u5728\u306E\u30B7\u30B9\u30C6\u30E0\u306E\u4E0B\u3067\u30C7\u30D5\u30A9\u30EB\u30C8\u8A00\u8A9E\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u8BBE\u8BA1\u5668\u30D5\u30A9\u30F3\u30C8\u3068\u3057\u3066 -FR-Designer_Seriously=\u53B3\u91CD -Upload=\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9 -Form-Widget_Property_Table=\u5C5E\u6027\u8868 -Des-Merger_Cell=\u9078\u629E\u3055\u308C\u305F\u30D5\u30A3\u30FC\u30EB\u30C9\u306B\u306F\u8907\u6570\u306E\u30C7\u30FC\u30BF\u304C\u542B\u307F\u3001\u30BB\u30EB\u3092\u7D50\u5408\u3057\u305F\u3089\u3001\u5DE6\u4E0A\u5074\u306E\u30C7 -FR-Designer-Basic_Copy_Build_NO=\u30C0\u30D6\u30EB\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u7D44\u307F\u7ACB\u3066\u30D0\u30FC\u30B8\u30E7\u30F3\u756A\u53F7\u3092\u30AF\u30EA\u30C3\u30D7\u30DC\u30FC\u30C9 -FR-Base_TurnOn=\u8D77\u52D5 -FR-Base_Rows=\u884C -Form-Remove_Repeat=\u91CD\u8907\u3059\u308B\u9805\u76EE\u3092\u524A\u9664 -Yes=\u306F\u3044 -Datasource-JNDI_Name=JNDI\u540D -Utils-Delete_Column=\u5217\u524A\u9664 -HF-Delete_it=\u524A\u9664 -JavaScript-Dynamic_Parameters=\u52D5\u614B\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC -px=\u753B\u7D20 -FR-App-Report_Template=\u5E33\u7968\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8 -Verify-Message=\u30A8\u30E9\u30FC\u30E1\u30C3\u30BB\u30FC\u30B8 -Plan=\u30D7\u30E9\u30F3 -Vertical-Split_Layout=\u5782\u76F4\u5206\u5272\u914D\u7F6E -ParameterD-Delay_Playing=\u5831\u544A\u8868\u306E\u5C55\u793A\u3092\u5EF6\u671F\u3057\u307E\u3059 -TurnOff=\u9589\u3058\u308B -FR-Please_Rename=\u518D\u5EA6\u547D\u540D\u3057\u3066\u304F\u3060\u3055\u3044 -Select_Data_Set=\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u3092\u9078\u629E -Name_has_Colon=\u540D\u524D\: -ReportColumns-Columns_horizontally=\u6C34\u5E73\u65B9\u5411\u5217 -FR-Base_Yes=\u306F\u3044 -ReportColumns-Repeat_Row=\u884C\u756A\u53F7\u306E\u7E70\u308A\u8FD4\u3057 -Print_Setting=\u5370\u5237\u8A2D\u5B9A -Registration-User_Name=\u30E6\u30FC\u30B6\u540D -Datasource-User_Defined=\u30E6\u30FC\u30B6\u5B9A\u7FA9 -FR-Designer-Plugin_DownLoadMessage= -Delay=\u9045\u5EF6 -FR-Designer-All_MSBold=\u5FAE\u8EDF\u96C5\u9ED2 -Utils-Now_create_connection=\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u3078\u306E\u63A5\u7D9A -FR-Template-Path_chooseRightPath=\u6B63\u78BA\u306A\u30EB\u30FC\u30C8\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044 -FR-Remote_Re_Connect_to_Server=\u30B5\u30FC\u30D0\u30FC\u306F\u9589\u3058\u3089\u308C\u307E\u3057\u305F\u3002\u518D\u5EA6\u30B5\u30FC\u30D0\u30FC\u306B\u63A5\u7D9A\u3057\u307E\u3059\u304B? -Nation=\u56FD\u5BB6 -DBCP_MAX_WAIT=\u6700\u5927\u5F85\u3061\u6642\u9593 -FR-App-Template_Form=\u8868 -Address=\u30A2\u30C9\u30EC\u30B9 -Sub_Report=\u5B50\u5E33\u7968 -FR-Import-Export_Word=Word\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8 -FR-Server_Version_Tip=\u73FE\u5728\u306E\u63A5\u7D9A\u3057\u3066\u3044\u308B\u30B5\u30FC\u30D0\u30FC\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u306F\u4F7F\u7528\u3057\u3066\u3044\u308B\u30C7\u30B6\u30A4\u30CA\u30FC\u306E\u30D0 -StyleAlignment-Left_To_Right=\u5DE6\u304B\u3089\u53F3\u3078 -Verify-ToolTips=\u516C\u5F0F\u304C\u63D0\u793A\u6821\u9A8C\u3082\u6E80\u8DB3\u3057\u3066\u3044\u306A\u3044\u8BEF\u308A\u304C\u60C5\u5831\u3092\u624B\u306B\u5165\u308C\u305F -BackgroundTexture-Stationery=\u4FBF\u7B8B -FR-Designer_RWA-Help=\u8A2D\u5B9A\u3092\u672A\u4FEE\u6B63\u3067\u66F4\u65B0\u305B\u305A\u3001\u30D7\u30EC\u30D3\u30E5\u30FC\u3057\u305F\u5E33\u7968\u3092\u5831\u544A\u3057\u3001\u30BB\u30EB\u306B\u8A18\u9332\u3055\u308C -M_Insert-Barcode=\u30D0\u30FC\u30B3\u30FC\u30C9 -Bounds=\u30DC\u30FC\u30C0\u30FC -FR-Designer-Undo_All_Authority_Operations=\u524D\u56DE\u306E\u6A29\u9650\u7DE8\u96C6\u6642\u306E\u5168\u3066\u306E\u30AA\u30DA\u30EC\u30FC\u30B7\u30E7\u30F3\u3092\u64A4\u56DE\u3059 -Datasource-Context=\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8 -CellWrite-Page_After_Column=\u5217\u5F8C\u306E\u6539\u9801 -FR-Designer_Cancel=\u30AD\u30E3\u30F3\u30BB\u30EB -Button-Group-Display-Columns=\u5217\u306E\u6570\u3092\u8868\u793A\u3059\u308B -Widget-Height=\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u9AD8\u3055 -Examples=\u4F8B -Formula_Dictionary_Display_Example=\u5B9F\u969B\u5024\u7BC4\u56F2\u306F\ -StyleAlignment-Horizontal=\u6C34\u5E73\u63C3\u3048 -HyperLink_Must_Alone_Reset=\u8907\u6570\u306E\u30CF\u30A4\u30D1\u30FC\u30EA\u30F3\u30AF -ExpandD-Expand_Direction=\u62E1\u5F35\u65B9\u5411 -Include=\u542B\u3080 -Export-Excel-Page=\u30DA\u30FC\u30B8 -FR-Designer-Min_Height=\u6700\u5C0F\u9AD8\u3055 -Filed=\u30A8\u30EA\u30A2 -ReportServerP-Import_Css=Css\u5F15\u7528 -M_Insert-Formula=\u516C\u5F0F -FR-Designer_Auto-Build=\u81EA\u52D5\u7684\u306B\u30D3\u30EB\u30C9 -FRFont-Foreground=\u8272 -Bubble-Width=\u30D0\u30D6\u30EB\u306E\u5E45 -Form-Hierarchy_Tree=\u69CB\u9020\u30C4\u30EA\u30FC -WLayout-Border-LayoutContainer=\u4E2D\u90E8\u3068\u5317\u90E82\u30DC\u30FC\u30C0\u30FC\u30EC\u30A4\u30A2\u30A6\u30C8\u30B3\u30F3\u30C6\u30CA\u3068\u5317\u90E8\u30D6\u30ED\u30C3\u30AF\u3092\u542B\u3081 -Preference-JDK_Home=JDK\u30D1\u30B9 -Utils-Insert_Column=\u5217\u633F\u5165 -FR-Designer_ToolBar_Top=\u30D8\u30C3\u30C0\u30FC\u30C4\u30FC\u30EB\u30D0\u30FC -BindColumn-The_Conditions_of_FatherCell=\u89AA\u30BB\u30EB\u6761\u4EF6 -Links=\u30EA\u30F3\u30AF -M_Report-Report_Header=\u5E33\u7968\u30D8\u30C3\u30C0\u30FC -Sub_Report_Description=\u5B50\u5E33\u7968\u306F\u89AA\u8868\u904B\u884C\u74B0\u5883\u4E0B\u306B\u5B58\u5728\u3057\u306A\u3051\u308C\u3070\u306A\u3089\u305A\u3001\u4E21\u8005\u306F\u540C\u4E00\u30C6\u30F3\u30D7\u30EC -T_Insert-Float=\u30D5\u30ED\u30FC\u8981\u7D20\u3092\u633F\u5165 -BackgroundTexture-FishFossil=\u9B5A\u5316\u77F3 -My_Computer=\u30DE\u30A4 \u30B3\u30F3\u30D4\u30E5\u30FC\u30BF -FORMLET=\u7570\u306A\u308B\u8868\u306E\u30EB\u30FC\u30C8\u306E\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u306B\u30A2\u30AF\u30BB\u30B9 -HF-Undefined=\u672A\u5B9A\u7FA9 -Widget-User_Defined_Widget_Config=\u30D7\u30EC\u5B9A\u7FA9\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB -Report-Write_Attributes_Group_Warning=\u8A2D\u5B9A\u3092\u30AD\u30FC?\u30C1\u30FC\u30E0\u306E\u5404\u30B3\u30E9\u30E0\u306E\u4E2D\u306E\u30AD\u30FC\u4E2A\u6570\u306F\u540C\u3058\u3067 -Form-Single_quote=\u30B7\u30F3\u30B0\u30EB\u30AF\u30A9\u30FC\u30C6\u30FC\u30B7\u30E7\u30F3\u30DE\u30FC\u30AF -Compile_Success_And_Then_Save=\u7DE8\u96C6\u7FFB\u8A33\u6210\u529F\u5F8C\u306B\u4FDD\u5B58\u3067\u304D\u307E\u3059 -FR-Designer_Layout-Padding=\u30D1\u30C7\u30A3\u30F3\u30B0 -Layout_Container=\u30EC\u30A4\u30A2\u30A6\u30C8\u30B3\u30F3\u30C6\u30CA -Admin=\u7BA1\u7406\u8005 -Form-EC_toolbar=\u5E33\u7968\u30E2\u30B8\u30E5\u30FC\u30EB\u30C4\u30FC\u30EB\u30D0\u30FC -FR-App-All_Auto=\u81EA\u52D5 -Utils-Available_Columns=\u9078\u629E\u53EF\u80FD\u306E\u5217 -Form-Change_Widget_Name_Discription=\u65B0\u3057\u3044\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044 -FR-Module_Designer=\u30C7\u30B6\u30A4\u30CA\u30FC\u30E2\u30B8\u30E5\u30FC\u30EB -FR-Import-Export_Text=\u6587\u66F8\u30D5\u30A1\u30A4\u30EB(\u30BF\u30D6\u6587\u5B57\u5206\u9694) -Values-Editor=\u5024\u30A8\u30C7\u30A3\u30BF -FR-Designer_Yes=\u306F\u3044 -ExpandD-Expandable=\u62E1\u5F35\u6027 -Tree-Return_Full_Path=\u7D50\u679C\u306F\u5B8C\u5168\u306A\u30D1\u30B9\u3092\u623B\u308A\u307E\u3059 -FRFont-bolditalic=\u592A\u5B57\u659C\u4F53 -FR-Base_StyleFormat_Sample=\u4F8B -Area_Value=\u5730\u57DF\u5024 -FR-Designer-Plugin_Disable=\u4F7F\u7528\u7981\u6B62 -Utils-Are_you_sure_to_remove_the_selected_item=\u9078\u629E\u3055\u308C\u305F\u9805\u76EE\u3092\u524A\u9664\u3057\u3066\u3082\u3088\u308D\u3057\u3044\u3067\u3059\u304B -Face_Write=\u5831\u544A -Poly-Report_Block=\u5E33\u7968\u30BF\u30A4\u30D7\u805A\u5408\u30E2\u30B8\u30E5\u30FC\u30EB -Vgap=\u5782\u76F4\u9593\u9699 -FR-Designer_HyperLink_Must_Alone_Reset=\u8907\u6570\u306E\u30CF\u30A4\u30D1\u30FC\u30EA\u30F3\u30AF -DS-Class=\u30D7\u30ED\u30B0\u30E9\u30E0 -FR-Hyperlink_Please_Select_Reportlet=\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u5E33\u7968\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044 -FS_Report_Type=\u30BF\u30A4\u30D7 -HF-New_Line=\u6539\u884C\u30B3\u30FC\u30C9 -Privilege=\u6A29\u9650 -Export-Offline-Html=\u30AA\u30D5\u30E9\u30A4\u30F3html\u5E33\u7968\u51FA\u529B -FR-Designer_open-new-form-tip=711\u4EE5\u4E0B\u306E\u751F\u7523\u306E\u305F\u3081\u306E\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u306E\u73FE\u5728\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u306F\u3001\u4E92 -FR-Designer-Widget-Style_Frame_Style=\u30D5\u30EC\u30FC\u30E0\u30B9\u30BF\u30A4\u30EB -Present-No_Present=\u30D5\u30A9\u30EB\u30E0\u8A2D\u5B9A\u3092\u30AD\u30E3\u30F3\u30BB\u30EB -FR-Designer_Form-Password=\u30D1\u30B9\u30EF\u30FC\u30C9 -X_Axis=X\u8EF8 -FR-mobile_html_analysis=HTML5\u89E3\u6790 -M_Edit-Bring_to_Front=\u6700\u524D\u9762\u3078\u79FB\u52D5(T) -Null_Value_Show=\u7A7A\u5024\u8868\u793A -Datasource-JNDI_DES=\u6CE8\: INITIAL_CONTEXT_FACTORY\u304C\u542B\u3080\u30AF\u30E9\u30B9\u306E.jar\u30D5\u30A1\u30A4\u30EB\u3092lib\u306B\u30B3\u30D4\u30FC -PrintP-Print_Preview=\u5370\u5237\u30D7\u30EC\u30D3\u30E5\u30FC -Form-Hierarchy_Tree_Last=\u524D -Has_been_gone=\ \u5931\u308F\u308C\u307E\u3057\u305F\u3002\u5F53\u8A72\u30B9\u30BF\u30A4\u30EB\u3092\u5897\u52A0\u3057\u307E\u3059\u304B\uFF1F -RWA-Add_Field=\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u8FFD\u52A0 -newNode=\u30CE\u30FC\u30C9\u306E\u8FFD\u52A0 -PageSetup-Shrink_to_fit_content=\u30BB\u30EB\u5185\u5BB9\u306B\u3082\u3068\u3065\u3044\u3066\u81EA\u52D5\u8C03\u6574 -FR-Designer_Date=\u65E5\u4ED8 -Column_Multiple=\u30C7\u30FC\u30BF\u500D\u6570 -FR-App-All_File=\u30D5\u30A1\u30A4\u30EB -Sort-Descending=\u964D\u9806 -FR-Designer-Plugin_Delete=\u524A\u9664 -Above=\u4E0A\u8A18\u306E -Utils-The-Chart=\u30B0\u30E9\u30D5 -FRFont-plain=\u6A19\u6E96 -Calculating=\u51E6\u7406\u4E2D -Form-Object=\u30D5\u30A9\u30FC\u30E0\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8 -May=\u4E94\u6708 -FR-Designer_Plugin_Normal_Update=\u66F4\u65B0 -FR-Hyperlink_Reportlet=\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u5E33\u7968 -M_Edit-Copy=\u30B3\u30D4\u30FC(C) -Sub_Report_Message2=\u89AA\u5E33\u7968\u306F\u73FE\u5728\u306E\u904B\u884C\u74B0\u5883\u4E0B\u306B\u5B58\u5728\u3057\u307E\u305B\u3093 -Sub_Report_Message3=\u81EA\u8EAB\u3092\u9078\u629E\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093 -Sub_Report_Message1=\u6B63\u78BA\u306A\u30EB\u30FC\u30C8\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044 -Form-Allow_CustomData=\u30AB\u30B9\u30BF\u30DE\u3042\u308A -FR-Server_Version_Tip_MoreInfo=\u6240\u5C5E\u3059\u308B\u30B0\u30EB\u30FC\u30D7\u304C\u4F7F\u7528\u3059\u308BFineReport\u306E\u30C7\u30B6\u30A4\u30CA\u30FC\u306E\u30D0\u30FC\u30B8 -FR-Designer_Server-version-tip-moreInfo=\u79C1\u305F\u3061\u306E\u88FD\u54C1\u306EFineReport Designer\u30D0\u30FC\u30B8\u30E7\u30F3\u756A\u53F7 -Get_Lock=\u30ED\u30C3\u30AF -HF-Edit_Footer=\u30D5\u30C3\u30BF\u30FC\u7DE8\u96C6 -Datasource-New_Charset=\u65B0\u6587\u5B57\u30B3\u30FC\u30C9 -Preference-Custom=\u30AB\u30B9\u30BF\u30DE\u30A4\u30BA -BackgroundTexture-Newsprint=\u65B0\u805E\u7528\u7D19 -ConditionB-Add_bracket=\u62EC\u5F27\u3092\u8FFD\u52A0\u3059\u308B -Datasource-Connection_successfully=\u63A5\u7D9A\u6210\u529F -Function-The_class_must_implement_the_interface=\u5F53\u8A72\u30AF\u30E9\u30B9\u306F\u30A4\u30F3\u30BF\u30FC\u30D5\u30A7\u30FC\u30B9\u304B\u3089\u30A4\u30F3\u30D7\u30EC -FR-Designer_ChartF-Transparency=\u900F\u660E -Crimson=\u771F\u7D05 -FR-Hyperlink_Dialog=\u5BFE\u8A71\u30A6\u30A3\u30F3\u30C9\u30A6 -FR-Designer_Covered_All=\u5168\u3066\u8986\u3046 -Hyperlink-New_Window=\u65B0\u30A6\u30A3\u30F3\u30C9\u30A6 -Style_Name=\u66F8\u5F0F\u540D -CSS_warning= \u305D\u306E\u3088\u3046\u306AWebReport\\ CSS\u30EA\u30D5\u30A1\u30EC\u30F3\u30B9CSS\u30D5\u30A1\u30A4\u30EB\u304C\u5B58\u5728test.css\u306F\u3001css / test.css\u306E\u76F8\u5BFE\u30D1\u30B9\u3068\u3057\u3066
 \u6BD4\u8F03\u7684\u6587\u5DE5\u5B66\u30C7\u30A3\u30EC\u30AF\u30C8\u30EAWebReport\u3001 -FR-Base_Column=\u5217 -Three_Rows_Of_Two_Grid=2\u683C\u5B50\u306E3\u3064\u306E\u884C -DBCP_VALIDATION_QUERY=SQL\u8A8D\u8A3C\u30AF\u30A8\u30EA -M_Edit-Clear_Formats=\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8(F) -Parameter_Setting=\u30D1\u30E9\u30E1\u30FC\u30BF\u8A2D\u5B9A -Related=\u9023\u52D5 -BorderLayout-Constraints=\u5834\u6240 -Write_Preview=\u5831\u544A\u30D7\u30EC\u30D3\u30E5\u30FC -PageSetup-Page_Order=\u5370\u5237\u9806 -Verify-Verify_Formula=\u691C\u8A3C\u5F0F -State=\u7701\u5E02 -FR-Designer-Widget-Style_Body_Background=\u30E1\u30A4\u30F3\u80CC\u666F -FR-App-Privilege_No=\u6A29\u9650\u304C\u3042\u308A\u307E\u305B\u3093 -Please_Drag_ParaPane= -Come_True=\u5B9F\u73FE -ISEMPTY=\u7A7A\u6B04 -Background-Texture=\u30C6\u30AF\u30B9\u30C1\u30E3 -FR-Designer_Verify-Message=\u30A8\u30E9\u30FC\u30E1\u30C3\u30BB\u30FC\u30B8 -Locked=\uFF08\u30ED\u30C3\u30AF\u6E08\u307F\uFF09 -Utils-Design-Action_Cancel=\u30AD\u30E3\u30F3\u30BB\u30EB -Image-Titled=\u5C55\u958B -Gradient-Direction=\u65B9\u5411\u3092\u5F90\u3005\u306B\u5909\u5316 -Green=\u6DF1\u7DD1 -Report_Engine=\u5E33\u7968\u30A8\u30F3\u30B8\u30F3 -Return-String=\u30AD\u30E3\u30E9\u30AF\u30BF\u30FC\u6587\u5B57\u5217\u306B\u623B\u308B -Margin=\u30DE\u30FC\u30B8\u30F3 -Pitch_Percentage=\u30D4\u30C3\u30C1\u306E\u5272\u5408 -FR-Base_TurnOff=\u9589\u3058\u308B -Utils-has_been_existed=\u65E2\u5B58 -HF-Insert_Formula=\u516C\u5F0F\u3092\u633F\u5165 -Utils-Exit_Designer=\u30C7\u30B6\u30A4\u30CA\u30FC\u3092\u7D42\u4E86\u3059\u308B -Formula_Dictionary_Display=\u4E0A\u306E\u5B9F\u969B\u5024\u7BC4\u56F2\u5185\u306E\u3044\u305A\u308C\u306E\u5024($$$)\u306F\u3001\u305D\u306E\u8868\u793A\u5024\u306F -PageSetup-Left_to_right=\u5DE6\u304B\u3089\u53F3\u3078 -Utils-Import_Excel_Data=\u300CExcel]\u30A4\u30F3\u30D7\u30C3\u30C8 -M-Save=\u4FDD\u5B58 -redo=\u3082\u3046\u4E00\u5EA6\u3059\u308B -Status=\u72B6\u614B -Draw=\u5236\u4F5C -FR-Designer_Message=\u30E1\u30C3\u30BB\u30FC\u30B8 -Records=\u3064\u306E\u8A18\u9332 -FR-Designer_ComboBox=\u30B3\u30F3\u30DC\u30DC\u30C3\u30AF\u30B9 -Driver=\u30C9\u30E9\u30A4\u30D0\u30FC -Template_Parameters=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC -Form-Remove_Repeat_Data=\u91CD\u8907\u3059\u308B\u30C7\u30FC\u30BF\u3092\u524A\u9664 -ECP_decode=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u30A2\u30F3\u30ED\u30C3\u30AF -Area_Name=\u5730\u57DF\u540D -Others=\u305D\u306E\u4ED6 -Merge=\u5408\u4F75\u3059\u308B -BackgroundTexture-Parchment=\u7F8A\u76AE\u7D19 -BindColumn-Bottom_N=\u5F8C\u306EN\u500B -Frame=\u30D5\u30EC\u30FC\u30E0 -Bottom_Border_Line=\u30DC\u30C8\u30E0\u30DC\u30FC\u30C0\u30FC -Muiti_In=\u591A\u5C64\u53D6\u308A\u30EA\u30F3\u30B0 -FR-Designer-Dependence_Install_Online=install online -Use_Default_ToolBar=\u30C7\u30D5\u30A9\u30EB\u30C8\u30C4\u30FC\u30EB\u30D0\u30FC\u4F7F\u7528 -M_Server-Platform_Manager=\u5E33\u7968\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0\u7BA1\u7406 -PageSetup-inches=\u30A4\u30F3\u30C1 -Form-Widget_Property=\u5C5E\u6027\u540D -FR-Layout_Padding=\u5185\u30DE\u30FC\u30B8\u30F3 -Schema=\u30B9\u30AD\u30FC\u30DE -Server_Path=\u30DB\u30B9\u30C8\u30B3\u30F3\u30D4\u30E5\u30FC\u30BF\u4F4D\u7F6E -Condition_Display=\u6761\u4EF6\u8868\u793A -FR-Server-Design_template_unopened=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u3092\u958B\u304F\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093 -Function-Function_Class_Name=\u95A2\u6570\u30AF\u30E9\u30B9\u540D -Schedule-Template=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u540D -Tree_Data_Field=\u30C4\u30EA\u30FC\u30C7\u30FC\u30BF\u30D5\u30A3\u30FC\u30EB\u30C9 -Border-Style-Normal=\u76F4\u89D2\u306E\u56FD\u5883\u306B -Top_And_Double_Bottom_Border_Line=\u4E0A\u30D5\u30EC\u30FC\u30E0\u30E9\u30A4\u30F3\u3068\u53CC\u4E0B\u30D5\u30EC\u30FC\u30E0\u30E9\u30A4\u30F3 -FR-Server_Embedded_Server_Start=\u5185\u8535\u30B5\u30FC\u30D0\u30FC-\u958B\u304F -FR-Designer-Basic_Restart_Designer_Later=\u5F8C\u3067\u518D\u8D77\u52D5\u3059\u308B -StyleAlignment-Top=\u4E0A\u8A70\u3081 -ReportServerP-First=\u30C8\u30C3\u30D7\u30DA\u30FC\u30B8 -Not_Exist=\u5B58\u5728\u3057\u306A\u3044 -FR-Remote_File_is_Locked=\u958B\u3053\u3046\u3068\u3057\u3066\u3044\u308B\u5E33\u7968\u306F\u73FE\u5728\u4ED6\u306E\u4EBA\u304C\u7DE8\u96C6\u3057\u3066\u3044\u307E\u3059\u3002\u5C11\u3057\u5F85\u3063\u3066\u304B -Apply=\u30A2\u30D7\u30EA -Sytle-Indentation=\u30A4\u30F3\u30C7\u30F3\u30C8 -Parameter-Float=\u5358\u7CBE\u5EA6\u6D6E\u52D5\u5C0F\u6570\u70B9\u6570\u578B -HF-Center_Section=\u4E2D\u592E\u30BB\u30AF\u30B7\u30E7\u30F3 -Form-Double_quotes=\u30C0\u30D6\u30EB\u30AF\u30AA\u30FC\u30C6\u30FC\u30B7\u30E7\u30F3\u30DE\u30FC\u30AF -M_File-Export-Word=Word -M_File-Export-Text=\u30C6\u30AD\u30B9\u30C8\u30D5\u30A1\u30A4\u30EB(\u30BF\u30D6\u533A\u5207\u308A)(T) -PageSetup-First_Page_Number=\u30B9\u30BF\u30FC\u30C8\u306E\u30DA\u30FC\u30B8\u756A\u53F7 -Execute=\u5B9F\u884C -Task=\u30BF\u30B9\u30AF -Custom_Button_Type_Submit=\u63D0\u51FA -FR-Designer-Widget_Settings=\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u8A2D\u5B9A -IS_Need_Password=\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u5FC5\u8981\u3067\u3059 -PageSetup-Horizontally=\u6C34\u5E73\u4E2D\u592E\u63C3\u3048 -No_Editor_Property_Definition=\u5F53\u8A72\u30A8\u30C7\u30A3\u30BF\u306F\u5C5E\u6027\u5B9A\u7FA9\u304C\u3042\u308A\u307E\u305B\u3093 -Env-Remote_Server=\u30EA\u30E2\u30FC\u30C8\u30B5\u30FC\u30D0\u30FC -FR-Utils_Background=\u80CC\u666F -FR-Designer-Plugin_Warning=\u8B66\u544A -Server-version-info=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u30D5\u30A1\u30A4\u30EB\u306F\u3001\u5F8C\u3067\u8A2D\u8A08\u3084\u5143\u306E\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u5C5E\u6027\u3092\u5931\u3046\u30EA\u30B9\u30AF\u306B -CellWrite-Page_After_Row=\u884C\u5F8C\u306E\u6539\u9801 -HF-Right_Section=\u53F3\u5074\u30BB\u30AF\u30B7\u30E7\u30F3 -PageSetup-Title_Start_Row=\u91CD\u8907\u3059\u308B\u6A19\u984C\u884C -From=\u7B2C\u3000\u304B\u3089 -Preference-Grid_Line_Color=\u30B0\u30EA\u30C3\u30C9\u7DDA\u306E\u8272 -RowTo=\u884C\u304B\u3089\u7B2C\u307E\u3067 -FR-Designer_ReportColumns-Repeat_Column=\u5217\u9806\u5E8F\u3092\u30B3\u30D4\u30FC -M_Server-Function_Manager=\u95A2\u6570\u30DE\u30CD\u30FC\u30B8\u30E3\u30FC -KeyWord=\u30AD\u30FC\u30EF\u30FC\u30C9 -DS-Multi_Dimensional_Database=\u591A\u6B21\u5143\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9 -BiasD-Slope_Line=\u659C\u7DDA -Tue=\u706B -ReportServerP-Last=\u7D42\u4E86\u9801 -FR-Base_Columns=\u5217 -SpecifiedG-Leave_in_their_own_groups=\u5404\u30B0\u30EB\u30FC\u30D7\u5185\u306B\u4FDD\u7559\u3059\u308B -LOG-Please_Wait=\u5C11\u3005\u304A\u5F85\u3061\u304F\u3060\u3055\u3044 -Form-ToolBar=\u8868\u30C4\u30FC\u30EB\u30D0\u30FC -FR-Base_sure_remove_item=\u672C\u5F53\u306B\u9078\u629E\u3057\u305F\u9805\u76EE\u3092\u524A\u9664\u3057\u307E\u3059\u304B -Component_Scale=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u30B9\u30B1\u30FC\u30EB -Hyperlink-Use_CJK_to_encode_parameter=CJK\u51E6\u7406\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u4F7F\u7528 -LOG-Has_Been_Openned=\u958B\u304D\u307E\u3057\u305F -FR-Designer-Dependence= -ECP_error_pwd=\u30D1\u30B9\u30EF\u30FC\u30C9\u30A8\u30E9\u30FC -REPORTLET=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u306E\u30EB\u30FC\u30C8\u306E\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u306B\u30A2\u30AF\u30BB\u30B9 -RWA-Column_Offset=\u5217\u30AA\u30D5\u30BB\u30C3\u30C8 -Forecast=\u4E88\u6E2C -Light_Orange=\u660E\u308B\u3044\u30AA\u30EC\u30F3\u30B8 -StyleAlignment-Vertical=\u5782\u76F4\u63C3\u3048 -Form-List=\u30EA\u30B9\u30C8 -ParameterD-Show_Parameter_Window=\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u30A6\u30A4\u30F3\u30C9\u30A6\u3092\u8868\u793A\u3059\u308B -FR-Designer_Set_Submit_Event=\u63D0\u51FA\u4E8B\u4EF6\u3092\u8A2D\u5B9A -Value_Percent=\u5024\u5272\u5408\u4F8B -DBCP_MIN_EVICTABLE_IDLE_TIMEMILLIS=\u30A2\u30A4\u30C9\u30EB\u6700\u5C0F\u6642\u9593\u5024\u4FDD\u6301 -Function-The_class_must_be_located_in=\u5F53\u8A72\u30AF\u30E9\u30B9\u306F\u5B58\u5728\u3057\u306A\u3051\u308C\u3070\u306A\u308A\u307E\u305B\u3093 -FR-Action_Sort=\u30BD\u30FC\u30C8 -DataFunction-Average=\u5E73\u5747 -FR-Designer_Show_in_Containing_Folder=\u6240\u5728\u3059\u308B\u30D5\u30A1\u30A4\u30EB\u3092\u958B\u304F -M_File-Export-Excel=Excel -DataFunction-Max=\u6700\u5927\u5024 -FR-Designer_Form-Widget_Name=\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u540D -FS_End_Date=\u7D42\u4E86\u65E5\u671F -Export-Excel-Simple=\u5143 -ColumnTo=\u5217\u306F\u7B2C\u3000\u307E\u3067 -SpecifiedG-Discard_all_others=\u4ED6\u306E\u3059\u3079\u3066\u3092\u7834\u68C4\u3059\u308B -DS-TableData=\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9 -Form-DataTable=\u30C7\u30FC\u30BF\u8868 -Sub_Report_ToolTips=\u5B50\u5E33\u7968\u63D0\u793A -Right_Top=\u53F3\u4E0A -M_Edit-Merge_Cell=\u30BB\u30EB\u3092\u7D50\u5408\u3059\u308B -FR-Designer_Restore_Default=\u30C7\u30D5\u30A9\u30EB\u30C8\u5FA9\u5143 -Component_Interval=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306E\u9593\u9694 -Cover_None=\u5168\u3066\u8986\u308F\u306A\u3044 -Datasource-From_Database=\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u304B\u3089 -Folder=\u76EE\u6B21 -Form-Allow_Edit=\u76F4\u63A5\u7DE8\u96C6\u3042\u308A -M_Edit-Clear=\u30AF\u30EA\u30A2(A) -ParentCell_Setting=\u89AA\u30BB\u30EB\u8A2D\u5B9A -Only_selected_cell_can_paste_only=\u30BB\u30EB\u306F\u8CBC\u308A\u4ED8\u3051\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u9078\u629E\u3055\u308C\u3066\u3044\u308B\u5834\u5408\u306B\u306E\u307F -M_Report-Report_Columns=\u5E33\u7968\u30B3\u30E9\u30E0 -Unit_Hundred=\u767E -FR-Designer_DataTable-Build= -Widget-Form_Widget_Config=\u8868\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB -Server-version-tip-moreInfo=\u79C1\u305F\u3061\u306E\u88FD\u54C1\u306EFineReport Designer\u30D0\u30FC\u30B8\u30E7\u30F3\u756A\u53F7\u3060\u3051\u3067\u306A\u304F\u3001 -Actions=\u30A2\u30AF\u30B7\u30E7\u30F3 -FR-Designer-Dependence_Connect_Server_Error=connect error -High=\u9AD8 -HJS-Send_Failed=\u9001\u4FE1\u5931\u6557 -HJS-Message=\u30E1\u30C3\u30BB\u30FC\u30B8\u5185\u5BB9 -File-Allow_Upload_Files=\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u304C\u8A31\u53EF\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u30BF\u30A4\u30D7 -FR-Designer-Form-ToolBar_Chart=\u30B0\u30E9\u30D5 -Thick_Bottom_Border_Line=\u7C97\u5E95\u30D5\u30EC\u30FC\u30E0\u30E9\u30A4\u30F3 -FR-Action_Remove=\u524A\u9664 -FRFont-Style=\u30B9\u30BF\u30A4\u30EB -Select_DataColumn=\u30C7\u30FC\u30BF\u5217\u3092\u9078\u629E -StartValue=\u958B\u59CB\u5024 -SINGLE_FILE_UPLOAD=\u5358\u72EC\u30D5\u30A1\u30A4\u30EB\u306E\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u306E\u307F\u30B5\u30DD\u30FC\u30C8 -BackgroundTexture-Cork=\u30B3\u30EB\u30AF\u6813 -M_Format-Data_Map=\u30C7\u30FC\u30BF\u30DE\u30C3\u30D7 -FR-mobile_native_analysis=\u4E00\u6B21\u89E3\u6790 -HighLight=\u30CF\u30A4\u30E9\u30A4\u30C8 -FR-Designer_Dropdown-More-Preview=\u4E0B\u62C9\u83B7\u53D6\u66F4\u591A\u9884\u89C8\u65B9\u5F0F -local=\u30ED\u30FC\u30AB\u30EB -FR-Designer_Gradation=\u69CB\u6210 -PageSetup-Finis_Start_Column=\u91CD\u8907\u3059\u308B\u7D42\u4E86\u5217 -Env-Invalid_User_and_Password=\u7121\u52B9\u306A\u30E6\u30FC\u30B6\u30FC\u540D\u307E\u305F\u306F\u30D1\u30B9\u30EF\u30FC\u30C9\u3067\u3059 -FR-Designer-Plugin_All_Plugins=\u5168\u3066\u306E\u30D7\u30E9\u30B0\u30A4\u30F3 -FR-Designer_Prepare_Export=\u5C0E\u51FA\u3092\u958B\u59CB\u3057\u3066\u3044\u307E\u3059\u3002\u304A\u5F85\u3061\u304F\u3060\u3055\u3044 -DBCP_TEST_ON_RETURN=\u63A5\u7D9A\u524D\u691C\u67FB\u306B\u623B\u308B -no-alternatives=\u5168\u304F\u9078\u629E\u80A2\u304C\u3042\u308A\u307E\u305B\u3093 -FR-Designer_Submmit_WClass=\u30AB\u30B9\u30BF\u30E0\u9001\u4FE1 -M_Insert-Slope_Line=\u659C\u7DDA -FR-Designer-Plugin_Plugin_Description=\u30D7\u30E9\u30B0\u30A4\u30F3\u8AAC\u660E -ExpandD-Not_Expand=\u62E1\u5F35\u3057\u306A\u3044 -Utils-Bottom_to_Top=\u4E0B\u304B\u3089\u4E0A\u3078 -Collect-Click\!_Get_user_information_code=\u30AF\u30EA\u30C3\u30AF\u3057\u3066\!\u30A2\u30AF\u30C6\u30A3\u30D9\u30FC\u30C8\u30B3\u30FC\u30C9\u3092\u53D6\u5F97 -FR-Already_exist=\u73FE\u5728\u306E\u74B0\u5883\u306B\u306F\u5B58\u5728\u3057\u3066\u3044\u307E\u3059\: -Send=\u767A\u9001 -M_Edit-Clear_All=\u5168\u3066\u30AF\u30EA\u30A2(A) -Brown_Orange=\u30D6\u30E9\u30A6\u30F3 -PageSetup-Portrait=\u7E26\u65B9\u5411 -FR-Designer_Form-RadioGroup=\u30E9\u30B8\u30AA\u30DC\u30BF\u30F3\u30B0\u30EB\u30FC\u30D7 -FR-Utils-App_AllFiles=\u5168\u3066\u306E\u30D5\u30A1\u30A4\u30EB -Popup=\u30DD\u30C3\u30D7\u30A2\u30C3\u30D7 -Server_Charset=\u30B5\u30FC\u30D0\u30FC\u30B3\u30FC\u30C7\u30A3\u30F3\u30B0 -CellWrite-Repeat_Content_When_Paging=\u6539\u9801\u3059\u308B\u6642\u7E70\u308A\u8FD4\u3057\u624B\u8868\u793A\u3059\u308B -Utils-No_Pagination=\u6539\u30DA\u30FC\u30B8\u3057\u306A\u3044 -Form-NullLayout=\u7D76\u5BFE\u5B9A\u4F4D -ConditionB-Remove_bracket=\u62EC\u5F27\u3092\u524A\u9664\u3059\u308B -email=\u30E1\u30FC\u30EB\u30DC\u30C3\u30AF\u30B9 -Minute=\u5206\u9593 -FR-Designer-Plugin_Update=\u30D7\u30E9\u30B0\u30A4\u30F3\u66F4\u65B0 -alraedy_close=\u3059\u3067\u306B\u30AA\u30D5 -ComboCheckBox-End_Symbol=\u7D42\u7D50\u6587\u5B57 -DataColumn=\u30C7\u30FC\u30BF\u5217 -Form-Password=\u30D1\u30B9\u30EF\u30FC\u30C9 -FR-Background_Image_Adjust=\u9069\u5FDC -Export-Excel-PageToSheet=\u30B7\u30FC\u30C8 -Edit-Row_Count=\u884C\u6570 -DS-Report_TableData=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8 -Sche-Hour=\u6642 -Group_Count=\u7DCF\u6570\u8868\u793A -EndValue=\u7D42\u4E86\u5024 -FR-Designer_Sytle-Indentation=\u30A4\u30F3\u30C7\u30F3\u30C8 -DownBarBorderStyleAndColor=\u30D5\u30A9\u30FC\u30EB\u30AB\u30E9\u30E0\u30B9\u30BF\u30A4\u30EB -World=\u4E16\u754C -FR-Designer-Basic_Cancel=\u30AD\u30E3\u30F3\u30BB\u30EB -Finally=\u6700\u5F8C -Low=\u4F4E -Please_Input_The_Key=\u5BFE\u5FDC\u3059\u308B\u30DE\u30C3\u30D7\u306B\u4F7F\u7528\u3059\u308Bkey\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044 -Smart=\u30A4\u30F3\u30C6\u30EA\u30B8\u30A7\u30F3\u30C8 -Preference-Predefined=\u30D7\u30EC\u5B9A\u7FA9 -Current_custom_global=\u73FE\u5728\u306E\u5E33\u7968\u304C\u7528\u3044\u308B\u30AB\u30B9\u30BF\u30DE\u30A4\u30BA\u5168\u5C40\u30B9\u30BF\u30A4\u30EB -FR-Designer-Plugin_Shop_Need_Install=\u3042\u306A\u305F\u304C\u30A2\u30C9\u30AA\u30F3\u3055\u308C\u3066\u3044\u306A\u3044\u30EA\u30BD\u30FC\u30B9\u306E\u5E97\u8217\u3092\u3001\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u3059\u308B\u304B\u3069\u3046\u304B\uFF1F -WEB-Pagination_Setting=\u30DA\u30FC\u30B8\u5225\u30D7\u30EC\u30D3\u30E5\u30FC\u8A2D\u5B9A -RCodeDrawPix=\u753B\u7D20 -FR-Designer-Widget-Style_Alpha=\u4E0D\u900F\u660E\u5EA6 -BorderLayout-North=\u5317 -HJS-Current_Page=\u30AB\u30EC\u30F3\u30C8\u30DA\u30FC\u30B8 -Compile=\u7DE8\u96C6\u7FFB\u8A33 -Show_Blank_Row=\u7A7A\u767D\u884C\u3092\u88DC\u5145 -TableData_Dynamic_Parameter_Setting=\u30C0\u30A4\u30CA\u30DF\u30C3\u30AF\u30D1\u30E9\u30E1\u30FC\u30BF -FR-Background_Image_Default=\u30C7\u30D5\u30A9\u30EB\u30C8 -BackgroundTexture-WhiteMarble=\u767D\u3044\u5927\u7406\u77F3 -DataFunction-Sum=\u5408\u8A08 -Collect-The_user_information_code_is_invalid=\u3053\u306E\u30A2\u30AF\u30C6\u30A3\u30D9\u30FC\u30C8\u30B3\u30FC\u30C9\u306F\u7121\u52B9\u3067\u3059\u3002\u516C\u5F0F\u30DB\u30FC\u30E0\u30DA\u30FC\u30B8\u3067\u7533\u8ACB\u3057\u306A\u304A\u3057\u3066\u304F\u3060\u3055\u3044 -Preference-Locale=\u56FD\u969B\u5316 -M_File-Export-PDF=PDF -BiasD-From-lower_left_to_upper_right=\u5DE6\u4E0B\u5074\u304B\u3089\u53F3\u4E0A\u5074\u3078\u5E83\u304C\u308B -Border-Style=\u67A0\u7DDA\u306E\u30B9\u30BF\u30A4\u30EB -Sort=\u30BD\u30FC\u30C8 -Image-Image_Layout=\u30A4\u30E1\u30FC\u30B8\u30EC\u30A4\u30A2\u30A6\u30C8 -Panel=\u30D1\u30CD\u30EB -FR-Designer-Basic_Copy_Build_NO_OK=\u7D44\u307F\u7ACB\u3066\u30D0\u30FC\u30B8\u30E7\u30F3\u756A\u53F7\u306B\u30B3\u30D4\u30FC\u3057\u307E\u3057\u305F -All_Border_Line=\u3059\u3079\u3066\u306E\u5883\u754C -FR-Utils-Please_Input_a_New_Name=\u65B0\u3057\u3044\u540D\u79F0\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044 -FR-Base_Formula_Plugin=\u30D7\u30E9\u30B0\u30A4\u30F3\u95A2\u6570 -Two_Rows_Of_Three_Grid=3\u683C\u5B50\u306E\u4E8C\u5217 -FR-Designer_Certificate_Pass=https\u30B7\u30FC\u30AF\u30EC\u30C3\u30C8\u30AD\u30FC -Bubble-Series_Name=\u7CFB\u5217\u540D -M-New_Multi_Report=\u7D71\u8A08\u5E33\u7968\u3092\u65B0\u898F\u4F5C\u6210(M) -BackgroundTexture-PinkTissuePaper=\u30D4\u30F3\u30AF\u8272\u306E\u30B5\u30F3\u30C9\u30DA\u30FC\u30D1\u30FC -Preference-Support_Default_Parent_Calculate=\u30C7\u30D5\u30A9\u30EB\u30C8\u89AA\u30BB\u30EB\u306E\u8A08\u7B97 -Show_Blank_Column=\u7A7A\u767D\u5217\u3092\u88DC\u5145 -BaiduMap=\u767E\u5EA6\u30DE\u30C3\u30D7 -Report-Web_Attributes=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8Web\u5C5E\u6027 -FR-Designer_StyleAlignment-Wrap_Text=\u81EA\u52D5\u6298\u308A\u8FD4\u3057 -Need=\u5FC5\u8981 -Parameter-Double=\u500D\u7CBE\u5EA6\u6D6E\u52D5\u5C0F\u6570\u70B9\u6570\u578B -Config_Servlet=\u9060\u9694\u30B5\u30FC\u30D0\u30FC\u914D\u7F6E -Form-Comma=\u30B3\u30F3\u30DE -Verify=\u691C\u8A3C -PageSetup-Landscape=\u6A2A\u65B9\u5411 -Weeks=\u9031\u9593 -FR-Designer-Widget-Style_Title_Background=\u6A19\u984C\u80CC\u666F -Preference-Pagination_Line_Color=\u6539\u30DA\u30FC\u30B8\u7DDA\u306E\u8272 -Test_URL=\u30C6\u30B9\u30C8\u63A5\u7D9A -Fill_blank_Data=\u7A7A\u767D\u30C7\u30FC\u30BF\u306E\u88DC\u5145 -ReportServerP-The_name_of_printer_cannot_be_null=\u30D7\u30EA\u30F3\u30BF\u30FC\u306E\u540D\u524D\u306F\u7A7A\u5024\u306B\u306A\u306F\u3044\u3051\u307E\u305B\u3093 -FR-Designer-Basic_Copy_Activation_Key=\u30C0\u30D6\u30EB\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u30C7\u30B6\u30A4\u30CA\u30FC\u6574\u7406\u756A\u53F7\u3092\u30AF\u30EA\u30C3\u30D7\u30DC\u30FC -Continuum=\u96A3\u63A5\u9023\u7D9A -BackgroundTexture-MediumWood=\u6FC3\u3044\u8272\u306E\u6728\u76EE -Datasource-Column_Index=\u30B3\u30E9\u30E0\u756A\u53F7 -Function-Function_File=\u95A2\u6570\u30D5\u30A1\u30A4\u30EB -Form-Component_Bounds=\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u9818\u57DF -Utils-Submit=\u63D0\u51FA -Conditions_formula=\u6761\u4EF6\u516C\u5F0F -M_Insert-Image=\u30A4\u30E1\u30FC\u30B8 -FR-Designer-Plugin_Will_Be_Delete=\u30D7\u30E9\u30B0\u30A4\u30F3\u306F\u524A\u9664\u3055\u308C\u307E\u3057\u305F\u3002\u30C7\u30B6\u30A4\u30CA\u30FC\u3068\u30B5\u30FC\u30D0\u30FC\u3092\u518D\u8D77 -FormulaD-Functions=\u95A2\u6570 -Mobile_Terminal=\u79FB\u52D5\u7AEF -CheckBox=\u30C1\u30A7\u30C3\u30AF\u30DC\u30C3\u30AF\u30B9 -FR-Designer-Plugin_Install=\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB -Sun=\u65E5 -FR-Designer_ToolBar_Bottom=\u30D5\u30C3\u30BF\u30FC\u30C4\u30FC\u30EB\u30D0\u30FC -Widget-Width=\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u5E45 -Series_Name=\u7CFB\u5217\u540D -Set_Row_Title_Start=\u91CD\u8907\u3059\u308B\u6A19\u984C\u884C\u3092\u8A2D\u5B9A -HF-Default_Page=\u30C7\u30D5\u30A9\u30EB\u30C8\u30DA\u30FC\u30B8 -Env_Des=\u30ED\u30B0\u30A4\u30F3\u74B0\u5883\u4E2D\u306E\u5E33\u7968\u5DE5\u7A0B\u306B\u6A29\u9650\u3092\u4ED8\u4E0E\u3059\u308B\u5834\u5408\u3001\u30E6\u30FC\u30B6\u30FC\u540D\u3068\u30D1\u30B9\u30EF\u30FC\u30C9\u306E\u8A18\u5165\u306F\u5FC5\u305A -Widget-User_Defined=\u30D7\u30EC\u5B9A\u7FA9 -Url_location=\u7D76\u5BFE\u30EB\u30FC\u30C8 -Disk_File=\u30CF\u30FC\u30C9\u30C7\u30A3\u30B9\u30AF\u30D5\u30A1\u30A4\u30EB -Inside=\u5185\u90E8 -FR-Designer_filedChosen= -ServerM-Predefined_Styles=\u30D7\u30EC\u5B9A\u7FA9\u30B9\u30BF\u30A4\u30EB -is_need_word_adjust=\u884C\u306E\u9AD8\u3055\u3092\u56FA\u5B9A\u305B\u305A\u5C0E\u51FA -Background-Null=\u80CC\u666F\u306A\u3057 -PageSetup-Vertically=\u5782\u76F4\u4E2D\u592E\u63C3\u3048 -FR-Designer_Root=\u30EB\u30FC\u30C8\u30CE\u30FC\u30C9 -FR-Designer_Form-TextArea=\u6587\u66F8\u57DF -ReportServerP-Import_JavaScript=JavaScript\u5F15\u7528 -Form-TableTree=\u8868\u30C4\u30EA\u30FC -Opened=\u8D77\u52D5\u6E08\u307F -M_Edit-Delete=\u524A\u9664(D) -Widget-Form_Widget_Container=\u8868\u5BB9\u5668 -BindColumn-Summary=\u96C6\u8A08 -Sche-Second=\u79D2 -Server-Open_Service_Manager=\u30B5\u30FC\u30D3\u30B9\u7BA1\u7406\u5668\u3092\u958B\u304F -FRFont-Effects=\u7279\u5225\u52B9\u679C -OtherGroup_Name=\u305D\u306E\u4ED6\u30B0\u30EB\u30FC\u30D7\u306E\u540D\u524D -Specify=\u6307\u5B9A\u3059\u308B -Highlight-Click_to_Choose_Property_To_Modify=\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u5909\u66F4\u3059\u308B\u5C5E\u6027\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044 -triggered=\u30C8\u30EA\u30AC\u30FC -Double_Bottom_BorderLine=\u4E8C\u91CD\u5E95\u30D5\u30EC\u30FC\u30E0\u30E9\u30A4\u30F3 -M_Insert-Sub_Report=\u30B5\u30D6\u5E33\u7968 -Unit_Ten=\u5341 -Polybolck=\u30A2\u30B0\u30EA\u30B2\u30FC\u30B7\u30E7\u30F3\u30D6\u30ED\u30C3\u30AF -Select_sort_order=\u6392\u5217\u9806\u5E8F\u3092\u9078\u629E -HJS-Mail_to=\u53D7\u4FE1\u8005 -StyleAlignment-Left=\u5DE6\u8A70\u3081 -Two_Rows_Of_Two_Grid=2\u884C2\u5217\u306E\u683C\u5B50 -FR-Designer-Form-Please_Drag_ParaPane=\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\u30D1\u30CD\u30EB\u3092\u3057\u307E\u3063\u3066\u304F\u3060\u3055\u3044 -Milliseconds=\u30DF\u30EA\u79D2 -DataFunction-None=\u306A\u3057 -Delivery=\u4F1D\u9054 -ColumnSpan=\u5217\u7BC4\u56F2 -StyleAlignment-Bottom=\u4E0B\u8A70\u3081 -Read_failure=\u8AAD\u307F\u306B\u969C\u5BB3\u304C\u767A\u751F\u3059\u308B\u3068\u3001\u30BD\u30FC\u30B9\u00B7\u30D5\u30A1\u30A4\u30EB\u304C\u7834\u640D\u3057\u3066\u3044\u308B -Verify-Verify=\u30C7\u30FC\u30BF\u691C\u8A3C -FR-Designer-Widget-Style_Title_Format=\u6A19\u984C\u66F8\u5F0F -FR-Designer_Edit_String_To_Formula=\u30AD\u30E3\u30E9\u30AF\u30BF\u30FC\u6587\u5B57\u5217\u3092\u7DE8\u96C6\u3057\u3066\u516C\u5F0F\u3068\u3059\u308B\u304B\u5426\u304B -FR-Base_UnSignIn=\ \u672A\u30ED\u30B0\u30A4\u30F3 -Every=\u6BCF -CellWrite-Preview_Cell_Content=\u30BB\u30EB\u306E\u5185\u5BB9\u3092\u30D7\u30EC\u30D3\u30E5\u30FC\u3059\u308B -FormulaD-Data_Fields=\u30C7\u30FC\u30BF\u30D5\u30A3\u30FC\u30EB\u30C9 \ No newline at end of file +FR-Designer_PageSetup_Page=\u30DA\u30FC\u30B8 +FR-Designer_Custom_Job_Description=\u8A18\u8FF0 +FR-Designer_Property=\u5C5E\u6027 +FR-Designer_ClassName=\u985E\u540D diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index 39ebe76b6..9d540cd01 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -100,7 +100,6 @@ FR-Designer_FS_Close_Other_Templates=\uAE30\uD0C0\uD15C\uD50C\uB9BF\uB2EB\uAE30 FR-Designer_File=\uD30C\uC77C FR-Designer_Filter_Conditions=\uD544\uD130\uC870\uAC74 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_Font-Family=\uAE00\uAF34\uBA85\uCE6D FR-Designer_Font-Size=\uAE00\uAF34\uD06C\uAE30 @@ -461,10 +460,6 @@ 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_Define_PageQuerySQL=\uC815\uC758\uD398\uC774\uC9C0\uB098\uB204\uAE30\uCC3E\uC544\uBCF4\uAE30sql 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_Export_failed=\uB0B4\uBCF4\uB0B4\uAE30\uC2E4\uD328 FR-Designer_Exported_successfully=\uB0B4\uBCF4\uB0B4\uAE30\uC131\uACF5 @@ -489,19 +484,6 @@ FR-Designer_Create_Tree= FR-Designer_Set_Callback_Function= FR-Designer_ConfirmDialog_Content= FR-Designer_ConfirmDialog_Title= -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_FormulaPane_Variables=\uBCC0\uC218 -FR-Designer_FormulaPane_Formula_Description=\uC218\uC2DD\uC124\uBA85 -FR-Designer_FormulaPane_Function_Detail=\uD568\uC218\uC0C1\uC138\uC0AC\uD56D -FR-Designer_FormulaPane_Search=\uAC80\uC0C9 -FR-Designer_Tab_carousel= -FR-Designer_setCarousel= -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 @@ -509,36 +491,6 @@ 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_Null=\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}" \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_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-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_Parameter-Formula=\uC218\uC2DD FR-Designer_Background_Null= FR-Designer_Background_Color= FR-Designer_Background_Texture= @@ -547,1440 +499,17 @@ FR-Designer_Background_Gradient_Color= FR-Designer_Background_Image= FR-Designer_Background_Clear= FR-Designer_Background_Image_Select= +FR-Designer_Tab_carousel= +FR-Designer_setCarousel= +FR-Designer_carouselInterval= FR-Designer_Initial_Background_Tips= FR-Designer_Mouse_Move_Tips= FR-Designer_Mouse_Click_Tips= -FR-Designer_Plugin_Should_Update_Please_Contact_Developer= -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 -FR-Designer_Style=\uC591\uC2DD -FR-Designer_Color=\uC0C9 -FR-Designer_Border=\uD14C\uB450\uB9AC -FR-Designer_Background-Pattern=\uC774\uBBF8\uC9C0 -FR-Designer_COMMUNITY_BUG= -FR-Designer_Mobile-Attr= -FR-Designer_Too_Large_To_Paste= -FR-Designer_COMMUNITY_QUESTIONS= -FR-Designer_COMMUNITY_NEED= -FR-Designer_WidgetOrder= -FR-Designer_Button-OK= -FR-Designer_Mobile-Warning= -FR-Designer_COMMUNITY= -FR-Designer_Mobile_Form_Analysis_Annotation= -FR-Designer-Invalid_Page_Number= -FR-Designer_Form-Forzen-Speed= -FR-Designer_Properties_Mobile= -FR-Designer_AllCategories= -FR-Designer_COMMUNITY_VIDEO= -FR-Designer_Too_Small_To_Paste= -FR-Designer_COMMUNITY_HELP= -FR-Designer_Mobile-Zoom= -FR-Designer_SimpleCross_Report= -FR-Designer_Mobile-Horizontal= -FR-Designer_Form-Fit-Tip= -FR-Designer_Mobile-Vertical= -FR-Designer_Button-Cancel= -FR-Designer_LocalWidget= -FR-Designer_COMMUNITY_SIGN= -FR-Designer_TableData-Default-Para= -FR-Designer_Edit_Button_ToolBar=\uD0A4\uAC00\uC788\uB294\uD234\uBC14\uD3B8\uC9D1 -FR-Designer_Mobile-Open= -FR-Designer_Form-Frozen-Tip= -FR-Designer_Remove_Button_ToolBar=\uD0A4\uAC00\uC788\uB294\uD234\uBC14\uC81C\uAC70 -FR-Designer_Allow-Blank= -FR-Designer_COMMUNITY_BBS= -FR-Designer_formDesignerModule= -FR-Designer_COMMUNITY_UPDATE= -FR-Designer_Delete_Template= -FR-Designer_Mobile_Report_Analysis_Annotation= -FR-Designer_DoubleLayer_Report= -FR-Designer_Validate= -CellWrite-InsertRow_NULL=\uB110\uAC12 -DashBoard-ChartFloat=\uCC28\uD2B8 -contact_info=\uC5F0\uB77D\uC815\uBCF4(\uC120\uD0DD) -Page_Setup=\uC6F9\uD398\uC774\uC9C0\uC124\uC815 -CellWrite-Print_Export=\uC778\uC1C4\uB098\uAC00\uAE30 -Cannot_Get_Date=\uB0A0\uC9DC\uB97C\uBD88\uB7EC\uC62C\uC218\uC5C6\uC2B5\uB2C8\uB2E4. -FR-Designer_Modify=\uC218\uC815 -M-Write_Preview=\uAE30\uC785\uBBF8\uB9AC\uBCF4\uAE30 -FR-Base_RWA-Key=\uB9C8\uC2A4\uD130\uD0A4 -China=\uC911\uAD6D -Set_Legend_Sytle=\uB3C4\uD45C\uBC94\uB840\uC11C\uC2DD\uC124\uC815 -FR-Designer_Number=\uC22B\uC790 -FR-Designer-Widget-Style_Common=\uC77C\uBC18 -M-Save_As=\uB2E4\uB978\uC774\uB984\uC73C\uB85C\uC800\uC7A5 -Following_parameters_are_not_generated=\uB2E4\uC74C\uB9E4\uAC1C\uBCC0\uC218\uAC00\uC0DD\uC131\uB418\uC9C0\uC54A\uC558\uC2B5\uB2C8\uB2E4. -FR-Designer-Basic_Activation_Key_Copy_OK=\uD074\uB9BD\uBCF4\uB4DC\uC5D0\uBCF5\uC0AC\uB418\uC5C8\uC2B5\uB2C8\uB2E4. -Utils-Current_Sheet=\uD604\uC7AC Sheet -ConditionB-is_less_than=< -BorderLayout-West=\uC11C -AnalysisLine=\uBD84\uC11D\uC120 -Layer_Report_Warnning_info=\uD589\uD0C0\uC785\uC5D4\uC9C4\uC740\uB300\uC6A9\uB7C9\uB370\uC774\uD130\uC5D0\uC11C\uB9CC\uC801\uC6A9\uB429\uB2C8\uB2E4.
\uC774\uC5D4\uC9C4\uC744\uC0AC\uC6A9\uD558\uBA74\uC9C0\uC6D0\uB418\uC9C0\uC54A\uB294\uBB38\uC11C\uD2B9\uC131\uC774\uB9CE\uC544\uC9D1\uB2C8\uB2E4.
\uC0C1\uC138\uB0B4\uC6A9\uC740\uBB38\uC11C\uC758\uAD00\uB828\uC7A5\uC808\uC744\uCC38\uC870\uD574\uC8FC\uC138\uC694. -Tree-Width=\uB108\uBE44 -alert_word=\uBE44\uACE0\uC815\uD589\uB192\uC774\uB0B4\uBCF4\uB0B4\uAE30\uB97C\uC120\uD0DD\uD558\uBA74\uD3B8\uC9D1\uB0B4\uBCF4\uB0B4\uAE30\uC758 word, \uC140\uD589\uB192\uC774\uAC00\uB0B4\uC6A9\uC5D0\uB530\uB77C\uC790\uB3D9\uC73C\uB85C\uB298\uC5B4\uB098\uBA70,\uC774\uC0C1\uD669\uC5D0\uC11C\uB0B4\uBCF4\uB0B4\uAE30\uACB0\uACFC\uD398\uC774\uC9C0\uB098\uB204\uAE30\uC704\uCE58\uB294\uBBF8\uB9AC\uBCF4\uAE30\uACB0\uACFC\uC640\uC77C\uCE58\uD558\uC9C0\uC54A\uC744\uC218\uC788\uC2B5\uB2C8\uB2E4. -PageSetup-Paper_Size=\uC885\uC774\uD06C\uAE30 -M-Page_Setup=\uC6F9\uD398\uC774\uC9C0\uC124\uC815 -DashBoard-FormBook=\uD3FC -X-Coordinate=\uAC00\uB85C\uC88C\uD45C -Style-Line_Spacing=\uD589\uAC04\uACA9 -FR-Designer_Plugin_Should_Update_Title= -Server-Define_Data_Connection=\uB370\uC774\uD130\uB9C1\uD06C\uC815\uC758 -BarInside=\uCEEC\uB7FC\uC548\uCABD -Border-Color=\uD14C\uB450\uB9AC\uC0C9 -NotAllow=\uD569\uBC95\uC801\uC774\uC9C0\uC54A\uC2B5\uB2C8\uB2E4. -Utils-File_type=\uD30C\uC77C\uC720\uD615 -FR-Designer-Plugin_Install_From_Local=\uB85C\uCEEC\uD30C\uC77C\uC5D0\uC11C\uC124\uCE58 -Summary_Method=\uCDE8\uD569\uBC29\uC2DD -Select_Specified_Grouping=\uC0AC\uC6A9\uC790\uC815\uC758\uADF8\uB8F9\uC120\uD0DD -HF-Number_of_Page=\uCD1D\uD398\uC774\uC9C0\uC218 -FR-Designer-Tree_Height=\uB192\uC774 -Owner=\uB9C8\uC2A4\uD130 -Home=\uD648\uD398\uC774\uC9C0 -FR-Server_Embedded_Server_Stop=\uB0B4\uC7A5\uB41C\uC11C\uBC84-\uC815\uC9C0 -FR-Designer-Plugin_Detecting_Update=\uC5C5\uB370\uC774\uD2B8\uAC80\uC0AC\uC911 -HF-Whether_to_define_the_selected_type=\uC120\uD0DD\uD55C\uC720\uD615\uC744\uC815\uC758\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C? -StyleAlignment-Right=\uC624\uB978\uCABD\uC5D0\uB9DE\uCDA4 -FR-Designer_Alignment-Style=\uC815\uB82C\uBC29\uC2DD -PageSetup-Title_Start_Column=\uC911\uBCF5\uC81C\uBAA9\uC5F4 -Tree-Mutiple_Selection_Or_Not=\uB2E4\uC911\uC120\uD0DD -FR-Designer-Plugin_Search=\uAC80\uC0C9 -Choose_Role=\uAD8C\uD55C\uCEE8\uD2B8\uB864 -Append_Delete_Row_Message=\uC8FC\uC758\uFF01 \uC9C0\uC815\uB41C\uC140\uC740\uD655\uC7A5\uC18D\uC131\uC744\uC124\uC815\uD574\uC57C\uD569\uB2C8\uB2E4. -Form-ComboBox=\uBC15\uC2A4\uD480\uB2E4\uC6B4 -PageSetup-Footer=\uD398\uC774\uC9C0\uBC14\uB2E5\uAE00 -Sorting=\uC21C\uC11C\uC911 -DBCP_TEST_WHILE_IDLE=\uC720\uD734\uD68C\uC218\uAE30\uAC80\uC0AC\uC5F4\uAE30 -DS-Embedded_TableData=\uB0B4\uC7A5 \uB370\uC774\uD130 \uC138\uD2B8 -FR-Designer_No-Privilege=\uAD8C\uD55C\uC5C6\uC74C -FRFont-Subscript=\uBC11\uC904 -Background_Settings=\uBC30\uACBD\uC124\uC815 -FormulaD-Invalid_Formula=\uC62C\uBC14\uB974\uC9C0\uC54A\uC740\uC218\uC2DD -FR-Base_Margin=\uC5EC\uBC31 -FR-Designer-Plugin_Shop_Installed=\uD50C\uB7EC\uADF8\uC778 \uC0C1\uC810 \uC989\uC2DC \uC2DC\uC791\uD560\uC9C0 \uC5EC\uBD80\uB97C \uC124\uCE58? -M_Edit-Send_to_Back=\uC81C\uC77C\uBC11\uC5D0\uB450\uAE30(K) -Email-Can_Preview_Report_Content=\uBCF8\uBB38\uBBF8\uB9AC\uBCF4\uAE30\uBB38\uC11C\uB0B4\uC6A9 -FR-Designer-FRFont_Italic=\uAE30\uC6B8\uC784\uAF34 -CellWrite-Print_Background=\uC778\uC1C4/\uBD88\uB7EC\uC624\uAE30 \uC140 \uBC30\uACBD -Wizard=\uC548\uB0B4 -Preference-Is_Drag_Permited=\uB4DC\uB798\uADF8\uC9C0\uC6D0 -FR-Designer_Release_Lock=\uBE44\uBC00\uBC88\uD638\uD574\uC81C -Form-Delimiter=\uAD6C\uBD84\uBB38\uC790 -wrong=\uC624\uB958\uAC00\uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4. -FR-Menu-Server_Chart_PreStyle=\uCC28\uD2B8\uC0AC\uC804\uC815\uC758\uB41C\uC0C9\uBC30\uD569 -Form-Button=\uD0A4 -FormulaD-Valid_Formula=\uB9DE\uB294\uC218\uC2DD -ParameterD-Parameter_Interface=\uB9E4\uAC1C\uBCC0\uC218\uC0AC\uC6A9\uC790\uC778\uD130\uD398\uC774\uC2A4 -At_least_one_visual_worksheet=\uC6CC\uD06C\uBD81\uC5D0\uCD5C\uC18C\uD55C\uAC1C\uC758\uBCF4\uC774\uB294\uC6CC\uD06C\uC2DC\uD2B8\uAC00\uC788\uC5B4\uC57C\uD558\uBA70,\uC0AD\uC81C\uB97C\uC6D0\uD560\uACBD\uC6B0\uC0C8\uC6CC\uD06C\uC2DC\uD2B8\uB97C\uC0BD\uC785\uD574\uC8FC\uC2ED\uC2DC\uC624. -Need_Min_Value=\uD544\uC694\uCD5C\uC18C\uAC12 -Allow_Blank=\uBE48\uCE78\uD5C8\uC6A9 -CellWrite-InsertRow_DEFAULT=\uAE30\uBCF8\uAC12 -Widget-Load_By_Complete=\uC644\uC804\uB85C\uB529 -FR-Designer-Basic_Only_Submit_Current_Sheet= -Sort-Sort_Order=\uC815\uB82C\uC21C\uC11C -File-File_Size_Limit=\uD30C\uC77C\uD06C\uAE30\uC81C\uD55C -PrintP-Print=\uC778\uC1C4(T) -FR-Designer-StyleAlignment_Center=\uAC00\uC6B4\uB370\uC815\uB82C -Preference-Setting_Colors=\uC0C9\uC124\uC815 -Judge=\uD310\uB2E8 -Image-Adjust=\uC801\uC6A9 -Collect-User_Information_DES=\uD65C\uC131\uCF54\uB4DC\uB294\uC0AC\uC6A9\uC790\uC815\uBCF4\uC218\uC9D1\uC5D0\uB9CC\uC774\uC6A9\uB418\uBA70, \uC0C1\uB2E8\uC758 "\uD65C\uC131\uCF54\uB4DC"\uD0A4\uC218\uB839\uC744\uD074\uB9AD\uD558\uBA74\uC0C8\uB85C\uC6B4\uC6F9\uBE0C\uB77C\uC6B0\uC800\uD31D\uC5C5\uC774\uB098\uD0C0\uB0A9\uB2C8\uB2E4.\uC81C\uD488\uD648\uD398\uC774\uC9C0\uC5D0\uB85C\uADF8\uC778\uD558\uC5EC\uBB34\uB8CC\uB85C\uC774\uD65C\uC131\uCF54\uB4DC\uB97C\uBC1B\uB294\uB3703\uBD84\uC774\uC18C\uC6A9\uB418\uBA70\uD55C\uBC88\uB9CC\uC2E4\uC2DC\uD558\uBA74\uB429\uB2C8\uB2E4. -FR-Designer_Plugin_Normal_Update_From_Local=\uB85C\uCEEC\uC5D0\uC11C\uD30C\uC77C\uC5C5\uB370\uC774\uD2B8 -BackgroundTexture-Canvas=\uCE94\uBC84\uC2A4 -BarOutSide=\uCEEC\uB7FC\uBC14\uAE65\uCABD -Preview_ToolTips=\uBBF8\uB9AC\uBCF4\uAE30\uC54C\uB9BC -FRFont-Family=\uC774\uB984 -FR-Lic_does_not_Support_Remote=\uD604\uC7AC \uC0AC\uC6A9\uD558\uACE0 \uC788\uB294 lic\uC740 \uC6D0\uACA9 \uB514\uC790\uC778 \uAE30\uB2A5\uC744 \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uC73C\uBBC0\uB85C lic\uC744 \uC5C5\uADF8\uB808\uC774\uB4DC \uD574 \uC8FC\uC2ED\uC2DC\uC624. -InterfaceStyle=\uC2A4\uD0C0\uC77C -RWA-Key=\uB9C8\uC2A4\uD130\uD0A4 -WF-Name=\uBA85\uCE6D -RWA-Click_Cell_To_Edit_Value=\uD15C\uD50C\uB9BF\uC140\uC218\uC815\uAC12\uD074\uB9AD -Utils-Row_Height=\uD589\uB192\uC774 -ReportD-Excel_Export=\uD15C\uD50C\uB9BF\uB0B4\uBCF4\uB0B4\uAE30\uC18D\uC131 -Form-Please_Select_A_Kind_Of_Form_Container=\uD3FC\uCEE8\uD14C\uC774\uB108\uB97C\uC120\uD0DD\uD574\uC8FC\uC2ED\uC2DC\uC694 -Column_Does_Not_Exsit=\uC5F4\uC774\uC874\uC7AC\uD558\uC9C0\uC54A\uC2B5\uB2C8\uB2E4. -M_Insert-Hyperlink=\uD558\uC774\uD37C\uB9C1\uD06C -can_not_include_underline="_"\uB294\uD3EC\uD568\uD560\uC218\uC5C6\uC2B5\uB2C8\uB2E4. -FR-Designer-Plugin_Jar_Expired=Jar\uD329\uC774\uB108\uBB34\uC624\uB798\uB418\uC5C8\uC2B5\uB2C8\uB2E4. -FR-Background_Image_Extend=\uC7A1\uC544\uB2F9\uAE40 -TopDownShade=\uC0C1\uD558 \uADF8\uB77C\uB370\uC774\uC158 -FR-Base_Right=\uC624\uB298\uCABD -DataBinding=\uB370\uC774\uD130\uBC14\uC778\uB529 -ConnectionPool_Attr=\uCEE4\uB125\uC158\uD480\uC18D\uC131 -Connect_SQL_Cannot_Null=\uB370\uC774\uD130\uB9C1\uD06C\uC640SQL\uD328\uB110\uC740\uBE48\uCE78\uC73C\uB85C\uB458\uC218\uC5C6\uC2B5\uB2C8\uB2E4. -DBCP_MAX_ACTIVE=\uCD5C\uB300 \uC561\uD2F0\uBE0C \uC5F0\uACB0 \uC218 -M_Window-Preference=\uC635\uC158 -ToolBar_Top=\uC0C1\uB2E8\uD234\uBC14 -FR-Designer_Indent-Pixel=\uD654\uC18C -FR-Designer_Unit_MM=\uBC00\uB9AC\uBBF8\uD130 -IDLE=\uC720\uD734 -FRFont-Underline=\uBC11\uC904 -FR-Designer-Plugin_Read_Plugin_List_Error=\uD50C\uB7EC\uADF8\uC778\uB9AC\uC2A4\uD2B8\uB97C\uC77D\uC744\uB54C\uC624\uB958\uBC1C\uC0DD -Type_Set=\uC720\uD615\uC124\uC815 -M_Format_A-Cell_Attributes=\uAE30\uD0C0\uC18D\uC131 -CellWrite-Show_As_Image=\uC774\uBBF8\uC9C0\uB85C\uB0B4\uC6A9\uBCF4\uC774\uAE30 -ShowAsDownload=\uB2E4\uC6B4\uB85C\uB4DC\uB9C1\uD06C\uB85C2\uC9C4\uBC95\uB0B4\uC6A9\uBCF4\uC774\uAE30 -Form-ComboCheckBox=\uCCB4\uD06C\uBC15\uC2A4\uD480\uB2E4\uC6B4 -BackgroundTexture-WovenMat=\uD3B8\uC9C1\uBB3C -BindColumn-Custom_Data_Appearance=\uC0AC\uC6A9\uC790\uC815\uC758\uBCF4\uC774\uAE30 -Actived=\uD65C\uC131\uD654\uB41C -Env-Local_Directory=\uB85C\uCEEC\uB514\uB809\uD130\uB9AC -Form-Colon=\uCF5C\uB860 -Preference-Vertical_Scroll_Bar_Visible=\uC218\uC9C1\uC2A4\uD06C\uB864\uBC14\uB97C\uBCFC\uC218\uC788\uC2B5\uB2C8\uB2E4. -Utils-Show_Cell_Value=\uC140\uAC12\uBCF4\uC774\uAE30 -FR-Designer_ReportColumns-Repeat_Row=\uD589\uBCF5\uC0AC\uC21C\uC11C -SpecifiedG-Specified_Group=\uC0AC\uC6A9\uC790\uC815\uC758\uADF8\uB8F9 -RWA-Smart_Add_Cells=\uC140\uC2A4\uB9C8\uD2B8\uCD94\uAC00 -HF-Left_Section=\uC67C\uCABD\uC601\uC5ED -M_Report-Report_Background=\uC885\uC774\uBC30\uACBD -Image-Extend=\uC7A1\uC544\uB2F9\uAE40 -FS_BI=\uC815\uCC45\uD50C\uB7AB\uD3FC -ToolBar_Bottom=\uD558\uB2E8\uD234\uBC14 -Hgap=\uC218\uD3C9\uD2C8 -FR-Designer_Enter-New-FileName=\uC0C8\uB85C\uC6B4\uD30C\uC77C\uBA85\uC744\uC785\uB825\uD574\uC8FC\uC2ED\uC2DC\uC624. -Verify_Fail=\uAC80\uC0AC\uC2E4\uD328 -CellWrite-InsertRow_Policy=\uD589\uC0BD\uC785\uC815\uCC45 -FR-Designer-Plugin_Illegal_Plugin_Zip=\uB9DE\uB294\uD50C\uB7EC\uADF8\uC778\uD328\uD0A4\uC9C0\uAC00\uC544\uB2D9\uB2C8\uB2E4. -RCodeVersion=\uBC84\uC804 -Convert=\uC804\uD658 -Please_Drag=\uD589\uACFC\uC5F4\uD544\uB4DC\u3001\uCDE8\uD569\uD544\uB4DC\uB97C\uB4DC\uB798\uADF8\uD574\uC8FC\uC2ED\uC2DC\uC624 -FR-Designer-Widget-Style_Preview=\uBBF8\uB9AC\uBCF4\uAE30 -mobile_number=\uD734\uB300\uD3F0\uBC88\uD638 -FR-Designer_Form-ComboCheckBox=\uCCB4\uD06C\uBC15\uC2A4\uD480\uB2E4\uC6B4 -CacheValidateTime=\uBB38\uC11C\uCE90\uC2DC\uC720\uD6A8\uAE30\uAC04 -Hyperlink-Extends_Report_Parameters=\uBB38\uC11C\uC758\uB9E4\uAC1C\uBCC0\uC218\uACC4\uC2B9 -FR-Designer_Values-Editor=\uAC12\uD3B8\uC9D1\uAE30 -Export-Excel=Excel\uC11C\uC2DD -Utils-Left_to_Right=\uAC00\uB85C -ExpandD-Vertical_Extendable=\uC138\uB85C\uB85C\uD655\uC7A5\uAC00\uB2A5 -Utils-Report_Runtime_Env=\uBB38\uC11C\uC791\uC5C5\uB514\uB809\uD130\uB9AC -Utils-Right_to_Left=\uC624\uB978\uCABD\uC5D0\uC11C\uC67C\uCABD\uAE4C\uC9C0 -Utils-Beyond_the_top_side_of_Border=\uC704\uACBD\uACC4\uC120\uBC97\uC5B4\uB0A8 -Exception_StackTrace=\uC2A4\uD0DD\uC815\uBCF4\uC624\uB958 -Corresponding_Fields=\uC0C1\uC751\uD558\uB294\uD544\uB4DC -Form-CheckBox=\uCCB4\uD06C\uBC15\uC2A4 -Utils-Current_Row=\uD604\uC7AC\uD589 -BuildIn=\uB0B4\uC7A5 -BindColumn-Results_Filter=\uACB0\uACFC\uC9D1\uC120\uBCC4 -FR-Designer-Plugin_Manager=\uD50C\uB7EC\uADF8\uC778\uAD00\uB9AC -M_File-Export-CSV=CSV\uC11C\uC2DD(\uC27C\uD45C\uAD6C\uBD84) -Data_Filter=\uB370\uC774\uD130\uC120\uBCC4 -ReportServerP-Edit_Printer=\uD504\uB9B0\uD130\uD3B8\uC9D1 -FR-Designer_Datasource-Stored_Procedure=\uC800\uC7A5\uACFC\uC815 -RESTART=\uC7AC\uBD80\uD305 -FormulaD-Function_name=\uD568\uC218\uC774\uB984 -ChooseOneButton=\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4\uC120\uD0DD\uD6C4\uCD94\uAC00\uD574\uC8FC\uC2ED\uC2DC\uC624 -Priority=\uC6B0\uC120\uC21C\uC704 -Datasource-Datasource=\uB370\uC774\uD130\uC18C\uC2A4 -FR-Designer_Width=\uB108\uBE44 -Cannot-Add_To_This_Area=\uD574\uB2F9\uC601\uC5ED\uC5D0\uCD94\uAC00\uD560\uC218\uC5C6\uC2B5\uB2C8\uB2E4. -Run=\uC2E4\uD589 -Set_Submit_Condition=\uC81C\uCD9C\uC870\uAC74\uC124\uC815 -FR-Base_Value=\uAC12 -fileLocked_undeleted=\uD15C\uD50C\uB9BF\uC774\uC7A0\uACA8\uC788\uC5B4\uC0AD\uC81C\uD560\uC218\uC5C6\uC2B5\uB2C8\uB2E4\uFF01 \uD655\uC778\uC744\uD074\uB9AD\uD558\uC5EC\uD15C\uD50C\uB9BF\uB9AC\uC2A4\uD2B8\uC0C8\uB85C\uACE0\uCE68 -Web_Apply=WEB\uC751\uC6A9 -Refresh_Database=\uB370\uC774\uD130\uBCA0\uC774\uC2A4\uC0C8\uB85C\uACE0\uCE68 -Set_Row_Title_End=\uC911\uBCF5\uC885\uB8CC\uD589\uC124\uC815 -FR-Utils-New_Folder=\uC0C8\uD3F4\uB354 -BiasD-From-upper_left_to_lower_right=\uC67C\uCABD\uC0C1\uB2E8\uC5D0\uC11C\uC624\uB978\uCABD\uC544\uB798\uB85C\uB098\uD0C0\uB0B4\uAE30 -CapsLock=\uCEA1\uC2A4\uB85C\uD06C\uD0A4\uAC00\uCF1C\uC838\uC788\uC2B5\uB2C8\uB2E4. -StyleFormat-Sample=\uC608\uC2DC -RWA-Smart_Add_Cell_Group=\uC140\uADF8\uB8F9\uC2A4\uB9C8\uD2B8\uCD94\uAC00 -MConfig-CancelButton=\uCDE8\uC18C -Function-Choose_Function_Class=\uC120\uD0DD\uD568\uC218\uD074\uB798\uC2A4 -LatLng=\uACBD\uB3C4\uCC28\uC6D0 -DS-Server_TableData=\uC11C\uBC84\uB370\uC774\uD130\uC138\uD2B8 -BackgroundTexture-GreenMarble=\uADF8\uB9B0\uB300\uB9AC\uC11D -read_time_out=\uB85C\uB529\uC2DC\uAC04\uCD08\uACFC -JavaScript-Commit_to_Database=\uC81C\uCD9C\uC785\uACE0 -DS-Relation_TableData=\uAD00\uB828\uB370\uC774\uD130\uC138\uD2B8 -CellWrite-Page_Before_Row=\uD589\uC55E\uD398\uC774\uC9C0\uB098\uB204\uAE30 -FR-Designer-Plugin_Load_Plugins_From_Server=\uD50C\uB7EC\uADF8\uC778\uC2A4\uD1A0\uC5B4\uC5D0\uC11C\uB370\uC774\uD130\uB97C\uC5BB\uB294\uC911. -D-Dispaly_Divide_Result_Set_into_Groups=Result set\uB97C\uADF8\uB8F9\uD654\uD569\uB2C8\uB2E4. -Closed=\uC774\uBBF8\uB2EB\uD614\uC2B5\uB2C8\uB2E4. -RWA-Help=\uBBF8\uC218\uC815, \uBBF8\uC5C5\uB370\uC774\uD2B8\uB85C\uC124\uC815\uD55C\uD6C4\uBBF8\uB9AC\uBCF4\uAE30\uBB38\uC11C\uB97C\uC791\uC131\uD558\uC5EC\uB808\uCF54\uB4DC\uB41C\uC140\uC5D0\uD3B8\uC9D1\uC218\uC815\uC0AC\uD56D\uC774\uC5C6\uC744\uACBD\uC6B0\uC774\uB808\uCF54\uB4DC\uB294\uD589\uC5C5\uB370\uC774\uD2B8\uB97C\uC9C4\uD589\uD560\uC218\uC5C6\uC2B5\uB2C8\uB2E4.\n\uB300\uC6A9\uB7C9\uB370\uC774\uD130\uB808\uCF54\uB4DC\uCC3E\uC544\uBCF4\uAE30\uBC0F\uAE30\uC785\uC0C1\uD669\uC5D0\uC11C\uD574\uB2F9\uC124\uC815\uC744\uD558\uBA74\uAE30\uC785\uC81C\uCD9C\uC131\uB2A5\uC744\uB192\uC77C\uC218\uC788\uC2B5\uB2C8\uB2E4. -FR-Designer-Widget-Style_Custom= -FR-Designer-Widget-Style_Render_Style=\uB80C\uB354\uC2A4\uD0C0\uC77C -Highlight-Barcode=\uBC14\uCF54\uB4DC -FR-Designer_Connect_SQL_Cannot_Null=\uB370\uC774\uD130\uB9C1\uD06C\uC640SQL\uD328\uB110\uC740\uBE48\uCE78\uC73C\uB85C\uB458\uC218\uC5C6\uC2B5\uB2C8\uB2E4. -trigger=\uD2B8\uB9AC\uAC70 -M-Data_Analysis=\uB370\uC774\uD130\uBD84\uC11D -Function-The_selected_file_cannot_be_null=\uD30C\uC77C\uC740\uBE48\uCE78\uC73C\uB85C\uB458\uC218\uC5C6\uC2B5\uB2C8\uB2E4. -No-Privilege=\uAD8C\uD55C\uC5C6\uC74C -ReportColumns-Repeat_Column=\uC5F4\uBCF5\uC0AC\uC21C\uC11C -SecondGraduationUnit=\uBCF4\uC870\uB208\uAE08\uB2E8\uC704 -Form-Widget_Property_Value=\uC18D\uC131\uAC12 -GIVE-NAME=\uB124\uC774\uBC0D -FR-Designer_Rename=\uB9AC\uB124\uC784 -Utils-Merge_Cell=\uC140\uBCD1\uD569 -Style-Spacing_After=\uC139\uC158\uB4A4 -Enlarge_Or_Reduce=\uCD95\uC18C -Tree-Height=\uB192\uC774 -RCodeErrorCorrect=\uC5D0\uB7EC\uC218\uC815 -Enter-New-FileName=\uC0C8\uB85C\uC6B4\uD30C\uC77C\uBA85\uC744\uC785\uB825\uD574\uC8FC\uC2ED\uC2DC\uC624. -try_resending=\uB2E4\uC2DC\uBC1C\uC1A1\uD574\uC8FC\uC2ED\uC2DC\uC624. -M-Open_Report=\uC5F4\uAE30... -Please_Select=\uC120\uD0DD\uD574\uC8FC\uC2ED\uC2DC\uC624 -InRow=\uD589(R) -Form-TextArea=\uD14D\uC2A4\uD2B8\uC601\uC5ED -FR-Designer_Https_Enable=\uC2E4\uD589https -Widget-Custom_Widget_Config=\uC0AC\uC6A9\uC790\uC815\uC758\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4 -already_exists=\uC774\uBBF8\uC874\uC7AC\uD569\uB2C8\uB2E4. -Original_Marked_Filed=\uCD08\uAE30\uD0DC\uADF8\uD544\uB4DC -BackgroundTexture-Sand=\uBAA8\uB798\uC0AC\uC7A5 -Values=\uAC12 -Not_use_a_cell_attribute_table_editing=\uC140\uC18D\uC131\uC73C\uB85C\uD45C\uB97C\uD3B8\uC9D1\uD560\uC218\uC5C6\uC2B5\uB2C8\uB2E4. -Root=\uB8E8\uD2B8\uB178\uB4DC -cycle=\uC8FC\uAE30 -open-new-form-tip=\uD604\uC7AC\uD15C\uD50C\uB9BF\uC740711\uC774\uD558\uBC84\uC804\uC73C\uB85C\uC791\uC131\uB418\uC5B4\uD638\uD658\uC774\uB418\uC9C0\uC54A\uC544\uC5F4\uC218\uC5C6\uC2B5\uB2C8\uB2E4. \uC774\uD3FC\uC744\uC5F4\uC5B4\uC218\uC815\uD558\uACE0\uC790\uD560\uACBD\uC6B0\uC0C1\uC751\uD558\uB294\uBC84\uC804\uC124\uACC4\uAE30\uB85C\uC5F4\uC5B4\uC8FC\uC2ED\uC2DC\uC624. -Support-Current_Auto_Complete_Shortcut=\uD604\uC7AC\uB2E8\uCD95\uD0A4 -GROUPING_MODE=\uC77C\uBC18\uADF8\uB8F9 -DBCP_MAX_IDLE=\uCD5C\uB300 \uC720\uD734 \uC5F0\uACB0 \uC218 -BackgroundTexture-BlueTissuePaper=\uBE14\uB8E8\uC0AC\uD3EC -ReportD-Export_Hided_Row=\uC228\uAE34\uD589\uBCF4\uC774\uAE30 -FR-Custom_styles_lost=\uC0AC\uC6A9\uC790\uC815\uC758\uC591\uC2DD\uC774\uC5C6\uC2B5\uB2C8\uB2E4. -Env-Des2=Servlet\uC704\uCE58\uB294\uD638\uC2A4\uD2B8\uCEF4\uD4E8\uD130\uC774\uB984\uFF0C\uD3EC\uD2B8\uFF0CWEB\uC751\uC6A9\uFF0CServlet\uC758\uADF8\uB8F9\uC774\uBA70,Servlet\uB97C\uAC00\uB9AC\uCF1C\uC57C\uD569\uB2C8\uB2E4.\uC608: "http\://localhost\:8080/WebReport/ReportServer". \uD638\uC2A4\uD2B8\uCEF4\uD4E8\uD130\uC774\uB984\uFF0C\uD3EC\uD2B8\uFF0C WEB\uC751\uC6A9\uFF0C Servlet\uC744\uC120\uD0DD\uD560\uC218\uC788\uC73C\uBA70,\uC774\uB294\uC0AC\uC6A9\uC790\uAC00\uD544\uC694\uB85C\uD558\uB294 Servlet\uC704\uCE58\uB97C\uC790\uB3D9\uC0DD\uC131\uD569\uB2C8\uB2E4. -Env-Des1=\uBB38\uC11C\uC11C\uBC84\uAC00\uC788\uB294WEB-INF\uB514\uB809\uD130\uB9AC\uB97C\uC120\uD0DD\uD574\uC8FC\uC2ED\uC2DC\uC624. -PageSetup-Placement_Center_on_Page=\uAC00\uC6B4\uB370\uC815\uB82C\uBC29\uC2DD -sure_to_delete=\uC0AD\uC81C\uD655\uC778 -Already_exists_not_add_repeat=\uC774\uBBF8\uC874\uC7AC\uD569\uB2C8\uB2E4.\uC911\uBCF5\uCD94\uAC00\uD558\uC9C0\uB9C8\uC2ED\uC2DC\uC624. -Axis_Title=\uCD95\uC81C\uBAA9 -FR-Designer-Plugin_Install_Failed=\uD50C\uB7EC\uADF8\uC778\uC124\uCE58\uC2E4\uD328 -FR-Designer-Widget-Style_Frame=\uD504\uB808\uC784 -MainGraduationUnit=\uC8FC\uB208\uAE08\uB2E8\uC704 -Second_Axis=\uBCF4\uC870\uC88C\uD45C\uCD95 -Classifier-Ge=\uAC1C -MSBold=\uB9C8\uC774\uD06C\uB85C\uC18C\uD504\uD2B8 Yahei -Form-Design_Size=\uB514\uC790\uC778\uC0AC\uC774\uC988 -FR-App-Template_Save=\uC800\uC7A5 -ExpandD-Horizontal_Extendable=\uAC00\uB85C\uB85C\uD655\uC7A5\uAC00\uB2A5 -RP_Authority_Edit=\uAD8C\uD55C\uD3B8\uC9D1 -Warnning=\uC54C\uB9BC -RoleName_Can_Not_Be_Null=\uC5ED\uD560\uC774\uB984\uC740\uBE44\uC5B4\uC788\uAC70\uB098\uC911\uBCF5\uB418\uC5B4\uC11C\uB294\uC548\uB429\uB2C8\uB2E4. -Application=\uC560\uD50C\uB9AC\uCF00\uC774\uC158 -Formula_Dictionary_Display_Examples_Html=\uC2E4\uC81C\uAC12\uBC94\uC704:\ -ECP-error_pwd=\uBE44\uBC00\uBC88\uD638\uC785\uB825\uC624\uB958 -FR-Hyperlink_ChartHyperlink=\uCC28\uD2B8\uD558\uC774\uD37C\uB9C1\uD06C -M_Edit-FormatBrush=\uC11C\uC2DD\uD504\uB9B0\uD2B8(B) -Indent-Pixel=\uD654\uC18C -FR-Designer-Widget-Style_Border_Line=\uD14C\uB450\uB9AC\uAD75\uAE30 -Widget-Default_Widget_Config=\uAE30\uBCF8\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4 -Version-does-not-support=\uD604\uC7AC \uC0AC\uC6A9\uD558\uACE0 \uC788\uB294 lic\uC740 \uC6D0\uACA9 \uB514\uC790\uC778 \uAE30\uB2A5\uC744 \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uC73C\uBBC0\uB85C lic\uC744 \uC5C5\uADF8\uB808\uC774\uB4DC \uD574 \uC8FC\uC2ED\uC2DC\uC624. -StyleAlignment-Right_To_Left=\uC624\uB978\uCABD\uC5D0\uC11C\uC67C\uCABD\uC73C\uB85C -Style-Spacing_Before=\uC139\uC158\uC55E -Has_Existed=\uC774\uBBF8\uC874\uC7AC\uD569\uB2C8\uB2E4. -FR-Designer_DisplayNothingBeforeQuery=\uCC3E\uC544\uBCF4\uAE30\uD074\uB9AD\uC804\uBB38\uC11C\uB0B4\uC6A9\uBCF4\uC774\uC9C0\uC54A\uAE30 -Still=\uC5EC\uC804\uD788 -JS_WARNING2=\\uc608\uFF1Ahttp\://localhost\:8075/WebReport/demo.js -JS_WARNING1=\\uc0c1\uB300\uBB38\uC11C\uD504\uB85C\uC81D\uD2B8\uB514\uB809\uD130\uB9AC(\uC608:WebReport,WebReport\\js\uC5D0\uC11C\uC778\uC6A9\uD55C js \uD30C\uC77Ctest.js)\uB294\uC0C1\uB300\uACBD\uB85C\uAC00js/test.js\uC785\uB2C8\uB2E4. -Connectionline=\uC5F0\uACB0\uBAA8\uB4DC -Utils-Insert_Record=\uB808\uCF54\uB4DC\uC0BD\uC785 -Set-Parameter-Name=\uB9E4\uAC1C\uBCC0\uC218\uC774\uB984\uC744\uC124\uC815\uD574\uC8FC\uC2ED\uC2DC\uC624 -More-information=\uC815\uBCF4\uB354\uBCF4\uAE30 -Parameter-Boolean=\uBD88\uB9B0\uD0C0\uC785 -FRFont-Strikethrough=\uC120\uC0AD\uC81C -Server-version-tip=\uD604\uC7AC\uC5F0\uACB0\uB41C\uC11C\uBC84\uBC84\uC804\uC774\uB2F9\uC2E0\uC774\uC0AC\uC6A9\uD558\uACE0\uC788\uB294\uC124\uACC4\uAE30\uBC84\uC804\uBC88\uD638\uBCF4\uB2E4\uB0AE\uC2B5\uB2C8\uB2E4.\uACC4\uC18D\uC5F0\uACB0\uD558\uBA74\uD3B8\uC9D1\uD558\uACE0\uC788\uB294\uC77C\uBD80\uC18D\uC131\uC774\uC800\uC7A5\uB418\uC9C0\uC54A\uC744\uC218\uC788\uC2B5\uB2C8\uB2E4. \uC5F0\uACB0\uD574\uC57C\uD560\uACBD\uC6B0\uC124\uACC4\uAE30\uBC84\uC804\uACFC\uC11C\uBC84\uBC84\uC804\uC744\uC77C\uCE58\uC2DC\uCF1C\uC8FC\uC2ED\uC2DC\uC624. -Form-All_Files=\uBAA8\uB4E0\uD30C\uC77C -DBCP_NUM_TEST_PER_EVCTION_RUN=\uC720\uD734\uB9C1\uD06C\uD68C\uC218\uAC80\uC0AC\uC218 -FR-Designer-FRFont_Family=\uC774\uB984 -Device=\uC124\uBE44 -M_Insert-Cell=\uC140\uC694\uC18C -Present-Formula_Present=\uC218\uC2DD\uD615\uD0DC -FRFont-Superscript=\uC717\uC904 -CellWrite-Page_Before_Column=\uC5F4\uC55E\uD398\uC774\uC9C0\uB098\uB204\uAE30 -Golden=\uACE8\uB4DC\uC0C9 -Preference-Support_Cell_Editor_Definition=\uC140\uD3B8\uC9D1\uAE30\uC9C0\uC6D0 -M-Page_Preview=\uD398\uC774\uC9C0\uB098\uB204\uAE30\uBBF8\uB9AC\uBCF4\uAE30 -HJS-CC_to=\uBC1C\uC1A1 -Tree-Select_Leaf_Only=\uB9C6(Leaf) \uB178\uB4DC\uB85C\uB9CC\uB418\uB3CC\uB9AC\uAE30 -Pointer-A-Tick-Order=\uD3EC\uC778\uD130\uAC12\uBC0F\uB208\uAE08\uAC12\uC218\uB4F1\uAE09 -Pink=\uD551\uD06C -StyleAlignment-Distibuted=\uBD84\uC0B0\uC815\uB82C -Odd=\uD640\uC218 -already-saved=\uC800\uC7A5\uB418\uC5C8\uC2B5\uB2C8\uB2E4. -FR-Hyperlink_Chart_Cell=\uCC28\uD2B8 \uD558\uC774\uD37C\uB9C1\uD06C-\uC140 \uC5F0\uB3D9 -Style-Left_Indent=\uC67C\uCABD\uB4E4\uC5EC\uC4F0\uAE30 -Offline=\uC624\uD504\uB77C\uC778 -Form-Hierarchy_Tree_Next=\uB2E4\uC74C -Needle=\uD3EC\uC778\uD130 -GoogleMap=\uAD6C\uAE00\uC9C0\uB3C4 -Running=\uC2E4\uD589\uC911 -M_Edit-Unmerge_Cell=\uC140\uBCD1\uD569\uCDE8\uC18C -Out_Border_Line=\uBC14\uAE65\uCABD\uD14C\uB450\uB9AC\uC120 -Style-Spacing=\uAC04\uACA9 -FR-Utils_Submit=\uC81C\uCD9C -ReportServerP-Previous=\uC774\uC804\uD398\uC774\uC9C0 -StyleAlignment-Text_Style=\uD14D\uC2A4\uD2B8\uCEE8\uD2B8\uB864 -RelatedChart=\uCC28\uD2B8\uC5F0\uB3D9 -ProcessManager=\uD504\uB85C\uC138\uC2A4\uAD00\uB9AC -Cancel_Repeat_Attributes=\uC911\uBCF5\uB41C\uD589\uACFC\uC5F4\uCDE8\uC18C -FR-App-File_Message=\uC815\uBCF4 -Datasource-Stored_Procedure=\uC800\uC7A5\uACFC\uC815 -RWA-Row_Offset=\uD589\uC635\uC14B -M_Format-Style=\uC591\uC2DD -detail_description=\uC0C1\uC138\uC124\uBA85 -FR-Designer-Widget-Style_Title_Content=\uC81C\uBAA9\uB0B4\uC6A9 -ParameterD-Report_Parameter=\uBB38\uC11C\uB9E4\uAC1C\uBCC0\uC218 -HF-Edit_Header=\uD398\uC774\uC9C0\uBA38\uB9AC\uAE00\uD3B8\uC9D1 -Sytle-FRFont=\uAE00\uAF34 -FR-Designer_Finish_Export=\uB0B4\uBCF4\uB0B4\uAE30\uC644\uB8CC -MultiFileUpload=\uC5EC\uB7EC\uD30C\uC77C\uC5C5\uB85C\uB4DC -HF-Page_Number=\uD398\uC774\uC9C0\uBC88\uD638 -Style-Right_Indent=\uC624\uB978\uCABD\uB4E4\uC5EC\uC4F0\uAE30 -Desktop=\uBC14\uD0D5\uD654\uBA74 -FR-Server-All_Error=\uC624\uB958 -ConditionB-Operator=\uC870\uC791\uBD80\uD638 -Today=\uC624\uB298 -Form-Widget_Name=\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4\uC774\uB984 -Covered_All=\uBAA8\uB450\uB36E\uC5B4\uC50C\uC6B0\uAE30 -Day=\uC77C -External=\uBC14\uAE65 -Black_Font=\uD751\uCCB4 -LOG-Report_Server_IS_Started=\uBB38\uC11C\uC11C\uBC84\uC2E4\uD589\uC911 -Tips\:You_Can_Input_B1_To_Input_The_Data_Of_The_First_Row_Second_Column=\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_ChooseOneButton=\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4\uC120\uD0DD\uD6C4\uCD94\uAC00\uD574\uC8FC\uC2ED\uC2DC\uC624 -Widget-Sizing=\uD06C\uAE30\uC870\uC815 -NO_Border_Line=\uD14C\uB450\uB9AC\uC120\uC5C6\uC74C -Cell_Data=\uC140\uB370\uC774\uD130 -StyleAlignment-Vertical_Text=\uD14D\uC2A4\uD2B8\uC138\uB85C\uC815\uB82C -Label=\uB808\uC774\uBE14 -Orange=\uC8FC\uD669 -zeroMarginWarn=\uD504\uB9B0\uD130\uC5D0\uBB3C\uB9AC\uC801\uC5EC\uBC31\uC874\uC7AC
\uBB38\uC11C\uC758\uD398\uC774\uC9C0\uC5EC\uBC31\uC124\uC815\uC774\uB108\uBB34\uC791\uC73C\uBA74
\uB0B4\uC6A9\uC774\uC644\uC804\uD558\uAC8C\uC778\uC1C4\uB418\uC9C0\uC54A\uC744\uC218\uC788\uC2B5\uB2C8\uB2E4.
  -Widget-Date_Selector_Return_Type=\uB9AC\uD134\uAC12\uC720\uD615 -Utils-Switch_To_Template_Reportlet=\uD15C\uD50C\uB9BF\uB124\uD2B8\uC6CC\uD06C\uBB38\uC11C\uB85C\uC804\uD658 -satisfy=\uC870\uAC74\uCDA9\uC871 -FR-Designer_WidgetDisplyPosition=\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4\uD654\uBA74\uC704\uCE58 -FR-Base_Top=\uC704 -FR-Designer_Form-CheckBox=\uCCB4\uD06C\uBC15\uC2A4 -Reportlet-Parameter_Type=\uB9E4\uAC1C\uBCC0\uC218\uC804\uB2EC\uBC29\uC2DD -sending=\uBC1C\uC1A1\uC911... -FR-Designer-FRFont_Foreground=\uC0C9 -FR-Import-Export_SVG=SVG\uC11C\uC2DD -M_Edit-Clear_Contents=\uB0B4\uC6A9(C) -Session=\uC138\uC158 -Widget-Load_Type=\uB85C\uB529 -template_unsaved=\uD15C\uD50C\uB9BF\uC744\uC800\uC7A5\uD560\uC218\uC5C6\uC2B5\uB2C8\uB2E4. -check_communication=\uB124\uD2B8\uC6CC\uD06C\uD1B5\uC2E0\uC774\uC815\uC0C1\uC778\uC9C0\uB610\uB294\uC11C\uBC84\uAC00\uC815\uC0C1\uC801\uC73C\uB85C\uC2E4\uD589\uB418\uACE0\uC788\uB294\uC9C0\uD655\uC778\uD574\uC8FC\uC2ED\uC2DC\uC624. -List-Need_Head=\uB9AC\uC2A4\uD2B8\uD5E4\uB4DC\uAC00\uD544\uC694\uD569\uB2C8\uB2E4. -FR-Designer-Plugin_Has_Been_Installed=\uD50C\uB7EC\uADF8\uC778\uC774\uC124\uCE58\uB418\uC5C8\uC2B5\uB2C8\uB2E4.\uD50C\uB7EC\uADF8\uC778\uC744\uC5C5\uB370\uC774\uD2B8\uD558\uB824\uBA74\uD50C\uB7EC\uADF8\uC778\uC5C5\uB370\uC774\uD2B8\uB85C\uC804\uD658\uD574\uC8FC\uC2ED\uC2DC\uC624. -FR-Widget_Tree_And_Table=\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4\uD2B8\uB9AC\uC640\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4\uD45C -FR-Base_Help=\uB3C4\uC6C0\uB9D0 -FR-Designer-Plugin_Update_Successful=\uD50C\uB7EC\uADF8\uC778\uC5C5\uADF8\uB808\uC774\uB4DC\uC131\uACF5.\uC7AC\uBD80\uD305\uC11C\uBC84\uAC00\uC720\uD6A8\uD569\uB2C8\uB2E4. -August=8\uC6D4 -LOG-Is_Being_Openned=\uC5EC\uB294\uC911 -BackgroundTexture-Oak=\uC0C1\uBAA9 -Multi_nam_formula=\\ub370\uC774\uD130\uC138\uD2B8\uBA85\: \uB370\uC774\uD130\uC138\uD2B8\uC870\uAC74\: -TurnOn=\uC5F4\uAE30 -HJS-Send_Successfully=\uBC1C\uC1A1\uC131\uACF5 -Mon=1 -Inner_Parameter=\uB0B4\uC7A5\uB9E4\uAC1C\uBCC0\uC218 -Required=\uD544\uC218\uC785\uB825\uC0AC\uD56D -Summary=\uCDE8\uD569 -template_unopened=\uD15C\uD50C\uB9BF\uC744\uC5F4\uC218\uC5C6\uC2B5\uB2C8\uB2E4. -FR-Base_Bottom=\uC544\uB798 -DataFunction-Min=\uCD5C\uC18C\uAC12 -StyleFormat-Percent=\uBC31\uBD84\uC728 -FR-App-All_Custom=\uC0AC\uC6A9\uC790\uC815\uC758 -M_Insert-Data_Column=\uC0BD\uC785\uB370\uC774\uD130\uC5F4 -PLEASE=\uC694\uCCAD -Numbers=\uC218\uB7C9 -Release_Lock=\uBE44\uBC00\uBC88\uD638\uD574\uC81C -Background-Background_is_NULL=\uBC30\uACBD\uC5C6\uC74C -FR-Designer_Sytle-FRFont=\uAE00\uAF34 -Gradation=\uB2E8\uACC4 -The_current_list_is_empty=\uD604\uC7AC\uB9AC\uC2A4\uD2B8\uBE44\uC5B4\uC788\uC74C -Formula_Dictionary_Display_Examples=\\uc2e4\uC81C\uAC12\uBC94\uC704:\ -Schedule-Template_Parameter=\uD15C\uD50C\uB9BF\uB9E4\uAC1C\uBCC0\uC218 -JSShow=\uB3D9\uC801\uB514\uC2A4\uD50C\uB808\uC774 -Level_coordinates=\uACC4\uCE35\uBCF4\uC870\uC88C\uD45C -MainGraduationLine=\uC8FC\uB208\uAE08\uC120 -Hyperlink-Web_link=\uC6F9\uB9C1\uD06C -StyleAlignment-between_-90_and_90=-90\uC64090\uC0AC\uC774 -FormulaD-Custom_Function=\uC0AC\uC6A9\uC790\uC815\uC758\uD568\uC218 -FR-Designer_Integer=\uC815\uC218 -PageSetup-Finis_Start_Row=\uC911\uBCF5\uC885\uB8CC\uD589 -RWA-Remove_Field=\uD544\uB4DC\uC81C\uAC70 -Form-Desin_Width=\uB514\uC790\uC778\uB108\uBE44 -No-tableData=\uB3CC\uC544\uAC00\uAE30\uB370\uC774\uD130\uC138\uD2B8\uAC00\uC5C6\uC2B5\uB2C8\uB2E4. -Page_Total=\uCD1D -FR-Designer-Plugin_Connect_Server_Error=\uD50C\uB7EC\uADF8\uC778\uC2A4\uD1A0\uC5B4\uB97C\uC5F0\uACB0\uD560\uC218\uC5C6\uC2B5\uB2C8\uB2E4.\uC7A0\uC2DC\uD6C4\uB2E4\uC2DC\uC2DC\uB3C4\uD574\uC8FC\uC2ED\uC2DC\uC624. -Import-Excel_Source=Excel\uC18C\uC2A4\uD30C\uC77C -Utils-Left_to_Right_a=\uC67C\uCABD\uC5D0\uC11C\uC624\uB978\uCABD\uC73C\uB85C -ExpandD-Expand_Attribute=\uD655\uC7A5\uC18D\uC131 -Report-Write_Attributes=\uBB38\uC11C\uAE30\uC785\uC18D\uC131 -Utils-Current_Column=\uD604\uC7AC\uC5F4 -Need_Max_Value=\uD544\uC694\uCD5C\uB300\uAC12 -Report_Not_Exist=\uC120\uD0DD\uD55C\uBB38\uC11C\uAC00\uC874\uC7AC\uD558\uC9C0\uC54A\uC2B5\uB2C8\uB2E4\uFF01 -HF-Insert_Content=\uB0B4\uC6A9\uC0BD\uC785 -UpParent=\uC704\uBD80\uBAA8\uC140 -PageSetup-Page=\uC6F9\uD398\uC774\uC9C0 -Utils-Move_Up=\uC704\uB85C\uC774\uB3D9 -BackgroundTexture-PurpleMesh=\uBCF4\uB77C\uC0C9\uACA9\uC790\uBAA8\uC591 -Export-Word=Word\uC11C\uC2DD -ServerM-Widget_Manager=\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4\uAD00\uB9AC -FR-Designer-Basic_Activation_Key=\uC124\uACC4\uAE30\uC77C\uB828\uBC88\uD638\uFF1A -FR-App-Template_Report_Not_Exist=\uC120\uD0DD\uD55C\uBB38\uC11C\uAC00\uC874\uC7AC\uD558\uC9C0\uC54A\uC2B5\uB2C8\uB2E4.\! -Protected=\uBCF4\uD638 -Skip=\uC810\uD504 -FR-Designer_PageSetup-Vertically=\uC218\uC9C1\uAC00\uC6B4\uB370\uC815\uB82C -revert=\uD574\uC81C -PageSetup-Predefined=\uC0AC\uC804\uC815\uC758\uB41C -Border-Style-Radius=\uB465\uADFC\uBAA8\uC11C\uB9AC\uD14C\uB450\uB9AC -IntPart=\uC815\uC218\uBD80\uBD84 -ExpandD-Data_Column=\uB370\uC774\uD130\uC5F4 -Sort-Ascending=\uC624\uB984\uCC28\uC21C -FR-Designer-Widget_Style=\uC591\uC2DD -parameter_name_exist=\uD574\uB2F9\uB9E4\uAC1C\uBCC0\uC218\uC774\uB984\uC774\uC774\uBBF8\uC874\uC7AC\uD569\uB2C8\uB2E4 -FR-Designer_Layer-Build=\uCE35\uBCC4\uC0DD\uC131 -Please_Rename=\uB9AC\uB124\uC784\uD574\uC8FC\uC2ED\uC2DC\uC624. -Form-Editing_Listeners=\uC774\uBCA4\uD2B8\uD3B8\uC9D1 -RWA-Smart_Add_Fields=\uD544\uB4DC\uC2A4\uB9C8\uD2B8\uCD94\uAC00 -FR-Designer-Tree_Width=\uB108\uBE44 -Record=\uB808\uCF54\uB4DC -Poly-Report_Component=\uCDE8\uD569\uBB38\uC11C\uC5B4\uC148\uBE14\uB9AC -Options=\uC635\uC158 -NS-war-remote=\uC624\uB958\uCF54\uB4DC\:1117 \uC555\uCD95\uC124\uCE58\uB97C\uC9C0\uC6D0\uD558\uC9C0\uC54A\uC2B5\uB2C8\uB2E4. \uC6D0\uACA9\uB514\uC790\uC778 -Sche-Minute=\uBD84 -Three_Rows_Of_Three_Grid=3\uD589 3\uC5F4\uC758\uADF8\uB9AC\uB4DC -WorkSheet=\uC790\uC720\uBB38\uC11C -FR-Designer-Widget_Size=\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4\uD06C\uAE30 -BindColumn-Select=\uB9AC\uC2A4\uD2B8 -FR-Widget_Mobile_Terminal=\uBAA8\uBC14\uC77C\uB2E8\uB9D0 -FR-Background_Image_Titled=\uD0C0\uC77C -SetPrinterOffset=\uD504\uB9B0\uD130\uC635\uC14B -FR-Designer-Plugin_Installed=\uC124\uCE58\uB418\uC5C8\uC2B5\uB2C8\uB2E4. -FR-Designer-Hyperlink_Name=\uC774\uB984 -FR-Designer_Form-Button=\uD0A4 -Black=\uBE14\uB799 -FR-Designer-Widget-Style_Border_Color=\uD14C\uB450\uB9AC\uC0C9 -Set_Submit_Event=\uC81C\uCD9C\uC774\uBCA4\uD2B8\uC124\uC815 -PDF-Print_isPopup=\uC124\uC815\uBC15\uC2A4\uD31D\uC5C5\uC5EC\uBD80 -LayerPageReport_CountPerPage=\uD398\uC774\uC9C0\uBCC4 \uAE30\uB85D\uC218 -Display_Modes=\uBAA8\uB4DC\uBCF4\uC774\uAE30 -RowSpan=\uD589\uC2A4\uD32C -Datasource-Test_Connection=\uD14C\uC2A4\uD2B8\uB9C1\uD06C -Function-Function_Manager=\uD568\uC218\uAD00\uB9AC\uC790 -Host_Name=\uD638\uC2A4\uD2B8\uCEF4\uD4E8\uD130\uC774\uB984 -CellWrite-Show_As_HTML=HTML\uB85C\uB0B4\uC6A9\uBCF4\uC774\uAE30 -FR-Designer-Widget-Style_Shadow=\uC74C\uC601 -FR-Designer_Parameter_String=\uBB38\uC790\uC5F4 -Form-SupportTag=\uB808\uC774\uBE14\uD615\uC2DD\uBCF4\uC774\uAE30 -ReportD-Report_Write_Attributes=\uBB38\uC11C\uAE30\uC785\uC18D\uC131 -DataFunction-Count=\uAC1C\uC218 -Top_And_Thick_Bottom_Border_Line=\uC704\uD14C\uB450\uB9AC\uC120\uACFC\uAD75\uC740\uBC11\uD14C\uB450\uB9AC\uC120 -Client=\uD074\uB77C\uC774\uC5B8\uD2B8\uB2E8 -BindColumn-Result_Serial_Number_Start_From_1=\uBC88\uD638\uB2941\uBD80\uD130\uC2DC\uC791 -History=\uD788\uC2A4\uD1A0\uB9AC -Already_exists=\uC774\uBBF8\uC874\uC7AC\uD569\uB2C8\uB2E4. \uB2E4\uC2DC\uC785\uB825\uD574\uC8FC\uC2ED\uC2DC\uC624\uFF01 -Datasource-Original_Charset=\uCD08\uAE30\uCF54\uB529 -FR-Base_Left=\uC67C\uCABD -ReportServerP-Next=\uB2E4\uC74C\uD398\uC774\uC9C0 -BindColumn-Top_N=\uC55EN\uAC1C -Animation_Special=\uD2B9\uD6A8 -Widget-Chart_Widget_Config=\uCC28\uD2B8\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4 -FR-Designer-Plugin_Cannot_Update_Not_Install=\uD50C\uB7EC\uADF8\uC778\uC744\uC5C5\uB370\uC774\uD2B8\uD560\uC218\uC5C6\uC2B5\uB2C8\uB2E4.\uD574\uB2F9\uD50C\uB7EC\uADF8\uC778\uC774\uC124\uCE58\uB418\uC5C8\uB294\uC9C0\uAC80\uC0AC\uD574\uC8FC\uC2ED\uC2DC\uC624. -After_Changed_Some_Attributes_Are_Different=\uC804\uD658\uD6C4, \uBB38\uC11C\uC758\uC77C\uBD80\uC18D\uC131\uC774\uBCC0\uD560\uC218\uC788\uC2B5\uB2C8\uB2E4.\uACC4\uC18D\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C? -PieStyle=\uD30C\uC774 -HF-Are_you_sure_to_delete_it=\uC774\uC694\uC18C\uB97C\uC0AD\uC81C\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C? -Utils-Design-File_Open=\uC5F4\uAE30 -FR-Utils_Label=\uB808\uC774\uBE14 -Data-Label=\uB808\uC774\uBE14 -M_Insert-Text=\uC77C\uBC18\uD14D\uC2A4\uD2B8\uC0BD\uC785 -Form-View_Tree=\uBDF0\uD2B8\uB9AC -M_Insert-Chart=\uC0BD\uC785\uCC28\uD2B8 -HF-Even_Page=\uC9DD\uC218\uD398\uC774\uC9C0 -ReportServerP-Report_server_parameter=\uBB38\uC11C\uC11C\uBC84\uB9E4\uAC1C\uBCC0\uC218 -JavaScript-Form_Submit=\uD3FC\uC81C\uCD9C -Horizontal-Split_Layout=\uC218\uD3C9\uBD84\uD560\uB808\uC774\uC544\uC6C3 -BorderLayout-Center=\uC911\uAC04 -INFO-Reset_Webapp=\uC751\uC6A9\uC11C\uBC84\uC7AC\uC124\uCE58 -FR-Designer_Text=\uD14D\uC2A4\uD2B8 -IN_and_INOUT_type_not_as_cursor=IN\uACFC INOUT \uC720\uD615\uC740\uCEE4\uC11C\uB85C\uD560\uC218\uC5C6\uB2E4. -Main_Axis=\uC8FC\uC88C\uD45C\uCD95 -M_Edit-Cut=\uC798\uB77C\uB0B4\uAE30(T) -Utils-The_Name_has_been_existed=\uC774\uC774\uB984\uC740\uC774\uBBF8\uC874\uC7AC\uD569\uB2C8\uB2E4. -FR-Background_Image=\uC774\uBBF8\uC9C0 -Character=\uD14D\uC2A4\uD2B8 -Unit_Thousand=\uCC9C -Test=\uD14C\uC2A4\uD2B8 -Utils-Would_you_like_to_save=\uC800\uC7A5\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C? -HF-Header_and_Footer=\uBA38\uB9AC\uAE00\uACFC\uBC14\uB2E5\uAE00 -LIST_MODE=\uB9AC\uC2A4\uD2B8 -HF-Insert_Image=\uC774\uBBF8\uC9C0\uC0BD\uC785 -FR-Designer-Widget-Style_Standard=\uD45C\uC900 -FR-Designer_Form-List=\uB9AC\uC2A4\uD2B8 -BackgroundTexture-Denim=\uB2A5\uC9C1\uBB3C -Execute_Report_by_Layer_Engine=\uC9C1\uB82C\uC5D4\uC9C4\uC73C\uB85C\uBB38\uC11C\uC2E4\uD589 -M_Edit-Bring_Forward=\uC704\uCE35\uC73C\uB85C\uC774\uB3D9(F) -Choose_All=\uBAA8\uB450\uC120\uD0DD -Form-RadioGroup=\uB2E8\uC77C\uC120\uD0DD\uD0A4\uD328\uB4DC -FR-Base_Remove=\uC0AD\uC81C -FR-Remote_Connect2Server_Again=\uC5F0\uACB0\uC774\uB04A\uC5B4\uC84C\uC2B5\uB2C8\uB2E4.\uB2E4\uC2DC\uC11C\uBC84\uB97C\uC5F0\uACB0\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C? -Semicolon=\uC138\uBBF8\uCF5C\uB860 -StyleFormat-Category=\uCE74\uD14C\uACE0\uB9AC -Report_Template=\uBB38\uC11C\uD15C\uD50C\uB9BF -Utils-Beyond_the_right_side_of_Border=\uC624\uB978\uCABD\uC5EC\uBC31\uBC97\uC5B4\uB0A8 -BackgroundTexture-Papyrus=\uD30C\uD53C\uB8E8\uC2A4\uC885\uC774 -LayerPageReport_PageEngine=\uD398\uC774\uC9C0\uBCC4\uC5F0\uC0B0\uBD84\uD560\uC2E4\uD589\uBB38\uC11C\uC0AC\uC6A9 -Schedule-The_selected_file_must_be_end_with_filter=\uC120\uD0DD\uD55C\uD30C\uC77C\uC740.cpt \uB610\uB294 .class \uB610\uB294 .frm \uB85C\uB05D\uB0B4\uC57C\uD569\uB2C8\uB2E4. -Provide=\uC81C\uACF5 -FormulaD-Math_&_Trig=\uC218\uD559\uACFC\uC0BC\uAC01\uD568\uC218 -FR-Designer-StyleAlignment_Right=\uC624\uB978\uCABD\uC5D0\uB9DE\uCDA4 -Error_TableDataNameRepeat=\uC11C\uBC84\uB370\uC774\uD130\uC138\uD2B8\uC5D0\uC874\uC7AC\uD558\uACE0\uC788\uAC70\uB098\uC5EC\uB7EC\uAC1C\uB370\uC774\uD130\uC138\uD2B8\uC774\uB984\uC774\uC911\uBCF5\uB418\uC5C8\uC2B5\uB2C8\uB2E4. -Choose_None=\uBBF8\uC120\uD0DD -File-tree=\uD30C\uC77C\uD2B8\uB9AC -FRFont-bold=\uAD75\uAC8C -FR-Designer_Set_Submit_Condition=\uC81C\uCD9C\uC870\uAC74\uC124\uC815 -Form-Change_Widget_Name=\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4\uC774\uB984\uBCC0\uACBD -ReportColumns-Report_Columns=\uBB38\uC11C\uC140\uB098\uB204\uAE30 -Can_not_use_FormatBursh=\uC911\uBCF5\uC120\uD0DD\uB41C\uC601\uC5ED\uC5D0\uC11C\uC2DD\uC744\uC774\uC6A9\uD558\uC5EC\uC778\uC1C4\uD560\uC218\uC5C6\uC2B5\uB2C8\uB2E4.\! -CellElement-Property_Table=\uC140\uC18D\uC131\uD45C -Dictionary-Dynamic_SQL=\uB3D9\uC801 SQL -FR-Designer_Form-CheckBoxGroup=\uCCB4\uD06C\uBC15\uC2A4\uADF8\uB8F9 -DBCP_TIME_BETWEEN_EVICTIONRUNSMILLIS=\uC720\uD734\uB9C1\uD06C\uD68C\uC218\uAE30\uD734\uBA74\uC2DC\uAC04 -ReportD-Export_Hided_Column=\uC228\uAE34\uC5F4\uBCF4\uC774\uAE30 -Preference-Support_Undo=\uD574\uC81C\uC9C0\uC6D0 -FR-mobile_report_analysis=\uBCF4\uACE0\uC11C \uD574\uC11D -Month=\uC6D4 -Utils-Column_Width=\uC5F4\uB108\uBE44 -Collect-Use_Designer=\uC124\uACC4\uAE30\uC0AC\uC6A9 -Widget-User_Defined_Editor=\uC0AC\uC804\uC815\uC758\uB41C\uD3B8\uC9D1\uAE30\uB294\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4\uAD00\uB9AC\uBA54\uB274\uC5D0\uC11C\uB9CC\uC18D\uC131\uC744\uBCC0\uACBD\uD560\uC218\uC788\uC2B5\uB2C8\uB2E4. -Unit_Ten_Thousand=\uB9CC -Data_Setting=\uB370\uC774\uD130\uC124\uC815 -ECP_input_pwd=\uC554\uD638\uB97C\uC785\uB825\uD574\uC8FC\uC2ED\uC2DC\uC624\: -period=. -Note=\uBE44\uACE0 -Multiline=\uC5EC\uB7EC\uD589\uD3B8\uC9D1 -Datasource-Convert_Charset=\uCF54\uB529\uC804\uD658 -DashBoard-ConnectionList=\uB370\uC774\uD130\uB9C1\uD06C -Utils-Submit_Forcibly=\uC81C\uCD9C\uAC15\uD589 -Parent_Marked_Field=\uBD80\uBAA8\uD0DC\uADF8\uD544\uB4DC -Logout=\uB098\uAC00\uAE30 -FR-Designer_Show_Blank_Row=\uACF5\uBC31\uD589\uBCF4\uCDA9 -FR-Base_Format=\uC11C\uC2DD -FR-App-Export_png=PNG\uC11C\uC2DD -Delete_Column=\uC5F4\uC0AD\uC81C -SecondGraduationLine=\uBCF4\uC870\uB208\uAE08\uC120 -SpecifiedG-Groups=\uADF8\uB8F9 -CONTINUUM_MODE=\uC774\uC6C3\uD558\uB294\uC5F0\uC18D\uADF8\uB8F9 -Datasource-Connection_failed=\uB9C1\uD06C\uC2E4\uD328 -CategoryName=\uCE74\uD14C\uACE0\uB9AC\uC774\uB984 -DBCP_INITIAL_SIZE=\uCD08\uAE30\uD654\uB9C1\uD06C\uC218 -Colors=\uC0C9 -FR-Import-Export_CSV=CSV\uC11C\uC2DD(\uC27C\uD45C\uAD6C\uBD84) -FR-Designer-StyleAlignment_Left=\uC67C\uCABD\uC5D0\uB9DE\uCDA4 -BackgroundTexture-PaperBag=\uC885\uC774\uBC31 -RWA-BuildIn_SQL=\uB0B4\uC7A5SQL -SingleLayer=\uB2E8\uCE35 -Or-you=\uB610\uB294\uB2F9\uC2E0\uC774 -FR-Designer_Certificate_Path=\uC778\uC99D\uC11C\uACBD\uB85C -Utils-Last_Page=\uB9C8\uC9C0\uB9C9\uD398\uC774\uC9C0 -BarCodeD-Drawing_Text=\uBC14\uCF54\uB4DC\uD14D\uC2A4\uD2B8\uBCF4\uC774\uAE30 -Warning-Template_Do_Not_Exsit=\uD15C\uD50C\uB9BF\uC774\uC874\uC7AC\uD558\uC9C0\uC54A\uC2B5\uB2C8\uB2E4. -BindColumn-Group=\uADF8\uB8F9 -Export-SVG=SVG\uC11C\uC2DD -Plane3D=\uD3C9\uBA743D -SessionID=SessionID\uB294 \uD604\uC7AC\uC811\uADFC\uD15C\uD50C\uB9BF\uC758\uC138\uC158 ID\uB9E4\uAC1C\uBCC0\uC218. -FR-Designer_Height=\uB192\uC774 -HF-Odd_Page=\uD640\uC218\uD398\uC774\uC9C0 -About-All_Rights_Reserved=\uBAA8\uB4E0\uAD8C\uB9AC\uB97C\uB0A8\uAE41\uB2C8\uB2E4. -Utils-Current_Cell=\uD604\uC7AC\uADF8\uB9AC\uB4DC -Web_Preview_Message=\uD15C\uD50C\uB9BF\uD30C\uC77C\uC744\uD604\uC7AC\uC2E4\uD589\uD658\uACBD\uB514\uB809\uD130\uB9AC\uC5D0\uC800\uC7A5\uD574\uC8FC\uC2ED\uC2DC\uC624. -FR-Hyperlink_Chart_Float=\uCC28\uD2B8\uD558\uC774\uD37C\uB9C1\uD06C-\uC5F0\uB3D9\uC11C\uC2A4\uD39C\uC2A4\uC694\uC18C -Dic-Data_Query=\uB370\uC774\uD130\uCC3E\uC544\uBCF4\uAE30 -CellWrite-Print_Content=\uC778\uC1C4/\uBD88\uB7EC\uC624\uAE30 \uC140 \uB0B4\uC6A9 -Privilege-Selected_None_Of_Any_Items=\uC120\uD0DD\uD55C\uD56D\uC774\uC5C6\uC2B5\uB2C8\uB2E4. -FRFont-Size=\uD06C\uAE30 -Function-J2EE_server=J2EE\uC11C\uBC84 +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 -Build_Tree_Accord_Parent_Marked_Filed=\uC120\uD0DD\uD55C\uB370\uC774\uD130\uC138\uD2B8\uC758\uBD80\uBAA8\uD0DC\uADF8\uD544\uB4DC\uC5D0\uB530\uB77C\uD2B8\uB9AC\uC0DD\uC131 -Preference-Horizontal_Scroll_Bar_Visible=\uC218\uD3C9\uC2A4\uD06C\uB864\uBC14\uB97C\uBCFC\uC218\uC788\uC2B5\uB2C8\uB2E4. -Scope=\uBC94\uC704 -Save_All_Records_In_Memory=\uBAA8\uB4E0\uB808\uCF54\uB4DC\uAC00\uBA54\uBAA8\uB9AC\uC5D0\uC800\uC7A5\uB418\uC5C8\uC2B5\uB2C8\uB2E4. -FreezeWarning1=\uCD08\uAE30\uAC12>\uB9C8\uC9C0\uB9C9\uAC12 -FlowLayout=\uC720\uB3D9\uC2DD\uB808\uC774\uC544\uC6C3 -M_Report-Report_Footer=\uBB38\uC11C\uD398\uC774\uC9C0\uBC14\uB2E5\uAE00 -FR-Action_Add=\uCD94\uAC00 -BorderLayout-East=\uB3D9 -feedback_tip=400\uC790\uB97C\uB118\uC9C0\uC54A\uAC8C\uBB38\uC81C\uB97C\uC124\uBA85\uD574\uC8FC\uC2ED\uC2DC\uC624. -FS_Start_Date=\uC2DC\uC791\uB0A0\uC9DC -FR-ConditionB_Operator=\uC870\uC791\uBD80\uD638 -Printer-Alias=\uB2C9\uB124\uC784 -DS-Class_Name=\uD074\uB798\uC2A4\uB124\uC784 -FR-Designer-Plugin_Has_Been_Disabled=\uD50C\uB7EC\uADF8\uC778\uC0AC\uC6A9\uC774\uAE08\uC9C0\uB418\uC5C8\uC2B5\uB2C8\uB2E4.\uC124\uACC4\uAE30\uBC0F\uC11C\uBC84\uB97C\uC7AC\uBD80\uD305\uD558\uB824\uBA74\uC11C\uBC84\uB97C\uC218\uB3D9\uC7AC\uBD80\uD305\uD574\uC57C\uD569\uB2C8\uB2E4. -Sort-Original=\uC21C\uC11C\uC5C6\uC74C -Utils-Top_to_Bottom_a=\uC704\uC5D0\uC11C\uC544\uB798\uB85C -Parameter-String=\uBB38\uC790\uC5F4 -InnerRadis=\uC548\uC9C0\uB984\uD06C\uAE30 -Want_To_Cover_It=\uB36E\uC5B4\uC50C\uC6B0\uACA0\uC2B5\uB2C8\uAE4C? -Divided_stage=\uAD6C\uBD84\uB2E8\uACC4 -Seriously=\uC2EC\uAC01 -ReportServerP-PDF=PDF -Utils-Switch_To_Class_Reportlet=\uD504\uB85C\uADF8\uB7A8\uB124\uD2B8\uC6CC\uD06C\uBB38\uC11C\uB85C\uC804\uD658 -FR-Designer_Show_Blank_Column=\uACF5\uBC31\uC5F4\uBCF4\uCDA9 -M_Edit-Redo=\uB9AC\uC6CC\uD06C -Visibility=\uC2DC\uAC01\uC131 -Series_Use_Default=\uACC4\uC5F4\uAE30\uBCF8\uC0AC\uC6A9 -Has_Selected=\uC120\uD0DD\uB428 -BackgroundTexture-Walnut=\uD638\uB450 -FormulaD-Function_category=\uD568\uC218\uC720\uD615 -Interface=\uC778\uD130\uD398\uC774\uC2A4 -FR-Designer-Beyond_Bounds= -seconds=\uCD08 -Auto-Build=\uC790\uB3D9\uC0DD\uC131 -FR-Designer-Plugin_Install_Successful=\uD574\uB2F9\uD50C\uB7EC\uADF8\uC778\uC740\uC124\uACC4\uAE30\uBC0F\uC11C\uBC84\uB97C\uC7AC\uBD80\uD305\uD560\uB54C\uC0AC\uC6A9\uB418\uBA70,\uC11C\uBC84\uB294\uC218\uB3D9\uC7AC\uBD80\uD305\uD574\uC57C\uD569\uB2C8\uB2E4. -Template_Path=\uD15C\uD50C\uB9BF\uACBD\uB85C -FR-Designer-FRFont_Bold=\uAD75\uAC8C -Poly_Name=\uCDE8\uD569\uBE14\uB7ED\uC774\uB984 -WorkBook=\uC6CC\uD06C\uBD81 -Hyperlink-Self_Window=\uD604\uC7AC\uC708\uB3C4\uC6B0 -FR-Designer-Widget-Style_Title=\uC81C\uBAA9 -FR-Designer-FRFont_Size=\uD06C\uAE30 -M_File-Export-SVG=SVG\uC11C\uC2DD -Capacity=\uC6A9\uB7C9 -Rose_Red=\uB85C\uC988\uBE68\uAC15 -StyleAlignment-The_value_of_rotation_must_between_-90_and_90_degrees=\uD68C\uC804\uAC12\uC740-90\uB3C4\uC5D0\uC11C 90\uB3C4\uAE4C\uC9C0 -HF-Move_Left=\uC67C\uCABD\uC73C\uB85C\uC774\uB3D9 -Cell_Group=\uC140\uADF8\uB8F9 -Week=\uC8FC -PageSetup-Orientation=\uBC29\uD5A5 -M-Open_Recent=\uCD5C\uADFC\uC5F4\uC5B4\uBCF8 -NNormal=\uC815\uC0C1 -Integer=\uC815\uC218 -Select_The_Source_To_Save=\uC800\uC7A5\uD558\uB824\uB294\uD56D\uBAA9\uC120\uD0DD -Transition=\uBD84\uAE30 -FR-Designer_Get_Lock=\uC554\uD638\uD654 -one_record_exists_in_many_groups=\uB808\uCF54\uB4DC\uB294\uC5EC\uB7EC\uAC1C\uADF8\uB8F9\uC5D0\uC874\uC7AC\uD560\uC218\uC788\uC2B5\uB2C8\uB2E4. -FR-Designer_Cover_None=\uBAA8\uB450\uB36E\uC5B4\uC50C\uC6B0\uC9C0\uC54A\uAE30 -DeciPart=\uC18C\uC218\uBD80\uBD84 -ExpandD-Up_Father_Cell=\uC704\uBD80\uBAA8\uC140 -Deep=\uAE4A\uC774 -FRFont-Shadow=\uC74C\uC601 -Reportlet=\uB124\uD2B8\uC6CC\uD06C\uBB38\uC11C -Calendar=\uB2EC\uB825 -DateFormat-Custom_Warning=\uBE44\uACE0\uFF1A\uC0AC\uC6A9\uC790\uC815\uC758\uB0A0\uC9DC\uC11C\uC2DD\uC740\uC11C\uC2DD\uAC80\uC0AC\uB97C\uC9C0\uC6D0\uD558\uC9C0\uC54A\uC2B5\uB2C8\uB2E4. -Unit_MM=\uBC00\uB9AC\uBBF8\uD130 -Server-Start=\uC2E4\uD589 -CellPage-Can_Break_On_Paginate=\uD398\uC774\uC9C0\uB098\uB204\uAE30\uC2DC\uB098\uB20C\uC218\uC788\uC74C -Build_Tree_Accord_Marked_Filed_Length=\uC120\uD0DD\uD55C\uB370\uC774\uD130\uC138\uD2B8\uC758\uD0DC\uADF8\uD544\uB4DC\uAE38\uC774\uC5D0\uB530\uB77C\uD2B8\uB9AC\uC0DD\uC131 -ComboCheckBox-Start_Symbol=\uC2DC\uC791\uBD80\uD638 -Real=\uC2E4\uC81C -RWA-Batch_Modify_Cells=\uB300\uB7C9\uC218\uC815\uC140 -FR-Designer_Build-Way=\uC0DD\uC131\uBC29\uC2DD -Read=\uC77D\uAE30 -StyleAlignment-Degrees=\uB3C4\uC218 -M_Format_A-Border=\uD14C\uB450\uB9AC(B) -Utils-Delete_Record=\uB808\uCF54\uB4DC\uC0AD\uC81C -Reload=\uC624\uBC84\uB85C\uB529 -Image-Select_Picture=\uC774\uBBF8\uC9C0\uC120\uD0DD -RWA-Submit=\uC81C\uCD9C -the_template=\uD574\uB2F9\uD15C\uD50C\uB9BF -FR-Designer_Component_Scale=\uC5B4\uC148\uBE14\uB9AC\uCD95\uC18C -FRFont-italic=\uAE30\uC6B8\uC784\uAF34 -Year=\uB144 -HF-Move_Right=\uC624\uB978\uCABD\uC73C\uB85C\uC774\uB3D9 -Data-Check=\uB370\uC774\uD130\uBAA8\uB2C8\uD130\uB9C1 -Unknown=\uC54C\uC218\uC5C6\uC74C -Submit_Style=\uC81C\uCD9C\uBC29\uC2DD -Left_Border_Line=\uC67C\uCABD\uD14C\uB450\uB9AC\uC120 -Brown=\uAC08\uC0C9 -Select_A_Tree_DataSource_To_Build=\uD2B8\uB9AC\uB370\uC774\uD130\uC138\uD2B8\uB97C\uC120\uD0DD\uD558\uC5EC\uC0DD\uC131\uD558\uC2ED\uC2DC\uC624. -Overlapping=\uC911\uCCA9\uD0C0\uC785 -DS-Class_TableData=\uD504\uB85C\uADF8\uB7A8\uB370\uC774\uD130\uC138\uD2B8 -FR-Designer-Plugin_Illegal_Plugin_Zip_Cannot_Be_Install=\uC2DD\uBCC4\uD560\uC218\uC5C6\uB294\uD50C\uB7EC\uADF8\uC778\uC774\uBBC0\uB85C\uC124\uCE58\uD560\uC218\uC5C6\uC2B5\uB2C8\uB2E4. -DisplayNothingBeforeQuery=\uCC3E\uC544\uBCF4\uAE30\uD074\uB9AD\uC804\uBB38\uC11C\uB0B4\uC6A9\uBCF4\uC774\uC9C0\uC54A\uAE30 -Y_Axis=Y\uCD95 -FormulaD-Most_Recently_Used=\uC0C1\uC6A9\uD568\uC218 -FormulaD-Input_formula_in_the_text_area_below=\uD558\uB2E8\uC758\uD14D\uC2A4\uD2B8\uD3B8\uC9D1\uBC15\uC2A4\uC5D0\uC218\uC2DD\uC744\uC785\uB825\uD558\uC138\uC694. -Build-Way=\uC0DD\uC131\uBC29\uC2DD -M_Edit-Undo=\uD574\uC81C -Line-Style=\uC120\uD615 -Datasource-Other_Attributes=\uAE30\uD0C0\uC18D\uC131 -M_Server-Global_Parameters=\uC804\uC5ED\uB9E4\uAC1C\uBCC0\uC218 -Suffix=\uD655\uC7A5\uC790 -Image-Image_Files=\uC774\uBBF8\uC9C0\uD30C\uC77C -EditRC-Entire_row=\uBAA8\uB4E0\uD589(R) -HF-First_Page=\uBA54\uC778\uD398\uC774\uC9C0 -BackgroundTexture-Granite=\uD654\uAC15\uC554 -DataList=\uB370\uC774\uD130\uB9C1\uD06C -Recursion=\uADC0\uB0A9 -BarStyle=\uBC14\uD0C0\uC785 -FR-Designer-Min_Width= -Utils-Report-Env_Directory=\uBB38\uC11C\uC791\uC5C5\uB514\uB809\uD130\uB9AC -D-ChartArea=\uCC28\uD2B8\uC601\uC5ED -Only=\uB2E4\uB9CC -FR-Base_No=\uC544\uB2C8\uC624 -SpecifiedG-Put_all_others_together=\uAE30\uD0C0\uBAA8\uB4E0\uAC83\uBCD1\uD569 -HF-NewLine_Des=\uC0C1\uB2E8\uC758\uC774\uB3D9\uD0A4\uC640\uC0AD\uC81C\uD0A4\uB85C\uD589\uBC14\uAFB8\uAE30\uAE30\uD638\uB97C\uC870\uC791\uD560\uC218\uC788\uC2B5\uB2C8\uB2E4. -WLayout-Border-ThreeContainer=\uBD81\u3001\uC11C\uBC0F\uC911\uAC04\uBE14\uB85D\uC744\uAC16\uACE0\uC788\uB294\uACBD\uACC4\uC120\uB808\uC774\uC544\uC6C3\uCEE8\uD14C\uC774\uB108\uC911\uBD81\uCABD\uBE14\uB7ED\uC740\uD544\uC694\uC5D0\uB530\uB77C\uB192\uC774\uB97C\uC870\uC815\uD560\uC218\uC788\uC73C\uBA70\uC11C\uCABD\uBE14\uB7ED\uC740\uD544\uC694\uC5D0\uB530\uB77C\uB108\uBE44\uB97C\uC870\uC815\uD560\uC218\uC788\uC2B5\uB2C8\uB2E4. -Parameter_Name=\uB9E4\uAC1C\uBCC0\uC218\uC774\uB984 -FR-Base_Table=\uD45C -Des-Remove_WorkSheet=\uC0AD\uC81C\uD558\uB824\uB294\uD45C\uC5D0\uB370\uC774\uD130\uAC00\uC874\uC7AC\uD569\uB2C8\uB2E4.\uC601\uAD6C\uC0AD\uC81C\uD558\uB824\uBA74'\uD655\uC778'\uD0A4\uB97C\uB20C\uB7EC\uC8FC\uC138\uC694. -Rotation=\uD68C\uC804 -Undefined=\uC815\uC758\uB418\uC9C0\uC54A\uC74C -Support-Auto_Complete_Shortcut=\uC790\uB3D9\uBCF4\uC644\uB2E8\uCD95\uD0A4 -Set_Column_Title_End=\uC911\uBCF5\uC885\uB8CC\uC5F4\uC124\uC815 -Submit_Url=\uC8FC\uC18C\uC81C\uCD9C -ReportServerP-Are_you_sure_to_delete_the_selected_printer=\uC120\uD0DD\uD55C\uD504\uB9B0\uD130\uB97C\uC0AD\uC81C\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C? -long_data_can_not_show_fully=\uAE34\uB370\uC774\uD130\uB294\uBAA8\uB450\uBCF4\uC774\uC9C0\uC54A\uC2B5\uB2C8\uB2E4. -Utils-Beyond_the_bottom_side_of_Border=\uC544\uB798\uACBD\uACC4\uC120\uBC97\uC5B4\uB0A8 -FR-Import-Export_PDF=PDF\uC11C\uC2DD -Form-CheckBoxGroup=\uCCB4\uD06C\uBC15\uC2A4\uADF8\uB8F9 -Click-Me=\uD074\uB9AD\uB9CC\uD574\uB3C4\uC11C\uD504\uB77C\uC774\uC988\uD55C\uC990\uAC70\uC6B4\uC77C\uC774\uC0DD\uAE41\uB2C8\uB2E4\uFF01 -Hyperlink-Self=\uAE30\uC874\uC6F9\uC5D0\uC11C\uB9C1\uD06C\uC5F4\uAE30(S) -Tree-Select_Leaf_Only_Tips=(\uC774\uD56D\uBAA9\uC5D0\uCCB4\uD06C\uD558\uC9C0\uC54A\uC73C\uBA74\uB9AC\uD134\uAC12\uC740\uC0AC\uC6A9\uC790\uAC00\uCCB4\uD06C\uD55C\uD604\uC7AC\uB178\uB4DC\uB9CC\uD574\uB2F9\uB418\uBA70\uC11C\uBE0C\uB178\uB4DC\uB294\uD3EC\uD568\uB418\uC9C0\uC54A\uC74C\uFF09 -StyleAlignment-Text_Rotation=\uD14D\uC2A4\uD2B8\uBC29\uD5A5 -Format-Error=\uC785\uB825\uD55C\uAC12\uC11C\uC2DD\uC774\uC815\uD655\uD558\uC9C0\uC54A\uC2B5\uB2C8\uB2E4. -Server-Stop=\uC815\uC9C0 -Preference-Setting_Grid=\uACA9\uC790\uBAA8\uC591\uC124\uC815 -ReportServerP-Add_Printer=\uD504\uB9B0\uD130\uCD94\uAC00 -FR-Designer-Plugin_Active=\uC0AC\uC6A9\uC2DC\uC791 -Utils-File_name=\uD30C\uC77C\uBA85 -NOT_NULL_Des=\uBE48\uCE78\uC73C\uB85C\uB458\uC218\uC5C6\uC2B5\uB2C8\uB2E4. -Right_Border_Line=\uC624\uB978\uCABD\uD14C\uB450\uB9AC\uC120 -EditRC-Entire_column=\uBAA8\uB4E0\uC5F4(C) -PageSetup-Top_to_bottom=\uC5F4\uBA3C\uC800\uD589\uB098\uC911 -Click-Get_Default_URL=\uBCF8\uD0A4\uB97C\uD074\uB9AD\uD558\uC5EC\uAE30\uBCF8URL\uC744\uC5BB\uC2B5\uB2C8\uB2E4. -StyleAlignment-Wrap_Text=\uC790\uB3D9\uD589\uBC14\uAFB8\uAE30 -Remove_All_Button=\uBAA8\uB4E0\uD0A4\uD074\uB9AC\uC5B4 -FR-Designer_Component_Interval=\uC5B4\uC148\uBE14\uB9AC\uAC04\uACA9 -ReportColumns-Columns_vertically=\uC5F4\uC140\uB098\uB204\uAE30 -ReportGUI-Print_Background=\uC778\uC1C4/\uB0B4\uBCF4\uB0B4\uAE30\uBB38\uC11C\uBC30\uACBD -Export-CSV=CSV\uC11C\uC2DD(\uC27C\uD45C\uAD6C\uBD84) -M_Edit-Paste=\uBD99\uC5EC\uB123\uAE30(P) -FR-Designer-Basic_Restart_Designer=\uC7AC\uBD80\uD305\uC124\uACC4\uAE30 -ReportServerP-PDF2-INFO=LINUX/UNIX\uC5D0\uC11C\uC911\uBB38\uD3F0\uD2B8\uB97C\uC124\uCE58\uD558\uC9C0\uC54A\uC558\uC744\uB54C\uB9CC\uC0AC\uC6A9 -FormulaD-Check_Valid=\uC801\uD569\uC131\uAC80\uC0AC -server_disconnected=\uC5F0\uACB0\uC774\uB04A\uC5B4\uC84C\uC2B5\uB2C8\uB2E4. -ParameterD-Parameter_name_cannot_be_null=\uB9E4\uAC1C\uBCC0\uC218\uC758\uC774\uB984\uC740\uBE44\uC6CC\uB458\uC218\uC5C6\uC2B5\uB2C8\uB2E4. -FR-Designer-Plugin_Version_Is_Lower_Than_Current=\uC5C5\uADF8\uB808\uC774\uB4DC\uD329\uC758\uD50C\uB7EC\uADF8\uC778\uBC84\uC804\uC774\uD604\uC7AC\uC758\uAC83\uBCF4\uB2E4\uB192\uC9C0\uC54A\uC2B5\uB2C8\uB2E4. -RWA-NotChange_Unmodified=\uC218\uC815\uD558\uC9C0\uC54A\uC73C\uBA74\uC5C5\uB370\uC774\uD2B8\uD558\uC9C0\uC54A\uC2B5\uB2C8\uB2E4. -User_Information=\uC0AC\uC6A9\uC790\uC815\uBCF4 -Custom_styles_lost=\uC0AC\uC6A9\uC790\uC815\uC758\uC591\uC2DD\uC774\uC5C6\uC2B5\uB2C8\uB2E4. -PageSetup-Margin=\uD398\uC774\uC9C0\uC5EC\uBC31 -M-New_FormBook=\uC0C8\uD3FC -Widget-TreeNode=\uD2B8\uB9AC\uB178\uB4DC\uD0A4 -Form-Url=\uC8FC\uC18C -Utils-Beyond_the_left_side_of_Border=\uC67C\uCABD\uC5EC\uBC31\uBC97\uC5B4\uB0A8 -Float_Element_Name=\uD638\uBC84\uC694\uC18C\uBA85\uCE6D -Purple=\uD37C\uD50C -DashBoard-Potence=\uAD8C\uD55C -M-Close_Template=\uB2EB\uAE30\uD15C\uD50C\uB9BF(C) -paper=\uC885\uC774 -Not_Exsit=\uBB38\uC11C\uAC00\uC874\uC7AC\uD558\uC9C0\uC54A\uC2B5\uB2C8\uB2E4. -Utils-Insert_Row=\uD589\uC0BD\uC785 -Utils-Delete_Row=\uD589\uC0AD\uC81C -not_support_authority_edit=\uD574\uB2F9\uC694\uC18C\uB294\uAD8C\uD55C\uCEE8\uD2B8\uB864\uC744\uC9C0\uC6D0\uD558\uC9C0\uC54A\uC2B5\uB2C8\uB2E4. -Formula_Tips=\uC218\uC2DD\uC740"\\ub97c\uB123\uC5B4\uC57C\uD569\uB2C8\uB2E4. -FR-Action_Copy=\uBCF5\uC0AC -Compile_Success=\uCEF4\uD30C\uC77C\uC131\uACF5 -BackgroundTexture-RecycledPaper=\uC7AC\uC0DD\uC6A9\uC9C0 -StyleAlignment-Single_Line=\uD55C\uC904\uBCF4\uC774\uAE30 -Utils-Move_Down=\uC544\uB798\uB85C\uC774\uB3D9 -Please_Set_Repeat_First=\uC911\uBCF5\uC81C\uBAA9\uD589\uACFC\uC5F4\uC744\uC6B0\uC120\uC120\uD0DD\uD574\uC8FC\uC2ED\uC2DC\uC624. -Writer-ShortCuts_Setting=\uB2E8\uCD95\uD0A4\uAE30\uC785\uC124\uC815 -Verify-Data_Verify=\uB370\uC774\uD130\uAC80\uC0AC -FR-mobile_analysis_style=\uD574\uC11D \uBC29\uBC95 -Confirm-Delete-File=\uC120\uD0DD\uD55C\uD30C\uC77C\uC744\uC0AD\uC81C\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C\uFF1F -PageSetup-Header=\uD398\uC774\uC9C0\uBA38\uB9AC\uAE00 -JavaScrit-Asynch=\uBE44\uB3D9\uAE30 -ReportServerP-Toolbar=\uD234\uBC14 -Utils-Top_to_Bottom=\uC138\uB85C -Platform=\uD50C\uB7AB\uD3FC -FR-Designer-FRFont_Underline=\uBC11\uC904 -Show_in_Containing_Folder=\uD574\uB2F9\uD3F4\uB354\uC5F4\uAE30 -BackgroundTexture-WaterDroplets=\uBB3C\uBC29\uC6B8 -FR-Designer-Dependence_Install_Failed=install failed -Layout-Padding=\uC548\uCABD\uC5EC\uBC31 -roles_already_authority_edited=\uC5ED\uD560\uC774\uAD6C\uC131\uB418\uC5C8\uC2B5\uB2C8\uB2E4. -WidgetDisplyPosition=\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4\uD654\uBA74\uC704\uCE58 -SpecifiedG-Force_Group=\uAC15\uC81C\uADF8\uB8F9\uD551 -FormulaD-Formula_Definition=\uC218\uC2DD\uC815\uC758 -I-xyScatterStyle_Marker=\uC0B0\uC810\uADF8\uB798\uD504 -Hour=\uC2DC\uAC04 -ColorMatch=\uC0C9\uBC30\uD569 -M_Edit-Order=\uACB9\uCE68\uC21C\uC11C(O) -BackgroundTexture-Bouquet=\uAF43\uB2E4\uBC1C -Verify-Error_Information=\uC624\uB958\uC815\uBCF4\uAC80\uC0AC -LayerData=\uB85C\uC6B0 \uB808\uBCA8 \uB370\uC774\uD130 -Rename=\uB9AC\uB124\uC784 -Widget-Load_By_Async=\uBE44\uB3D9\uAE30\uB85C\uB529 -Shape=\uADF8\uB798\uD504 -BindColumn-This_Condition_has_been_existed=\uC774\uC870\uAC74\uC740\uC774\uBBF8\uC874\uC7AC\uD569\uB2C8\uB2E4. -NS-exception_readError=\uC624\uB958\uCF54\uB4DC\:1305 \uD15C\uD50C\uB9BF\uD30C\uC77C\uD574\uC11D\uC624\uB958 -Set_Column_Title_Start=\uC911\uBCF5\uC81C\uBAA9\uC5F4\uC124\uC815 -Fri=5 -M_Report-Report_Parameter=\uD15C\uD50C\uB9BF\uB9E4\uAC1C\uBCC0\uC218 -REPORTLETS=\uC5EC\uB7EC\uC7A5\uD15C\uD50C\uB9BF\uC758\uACBD\uB85C\uC758\uB9E4\uAC1C\uBCC0\uC218\uC811\uADFC -WLayout-Card-ToolTip=\uCE74\uB4DC\uC2DD\uB808\uC774\uC544\uC6C3\uC740\uD574\uB2F9\uB808\uC774\uC544\uC6C3\uCEE8\uD14C\uC774\uB108\uC5D0\uC11C\uC5EC\uB7EC\uAC1C\uAE30\uD0C0\uC5B4\uC148\uBE14\uB9AC\uB97C\uCD94\uAC00\uD560\uC218\uC788\uC2B5\uB2C8\uB2E4. -M-Popup_ChartType=\uCC28\uD2B8\uC720\uD615 -Please-Wait=\uC7A0\uC2DC\uB9CC\uAE30\uB2E4\uB824\uC8FC\uC2ED\uC2DC\uC624 -FR-Designer-Form-ToolBar_Widget=\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4 -Widget-Array=\uBC30\uC5F4 -FieldBinding=\uBC14\uC778\uB529\uD544\uB4DC -Top_Bottom_Border_Line=\uC0C1\uD558\uD14C\uB450\uB9AC\uC120 -M-Others=\uAE30\uD0C0... -Hyperlink-Link_Opened_in=\uB9C1\uD06C\uC5F4\uB9AC\uB294\uACF3: -FR-Utils_WorkBook=\uC6CC\uD06C\uBD81 -M_Insert-Float=\uD638\uBC84\uC694\uC18C -Out_Thick_Border_Line=\uAD75\uC740\uBC14\uAE65\uCABD\uD14C\uB450\uB9AC\uC120 -FR-App-File_Lookup_range=\uBC94\uC704\uAC80\uC0C9 -ReportColumns-Columns_to=\uC140\uB098\uB204\uAE30 -Transparent=\uD22C\uBA85 -Parameter-Integer=\uC804\uCCB4\uD0C0\uC785 -PDF-Print_Setting=PDF\uC778\uC1C4\uC124\uC815 -Server-Embedded_Server=\uB0B4\uC7A5\uB41C\uC11C\uBC84 -M_Server-Server_Config_Manager=\uC11C\uBC84\uAD6C\uC131 -FR-Utils-Would_you_like_to_cover_the_current_file=\uD604\uC7AC\uD30C\uC77C\uC744\uB36E\uACA0\uC2B5\uB2C8\uAE4C? -CellWrite-InsertRow_COPY=\uC6D0\uB798\uAC12 -Edit_String_To_Formula=\uBB38\uC790\uC5F4\uC744\uC218\uC2DD\uC73C\uB85C\uD3B8\uC9D1\uD558\uACA0\uC2B5\uB2C8\uAE4C? -Edit-Column_Count=\uC5F4\uC218 -Father=\uC544\uBC84\uC9C0 -ReportColumns-Columns_after=\uCD08\uACFC -FR-Designer_Undo=\uD574\uC81C -DBCP_MIN_IDLE=\uCD5C\uC18C\uC720\uD734\uB9C1\uD06C\uC218 -M-Data_Analysis_Settings=\uB370\uC774\uD130\uBD84\uC11D\uC124\uC815 -M-Form_Preview=\uD3FC\uBBF8\uB9AC\uBCF4\uAE30 -Form-Basic_Properties=\uAE30\uBCF8\uC18D\uC131 -quote=\uC778\uC6A9 -Thu=4 -Collect-Collect_User_Information=\uC0AC\uC6A9\uC790\uC815\uBCF4\uC218\uC9D1 -Layer-Build=\uCE35\uBCC4\uC0DD\uC131 -FR-Designer-FRFont_Line_Style=\uC120\uD615 -BackgroundTexture-BrownMarble=\uAC08\uC0C9\uB300\uB9AC\uC11D -PageSetup-Page_Setup=\uC6F9\uD398\uC774\uC9C0\uC124\uC815 -Form-Semicolon=\uC138\uBBF8\uCF5C\uB860 -ECP_re_input=\uBE44\uBC00\uBC88\uD638\uC785\uB825\uC624\uB958.\uB2E4\uC2DC\uC785\uB825\uD574\uC8FC\uC2ED\uC2DC\uC624. -ExpandD-Sort_After_Expand=\uD655\uC7A5\uD6C4 -FR-Designer-Dependence_Install_Succeed=install succeed -Env-Configure_Workspace=\uAD6C\uC131\uC791\uC5C5\uB514\uB809\uD130\uB9AC -feedback_info=\uADC0\uC911\uD55C\uC758\uACAC\uACFC\uC81C\uC548\uC5D0\uAC10\uC0AC\uB4DC\uB9BD\uB2C8\uB2E4.\uC815\uBCF4\uB97C\uCD5C\uB300\uD55C\uC0C1\uC138\uD788\uC791\uC131\uD574\uC8FC\uC2DC\uBA74\uC5F0\uB77D\uB4DC\uB9AC\uACA0\uC2B5\uB2C8\uB2E4. -Ratio=\uBE44\uC728 -DBCP_TEST_ON_BORROW=\uB9C1\uD06C\uD68D\uB4DD\uC804\uAC80\uC0AC\uC9C4\uD589 -FR-Designer_layerIndex= -WEB-Write_Setting=\uC6F9\uD398\uC774\uC9C0\uC124\uC815\uAE30\uC785 -M-New_WorkBook=\uC0C8\uC6CC\uD06C\uBD81 -FR-Designer-Plugin_Has_Been_Actived=\uD50C\uB7EC\uADF8\uC778\uC774\uAD6C\uB3D9\uB418\uC5C8\uC2B5\uB2C8\uB2E4.\uC124\uACC4\uAE30\uBC0F\uC11C\uBC84\uB97C\uC7AC\uBD80\uD305\uD558\uB824\uBA74\uC11C\uBC84\uB97C\uC218\uB3D9\uC7AC\uBD80\uD305\uD574\uC57C\uD569\uB2C8\uB2E4. -Datasource-Maximum_Number_of_Preview_Rows=\uCD5C\uB300\uBBF8\uB9AC\uBCF4\uAE30\uD589\uC218 -ExpandD-Cell_Expand_Attributes=\uD655\uC7A5\uC18D\uC131 -Select_the_repeated_row_and_column=\uC911\uBCF5\uD574\uC57C\uD560\uD589\uACFC\uC5F4\uC120\uD0DD -FormulaD-Date_&_Time=\uB0A0\uC9DC\uC640\uC2DC\uAC04\uD568\uC218 -Max-Mem-Row-Count=\uB808\uCF54\uB4DC\uC218\uAC00~\uC774\uC0C1\uC77C\uB54C\uB514\uC2A4\uD06C\uB85C\uCE90\uC2DC -BorderLayout-South=\uB0A8 -Export-Text=\uD14D\uC2A4\uD2B8\uD30C\uC77C(\uD0ED\uAE30\uD638\uB85C\uAD6C\uBD84) -JavaScript-Synch=\uB3D9\uAE30\uD654 -FR-App-All_Warning=\uACBD\uACE0 -M_Edit-Send_Backward=\uC544\uB798\uB85C\uC774\uB3D9\u4E00\uACC4\uCE35(B) -Form-Layout=\uB808\uC774\uC544\uC6C3 -FR-Designer-Plugin_Shop_Need_Update=\uC704\uC82F \uC5EC\uBD80\uB97C \uC5C5\uB370\uC774\uD2B8, \uC0C8 \uBC84\uC804\uC744 \uC800\uC7A5? -FR-Designer_WorkBook=\uC6CC\uD06C\uBD81 -UpBarBorderStyleAndColor=\uC5C5\uBC14\uC591\uC2DD -GridLayout=\uADF8\uB9AC\uB4DC\uB808\uC774\uC544\uC6C3 -Utils-Default_Value=\uAE30\uBCF8\uAC12 -Widget-Comb_Widget_Config=\uADF8\uB8F9\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4 -Import-Excel2007_Source=Excel2007\uC18C\uC2A4\uD30C\uC77C -Y-Coordinate=\uC138\uB85C\uC88C\uD45C -FR-Base_SimSun_Not_Found=\uC1A1\uCCB4\uB97C\uCC3E\uC744\uC218\uC5C6\uC2B5\uB2C8\uB2E4.\uD604\uC7AC\uC2DC\uC2A4\uD15C\uC0C1\uC758\uAE30\uBCF8\uC5B8\uC5B4\uB97C\uC124\uACC4\uAE30\uAE00\uAF34\uB85C\uC120\uD0DD\uD574\uC8FC\uC2ED\uC2DC\uC624. -FR-Designer_Seriously=\uC2EC\uAC01 -Upload=\uC5C5\uB85C\uB4DC -Form-Widget_Property_Table=\uC18D\uC131\uD45C -Des-Merger_Cell=\uC120\uD0DD\uC601\uC5ED\uC740\uC5EC\uB7EC\uB370\uC774\uD130\uB97C\uD3EC\uD568\uD558\uACE0\uC788\uC73C\uBA70,\uC140\uBCD1\uD569\uD6C4\uD3B8\uC9D1\uD55C\uBAA8\uB4E0\uC140\uC911\uAC00\uC7A5\uC67C\uCABD\uC0C1\uB2E8\uBAA8\uC11C\uB9AC\uC758\uAC12\uB9CC\uB0A8\uC2B5\uB2C8\uB2E4. -FR-Designer-Basic_Copy_Build_NO=\uC0DD\uC131\uBC84\uC804\uBC88\uD638\uB97C\uB354\uBE14\uD074\uB9AD\uD558\uBA74\uD074\uB9BD\uBCF4\uB4DC\uC5D0\uBCF5\uC0AC\uB429\uB2C8\uB2E4. -FR-Base_TurnOn=\uC5F4\uAE30 -FR-Base_Rows=\uD589 -Form-Remove_Repeat=\uC911\uBCF5\uD56D\uBAA9\uC0AD\uC81C -Yes=\uC608 -Datasource-JNDI_Name=JNDI\uC758\uC774\uB984 -Utils-Delete_Column=\uC5F4\uC0AD\uC81C -HF-Delete_it=\uC0AD\uC81C -JavaScript-Dynamic_Parameters=\uB3D9\uC801\uD30C\uB77C\uBBF8\uD130 -px=\uD654\uC18C -FR-App-Report_Template=\uBB38\uC11C\uD15C\uD50C\uB9BF -Verify-Message=\uC624\uB958\uC815\uBCF4 -Plan=\uACC4\uD68D -Vertical-Split_Layout=\uC218\uC9C1\uBD84\uD560\uB808\uC774\uC544\uC6C3 -ParameterD-Delay_Playing=\uCC3E\uC544\uBCF4\uAE30\uD074\uB9AD\uC804\uBB38\uC11C\uB0B4\uC6A9\uBCF4\uC774\uC9C0\uC54A\uAE30 -TurnOff=\uB2EB\uAE30 -FR-Please_Rename=\uB9AC\uB124\uC784\uD574\uC8FC\uC2ED\uC2DC\uC624. -Select_Data_Set=\uB370\uC774\uD130\uC138\uD2B8\uC120\uD0DD -Name_has_Colon=\uC774\uB984\: -ReportColumns-Columns_horizontally=\uD589\uC140\uB098\uB204\uAE30 -FR-Base_Yes=\uC608 -ReportColumns-Repeat_Row=\uD589\uBCF5\uC0AC\uC21C\uC11C -Print_Setting=\uC778\uC1C4\uC124\uC815 -Registration-User_Name=\uC0AC\uC6A9\uC790\uC774\uB984 -Datasource-User_Defined=\uC0AC\uC6A9\uC790\uC815\uC758 -FR-Designer-Plugin_DownLoadMessage= -Delay=\uC9C0\uC5F0 -FR-Designer-All_MSBold=\uB9C8\uC774\uD06C\uB85C\uC18C\uD504\uD2B8 Yahei -Utils-Now_create_connection=\uB370\uC774\uD130\uB9C1\uD06C\uC0DD\uC131\uC911 -FR-Template-Path_chooseRightPath=\uC815\uD655\uD55C\uACBD\uB85C\uB97C\uC120\uD0DD\uD574\uC8FC\uC2ED\uC2DC\uC624. -FR-Remote_Re_Connect_to_Server=\uC11C\uBC84\uAC00\uB2EB\uD600\uC788\uC2B5\uB2C8\uB2E4.\uB2E4\uC2DC\uC11C\uBC84\uB97C\uC5F0\uACB0\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C? -Nation=\uAD6D\uAC00 -DBCP_MAX_WAIT=\uCD5C\uB300\uB300\uAE30\uC2DC\uAC04 -FR-App-Template_Form=\uD3FC -Address=\uC8FC\uC18C -Sub_Report=\uBB38\uC11C\uC548\uC758\uBB38\uC11C -FR-Import-Export_Word=Word\uC11C\uC2DD -FR-Server_Version_Tip=\uD604\uC7AC\uC5F0\uACB0\uB41C\uC11C\uBC84\uBC84\uC804\uC774\uB2F9\uC2E0\uC774\uC0AC\uC6A9\uD558\uACE0\uC788\uB294\uC124\uACC4\uAE30\uBC84\uC804\uBC88\uD638\uBCF4\uB2E4\uB0AE\uC2B5\uB2C8\uB2E4.\uACC4\uC18D\uC5F0\uACB0\uD558\uBA74\uD3B8\uC9D1\uD558\uACE0\uC788\uB294\uC77C\uBD80\uC18D\uC131\uC774\uC800\uC7A5\uB418\uC9C0\uC54A\uC744\uC218\uC788\uC2B5\uB2C8\uB2E4. \uC5F0\uACB0\uD574\uC57C\uD560\uACBD\uC6B0\uC124\uACC4\uAE30\uBC84\uC804\uACFC\uC11C\uBC84\uBC84\uC804\uC744\uC77C\uCE58\uC2DC\uCF1C\uC8FC\uC2ED\uC2DC\uC624. -StyleAlignment-Left_To_Right=\uC67C\uCABD\uC5D0\uC11C\uC624\uB978\uCABD\uC73C\uB85C -Verify-ToolTips=\uC218\uC2DD\uBE44\uCDA9\uC871\uC54C\uB9BC. \uC624\uB958\uC815\uBCF4\uAC80\uC0AC -BackgroundTexture-Stationery=\uD3B8\uC9C0\uC9C0 -FR-Designer_RWA-Help=\uBBF8\uC218\uC815, \uBBF8\uC5C5\uB370\uC774\uD2B8\uB85C\uC124\uC815\uD55C\uD6C4\uBBF8\uB9AC\uBCF4\uAE30\uBB38\uC11C\uB97C\uC791\uC131\uD558\uC5EC\uB808\uCF54\uB4DC\uB41C\uC140\uC5D0\uD3B8\uC9D1\uC218\uC815\uC0AC\uD56D\uC774\uC5C6\uC744\uACBD\uC6B0\uC774\uB808\uCF54\uB4DC\uB294\uD589\uC5C5\uB370\uC774\uD2B8\uB97C\uC9C4\uD589\uD560\uC218\uC5C6\uC2B5\uB2C8\uB2E4.\n\uB300\uC6A9\uB7C9\uB370\uC774\uD130\uB808\uCF54\uB4DC\uCC3E\uC544\uBCF4\uAE30\uBC0F\uAE30\uC785\uC0C1\uD669\uC5D0\uC11C\uD574\uB2F9\uC124\uC815\uC744\uD558\uBA74\uAE30\uC785\uC81C\uCD9C\uC131\uB2A5\uC744\uB192\uC77C\uC218\uC788\uC2B5\uB2C8\uB2E4. -M_Insert-Barcode=\uBC14\uCF54\uB4DC -Bounds=\uACBD\uACC4\uC120 -FR-Designer-Undo_All_Authority_Operations=\uC774\uC804\uAD8C\uD55C\uD3B8\uC9D1\uC758\uBAA8\uB4E0\uC870\uC791\uD574\uC81C -Datasource-Context=\uBB38\uB9E5 -CellWrite-Page_After_Column=\uC5F4\uB4A4\uD398\uC774\uC9C0\uB098\uB204\uAE30 -FR-Designer_Cancel=\uCDE8\uC18C -Button-Group-Display-Columns=\uC5F4\uC758\uC218\uB97C\uB098\uD0C0\uB0C4 -Widget-Height=\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4\uB192\uC774 -Examples=\uC608\uC2DC -Formula_Dictionary_Display_Example=\uC2E4\uC81C\uAC12\uBC94\uC704:\ -StyleAlignment-Horizontal=\uC218\uD3C9\uC815\uB82C -HyperLink_Must_Alone_Reset=\uC5EC\uB7EC\uAC1C\uD558\uC774\uD37C\uB9C1\uD06C -ExpandD-Expand_Direction=\uD655\uB300\uBC29\uD5A5 -Include=\uD3EC\uD568 -Export-Excel-Page=\uD398\uC774\uC9C0\uB098\uB204\uAE30\uC5B4\uB0B4\uBCF4\uB0B4\uAE30 -FR-Designer-Min_Height=\uCD5C\uC18C\uB192\uC774 -Filed=\uC601\uC5ED -ReportServerP-Import_Css=Css\uC778\uC6A9 -M_Insert-Formula=\uC218\uC2DD\uC0BD\uC785 -FR-Designer_Auto-Build=\uC790\uB3D9\uC0DD\uC131 -FRFont-Foreground=\uC0C9 -Bubble-Width=\uBC84\uBE14\uB108\uBE44 -Form-Hierarchy_Tree=\uAD6C\uC870\uD2B8\uB9AC -WLayout-Border-LayoutContainer=\uC911\uAC04\uACFC\uBD81\uCABD\uB450\uBE14\uB7ED\uC758\uACBD\uACC4\uC120\uB808\uC774\uC544\uC6C3\uCEE8\uD14C\uC774\uB108\uC911\uBD81\uCABD\uBE14\uB7ED\uC740\uD544\uC694\uC5D0\uB530\uB77C\uB192\uC774\uB97C\uC870\uC815\uD560\uC218\uC788\uC2B5\uB2C8\uB2E4. -Preference-JDK_Home=JDK\uACBD\uB85C -Utils-Insert_Column=\uC5F4\uC0BD\uC785 -FR-Designer_ToolBar_Top=\uC0C1\uB2E8\uD234\uBC14 -BindColumn-The_Conditions_of_FatherCell=\uBD80\uBAA8\uC140\uC870\uAC74 -Links=\uB9C1\uD06C -M_Report-Report_Header=\uBB38\uC11C\uD398\uC774\uC9C0\uBA38\uB9AC\uAE00 -Sub_Report_Description=\uBB38\uC11C\uC548\uC758\uBB38\uC11C\uB294\uBD80\uBAA8\uD14C\uC774\uBE14\uC2E4\uD589\uD658\uACBD\uD558\uC5D0\uC788\uC5B4\uC57C\uD558\uBA70,\uC774\uB458\uC740\uB3D9\uC77C\uD55C\uD15C\uD50C\uB9BF\uC774\uC544\uB2C8\uC5B4\uC57C\uD569\uB2C8\uB2E4. -T_Insert-Float=\uC0BD\uC785\uD638\uBC84\uC694\uC18C -BackgroundTexture-FishFossil=\uC5B4\uB958\uD654\uC11D -My_Computer=\uB0B4\uCEF4\uD4E8\uD130 -FORMLET=\uAC01\uD3FC\uACBD\uB85C\uC758\uB9E4\uAC1C\uBCC0\uC218\uC811\uADFC -HF-Undefined=\uC815\uC758\uC5C6\uC74C -Widget-User_Defined_Widget_Config=\uC0AC\uC804\uC815\uC758\uB41C\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4 -Report-Write_Attributes_Group_Warning=\uC140\uADF8\uB8F9\uC73C\uB85C\uC124\uC815\uB41C\uAC01\uD544\uB4DC\uC758\uC140\uAC1C\uC218\uB294\uAC19\uC544\uC57C\uD569\uB2C8\uB2E4. -Form-Single_quote=\uC791\uC740\uB530\uC634\uD45C -Compile_Success_And_Then_Save=\uCEF4\uD30C\uC77C\uC744\uC131\uACF5\uD574\uC57C\uC815\uD655\uD788\uC800\uC7A5\uAC00\uB2A5 -FR-Designer_Layout-Padding=\uC548\uCABD\uC5EC\uBC31 -Layout_Container=\uB808\uC774\uC544\uC6C3\uCEE8\uD14C\uC774\uB108 -Admin=\uAD00\uB9AC\uC790 -Form-EC_toolbar=\uBB38\uC11C\uBE14\uB85D\uD234\uBC14 -FR-App-All_Auto=\uC790\uB3D9 -Utils-Available_Columns=\uC120\uD0DD\uAC00\uB2A5\uC5F4 -Form-Change_Widget_Name_Discription=\uC0C8\uB85C\uC6B4\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4\uC774\uB984\uC744\uC785\uB825\uD574\uC8FC\uC138\uC694. -FR-Module_Designer=\uC124\uACC4\uAE30\uBAA8\uB4C8 -FR-Import-Export_Text=\uD14D\uC2A4\uD2B8\uD30C\uC77C(\uD0ED\uAE30\uD638\uB85C\uAD6C\uBD84) -Values-Editor=\uAC12\uD3B8\uC9D1\uAE30 -FR-Designer_Yes=\uC608 -ExpandD-Expandable=\uD655\uC7A5\uAC00\uB2A5\uC131 -Tree-Return_Full_Path=\uACB0\uACFC\uB97C\uC644\uC804\uACC4\uCE35\uACBD\uB85C\uB85C\uB418\uB3CC\uB9AC\uAE30 -FRFont-bolditalic=\uAD75\uAC8C\uAE30\uC6B8\uC784\uAF34 -FR-Base_StyleFormat_Sample=\uC608\uC2DC -Area_Value=\uAD6C\uC5ED\uAC12 -FR-Designer-Plugin_Disable=\uC0AC\uC6A9\uAE08\uC9C0 -Utils-Are_you_sure_to_remove_the_selected_item=\uC815\uB9D0\uB85C\uC120\uD0DD\uD55C\uD56D\uBAA9\uC744\uC0AD\uC81C\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C? -Face_Write=\uAE30\uC785 -Poly-Report_Block=\uBB38\uC11C\uC720\uD615\uCDE8\uD569\uBE14\uB7ED -Vgap=\uC218\uC9C1\uAC04\uACA9 -FR-Designer_HyperLink_Must_Alone_Reset=\uC5EC\uB7EC\uAC1C\uD558\uC774\uD37C\uB9C1\uD06C -DS-Class=\uD504\uB85C\uADF8\uB7A8 -FR-Hyperlink_Please_Select_Reportlet=\uB124\uD2B8\uC6CC\uD06C\uBB38\uC11C\uB97C\uC120\uD0DD\uD574\uC8FC\uC2ED\uC2DC\uC624. -FS_Report_Type=\uC720\uD615 -HF-New_Line=\uC904\uBC14\uAFC8 -Privilege=\uAD8C\uD55C -Export-Offline-Html=\uCD9C\uB825\uC624\uD504\uB77C\uC778html\uBB38\uC11C -FR-Designer_open-new-form-tip=\uD604\uC7AC\uD15C\uD50C\uB9BF\uC740711\uC774\uD558\uBC84\uC804\uC73C\uB85C\uC791\uC131\uB418\uC5B4\uD638\uD658\uC774\uB418\uC9C0\uC54A\uC544\uC5F4\uC218\uC5C6\uC2B5\uB2C8\uB2E4. \uC774\uD3FC\uC744\uC5F4\uC5B4\uC218\uC815\uD558\uACE0\uC790\uD560\uACBD\uC6B0\uC0C1\uC751\uD558\uB294\uBC84\uC804\uC124\uACC4\uAE30\uB85C\uC5F4\uC5B4\uC8FC\uC2ED\uC2DC\uC624. -FR-Designer-Widget-Style_Frame_Style=\uD504\uB808\uC784\uC591\uC2DD -Present-No_Present=\uCDE8\uC18C\uD615\uD0DC\uC124\uC815 -FR-Designer_Form-Password=\uC554\uD638 -X_Axis=X\uCD95 -FR-mobile_html_analysis=HTML5 \uD574\uC11D -M_Edit-Bring_to_Front=\uAF2D\uB300\uAE30\uC5D0\uB193\uAE30(T) -Null_Value_Show=\uB110\uAC12\uBCF4\uC774\uAE30 -Datasource-JNDI_DES=\uC8FC\uC758\:INITIAL_CONTEXT_FACTORY\uD074\uB798\uC2A4\uB97C\uD3EC\uD568\uD558\uACE0\uC788\uB294 .jar \uD30C\uC77C\uC744\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC124\uCE58\uB514\uB809\uD130\uB9AC\uC758 /lib\uB514\uB809\uD130\uB9AC\uC5D0\uCD94\uAC00\uD574\uC57C\uD569\uB2C8\uB2E4. -PrintP-Print_Preview=\uC778\uC1C4\uBBF8\uB9AC\uBCF4\uAE30 -Form-Hierarchy_Tree_Last=\uC774\uC804 -Has_been_gone=\\uc0ac\uB77C\uC84C\uC2B5\uB2C8\uB2E4.\uD574\uB2F9\uC591\uC2DD\uC744\uCD94\uAC00\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C? -RWA-Add_Field=\uD544\uB4DC\uCD94\uAC00 -newNode=\uB178\uB4DC\uCD94\uAC00 -PageSetup-Shrink_to_fit_content=\uC140\uB0B4\uC6A9\uC5D0\uB530\uB77C\uC790\uB3D9\uC870\uC815 -FR-Designer_Date=\uB0A0\uC9DC -Column_Multiple=\uB370\uC774\uD130\uBC30\uC218 -FR-App-All_File=\uD30C\uC77C -Sort-Descending=\uB0B4\uB9BC\uCC28\uC21C -FR-Designer-Plugin_Delete=\uC0AD\uC81C -Above=\uC0C1\uAE30\uBC84\uC804 -Utils-The-Chart=\uCC28\uD2B8 -FRFont-plain=\uC77C\uBC18 -Calculating=\uCC98\uB9AC\uC911 -Form-Object=\uD3FC\uAC1D\uCCB4\: -May=5\uC6D4 -FR-Designer_Plugin_Normal_Update=\uC5C5\uB370\uC774\uD2B8 -FR-Hyperlink_Reportlet=\uB124\uD2B8\uC6CC\uD06C\uBB38\uC11C -M_Edit-Copy=\uBCF5\uC0AC(C) -Sub_Report_Message2=\uBD80\uBAA8\uBB38\uC11C\uAC00\uD604\uC7AC\uC2E4\uD589\uD658\uACBD\uC5D0\uC5C6\uC2B5\uB2C8\uB2E4. -Sub_Report_Message3=\uC790\uC2E0\uC744\uC120\uD0DD\uD560\uC218\uC5C6\uC2B5\uB2C8\uB2E4. -Sub_Report_Message1=\uC815\uD655\uD55C\uACBD\uB85C\uB97C\uC120\uD0DD\uD574\uC8FC\uC2ED\uC2DC\uC624. -Form-Allow_CustomData=\uC0AC\uC6A9\uC790\uC815\uC758\uAC12\uD5C8\uC6A9 -FR-Server_Version_Tip_MoreInfo=\uBC84\uC804\uBD88\uC77C\uCE58\uB85C\uC778\uD55C\uBB38\uC81C\uAC00\uBC1C\uC0DD\uD558\uC9C0\uC54A\uB3C4\uB85D\uC0AC\uC6A9\uD558\uACE0\uC788\uB294 FineReport\uC81C\uD488\uC758\uC124\uACC4\uAE30\uBC84\uC804\uBC0F\uC124\uCE58\uB41C\uC11C\uBC84\uBC84\uC804\uC774\uC77C\uCE58\uD558\uB294\uC9C0\uD655\uC778\uD574\uC8FC\uC2ED\uC2DC\uC624.\ N\uB354\uB192\uC740\uC124\uACC4\uAE30\uBC84\uC804\uC73C\uB85C\uC791\uC131\uB41C\uD15C\uD50C\uB9BF\uC744\uC5F4\uACBD\uC6B0\uC5F4\uAE30\uC624\uB958\uB85C\uC778\uD574\uAE30\uC874\uD15C\uD50C\uB9BF\uC18D\uC131\uC744\uC783\uC744\uC218\uC788\uC2B5\uB2C8\uB2E4. \uC791\uC131\uD55C\uD15C\uD50C\uB9BF\uC5D0\uC11C\uC0AC\uC6A9\uD558\uACE0\uC788\uB294\uC124\uACC4\uAE30\uBC84\uC804\uC774\uB2F9\uC2E0\uC758\uCD5C\uC885\uC124\uCE58\uC11C\uBC84\uBC84\uC804\uBCF4\uB2E4\uB192\uC744\uACBD\uC6B0\uC11C\uBC84\uB294\uB2F9\uC2E0\uC774\uC791\uC131\uD55C\uD15C\uD50C\uB9BF\uC744\uB85C\uB529\uD558\uC9C0\uBABB\uD560\uC218\uC788\uC2B5\uB2C8\uB2E4. -FR-Designer_Server-version-tip-moreInfo=\uBC84\uC804\uBD88\uC77C\uCE58\uB85C\uC778\uD55C\uBB38\uC81C\uAC00\uBC1C\uC0DD\uD558\uC9C0\uC54A\uB3C4\uB85D\uC0AC\uC6A9\uD558\uACE0\uC788\uB294 FineReport\uC81C\uD488\uC758\uC124\uACC4\uAE30\uBC84\uC804\uBC0F\uC124\uCE58\uB41C\uC11C\uBC84\uBC84\uC804\uC774\uC77C\uCE58\uD558\uB294\uC9C0\uD655\uC778\uD574\uC8FC\uC2ED\uC2DC\uC624.\ N\uB354\uB192\uC740\uC124\uACC4\uAE30\uBC84\uC804\uC73C\uB85C\uC791\uC131\uB41C\uD15C\uD50C\uB9BF\uC744\uC5F4\uACBD\uC6B0\uC5F4\uAE30\uC624\uB958\uB85C\uC778\uD574\uAE30\uC874\uD15C\uD50C\uB9BF\uC18D\uC131\uC744\uC783\uC744\uC218\uC788\uC2B5\uB2C8\uB2E4. \uC791\uC131\uD55C\uD15C\uD50C\uB9BF\uC5D0\uC11C\uC0AC\uC6A9\uD558\uACE0\uC788\uB294\uC124\uACC4\uAE30\uBC84\uC804\uC774\uB2F9\uC2E0\uC758\uCD5C\uC885\uC124\uCE58\uC11C\uBC84\uBC84\uC804\uBCF4\uB2E4\uB192\uC744\uACBD\uC6B0\uC11C\uBC84\uB294\uB2F9\uC2E0\uC774\uC791\uC131\uD55C\uD15C\uD50C\uB9BF\uC744\uB85C\uB529\uD558\uC9C0\uBABB\uD560\uC218\uC788\uC2B5\uB2C8\uB2E4. -Get_Lock=\uC554\uD638\uD654 -HF-Edit_Footer=\uD398\uC774\uC9C0\uBC14\uB2E5\uAE00\uD3B8\uC9D1 -Datasource-New_Charset=\uC0C8\uCF54\uB529 -Preference-Custom=\uC0AC\uC6A9\uC790\uC815\uC758 -BackgroundTexture-Newsprint=\uC2E0\uBB38\uC9C0 -ConditionB-Add_bracket=\uAD04\uD638\uCD94\uAC00 -Datasource-Connection_successfully=\uB9C1\uD06C\uC131\uACF5 -Function-The_class_must_implement_the_interface=\uD574\uB2F9\uD074\uB798\uC2A4\uB294\uC778\uD130\uD398\uC774\uC2A4\uB97C\uD574\uC57C\uD55C\uB2E4. -FR-Designer_ChartF-Transparency=\uD22C\uBA85 -Crimson=\uC9C4\uD55C\uBE68\uAC15 -FR-Hyperlink_Dialog=\uB300\uD654\uC0C1\uC790 -FR-Designer_Covered_All=\uBAA8\uB450\uB36E\uC5B4\uC50C\uC6B0\uAE30 -Hyperlink-New_Window=\uC0C8\uC708\uB3C4\uC6B0 -Style_Name=\uC11C\uC2DD\uBA85 -CSS_warning=\\uc0c1\uB300\uBB38\uC11C\uD504\uB85C\uC81D\uD2B8\uB514\uB809\uD130\uB9AC(\uC608:WebReport,WebReport\\css)\uC5D0\uC778\uC6A9\uB41Ccss \uD30C\uC77Ctest.css\uAC00\uC788\uB294\uACBD\uC6B0\uC0C1\uB300\uACBD\uB85C\uB294css/test.css\uC774\uB2E4. -FR-Base_Column=\uC5F4 -Three_Rows_Of_Two_Grid=3\uD589 2\uC5F4\uC758\uADF8\uB9AC\uB4DC -DBCP_VALIDATION_QUERY=SQL\uAC80\uC99D\uCC3E\uC544\uBCF4\uAE30 -M_Edit-Clear_Formats=\uC11C\uC2DD(F) -Parameter_Setting=\uB9E4\uAC1C\uBCC0\uC218\uC124\uC815 -Related=\uC5F0\uB3D9 -BorderLayout-Constraints=\uC704\uCE58 -Write_Preview=\uAE30\uC785\uBBF8\uB9AC\uBCF4\uAE30 -PageSetup-Page_Order=\uC778\uC1C4\uC21C\uC11C -Verify-Verify_Formula=\uAC80\uC0AC\uC218\uC2DD -State=\uC131\uC2DC -FR-Designer-Widget-Style_Body_Background=\uBA54\uC778\uBC30\uACBD -FR-App-Privilege_No=\uAD8C\uD55C\uC5C6\uC74C -Please_Drag_ParaPane= -Come_True=\uC2E4\uD604 -ISEMPTY=\uBE44\uC5B4\uC788\uC74C -Background-Texture=\uBB34\uB2AC -FR-Designer_Verify-Message=\uC624\uB958\uC815\uBCF4 -Locked=(\uC7A0\uAE40\uFF09 -Utils-Design-Action_Cancel=\uCDE8\uC18C -Image-Titled=\uD0C0\uC77C -Gradient-Direction=\uADF8\uB77C\uB370\uC774\uC158 \uBC29\uD5A5 -Green=\uC9D9\uC740\uB179\uC0C9 -Report_Engine=\uBB38\uC11C\uC5D4\uC9C4 -Return-String=\uBB38\uC790\uC5F4\uB3CC\uC544\uAC00\uAE30 -Margin=\uC5EC\uBC31 -Pitch_Percentage=\uAC04\uACA9\uBC31\uBD84\uC728 -FR-Base_TurnOff=\uB2EB\uAE30 -Utils-has_been_existed=\uC774\uBBF8\uC874\uC7AC\uD569\uB2C8\uB2E4 -HF-Insert_Formula=\uC218\uC2DD\uC0BD\uC785 -Utils-Exit_Designer=\uC124\uACC4\uAE30\uB098\uAC00\uAE30 -Formula_Dictionary_Display=\uC704\uC2E4\uC81C\uAC12\uBC94\uC704\uC548\uC758\uAC01\uAC12($$$): \uFF0C \uD45C\uC2DC\uAC12: -PageSetup-Left_to_right=\uD589\uBA3C\uC800\uC5F4\uB098\uC911 -Utils-Import_Excel_Data=[Excel]\uBD88\uB7EC\uC624\uAE30 -M-Save=\uC800\uC7A5 -redo=\uB9AC\uC6CC\uD06C -Status=\uC0C1\uD0DC -Draw=\uADF8\uB9AC\uAE30 -FR-Designer_Message=\uC815\uBCF4 -Records=\uAC74\uC758\uB808\uCF54\uB4DC -FR-Designer_ComboBox=\uBC15\uC2A4\uD480\uB2E4\uC6B4 -Driver=\uB4DC\uB77C\uC774\uBE0C -Template_Parameters=\uD15C\uD50C\uB9BF\uB9E4\uAC1C\uBCC0\uC218 -Form-Remove_Repeat_Data=\uC911\uBCF5\uB370\uC774\uD130\uC0AD\uC81C -ECP_decode=\uD15C\uD50C\uB9BF\uC554\uD638\uD574\uC81C -Area_Name=\uC601\uC5ED\uBA85 -Others=\uAE30\uD0C0 -Merge=\uBCD1\uD569 -BackgroundTexture-Parchment=\uC591\uD53C\uC885\uC774 -BindColumn-Bottom_N=\uB4A4N\uAC1C -Frame=\uD504\uB808\uC784 -Bottom_Border_Line=\uC544\uB798\uD14C\uB450\uB9AC\uC120 -Muiti_In=\uB2E4\uCE35\uB4DC\uB9B4\uB2E4\uC6B4 -FR-Designer-Dependence_Install_Online=install online -Use_Default_ToolBar=\uAE30\uBCF8\uD234\uBC14\uC0AC\uC6A9 -M_Server-Platform_Manager=\uBB38\uC11C\uD50C\uB7AB\uD3FC\uAD00\uB9AC -PageSetup-inches=\uC778\uCE58 -Form-Widget_Property=\uC18D\uC131\uC774\uB984 -FR-Layout_Padding=\uC548\uCABD\uC5EC\uBC31 -Schema=\uD14C\uB9C8 -Server_Path=\uD638\uC2A4\uD2B8\uCEF4\uD4E8\uD130\uC704\uCE58 -Condition_Display=\uC870\uAC74\uBCF4\uC774\uAE30 -FR-Server-Design_template_unopened=\uD15C\uD50C\uB9BF\uC744\uC5F4\uC218\uC5C6\uC2B5\uB2C8\uB2E4. -Function-Function_Class_Name=\uD568\uC218\uD074\uB798\uC2A4\uB124\uC784 -Schedule-Template=\uD15C\uD50C\uB9BF\uBA85\uCE6D -Tree_Data_Field=\uD2B8\uB9AC\uB370\uC774\uD130\uD544\uB4DC -Border-Style-Normal=\uC9C1\uAC01\uD14C\uB450\uB9AC -Top_And_Double_Bottom_Border_Line=\uC704\uD14C\uB450\uB9AC\uC120\uACFC\uB450\uC904\uBC11\uD14C\uB450\uB9AC\uC120 -FR-Server_Embedded_Server_Start=\uB0B4\uC7A5\uB41C\uC11C\uBC84-\uC5F4\uAE30 -FR-Designer-Basic_Restart_Designer_Later=\uC7A0\uC2DC\uD6C4\uC7AC\uBD80\uD305\uD574\uC8FC\uC2ED\uC2DC\uC624. -StyleAlignment-Top=\uC704\uC5D0\uB9DE\uCDA4 -ReportServerP-First=\uBA54\uC778\uD398\uC774\uC9C0 -Not_Exist=\uC874\uC7AC\uD558\uC9C0\uC54A\uC2B5\uB2C8\uB2E4. -FR-Remote_File_is_Locked=\uC5F4\uB824\uB294\uBB38\uC11C\uB97C\uB2E4\uB978\uC0AC\uB78C\uC774\uC0AC\uC6A9\uC911\uC774\uB2C8\uC7A0\uC2DC\uD6C4\uC5D0\uC5F4\uC5B4\uC8FC\uC2ED\uC2DC\uC624. -Apply=\uC751\uC6A9 -Sytle-Indentation=\uB4E4\uC5EC\uC4F0\uAE30 -Parameter-Float=\uC2F1\uAE00\uC815\uB3C4\uD0C0\uC785 -HF-Center_Section=\uC911\uAC04\uC601\uC5ED -Form-Double_quotes=\uD070\uB530\uC634\uD45C -M_File-Export-Word=Word\uC11C\uC2DD -M_File-Export-Text=\uD14D\uC2A4\uD2B8\uD30C\uC77C(\uD0ED\uAE30\uD638\uB85C\uAD6C\uBD84) -PageSetup-First_Page_Number=\uC2DC\uC791\uD398\uC774\uC9C0\uBC88\uD638 -Execute=\uC2E4\uD589 -Task=\uD0DC\uC2A4\uD06C -Custom_Button_Type_Submit=\uC81C\uCD9C -FR-Designer-Widget_Settings=\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4\uC124\uC815 -IS_Need_Password=\uC554\uD638\uB97C\uC785\uB825\uD574\uC57C\uD569\uB2C8\uB2E4. -PageSetup-Horizontally=\uC218\uD3C9\uAC00\uC6B4\uB370\uC815\uB82C -No_Editor_Property_Definition=\uD574\uB2F9\uD3B8\uC9D1\uAE30\uC5D0\uC18D\uC131\uC815\uC758\uAC00\uC5C6\uC2B5\uB2C8\uB2E4. -Env-Remote_Server=\uC6D0\uACA9\uC11C\uBC84 -FR-Utils_Background=\uBC30\uACBD -FR-Designer-Plugin_Warning=\uACBD\uACE0 -Server-version-info=\uD604\uC7AC\uC5F0\uD15C\uD50C\uB9BF\uD30C\uC77C\uC740\uB354\uB192\uC740\uBC84\uC804\uC758\uC124\uACC4\uAE30\uB85C\uC791\uC131\uB418\uC5C8\uC2B5\uB2C8\uB2E4.\uC5F4\uACBD\uC6B0\uAE30\uC874\uD15C\uD50C\uB9BF\uC18D\uC131\uC774\uC624\uB958\uAC00\uB098\uAC70\uB098\uC190\uC0C1\uB420\uC704\uD5D8\uC774\uC788\uC2B5\uB2C8\uB2E4. \uC774\uD15C\uD50C\uB9BF\uC744\uC5F4\uC5B4\uC57C\uD560\uACBD\uC6B0\uC124\uACC4\uAE30\uB97C~\uB85C\uC5C5\uADF8\uB808\uC774\uB4DC\uD574\uC8FC\uC2ED\uC2DC\uC624. -CellWrite-Page_After_Row=\uD589\uB4A4\uD398\uC774\uC9C0\uB098\uB204\uAE30 -HF-Right_Section=\uC624\uB978\uCABD\uC601\uC5ED -PageSetup-Title_Start_Row=\uC911\uBCF5\uC81C\uBAA9\uD589 -From=~\uBC88\uC9F8\uBD80\uD130 -Preference-Grid_Line_Color=\uB208\uAE08\uC120\uC0C9 -RowTo=\uD589\uC5D0\uC11C~\uBC88\uC9F8 -FR-Designer_ReportColumns-Repeat_Column=\uC5F4\uBCF5\uC0AC\uC21C\uC11C -M_Server-Function_Manager=\uD568\uC218\uAD00\uB9AC\uC790 -KeyWord=\uD0A4\uC6CC\uB4DC -DS-Multi_Dimensional_Database=\uB2E4\uCC28\uC6D0\uB370\uC774\uD130\uBCA0\uC774\uC2A4 -BiasD-Slope_Line=\uC0AC\uC120 -Tue=2 -ReportServerP-Last=\uB05D\uD398\uC774\uC9C0 -FR-Base_Columns=\uC5F4 -SpecifiedG-Leave_in_their_own_groups=\uAC01\uC790\uC758\uADF8\uB8F9\uC548\uC5D0\uB0A8\uAE30\uAE30 -LOG-Please_Wait=\uC7A0\uC2DC\uB9CC\uAE30\uB2E4\uB824\uC8FC\uC2ED\uC2DC\uC624 -Form-ToolBar=\uD3FC\uD234\uBC14 -FR-Base_sure_remove_item=\uC815\uB9D0\uB85C\uC120\uD0DD\uD55C\uD56D\uBAA9\uC744\uC0AD\uC81C\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C? -Component_Scale=\uC5B4\uC148\uBE14\uB9AC\uCD95\uC18C -Hyperlink-Use_CJK_to_encode_parameter=CJK\uB85C\uB9E4\uAC1C\uBCC0\uC218\uCC98\uB9AC -LOG-Has_Been_Openned=\uC5F4\uB838\uC2B5\uB2C8\uB2E4. -FR-Designer-Dependence= -ECP_error_pwd=\uBE44\uBC00\uBC88\uD638\uC785\uB825\uC624\uB958 -REPORTLET=\uD15C\uD50C\uB9BF\uACBD\uB85C\uC758\uB9E4\uAC1C\uBCC0\uC218\uC811\uADFC -RWA-Column_Offset=\uC5F4\uC635\uC14B -Forecast=\uC608\uCE21 -Light_Orange=\uC624\uB80C\uC9C0\uC0C9 -StyleAlignment-Vertical=\uC218\uC9C1\uC815\uB82C -Form-List=\uB9AC\uC2A4\uD2B8 -ParameterD-Show_Parameter_Window=\uB9E4\uAC1C\uBCC0\uC218\uB300\uD654\uCC3D\uBCF4\uC774\uAE30 -FR-Designer_Set_Submit_Event=\uC81C\uCD9C\uC774\uBCA4\uD2B8\uC124\uC815 -Value_Percent=\uAC12\uC810\uC720\uBE44\uC728 -DBCP_MIN_EVICTABLE_IDLE_TIMEMILLIS=\uC720\uD734\uCD5C\uC18C\uC2DC\uAC04\uAC12 -Function-The_class_must_be_located_in=\uD574\uB2F9\uD074\uB798\uC2A4\uB294~\uC5D0\uB450\uC5B4\uC57C\uD55C\uB2E4. -FR-Action_Sort=\uC21C\uC11C -DataFunction-Average=\uD3C9\uADE0 -FR-Designer_Show_in_Containing_Folder=\uD574\uB2F9\uD3F4\uB354\uC5F4\uAE30 -M_File-Export-Excel=Excel\uC11C\uC2DD -DataFunction-Max=\uCD5C\uB300\uAC12 -FR-Designer_Form-Widget_Name=\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4\uC774\uB984 -FS_End_Date=\uC885\uB8CC\uB0A0\uC9DC -Export-Excel-Simple=\uC6D0\uB798\uBAA8\uC2B5\uB0B4\uBCF4\uB0B4\uAE30 -ColumnTo=\uC5F4\uC744~\uBC88\uC9F8\uB85C -SpecifiedG-Discard_all_others=\uAE30\uD0C0\uBAA8\uB4E0\uAC83\uD3EC\uAE30 -DS-TableData=\uB370\uC774\uD130\uC138\uD2B8 -Form-DataTable=\uB370\uC774\uD130\uD45C -Sub_Report_ToolTips=\uBB38\uC11C\uC548\uC758\uBB38\uC11C\uC54C\uB9BC -Right_Top=\uC624\uB978\uCABD\uC704 -M_Edit-Merge_Cell=\uC140\uBCD1\uD569 -FR-Designer_Restore_Default=\uAE30\uBCF8\uD68C\uBCF5 -Component_Interval=\uC5B4\uC148\uBE14\uB9AC\uAC04\uACA9 -Cover_None=\uBAA8\uB450\uB36E\uC5B4\uC50C\uC6B0\uC9C0\uC54A\uAE30 -Datasource-From_Database=\uB370\uC774\uD130\uBCA0\uC774\uC2A4\uD45C -Folder=\uB514\uB809\uD130\uB9AC -Form-Allow_Edit=\uC9C1\uC811\uD3B8\uC9D1\uD5C8\uC6A9 -M_Edit-Clear=\uD074\uB9AC\uC5B4(A) -ParentCell_Setting=\uBD80\uBAA8\uC140\uC124\uC815 -Only_selected_cell_can_paste_only=\uC140\uC744\uC120\uD0DD\uD574\uC57C\uBD99\uC5EC\uB123\uAE30\uB97C\uD560\uC218\uC788\uC2B5\uB2C8\uB2E4. -M_Report-Report_Columns=\uBB38\uC11C\uC140\uB098\uB204\uAE30 -Unit_Hundred=\uBC31 -FR-Designer_DataTable-Build= -Widget-Form_Widget_Config=\uD3FC\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4 -Server-version-tip-moreInfo=\uBC84\uC804\uBD88\uC77C\uCE58\uB85C\uC778\uD55C\uBB38\uC81C\uAC00\uBC1C\uC0DD\uD558\uC9C0\uC54A\uB3C4\uB85D\uC0AC\uC6A9\uD558\uACE0\uC788\uB294 FineReport\uC81C\uD488\uC758\uC124\uACC4\uAE30\uBC84\uC804\uBC0F\uC124\uCE58\uB41C\uC11C\uBC84\uBC84\uC804\uC774\uC77C\uCE58\uD558\uB294\uC9C0\uD655\uC778\uD574\uC8FC\uC2ED\uC2DC\uC624.\ N\uB354\uB192\uC740\uC124\uACC4\uAE30\uBC84\uC804\uC73C\uB85C\uC791\uC131\uB41C\uD15C\uD50C\uB9BF\uC744\uC5F4\uACBD\uC6B0\uC5F4\uAE30\uC624\uB958\uB85C\uC778\uD574\uAE30\uC874\uD15C\uD50C\uB9BF\uC18D\uC131\uC744\uC783\uC744\uC218\uC788\uC2B5\uB2C8\uB2E4. \uC791\uC131\uD55C\uD15C\uD50C\uB9BF\uC5D0\uC11C\uC0AC\uC6A9\uD558\uACE0\uC788\uB294\uC124\uACC4\uAE30\uBC84\uC804\uC774\uB2F9\uC2E0\uC758\uCD5C\uC885\uC124\uCE58\uC11C\uBC84\uBC84\uC804\uBCF4\uB2E4\uB192\uC744\uACBD\uC6B0\uC11C\uBC84\uB294\uB2F9\uC2E0\uC774\uC791\uC131\uD55C\uD15C\uD50C\uB9BF\uC744\uB85C\uB529\uD558\uC9C0\uBABB\uD560\uC218\uC788\uC2B5\uB2C8\uB2E4. -Actions=\uD0DC\uC2A4\uD06C -FR-Designer-Dependence_Connect_Server_Error=connect error -High=\uB192\uC774 -HJS-Send_Failed=\uBC1C\uC1A1\uC2E4\uD328 -HJS-Message=\uB0B4\uC6A9 -File-Allow_Upload_Files=\uC5C5\uB85C\uB4DC\uD5C8\uC6A9\uD30C\uC77C\uC720\uD615 -FR-Designer-Form-ToolBar_Chart=\uCC28\uD2B8 -Thick_Bottom_Border_Line=\uAD75\uC740\uBC11\uC904\uD14C\uB450\uB9AC\uC120 -FR-Action_Remove=\uC0AD\uC81C -FRFont-Style=\uD3F0\uD2B8 -Select_DataColumn=\uB370\uC774\uD130\uC5F4\uC120\uD0DD -StartValue=\uC2DC\uC791\uAC12 -SINGLE_FILE_UPLOAD=\uD55C\uAC1C\uD30C\uC77C\uC5C5\uB85C\uB4DC\uB9CC\uC9C0\uC6D0\uD569\uB2C8\uB2E4. -BackgroundTexture-Cork=\uCF54\uB974\uD06C\uB9C8\uAC1C -M_Format-Data_Map=\uB370\uC774\uD130\uC0AC\uC804 -FR-mobile_native_analysis=\uC6D0\uC0DD \uD574\uC11D -HighLight=\uD558\uC774\uADF8\uB85C\uC2DC -FR-Designer_Dropdown-More-Preview=\uC544\uB798\uB85C \uB4DC\uB798\uADF8\uD558\uBA74 \uB354 \uB9CE\uC740 \uBBF8\uB9AC\uBCF4\uAE30 \uBC29\uC2DD\uC774 \uB098\uC635\uB2C8\uB2E4. -local=\uB85C\uCEEC -FR-Designer_Gradation=\uB2E8\uACC4 -PageSetup-Finis_Start_Column=\uC911\uBCF5\uC885\uB8CC\uC5F4 -Env-Invalid_User_and_Password=\uC62C\uBC14\uB974\uC9C0\uC54A\uC740\uC0AC\uC6A9\uC790\uC774\uB984\uB610\uB294\uC554\uD638 -FR-Designer-Plugin_All_Plugins=\uBAA8\uB450\uD50C\uB7EC\uADF8\uC778 -FR-Designer_Prepare_Export=\uB0B4\uBCF4\uB0B4\uAE30\uB97C\uC2DC\uC791\uD558\uB2C8\uC7A0\uC2DC\uB9CC\uAE30\uB2E4\uB824\uC8FC\uC2ED\uC2DC\uC624. -DBCP_TEST_ON_RETURN=\uB9C1\uD06C\uADC0\uD658\uC804\uAC80\uC0AC\uC9C4\uD589 -no-alternatives=\uC120\uD0DD\uD55C\uD56D\uBAA9\uC774\uC5C6\uC2B5\uB2C8\uB2E4. -FR-Designer_Submmit_WClass=\uBC31\uADF8\uB77C\uC6B4\uB4DC\uD074\uB798\uC2A4\uC81C\uCD9C -M_Insert-Slope_Line=\uC0AC\uC120\uC0BD\uC785 -FR-Designer-Plugin_Plugin_Description=\uD50C\uB7EC\uADF8\uC778\uC124\uBA85 -ExpandD-Not_Expand=\uD655\uC7A5\uD558\uC9C0\uC54A\uC74C -Utils-Bottom_to_Top=\uC544\uB798\uC11C\uC704\uB85C -Collect-Click\!_Get_user_information_code=\!\uB97C\uD074\uB9AD\uD558\uC5EC\uD65C\uC131\uCF54\uB4DC\uB97C\uC5BB\uC2B5\uB2C8\uB2E4. -FR-Already_exist=\uD604\uC7AC\uD658\uACBD\uC774\uC774\uBBF8\uC874\uC7AC\uD569\uB2C8\uB2E4\: -Send=\uBC1C\uC1A1 -M_Edit-Clear_All=\uBAA8\uB450 (A) -Brown_Orange=\uC605\uC740\uAC08\uC0C9 -PageSetup-Portrait=\uC138\uB85C -FR-Designer_Form-RadioGroup=\uB2E8\uC77C\uC120\uD0DD\uD0A4\uD328\uB4DC -FR-Utils-App_AllFiles=\uBAA8\uB4E0\uD30C\uC77C -Popup=\uD31D\uC5C5 -Server_Charset=\uC11C\uBC84\uCF54\uB529 -CellWrite-Repeat_Content_When_Paging=\uD398\uC774\uC9C0\uB098\uB204\uAE30\uB85C\uB098\uB20C\uB54C\uAC12\uC911\uBCF5\uBCF4\uC774\uAE30 -Utils-No_Pagination=\uD398\uC774\uC9C0\uB098\uB204\uAE30\uB97C\uD558\uC9C0\uC54A\uC2B5\uB2C8\uB2E4. -Form-NullLayout=\uC808\uB300\uC801\uC704\uCE58 -ConditionB-Remove_bracket=\uAD04\uD638\uC0AD\uC81C -email=\uBA54\uC77C -Minute=\uBD84 -FR-Designer-Plugin_Update=\uD50C\uB7EC\uADF8\uC778\uC5C5\uB370\uC774\uD2B8 -alraedy_close=\uB2EB\uD614\uC2B5\uB2C8\uB2E4. -ComboCheckBox-End_Symbol=\uC885\uB8CC\uBD80\uD638 -DataColumn=\uB370\uC774\uD130\uC5F4 -Form-Password=\uC554\uD638 -FR-Background_Image_Adjust=\uC801\uC6A9 -Export-Excel-PageToSheet=\uD398\uC774\uC9C0\uC640 Sheet\uB098\uB204\uC5B4\uB0B4\uBCF4\uB0B4\uAE30 -Edit-Row_Count=\uD589\uC218 -DS-Report_TableData=\uD15C\uD50C\uB9BF\uB370\uC774\uD130\uC138\uD2B8 -Sche-Hour=\uC2DC -Group_Count=\uCD1D\uAC1C\uC218\uB97C\uB098\uD0C0\uB0B8\uB2E4. -EndValue=\uC885\uB8CC\uAC12 -FR-Designer_Sytle-Indentation=\uB4E4\uC5EC\uC4F0\uAE30 -DownBarBorderStyleAndColor=\uB4DC\uB86D\uCE7C\uB7FC\uC591\uC2DD -World=\uC6D4\uB4DC -FR-Designer-Basic_Cancel=\uCDE8\uC18C -Finally=\uB9C8\uC9C0\uB9C9 -Low=\uB0AE\uC74C -Please_Input_The_Key=\uD574\uB2F9\uB9F5\uC5D0\uC11C\uC0AC\uC6A9\uD558\uB294key\uB97C\uC785\uB825\uD574\uC8FC\uC2ED\uC2DC\uC624 -Smart=\uC2A4\uB9C8\uD2B8 -Preference-Predefined=\uC0AC\uC804\uC815\uC758\uB41C -Current_custom_global=\uD604\uC7AC\uBB38\uC11C\uC5D0\uC11C\uC0AC\uC6A9\uD558\uB294\uC0AC\uC6A9\uC790\uC815\uC758\uC758\uBAA8\uB4E0\uC591\uC2DD -FR-Designer-Plugin_Shop_Need_Install=\uB2F9\uC2E0\uC740 \uCD94\uAC00 \uAE30\uB2A5\uB418\uC9C0 \uC54A\uC740 \uC790\uC6D0\uC758 \uC800\uC7A5\uC18C\uB97C \uB2E4\uC6B4\uB85C\uB4DC \uD560 \uAC83\uC778\uC9C0? -WEB-Pagination_Setting=\uD398\uC774\uC9C0\uB098\uB204\uAE30\uBBF8\uB9AC\uBCF4\uAE30\uC124\uC815 -RCodeDrawPix=\uD654\uC18C -FR-Designer-Widget-Style_Alpha=\uBD88\uD22C\uBA85\uB3C4 -BorderLayout-North=\uBD81 -HJS-Current_Page=\uD604\uC7AC\uD398\uC774\uC9C0 -Compile=\uCEF4\uD30C\uC77C -Show_Blank_Row=\uACF5\uBC31\uD589\uBCF4\uCDA9 -TableData_Dynamic_Parameter_Setting=\uB3D9\uC801\uD30C\uB77C\uBBF8\uD130\uC8FC\uC785 -FR-Background_Image_Default=\uAE30\uBCF8 -BackgroundTexture-WhiteMarble=\uD770\uC0C9\uB300\uB9AC\uC11D -DataFunction-Sum=\uD569\uAD6C\uD558\uAE30 -Collect-The_user_information_code_is_invalid=\uB4F1\uB85D\uB418\uC5B4\uC788\uC9C0\uC54A\uC740\uD65C\uC131\uCF54\uB4DC\uC785\uB2C8\uB2E4.\uD648\uD398\uC774\uC9C0\uC5D0\uC11C\uC2E0\uCCAD\uD574\uC8FC\uC2ED\uC2DC\uC624. -Preference-Locale=\uAD6D\uC81C\uD654 -M_File-Export-PDF=PDF\uC11C\uC2DD -BiasD-From-lower_left_to_upper_right=\uC67C\uCABD\uD558\uB2E8\uC5D0\uC11C\uC624\uB978\uCABD\uC704\uB85C\uB098\uD0C0\uB0B4\uAE30 -Border-Style=\uD14C\uB450\uB9AC\uC591\uC2DD -Sort=\uC21C\uC11C -Image-Image_Layout=\uC774\uBBF8\uC9C0\uB808\uC774\uC544\uC6C3 -Panel=\uD328\uB110 -FR-Designer-Basic_Copy_Build_NO_OK=\uC0DD\uC131\uBC84\uC804\uBC88\uD638\uAC00\uD074\uB9BD\uBCF4\uB4DC\uC5D0\uBCF5\uC0AC\uB418\uC5C8\uC2B5\uB2C8\uB2E4. -All_Border_Line=\uBAA8\uB4E0\uD14C\uB450\uB9AC\uC120 -FR-Utils-Please_Input_a_New_Name=\uC0C8\uB85C\uC6B4\uC774\uB984\uC744\uC785\uB825\uD574\uC8FC\uC2ED\uC2DC\uC624. -FR-Base_Formula_Plugin=\uD50C\uB7EC\uADF8\uC778\uD568\uC218 -Two_Rows_Of_Three_Grid=2\uD589 3\uC5F4\uC758\uADF8\uB9AC\uB4DC -FR-Designer_Certificate_Pass=https\uBE44\uBC00\uD0A4 -Bubble-Series_Name=\uACC4\uC5F4\uBA85 -M-New_Multi_Report=\uC0C8\uCDE8\uD569\uBB38\uC11C (M) -BackgroundTexture-PinkTissuePaper=\uD551\uD06C\uC0AC\uD3EC -Preference-Support_Default_Parent_Calculate=\uAE30\uBCF8\uBD80\uBAA8\uC140\uACC4\uC0B0 -Show_Blank_Column=\uACF5\uBC31\uC5F4\uBCF4\uCDA9 -BaiduMap=\uBC14\uC774\uB450\uC9C0\uB3C4 -Report-Web_Attributes=\uD15C\uD50C\uB9BFWeb \uC18D\uC131 -FR-Designer_StyleAlignment-Wrap_Text=\uC790\uB3D9\uD589\uBC14\uAFB8\uAE30 -Need=\uD544\uC694 -Parameter-Double=\uB354\uBE14\uC815\uB3C4\uD0C0\uC785 -Config_Servlet=\uC6D0\uACA9\uC11C\uBC84\uAD6C\uC131 -Form-Comma=\uC27C\uD45C -Verify=\uAC80\uC0AC -PageSetup-Landscape=\uAC00\uB85C -Weeks=\uC694\uC77C -FR-Designer-Widget-Style_Title_Background=\uC81C\uBAA9\uBC30\uACBD -Preference-Pagination_Line_Color=\uD398\uC774\uC9C0\uB098\uB204\uAE30\uC120\uC0C9 -Test_URL=\uD14C\uC2A4\uD2B8\uB9C1\uD06C -Fill_blank_Data=\uACF5\uBC31\uB370\uC774\uD130\uBCF4\uCDA9 -ReportServerP-The_name_of_printer_cannot_be_null=\uD504\uB9B0\uD130\uC758\uC774\uB984\uC740\uBE48\uCE78\uC73C\uB85C\uB458\uC218\uC5C6\uC2B5\uB2C8\uB2E4. -FR-Designer-Basic_Copy_Activation_Key=\uC124\uACC4\uAE30\uC77C\uB828\uBC88\uD638\uB97C\uB354\uBE14\uD074\uB9AD\uD558\uBA74,\uD074\uB9BD\uBCF4\uB4DC\uC5D0\uBCF5\uC0AC\uB429\uB2C8\uB2E4. -Continuum=\uC774\uC6C3\uC5F0\uC18D -BackgroundTexture-MediumWood=\uC9D9\uC740\uB098\uBB34\uC7AC\uC9C8 -Datasource-Column_Index=\uC5F4\uBC88\uD638 -Function-Function_File=\uD568\uC218\uD30C\uC77C -Form-Component_Bounds=\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4\uACBD\uACC4\uC120 -Utils-Submit=\uC81C\uCD9C -Conditions_formula=\uC870\uAC74\uC218\uC2DD -M_Insert-Image=\uC774\uBBF8\uC9C0\uC0BD\uC785 -FR-Designer-Plugin_Will_Be_Delete=\uD50C\uB7EC\uADF8\uC778\uC774\uC0AD\uC81C\uB429\uB2C8\uB2E4.\uC124\uACC4\uAE30\uBC0F\uC11C\uBC84\uB97C\uC7AC\uBD80\uD305\uD558\uB824\uBA74\uC11C\uBC84\uB97C\uC218\uB3D9\uC7AC\uBD80\uD305\uD574\uC57C\uD569\uB2C8\uB2E4. -FormulaD-Functions=\uD568\uC218 -Mobile_Terminal=\uBAA8\uBC14\uC77C\uB2E8\uB9D0 -CheckBox=\uCCB4\uD06C\uBC15\uC2A4 -FR-Designer-Plugin_Install=\uC124\uCE58 -Sun=\uC77C -FR-Designer_ToolBar_Bottom=\uD558\uB2E8\uD234\uBC14 -Widget-Width=\uC18C\uD504\uD2B8\uC6E8\uC5B4\uC81C\uC5B4\uB108\uBE44 -Series_Name=\uACC4\uC5F4\uBA85 -Set_Row_Title_Start=\uC911\uBCF5 \uD0C0\uC774\uD2C0 \uD589 \uC124\uC815 -HF-Default_Page=\uAE30\uBCF8\uD398\uC774\uC9C0 -Env_Des=\uB85C\uADF8\uC778\uD658\uACBD\uC911\uC758\uBB38\uC11C\uD504\uB85C\uC81D\uD2B8\uC5D0\uC11C\uAD8C\uD55C\uC0AC\uC6A9\uC744\uC2DC\uC791\uD588\uC744\uACBD\uC6B0\uC0AC\uC6A9\uC790\uC774\uB984\uACFC\uC554\uD638\uB294\uD574\uB2F9\uB85C\uADF8\uC778\uD658\uACBD\uC758\uC0AC\uC6A9\uC790\uC640\uC554\uD638\uB97C\uAE30\uC785\uD574\uC57C\uD569\uB2C8\uB2E4. -Widget-User_Defined=\uC0AC\uC804\uC815\uC758\uB41C -Url_location=\uC808\uB300\uACBD\uB85C -Disk_File=\uB514\uC2A4\uD06C\uD30C\uC77C -Inside=\uB0B4\uBD80 -FR-Designer_filedChosen= -ServerM-Predefined_Styles=\uC0AC\uC804\uC815\uC758\uB41C\uC591\uC2DD -is_need_word_adjust=\uBE44\uACE0\uC815\uD589\uB192\uC774\uB0B4\uBCF4\uB0B4\uAE30 -Background-Null=\uBC30\uACBD\uC5C6\uC74C -PageSetup-Vertically=\uC218\uC9C1\uAC00\uC6B4\uB370\uC815\uB82C -FR-Designer_Root=\uB8E8\uD2B8\uB178\uB4DC -FR-Designer_Form-TextArea=\uD14D\uC2A4\uD2B8\uC601\uC5ED -ReportServerP-Import_JavaScript=JavaScript\uC778\uC6A9 -Form-TableTree=\uC2DC\uD2B8\uD2B8\uB9AC -Opened=\uC5F4\uB824\uC788\uC2B5\uB2C8\uB2E4. -M_Edit-Delete=\uC0AD\uC81C(D) -Widget-Form_Widget_Container=\uD3FC\uCEE8\uD14C\uC774\uB108 -BindColumn-Summary=\uCDE8\uD569 -Sche-Second=\uCD08 -Server-Open_Service_Manager=\uC11C\uBE44\uC2A4\uAD00\uB9AC\uC790\uC5F4\uAE30 -FRFont-Effects=\uD2B9\uC218\uD6A8\uACFC -OtherGroup_Name=\uAE30\uD0C0\uADF8\uB8F9\uC774\uB984 -Specify=\uC9C0\uC815 -Highlight-Click_to_Choose_Property_To_Modify=\uBC14\uAFB8\uB824\uB294\uC18D\uC131\uC120\uD0DD\uD074\uB9AD -triggered=\uD2B8\uB9AC\uAC70\uB418\uC5C8\uC2B5\uB2C8\uB2E4. -Double_Bottom_BorderLine=\uC774\uC911\uBC14\uB2E5\uD14C\uB450\uB9AC\uC120 -M_Insert-Sub_Report=\uBB38\uC11C\uC548\uC758\uBB38\uC11C\uC0BD\uC785 -Unit_Ten=10 -Polybolck=\uCDE8\uD569\uBE14\uB7ED -Select_sort_order=\uC815\uB82C\uC21C\uC11C\uC120\uD0DD -HJS-Mail_to=\uC218\uC2E0\uC778 -StyleAlignment-Left=\uC67C\uCABD\uC5D0\uB9DE\uCDA4 -Two_Rows_Of_Two_Grid=2\uD589 2\uC5F4\uC758\uADF8\uB9AC\uB4DC -FR-Designer-Form-Please_Drag_ParaPane=\uB9E4\uAC1C\uBCC0\uC218\uD328\uB110\uC744\uB4DC\uB798\uADF8\uD574\uC8FC\uC2ED\uC2DC\uC624. -Milliseconds=\uBC00\uB9AC\uCD08 -DataFunction-None=\uC5C6\uC74C -Delivery=\uC804\uB2EC -ColumnSpan=\uC5F4\uC2A4\uD32C -StyleAlignment-Bottom=\uC544\uB798\uC5D0\uB9DE\uCDA4 -Read_failure=\uC77D\uAE30\uC2E4\uD328\uFF0C \uC18C\uC2A4\uD30C\uC77C\uC774\uC190\uC0C1\uB418\uC5C8\uC2B5\uB2C8\uB2E4. -Verify-Verify=\uB370\uC774\uD130\uAC80\uC0AC -FR-Designer-Widget-Style_Title_Format=\uC81C\uBAA9\uC11C\uC2DD -FR-Designer_Edit_String_To_Formula=\uBB38\uC790\uC5F4\uC744\uC218\uC2DD\uC73C\uB85C\uD3B8\uC9D1\uD558\uACA0\uC2B5\uB2C8\uAE4C? -FR-Base_UnSignIn=\uC544\uC9C1 \uB4F1\uB85D -Every=\uAC01 -CellWrite-Preview_Cell_Content=\uC140\uB0B4\uC6A9\uBBF8\uB9AC\uBCF4\uAE30 -FormulaD-Data_Fields=\uB370\uC774\uD130\uD56D\uBAA9 \ No newline at end of file +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 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 64aff3d0f..8c36603cc 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -100,7 +100,6 @@ FR-Designer_FS_Close_Other_Templates=\u5173\u95ED\u5176\u4ED6\u6A21\u677F FR-Designer_File=\u6587\u4EF6 FR-Designer_Filter_Conditions=\u8FC7\u6EE4\u6761\u4EF6 FR-Designer_Finish-Modify-Share=\u5B8C\u6210\u4FEE\u6539\u5E76\u5206\u4EAB -FR-Designer_Fit-App=App\u81EA\u9002\u5E94 FR-Designer_Fit=\u81EA\u9002\u5E94 FR-Designer_Font-Family=\u5B57\u4F53\u540D\u79F0 FR-Designer_Font-Size=\u5B57\u4F53\u5927\u5C0F @@ -359,7 +358,6 @@ FR-Designer_KeyPoint=\u5173\u952E\u8282\u70B9 FR-Designer_loadedTreeModel=\u52A0\u8F7D\u5931\u8D25,\u8BF7\u68C0\u67E5\u540E\u91CD\u8BD5 FR-Designer-Failed_to_load_the_plugin=\u65E0\u6CD5\u52A0\u8F7D\u63D2\u4EF6\uFF0C\u8BF7\u66F4\u65B0\u63D2\u4EF6\uFF1A FR-Designer-Plugin_Please_Update_Jar=\u8BF7\u66F4\u65B0Jar\u5305, \u63D2\u4EF6\u9700\u6C42\u6700\u4F4E\u7248\u672C -FR-Designer-Invalid_Page_Number=\u65E0\u6548\u9875\u7801 FR-Designer_Get-CubeGetting=\u83B7\u53D6cube FR-Designer_XMLA_Database=\u6570\u636E\u5E93 FR-Designer_XMLA_UserName=\u7528\u6237\u540D @@ -492,10 +490,6 @@ FR-Designer-LayerPageReport_Define_PageQuerySQL=\u5B9A\u4E49\u5206\u9875\u67E5\u FR-Designer_Is_Share_DBTableData=\u5171\u4EAB\u6570\u636E\u96C6 FR-Designer_Event=\u4E8B\u4EF6 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_Exported_successfully=\u5BFC\u51FA\u6210\u529F FR-Designer_Exporting=\u6B63\u5728\u5BFC\u51FA @@ -520,19 +514,6 @@ FR-Designer_Create_Tree=\u6784\u5EFA\u6811 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_Title=FineReport 8.0 -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_FormulaPane_Variables=\u53D8\u91CF -FR-Designer_FormulaPane_Formula_Description=\u516C\u5F0F\u8BF4\u660E -FR-Designer_FormulaPane_Function_Detail=\u51FD\u6570\u660E\u7EC6 -FR-Designer_FormulaPane_Search=\u641C\u7D22 -FR-Designer_Tab_carousel=tab\u8F6E\u64AD -FR-Designer_setCarousel=\u5F00\u542F\u8F6E\u64AD -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 @@ -540,39 +521,6 @@ 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_Null=\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}" \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_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-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_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 FR-Designer_Background_Null=\u6CA1\u6709\u80CC\u666F FR-Designer_Background_Color=\u989C\u8272 FR-Designer_Background_Texture=\u7EB9\u7406 @@ -581,1409 +529,32 @@ FR-Designer_Background_Gradient_Color=\u6E10\u53D8\u8272 FR-Designer_Background_Image=\u56FE\u7247 FR-Designer_Background_Clear=\u6E05\u9664 FR-Designer_Background_Image_Select=\u9009\u62E9\u56FE\u7247 +FR-Designer_Tab_carousel=tab\u8F6E\u64AD +FR-Designer_setCarousel=\u5F00\u542F\u8F6E\u64AD +FR-Designer_carouselInterval=\u8F6E\u64AD\u95F4\u9694 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_Click_Tips=\u9F20\u6807\u70B9\u51FB\u6309\u94AE\u65F6\u80CC\u666F\uFF0C\u82E5\u65E0\u5219\u4E0D\u6539\u53D8\u80CC\u666F -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 -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_Style=\u6837\u5F0F -FR-Designer_Color=\u989C\u8272 -FR-Designer_Border=\u8FB9\u6846 -FR-Designer_Background-Pattern=\u56FE\u6848 -FR-Designer_Edit_Button_ToolBar=\u7F16\u8F91\u6309\u94AE\u6240\u5728\u5DE5\u5177\u680F -FR-Designer_Remove_Button_ToolBar=\u79FB\u9664\u6309\u94AE\u6240\u5728\u5DE5\u5177\u680F -CellWrite-InsertRow_NULL=\u7A7A\u503C -DashBoard-ChartFloat=\u56FE\u8868 -contact_info=\u8054\u7CFB\u4FE1\u606F(\u9009\u586B) -Page_Setup=\u9875\u9762\u8BBE\u7F6E -CellWrite-Print_Export=\u6253\u5370\u5BFC\u51FA -Cannot_Get_Date=\u4E0D\u80FD\u83B7\u53D6\u65E5\u671F -FR-Designer_Modify=\u4FEE\u6539 -M-Write_Preview=\u586B\u62A5\u9884\u89C8 -FR-Base_RWA-Key=\u4E3B\u952E -China=\u4E2D\u56FD -Set_Legend_Sytle=\u8BBE\u7F6E\u56FE\u4F8B\u683C\u5F0F -FR-Designer_Number=\u6570\u5B57 -FR-Designer-Widget-Style_Common=\u666E\u901A -M-Save_As=\u53E6\u5B58\u4E3A -Following_parameters_are_not_generated=\u4EE5\u4E0B\u53C2\u6570\u672A\u751F\u6210 -FR-Designer-Basic_Activation_Key_Copy_OK=\u5DF2\u590D\u5236\u5230\u526A\u8D34\u677F -Utils-Current_Sheet=\u5F53\u524DSheet -ConditionB-is_less_than=\u5C0F\u4E8E -BorderLayout-West=\u897F -AnalysisLine=\u5206\u6790\u7EBF -Layer_Report_Warnning_info=\u884C\u5F0F\u5F15\u64CE\u9002\u7528\u4E8E\u5927\u6570\u636E\u91CF\u60C5\u5F62\u4E0B\u3002
\u4F7F\u7528\u6B64\u5F15\u64CE\u5F88\u591A\u62A5\u8868\u7279\u6027\u5C06\u4E0D\u518D\u652F\u6301\uFF0C
\u8BE6\u7EC6\u5185\u5BB9\u8BF7\u67E5\u770B\u6587\u6863\u76F8\u5173\u7AE0\u8282\u3002 -Tree-Width=\u5BBD\u5EA6 -alert_word=\u9009\u62E9\u4E0D\u56FA\u5B9A\u884C\u9AD8\u5BFC\u51FA\u65F6, \u7F16\u8F91\u5BFC\u51FA\u7684word, \u5355\u5143\u683C\u884C\u9AD8\u4F1A\u968F\u7740\u5185\u5BB9\u81EA\u52A8\u62C9\u4F38, \u6B64\u60C5\u51B5\u4E0B\u5BFC\u51FA\u7ED3\u679C\u5206\u9875\u4F4D\u7F6E\u4E0E\u9884\u89C8\u7ED3\u679C\u53EF\u80FD\u4F1A\u4E0D\u518D\u4E00\u81F4. -PageSetup-Paper_Size=\u7EB8\u5F20\u5927\u5C0F -M-Page_Setup=\u9875\u9762\u8BBE\u7F6E -DashBoard-FormBook=\u8868\u5355 -X-Coordinate=\u6A2A\u5750\u6807 -Style-Line_Spacing=\u884C\u95F4\u8DDD -FR-Designer_Plugin_Should_Update_Title=\u63D2\u4EF6\u5347\u7EA7\u63D0\u9192 -Server-Define_Data_Connection=\u5B9A\u4E49\u6570\u636E\u8FDE\u63A5 -BarInside=\u67F1\u5B50\u5185\u4FA7 -Border-Color=\u8FB9\u6846\u989C\u8272 -NotAllow=\u4E0D\u5408\u6CD5 -Utils-File_type=\u6587\u4EF6\u7C7B\u578B -FR-Designer-Plugin_Install_From_Local=\u4ECE\u672C\u5730\u6587\u4EF6\u5B89\u88C5 -Summary_Method=\u6C47\u603B\u65B9\u5F0F -Select_Specified_Grouping=\u9009\u62E9\u81EA\u5B9A\u4E49\u5206\u7EC4 -HF-Number_of_Page=\u603B\u9875\u6570 -FR-Designer-Tree_Height=\u9AD8\u5EA6 -Owner=\u4E3B -Home=\u4E3B\u9875 -FR-Server_Embedded_Server_Stop=\u5167\u7F6E\u7684\u670D\u52A1\u5668-\u505C\u6B62 -FR-Designer-Plugin_Detecting_Update=\u6B63\u5728\u68C0\u6D4B\u66F4\u65B0 -HF-Whether_to_define_the_selected_type=\u662F\u5426\u5B9A\u4E49\u9009\u4E2D\u7684\u7C7B\u578B -StyleAlignment-Right=\u9760\u53F3 -FR-Designer_Alignment-Style=\u5BF9\u9F50\u65B9\u5F0F -PageSetup-Title_Start_Column=\u91CD\u590D\u6807\u9898\u5217 -Tree-Mutiple_Selection_Or_Not=\u591A\u9009 -FR-Designer-Plugin_Search=\u641C\u7D22 -Choose_Role=\u6743\u9650\u63A7\u5236 -Append_Delete_Row_Message=\u6CE8\u610F\uFF01\u6307\u5B9A\u7684\u5355\u5143\u683C\u9700\u8981\u8BBE\u7F6E\u6269\u5C55\u5C5E\u6027 -Form-ComboBox=\u4E0B\u62C9\u6846 -PageSetup-Footer=\u9875\u811A -Sorting=\u6392\u5E8F\u4E2D -DBCP_TEST_WHILE_IDLE=\u5F00\u542F\u7A7A\u95F2\u56DE\u6536\u5668\u68C0\u9A8C -DS-Embedded_TableData=\u5185\u7F6E\u6570\u636E\u96C6 -FR-Designer_No-Privilege=\u6CA1\u6709\u6743\u9650 -FRFont-Subscript=\u4E0B\u6807 -Background_Settings=\u80CC\u666F\u8BBE\u7F6E -FormulaD-Invalid_Formula=\u975E\u6CD5\u7684\u516C\u5F0F -FR-Base_Margin=\u8FB9\u8DDD -FR-Designer-Plugin_Shop_Installed=\u63D2\u4EF6\u5546\u5E97\u5B89\u88C5\u5B8C\u6BD5,\u662F\u5426\u7ACB\u523B\u542F\u52A8? -M_Edit-Send_to_Back=\u7F6E\u4E8E\u5E95\u5C42(K) -Email-Can_Preview_Report_Content=\u6B63\u6587\u9884\u89C8\u62A5\u8868\u5185\u5BB9 -FR-Designer-FRFont_Italic=\u503E\u659C -CellWrite-Print_Background=\u6253\u5370/\u5BFC\u51FA\u5355\u5143\u683C\u80CC\u666F -Wizard=\u5411\u5BFC -Preference-Is_Drag_Permited=\u652F\u6301\u62D6\u62FD -FR-Designer_Release_Lock=\u89E3\u9501 -Form-Delimiter=\u5206\u9694\u7B26 -wrong=\u51FA\u9519\u4E86 -FR-Menu-Server_Chart_PreStyle=\u56FE\u8868\u9884\u5B9A\u4E49\u914D\u8272 -Form-Button=\u6309\u94AE -FormulaD-Valid_Formula=\u5408\u6CD5\u7684\u516C\u5F0F -ParameterD-Parameter_Interface=\u53C2\u6570\u754C\u9762 -At_least_one_visual_worksheet=\u5DE5\u4F5C\u7C3F\u4E2D\u81F3\u5C11\u8981\u6709\u4E00\u5F20\u53EF\u89C6\u5316\u5DE5\u4F5C\u8868,\u5982\u679C\u60F3\u8981\u5220\u9664\uFF0C\u8BF7\u5148\u63D2\u5165\u4E00\u5F20\u65B0\u5DE5\u4F5C\u8868 -Need_Min_Value=\u9700\u8981\u6700\u5C0F\u503C -Allow_Blank=\u5141\u8BB8\u4E3A\u7A7A -CellWrite-InsertRow_DEFAULT=\u9ED8\u8BA4\u503C -Widget-Load_By_Complete=\u5B8C\u5168\u52A0\u8F7D -FR-Designer-Basic_Only_Submit_Current_Sheet=\u53EA\u63D0\u4EA4\u5F53\u524Dsheet -Sort-Sort_Order=\u6392\u5217\u987A\u5E8F -File-File_Size_Limit=\u6587\u4EF6\u5927\u5C0F\u9650\u5236 -PrintP-Print=\u6253\u5370(T) -FR-Designer-StyleAlignment_Center=\u5C45\u4E2D -Preference-Setting_Colors=\u989C\u8272\u8BBE\u7F6E -Judge=\u5224\u65AD -Image-Adjust=\u9002\u5E94 -Collect-User_Information_DES=\u6FC0\u6D3B\u7801\u53EA\u662F\u7528\u6765\u6536\u96C6\u4F7F\u7528\u8005\u4FE1\u606F\u7684\uFF0C\u53EA\u8981\u70B9\u51FB\u4E0A\u9762\u7684"\u83B7\u53D6\u6FC0\u6D3B\u7801"\u6309\u94AE\uFF0C\u5C31\u4F1A\u5F39\u51FA\u4E00\u4E2A\u65B0\u7684\u6D4F\u89C8\u5668\u7A97\u4F53\uFF0C\u767B\u5F55\u5230\u4EA7\u54C1\u5B98\u65B9\u7F51\u7AD9\u83B7\u5F97\u8FD9\u4E2A\u6FC0\u6D3B\u7801\uFF0C\u6574\u4E2A\u8FC7\u7A0B\u53EA\u9700\u89813\u5206\u949F\uFF0C\u53EA\u9700\u8981\u64CD\u4F5C\u4E00\u6B21\uFF0C\u800C\u4E14\u5B8C\u5168\u514D\u8D39\u3002 -FR-Designer_Plugin_Normal_Update_From_Local=\u4ECE\u672C\u5730\u6587\u4EF6\u66F4\u65B0 -BackgroundTexture-Canvas=\u753B\u5E03 -BarOutSide=\u67F1\u5B50\u5916\u4FA7 -Preview_ToolTips=\u9884\u89C8\u63D0\u793A -FRFont-Family=\u540D\u5B57 -FR-Lic_does_not_Support_Remote=\u60A8\u5F53\u524D\u4F7F\u7528\u7684lic\u4E0D\u652F\u6301\u8FDC\u7A0B\u8BBE\u8BA1\u529F\u80FD\uFF0C\u8BF7\u5347\u7EA7\u60A8\u7684lic -InterfaceStyle=\u98CE\u683C -RWA-Key=\u4E3B\u952E -WF-Name=\u540D\u79F0 -RWA-Click_Cell_To_Edit_Value=\u5355\u51FB\u6A21\u677F\u5355\u5143\u683C\u4FEE\u6539\u503C -Utils-Row_Height=\u884C\u9AD8 -ReportD-Excel_Export=\u6A21\u677F\u5BFC\u51FA\u5C5E\u6027 -Form-Please_Select_A_Kind_Of_Form_Container=\u8BF7\u9009\u62E9\u4E00\u79CD\u8868\u5355\u5BB9\u5668 -Column_Does_Not_Exsit=\u5217\u4E0D\u5B58\u5728 -M_Insert-Hyperlink=\u8D85\u7EA7\u94FE\u63A5 -can_not_include_underline=\u4E0D\u80FD\u5305\u542B"_" -FR-Designer-Plugin_Jar_Expired=Jar\u5305\u8FC7\u65E7 -FR-Background_Image_Extend=\u62C9\u4F38 -TopDownShade=\u4E0A\u4E0B\u6E10\u53D8 -FR-Base_Right=\u53F3 -DataBinding=\u6570\u636E\u7ED1\u5B9A -ConnectionPool_Attr=\u8FDE\u63A5\u6C60\u5C5E\u6027 -Connect_SQL_Cannot_Null=\u6570\u636E\u8FDE\u63A5\u548CSQL\u9762\u677F\u4E0D\u80FD\u4E3A\u7A7A -DBCP_MAX_ACTIVE=\u6700\u5927\u6D3B\u52A8\u8FDE\u63A5\u6570 -M_Window-Preference=\u9009\u9879 -ToolBar_Top=\u9876\u90E8\u5DE5\u5177\u680F -FR-Designer_Indent-Pixel=\u50CF\u7D20 -FR-Designer_Unit_MM=\u6BEB\u7C73 -IDLE=\u7A7A\u95F2 -FRFont-Underline=\u4E0B\u5212\u7EBF -FR-Designer-Plugin_Read_Plugin_List_Error=\u53BB\u8BFB\u63D2\u4EF6\u5217\u8868\u65F6\u53D1\u751F\u9519\u8BEF -Type_Set=\u7C7B\u578B\u8BBE\u7F6E -M_Format_A-Cell_Attributes=\u5176\u4ED6\u5C5E\u6027 -CellWrite-Show_As_Image=\u7528\u56FE\u7247\u663E\u793A\u5185\u5BB9 -ShowAsDownload=\u7528\u4E0B\u8F7D\u94FE\u63A5\u663E\u793A\u4E8C\u8FDB\u5236\u5185\u5BB9 -Form-ComboCheckBox=\u4E0B\u62C9\u590D\u9009\u6846 -BackgroundTexture-WovenMat=\u7F16\u7EC7\u7269 -BindColumn-Custom_Data_Appearance=\u81EA\u5B9A\u4E49\u663E\u793A -Actived=\u6D3B\u52A8\u7684 -Env-Local_Directory=\u672C\u5730\u76EE\u5F55 -Form-Colon=\u5192\u53F7 -Preference-Vertical_Scroll_Bar_Visible=\u7AD6\u76F4\u6EDA\u52A8\u6761\u53EF\u89C1 -Utils-Show_Cell_Value=\u663E\u793A\u5355\u5143\u683C\u503C -FR-Designer_ReportColumns-Repeat_Row=\u590D\u5236\u884C\u5E8F\u5217 -SpecifiedG-Specified_Group=\u81EA\u5B9A\u4E49\u5206\u7EC4 -RWA-Smart_Add_Cells=\u667A\u80FD\u6DFB\u52A0\u5355\u5143\u683C -HF-Left_Section=\u5DE6\u533A\u57DF -M_Report-Report_Background=\u7EB8\u5F20\u80CC\u666F -Image-Extend=\u62C9\u4F38 -FS_BI=\u51B3\u7B56\u5E73\u53F0 -ToolBar_Bottom=\u5E95\u90E8\u5DE5\u5177\u680F -Hgap=\u6C34\u5E73\u95F4\u9699 -FR-Designer_Enter-New-FileName=\u8BF7\u8F93\u5165\u65B0\u7684\u6587\u4EF6\u540D -Verify_Fail=\u6821\u9A8C\u5931\u8D25 -CellWrite-InsertRow_Policy=\u63D2\u5165\u884C\u7B56\u7565 -FR-Designer-Plugin_Illegal_Plugin_Zip=\u4E0D\u662F\u5408\u6CD5\u7684\u63D2\u4EF6\u5305 -RCodeVersion=\u7248\u672C -Convert=\u8F6C\u6362 -Please_Drag=\u8BF7\u62D6\u5165\u884C\u5217\u5B57\u6BB5\u3001\u6C47\u603B\u5B57\u6BB5 -FR-Designer-Widget-Style_Preview=\u9884\u89C8 -mobile_number=\u624B\u673A\u53F7\u7801 -FR-Designer_Form-ComboCheckBox=\u4E0B\u62C9\u590D\u9009\u6846 -CacheValidateTime=\u62A5\u8868\u7F13\u5B58\u6709\u6548\u65F6\u95F4 -Hyperlink-Extends_Report_Parameters=\u7EE7\u627F\u62A5\u8868\u7684\u53C2\u6570 -FR-Designer_Values-Editor=\u503C\u7F16\u8F91\u5668 -Export-Excel=Excel\u683C\u5F0F -Utils-Left_to_Right=\u6A2A\u5411 -ExpandD-Vertical_Extendable=\u7EB5\u5411\u53EF\u4F38\u5C55 -Utils-Report_Runtime_Env=\u62A5\u8868\u5DE5\u4F5C\u76EE\u5F55 -Utils-Right_to_Left=\u4ECE\u53F3\u5230\u5DE6 -Utils-Beyond_the_top_side_of_Border=\u8D85\u51FA\u4E0A\u8FB9\u754C -Exception_StackTrace=\u9519\u8BEF\u5F02\u5E38\u5806\u6808\u4FE1\u606F -Corresponding_Fields=\u5BF9\u5E94\u5B57\u6BB5 -Form-CheckBox=\u590D\u9009\u6846 -Utils-Current_Row=\u5F53\u524D\u884C -BuildIn=\u5185\u7F6E -BindColumn-Results_Filter=\u7ED3\u679C\u96C6\u7B5B\u9009 -FR-Designer-Plugin_Manager=\u63D2\u4EF6\u7BA1\u7406 -M_File-Export-CSV=CSV\u683C\u5F0F(\u9017\u53F7\u5206\u9694) -Data_Filter=\u6570\u636E\u7B5B\u9009 -ReportServerP-Edit_Printer=\u7F16\u8F91\u6253\u5370\u673A -FR-Designer_Datasource-Stored_Procedure=\u5B58\u50A8\u8FC7\u7A0B -RESTART=\u91CD\u542F -FormulaD-Function_name=\u51FD\u6570\u540D -ChooseOneButton=\u8BF7\u9009\u62E9\u4E00\u4E2A\u63A7\u4EF6\u540E\u518D\u6DFB\u52A0 -Priority=\u4F18\u5148\u7EA7 -Datasource-Datasource=\u6570\u636E\u6E90 -FR-Designer_Width=\u5BBD -Cannot-Add_To_This_Area=\u65E0\u6CD5\u6DFB\u52A0\u5230\u8BE5\u533A\u57DF -Run=\u8FD0\u884C -Set_Submit_Condition=\u8BBE\u7F6E\u63D0\u4EA4\u6761\u4EF6 -FR-Base_Value=\u503C -fileLocked_undeleted=\u6A21\u677F\u88AB\u9501\u5B9A\uFF0C\u4E0D\u80FD\u5220\u9664\uFF01\u70B9\u51FB\u786E\u5B9A\uFF0C\u5237\u65B0\u6A21\u677F\u5217\u8868 -Web_Apply=WEB\u5E94\u7528 -Refresh_Database=\u5237\u65B0\u6570\u636E\u5E93 -Set_Row_Title_End=\u8BBE\u7F6E\u91CD\u590D\u7ED3\u5C3E\u884C -FR-Utils-New_Folder=\u65B0\u5EFA\u6587\u4EF6\u5939 -BiasD-From-upper_left_to_lower_right=\u4ECE\u5DE6\u4E0A\u5230\u53F3\u4E0B\u53D1\u6563 -CapsLock=\u5927\u5199\u9501\u5B9A\u5DF2\u6253\u5F00 -StyleFormat-Sample=\u793A\u4F8B -RWA-Smart_Add_Cell_Group=\u667A\u80FD\u6DFB\u52A0\u5355\u5143\u683C\u7EC4 -MConfig-CancelButton=\u53D6\u6D88 -Function-Choose_Function_Class=\u9009\u62E9\u51FD\u6570\u7C7B -LatLng=\u7ECF\u7EAC\u5EA6 -DS-Server_TableData=\u670D\u52A1\u5668\u6570\u636E\u96C6 -BackgroundTexture-GreenMarble=\u7EFF\u8272\u5927\u7406\u77F3 -read_time_out=\u52A0\u8F7D\u8D85\u65F6 -JavaScript-Commit_to_Database=\u63D0\u4EA4\u5165\u5E93 -DS-Relation_TableData=\u5173\u8054\u6570\u636E\u96C6 -CellWrite-Page_Before_Row=\u884C\u524D\u5206\u9875 -FR-Designer-Plugin_Load_Plugins_From_Server=\u6B63\u5728\u4ECE\u63D2\u4EF6\u5546\u5E97\u83B7\u53D6\u6570\u636E -D-Dispaly_Divide_Result_Set_into_Groups=\u5C06\u7ED3\u679C\u96C6\u8FDB\u884C\u5206\u7EC4 -Closed=\u5DF2\u5173\u95ED -RWA-Help=\u8BBE\u7F6E\u672A\u4FEE\u6539\u4E0D\u66F4\u65B0\u540E\uFF0C\u586B\u62A5\u9884\u89C8\u62A5\u8868\uFF0C\u8BB0\u5F55\u6240\u5728\u5355\u5143\u683C\u6CA1\u6709\u88AB\u7F16\u8F91\u4FEE\u6539\uFF0C\u5219\u6B64\u8BB0\u5F55\u4E0D\u4F1A\u8FDB\u884C\u66F4\u65B0\uFF1B\n\u5728\u5927\u6570\u636E\u91CF\u8BB0\u5F55\u67E5\u8BE2\u5E76\u56DE\u586B\u60C5\u51B5\u4E0B\uFF0C\u542F\u7528\u8BE5\u8BBE\u7F6E\uFF0C\u53EF\u4EE5\u63D0\u9AD8\u586B\u62A5\u63D0\u4EA4\u6027\u80FD\u3002 -FR-Designer-Widget-Style_Custom=\u81EA\u5B9A\u4E49 -FR-Designer-Widget-Style_Render_Style=\u6E32\u67D3\u98CE\u683C -Highlight-Barcode=\u6761\u5F62\u7801 -FR-Designer_Connect_SQL_Cannot_Null=\u6570\u636E\u8FDE\u63A5\u548CSQL\u9762\u677F\u4E0D\u80FD\u4E3A\u7A7A -trigger=\u89E6\u53D1 -M-Data_Analysis=\u6570\u636E\u5206\u6790 -Function-The_selected_file_cannot_be_null=\u6587\u4EF6\u4E0D\u80FD\u4E3A\u7A7A -No-Privilege=\u6CA1\u6709\u6743\u9650 -ReportColumns-Repeat_Column=\u590D\u5236\u5217\u5E8F\u5217 -SecondGraduationUnit=\u6B21\u8981\u523B\u5EA6\u5355\u4F4D -Form-Widget_Property_Value=\u5C5E\u6027\u503C -GIVE-NAME=\u547D\u540D -FR-Designer_Rename=\u91CD\u547D\u540D -Utils-Merge_Cell=\u5408\u5E76\u5355\u5143\u683C -Style-Spacing_After=\u6BB5\u540E -Enlarge_Or_Reduce=\u7F29\u653E -Tree-Height=\u9AD8\u5EA6 -RCodeErrorCorrect=\u7EA0\u9519 -Enter-New-FileName=\u8BF7\u8F93\u5165\u65B0\u7684\u6587\u4EF6\u540D -try_resending=\u8BF7\u5C1D\u8BD5\u91CD\u65B0\u53D1\u9001 -M-Open_Report=\u6253\u5F00... -Please_Select=\u8BF7\u9009\u62E9 -InRow=\u884C(R) -Form-TextArea=\u6587\u672C\u57DF -FR-Designer_Https_Enable=\u542F\u7528https -Widget-Custom_Widget_Config=\u81EA\u5B9A\u4E49\u63A7\u4EF6 -already_exists=\u5DF2\u7ECF\u5B58\u5728 -Original_Marked_Filed=\u539F\u59CB\u6807\u8BB0\u5B57\u6BB5 -BackgroundTexture-Sand=\u6C99\u6EE9 -Values=\u503C -Not_use_a_cell_attribute_table_editing=\u60A8\u4E0D\u53EF\u4EE5\u7528\u5355\u5143\u683C\u5C5E\u6027\u8868\u7F16\u8F91 -Root=\u6839\u8282\u70B9 -cycle=\u5468\u671F -open-new-form-tip=\u5F53\u524D\u6A21\u677F\u4E3A711\u4EE5\u4E0B\u7248\u672C\u5236\u4F5C\uFF0C\u65E0\u6CD5\u517C\u5BB9\uFF0C\u4E0D\u80FD\u6253\u5F00\u3002\u5047\u5982\u60F3\u6253\u5F00\u4FEE\u6539\u6B64\u8868\u5355\uFF0C\u8BF7\u4F7F\u7528\u5BF9\u5E94\u7248\u672C\u8BBE\u8BA1\u5668\u6253\u5F00\u3002 -Support-Current_Auto_Complete_Shortcut=\u5F53\u524D\u5FEB\u6377\u952E -GROUPING_MODE=\u666E\u901A\u5206\u7EC4 -DBCP_MAX_IDLE=\u6700\u5927\u7A7A\u95F2\u8FDE\u63A5\u6570 -BackgroundTexture-BlueTissuePaper=\u84DD\u8272\u7802\u7EB8 -ReportD-Export_Hided_Row=\u5BFC\u51FA\u9690\u85CF\u884C -FR-Custom_styles_lost=\u81EA\u5B9A\u4E49\u6837\u5F0F\u5DF2\u4E22\u5931 -Env-Des2=Servlet\u4F4D\u7F6E\u662F\u4E3B\u673A\u540D\uFF0C\u7AEF\u53E3\uFF0CWEB\u5E94\u7528\uFF0CServlet\u7684\u7EC4\u5408\uFF0C\u5B83\u5E94\u5F53\u6307\u5411\u4E00\u4E2AServlet\uFF0C\u6BD4\u5982"http\://localhost\:8080/WebReport/ReportServer"\u3002\u60A8\u53EF\u4EE5\u9009\u62E9\u586B\u5199\u4E3B\u673A\u540D\uFF0C\u7AEF\u53E3\uFF0CWEB\u5E94\u7528\uFF0CServlet\uFF0C\u5B83\u4F1A\u81EA\u52A8\u751F\u6210\u60A8\u6240\u9700\u8981\u7684Servlet\u4F4D\u7F6E\u3002 -Env-Des1=\u8BF7\u9009\u62E9\u62A5\u8868\u670D\u52A1\u5668\u6240\u5728\u7684WEB-INF\u76EE\u5F55 -PageSetup-Placement_Center_on_Page=\u5C45\u4E2D\u65B9\u5F0F -sure_to_delete=\u786E\u8BA4\u5220\u9664 -Already_exists_not_add_repeat=\u5DF2\u7ECF\u5B58\u5728\uFF0C\u8BF7\u4E0D\u8981\u91CD\u590D\u6DFB\u52A0 -Axis_Title=\u8F74\u6807\u9898 -FR-Designer-Plugin_Install_Failed=\u63D2\u4EF6\u5B89\u88C5\u5931\u8D25 -FR-Designer-Widget-Style_Frame=\u6846\u67B6 -MainGraduationUnit=\u4E3B\u8981\u523B\u5EA6\u5355\u4F4D -Second_Axis=\u6B21\u5750\u6807\u8F74 -Classifier-Ge=\u4E2A -MSBold=\u5FAE\u8F6F\u96C5\u9ED1 -Form-Design_Size=\u8BBE\u8BA1\u5C3A\u5BF8 -FR-App-Template_Save=\u4FDD\u5B58 -ExpandD-Horizontal_Extendable=\u6A2A\u5411\u53EF\u4F38\u5C55 -RP_Authority_Edit=\u6743\u9650\u7F16\u8F91 -Warnning=\u63D0\u9192 -RoleName_Can_Not_Be_Null=\u89D2\u8272\u540D\u4E0D\u5141\u8BB8\u4E3A\u7A7A\u4E14\u4E0D\u80FD\u91CD\u590D -Application=\u5E94\u7528\u7A0B\u5E8F -Formula_Dictionary_Display_Examples_Html=\u5B9E\u9645\u503C\u8303\u56F4\u4E3A \ -ECP-error_pwd=\u5BC6\u7801\u9519\u8BEF -FR-Hyperlink_ChartHyperlink=\u56FE\u8868\u8D85\u94FE -M_Edit-FormatBrush=\u683C\u5F0F\u5237(B) -Indent-Pixel=\u50CF\u7D20 -FR-Designer-Widget-Style_Border_Line=\u8FB9\u6846\u7C97\u7EC6 -Widget-Default_Widget_Config=\u57FA\u672C\u63A7\u4EF6 -Version-does-not-support=\u60A8\u5F53\u524D\u4F7F\u7528\u7684lic\u4E0D\u652F\u6301\u8FDC\u7A0B\u8BBE\u8BA1\u529F\u80FD\uFF0C\u8BF7\u5347\u7EA7\u60A8\u7684lic -StyleAlignment-Right_To_Left=\u4ECE\u53F3\u5411\u5DE6 -Style-Spacing_Before=\u6BB5\u524D -Has_Existed=\u5DF2\u7ECF\u5B58\u5728 -FR-Designer_DisplayNothingBeforeQuery=\u70B9\u51FB\u67E5\u8BE2\u524D\u4E0D\u663E\u793A\u62A5\u8868\u5185\u5BB9 -Still=\u4ECD\u7136 -JS_WARNING2=\ \u4F8B\uFF1Ahttp\://localhost\:8075/WebReport/demo.js -JS_WARNING1=\ \u76F8\u5BF9\u62A5\u8868\u5DE5\u7A0B\u76EE\u5F55\u5982WebReport,\u5982WebReport\\js\u4E0B\u6709\u5F15\u7528\u7684js\u6587\u4EF6test.js\uFF0C\u5219\u76F8\u5BF9\u8DEF\u5F84\u4E3Ajs/test.js -Connectionline=\u8FDE\u7EBF\u6A21\u5F0F -Utils-Insert_Record=\u63D2\u5165\u8BB0\u5F55 -Set-Parameter-Name=\u8BF7\u5148\u8BBE\u7F6E\u53C2\u6570\u540D -More-information=\u66F4\u591A\u4FE1\u606F -Parameter-Boolean=\u5E03\u5C14\u578B -FRFont-Strikethrough=\u5220\u9664\u7EBF -Server-version-tip=\u60A8\u5F53\u524D\u8FDE\u63A5\u7684\u670D\u52A1\u5668\u7248\u672C\u4F4E\u4E8E\u60A8\u4F7F\u7528\u7684\u8BBE\u8BA1\u5668\u7248\u672C\u53F7\uFF0C\u7EE7\u7EED\u8FDE\u63A5\uFF0C\u60A8\u7F16\u8F91\u7684\u4E00\u4E9B\u5C5E\u6027\u53EF\u80FD\u65E0\u6CD5\u6709\u6548\u4FDD\u5B58\u3002 \u5047\u5982\u9700\u8981\u8FDE\u63A5\u8BF7\u5C06\u60A8\u7684\u8BBE\u8BA1\u5668\u7248\u672C\u4E0E\u670D\u52A1\u5668\u7248\u672C\u4FDD\u6301\u4E00\u81F4 -Form-All_Files=\u5168\u90E8\u6587\u4EF6 -DBCP_NUM_TEST_PER_EVCTION_RUN=\u7A7A\u95F2\u8FDE\u63A5\u56DE\u6536\u68C0\u67E5\u6570 -FR-Designer-FRFont_Family=\u540D\u5B57 -Device=\u8BBE\u5907 -M_Insert-Cell=\u5355\u5143\u683C\u5143\u7D20 -Present-Formula_Present=\u516C\u5F0F\u5F62\u6001 -FRFont-Superscript=\u4E0A\u6807 -CellWrite-Page_Before_Column=\u5217\u524D\u5206\u9875 -Golden=\u91D1\u8272 -Preference-Support_Cell_Editor_Definition=\u652F\u6301\u5355\u5143\u683C\u7F16\u8F91\u5668 -M-Page_Preview=\u5206\u9875\u9884\u89C8 -HJS-CC_to=\u6284\u9001 -Tree-Select_Leaf_Only=\u53EA\u8FD4\u56DE\u53F6\u5B50\u8282\u70B9 -Pointer-A-Tick-Order=\u6307\u9488\u503C\u53CA\u523B\u5EA6\u503C\u6570\u91CF\u7EA7 -Pink=\u7C89\u7EA2 -StyleAlignment-Distibuted=\u5206\u6563\u5BF9\u9F50 -Odd=\u5947\u6570 -already-saved=\u5DF2\u7ECF\u4FDD\u5B58 -FR-Hyperlink_Chart_Cell=\u56FE\u8868\u8D85\u94FE-\u8054\u52A8\u5355\u5143\u683C -Style-Left_Indent=\u5DE6\u7F29\u8FDB -Offline=\u79BB\u7EBF -Form-Hierarchy_Tree_Next=\u4E0B\u4E00\u4E2A -Needle=\u6307\u9488 -GoogleMap=\u8C37\u6B4C\u5730\u56FE -Running=\u8FD0\u884C\u4E2D -M_Edit-Unmerge_Cell=\u53D6\u6D88\u5408\u5E76\u5355\u5143\u683C -Out_Border_Line=\u5916\u4FA7\u6846\u7EBF -Style-Spacing=\u95F4\u8DDD -FR-Utils_Submit=\u63D0\u4EA4 -ReportServerP-Previous=\u4E0A\u4E00\u9875 -StyleAlignment-Text_Style=\u6587\u672C\u63A7\u5236 -RelatedChart=\u56FE\u8868\u8054\u52A8 -ProcessManager=\u6D41\u7A0B\u7BA1\u7406 -Cancel_Repeat_Attributes=\u53D6\u6D88\u91CD\u590D\u884C\u5217 -FR-App-File_Message=\u4FE1\u606F -Datasource-Stored_Procedure=\u5B58\u50A8\u8FC7\u7A0B -RWA-Row_Offset=\u884C\u504F\u79FB -M_Format-Style=\u6837\u5F0F -detail_description=\u8BE6\u7EC6\u63CF\u8FF0 -FR-Designer-Widget-Style_Title_Content=\u6807\u9898\u5185\u5BB9 -ParameterD-Report_Parameter=\u62A5\u8868\u53C2\u6570 -HF-Edit_Header=\u7F16\u8F91\u9875\u7709 -Sytle-FRFont=\u5B57\u4F53 -FR-Designer_Finish_Export=\u5BFC\u51FA\u5B8C\u6BD5 -MultiFileUpload=\u591A\u6587\u4EF6\u4E0A\u4F20 -HF-Page_Number=\u9875\u7801 -Style-Right_Indent=\u53F3\u7F29\u8FDB -Desktop=\u684C\u9762 -FR-Server-All_Error=\u9519\u8BEF -ConditionB-Operator=\u64CD\u4F5C\u7B26 -Today=\u4ECA\u5929 -Form-Widget_Name=\u63A7\u4EF6\u540D -Covered_All=\u5168\u90E8\u8986\u76D6 -Day=\u5929 -External=\u5916\u90E8 -Black_Font=\u9ED1\u4F53 -LOG-Report_Server_IS_Started=\u62A5\u8868\u670D\u52A1\u5668\u5DF2\u542F\u52A8 -Tips\:You_Can_Input_B1_To_Input_The_Data_Of_The_First_Row_Second_Column=\u63D0\u793A\:\u60A8\u53EF\u4EE5\u901A\u8FC7\u8F93\u5165B1\u6765\u5199\u5165\u7B2C\u4E00\u884C\u7B2C\u4E8C\u5217\u7684\u6570\u636E\u3002 -FR-Designer_ChooseOneButton=\u8BF7\u9009\u62E9\u4E00\u4E2A\u63A7\u4EF6\u540E\u518D\u6DFB\u52A0 -Widget-Sizing=\u5927\u5C0F\u8C03\u6574 -NO_Border_Line=\u65E0\u6846\u7EBF -Cell_Data=\u5355\u5143\u683C\u6570\u636E -StyleAlignment-Vertical_Text=\u6587\u5B57\u7AD6\u6392 -Label=\u6807\u7B7E -Orange=\u6A58\u9EC4 -zeroMarginWarn=\u7531\u4E8E\u6253\u5370\u673A\u5B58\u5728\u7269\u7406\u8FB9\u8DDD
\u62A5\u8868\u7684\u9875\u8FB9\u8DDD\u8BBE\u7F6E\u8FC7\u5C0F\u53EF
\u80FD\u4F1A\u51FA\u73B0\u5185\u5BB9\u6253\u5370\u4E0D\u5168.
  -Widget-Date_Selector_Return_Type=\u8FD4\u56DE\u503C\u7C7B\u578B -Utils-Switch_To_Template_Reportlet=\u5207\u6362\u5230\u6A21\u677F\u7F51\u7EDC\u62A5\u8868 -satisfy=\u6EE1\u8DB3\u6761\u4EF6 -FR-Designer_WidgetDisplyPosition=\u63A7\u4EF6\u663E\u793A\u4F4D\u7F6E -FR-Base_Top=\u4E0A -FR-Designer_Form-CheckBox=\u590D\u9009\u6846 -Reportlet-Parameter_Type=\u53C2\u6570\u4F20\u9012\u65B9\u5F0F -sending=\u6B63\u5728\u53D1\u9001... -FR-Designer-FRFont_Foreground=\u989C\u8272 -FR-Import-Export_SVG=SVG\u683C\u5F0F -M_Edit-Clear_Contents=\u5185\u5BB9(C) -Session=\u4F1A\u8BDD -Widget-Load_Type=\u52A0\u8F7D -template_unsaved=\u65E0\u6CD5\u4FDD\u5B58\u6A21\u677F -check_communication=\u8BF7\u68C0\u67E5\u7F51\u7EDC\u901A\u8BAF\u662F\u5426\u6B63\u5E38\u53CA\u670D\u52A1\u5668\u662F\u5426\u6B63\u5E38\u8FD0\u884C -List-Need_Head=\u9700\u8981\u5217\u8868\u5934 -FR-Designer-Plugin_Has_Been_Installed=\u63D2\u4EF6\u5DF2\u5B89\u88C5\uFF0C\u82E5\u60F3\u66F4\u65B0\u63D2\u4EF6\uFF0C\u8BF7\u5207\u6362\u81F3\u63D2\u4EF6\u66F4\u65B0 -FR-Widget_Tree_And_Table=\u63A7\u4EF6\u6811\u548C\u63A7\u4EF6\u8868 -FR-Base_Help=\u5E2E\u52A9 -FR-Designer-Plugin_Update_Successful=\u63D2\u4EF6\u5347\u7EA7\u6210\u529F\uFF0C\u91CD\u542F\u670D\u52A1\u5668\u4EE5\u751F\u6548 -August=\u516B\u6708 -LOG-Is_Being_Openned=\u6B63\u5728\u6253\u5F00 -BackgroundTexture-Oak=\u6A61\u6728 -Multi_nam_formula=\ \u6570\u636E\u96C6\u540D\: \u6570\u636E\u96C6\u6761\u4EF6\: -TurnOn=\u5F00\u542F -HJS-Send_Successfully=\u53D1\u9001\u6210\u529F -Mon=\u4E00 -Inner_Parameter=\u5185\u7F6E\u53C2\u6570 -Required=\u5FC5\u586B -Summary=\u6C47\u603B -template_unopened=\u65E0\u6CD5\u6253\u5F00\u6A21\u677F -FR-Base_Bottom=\u4E0B -DataFunction-Min=\u6700\u5C0F\u503C -StyleFormat-Percent=\u767E\u5206\u6BD4 -FR-App-All_Custom=\u81EA\u5B9A\u4E49 -M_Insert-Data_Column=\u63D2\u5165\u6570\u636E\u5217 -PLEASE=\u8BF7 -Numbers=\u6570\u76EE -Release_Lock=\u89E3\u9501 -Background-Background_is_NULL=\u6CA1\u6709\u80CC\u666F -FR-Designer_Sytle-FRFont=\u5B57\u4F53 -Gradation=\u5C42\u6B21 -The_current_list_is_empty=\u5F53\u524D\u5217\u8868\u4E3A\u7A7A -Formula_Dictionary_Display_Examples=\ \u5B9E\u9645\u503C\u8303\u56F4\u4E3A \ -Schedule-Template_Parameter=\u6A21\u677F\u53C2\u6570 -JSShow=\u52A8\u6001\u5C55\u793A -Level_coordinates=\u5C42\u6B21\u5750\u6807 -MainGraduationLine=\u4E3B\u8981\u523B\u5EA6\u7EBF -Hyperlink-Web_link=\u7F51\u9875\u94FE\u63A5 -StyleAlignment-between_-90_and_90=\u5728-90\u548C90\u4E4B\u95F4 -FormulaD-Custom_Function=\u81EA\u5B9A\u4E49\u51FD\u6570 -FR-Designer_Integer=\u6574\u6570 -PageSetup-Finis_Start_Row=\u91CD\u590D\u7ED3\u5C3E\u884C -RWA-Remove_Field=\u79FB\u9664\u5B57\u6BB5 -Form-Desin_Width=\u8BBE\u8BA1\u5BBD\u5EA6 -No-tableData=\u6CA1\u6709\u8FD4\u56DE\u6570\u636E\u96C6 -Page_Total=\u5171 -FR-Designer-Plugin_Connect_Server_Error=\u65E0\u6CD5\u8FDE\u63A5\u63D2\u4EF6\u5546\u5E97\uFF0C\u8BF7\u7A0D\u5019\u518D\u8BD5 -Import-Excel_Source=Excel\u6E90\u6587\u4EF6 -Utils-Left_to_Right_a=\u4ECE\u5DE6\u5F80\u53F3 -ExpandD-Expand_Attribute=\u6269\u5C55\u5C5E\u6027 -Report-Write_Attributes=\u62A5\u8868\u586B\u62A5\u5C5E\u6027 -Utils-Current_Column=\u5F53\u524D\u5217 -Need_Max_Value=\u9700\u8981\u6700\u5927\u503C -Report_Not_Exist=\u6240\u9009\u62A5\u8868\u4E0D\u5B58\u5728\uFF01 -HF-Insert_Content=\u63D2\u5165\u5185\u5BB9 -UpParent=\u4E0A\u7236\u683C -PageSetup-Page=\u9875\u9762 -Utils-Move_Up=\u4E0A\u79FB -BackgroundTexture-PurpleMesh=\u7D2B\u8272\u7F51\u683C -Export-Word=Word\u683C\u5F0F -ServerM-Widget_Manager=\u63A7\u4EF6\u7BA1\u7406 -FR-Designer-Basic_Activation_Key=\u8BBE\u8BA1\u5668\u7F16\u53F7\uFF1A -FR-App-Template_Report_Not_Exist=\u6240\u9009\u62A5\u8868\u4E0D\u5B58\u5728\! -Protected=\u4FDD\u62A4 -Skip=\u8DF3\u8FC7 -FR-Designer_PageSetup-Vertically=\u5782\u76F4\u5C45\u4E2D -revert=\u64A4\u9500 -PageSetup-Predefined=\u9884\u5B9A\u4E49 -Border-Style-Radius=\u5706\u89D2\u8FB9\u6846 -IntPart=\u6574\u6570\u90E8\u5206 -ExpandD-Data_Column=\u6570\u636E\u5217 -Sort-Ascending=\u5347\u5E8F -FR-Designer-Widget_Style=\u6837\u5F0F -parameter_name_exist=\u8BE5\u53C2\u6570\u540D\u5DF2\u5B58\u5728 -FR-Designer_Layer-Build=\u666E\u901A\u5206\u5C42\u6784\u5EFA -Please_Rename=\u8BF7\u91CD\u547D\u540D -Form-Editing_Listeners=\u4E8B\u4EF6\u7F16\u8F91 -RWA-Smart_Add_Fields=\u667A\u80FD\u6DFB\u52A0\u5B57\u6BB5 -FR-Designer-Tree_Width=\u5BBD\u5EA6 -Record=\u8BB0\u5F55 -Poly-Report_Component=\u805A\u5408\u62A5\u8868\u7EC4\u4EF6 -Options=\u9009\u9879 -NS-war-remote=\u9519\u8BEF\u4EE3\u7801\:1117 \u538B\u7F29\u90E8\u7F72\u4E0D\u652F\u6301\u8FDC\u7A0B\u8BBE\u8BA1 -Sche-Minute=\u5206 -Three_Rows_Of_Three_Grid=\u4E09\u884C\u4E09\u5217\u7684\u683C\u5B50 -WorkSheet=\u81EA\u7531\u62A5\u8868 -FR-Designer-Widget_Size=\u63A7\u4EF6\u5927\u5C0F -BindColumn-Select=\u5217\u8868 -FR-Widget_Mobile_Terminal=\u79FB\u52A8\u7AEF -FR-Background_Image_Titled=\u5E73\u94FA -SetPrinterOffset=\u6253\u5370\u673A\u504F\u79FB -FR-Designer-Plugin_Installed=\u5DF2\u5B89\u88C5 -FR-Designer-Hyperlink_Name=\u540D\u5B57 -FR-Designer_Form-Button=\u6309\u94AE -Black=\u9ED1\u8272 -FR-Designer-Widget-Style_Border_Color=\u8FB9\u6846\u989C\u8272 -Set_Submit_Event=\u8BBE\u7F6E\u63D0\u4EA4\u4E8B\u4EF6 -PDF-Print_isPopup=\u662F\u5426\u5F39\u51FA\u8BBE\u7F6E\u6846 -LayerPageReport_CountPerPage=\u6BCF\u9875\u8BB0\u5F55\u6570 -Display_Modes=\u663E\u793A\u6A21\u5F0F -RowSpan=\u884C\u8DE8\u5EA6 -Datasource-Test_Connection=\u6D4B\u8BD5\u8FDE\u63A5 -Function-Function_Manager=\u51FD\u6570\u7BA1\u7406\u5668 -Host_Name=\u4E3B\u673A\u540D -CellWrite-Show_As_HTML=\u7528HTML\u663E\u793A\u5185\u5BB9 -FR-Designer-Widget-Style_Shadow=\u9634\u5F71 -FR-Designer_Parameter_String=\u5B57\u7B26\u4E32 -Form-SupportTag=\u6807\u7B7E\u5F62\u5F0F\u663E\u793A -ReportD-Report_Write_Attributes=\u62A5\u8868\u586B\u62A5\u5C5E\u6027 -DataFunction-Count=\u4E2A\u6570 -Top_And_Thick_Bottom_Border_Line=\u4E0A\u6846\u7EBF\u548C\u7C97\u4E0B\u6846\u7EBF -Client=\u5BA2\u6237\u7AEF -BindColumn-Result_Serial_Number_Start_From_1=\u5E8F\u53F7\u4ECE1\u5F00\u59CB -History=\u5386\u53F2 -Already_exists=\u5DF2\u5B58\u5728\uFF0C\u8BF7\u91CD\u65B0\u8F93\u5165\uFF01 -Datasource-Original_Charset=\u539F\u59CB\u7F16\u7801 -FR-Base_Left=\u5DE6 -ReportServerP-Next=\u4E0B\u4E00\u9875 -BindColumn-Top_N=\u524DN\u4E2A -Animation_Special=\u7279\u6548 -Widget-Chart_Widget_Config=\u56FE\u8868\u63A7\u4EF6 -FR-Designer-Plugin_Cannot_Update_Not_Install=\u65E0\u6CD5\u66F4\u65B0\u63D2\u4EF6\uFF0C\u8BF7\u68C0\u67E5\u8BE5\u63D2\u4EF6\u662F\u5426\u5DF2\u7ECF\u6210\u529F\u5B89\u88C5 -After_Changed_Some_Attributes_Are_Different=\u8F6C\u6362\u540E\u62A5\u8868\u7684\u67D0\u4E9B\u5C5E\u6027\u4F1A\u53D1\u751F\u6539\u53D8\uFF0C\u662F\u5426\u7EE7\u7EED -PieStyle=\u997C\u72B6 -HF-Are_you_sure_to_delete_it=\u4F60\u786E\u5B9E\u60F3\u5220\u9664\u8FD9\u4E2A\u5143\u7D20\u5417 -Utils-Design-File_Open=\u6253\u5F00 -FR-Utils_Label=\u6807\u7B7E -Data-Label=\u6807\u7B7E -M_Insert-Text=\u63D2\u5165\u666E\u901A\u6587\u672C -Form-View_Tree=\u89C6\u56FE\u6811 -M_Insert-Chart=\u63D2\u5165\u56FE\u8868 -HF-Even_Page=\u5076\u6570\u9875 -ReportServerP-Report_server_parameter=\u62A5\u8868\u670D\u52A1\u5668\u53C2\u6570 -JavaScript-Form_Submit=\u8868\u5355\u63D0\u4EA4 -Horizontal-Split_Layout=\u6C34\u5E73\u5206\u5272\u5E03\u5C40 -BorderLayout-Center=\u4E2D -INFO-Reset_Webapp=\u91CD\u7F6E\u5E94\u7528\u670D\u52A1\u5668 -FR-Designer_Text=\u6587\u672C -IN_and_INOUT_type_not_as_cursor=IN\u548CINOUT\u7C7B\u578B\u4E0D\u53EF\u4EE5\u4F5C\u4E3A\u6E38\u6807 -Main_Axis=\u4E3B\u5750\u6807\u8F74 -M_Edit-Cut=\u526A\u5207(T) -Utils-The_Name_has_been_existed=\u6B64\u540D\u5DF2\u7ECF\u5B58\u5728 -FR-Background_Image=\u56FE\u7247 -Character=\u6587\u5B57 -Unit_Thousand=\u5343 -Test=\u6D4B\u8BD5 -Utils-Would_you_like_to_save=\u4F60\u662F\u5426\u9700\u8981\u4FDD\u5B58 -HF-Header_and_Footer=\u7709\u5934\u548C\u7709\u811A -LIST_MODE=\u5217\u8868 -HF-Insert_Image=\u63D2\u5165\u56FE\u7247 -FR-Designer-Widget-Style_Standard=\u6807\u51C6 -FR-Designer_Form-List=\u5217\u8868 -BackgroundTexture-Denim=\u659C\u7EB9\u5E03 -Execute_Report_by_Layer_Engine=\u7528\u884C\u5F0F\u7684\u5F15\u64CE\u6765\u6267\u884C\u62A5\u8868 -M_Edit-Bring_Forward=\u4E0A\u79FB\u4E00\u5C42(F) -Choose_All=\u5168\u9009 -Form-RadioGroup=\u5355\u9009\u6309\u94AE\u7EC4 -FR-Base_Remove=\u5220\u9664 -FR-Remote_Connect2Server_Again=\u8FDE\u63A5\u4E2D\u65AD\uFF0C\u662F\u5426\u91CD\u65B0\u8FDE\u63A5\u670D\u52A1\u5668? -Semicolon=\u5206\u53F7 -StyleFormat-Category=\u5206\u7C7B -Report_Template=\u62A5\u8868\u6A21\u677F -Utils-Beyond_the_right_side_of_Border=\u8D85\u51FA\u53F3\u8FB9\u754C -BackgroundTexture-Papyrus=\u7EB8\u838E\u8349\u7EB8 -LayerPageReport_PageEngine=\u4F7F\u7528\u6309\u9875\u8FD0\u7B97\u5206\u6BB5\u6267\u884C\u62A5\u8868 -Schedule-The_selected_file_must_be_end_with_filter=\u9009\u62E9\u7684\u6587\u4EF6\u5FC5\u987B\u4EE5.cpt\u6216\u8005.class\u6216\u8005.frm\u7ED3\u5C3E\u3002 -Provide=\u63D0\u4F9B -FormulaD-Math_&_Trig=\u6570\u5B66\u548C\u4E09\u89D2\u51FD\u6570 -FR-Designer-StyleAlignment_Right=\u9760\u53F3 -Error_TableDataNameRepeat=\u5DF2\u7ECF\u5728\u670D\u52A1\u5668\u6570\u636E\u96C6\u4E2D\u5B58\u5728\u6216\u8005\u591A\u4E2A\u6570\u636E\u96C6\u540D\u91CD\u590D\u3002 -Choose_None=\u4E0D\u9009 -File-tree=\u6587\u4EF6\u6811 -FRFont-bold=\u52A0\u7C97 -FR-Designer_Set_Submit_Condition=\u8BBE\u7F6E\u63D0\u4EA4\u6761\u4EF6 -Form-Change_Widget_Name=\u66F4\u6539\u63A7\u4EF6\u540D -ReportColumns-Report_Columns=\u62A5\u8868\u5206\u680F -Can_not_use_FormatBursh=\u4E0D\u80FD\u5BF9\u591A\u91CD\u9009\u5B9A\u533A\u57DF\u4F7F\u7528\u683C\u5F0F\u5237\! -CellElement-Property_Table=\u5355\u5143\u683C\u5C5E\u6027\u8868 -Dictionary-Dynamic_SQL=\u52A8\u6001SQL -FR-Designer_Form-CheckBoxGroup=\u590D\u9009\u6846\u7EC4 -DBCP_TIME_BETWEEN_EVICTIONRUNSMILLIS=\u7A7A\u95F2\u8FDE\u63A5\u56DE\u6536\u5668\u4F11\u7720\u65F6\u95F4 -ReportD-Export_Hided_Column=\u5BFC\u51FA\u9690\u85CF\u5217 -Preference-Support_Undo=\u652F\u6301\u64A4\u9500 -FR-mobile_report_analysis=\u62A5\u8868\u89E3\u6790 -Month=\u6708 -Utils-Column_Width=\u5217\u5BBD -Collect-Use_Designer=\u4F7F\u7528\u8BBE\u8BA1\u5668 -Widget-User_Defined_Editor=\u9884\u5B9A\u4E49\u7F16\u8F91\u5668\uFF0C\u8BE5\u7F16\u8F91\u5668\u53EA\u80FD\u5728\u63A7\u4EF6\u7BA1\u7406\u83DC\u5355\u91CC\u66F4\u6539\u5176\u5C5E\u6027 -Unit_Ten_Thousand=\u4E07 -Data_Setting=\u6570\u636E\u8BBE\u7F6E -ECP_input_pwd=\u8BF7\u8F93\u5165\u5BC6\u7801\: -period=\u3002 -Note=\u5907\u6CE8 -Multiline=\u591A\u884C\u7F16\u8F91 -Datasource-Convert_Charset=\u7F16\u7801\u8F6C\u6362 -DashBoard-ConnectionList=\u6570\u636E\u8FDE\u63A5 -Utils-Submit_Forcibly=\u5F3A\u884C\u63D0\u4EA4 -Parent_Marked_Field=\u7236\u6807\u8BB0\u5B57\u6BB5 -Logout=\u9000\u51FA -FR-Designer_Show_Blank_Row=\u8865\u5145\u7A7A\u767D\u884C -FR-Base_Format=\u683C\u5F0F -FR-App-Export_png=PNG\u683C\u5F0F -Delete_Column=\u5220\u9664\u5217 -SecondGraduationLine=\u6B21\u8981\u523B\u5EA6\u7EBF -SpecifiedG-Groups=\u7EC4 -CONTINUUM_MODE=\u76F8\u90BB\u8FDE\u7EED\u5206\u7EC4 -Datasource-Connection_failed=\u8FDE\u63A5\u5931\u8D25 -CategoryName=\u5206\u7C7B\u540D -DBCP_INITIAL_SIZE=\u521D\u59CB\u5316\u8FDE\u63A5\u6570 -Colors=\u989C\u8272 -FR-Import-Export_CSV=CSV\u683C\u5F0F(\u9017\u53F7\u5206\u9694) -FR-Designer-StyleAlignment_Left=\u9760\u5DE6 -BackgroundTexture-PaperBag=\u7EB8\u888B -RWA-BuildIn_SQL=\u5185\u7F6ESQL -SingleLayer=\u5355\u5C42 -Or-you=\u6216\u8005\u60A8 -FR-Designer_Certificate_Path=\u8BC1\u4E66\u8DEF\u5F84 -Utils-Last_Page=\u6700\u540E\u4E00\u9875 -BarCodeD-Drawing_Text=\u663E\u793A\u6761\u5F62\u7801\u7684\u6587\u672C -Warning-Template_Do_Not_Exsit=\u6A21\u677F\u4E0D\u5B58\u5728 -BindColumn-Group=\u5206\u7EC4 -Export-SVG=SVG\u683C\u5F0F -Plane3D=\u5E73\u97623D -SessionID=sessionID\u662F\u5F53\u524D\u8BBF\u95EE\u6A21\u677F\u7684\u4F1A\u8BDD\u6807\u8BC6\u53C2\u6570\u3002 -FR-Designer_Height=\u9AD8 -HF-Odd_Page=\u5947\u6570\u9875 -About-All_Rights_Reserved=\u4FDD\u7559\u6240\u6709\u7684\u6743\u5229 -Utils-Current_Cell=\u5F53\u524D\u683C\u5B50 -Web_Preview_Message=\u8BF7\u5C06\u6A21\u677F\u6587\u4EF6\u4FDD\u5B58\u5728\u5F53\u524D\u8FD0\u884C\u73AF\u5883\u76EE\u5F55\u4E0B -FR-Hyperlink_Chart_Float=\u56FE\u8868\u8D85\u94FE-\u8054\u52A8\u60AC\u6D6E\u5143\u7D20 -Dic-Data_Query=\u6570\u636E\u67E5\u8BE2 -CellWrite-Print_Content=\u6253\u5370/\u5BFC\u51FA\u5355\u5143\u683C\u5185\u5BB9 -Privilege-Selected_None_Of_Any_Items=\u6CA1\u6709\u9009\u4E2D\u4EFB\u4F55\u4E00\u9879 -FRFont-Size=\u5927\u5C0F -Function-J2EE_server=J2EE\u670D\u52A1\u5668 +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 -Build_Tree_Accord_Parent_Marked_Filed=\u4F9D\u8D56\u6240\u9009\u6570\u636E\u96C6\u7684\u7236\u6807\u8BB0\u5B57\u6BB5\u6784\u5EFA\u6811 -Preference-Horizontal_Scroll_Bar_Visible=\u6C34\u5E73\u6EDA\u52A8\u6761\u53EF\u89C1 -Scope=\u8303\u56F4 -Save_All_Records_In_Memory=\u6240\u6709\u8BB0\u5F55\u90FD\u4FDD\u5B58\u5728\u5185\u5B58\u4E2D -FreezeWarning1=\u521D\u59CB\u503C\u4E0D\u5927\u4E8E\u5C3E\u503C -FlowLayout=\u6D41\u5F0F\u5E03\u5C40 -M_Report-Report_Footer=\u62A5\u8868\u9875\u811A -FR-Action_Add=\u589E\u52A0 -BorderLayout-East=\u4E1C -feedback_tip=\u8BF7\u8F93\u5165\u4E0D\u8D85\u8FC7400\u4E2A\u5B57\u7684\u95EE\u9898\u63CF\u8FF0 -FS_Start_Date=\u8D77\u59CB\u65E5\u671F -FR-ConditionB_Operator=\u64CD\u4F5C\u7B26 -Printer-Alias=\u522B\u540D -DS-Class_Name=\u7C7B\u540D -FR-Designer-Plugin_Has_Been_Disabled=\u63D2\u4EF6\u5DF2\u88AB\u7981\u7528\uFF0C\u91CD\u542F\u8BBE\u8BA1\u5668\u53CA\u670D\u52A1\u5668\u751F\u6548\uFF0C\u670D\u52A1\u5668\u9700\u624B\u52A8\u91CD\u542F -Sort-Original=\u4E0D\u6392\u5E8F -Utils-Top_to_Bottom_a=\u4ECE\u4E0A\u5F80\u4E0B -Parameter-String=\u5B57\u7B26\u4E32 -InnerRadis=\u5185\u5F84\u5927\u5C0F -Want_To_Cover_It=\u662F\u5426\u60F3\u8986\u76D6\u5B83 -Divided_stage=\u5212\u5206\u9636\u6BB5 -Seriously=\u4E25\u91CD -ReportServerP-PDF=PDF -Utils-Switch_To_Class_Reportlet=\u5207\u6362\u5230\u7A0B\u5E8F\u7F51\u7EDC\u62A5\u8868 -FR-Designer_Show_Blank_Column=\u8865\u5145\u7A7A\u767D\u5217 -M_Edit-Redo=\u91CD\u505A -Visibility=\u53EF\u89C1\u6027 -Series_Use_Default=\u7CFB\u5217\u9ED8\u8BA4\u4F7F\u7528 -Has_Selected=\u5DF2\u7ECF\u9009\u62E9 -BackgroundTexture-Walnut=\u80E1\u6843 -FormulaD-Function_category=\u51FD\u6570\u7C7B\u578B -Interface=\u63A5\u53E3 -FR-Designer-Beyond_Bounds=\u8D85\u51FA\u6216\u8005\u5C0F\u4E8Ebody\u8FB9\u754C\uFF0C\u4E0D\u80FD\u8C03\u6574\u5927\u5C0F -seconds=\u79D2 -Auto-Build=\u81EA\u52A8\u6784\u5EFA -FR-Designer-Plugin_Install_Successful=\u8BE5\u63D2\u4EF6\u5C06\u5728\u91CD\u65B0\u542F\u52A8\u8BBE\u8BA1\u5668\u53CA\u670D\u52A1\u5668\u65F6\u88AB\u542F\u7528\uFF0C\u670D\u52A1\u5668\u9700\u624B\u52A8\u91CD\u542F -Template_Path=\u6A21\u677F\u8DEF\u5F84 -FR-Designer-FRFont_Bold=\u52A0\u7C97 -Poly_Name=\u805A\u5408\u5757\u540D -WorkBook=\u5DE5\u4F5C\u7C3F -Hyperlink-Self_Window=\u5F53\u524D\u7A97\u53E3 -FR-Designer-Widget-Style_Title=\u6807\u9898 -FR-Designer-FRFont_Size=\u5927\u5C0F -M_File-Export-SVG=SVG\u683C\u5F0F -Capacity=\u5BB9\u91CF -Rose_Red=\u73AB\u7470\u7EA2 -StyleAlignment-The_value_of_rotation_must_between_-90_and_90_degrees=\u65CB\u8F6C\u503C\u5FC5\u987B\u5728\u8D1F90\u5EA6\u523090\u5EA6 -HF-Move_Left=\u5DE6\u79FB -Cell_Group=\u5355\u5143\u683C\u7EC4 -Week=\u5468 -PageSetup-Orientation=\u65B9\u5411 -M-Open_Recent=\u6700\u8FD1\u6253\u5F00\u7684 -NNormal=\u6B63\u5E38 -Integer=\u6574\u6570 -Select_The_Source_To_Save=\u9009\u62E9\u8981\u5B58\u50A8\u7684\u9879\u76EE -Transition=\u5206\u652F -FR-Designer_Get_Lock=\u52A0\u9501 -one_record_exists_in_many_groups=\u4E00\u4E2A\u8BB0\u5F55\u53EF\u4EE5\u5B58\u5728\u4E8E\u591A\u4E2A\u7EC4\u4E2D -FR-Designer_Cover_None=\u5168\u4E0D\u8986\u76D6 -DeciPart=\u5C0F\u6570\u90E8\u5206 -ExpandD-Up_Father_Cell=\u4E0A\u7236\u683C -Deep=\u6DF1\u5EA6 -FRFont-Shadow=\u9634\u5F71 -Reportlet=\u7F51\u7EDC\u62A5\u8868 -Calendar=\u65E5\u5386 -DateFormat-Custom_Warning=\u6CE8\uFF1A\u81EA\u5B9A\u4E49\u65E5\u671F\u683C\u5F0F\u4E0D\u652F\u6301\u683C\u5F0F\u6821\u9A8C -Unit_MM=\u6BEB\u7C73 -Server-Start=\u542F\u52A8 -CellPage-Can_Break_On_Paginate=\u5206\u9875\u65F6\u53EF\u4EE5\u65AD\u5F00 -Build_Tree_Accord_Marked_Filed_Length=\u4F9D\u8D56\u6240\u9009\u6570\u636E\u96C6\u7684\u6807\u8BB0\u5B57\u6BB5\u7684\u957F\u5EA6\u6784\u5EFA\u6811 -ComboCheckBox-Start_Symbol=\u8D77\u59CB\u7B26 -Real=\u5B9E\u9645 -RWA-Batch_Modify_Cells=\u6279\u91CF\u4FEE\u6539\u5355\u5143\u683C -FR-Designer_Build-Way=\u6784\u5EFA\u65B9\u5F0F -Read=\u8BFB\u53D6 -StyleAlignment-Degrees=\u5EA6\u6570 -M_Format_A-Border=\u8FB9\u6846(B) -Utils-Delete_Record=\u5220\u9664\u8BB0\u5F55 -Reload=\u91CD\u8F7D -Image-Select_Picture=\u9009\u62E9\u56FE\u7247 -RWA-Submit=\u63D0\u4EA4 -the_template=\u8BE5\u6A21\u677F -FR-Designer_Component_Scale=\u7EC4\u4EF6\u7F29\u653E -FRFont-italic=\u503E\u659C -Year=\u5E74 -HF-Move_Right=\u53F3\u79FB -Data-Check=\u6570\u636E\u76D1\u63A7 -Unknown=\u672A\u77E5 -Submit_Style=\u63D0\u4EA4\u65B9\u5F0F -Left_Border_Line=\u5DE6\u6846\u7EBF -Brown=\u8910\u8272 -Select_A_Tree_DataSource_To_Build=\u9009\u62E9\u4E00\u4E2A\u6811\u6570\u636E\u96C6\u6765\u6784\u5EFA -Overlapping=\u91CD\u53E0\u578B -DS-Class_TableData=\u7A0B\u5E8F\u6570\u636E\u96C6 -FR-Designer-Plugin_Illegal_Plugin_Zip_Cannot_Be_Install=\u4E0D\u53EF\u8BC6\u522B\u7684\u63D2\u4EF6\uFF0C\u65E0\u6CD5\u5B89\u88C5 -DisplayNothingBeforeQuery=\u70B9\u51FB\u67E5\u8BE2\u524D\u4E0D\u663E\u793A\u62A5\u8868\u5185\u5BB9 -Y_Axis=Y\u8F74 -FormulaD-Most_Recently_Used=\u5E38\u7528\u51FD\u6570 -FormulaD-Input_formula_in_the_text_area_below=\u8BF7\u5728\u4E0B\u9762\u7684\u6587\u672C\u7F16\u8F91\u6846\u91CC\u9762\u8F93\u5165\u516C\u5F0F -Build-Way=\u6784\u5EFA\u65B9\u5F0F -M_Edit-Undo=\u64A4\u9500 -Line-Style=\u7EBF\u578B -Datasource-Other_Attributes=\u5176\u4ED6\u5C5E\u6027 -M_Server-Global_Parameters=\u5168\u5C40\u53C2\u6570 -Suffix=\u540E\u7F00 -Image-Image_Files=\u56FE\u7247\u6587\u4EF6 -EditRC-Entire_row=\u6574\u884C(R) -HF-First_Page=\u9996\u9875 -BackgroundTexture-Granite=\u82B1\u5C97\u5CA9 -DataList=\u6570\u636E\u94FE -Recursion=\u9012\u5F52 -BarStyle=\u6761\u5F62 -FR-Designer-Min_Width=\u6700\u5C0F\u5BBD\u5EA6 -Utils-Report-Env_Directory=\u62A5\u8868\u5DE5\u4F5C\u76EE\u5F55 -D-ChartArea=\u56FE\u8868\u533A -Only=\u53EA -FR-Base_No=\u5426 -SpecifiedG-Put_all_others_together=\u628A\u5176\u5B83\u6240\u6709\u7684\u5408\u5E76 -HF-NewLine_Des=\u53EF\u4EE5\u70B9\u51FB\u4E0A\u9762\u7684\u79FB\u52A8\u548C\u5220\u9664\u6309\u94AE\u6765\u64CD\u4F5C\u6362\u884C\u7B26 -WLayout-Border-ThreeContainer=\u62E5\u6709\u5317\u3001\u897F\u548C\u4E2D\u4E09\u5757\u7684\u8FB9\u754C\u5E03\u5C40\u5BB9\u5668\uFF0C\u5176\u4E2D\u5317\u90E8\u5757\u53EF\u4EE5\u6839\u636E\u9700\u8981\u8C03\u6574\u9AD8\u5EA6\uFF0C\u897F\u90E8\u5757\u53EF\u4EE5\u6839\u636E\u9700\u8981\u8C03\u6574\u5BBD\u5EA6 -Parameter_Name=\u53C2\u6570\u540D -FR-Base_Table=\u8868 -Des-Remove_WorkSheet=\u8981\u5220\u9664\u7684\u8868\u53EF\u80FD\u5B58\u5728\u6570\u636E,\u5982\u679C\u8981\u6C38\u4E45\u5220\u9664\u8FD9\u4E9B\u6570\u636E,\u8BF7\u6309'\u786E\u5B9A'\u6309\u94AE. -Rotation=\u65CB\u8F6C -Undefined=\u672A\u5B9A\u4E49 -Support-Auto_Complete_Shortcut=\u81EA\u52A8\u8865\u5168\u5FEB\u6377\u952E -Set_Column_Title_End=\u8BBE\u7F6E\u91CD\u590D\u7ED3\u5C3E\u5217 -Submit_Url=\u63D0\u4EA4\u5730\u5740 -ReportServerP-Are_you_sure_to_delete_the_selected_printer=\u4F60\u786E\u5B9E\u60F3\u5220\u9664\u9009\u4E2D\u7684\u6253\u5370\u673A\u5417 -long_data_can_not_show_fully=\u957F\u6570\u636E\u663E\u793A\u4E0D\u5168 -Utils-Beyond_the_bottom_side_of_Border=\u8D85\u51FA\u4E0B\u8FB9\u754C -FR-Import-Export_PDF=PDF\u683C\u5F0F -Form-CheckBoxGroup=\u590D\u9009\u6846\u7EC4 -Click-Me=\u70B9\u6211\u6709\u60CA\u559C\u54E6\uFF01 -Hyperlink-Self=\u5728\u539F\u7F51\u9875\u4E2D\u6253\u5F00\u94FE\u63A5(S) -Tree-Select_Leaf_Only_Tips=\uFF08\u4E0D\u52FE\u9009\u6B64\u9879\u65F6\uFF0C\u8FD4\u56DE\u503C\u4EC5\u4E3A\u7528\u6237\u52FE\u9009\u7684\u5F53\u524D\u8282\u70B9\u800C\u4E0D\u5305\u62EC\u5176\u5B50\u8282\u70B9\uFF09 -StyleAlignment-Text_Rotation=\u6587\u672C\u65B9\u5411 -Format-Error=\u8F93\u5165\u7684\u503C\u683C\u5F0F\u4E0D\u6B63\u786E -Server-Stop=\u505C\u6B62 -Preference-Setting_Grid=\u7F51\u683C\u8BBE\u7F6E -ReportServerP-Add_Printer=\u589E\u52A0\u6253\u5370\u673A -FR-Designer-Plugin_Active=\u542F\u7528 -Utils-File_name=\u6587\u4EF6\u540D -NOT_NULL_Des=\u4E0D\u80FD\u4E3A\u7A7A -Right_Border_Line=\u53F3\u6846\u7EBF -EditRC-Entire_column=\u6574\u5217(C) -PageSetup-Top_to_bottom=\u5148\u5217\u540E\u884C -Click-Get_Default_URL=\u70B9\u51FB\u6B64\u6309\u94AE\u83B7\u5F97\u9ED8\u8BA4URL -StyleAlignment-Wrap_Text=\u81EA\u52A8\u6362\u884C -Remove_All_Button=\u6E05\u9664\u6240\u6709\u6309\u94AE -FR-Designer_Component_Interval=\u7EC4\u4EF6\u95F4\u9694 -ReportColumns-Columns_vertically=\u5217\u5206\u680F -ReportGUI-Print_Background=\u6253\u5370/\u5BFC\u51FA\u62A5\u8868\u80CC\u666F -Export-CSV=CSV\u683C\u5F0F(\u9017\u53F7\u5206\u9694) -M_Edit-Paste=\u7C98\u8D34(P) -FR-Designer-Basic_Restart_Designer=\u91CD\u542F\u8BBE\u8BA1\u5668 -ReportServerP-PDF2-INFO=\u4EC5\u5728LINUX/UNIX\u4E0B\u672A\u5B89\u88C5\u4E2D\u6587\u5B57\u4F53\u65F6\u4F7F\u7528 -FormulaD-Check_Valid=\u68C0\u67E5\u5408\u6CD5\u6027 -server_disconnected=\u8FDE\u63A5\u5DF2\u65AD\u5F00 -ParameterD-Parameter_name_cannot_be_null=\u53C2\u6570\u7684\u540D\u5B57\u4E0D\u53EF\u4EE5\u4E3A\u7A7A -FR-Designer-Plugin_Version_Is_Lower_Than_Current=\u5347\u7EA7\u5305\u7684\u63D2\u4EF6\u7248\u672C\u6CA1\u6709\u6BD4\u5F53\u524D\u7684\u9AD8 -RWA-NotChange_Unmodified=\u672A\u4FEE\u6539\u4E0D\u66F4\u65B0 -User_Information=\u7528\u6237\u4FE1\u606F -Custom_styles_lost=\u81EA\u5B9A\u4E49\u6837\u5F0F\u5DF2\u4E22\u5931 -PageSetup-Margin=\u9875\u8FB9\u8DDD -M-New_FormBook=\u65B0\u5EFA\u8868\u5355 -Widget-TreeNode=\u6811\u8282\u70B9\u6309\u94AE -Form-Url=\u5730\u5740 -Utils-Beyond_the_left_side_of_Border=\u8D85\u51FA\u5DE6\u8FB9\u754C -Float_Element_Name=\u60AC\u6D6E\u5143\u7D20\u540D\u79F0 -Purple=\u7C89\u7D2B -DashBoard-Potence=\u6743\u9650 -M-Close_Template=\u5173\u95ED\u6A21\u677F(C) -paper=\u7EB8\u5F20 -Not_Exsit=\u4E0D\u5B58\u5728\u4E8E\u62A5\u8868 -Utils-Insert_Row=\u63D2\u5165\u884C -Utils-Delete_Row=\u5220\u9664\u884C -not_support_authority_edit=\u8BE5\u5143\u7D20\u4E0D\u652F\u6301\u6743\u9650\u63A7\u5236 -Formula_Tips=\u516C\u5F0F\u5FC5\u987B\u4EE5"\ -FR-Action_Copy=\u590D\u5236 -Compile_Success=\u7F16\u8BD1\u6210\u529F -BackgroundTexture-RecycledPaper=\u518D\u751F\u7EB8 -StyleAlignment-Single_Line=\u5355\u884C\u663E\u793A -Utils-Move_Down=\u4E0B\u79FB -Please_Set_Repeat_First=\u8BF7\u5148\u8BBE\u7F6E\u91CD\u590D\u6807\u9898\u884C\u548C\u5217 -Writer-ShortCuts_Setting=\u586B\u62A5\u5FEB\u6377\u952E\u8BBE\u7F6E -Verify-Data_Verify=\u6570\u636E\u6821\u9A8C -FR-mobile_analysis_style=\u89E3\u6790\u65B9\u5F0F -Confirm-Delete-File=\u662F\u5426\u5220\u9664\u6240\u9009\u6587\u4EF6\uFF1F -PageSetup-Header=\u9875\u7709 -JavaScrit-Asynch=\u5F02\u6B65 -ReportServerP-Toolbar=\u5DE5\u5177\u680F -Utils-Top_to_Bottom=\u7EB5\u5411 -Platform=\u5E73\u53F0 -FR-Designer-FRFont_Underline=\u4E0B\u5212\u7EBF -Show_in_Containing_Folder=\u6253\u5F00\u6240\u5728\u6587\u4EF6\u5939 -BackgroundTexture-WaterDroplets=\u6C34\u6EF4 -FR-Designer-Dependence_Install_Failed=\u4F9D\u8D56\u5B89\u88C5\u5931\u8D25 -Layout-Padding=\u5185\u8FB9\u8DDD -roles_already_authority_edited=\u5DF2\u914D\u7F6E\u89D2\u8272 -WidgetDisplyPosition=\u63A7\u4EF6\u663E\u793A\u4F4D\u7F6E -SpecifiedG-Force_Group=\u5F3A\u5236\u5206\u7EC4 -FormulaD-Formula_Definition=\u516C\u5F0F\u5B9A\u4E49 -I-xyScatterStyle_Marker=\u6563\u70B9\u56FE -Hour=\u5C0F\u65F6 -ColorMatch=\u914D\u8272 -M_Edit-Order=\u53E0\u653E\u6B21\u5E8F(O) -BackgroundTexture-Bouquet=\u82B1\u675F -Verify-Error_Information=\u6821\u9A8C\u51FA\u9519\u4FE1\u606F -LayerData=\u5E95\u5C42\u6570\u636E -Rename=\u91CD\u547D\u540D -Widget-Load_By_Async=\u5F02\u6B65\u52A0\u8F7D -Shape=\u56FE\u5F62 -BindColumn-This_Condition_has_been_existed=\u6B64\u6761\u4EF6\u5DF2\u7ECF\u5B58\u5728 -NS-exception_readError=\u9519\u8BEF\u4EE3\u7801\:1305 \u6A21\u677F\u6587\u4EF6\u89E3\u6790\u51FA\u9519 -Set_Column_Title_Start=\u8BBE\u7F6E\u91CD\u590D\u6807\u9898\u5217 -Fri=\u4E94 -M_Report-Report_Parameter=\u6A21\u677F\u53C2\u6570 -REPORTLETS=\u8BBF\u95EE\u591A\u5F20\u6A21\u677F\u7684\u8DEF\u5F84\u7684\u53C2\u6570 -WLayout-Card-ToolTip=\u5361\u7247\u5F0F\u5E03\u5C40\uFF0C\u8BE5\u5E03\u5C40\u5BB9\u5668\u4E2D\u53EF\u4EE5\u6DFB\u52A0\u591A\u4E2A\u5176\u5B83\u7EC4\u4EF6\u3002 -M-Popup_ChartType=\u56FE\u8868\u7C7B\u578B -Please-Wait=\u8BF7\u7A0D\u5019 -FR-Designer-Form-ToolBar_Widget=\u63A7\u4EF6 -Widget-Array=\u6570\u7EC4 -FieldBinding=\u7ED1\u5B9A\u5B57\u6BB5 -Top_Bottom_Border_Line=\u4E0A\u4E0B\u6846\u7EBF -M-Others=\u5176\u5B83... -Hyperlink-Link_Opened_in=\u94FE\u63A5\u6253\u5F00\u4E8E -FR-Utils_WorkBook=\u5DE5\u4F5C\u7C3F -M_Insert-Float=\u60AC\u6D6E\u5143\u7D20 -Out_Thick_Border_Line=\u7C97\u5323\u6846\u7EBF -FR-App-File_Lookup_range=\u67E5\u627E\u8303\u56F4 -ReportColumns-Columns_to=\u5206\u680F\u6210 -Transparent=\u900F\u660E -Parameter-Integer=\u6574\u578B -PDF-Print_Setting=PDF\u6253\u5370\u8BBE\u7F6E -Server-Embedded_Server=\u5167\u7F6E\u7684\u670D\u52A1\u5668 -M_Server-Server_Config_Manager=\u670D\u52A1\u5668\u914D\u7F6E -FR-Utils-Would_you_like_to_cover_the_current_file=\u4F60\u5E0C\u671B\u8986\u76D6\u5F53\u524D\u6587\u4EF6\u5417 -CellWrite-InsertRow_COPY=\u539F\u503C -Edit_String_To_Formula=\u662F\u5426\u5C06\u5B57\u7B26\u4E32\u7F16\u8F91\u4E3A\u516C\u5F0F -Edit-Column_Count=\u5217\u6570 -Father=\u7236 -ReportColumns-Columns_after=\u8D85\u8FC7 -FR-Designer_Undo=\u64A4\u9500 -DBCP_MIN_IDLE=\u6700\u5C0F\u7A7A\u95F2\u8FDE\u63A5\u6570 -M-Data_Analysis_Settings=\u6570\u636E\u5206\u6790\u8BBE\u7F6E -M-Form_Preview=\u8868\u5355\u9884\u89C8 -Form-Basic_Properties=\u57FA\u672C\u5C5E\u6027 -quote=\u5F15\u7528 -Thu=\u56DB -Collect-Collect_User_Information=\u6536\u96C6\u7528\u6237\u4FE1\u606F -Layer-Build=\u5206\u5C42\u6784\u5EFA -FR-Designer-FRFont_Line_Style=\u7EBF\u578B -BackgroundTexture-BrownMarble=\u68D5\u8272\u5927\u7406\u77F3 -PageSetup-Page_Setup=\u9875\u9762\u8BBE\u7F6E -Form-Semicolon=\u5206\u53F7 -ECP_re_input=\u5BC6\u7801\u9519\u8BEF, \u8BF7\u91CD\u65B0\u8F93\u5165 -ExpandD-Sort_After_Expand=\u6269\u5C55\u540E -FR-Designer-Dependence_Install_Succeed=\u4F9D\u8D56\u5B89\u88C5\u6210\u529F -Env-Configure_Workspace=\u914D\u7F6E\u5DE5\u4F5C\u76EE\u5F55 -feedback_info=\u6B22\u8FCE\u60A8\u63D0\u51FA\u5B9D\u8D35\u7684\u610F\u89C1\u548C\u5EFA\u8BAE\uFF0C\u8BF7\u5C06\u4FE1\u606F\u586B\u5199\u5F97\u5C3D\u91CF\u8BE6\u7EC6\uFF0C\u6211\u4EEC\u4F1A\u5C3D\u5FEB\u8054\u7CFB\u60A8 -Ratio=\u6BD4\u7387 -DBCP_TEST_ON_BORROW=\u83B7\u53D6\u8FDE\u63A5\u524D\u68C0\u9A8C -FR-Designer_layerIndex=\u4F9D\u8D56\u7684\u5C42\u6570 -WEB-Write_Setting=\u586B\u62A5\u9875\u9762\u8BBE\u7F6E -M-New_WorkBook=\u65B0\u5EFA\u5DE5\u4F5C\u7C3F -FR-Designer-Plugin_Has_Been_Actived=\u63D2\u4EF6\u5DF2\u88AB\u542F\u7528\uFF0C\u91CD\u542F\u8BBE\u8BA1\u5668\u53CA\u670D\u52A1\u5668\u751F\u6548\uFF0C\u670D\u52A1\u5668\u9700\u624B\u52A8\u91CD\u542F -Datasource-Maximum_Number_of_Preview_Rows=\u6700\u5927\u7684\u9884\u89C8\u884C\u6570 -ExpandD-Cell_Expand_Attributes=\u6269\u5C55\u5C5E\u6027 -Select_the_repeated_row_and_column=\u9009\u62E9\u9700\u8981\u91CD\u590D\u7684\u884C\u5217 -FormulaD-Date_&_Time=\u65E5\u671F\u548C\u65F6\u95F4\u51FD\u6570 -Max-Mem-Row-Count=\u7F13\u5B58\u81F3\u78C1\u76D8\u5F53\u8BB0\u5F55\u6570\u5927\u4E8E -BorderLayout-South=\u5357 -Export-Text=\u6587\u672C\u6587\u4EF6(\u5236\u8868\u7B26\u5206\u9694) -JavaScript-Synch=\u540C\u6B65 -FR-App-All_Warning=\u8B66\u544A -M_Edit-Send_Backward=\u4E0B\u79FB\u4E00\u5C42(B) -Form-Layout=\u5E03\u5C40 -FR-Designer-Plugin_Shop_Need_Update=\u63D2\u4EF6\u5546\u5E97\u6709\u65B0\u7248\u672C,\u662F\u5426\u66F4\u65B0? -FR-Designer_WorkBook=\u5DE5\u4F5C\u7C3F -UpBarBorderStyleAndColor=\u6DA8\u67F1\u6837\u5F0F -GridLayout=\u683C\u5B50\u5E03\u5C40 -Utils-Default_Value=\u9ED8\u8BA4\u503C -Widget-Comb_Widget_Config=\u7EC4\u5408\u63A7\u4EF6 -Import-Excel2007_Source=Excel2007\u6E90\u6587\u4EF6 -Y-Coordinate=\u7EB5\u5750\u6807 -FR-Base_SimSun_Not_Found=\u65E0\u6CD5\u627E\u5230\u5B8B\u4F53, \u8BF7\u9009\u62E9\u5F53\u524D\u7CFB\u7EDF\u4E0B\u9ED8\u8BA4\u8BED\u8A00\u4F5C\u4E3A\u8BBE\u8BA1\u5668\u5B57\u4F53. -FR-Designer_Seriously=\u4E25\u91CD -Upload=\u4E0A\u4F20 -Form-Widget_Property_Table=\u5C5E\u6027\u8868 -Des-Merger_Cell=\u9009\u62E9\u7684\u533A\u57DF\u5305\u542B\u591A\u4E2A\u6570\u636E\uFF0C\u5408\u5E76\u5355\u5143\u683C\u540E\u5C06\u53EA\u4FDD\u7559\u7F16\u8F91\u8FC7\u7684\u6240\u6709\u5355\u5143\u683C\u4E2D\u6700\u5DE6\u4E0A\u89D2\u7684\u6570\u503C. -FR-Designer-Basic_Copy_Build_NO=\u53CC\u51FB\u6784\u5EFA\u7248\u672C\u53F7\u53EF\u590D\u5236\u5230\u526A\u8D34\u677F -FR-Base_TurnOn=\u5F00\u542F -FR-Base_Rows=\u884C -Form-Remove_Repeat=\u53BB\u6389\u91CD\u590D\u9879 -Yes=\u662F -Datasource-JNDI_Name=JNDI\u7684\u540D\u5B57 -Utils-Delete_Column=\u5220\u9664\u5217 -HF-Delete_it=\u5220\u9664 -JavaScript-Dynamic_Parameters=\u52A8\u6001\u53C2\u6570 -px=\u50CF\u7D20 -FR-App-Report_Template=\u62A5\u8868\u6A21\u7248 -Verify-Message=\u9519\u8BEF\u4FE1\u606F -Plan=\u8BA1\u5212 -Vertical-Split_Layout=\u5782\u76F4\u5206\u5272\u5E03\u5C40 -ParameterD-Delay_Playing=\u70B9\u51FB\u67E5\u8BE2\u524D\u4E0D\u663E\u793A\u62A5\u8868\u5185\u5BB9 -TurnOff=\u5173\u95ED -FR-Please_Rename=\u8BF7\u91CD\u547D\u540D -Select_Data_Set=\u9009\u62E9\u6570\u636E\u96C6 -Name_has_Colon=\u540D\u5B57\: -ReportColumns-Columns_horizontally=\u884C\u5206\u680F -FR-Base_Yes=\u662F -ReportColumns-Repeat_Row=\u590D\u5236\u884C\u5E8F\u5217 -Print_Setting=\u6253\u5370\u8BBE\u7F6E -Registration-User_Name=\u7528\u6237\u540D -Datasource-User_Defined=\u81EA\u5B9A\u4E49 -FR-Designer-Plugin_DownLoadMessage=\u63D2\u4EF6\u9700\u8981\u4F9D\u8D56\u7684\u652F\u6301\uFF0C\u662F\u5426\u5B89\u88C5 ({R1} m)? -Delay=\u5EF6\u8FDF -FR-Designer-All_MSBold=\u5FAE\u8F6F\u96C5\u9ED1 -Utils-Now_create_connection=\u6B63\u5728\u5EFA\u7ACB\u6570\u636E\u8FDE\u63A5 -FR-Template-Path_chooseRightPath=\u8BF7\u9009\u62E9\u6B63\u786E\u8DEF\u5F84 -FR-Remote_Re_Connect_to_Server=\u670D\u52A1\u5668\u5DF2\u5173\u95ED\uFF0C\u662F\u5426\u91CD\u65B0\u8FDE\u63A5\u670D\u52A1\u5668? -Nation=\u56FD\u5BB6 -DBCP_MAX_WAIT=\u6700\u5927\u7B49\u5F85\u65F6\u95F4 -FR-App-Template_Form=\u8868\u5355 -Address=\u5730\u5740 -Sub_Report=\u5B50\u62A5\u8868 -FR-Import-Export_Word=Word\u683C\u5F0F -FR-Server_Version_Tip=\u60A8\u5F53\u524D\u8FDE\u63A5\u7684\u670D\u52A1\u5668\u7248\u672C\u4F4E\u4E8E\u60A8\u4F7F\u7528\u7684\u8BBE\u8BA1\u5668\u7248\u672C\u53F7\uFF0C\u7EE7\u7EED\u8FDE\u63A5\uFF0C\u60A8\u7F16\u8F91\u7684\u4E00\u4E9B\u5C5E\u6027\u53EF\u80FD\u65E0\u6CD5\u6709\u6548\u4FDD\u5B58\u3002 \u5047\u5982\u9700\u8981\u8FDE\u63A5\u8BF7\u5C06\u60A8\u7684\u8BBE\u8BA1\u5668\u7248\u672C\u4E0E\u670D\u52A1\u5668\u7248\u672C\u4FDD\u6301\u4E00\u81F4 -StyleAlignment-Left_To_Right=\u4ECE\u5DE6\u5411\u53F3 -Verify-ToolTips=\u4E0D\u6EE1\u8DB3\u516C\u5F0F\u63D0\u793A\u6821\u9A8C\u51FA\u9519\u4FE1\u606F -BackgroundTexture-Stationery=\u4FE1\u7EB8 -FR-Designer_RWA-Help=\u8BBE\u7F6E\u672A\u4FEE\u6539\u4E0D\u66F4\u65B0\u540E\uFF0C\u586B\u62A5\u9884\u89C8\u62A5\u8868\uFF0C\u8BB0\u5F55\u6240\u5728\u5355\u5143\u683C\u6CA1\u6709\u88AB\u7F16\u8F91\u4FEE\u6539\uFF0C\u5219\u6B64\u8BB0\u5F55\u4E0D\u4F1A\u8FDB\u884C\u66F4\u65B0\uFF1B\n\u5728\u5927\u6570\u636E\u91CF\u8BB0\u5F55\u67E5\u8BE2\u5E76\u56DE\u586B\u60C5\u51B5\u4E0B\uFF0C\u542F\u7528\u8BE5\u8BBE\u7F6E\uFF0C\u53EF\u4EE5\u63D0\u9AD8\u586B\u62A5\u63D0\u4EA4\u6027\u80FD\u3002 -M_Insert-Barcode=\u6761\u5F62\u7801 -Bounds=\u8FB9\u754C -FR-Designer-Undo_All_Authority_Operations=\u64A4\u9500\u524D\u4E00\u6B21\u6743\u9650\u7F16\u8F91\u7684\u6240\u6709\u64CD\u4F5C -Datasource-Context=\u4E0A\u4E0B\u6587 -CellWrite-Page_After_Column=\u5217\u540E\u5206\u9875 -FR-Designer_Cancel=\u53D6\u6D88 -Button-Group-Display-Columns=\u5C55\u793A\u5217\u6570 -Widget-Height=\u63A7\u4EF6\u9AD8\u5EA6 -Examples=\u4F8B\u5B50 -Formula_Dictionary_Display_Example=\u5B9E\u9645\u503C\u8303\u56F4\u4E3A \ -StyleAlignment-Horizontal=\u6C34\u5E73\u5BF9\u9F50 -HyperLink_Must_Alone_Reset=\u591A\u4E2A\u8D85\u94FE -ExpandD-Expand_Direction=\u6269\u5C55\u65B9\u5411 -Include=\u5305\u62EC -Export-Excel-Page=\u5206\u9875\u5BFC\u51FA -FR-Designer-Min_Height=\u6700\u5C0F\u9AD8\u5EA6 -Filed=\u533A\u57DF -ReportServerP-Import_Css=\u5F15\u7528Css -M_Insert-Formula=\u63D2\u5165\u516C\u5F0F -FR-Designer_Auto-Build=\u81EA\u52A8\u6784\u5EFA -FRFont-Foreground=\u989C\u8272 -Bubble-Width=\u6C14\u6CE1\u5BBD\u5EA6 -Form-Hierarchy_Tree=\u7ED3\u6784\u6811 -WLayout-Border-LayoutContainer=\u62E5\u6709\u4E2D\u90E8\u548C\u5317\u90E8\u4E24\u5757\u7684\u8FB9\u754C\u5E03\u5C40\u5BB9\u5668,\u5176\u4E2D\u5317\u90E8\u5757\u53EF\u4EE5\u6839\u636E\u9700\u8981\u8C03\u6574\u9AD8\u5EA6 -Preference-JDK_Home=JDK\u8DEF\u5F84 -Utils-Insert_Column=\u63D2\u5165\u5217 -FR-Designer_ToolBar_Top=\u9876\u90E8\u5DE5\u5177\u680F -BindColumn-The_Conditions_of_FatherCell=\u7236\u683C\u6761\u4EF6 -Links=\u94FE\u63A5 -M_Report-Report_Header=\u62A5\u8868\u9875\u7709 -Sub_Report_Description=\u5B50\u62A5\u8868\u9700\u8981\u5B58\u5728\u4E8E\u7236\u8868\u8FD0\u884C\u73AF\u5883\u4E0B\uFF0C\u4E14\u4E24\u8005\u4E0D\u80FD\u4E3A\u540C\u4E00\u6A21\u677F -T_Insert-Float=\u63D2\u5165\u60AC\u6D6E\u5143\u7D20 -BackgroundTexture-FishFossil=\u9C7C\u7C7B\u5316\u77F3 -My_Computer=\u6211\u7684\u7535\u8111 -FORMLET=\u8BBF\u95EE\u4E0D\u540C\u8868\u5355\u7684\u8DEF\u5F84\u7684\u53C2\u6570 -HF-Undefined=\u6CA1\u6709\u5B9A\u4E49 -Widget-User_Defined_Widget_Config=\u9884\u5B9A\u4E49\u63A7\u4EF6 -Report-Write_Attributes_Group_Warning=\u8BBE\u7F6E\u4E3A\u5355\u5143\u683C\u7EC4\u7684\u5404\u5B57\u6BB5\u4E2D\u7684\u5355\u5143\u683C\u4E2A\u6570\u5FC5\u987B\u76F8\u540C -Form-Single_quote=\u5355\u5F15\u53F7 -Compile_Success_And_Then_Save=\u7F16\u8BD1\u6210\u529F\u624D\u80FD\u6B63\u786E\u4FDD\u5B58 -FR-Designer_Layout-Padding=\u5185\u8FB9\u8DDD -Layout_Container=\u5E03\u5C40\u5BB9\u5668 -Admin=\u7BA1\u7406\u5458 -Form-EC_toolbar=\u62A5\u8868\u5757\u5DE5\u5177\u680F -FR-App-All_Auto=\u81EA\u52A8 -Utils-Available_Columns=\u53EF\u9009\u5217 -Form-Change_Widget_Name_Discription=\u8BF7\u8F93\u5165\u4E00\u4E2A\u65B0\u7684\u63A7\u4EF6\u540D -FR-Module_Designer=\u8BBE\u8BA1\u5668\u6A21\u5757 -FR-Import-Export_Text=\u6587\u672C\u6587\u4EF6(\u5236\u8868\u7B26\u5206\u9694) -Values-Editor=\u503C\u7F16\u8F91\u5668 -FR-Designer_Yes=\u662F -ExpandD-Expandable=\u53EF\u4F38\u5C55\u6027 -Tree-Return_Full_Path=\u7ED3\u679C\u8FD4\u56DE\u5B8C\u6574\u5C42\u6B21\u8DEF\u5F84 -FRFont-bolditalic=\u52A0\u7C97\u503E\u659C -FR-Base_StyleFormat_Sample=\u793A\u4F8B -Area_Value=\u533A\u57DF\u503C -FR-Designer-Plugin_Disable=\u7981\u7528 -Utils-Are_you_sure_to_remove_the_selected_item=\u4F60\u786E\u5B9E\u51B3\u5B9A\u5220\u9664\u9009\u4E2D\u7684\u9879 -Face_Write=\u586B\u62A5 -Poly-Report_Block=\u62A5\u8868\u7C7B\u578B\u805A\u5408\u5757 -Vgap=\u5782\u76F4\u95F4\u9699 -FR-Designer_HyperLink_Must_Alone_Reset=\u591A\u4E2A\u8D85\u94FE -DS-Class=\u7A0B\u5E8F -FR-Hyperlink_Please_Select_Reportlet=\u8BF7\u9009\u62E9\u7F51\u7EDC\u62A5\u8868 -FS_Report_Type=\u7C7B\u578B -HF-New_Line=\u6362\u884C\u7B26 -Privilege=\u6743\u9650 -Export-Offline-Html=\u8F93\u51FA\u79BB\u7EBFhtml\u62A5\u8868 -FR-Designer_open-new-form-tip=\u5F53\u524D\u6A21\u677F\u4E3A711\u4EE5\u4E0B\u7248\u672C\u5236\u4F5C\uFF0C\u65E0\u6CD5\u517C\u5BB9\uFF0C\u4E0D\u80FD\u6253\u5F00\u3002\u5047\u5982\u60F3\u6253\u5F00\u4FEE\u6539\u6B64\u8868\u5355\uFF0C\u8BF7\u4F7F\u7528\u5BF9\u5E94\u7248\u672C\u8BBE\u8BA1\u5668\u6253\u5F00\u3002 -FR-Designer-Widget-Style_Frame_Style=\u6846\u67B6\u6837\u5F0F -Present-No_Present=\u53D6\u6D88\u5F62\u6001\u8BBE\u7F6E -FR-Designer_Form-Password=\u5BC6\u7801 -X_Axis=X\u8F74 -FR-mobile_html_analysis=HTML5\u89E3\u6790 -M_Edit-Bring_to_Front=\u7F6E\u4E8E\u9876\u5C42(T) -Null_Value_Show=\u7A7A\u503C\u663E\u793A -Datasource-JNDI_DES=\u6CE8\u610F\:\u9700\u8981\u628A\u5305\u542BINITIAL_CONTEXT_FACTORY\u7C7B\u7684.jar\u6587\u4EF6\u590D\u5236\u5230\u8F6F\u4EF6\u5B89\u88C5\u76EE\u5F55\u4E0B\u7684/lib\u76EE\u5F55\u4E0B. -PrintP-Print_Preview=\u6253\u5370\u9884\u89C8 -Form-Hierarchy_Tree_Last=\u4E0A\u4E00\u4E2A -Has_been_gone=\ \u5DF2\u4E22\u5931\uFF0C\u662F\u5426\u589E\u52A0\u8BE5\u6837\u5F0F\uFF1F -RWA-Add_Field=\u6DFB\u52A0\u5B57\u6BB5 -newNode=\u65B0\u589E\u8282\u70B9 -PageSetup-Shrink_to_fit_content=\u6839\u636E\u5355\u5143\u683C\u5185\u5BB9\u81EA\u52A8\u8C03\u6574 -FR-Designer_Date=\u65E5\u671F -Column_Multiple=\u6570\u636E\u500D\u6570 -FR-App-All_File=\u6587\u4EF6 -Sort-Descending=\u964D\u5E8F -FR-Designer-Plugin_Delete=\u5220\u9664 -Above=\u4EE5\u4E0A\u7248\u672C -Utils-The-Chart=\u56FE\u8868 -FRFont-plain=\u5E38\u89C4 -Calculating=\u5904\u7406\u4E2D -Form-Object=\u8868\u5355\u5BF9\u8C61\: -May=\u4E94\u6708 -FR-Designer_Plugin_Normal_Update=\u66F4\u65B0 -FR-Hyperlink_Reportlet=\u7F51\u7EDC\u62A5\u8868 -M_Edit-Copy=\u590D\u5236(C) -Sub_Report_Message2=\u7236\u62A5\u8868\u4E0D\u5728\u5F53\u524D\u8FD0\u884C\u73AF\u5883\u4E0B -Sub_Report_Message3=\u4E0D\u80FD\u9009\u62E9\u81EA\u8EAB -Sub_Report_Message1=\u8BF7\u9009\u62E9\u6B63\u786E\u8DEF\u5F84 -Form-Allow_CustomData=\u5141\u8BB8\u81EA\u5B9A\u4E49\u503C -FR-Server_Version_Tip_MoreInfo=\u5EFA\u8BAE\u60A8\u6240\u5C5E\u56E2\u961F\u4F7F\u7528\u7684\u6211\u65B9FineReport\u4EA7\u54C1\u7684\u8BBE\u8BA1\u5668\u7248\u672C\u53F7\u4EE5\u53CA\u90E8\u7F72\u7684\u670D\u52A1\u5668\u7248\u672C\u53F7\u4FDD\u6301\u4E00\u81F4\uFF0C\u4EE5\u907F\u514D\u7248\u672C\u4E0D\u4E00\u81F4\u9020\u6210\u7684\u95EE\u9898\u98CE\u9669\u3002\n\u5047\u5982\u60A8\u6253\u5F00\u66F4\u9AD8\u8BBE\u8BA1\u5668\u7248\u672C\u5236\u4F5C\u7684\u6A21\u677F\uFF0C\u53EF\u80FD\u6253\u5F00\u51FA\u9519\uFF0C\u4E5F\u53EF\u80FD\u4E22\u5931\u539F\u6709\u6A21\u677F\u5C5E\u6027\u3002\u5047\u5982\u60A8\u5236\u4F5C\u7684\u6A21\u677F\u4F7F\u7528\u7684\u8BBE\u8BA1\u5668\u7248\u672C\u9AD8\u4E8E\u60A8\u6700\u7EC8\u90E8\u7F72\u6240\u7528\u7684\u670D\u52A1\u5668\u7248\u672C\uFF0C\u670D\u52A1\u5668\u53EF\u80FD\u65E0\u6CD5\u6B63\u5E38\u8F7D\u5165\u60A8\u5236\u4F5C\u7684\u6A21\u677F\u3002 -FR-Designer_Server-version-tip-moreInfo=\u5EFA\u8BAE\u60A8\u6240\u5C5E\u56E2\u961F\u4F7F\u7528\u7684\u6211\u65B9FineReport\u4EA7\u54C1\u7684\u8BBE\u8BA1\u5668\u7248\u672C\u53F7\u4EE5\u53CA\u90E8\u7F72\u7684\u670D\u52A1\u5668\u7248\u672C\u53F7\u4FDD\u6301\u4E00\u81F4\uFF0C\u4EE5\u907F\u514D\u7248\u672C\u4E0D\u4E00\u81F4\u9020\u6210\u7684\u95EE\u9898\u98CE\u9669\u3002\n\u5047\u5982\u60A8\u6253\u5F00\u66F4\u9AD8\u8BBE\u8BA1\u5668\u7248\u672C\u5236\u4F5C\u7684\u6A21\u677F\uFF0C\u53EF\u80FD\u6253\u5F00\u51FA\u9519\uFF0C\u4E5F\u53EF\u80FD\u4E22\u5931\u539F\u6709\u6A21\u677F\u5C5E\u6027\u3002\u5047\u5982\u60A8\u5236\u4F5C\u7684\u6A21\u677F\u4F7F\u7528\u7684\u8BBE\u8BA1\u5668\u7248\u672C\u9AD8\u4E8E\u60A8\u6700\u7EC8\u90E8\u7F72\u6240\u7528\u7684\u670D\u52A1\u5668\u7248\u672C\uFF0C\u670D\u52A1\u5668\u53EF\u80FD\u65E0\u6CD5\u6B63\u5E38\u8F7D\u5165\u60A8\u5236\u4F5C\u7684\u6A21\u677F\u3002 -Get_Lock=\u52A0\u9501 -HF-Edit_Footer=\u7F16\u8F91\u9875\u811A -Datasource-New_Charset=\u65B0\u7F16\u7801 -Preference-Custom=\u81EA\u5B9A\u4E49 -BackgroundTexture-Newsprint=\u65B0\u95FB\u7EB8 -ConditionB-Add_bracket=\u6DFB\u52A0\u62EC\u53F7 -Datasource-Connection_successfully=\u8FDE\u63A5\u6210\u529F -Function-The_class_must_implement_the_interface=\u8BE5\u7C7B\u5FC5\u987B\u5B9E\u73B0\u63A5\u53E3 -FR-Designer_ChartF-Transparency=\u900F\u660E -Crimson=\u6DF1\u7EA2 -FR-Hyperlink_Dialog=\u5BF9\u8BDD\u6846 -FR-Designer_Covered_All=\u5168\u90E8\u8986\u76D6 -Hyperlink-New_Window=\u65B0\u7A97\u53E3 -Style_Name=\u683C\u5F0F\u540D -CSS_warning=\ \u76F8\u5BF9\u62A5\u8868\u5DE5\u7A0B\u76EE\u5F55\u5982WebReport,\u5982WebReport\\css\u4E0B\u6709\u5F15\u7528\u7684css\u6587\u4EF6test.css\uFF0C\u5219\u76F8\u5BF9\u8DEF\u5F84\u4E3Acss/test.css -FR-Base_Column=\u5217 -Three_Rows_Of_Two_Grid=\u4E09\u884C\u4E24\u5217\u7684\u683C\u5B50 -DBCP_VALIDATION_QUERY=SQL\u9A8C\u8BC1\u67E5\u8BE2 -M_Edit-Clear_Formats=\u683C\u5F0F(F) -Parameter_Setting=\u53C2\u6570\u8BBE\u7F6E -Related=\u8054\u52A8 -BorderLayout-Constraints=\u4F4D\u7F6E -Write_Preview=\u586B\u62A5\u9884\u89C8 -PageSetup-Page_Order=\u6253\u5370\u987A\u5E8F -Verify-Verify_Formula=\u6821\u9A8C\u516C\u5F0F -State=\u7701\u5E02 -FR-Designer-Widget-Style_Body_Background=\u4E3B\u4F53\u80CC\u666F -FR-App-Privilege_No=\u6CA1\u6709\u6743\u9650 -Please_Drag_ParaPane= -Come_True=\u5B9E\u73B0 -ISEMPTY=\u4E3A\u7A7A -Background-Texture=\u7EB9\u7406 -FR-Designer_Verify-Message=\u9519\u8BEF\u4FE1\u606F -Locked=\uFF08\u5DF2\u9501\u5B9A\uFF09 -Utils-Design-Action_Cancel=\u53D6\u6D88 -Image-Titled=\u5E73\u94FA -Gradient-Direction=\u6E10\u53D8\u65B9\u5411 -Green=\u9752\u7EFF -Report_Engine=\u62A5\u8868\u5F15\u64CE -Return-String=\u8FD4\u56DE\u5B57\u7B26\u4E32 -Margin=\u8FB9\u8DDD -Pitch_Percentage=\u95F4\u8DDD\u767E\u5206\u6BD4 -FR-Base_TurnOff=\u5173\u95ED -Utils-has_been_existed=\u5DF2\u5B58\u5728 -HF-Insert_Formula=\u63D2\u5165\u516C\u5F0F -Utils-Exit_Designer=\u9000\u51FA\u8BBE\u8BA1\u5668 -Formula_Dictionary_Display=\u5BF9\u4E8E\u4E0A\u9762\u5B9E\u9645\u503C\u8303\u56F4\u5185\u7684\u6BCF\u4E2A\u503C($$$)\uFF0C\u5176\u663E\u793A\u503C\u4E3A -PageSetup-Left_to_right=\u5148\u884C\u540E\u5217 -Utils-Import_Excel_Data=\u5BFC\u5165[Excel] -M-Save=\u4FDD\u5B58 -redo=\u91CD\u505A -Status=\u72B6\u6001 -Draw=\u7ED8\u5236 -FR-Designer_Message=\u4FE1\u606F -Records=\u6761\u8BB0\u5F55 -FR-Designer_ComboBox=\u4E0B\u62C9\u6846 -Driver=\u9A71\u52A8\u5668 -Template_Parameters=\u6A21\u677F\u53C2\u6570 -Form-Remove_Repeat_Data=\u53BB\u9664\u91CD\u590D\u6570\u636E -ECP_decode=\u6A21\u677F\u89E3\u5BC6 -Area_Name=\u533A\u57DF\u540D -Others=\u5176\u5B83 -Merge=\u5408\u5E76 -BackgroundTexture-Parchment=\u7F8A\u76AE\u7EB8 -BindColumn-Bottom_N=\u540EN\u4E2A -Frame=\u6846\u67B6 -Bottom_Border_Line=\u4E0B\u6846\u7EBF -Muiti_In=\u591A\u5C42\u94BB\u53D6 -FR-Designer-Dependence_Install_Online=\u5728\u7EBF\u5B89\u88C5\u4F9D\u8D56\u73AF\u5883 -Use_Default_ToolBar=\u4F7F\u7528\u9ED8\u8BA4\u5DE5\u5177\u680F -M_Server-Platform_Manager=\u62A5\u8868\u5E73\u53F0\u7BA1\u7406 -PageSetup-inches=\u82F1\u5BF8 -Form-Widget_Property=\u5C5E\u6027\u540D -FR-Layout_Padding=\u5185\u8FB9\u8DDD -Schema=\u4E3B\u9898 -Server_Path=\u4E3B\u673A\u4F4D\u7F6E -Condition_Display=\u6761\u4EF6\u663E\u793A -FR-Server-Design_template_unopened=\u65E0\u6CD5\u6253\u5F00\u6A21\u7248 -Function-Function_Class_Name=\u51FD\u6570\u7C7B\u540D -Schedule-Template=\u6A21\u677F\u540D\u79F0 -Tree_Data_Field=\u6811\u6570\u636E\u5B57\u6BB5 -Border-Style-Normal=\u76F4\u89D2\u8FB9\u6846 -Top_And_Double_Bottom_Border_Line=\u4E0A\u6846\u7EBF\u548C\u53CC\u4E0B\u6846\u7EBF -FR-Server_Embedded_Server_Start=\u5167\u7F6E\u7684\u670D\u52A1\u5668-\u6253\u5F00 -FR-Designer-Basic_Restart_Designer_Later=\u7A0D\u540E\u91CD\u542F -StyleAlignment-Top=\u9760\u4E0A -ReportServerP-First=\u9996\u9875 -Not_Exist=\u4E0D\u5B58\u5728 -FR-Remote_File_is_Locked=\u60A8\u6240\u8981\u6253\u5F00\u7684\u62A5\u8868\u6B63\u5728\u88AB\u5176\u4ED6\u4EBA\u7F16\u8F91\uFF0C\u8BF7\u7A0D\u5019\u6253\u5F00 -Apply=\u5E94\u7528 -Sytle-Indentation=\u7F29\u8FDB -Parameter-Float=\u5355\u7CBE\u5EA6\u578B -HF-Center_Section=\u4E2D\u95F4\u533A\u57DF -Form-Double_quotes=\u53CC\u5F15\u53F7 -M_File-Export-Word=Word\u683C\u5F0F -M_File-Export-Text=\u6587\u672C\u6587\u4EF6(\u5236\u8868\u7B26\u5206\u9694) -PageSetup-First_Page_Number=\u8D77\u59CB\u9875\u7801 -Execute=\u6267\u884C -Task=\u4EFB\u52A1 -Custom_Button_Type_Submit=\u63D0\u4EA4 -FR-Designer-Widget_Settings=\u63A7\u4EF6\u8BBE\u7F6E -IS_Need_Password=\u9700\u8981\u5BC6\u7801 -PageSetup-Horizontally=\u6C34\u5E73\u5C45\u4E2D -No_Editor_Property_Definition=\u8BE5\u7F16\u8F91\u5668\u6CA1\u6709\u5C5E\u6027\u5B9A\u4E49 -Env-Remote_Server=\u8FDC\u7A0B\u670D\u52A1\u5668 -FR-Utils_Background=\u80CC\u666F -FR-Designer-Plugin_Warning=\u8B66\u544A -Server-version-info=\u60A8\u5F53\u524D\u6253\u5F00\u7684\u6A21\u677F\u6587\u4EF6\u662F\u7531\u66F4\u9AD8\u7248\u672C\u7684\u8BBE\u8BA1\u5668\u5236\u4F5C\u7684\uFF0C\u6253\u5F00\u4F1A\u6709\u51FA\u9519\u6216\u8005\u4E22\u5931\u539F\u6709\u6A21\u677F\u5C5E\u6027\u7684\u98CE\u9669\u3002 \u5047\u5982\u9700\u8981\u6253\u5F00\u6B64\u6A21\u677F\u8BF7\u60A8\u5C06\u60A8\u7684\u8BBE\u8BA1\u5668\u5347\u7EA7\u81F3 -CellWrite-Page_After_Row=\u884C\u540E\u5206\u9875 -HF-Right_Section=\u53F3\u533A\u57DF -PageSetup-Title_Start_Row=\u91CD\u590D\u6807\u9898\u884C -From=\u4ECE\u7B2C -Preference-Grid_Line_Color=\u7F51\u683C\u7EBF\u989C\u8272 -RowTo=\u884C\u81F3\u7B2C -FR-Designer_ReportColumns-Repeat_Column=\u590D\u5236\u5217\u5E8F\u5217 -M_Server-Function_Manager=\u51FD\u6570\u7BA1\u7406\u5668 -KeyWord=\u5173\u952E\u5B57 -DS-Multi_Dimensional_Database=\u591A\u7EF4\u6570\u636E\u5E93 -BiasD-Slope_Line=\u659C\u7EBF -Tue=\u4E8C -ReportServerP-Last=\u672B\u9875 -FR-Base_Columns=\u5217 -SpecifiedG-Leave_in_their_own_groups=\u7559\u5728\u5404\u81EA\u7684\u7EC4\u5185 -LOG-Please_Wait=\u8BF7\u7A0D\u5019 -Form-ToolBar=\u8868\u5355\u5DE5\u5177\u680F -FR-Base_sure_remove_item=\u4F60\u786E\u5B9E\u51B3\u5B9A\u5220\u9664\u9009\u4E2D\u7684\u9879 -Component_Scale=\u7EC4\u4EF6\u7F29\u653E -Hyperlink-Use_CJK_to_encode_parameter=\u4F7F\u7528CJK\u5904\u7406\u53C2\u6570 -LOG-Has_Been_Openned=\u5DF2\u7ECF\u6253\u5F00 -FR-Designer-Dependence=\u4F9D\u8D56\u73AF\u5883 -ECP_error_pwd=\u5BC6\u7801\u9519\u8BEF -REPORTLET=\u8BBF\u95EE\u6A21\u677F\u7684\u8DEF\u5F84\u7684\u53C2\u6570\u3002 -RWA-Column_Offset=\u5217\u504F\u79FB -Forecast=\u9884\u6D4B -Light_Orange=\u6D45\u6A58\u9EC4 -StyleAlignment-Vertical=\u5782\u76F4\u5BF9\u9F50 -Form-List=\u5217\u8868 -ParameterD-Show_Parameter_Window=\u663E\u793A\u53C2\u6570\u7A97\u4F53 -FR-Designer_Set_Submit_Event=\u8BBE\u7F6E\u63D0\u4EA4\u4E8B\u4EF6 -Value_Percent=\u503C\u6240\u5360\u6BD4\u4F8B -DBCP_MIN_EVICTABLE_IDLE_TIMEMILLIS=\u4FDD\u6301\u7A7A\u95F2\u6700\u5C0F\u65F6\u95F4\u503C -Function-The_class_must_be_located_in=\u8BE5\u7C7B\u5FC5\u987B\u653E\u7F6E\u5728 -FR-Action_Sort=\u6392\u5E8F -DataFunction-Average=\u5E73\u5747 -FR-Designer_Show_in_Containing_Folder=\u6253\u5F00\u6240\u5728\u6587\u4EF6\u5939 -M_File-Export-Excel=Excel\u683C\u5F0F -DataFunction-Max=\u6700\u5927\u503C -FR-Designer_Form-Widget_Name=\u63A7\u4EF6\u540D -FS_End_Date=\u7ED3\u675F\u65E5\u671F -Export-Excel-Simple=\u539F\u6837\u5BFC\u51FA -ColumnTo=\u5217\u81F3\u7B2C -SpecifiedG-Discard_all_others=\u4E22\u5F03\u5176\u5B83\u6240\u6709\u7684 -DS-TableData=\u6570\u636E\u96C6 -Form-DataTable=\u6570\u636E\u8868 -Sub_Report_ToolTips=\u5B50\u62A5\u8868\u63D0\u793A -Right_Top=\u53F3\u4E0A -M_Edit-Merge_Cell=\u5408\u5E76\u5355\u5143\u683C -FR-Designer_Restore_Default=\u6062\u590D\u9ED8\u8BA4 -Component_Interval=\u7EC4\u4EF6\u95F4\u9694 -Cover_None=\u5168\u4E0D\u8986\u76D6 -Datasource-From_Database=\u6570\u636E\u5E93\u8868 -Folder=\u76EE\u5F55 -Form-Allow_Edit=\u5141\u8BB8\u76F4\u63A5\u7F16\u8F91 -M_Edit-Clear=\u6E05\u9664(A) -ParentCell_Setting=\u7236\u683C\u8BBE\u7F6E -Only_selected_cell_can_paste_only=\u53EA\u6709\u9009\u4E2D\u5355\u5143\u683C\u65F6\u624D\u53EF\u4EE5\u7C98\u8D34 -M_Report-Report_Columns=\u62A5\u8868\u5206\u680F -Unit_Hundred=\u767E -FR-Designer_DataTable-Build=\u6781\u901F\u5206\u5C42\u6784\u5EFA -Widget-Form_Widget_Config=\u8868\u5355\u63A7\u4EF6 -Server-version-tip-moreInfo=\u5EFA\u8BAE\u60A8\u6240\u5C5E\u56E2\u961F\u4F7F\u7528\u7684\u6211\u65B9FineReport\u4EA7\u54C1\u7684\u8BBE\u8BA1\u5668\u7248\u672C\u53F7\u4EE5\u53CA\u90E8\u7F72\u7684\u670D\u52A1\u5668\u7248\u672C\u53F7\u4FDD\u6301\u4E00\u81F4\uFF0C\u4EE5\u907F\u514D\u7248\u672C\u4E0D\u4E00\u81F4\u9020\u6210\u7684\u95EE\u9898\u98CE\u9669\u3002\n\u5047\u5982\u60A8\u6253\u5F00\u66F4\u9AD8\u8BBE\u8BA1\u5668\u7248\u672C\u5236\u4F5C\u7684\u6A21\u677F\uFF0C\u53EF\u80FD\u6253\u5F00\u51FA\u9519\uFF0C\u4E5F\u53EF\u80FD\u4E22\u5931\u539F\u6709\u6A21\u677F\u5C5E\u6027\u3002\u5047\u5982\u60A8\u5236\u4F5C\u7684\u6A21\u677F\u4F7F\u7528\u7684\u8BBE\u8BA1\u5668\u7248\u672C\u9AD8\u4E8E\u60A8\u6700\u7EC8\u90E8\u7F72\u6240\u7528\u7684\u670D\u52A1\u5668\u7248\u672C\uFF0C\u670D\u52A1\u5668\u53EF\u80FD\u65E0\u6CD5\u6B63\u5E38\u8F7D\u5165\u60A8\u5236\u4F5C\u7684\u6A21\u677F\u3002 -Actions=\u4EFB\u52A1 -FR-Designer-Dependence_Connect_Server_Error=\u65E0\u6CD5\u8FDE\u63A5\u670D\u52A1\u5668\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5 -High=\u9AD8 -HJS-Send_Failed=\u53D1\u9001\u5931\u8D25 -HJS-Message=\u5185\u5BB9 -File-Allow_Upload_Files=\u5141\u8BB8\u4E0A\u4F20\u6587\u4EF6\u7C7B\u578B -FR-Designer-Form-ToolBar_Chart=\u56FE\u8868 -Thick_Bottom_Border_Line=\u7C97\u5E95\u6846\u7EBF -FR-Action_Remove=\u5220\u9664 -FRFont-Style=\u5B57\u5F62 -Select_DataColumn=\u9009\u62E9\u6570\u636E\u5217 -StartValue=\u5F00\u59CB\u503C -SINGLE_FILE_UPLOAD=\u53EA\u652F\u6301\u5355\u6587\u4EF6\u4E0A\u4F20 -BackgroundTexture-Cork=\u8F6F\u6728\u585E -M_Format-Data_Map=\u6570\u636E\u5B57\u5178 -FR-mobile_native_analysis=\u539F\u751F\u89E3\u6790 -HighLight=\u9AD8\u5149 -FR-Designer_Dropdown-More-Preview=\u4E0B\u62C9\u83B7\u53D6\u66F4\u591A\u9884\u89C8\u65B9\u5F0F -local=\u672C\u5730 -FR-Designer_Gradation=\u5C42\u6B21 -PageSetup-Finis_Start_Column=\u91CD\u590D\u7ED3\u5C3E\u5217 -Env-Invalid_User_and_Password=\u975E\u6CD5\u7684\u7528\u6237\u540D\u6216\u5BC6\u7801 -FR-Designer-Plugin_All_Plugins=\u5168\u90E8\u63D2\u4EF6 -FR-Designer_Prepare_Export=\u5F00\u59CB\u5BFC\u51FA\uFF0C\u8BF7\u7A0D\u5019 -DBCP_TEST_ON_RETURN=\u5F52\u8FD8\u8FDE\u63A5\u524D\u68C0\u9A8C -no-alternatives=\u6CA1\u6709\u9009\u62E9\u9879 -FR-Designer_Submmit_WClass=\u540E\u53F0\u7C7B\u63D0\u4EA4 -M_Insert-Slope_Line=\u63D2\u5165\u659C\u7EBF -FR-Designer-Plugin_Plugin_Description=\u63D2\u4EF6\u63CF\u8FF0 -ExpandD-Not_Expand=\u4E0D\u6269\u5C55 -Utils-Bottom_to_Top=\u4ECE\u4E0B\u5230\u4E0A -Collect-Click\!_Get_user_information_code=\u70B9\u51FB\!\u83B7\u53D6\u6FC0\u6D3B\u7801 -FR-Already_exist=\u5F53\u524D\u73AF\u5883\u5DF2\u5B58\u5728\: -Send=\u53D1\u9001 -M_Edit-Clear_All=\u5168\u90E8(A) -Brown_Orange=\u68D5\u9EC4 -PageSetup-Portrait=\u7EB5\u5411 -FR-Designer_Form-RadioGroup=\u5355\u9009\u6309\u94AE\u7EC4 -FR-Utils-App_AllFiles=\u6240\u6709\u6587\u4EF6 -Popup=\u5F39\u51FA -Server_Charset=\u670D\u52A1\u5668\u7F16\u7801 -CellWrite-Repeat_Content_When_Paging=\u5206\u9875\u65AD\u5F00\u65F6\u503C\u91CD\u590D\u663E\u793A -Utils-No_Pagination=\u4E0D\u5206\u9875 -Form-NullLayout=\u7EDD\u5BF9\u5B9A\u4F4D -ConditionB-Remove_bracket=\u53BB\u6389\u62EC\u53F7 -email=\u90AE\u7BB1 -Minute=\u5206\u949F -FR-Designer-Plugin_Update=\u63D2\u4EF6\u66F4\u65B0 -alraedy_close=\u5DF2\u7ECF\u5173\u95ED -ComboCheckBox-End_Symbol=\u7ED3\u675F\u7B26 -DataColumn=\u6570\u636E\u5217 -Form-Password=\u5BC6\u7801 -FR-Background_Image_Adjust=\u9002\u5E94 -Export-Excel-PageToSheet=\u5206\u9875\u5206Sheet\u5BFC\u51FA -Edit-Row_Count=\u884C\u6570 -DS-Report_TableData=\u6A21\u677F\u6570\u636E\u96C6 -Sche-Hour=\u65F6 -Group_Count=\u8868\u793A\u603B\u4E2A\u6570 -EndValue=\u7ED3\u675F\u503C -FR-Designer_Sytle-Indentation=\u7F29\u8FDB -DownBarBorderStyleAndColor=\u8DCC\u67F1\u6837\u5F0F -World=\u4E16\u754C -FR-Designer-Basic_Cancel=\u53D6\u6D88 -Finally=\u6700\u540E -Low=\u4F4E -Please_Input_The_Key=\u8BF7\u8F93\u5165\u5BF9\u5E94\u5730\u56FE\u4F7F\u7528\u7684key -Smart=\u667A\u80FD -Preference-Predefined=\u9884\u5B9A\u4E49 -Current_custom_global=\u5F53\u524D\u62A5\u8868\u6240\u7528\u81EA\u5B9A\u4E49\u5168\u5C40\u6837\u5F0F -FR-Designer-Plugin_Shop_Need_Install=\u60A8\u8FD8\u6CA1\u6709\u63D2\u4EF6\u5546\u5E97\u7684\u8D44\u6E90,\u662F\u5426\u4E0B\u8F7D? -WEB-Pagination_Setting=\u5206\u9875\u9884\u89C8\u8BBE\u7F6E -RCodeDrawPix=\u50CF\u7D20 -FR-Designer-Widget-Style_Alpha=\u4E0D\u900F\u660E\u5EA6 -BorderLayout-North=\u5317 -HJS-Current_Page=\u5F53\u524D\u9875 -Compile=\u7F16\u8BD1 -Show_Blank_Row=\u8865\u5145\u7A7A\u767D\u884C -TableData_Dynamic_Parameter_Setting=\u52A8\u6001\u53C2\u6570\u6CE8\u5165 -FR-Background_Image_Default=\u9ED8\u8BA4 -BackgroundTexture-WhiteMarble=\u767D\u8272\u5927\u7406\u77F3 -DataFunction-Sum=\u6C42\u548C -Collect-The_user_information_code_is_invalid=\u8FD9\u4E2A\u6FC0\u6D3B\u7801\u662F\u65E0\u6548\u7684, \u8BF7\u5230\u5B98\u7F51\u7533\u8BF7 -Preference-Locale=\u56FD\u9645\u5316 -M_File-Export-PDF=PDF\u683C\u5F0F -BiasD-From-lower_left_to_upper_right=\u4ECE\u5DE6\u4E0B\u5230\u53F3\u4E0A\u53D1\u6563 -Border-Style=\u8FB9\u6846\u6837\u5F0F -Sort=\u6392\u5E8F -Image-Image_Layout=\u56FE\u7247\u5E03\u5C40 -Panel=\u9762\u677F -FR-Designer-Basic_Copy_Build_NO_OK=\u6784\u5EFA\u7248\u672C\u53F7\u5DF2\u7ECF\u590D\u5236\u5230\u526A\u8D34\u677F -All_Border_Line=\u6240\u6709\u6846\u7EBF -FR-Utils-Please_Input_a_New_Name=\u8BF7\u8F93\u5165\u65B0\u7684\u540D\u5B57 -FR-Base_Formula_Plugin=\u63D2\u4EF6\u51FD\u6570 -Two_Rows_Of_Three_Grid=\u4E24\u884C\u4E09\u5217\u7684\u683C\u5B50 -FR-Designer_Certificate_Pass=https\u79D8\u94A5 -Bubble-Series_Name=\u7CFB\u5217\u540D -M-New_Multi_Report=\u65B0\u5EFA\u805A\u5408\u62A5\u8868(M) -BackgroundTexture-PinkTissuePaper=\u7C89\u8272\u7802\u7EB8 -Preference-Support_Default_Parent_Calculate=\u9ED8\u8BA4\u7236\u683C\u8BA1\u7B97 -Show_Blank_Column=\u8865\u5145\u7A7A\u767D\u5217 -BaiduMap=\u767E\u5EA6\u5730\u56FE -Report-Web_Attributes=\u6A21\u677FWeb\u5C5E\u6027 -FR-Designer_StyleAlignment-Wrap_Text=\u81EA\u52A8\u6362\u884C -Need=\u9700\u8981 -Parameter-Double=\u53CC\u7CBE\u5EA6\u578B -Config_Servlet=\u914D\u7F6E\u8FDC\u7A0B\u670D\u52A1\u5668 -Form-Comma=\u9017\u53F7 -Verify=\u6821\u9A8C -PageSetup-Landscape=\u6A2A\u5411 -Weeks=\u4E2A\u661F\u671F -FR-Designer-Widget-Style_Title_Background=\u6807\u9898\u80CC\u666F -Preference-Pagination_Line_Color=\u5206\u9875\u7EBF\u989C\u8272 -Test_URL=\u6D4B\u8BD5\u8FDE\u63A5 -Fill_blank_Data=\u8865\u5145\u7A7A\u767D\u6570\u636E -ReportServerP-The_name_of_printer_cannot_be_null=\u6253\u5370\u673A\u7684\u540D\u5B57\u4E0D\u80FD\u4E3A\u7A7A -FR-Designer-Basic_Copy_Activation_Key=\u53CC\u51FB\u8BBE\u8BA1\u5668\u7F16\u53F7\u53EF\u590D\u5236\u5230\u526A\u8D34\u677F -Continuum=\u76F8\u90BB\u8FDE\u7EED -BackgroundTexture-MediumWood=\u6DF1\u8272\u6728\u8D28 -Datasource-Column_Index=\u5217\u5E8F\u53F7 -Function-Function_File=\u51FD\u6570\u6587\u4EF6 -Form-Component_Bounds=\u63A7\u4EF6\u8FB9\u754C -Utils-Submit=\u63D0\u4EA4 -Conditions_formula=\u6761\u4EF6\u516C\u5F0F -M_Insert-Image=\u63D2\u5165\u56FE\u7247 -FR-Designer-Plugin_Will_Be_Delete=\u63D2\u4EF6\u5C06\u88AB\u5220\u9664\uFF0C\u9700\u91CD\u542F\u8BBE\u8BA1\u5668\u53CA\u670D\u52A1\u5668\uFF0C\u670D\u52A1\u5668\u9700\u624B\u52A8\u91CD\u542F -FormulaD-Functions=\u51FD\u6570 -Mobile_Terminal=\u79FB\u52A8\u7AEF -CheckBox=\u590D\u9009\u6846 -FR-Designer-Plugin_Install=\u5B89\u88C5 -Sun=\u65E5 -FR-Designer_ToolBar_Bottom=\u5E95\u90E8\u5DE5\u5177\u680F -Widget-Width=\u63A7\u4EF6\u5BBD\u5EA6 -Series_Name=\u7CFB\u5217\u540D -Set_Row_Title_Start=\u8BBE\u7F6E\u91CD\u590D\u6807\u9898\u884C -HF-Default_Page=\u9ED8\u8BA4\u9875 -Env_Des=\u5982\u679C\u767B\u5F55\u73AF\u5883\u4E2D\u7684\u62A5\u8868\u5DE5\u7A0B\u542F\u7528\u4E86\u6743\u9650,\u7528\u6237\u540D\u548C\u5BC6\u7801\u7684\u586B\u5199\u5FC5\u987B\u5BF9\u5E94\u767B\u9646\u73AF\u5883\u7684\u7528\u6237\u548C\u5BC6\u7801\u3002 -Widget-User_Defined=\u9884\u5B9A\u4E49 -Url_location=\u7EDD\u5BF9\u8DEF\u5F84 -Disk_File=\u78C1\u76D8\u6587\u4EF6 -Inside=\u5185\u90E8 -FR-Designer_filedChosen=\u4F9D\u8D56\u7684\u5B57\u6BB5 -ServerM-Predefined_Styles=\u9884\u5B9A\u4E49\u6837\u5F0F -is_need_word_adjust=\u4E0D\u56FA\u5B9A\u884C\u9AD8\u5BFC\u51FA -Background-Null=\u6CA1\u6709\u80CC\u666F -PageSetup-Vertically=\u5782\u76F4\u5C45\u4E2D -FR-Designer_Root=\u6839\u8282\u70B9 -FR-Designer_Form-TextArea=\u6587\u672C\u57DF -ReportServerP-Import_JavaScript=\u5F15\u7528JavaScript -Form-TableTree=\u8868\u683C\u6811 -Opened=\u5DF2\u5F00\u542F -M_Edit-Delete=\u5220\u9664(D) -Widget-Form_Widget_Container=\u8868\u5355\u5BB9\u5668 -BindColumn-Summary=\u6C47\u603B -Sche-Second=\u79D2 -Server-Open_Service_Manager=\u6253\u5F00\u670D\u52A1\u7BA1\u7406\u5668 -FRFont-Effects=\u7279\u6B8A\u6548\u679C -OtherGroup_Name=\u5176\u4ED6\u7EC4\u7684\u540D\u5B57 -Specify=\u6307\u5B9A -Highlight-Click_to_Choose_Property_To_Modify=\u70B9\u51FB\u9009\u62E9\u8981\u6539\u53D8\u7684\u5C5E\u6027 -triggered=\u88AB\u89E6\u53D1 -Double_Bottom_BorderLine=\u53CC\u5E95\u6846\u7EBF -M_Insert-Sub_Report=\u63D2\u5165\u5B50\u62A5\u8868 -Unit_Ten=\u5341 -Polybolck=\u805A\u5408\u5757 -Select_sort_order=\u9009\u62E9\u6392\u5217\u987A\u5E8F -HJS-Mail_to=\u6536\u4EF6\u4EBA -StyleAlignment-Left=\u9760\u5DE6 -Two_Rows_Of_Two_Grid=\u4E24\u884C\u4E24\u5217\u7684\u683C\u5B50 -FR-Designer-Form-Please_Drag_ParaPane=\u8BF7\u62D6\u5165\u53C2\u6570\u9762\u677F -Milliseconds=\u6BEB\u79D2 -DataFunction-None=\u65E0 -Delivery=\u4F20\u9012 -ColumnSpan=\u5217\u8DE8\u5EA6 -StyleAlignment-Bottom=\u9760\u4E0B -Read_failure=\u8BFB\u53D6\u5931\u8D25\uFF0C\u53EF\u80FD\u6E90\u6587\u4EF6\u5DF2\u635F\u574F -Verify-Verify=\u6570\u636E\u6821\u9A8C -FR-Designer-Widget-Style_Title_Format=\u6807\u9898\u683C\u5F0F -FR-Designer_Edit_String_To_Formula=\u662F\u5426\u5C06\u5B57\u7B26\u4E32\u7F16\u8F91\u4E3A\u516C\u5F0F -FR-Base_UnSignIn=\ \u672A\u767B\u5F55 -Every=\u6BCF -CellWrite-Preview_Cell_Content=\u9884\u89C8\u5355\u5143\u683C\u5185\u5BB9 -FormulaD-Data_Fields=\u6570\u636E\u9879 -FR-Designer_Role=\u89D2\u8272 -FR-Designer_Permissions=\u6743\u9650 -FR-Designer_Form_Button=\u6309\u94AE -FR-Designer_WF_Name=\u540D\u79F0 \ No newline at end of file +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_AlphaFine_Enable=\u5F00\u542F +FR-Designer_AlphaFine_EnableAlphaFine=\u5F00\u542FAlphaFine\u529F\u80FD +FR-Designer_AlphaFine_EnableInternet=\u8054\u7F51 +FR-Designer_AlphaFine_EnableInternetSearch=\u8054\u7F51\u641C\u7D22 +FR-Designer_AlphaFine_Shortcut_Config=\u5FEB\u6377\u952E\u914D\u7F6E +FR-Designer_AlphaFine_SearchRange=\u641C\u7D22\u8303\u56F4 +FR-Designer-Plugin_Addon=\u5E94\u7528\u4E2D\u5FC3 +FR-Designer_Templates=\u6A21\u677F +FR-Designer_Templates_Content=\u6A21\u677F\u5185\u5BB9 +FR-Designer_AlphaFine_ShowAll=\u663E\u793A\u5168\u90E8 +FR-Designer_AlphaFine_Conclude=\u731C\u60A8\u9700\u8981 +FR-Designer_AlphaFine_Latest=\u6700\u8FD1\u5E38\u7528 +FR-Designer_AlphaFine_ShowLess=\u6536\u8D77 +FR-Designer_Alphafine=AlphaFine\u667A\u80FD\u641C\u7D22 + diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 9994427d8..271150729 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -100,7 +100,6 @@ FR-Designer_FS_Close_Other_Templates=\u95DC\u9589\u5176\u4ED6\u7BC4\u672C FR-Designer_File=\u6A94\u6848 FR-Designer_Filter_Conditions=\u904E\u6FFE\u689D\u4EF6 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_Font-Family=\u5B57\u9AD4\u540D\u7A31 FR-Designer_Font-Size=\u5B57\u9AD4\u5927\u5C0F @@ -358,7 +357,6 @@ FR-Designer_KeyPoint=\u95DC\u9375\u7BC0\u9EDE FR-Designer_loadedTreeModel=\u52A0\u8F09\u5931\u6557,\u8ACB\u6AA2\u67E5\u5F8C\u91CD\u8A66 FR-Designer-Failed_to_load_the_plugin=\u7121\u6CD5\u52A0\u8F09\u63D2\u4EF6\uFF0C\u8ACB\u66F4\u65B0\u63D2\u4EF6\uFF1A FR-Designer-Plugin_Please_Update_Jar=\u8ACB\u66F4\u65B0Jar\u5305, \u63D2\u4EF6\u9700\u6C42\u6700\u4F4E\u7248\u672C -FR-Designer-Invalid_Page_Number=\u7121\u6548\u9801\u78BC FR-Designer_Get-CubeGetting=\u7372\u53D6cube FR-Designer_XMLA_Database=\u8CC7\u6599\u5EAB FR-Designer_XMLA_UserName=\u5E33\u865F @@ -453,12 +451,12 @@ FR-Designer-QQLogin-Determine=\u78BA\u5B9A FR-Designer-QQLogin-Cancel=\u53D6\u6D88 FR-Designer-Reuse_Manager=\u7D44\u4EF6\u7BA1\u7406 FR-Designer_TableData-Default-Para=\u6578\u64DA\u96C6\u9ED8\u8A8D\u53C3\u6578 -FR-Designer_Layout_Block_Absolute=\u7D55\u5C0D\u756B\u5E03\u584A -FR-Designer_Layout_Block_Tab=Tab\u584A -FR-Designer_Layout_Block_Blank=\u7A7A\u767D\u584A -FR-Designer_Attr_Layout=\u4F48\u5C40 -FR-Designer_Attr_Layout_Type=\u4F48\u5C40\u65B9\u5F0F -FR-Designer_Attr_Bidirectional_Adaptive=\u96D9\u5411\u81EA\u9069\u61C9 +FR-Designer_Layout_Block_Absolute= +FR-Designer_Layout_Block_Tab= +FR-Designer_Layout_Block_Blank= +FR-Designer_Attr_Layout= +FR-Designer_Attr_Layout_Type= +FR-Designer_Attr_Bidirectional_Adaptive= FR-Designer_Mobile-Refresh=\u5237\u65B0 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 @@ -480,10 +478,6 @@ 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_Properties=\u5C6C\u6027 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_Exported_successfully=\u532F\u51FA\u6210\u529F FR-Designer_Exporting=\u6B63\u5728\u532F\u51FA... @@ -491,36 +485,23 @@ FR-Designer_Export-PDF=PDF\u683C\u5F0F FR-Designer_Properties_Mobile=\u624B\u6A5F\u5C6C\u6027 FR-Designer_Button_OK=\u78BA\u5B9A FR-Designer_Button_Cancel=\u53D6\u6D88 -FR-Designer_JavaScript=JavaScript\u8173\u672C -FR-Designer_JavaScript_Form_Submit=\u8868\u55AE\u63D0\u4EA4 -FR-Designer_JavaScript_Commit_to_Database=\u63D0\u4EA4\u5165\u5EAB -FR-Designer_JavaScript_Custom=\u81EA\u5B9A\u7FA9 -FR-Designer_RWA_Submit=\u63D0\u4EA4 -FR-Designer_Event_Name=\u4E8B\u4EF6\u540D -FR-Designer_Event_Type=\u4E8B\u4EF6\u985E\u578B -FR-Designer_Event_Name_Type=\u4E8B\u4EF6\u540D\u5B57\u548C\u985E\u578B -FR-Designer_JavaScript_Set=JS\u8A2D\u7F6E -FR-Designer_Attribute=\u5C6C\u6027 -FR-Designer_Form_Editing_Listeners=\u4E8B\u4EF6\u7DE8\u8F2F -FR-Designer_Form_Basic_Properties=\u57FA\u672C\u5C6C\u6027 -FR-Designer_DS_Dictionary=\u6578\u64DA\u5B57\u5178 -FR-Designer_Create_Tree=\u69CB\u5EFA\u6A39 -FR-Designer_Set_Callback_Function=\u8A2D\u7F6E\u56DE\u8ABF\u51FD\u6578 -FR-Designer_ConfirmDialog_Content=\u662F\u5426\u78BA\u5B9A\u522A\u9664TAB\u63A7\u4EF6 -FR-Designer_ConfirmDialog_Title=FineReport 8.0 -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_FormulaPane_Variables=\u8B8A\u91CF -FR-Designer_FormulaPane_Formula_Description=\u516C\u5F0F\u8AAA\u660E -FR-Designer_FormulaPane_Function_Detail=\u51FD\u6578\u660E\u7D30 -FR-Designer_FormulaPane_Search=\u641C\u7D22 -FR-Designer_Tab_carousel=Tab\u8F2A\u64AD -FR-Designer_setCarousel=\u958B\u555F\u8F2A\u64AD -FR-Designer_carouselInterval=\u8F2A\u64AD\u9593\u9694 -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_JavaScript= +FR-Designer_JavaScript_Form_Submit= +FR-Designer_JavaScript_Commit_to_Database= +FR-Designer_JavaScript_Custom= +FR-Designer_RWA_Submit= +FR-Designer_Event_Name= +FR-Designer_Event_Type= +FR-Designer_Event_Name_Type= +FR-Designer_JavaScript_Set= +FR-Designer_Attribute= +FR-Designer_Form_Editing_Listeners= +FR-Designer_Form_Basic_Properties= +FR-Designer_DS_Dictionary= +FR-Designer_Create_Tree= +FR-Designer_Set_Callback_Function= +FR-Designer_ConfirmDialog_Content= +FR-Designer_ConfirmDialog_Title= 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 @@ -528,39 +509,6 @@ 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_Null=\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}" \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_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-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_Parameter-Formula=\u516C\u5F0F -FR-Designer_Plugin_Should_Update_Please_Contact_Developer=\u633F\u4EF6\u7248\u672C\u904E\u4F4E\uFF0C\u5B58\u5728API\u4E0D\u76F8\u5BB9\uFF0C\u8ACB\u806F\u7CFB\u958B\u767C\u8005\u965E\u7D1A\u633F\u4EF6 -FR-Designer_WidgetOrder=\u63A7\u4EF6\u9806\u5E8F -FR-Designer_Mobile_Form_Analysis_Annotation=\u6CE8\u91CB\uFF1A\u53EF\u4EE5\u901A\u904E\u8A72\u5C6C\u6027\u63A7\u5236\u8868\u55AE\u5728APP\u4E2D\u7684\u89E3\u6790\u65B9\u5F0F\u3002 -FR-Designer_Mobile_Report_Analysis_Annotation=\u6CE8\u91CB\uFF1A\u53EF\u4EE5\u901A\u904E\u8A72\u5C6C\u6027\u63A7\u5236\u5831\u8868\u5728APP\u4E2D\u7684\u89E3\u6790\u65B9\u5F0F\uFF0C\u53EA\u652F\u6301\u5206\u9801\u9810\u89BD\uFF0C\u586B\u5831\u9810\u89BD\u6642\u5C6C\u6027\u7121\u6548\u3002 FR-Designer_Background_Null= FR-Designer_Background_Color= FR-Designer_Background_Texture= @@ -569,1421 +517,17 @@ FR-Designer_Background_Gradient_Color= FR-Designer_Background_Image= FR-Designer_Background_Clear= FR-Designer_Background_Image_Select= -FR-Designer_Too_Large_To_Paste=\u7D44\u4EF6\u5927\u5C0F\u8D85\u51FA\u908A\u754C\uFF0C\u7121\u6CD5\u7C98\u8CBC\uFF01 -FR-Designer_Too_Small_To_Paste=\u6B64\u8655\u7121\u6CD5\u7C98\u8CBC\uFF0C\u5C0F\u65BC\u7D44\u4EF6\u6700\u5C0F\u9AD8\u5EA6\uFF01 +FR-Designer_Tab_carousel= +FR-Designer_setCarousel= +FR-Designer_carouselInterval= FR-Designer_Initial_Background_Tips= FR-Designer_Mouse_Move_Tips= FR-Designer_Mouse_Click_Tips= -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_Style=\u6A23\u5F0F -FR-Designer_Color=\u984F\u8272 -FR-Designer_Border=\u6846\u7DDA -FR-Designer_Background-Pattern=\u5716\u6848 -FR-Designer_SimpleDetail_Report= -FR-Designer_Reset= -FR-Designer_AllCategories= -FR-Designer-Selected_Widget= -FR-Designer_SimpleCross_Report= -FR-Designer_LocalWidget= -FR-Designer_Edit_Button_ToolBar=\u7DE8\u8F2F\u6309\u9215\u6240\u5728\u5DE5\u5177\u6B04 -FR-Designer_Remove_Button_ToolBar=\u79FB\u9664\u6309\u9215\u6240\u5728\u5DE5\u5177\u6B04 -FR-Designer_Install_Template= -FR-Designer_Allow-Blank= -FR-Designer_Delete_Template= -FR-Designer_Download_Template= -FR-Designer_DoubleLayer_Report= -FR-Designer_Validate= -CellWrite-InsertRow_NULL=\u7A7A\u503C -DashBoard-ChartFloat=\u5716\u8868 -contact_info=\u806F\u7E6B\u8A0A\u606F(\u9078\u586B) -Page_Setup=\u9801\u9762\u8A2D\u5B9A -CellWrite-Print_Export=\u5217\u5370\u532F\u51FA -Cannot_Get_Date=\u4E0D\u80FD\u7372\u53D6\u65E5\u671F -FR-Designer_Modify=\u4FEE\u6539 -M-Write_Preview=\u586B\u5831\u9810\u89BD -FR-Base_RWA-Key=\u4E3B\u9375 -China=\u4E2D\u570B -Set_Legend_Sytle=\u8A2D\u5B9A\u5716\u4F8B\u683C\u5F0F -FR-Designer_Number=\u6578\u5B57 -FR-Designer-Widget-Style_Common=\u666E\u901A -M-Save_As=\u53E6\u5B58\u70BA -Following_parameters_are_not_generated=\u4EE5\u4E0B\u53C3\u6578\u672A\u751F\u6210 -FR-Designer-Basic_Activation_Key_Copy_OK=Key has been copy to clipboard -Utils-Current_Sheet=\u7576\u524D\u7684Sheet -ConditionB-is_less_than=\u5C0F\u65BC -BorderLayout-West=\u897F -AnalysisLine=\u5206\u6790\u7DDA\u578B -Layer_Report_Warnning_info=\u5217\u5F0F\u5F15\u64CE\u9069\u7528\u65BC\u5927\u8CC7\u6599\u91CF\u60C5\u5F62\u4E0B\u3002
\u4F7F\u7528\u6B64\u5F15\u64CE\u5F88\u591A\u5831\u8868\u7279\u6027\u5C07\u4E0D\u518D\u652F\u6301\uFF0C
\u8A73\u7D30\u5167\u5BB9\u8ACB\u898B\u76F8\u95DC\u6587\u6A94\u3002 -Tree-Width=\u5BEC\u5EA6 -alert_word=\u9078\u64C7\u4E0D\u56FA\u5B9A\u5217\u9AD8\u532F\u51FA\u6642, \u7DE8\u8F2F\u532F\u51FA\u7684word, \u5132\u5B58\u683C\u5217\u9AD8\u6703\u96A8\u8457\u5167\u5BB9\u81EA\u52D5\u62C9\u4F38, \u6B64\u60C5\u6CC1\u4E0B\u532F\u51FA\u7D50\u679C\u8207\u9810\u89BD\u7D50\u679C\u53EF\u80FD\u6703\u4E0D\u518D\u4E00\u81F4. -PageSetup-Paper_Size=\u7D19\u5F35\u5927\u5C0F -M-Page_Setup=\u9801\u9762\u8A2D\u5B9A -DashBoard-FormBook=\u8868\u55AE -X-Coordinate=\u6A6B\u5EA7\u6A19 -Style-Line_Spacing=\u5217\u9593\u8DDD -FR-Designer_Plugin_Should_Update_Title=Warning -Server-Define_Data_Connection=\u5B9A\u7FA9\u8CC7\u6599\u9023\u63A5 -BarInside=\u67F1\u5B50\u5167\u5074 -Border-Color=\u6846\u7DDA\u984F\u8272 -NotAllow=\u4E0D\u5408\u6CD5 -Utils-File_type=\u6A94\u6848\u985E\u578B -FR-Designer-Plugin_Install_From_Local=Install plugin from local file -Summary_Method=\u532F\u7E3D\u65B9\u5F0F -Select_Specified_Grouping=\u9078\u64C7\u81EA\u5B9A\u7FA9\u5206\u7D44 -HF-Number_of_Page=\u7E3D\u9801\u6578 -FR-Designer-Tree_Height=\u9AD8\u5EA6 -Owner=\u4E3B -Home=\u4E3B\u9801 -FR-Server_Embedded_Server_Stop=\u5167\u7F6E\u7684\u4F3A\u670D\u5668-\u505C\u6B62 -FR-Designer-Plugin_Detecting_Update=Detecting update -HF-Whether_to_define_the_selected_type=\u662F\u5426\u5B9A\u7FA9\u9078\u4E2D\u7684\u985E\u578B -StyleAlignment-Right=\u9760\u53F3\u5C0D\u9F4A -FR-Designer_Alignment-Style=\u5C0D\u9F4A\u65B9\u5F0F -PageSetup-Title_Start_Column=\u91CD\u8907\u6A19\u984C\u6B04 -Tree-Mutiple_Selection_Or_Not=\u591A\u9078 -FR-Designer-Plugin_Search=Search -Choose_Role=\u6B0A\u9650\u63A7\u5236 -Append_Delete_Row_Message=\u6CE8\u610F\uFF01\u6307\u5B9A\u7684\u5132\u5B58\u683C\u9700\u8981\u8A2D\u5B9A\u64F4\u5C55\u5C6C\u6027 -Form-ComboBox=\u4E0B\u62C9\u6846 -PageSetup-Footer=\u9801\u5C3E -Sorting=\u6392\u5E8F\u4E2D -DBCP_TEST_WHILE_IDLE=\u958B\u555F\u7A7A\u9591\u56DE\u6536\u5668\u6AA2\u9A57 -DS-Embedded_TableData=\u5167\u7F6E\u8CC7\u6599\u96C6 -FR-Designer_No-Privilege=\u6C92\u6709\u6B0A\u9650 -FRFont-Subscript=\u4E0B\u6A19 -Background_Settings=\u80CC\u666F\u8A2D\u5B9A -FormulaD-Invalid_Formula=\u975E\u6CD5\u7684\u516C\u5F0F -FR-Base_Margin=\u908A\u8DDD -FR-Designer-Plugin_Shop_Installed=\u63D2\u4EF6\u5546\u5E97\u5B89\u88DD\u5B8C\u7562,\u662F\u5426\u7ACB\u523B\u555F\u52D5? -M_Edit-Send_to_Back=\u7F6E\u65BC\u5E95\u5C64(K) -Email-Can_Preview_Report_Content=\u6B63\u6587\u9810\u89BD\u5831\u8868\u5167\u5BB9 -FR-Designer-FRFont_Italic=\u659C\u9AD4 -CellWrite-Print_Background=\u5217\u5370/\u532F\u51FA\u5132\u5B58\u683C\u80CC\u666F -Wizard=\u56AE\u5C0E -Preference-Is_Drag_Permited=\u652F\u6301\u62D6\u62FD -FR-Designer_Release_Lock=\u89E3\u9396 -Form-Delimiter=\u5206\u9694\u7B26 -wrong=\u51FA\u932F\u4E86 -FR-Menu-Server_Chart_PreStyle=\u9810\u5B9A\u7FA9\u5716\u8868 -Form-Button=\u6309\u9215 -FormulaD-Valid_Formula=\u5408\u6CD5\u7684\u516C\u5F0F -ParameterD-Parameter_Interface=\u53C3\u6578\u754C\u9762 -At_least_one_visual_worksheet=\u5DE5\u4F5C\u7C3F\u4E2D\u81F3\u5C11\u8981\u6709\u4E00\u5F35\u53EF\u8996\u5316\u5DE5\u4F5C\u8868,\u5982\u679C\u60F3\u8981\u522A\u9664\uFF0C\u8ACB\u5148\u63D2\u5165\u4E00\u5F35\u65B0\u5DE5\u4F5C\u8868 -Need_Min_Value=\u9700\u8981\u6700\u5C0F\u503C -Allow_Blank=\u5141\u8A31\u70BA\u7A7A\u767D -CellWrite-InsertRow_DEFAULT=\u9810\u8A2D\u503C -Widget-Load_By_Complete=\u5B8C\u5168\u8F09\u5165 -FR-Designer-Basic_Only_Submit_Current_Sheet= -Sort-Sort_Order=\u6392\u5217\u9806\u5E8F -File-File_Size_Limit=\u6A94\u6848\u5927\u5C0F\u9650\u5236 -PrintP-Print=\u5217\u5370(T) -FR-Designer-StyleAlignment_Center=\u7F6E\u4E2D -Preference-Setting_Colors=\u984F\u8272\u914D\u7F6E -Judge=\u5224\u65B7 -Image-Adjust=\u9069\u61C9 -Collect-User_Information_DES=\u7528\u6236\u8A0A\u606F\u78BC\u53EA\u662F\u7528\u4F86\u6536\u96C6\u4F7F\u7528\u8005\u8A0A\u606F\u7684\uFF0C\u53EA\u8981\u9EDE\u64CA\u4E0A\u9762\u7684"\u7372\u53D6\u7528\u6236\u8A0A\u606F\u78BC"\u6309\u9215\uFF0C\u5C31\u6703\u5F48\u51FA\u4E00\u500B\u65B0\u7684\u700F\u89BD\u5668\u7A97\u9AD4\uFF0C\u767B\u9304\u5230\u7522\u54C1\u5B98\u65B9\u7DB2\u7AD9\u7372\u5F97\u9019\u500B\u7528\u6236\u8A0A\u606F\u78BC\uFF0C\u6574\u500B\u7A0B\u5E8F\u53EA\u9700\u89813\u5206\u9418\uFF0C\u53EA\u9700\u8981\u64CD\u4F5C\u4E00\u6B21\uFF0C\u800C\u4E14\u5B8C\u5168\u514D\u8CBB\u3002 -FR-Designer_Plugin_Normal_Update_From_Local=Update from local file -BackgroundTexture-Canvas=\u756B\u5E03 -BarOutSide=\u67F1\u5B50\u5916\u5074 -Preview_ToolTips=\u9810\u89BD\u63D0\u793A -FRFont-Family=\u540D\u5B57 -FR-Lic_does_not_Support_Remote=\u60A8\u7576\u524D\u4F7F\u7528\u7684lic\u4E0D\u652F\u6301\u9060\u7A0B\u8A2D\u8A08\u529F\u80FD\uFF0C\u8ACB\u5347\u7D1A\u60A8\u7684lic -InterfaceStyle=\u98A8\u683C -RWA-Key=\u4E3B\u9375 -WF-Name=\u540D\u7A31 -RWA-Click_Cell_To_Edit_Value=\u55AE\u64CA\u6A21\u677F\u5132\u5B58\u683C\u4FEE\u6539\u503C -Utils-Row_Height=\u5217\u9AD8 -ReportD-Excel_Export=\u5831\u8868\u532F\u51FA\u5C6C\u6027 -Form-Please_Select_A_Kind_Of_Form_Container=\u8ACB\u9078\u64C7\u4E00\u7A2E\u8868\u55AE\u5BB9\u5668 -Column_Does_Not_Exsit=\u6B04\u4E0D\u5B58\u5728 -M_Insert-Hyperlink=\u8D85\u7D1A\u93C8\u63A5 -can_not_include_underline=\u4E0D\u80FD\u5305\u542B"_" -FR-Designer-Plugin_Jar_Expired=Jar\u5305\u904E\u820A -FR-Background_Image_Extend=\u62C9\u4F38 -TopDownShade=\u4E0A\u4E0B\u6F38\u8B8A -FR-Base_Right=\u53F3 -DataBinding=\u8CC7\u6599\u7D81\u5B9A -ConnectionPool_Attr=\u9023\u63A5\u6C60\u5C6C\u6027 -Connect_SQL_Cannot_Null=\u8CC7\u6599\u9023\u63A5\u548CSQL\u9762\u677F\u4E0D\u80FD\u70BA\u7A7A -DBCP_MAX_ACTIVE=\u6700\u5927\u6D3B\u52D5\u9023\u63A5\u6578 -M_Window-Preference=\u9078\u9805 -ToolBar_Top=\u9802\u90E8\u5DE5\u5177\u6B04 -FR-Designer_Indent-Pixel=\u50CF\u7D20 -FR-Designer_Unit_MM=\u516C\u5398 -IDLE=\u7A7A\u9592 -FRFont-Underline=\u4E0B\u5283\u7DAB -FR-Designer-Plugin_Read_Plugin_List_Error=Error to read plugin list -Type_Set=\u985E\u578B\u8A2D\u5B9A -M_Format_A-Cell_Attributes=\u5176\u4ED6\u5C6C\u6027 -CellWrite-Show_As_Image=\u7528\u5716\u7247\u986F\u793A\u5167\u5BB9 -ShowAsDownload=\u7528\u4E0B\u8F09\u93C8\u63A5\u986F\u793A\u4E8C\u9032\u5236\u5167\u5BB9 -Form-ComboCheckBox=\u4E0B\u62C9\u8907\u9078\u6846 -BackgroundTexture-WovenMat=\u7DE8\u7E54\u7269 -BindColumn-Custom_Data_Appearance=\u81EA\u5B9A\u7FA9\u986F\u793A -Actived=\u6D3B\u52D5\u7684 -Env-Local_Directory=\u672C\u6A5F\u76EE\u9304 -Form-Colon=\u5192\u865F -Preference-Vertical_Scroll_Bar_Visible=\u8C4E\u76F4\u6EFE\u52D5\u689D\u53EF\u898B -Utils-Show_Cell_Value=\u986F\u793A\u5132\u5B58\u683C\u503C -FR-Designer_ReportColumns-Repeat_Row=\u8907\u88FD\u5217\u5E8F\u6B04 -SpecifiedG-Specified_Group=\u81EA\u5B9A\u7FA9\u5206\u7D44 -RWA-Smart_Add_Cells=\u667A\u80FD\u65B0\u589E\u5132\u5B58\u683C -HF-Left_Section=\u5DE6\u5340\u57DF -M_Report-Report_Background=\u5831\u8868\u80CC\u666F -Image-Extend=\u62C9\u4F38 -FS_BI=\u6C7A\u7B56\u5E73\u81FA -ToolBar_Bottom=\u5E95\u90E8\u5DE5\u5177\u6B04 -Hgap=\u6C34\u5E73\u9593\u9699 -FR-Designer_Enter-New-FileName=\u8ACB\u8F38\u5165\u65B0\u7684\u6A94\u6848\u540D -Verify_Fail=\u6821\u9A57\u5931\u6557 -CellWrite-InsertRow_Policy=\u63D2\u5165\u5217\u7B56\u7565 -FR-Designer-Plugin_Illegal_Plugin_Zip=Illegal plugin zip -RCodeVersion=\u7248\u672C -Convert=\u8F49\u63DB -Please_Drag=\u8ACB\u62D6\u5165\u5217\u6B04\u6B04\u4F4D\u3001\u532F\u7E3D\u6B04\u4F4D -FR-Designer-Widget-Style_Preview=\u9810\u89BD -mobile_number=\u624B\u6A5F\u865F\u78BC -FR-Designer_Form-ComboCheckBox=\u4E0B\u62C9\u8907\u9078\u6846 -CacheValidateTime=\u5831\u8868\u7DE9\u5B58\u6709\u6548\u6642\u9593 -Hyperlink-Extends_Report_Parameters=\u7E7C\u627F\u5831\u8868\u7684\u53C3\u6578 -FR-Designer_Values-Editor=\u503C\u7DE8\u8F2F\u5668 -Export-Excel=Excel\u683C\u5F0F -Utils-Left_to_Right=\u6A6B\u5411 -ExpandD-Vertical_Extendable=\u7E31\u5411\u53EF\u4F38\u5C55 -Utils-Report_Runtime_Env=\u5831\u8868\u5DE5\u4F5C\u76EE\u9304 -Utils-Right_to_Left=\u5F9E\u53F3\u5230\u5DE6 -Utils-Beyond_the_top_side_of_Border=\u8D85\u51FA\u4E0A\u908A\u754C -Exception_StackTrace=\u932F\u8AA4\u7570\u5E38\u5806\u68E7\u8A0A\u606F -Corresponding_Fields=\u5C0D\u61C9\u6B04\u4F4D -Form-CheckBox=\u5FA9\u9078\u6846 -Utils-Current_Row=\u7576\u524D\u5217 -BuildIn=\u5167\u7F6E -BindColumn-Results_Filter=\u7D50\u679C\u96C6\u7BE9\u9078 -FR-Designer-Plugin_Manager=\u63D2\u4EF6\u7BA1\u7406 -M_File-Export-CSV=CSV\u683C\u5F0F(\u9017\u865F\u5206\u9694) -Data_Filter=\u8CC7\u6599\u7BE9\u9078 -ReportServerP-Edit_Printer=\u7DE8\u8F2F\u5370\u8868\u6A5F -FR-Designer_Datasource-Stored_Procedure=\u5B58\u5132\u7A0B\u5E8F -RESTART=\u91CD\u5553 -FormulaD-Function_name=\u51FD\u6578\u540D -ChooseOneButton=\u8ACB\u9078\u64C7\u4E00\u500B\u63A7\u5236\u9805\u5F8C\u518D\u65B0\u589E -Priority=\u512A\u5148\u7D1A -Datasource-Datasource=\u8CC7\u6599\u6E90 -FR-Designer_Width=\u5BEC -Cannot-Add_To_This_Area=\u7121\u6CD5\u65B0\u589E\u5230\u8A72\u5340\u57DF -Run=\u904B\u884C -Set_Submit_Condition=\u8A2D\u5B9A\u63D0\u4EA4\u689D\u4EF6 -FR-Base_Value=\u503C -fileLocked_undeleted=\u6A21\u677F\u88AB\u9396\u5B9A\uFF0C\u4E0D\u80FD\u522A\u9664\uFF01\u9EDE\u64CA\u78BA\u5B9A\uFF0C\u91CD\u65B0\u6574\u7406\u6A21\u677F\u6B04\u8868 -Web_Apply=WEB\u61C9\u7528 -Refresh_Database=\u91CD\u65B0\u6574\u7406\u8CC7\u6599\u5EAB -Set_Row_Title_End=\u8A2D\u5B9A\u91CD\u8907\u7D50\u5C3E\u5217 -FR-Utils-New_Folder=\u65B0\u589E\u8CC7\u6599\u593E -BiasD-From-upper_left_to_lower_right=\u5F9E\u5DE6\u4E0A\u5230\u53F3\u4E0B\u767C\u6563 -CapsLock=\u5927\u5BEB\u9396\u5B9A\u5DF2\u6253\u958B -StyleFormat-Sample=\u793A\u4F8B -RWA-Smart_Add_Cell_Group=\u667A\u80FD\u65B0\u589E\u5132\u5B58\u683C\u7D44 -MConfig-CancelButton=\u53D6\u6D88 -Function-Choose_Function_Class=\u9078\u64C7\u51FD\u6578\u985E -LatLng=\u7D93\u7DEF\u5EA6 -DS-Server_TableData=\u4F3A\u670D\u5668\u8CC7\u6599\u96C6 -BackgroundTexture-GreenMarble=\u7DA0\u8272\u5927\u7406\u77F3 -read_time_out=\u52A0\u8F09\u8D85\u6642 -JavaScript-Commit_to_Database=\u63D0\u4EA4\u5165\u5EAB -DS-Relation_TableData=\u95DC\u806F\u8CC7\u6599\u96C6 -CellWrite-Page_Before_Row=\u5217\u524D\u5206\u9801 -FR-Designer-Plugin_Load_Plugins_From_Server=Loading plugins from store -D-Dispaly_Divide_Result_Set_into_Groups=\u5C07\u7D50\u679C\u96C6\u9032\u884C\u5206\u7D44 -Closed=\u5DF2\u95DC\u9589 -RWA-Help=\u8A2D\u5B9A\u672A\u4FEE\u6539\u4E0D\u66F4\u65B0\u5F8C\uFF0C\u586B\u5831\u9810\u89BD\u5831\u8868\uFF0C\u8A18\u9304\u6240\u5728\u5132\u5B58\u683C\u6C92\u6709\u88AB\u7DE8\u8F2F\u4FEE\u6539\uFF0C\u5247\u6B64\u8A18\u9304\u4E0D\u6703\u9032\u884C\u66F4\u65B0\uFF1B\n\u5728\u5927\u8CC7\u6599\u91CF\u8A18\u9304\u67E5\u8A62\u4E26\u56DE\u586B\u60C5\u6CC1\u4E0B\uFF0C\u555F\u7528\u8A72\u8A2D\u5B9A\uFF0C\u53EF\u4EE5\u63D0\u9AD8\u586B\u5831\u63D0\u4EA4\u6027\u80FD\u3002 -FR-Designer-Widget-Style_Custom=\u81EA\u5B9A\u7FA9 -FR-Designer-Widget-Style_Render_Style=\u6E32\u67D3\u98A8\u683C -Highlight-Barcode=\u689D\u78BC -FR-Designer_Connect_SQL_Cannot_Null=\u8CC7\u6599\u9023\u63A5\u548CSQL\u9762\u677F\u4E0D\u80FD\u70BA\u7A7A -trigger=\u89F8\u767C -M-Data_Analysis=\u8CC7\u6599\u5206\u6790 -Function-The_selected_file_cannot_be_null=\u6A94\u6848\u4E0D\u80FD\u70BA\u7A7A -No-Privilege=\u6C92\u6709\u6B0A\u9650 -ReportColumns-Repeat_Column=\u91CD\u8907\u6B04\u5E8F\u6B04 -SecondGraduationUnit=\u6B21\u8981\u523B\u5EA6\u55AE\u4F4D -Form-Widget_Property_Value=\u5C6C\u6027\u503C -GIVE-NAME=Give Name -FR-Designer_Rename=\u91CD\u547D\u540D -Utils-Merge_Cell=\u5408\u5E76\u5132\u5B58\u683C -Style-Spacing_After=\u6BB5\u5F8C -Enlarge_Or_Reduce=\u7E2E\u653E -Tree-Height=\u9AD8\u5EA6 -RCodeErrorCorrect=\u7CFE\u932F -Enter-New-FileName=\u8ACB\u8F38\u5165\u65B0\u7684\u6A94\u6848\u540D -try_resending=\u8ACB\u5617\u8A66\u91CD\u65B0\u767C\u9001 -M-Open_Report=\u958B\u555F\u820A\u6A94 -Please_Select=\u8ACB\u9078\u64C7 -InRow=\u5217(R) -Form-TextArea=\u6587\u672C\u57DF -FR-Designer_Https_Enable=\u555F\u7528https -Widget-Custom_Widget_Config=\u81EA\u5B9A\u7FA9\u63A7\u5236\u9805 -already_exists=\u5DF2\u7D93\u5B58\u5728 -Original_Marked_Filed=\u539F\u59CB\u6A19\u8A18\u6B04\u4F4D -BackgroundTexture-Sand=\u6C99\u7058 -Values=\u503C -Not_use_a_cell_attribute_table_editing=\u60A8\u4E0D\u53EF\u4EE5\u7528\u5132\u5B58\u683C\u5C6C\u6027\u8868\u7DE8\u8F2F -Root=\u6839\u7BC0\u9EDE -cycle=\u5468\u671F -open-new-form-tip=\u7576\u524D\u6A21\u677F\u70BA711\u4EE5\u4E0B\u7248\u672C\u88FD\u4F5C, \u7121\u6CD5\u517C\u5BB9, \u4E0D\u80FD\u6253\u958B. \u5047\u5982\u60F3\u6253\u958B\u4FEE\u6539\u6B64\u8868\u55AE, \u8ACB\u4F7F\u7528\u5C0D\u61C9\u7248\u672C\u8A2D\u8A08\u5668\u6253\u958B. -Support-Current_Auto_Complete_Shortcut=Current Shortcut -GROUPING_MODE=\u666E\u901A\u5206\u7D44 -DBCP_MAX_IDLE=\u6700\u5927\u7A7A\u9591\u9023\u63A5\u6578 -BackgroundTexture-BlueTissuePaper=\u85CD\u8272\u7802\u7D19 -ReportD-Export_Hided_Row=\u532F\u51FA\u96B1\u85CF\u5217 -FR-Custom_styles_lost=\u81EA\u5B9A\u7FA9\u6A23\u5F0F\u5DF2\u4E1F\u5931 -Env-Des2=Servlet\u4F4D\u7F6E\u662F\u4E3B\u6A5F\u540D\uFF0C\u57E0\uFF0CWEB\u61C9\u7528\uFF0CServlet\u7684\u7D44\u5408\uFF0C\u5B83\u61C9\u7576\u6307\u5411\u4E00\u500BServlet\uFF0C\u6BD4\u5982"http\://localhost\:8080/WebReport/ReportServer"\u3002\u60A8\u53EF\u4EE5\u9078\u64C7\u586B\u5BEB\u4E3B\u6A5F\u540D\uFF0C\u57E0\uFF0CWEB\u61C9\u7528\uFF0CServlet\uFF0C\u5B83\u6703\u81EA\u52D5\u751F\u6210\u60A8\u6240\u9700\u8981\u7684Servlet\u4F4D\u7F6E\u3002 -Env-Des1=\u8ACB\u9078\u64C7\u5831\u8868\u4F3A\u670D\u5668\u6240\u5728\u7684WEB-INF\u76EE\u9304 -PageSetup-Placement_Center_on_Page=\u7F6E\u4E2D\u65B9\u5F0F -sure_to_delete=\u78BA\u8A8D\u522A\u9664 -Already_exists_not_add_repeat=\u5DF2\u7D93\u5B58\u5728\uFF0C\u8ACB\u4E0D\u8981\u91CD\u8907\u65B0\u589E -Axis_Title=\u8EF8\u6A19\u984C -FR-Designer-Plugin_Install_Failed=Install failed -FR-Designer-Widget-Style_Frame=\u6846\u67B6 -MainGraduationUnit=\u4E3B\u8981\u523B\u5EA6\u55AE\u4F4D -Second_Axis=\u6B21\u5750\u6A19\u8EF8 -Classifier-Ge=\u500B -MSBold=\u5FAE\u8EDF\u96C5\u9ED1 -Form-Design_Size=\u8A2D\u8A08\u5C3A\u5BF8 -FR-App-Template_Save=\u5132\u5B58 -ExpandD-Horizontal_Extendable=\u6A6B\u5411\u53EF\u4F38\u5C55 -RP_Authority_Edit=\u6B0A\u9650\u7DE8\u8F2F -Warnning=\u63D0\u9192 -RoleName_Can_Not_Be_Null=\u89D2\u8272\u540D\u4E0D\u5141\u8A31\u70BA\u7A7A\u4E14\u4E0D\u80FD\u91CD\u8907 -Application=\u61C9\u7528\u7A0B\u5F0F -Formula_Dictionary_Display_Examples_Html= -ECP-error_pwd=\u5BC6\u78BC\u932F\u8AA4 -FR-Hyperlink_ChartHyperlink=\u5716\u8868\u8D85\u93C8 -M_Edit-FormatBrush=\u8907\u88FD\u683C\u5F0F(B) -Indent-Pixel=\u50CF\u7D20 -FR-Designer-Widget-Style_Border_Line=\u6846\u7DDA\u7C97\u7D30 -Widget-Default_Widget_Config=\u57FA\u672C\u63A7\u5236\u9805 -Version-does-not-support=\u60A8\u7576\u524D\u4F7F\u7528\u7684lic\u4E0D\u652F\u6301\u9060\u7A0B\u8A2D\u8A08\u529F\u80FD\uFF0C\u8ACB\u5347\u7D1A\u60A8\u7684lic -StyleAlignment-Right_To_Left=\u5F9E\u53F3\u5411\u5DE6 -Style-Spacing_Before=\u6BB5\u524D -Has_Existed=\u5DF2\u7D93\u5B58\u5728 -FR-Designer_DisplayNothingBeforeQuery=\u9EDE\u6483\u67E5\u8A62\u524D\u4E15\u986F\u793A\u68CA\u4ED6\u5167\u84C9 -Still=\u4ECD\u7136 -JS_WARNING2=\ \u4F8B\uFF1Ahttp\://localhost\:8075/WebReport/demo.js -JS_WARNING1=\ \u76F8\u5C0D\u5831\u8868\u5DE5\u7A0B\u76EE\u9304\u5982WebReport,\u5982WebReport\\js\u4E0B\u6709\u5F15\u7528\u7684js\u6A94\u6848test.js\uFF0C\u5247\u76F8\u5C0D\u8DEF\u5F91\u70BAjs/test.js -Connectionline=\u9023\u7DDA\u6A21\u5F0F -Utils-Insert_Record=\u63D2\u5165\u8A18\u9304 -Set-Parameter-Name=\u8ACB\u5148\u8A2D\u5B9A\u53C3\u6578\u540D -More-information=\u66F4\u591A\u8A0A\u606F -Parameter-Boolean=\u5E03\u723E\u578B -FRFont-Strikethrough=\u522A\u9664\u7DDA -Server-version-tip=\u60A8\u7576\u524D\u9023\u63A5\u7684\u4F3A\u670D\u5668\u7248\u672C\u4F4E\u65BC\u60A8\u4F7F\u7528\u7684\u8A2D\u8A08\u5668\u7248\u672C\u865F\uFF0C\u7E7C\u7E8C\u9023\u63A5\uFF0C\u60A8\u7DE8\u8F2F\u7684\u4E00\u4E9B\u5C6C\u6027\u53EF\u80FD\u7121\u6CD5\u6709\u6548\u5132\u5B58\u3002\u5047\u5982\u9700\u8981\u9023\u63A5\u8ACB\u5C07\u60A8\u7684\u8A2D\u8A08\u5668\u7248\u672C\u8207\u4F3A\u670D\u5668\u7248\u672C\u4FDD\u6301\u4E00\u81F4 -Form-All_Files=\u5168\u90E8\u6A94\u6848 -DBCP_NUM_TEST_PER_EVCTION_RUN=\u7A7A\u9591\u93C8\u63A5\u56DE\u6536\u6AA2\u67E5\u6578 -FR-Designer-FRFont_Family=\u540D\u5B57 -Device=\u8A2D\u5099 -M_Insert-Cell=\u5132\u5B58\u683C\u5143\u7D20 -Present-Formula_Present=\u516C\u5F0F\u6A21\u5F0F -FRFont-Superscript=\u4E0A\u6A19 -CellWrite-Page_Before_Column=\u6B04\u524D\u5206\u9801 -Golden=\u91D1\u8272 -Preference-Support_Cell_Editor_Definition=\u652F\u6301\u5132\u5B58\u683C\u7DE8\u8F2F\u5668 -M-Page_Preview=\u5206\u9801\u9810\u89BD -HJS-CC_to=\u6284\u9001 -Tree-Select_Leaf_Only=\u53EA\u8FD4\u56DE\u8449\u5B50\u7BC0\u9EDE -Pointer-A-Tick-Order=\u6307\u91DD\u503C\u53CA\u523B\u5EA6\u503C\u6578\u91CF\u7D1A -Pink=\u7C89\u7D05 -StyleAlignment-Distibuted=\u5206\u6563\u5C0D\u9F4A -Odd=\u5947\u6578 -already-saved=\u5DF2\u7D93\u5132\u5B58 -FR-Hyperlink_Chart_Cell=\u5716\u8868\u8D85\u93C8-\u806F\u52D5\u5132\u5B58\u683C -Style-Left_Indent=\u5DE6\u7E2E\u9032 -Offline=\u96E2\u7DDA -Form-Hierarchy_Tree_Next=\u4E0B\u4E00\u500B -Needle=\u6307\u91DD -GoogleMap=\u8C37\u6B4C\u5730\u5716 -Running=\u904B\u884C\u4E2D -M_Edit-Unmerge_Cell=\u53D6\u6D88\u5408\u4F75\u5132\u5B58\u683C -Out_Border_Line=\u5916\u5074\u6846\u7DDA -Style-Spacing=\u9593\u8DDD -FR-Utils_Submit=\u63D0\u4EA4 -ReportServerP-Previous=\u4E0A\u4E00\u9801 -StyleAlignment-Text_Style=\u6587\u672C\u63A7\u5236 -RelatedChart=\u5716\u8868\u806F\u52D5 -ProcessManager=\u6D41\u7A0B\u7BA1\u7406 -Cancel_Repeat_Attributes=\u53D6\u6D88\u91CD\u8907\u5217\u6B04 -FR-App-File_Message=\u8A0A\u606F -Datasource-Stored_Procedure=\u5132\u5B58\u7A0B\u5E8F -RWA-Row_Offset=\u5217\u504F\u79FB -M_Format-Style=\u6A23\u5F0F -detail_description=\u8A73\u7D30\u63CF\u8FF0 -FR-Designer-Widget-Style_Title_Content=\u6A19\u984C\u5167\u5BB9 -ParameterD-Report_Parameter=\u6A21\u7D44\u53C3\u6578 -HF-Edit_Header=\u7DE8\u8F2F\u9801\u9996 -Sytle-FRFont=\u5B57\u9AD4 -FR-Designer_Finish_Export=\u532F\u51FA\u5B8C\u7562 -MultiFileUpload=\u591A\u6A94\u6848\u4E0A\u50B3 -HF-Page_Number=\u9801\u78BC -Style-Right_Indent=\u53F3\u7E2E\u9032 -Desktop=\u684C\u9762 -FR-Server-All_Error=\u932F\u8AA4 -ConditionB-Operator=\u64CD\u4F5C -Today=\u4ECA\u5929 -Form-Widget_Name=\u63A7\u5236\u9805\u540D -Covered_All=\u5168\u90E8\u8986\u84CB -Day=\u5929 -External=\u5916\u90E8 -Black_Font=\u9ED1\u9AD4 -LOG-Report_Server_IS_Started=\u5831\u8868\u4F3A\u670D\u5668\u5DF2\u555F\u52D5 -Tips\:You_Can_Input_B1_To_Input_The_Data_Of_The_First_Row_Second_Column=\u63D0\u793A\:\u60A8\u53EF\u4EE5\u901A\u904E\u8F38\u5165B1\u4F86\u5BEB\u5165\u7B2C\u4E00\u5217\u7B2C\u4E8C\u6B04\u7684\u8CC7\u6599\u3002 -FR-Designer_ChooseOneButton=\u8ACB\u9078\u64C7\u4E00\u500B\u63A7\u5236\u9805\u5F8C\u518D\u65B0\u589E -Widget-Sizing=\u5927\u5C0F\u8ABF\u6574 -NO_Border_Line=\u7121\u6846\u7DDA -Cell_Data=\u5132\u5B58\u683C\u8CC7\u6599 -StyleAlignment-Vertical_Text=\u6587\u5B57\u8C4E\u6392 -Label=\u6A19\u7C64 -Orange=\u6854\u9EC3 -zeroMarginWarn=\u7531\u65BC\u5370\u8868\u6A5F\u5B58\u5728\u7269\u7406\u908A\u8DDD
\u5831\u8868\u7684\u9801\u908A\u8DDD\u8A2D\u5B9A\u904E\u5C0F\u53EF
\u80FD\u6703\u51FA\u73FE\u5167\u5BB9\u5217\u5370\u4E0D\u5168.
  -Widget-Date_Selector_Return_Type=\u8FD4\u56DE\u503C\u985E\u578B -Utils-Switch_To_Template_Reportlet=\u5207\u63DB\u5230\u7BC4\u672C\u7DB2\u8DEF\u5831\u8868 -satisfy=\u6EFF\u8DB3\u689D\u4EF6 -FR-Designer_WidgetDisplyPosition=\u63A7\u5236\u9805\u986F\u793A\u4F4D\u7F6E -FR-Base_Top=\u4E0A -FR-Designer_Form-CheckBox=\u5FA9\u9078\u6846 -Reportlet-Parameter_Type=\u53C3\u6578\u50B3\u905E\u65B9\u5F0F -sending=\u6B63\u5728\u767C\u9001... -FR-Designer-FRFont_Foreground=\u984F\u8272 -FR-Import-Export_SVG=SVG\u683C\u5F0F -M_Edit-Clear_Contents=\u5167\u5BB9(C) -Session=\u6703\u8A71 -Widget-Load_Type=\u8F09\u5165 -template_unsaved=\u7BC4\u672C\u7121\u6CD5\u5132\u5B58 -check_communication=\u8ACB\u6AA2\u67E5\u7DB2\u8DEF\u901A\u8A0A\u662F\u5426\u6B63\u5E38\u53CA\u4F3A\u670D\u5668\u662F\u5426\u6B63\u5E38\u904B\u884C -List-Need_Head=\u9700\u8981\u6B04\u8868\u982D -FR-Designer-Plugin_Has_Been_Installed=Plugin has been installed -FR-Widget_Tree_And_Table=\u63A7\u5236\u9805\u6A39\u548C\u63A7\u5236\u9805\u8868 -FR-Base_Help=\u8AAA\u660E -FR-Designer-Plugin_Update_Successful=Update successfully -August=\u516B\u6708 -LOG-Is_Being_Openned=\u6B63\u5728\u6253\u958B -BackgroundTexture-Oak=\u6A61\u6728 -Multi_nam_formula=\ \u8CC7\u6599\u96C6\u540D\: \u8CC7\u6599\u96C6\u689D\u4EF6\: -TurnOn=\u958B\u5553 -HJS-Send_Successfully=\u767C\u9001\u6210\u529F -Mon=\u661F\u671F\u4E00 -Inner_Parameter=Inner Parameter -Required=\u5FC5\u586B -Summary=\u532F\u7E3D -template_unopened=\u7121\u6CD5\u6253\u958B\u7BC4\u672C -FR-Base_Bottom=\u4E0B -DataFunction-Min=\u6700\u5C0F\u503C -StyleFormat-Percent=\u767E\u5206\u6BD4 -FR-App-All_Custom=\u81EA\u5B9A\u7FA9 -M_Insert-Data_Column=\u63D2\u5165\u8CC7\u6599\u6B04 -PLEASE=Please -Numbers=\u6578\u76EE -Release_Lock=\u89E3\u9396 -Background-Background_is_NULL=\u6C92\u6709\u80CC\u666F -FR-Designer_Sytle-FRFont=\u5B57\u9AD4 -Gradation=\u5C64\u6B21 -The_current_list_is_empty=\u7576\u524D\u6B04\u8868\u70BA\u7A7A -Formula_Dictionary_Display_Examples= -Schedule-Template_Parameter=\u7BC4\u672C\u53C3\u6578 -JSShow=\u52D5\u614B\u5C55\u793A -Level_coordinates=\u5C64\u6B21\u5750\u6A19 -MainGraduationLine=\u4E3B\u8981\u523B\u5EA6\u7DDA -Hyperlink-Web_link=\u7DB2\u9801\u93C8\u63A5 -StyleAlignment-between_-90_and_90=\u5728-90\u548C90\u4E4B\u9593 -FormulaD-Custom_Function=\u81EA\u5B9A\u7FA9\u51FD\u6578 -FR-Designer_Integer=\u6574\u6578 -PageSetup-Finis_Start_Row=\u91CD\u8907\u7D50\u5C3E\u5217 -RWA-Remove_Field=\u79FB\u9664\u6B04\u4F4D -Form-Desin_Width=\u8A2D\u8A08\u5BEC\u5EA6 -No-tableData=\u6C92\u6709\u8FD4\u56DE\u8CC7\u6599\u96C6 -Page_Total=\u5171 -FR-Designer-Plugin_Connect_Server_Error=Error to connect plugin store -Import-Excel_Source=Excel\u6E90\u6A94\u6848 -Utils-Left_to_Right_a=\u5F9E\u5DE6\u5F80\u53F3 -ExpandD-Expand_Attribute=\u64F4\u5C55\u5C6C\u6027 -Report-Write_Attributes=\u5831\u8868\u586B\u5831\u5C6C\u6027 -Utils-Current_Column=\u7576\u524D\u6B04 -Need_Max_Value=\u9700\u8981\u6700\u5927\u503C -Report_Not_Exist=\u6240\u9078\u5831\u8868\u4E0D\u5B58\u5728\uFF01 -HF-Insert_Content=\u63D2\u5165\u5167\u5BB9 -UpParent=\u4E0A\u7236\u683C -PageSetup-Page=\u9801\u9762 -Utils-Move_Up=\u4E0A\u79FB -BackgroundTexture-PurpleMesh=\u7D2B\u8272\u7DB2\u8DEF -Export-Word=Word\u683C\u5F0F -ServerM-Widget_Manager=\u5143\u4EF6\u7BA1\u7406 -FR-Designer-Basic_Activation_Key=Activation Key\: -FR-App-Template_Report_Not_Exist=\u6240\u9078\u5831\u8868\u4E0D\u5B58\u5728 -Protected=\u4FDD\u8B77 -Skip=\u8DF3\u904E -FR-Designer_PageSetup-Vertically=\u5782\u76F4\u7F6E\u4E2D -revert=\u5FA9\u539F -PageSetup-Predefined=\u9810\u5B9A\u7FA9 -Border-Style-Radius=\u5713\u89D2\u6846\u7DDA -IntPart=\u6574\u6578\u90E8\u4EFD -ExpandD-Data_Column=\u8CC7\u6599\u6B04 -Sort-Ascending=\u5347\u51AA -FR-Designer-Widget_Style=\u6A23\u5F0F -parameter_name_exist=\u8A72\u53C3\u6578\u540D\u5DF2\u5B58\u5728 -FR-Designer_Layer-Build=\u666E\u901A\u5206\u5C64\u69CB\u5EFA -Please_Rename=\u8ACB\u91CD\u547D\u540D -Form-Editing_Listeners=\u4E8B\u4EF6\u7DE8\u8F2F -RWA-Smart_Add_Fields=\u667A\u80FD\u65B0\u589E\u6B04\u4F4D -FR-Designer-Tree_Width=\u5BEC\u5EA6 -Record=\u8A18\u9304 -Poly-Report_Component=\u8907\u5408\u5F0F\u5831\u8868\u5143\u4EF6 -Options=\u9078\u9805 -NS-war-remote=\u932F\u8AA4\u4EE3\u78BC\:1117 \u58D3\u7E2E\u90E8\u7F72\u4E0D\u652F\u6301\u9060\u7A0B\u8A2D\u8A08 -Sche-Minute=\u5206 -Three_Rows_Of_Three_Grid=\u4E09\u5217\u4E09\u6B04\u7684\u683C\u5B50 -WorkSheet=\u81EA\u7531\u5831\u8868 -FR-Designer-Widget_Size=\u63A7\u5236\u9805\u5927\u5C0F -BindColumn-Select=\u6B04\u8868 -FR-Widget_Mobile_Terminal=\u884C\u52D5\u8A2D\u5099 -FR-Background_Image_Titled=\u5E73\u92EA -SetPrinterOffset=\u5370\u8868\u6A5F\u504F\u79FB -FR-Designer-Plugin_Installed=Installed -FR-Designer-Hyperlink_Name=\u540D\u5B57 -FR-Designer_Form-Button=\u6309\u9215 -Black=\u9ED1\u8272 -FR-Designer-Widget-Style_Border_Color=\u6846\u7DDA\u984F\u8272 -Set_Submit_Event=\u8A2D\u5B9A\u63D0\u4EA4\u4E8B\u4EF6 -PDF-Print_isPopup=\u662F\u5426\u5F48\u51FA\u8A2D\u5B9A\u6846 -LayerPageReport_CountPerPage=\u6BCF\u9801\u8A18\u9304\u6578 -Display_Modes=\u986F\u793A\u6A21\u5F0F -RowSpan=\u5217\u8DE8\u5EA6 -Datasource-Test_Connection=\u6E2C\u8A66\u93C8\u63A5 -Function-Function_Manager=\u51FD\u6578\u7BA1\u7406\u5668 -Host_Name=\u4E3B\u6A5F\u540D -CellWrite-Show_As_HTML=\u7528HTML\u986F\u793A\u5167\u5BB9 -FR-Designer-Widget-Style_Shadow=\u9670\u5F71 -FR-Designer_Parameter_String=\u5B57\u5143\u4E32 -Form-SupportTag=\u6A19\u7C64\u5F62\u5F0F\u986F\u793A -ReportD-Report_Write_Attributes=\u5831\u8868\u586B\u5831\u5C6C\u6027 -DataFunction-Count=\u500B\u6578 -Top_And_Thick_Bottom_Border_Line=\u4E0A\u6846\u7DDA\u548C\u7C97\u4E0B\u6846\u7DDA -Client=Client -BindColumn-Result_Serial_Number_Start_From_1=\u5E8F\u865F\u5F9E1\u958B\u59CB -History=\u6B77\u53F2 -Already_exists=\u5DF2\u5B58\u5728\uFF0C\u8ACB\u91CD\u65B0\u8F38\u5165\uFF01 -Datasource-Original_Charset=\u539F\u59CB\u7DE8\u78BC -FR-Base_Left=\u5DE6 -ReportServerP-Next=\u4E0B\u4E00\u9801 -BindColumn-Top_N=\u524DN\u500B -Animation_Special=\u7279\u6548 -Widget-Chart_Widget_Config=\u5716\u8868\u63A7\u5236\u9805 -FR-Designer-Plugin_Cannot_Update_Not_Install=\u7121\u6CD5\u66F4\u65B0\u63D2\u4EF6\uFF0C\u8ACB\u6AA2\u67E5\u8A72\u63D2\u4EF6\u662F\u5426\u5DF2\u7D93\u6210\u529F\u5B89\u88DD -After_Changed_Some_Attributes_Are_Different=\u8F49\u63DB\u5F8C\u5831\u8868\u7684\u67D0\u4E9B\u5C6C\u6027\u6703\u767C\u751F\u6539\u8B8A\uFF0C\u662F\u5426\u7E7C\u7E8C -PieStyle=\u9905\u72C0 -HF-Are_you_sure_to_delete_it=\u4F60\u78BA\u5BE6\u60F3\u8981\u522A\u9664\u9019\u500B\u5143\u7D20\u55CE -Utils-Design-File_Open=\u958B\u555F\u820A\u6A94 -FR-Utils_Label=\u6A19\u7C3D -Data-Label=\u8CC7\u6599\u6A19\u7C64 -M_Insert-Text=\u63D2\u5165\u6587\u5B57 -Form-View_Tree=\u6AA2\u8996\u8868\u6A39 -M_Insert-Chart=\u63D2\u5165\u5716\u8868 -HF-Even_Page=\u5076\u6578\u9801 -ReportServerP-Report_server_parameter=\u5831\u8868\u4F3A\u670D\u5668\u53C3\u6578 -JavaScript-Form_Submit=\u8868\u55AE\u63D0\u4EA4 -Horizontal-Split_Layout=\u6C34\u5E73\u5206\u5272\u5E03\u5C40 -BorderLayout-Center=\u4E2D -INFO-Reset_Webapp=\u91CD\u7F6E\u61C9\u7528\u4F3A\u670D\u5668 -FR-Designer_Text=\u6587\u672C -IN_and_INOUT_type_not_as_cursor=IN\u548CINOUT\u985E\u578B\u4E0D\u53EF\u4EE5\u4F5C\u70BA\u6E38\u6A19 -Main_Axis=\u4E3B\u5750\u6A19\u8EF8 -M_Edit-Cut=\u526A\u4E0B(T) -Utils-The_Name_has_been_existed=\u6B64\u540D\u5DF2\u7D93\u5B58\u5728 -FR-Background_Image=\u5716\u7247 -Character=\u6587\u5B57 -Unit_Thousand=\u4EDF -Test=\u6E2C\u8A66 -Utils-Would_you_like_to_save=\u4F60\u662F\u5426\u9700\u8981\u5132\u5B58 -HF-Header_and_Footer=\u7709\u982D\u548C\u7709\u8173 -LIST_MODE=\u6B04\u8868 -HF-Insert_Image=\u63D2\u5165\u5716\u7247 -FR-Designer-Widget-Style_Standard=\u6A19\u51C6 -FR-Designer_Form-List=\u6B04\u8868 -BackgroundTexture-Denim=\u659C\u7D0B\u5E03 -Execute_Report_by_Layer_Engine=\u7528\u5217\u5F0F\u7684\u5F15\u64CE\u4F86\u57F7\u884C\u5831\u8868 -M_Edit-Bring_Forward=\u4E0A\u79FB\u4E00\u5C64(F) -Choose_All=\u5168\u9078 -Form-RadioGroup=\u55AE\u9078\u6309\u9215\u7D44 -FR-Base_Remove=\u522A\u9664 -FR-Remote_Connect2Server_Again=\u9023\u63A5\u4E2D\u65B7\uFF0C\u662F\u5426\u91CD\u65B0\u9023\u63A5\u4F3A\u670D\u5668? -Semicolon=\u5206\u865F -StyleFormat-Category=\u5206\u985E -Report_Template=\u5831\u8868\u7BC4\u672C -Utils-Beyond_the_right_side_of_Border=\u8D85\u51FA\u53F3\u908A\u754C -BackgroundTexture-Papyrus=\u7D19\u838E\u8349\u7D19 -LayerPageReport_PageEngine=\u4F7F\u7528\u6309\u9801\u904B\u7B97\u5206\u6BB5\u57F7\u884C\u5831\u8868 -Schedule-The_selected_file_must_be_end_with_filter=\u9078\u64C7\u7684\u6A94\u6848\u5FC5\u9808\u4EE5.cpt\u6216\u8005.class\u6216\u8005.frm\u7D50\u5C3E\u3002 -Provide=\u63D0\u4F9B -FormulaD-Math_&_Trig=\u6578\u5B78\u548C\u4E09\u89D2\u51FD\u6578 -FR-Designer-StyleAlignment_Right=\u9760\u53F3\u5C0D\u9F4A -Error_TableDataNameRepeat=\u5DF2\u7D93\u5728\u4F3A\u670D\u5668\u8CC7\u6599\u96C6\u4E2D\u5B58\u5728\u6216\u8005\u591A\u500B\u8CC7\u6599\u96C6\u540D\u91CD\u8907\u3002 -Choose_None=\u4E0D\u9078 -File-tree=\u6A94\u6848\u6A39 -FRFont-bold=\u7C97\u9AD4 -FR-Designer_Set_Submit_Condition=\u8A2D\u5B9A\u63D0\u4EA4\u689D\u4EF6 -Form-Change_Widget_Name=\u66F4\u6539\u63A7\u5236\u9805\u540D -ReportColumns-Report_Columns=\u5831\u8868\u5206\u6B04 -Can_not_use_FormatBursh=\u7121\u6CD5\u4F7F\u7528\u8907\u88FD\u683C\u5F0F -CellElement-Property_Table=\u5132\u5B58\u683C\u5C6C\u6027\u8868 -Dictionary-Dynamic_SQL=\u52D5\u614BSQL -FR-Designer_Form-CheckBoxGroup=\u5FA9\u9078\u6846\u7D44 -DBCP_TIME_BETWEEN_EVICTIONRUNSMILLIS=\u7A7A\u9591\u9023\u63A5\u56DE\u6536\u5668\u4F11\u7720\u6642\u9593 -ReportD-Export_Hided_Column=\u532F\u51FA\u96B1\u85CF\u6B04 -Preference-Support_Undo=\u652F\u6301\u5FA9\u539F -FR-mobile_report_analysis=\u5831\u8868\u89E3\u6790 -Month=\u6708 -Utils-Column_Width=\u6B04\u5BEC -Collect-Use_Designer=\u4F7F\u7528\u8A2D\u8A08\u5668 -Widget-User_Defined_Editor=\u9810\u5B9A\u7FA9\u7DE8\u8F2F\u5668\uFF0C\u8A72\u7DE8\u8F2F\u5668\u53EA\u80FD\u5728\u5143\u4EF6\u7BA1\u7406\u83DC\u55AE\u91CC\u66F4\u6539\u5176\u5C6C\u6027 -Unit_Ten_Thousand=\u842C -Data_Setting=\u8CC7\u6599\u8A2D\u5B9A -ECP_input_pwd=\u8ACB\u8F38\u5165\u5BC6\u78BC\: -period=\u3002 -Note=\u5099\u6CE8 -Multiline=\u591A\u5217\u7DE8\u8F2F -Datasource-Convert_Charset=\u7DE8\u78BC\u8F49\u63DB -DashBoard-ConnectionList=\u8CC7\u6599\u9023\u63A5 -Utils-Submit_Forcibly=\u5F37\u884C\u63D0\u4EA4 -Parent_Marked_Field=\u7236\u6A19\u8A18\u6B04\u4F4D -Logout=\u9000\u51FA -FR-Designer_Show_Blank_Row=\u88DC\u5145\u7A7A\u767D\u5217 -FR-Base_Format=\u683C\u5F0F -FR-App-Export_png=png\u683C\u5F0F -Delete_Column=\u522A\u9664\u6B04 -SecondGraduationLine=\u6B21\u8981\u523B\u5EA6\u7DDA -SpecifiedG-Groups=\u7D44 -CONTINUUM_MODE=\u76F8\u9130\u9023\u7E8C\u5206\u7D44 -Datasource-Connection_failed=\u93C8\u63A5\u5931\u6557 -CategoryName=\u5206\u985E\u540D -DBCP_INITIAL_SIZE=\u521D\u59CB\u5316\u9023\u63A5\u6578 -Colors=\u984F\u8272 -FR-Import-Export_CSV=CSV\u683C\u5F0F(\u9017\u865F\u5206\u9694) -FR-Designer-StyleAlignment_Left=\u9760\u5DE6\u5C0D\u9F4A -BackgroundTexture-PaperBag=\u7D19\u888B -RWA-BuildIn_SQL=\u5167\u7F6ESQL -SingleLayer=\u55AE\u5C64 -Or-you=\u6216\u8005\u60A8 -FR-Designer_Certificate_Path=\u8B49\u66F8\u8DEF\u5F91 -Utils-Last_Page=\u6700\u5F8C\u4E00\u9801 -BarCodeD-Drawing_Text=\u986F\u793A\u689D\u78BC\u7684\u6587\u672C -Warning-Template_Do_Not_Exsit=\u7BC4\u672C\u4E0D\u5B58\u5728 -BindColumn-Group=\u5206\u7D44 -Export-SVG=SVG\u683C\u5F0F -Plane3D=\u5E73\u97623D -SessionID=sessionID\u662F\u7576\u524D\u8A2A\u554F\u6A21\u677F\u7684\u6703\u8A71\u6A19\u8B58\u53C3\u6578\u3002 -FR-Designer_Height=\u9AD8 -HF-Odd_Page=\u5947\u6578\u9801 -About-All_Rights_Reserved=\u4FDD\u7559\u6240\u6709\u7684\u6B0A\u5229 -Utils-Current_Cell=\u7576\u524D\u683C\u5B50 -Web_Preview_Message=\u8ACB\u5C07\u6A21\u677F\u6A94\u6848\u5132\u5B58\u7576\u524D\u904B\u884C\u74B0\u5883\u76EE\u9304\u4E0B -FR-Hyperlink_Chart_Float=\u5716\u8868\u8D85\u93C8-\u806F\u52D5\u61F8\u6D6E\u5143\u7D20 -Dic-Data_Query=\u8CC7\u6599\u67E5\u8A62 -CellWrite-Print_Content=\u5217\u5370/\u532F\u51FA\u5132\u5B58\u683C\u5167\u5BB9 -Privilege-Selected_None_Of_Any_Items=\u6C92\u6709\u9078\u4E2D\u4EFB\u4F55\u4E00\u9805 -FRFont-Size=\u5927\u5C0F -Function-J2EE_server=J2EE\u4F3A\u670D\u5668 -FR-Designer_Allow_Blank=\u5141\u8A31\u70BA\u7A7A -Build_Tree_Accord_Parent_Marked_Filed=\u4F9D\u8CF4\u6240\u9078\u8CC7\u6599\u96C6\u7684\u7236\u6A19\u8A18\u6B04\u4F4D\u69CB\u5EFA\u6A39 -Preference-Horizontal_Scroll_Bar_Visible=\u6C34\u5E73\u6EFE\u52D5\u689D\u53EF\u898B -Scope=\u7BC4\u570D -Save_All_Records_In_Memory=\u6240\u6709\u8A18\u9304\u90FD\u5132\u5B58\u5728\u5167\u5B58\u4E2D -FreezeWarning1=\u521D\u59CB\u503C\u4E0D\u5927\u65BC\u5C3E\u503C -FlowLayout=\u6D41\u5F0F\u5E03\u5C40 -M_Report-Report_Footer=\u5831\u8868\u9801\u5C3E -FR-Action_Add=\u589E\u52A0 -BorderLayout-East=\u6771 -feedback_tip=\u8ACB\u8F38\u5165\u4E0D\u8D85\u904E400\u500B\u5B57\u7684\u554F\u984C\u63CF\u8FF0 -FS_Start_Date=\u958B\u59CB\u65E5\u671F -FR-ConditionB_Operator=\u64CD\u4F5C\u7B26 -Printer-Alias=\u5225\u540D -DS-Class_Name=\u985E\u540D -FR-Designer-Plugin_Has_Been_Disabled=Plugin has been disabled -Sort-Original=\u4E0D\u6392\u5E8F -Utils-Top_to_Bottom_a=\u5F9E\u4E0A\u5F80\u4E0B -Parameter-String=\u5B57\u5143\u4E32 -InnerRadis=\u5167\u5F91\u5927\u5C0F -Want_To_Cover_It=\u662F\u5426\u60F3\u8981\u8986\u84CB\u5854 -Divided_stage=\u5283\u5206\u968E\u6BB5 -Seriously=\u56B4\u91CD -ReportServerP-PDF=PDF -Utils-Switch_To_Class_Reportlet=\u5207\u63DB\u5230\u985E\u5225\u7DB2\u8DEF\u5831\u8868 -FR-Designer_Show_Blank_Column=\u88DC\u5145\u7A7A\u767D\u6B04 -M_Edit-Redo=\u53D6\u6D88\u5FA9\u539F -Visibility=\u53EF\u898B\u6027 -Series_Use_Default=\u7CFB\u5217\u9810\u8A2D\u4F7F\u7528 -Has_Selected=\u5DF2\u7D93\u9078\u64C7 -BackgroundTexture-Walnut=\u8B77\u5957 -FormulaD-Function_category=\u51FD\u6578\u985E\u578B -Interface=\u4ECB\u9762 -FR-Designer-Beyond_Bounds=\u8D85\u51FA\u6216\u8005\u5C0F\u65BCbody\u908A\u754C\uFF0C\u4E0D\u80FD\u8ABF\u6574\u5927\u5C0F -seconds=\u79D2 -Auto-Build=\u81EA\u52D5\u69CB\u5EFA -FR-Designer-Plugin_Install_Successful=Install successful -Template_Path=\u7BC4\u672C\u8DEF\u5F91 -FR-Designer-FRFont_Bold=\u7C97\u9AD4 -Poly_Name=\u805A\u5408\u584A\u540D -WorkBook=\u5DE5\u4F5C\u7C3F -Hyperlink-Self_Window=\u7576\u524D\u7A97\u53E3 -FR-Designer-Widget-Style_Title=\u6A19\u984C -FR-Designer-FRFont_Size=\u5927\u5C0F -M_File-Export-SVG=SVG\u683C\u5F0F -Capacity=Capacity -Rose_Red=\u73AB\u7470\u7D05 -StyleAlignment-The_value_of_rotation_must_between_-90_and_90_degrees=\u65CB\u8F49\u503C\u5FC5\u9808\u5728\u8CA090\u5EA6\u523090\u5EA6 -HF-Move_Left=\u5DE6\u79FB -Cell_Group=\u5132\u5B58\u683C\u7D44 -Week=\u5468 -PageSetup-Orientation=\u65B9\u5411 -M-Open_Recent=\u958B\u555F\u6700\u8FD1\u4F7F\u7528\u6A94 -NNormal=\u6B63\u5E38 -Integer=\u6574\u6578 -Select_The_Source_To_Save=\u9078\u64C7\u8981\u5B58\u5132\u7684\u9805\u76EE -Transition=\u5206\u652F -FR-Designer_Get_Lock=\u52A0\u9396 -one_record_exists_in_many_groups=\u4E00\u500B\u8A18\u9304\u53EF\u4EE5\u5B58\u5728\u8207\u591A\u500B\u7D44\u4E2D -FR-Designer_Cover_None=\u5168\u4E0D\u8986\u84CB -DeciPart=\u5C0F\u6578\u90E8\u4EFD -ExpandD-Up_Father_Cell=\u4E0A\u7236\u683C -Deep=\u6DF1\u5EA6 -FRFont-Shadow=\u9670\u5F71 -Reportlet=\u7DB2\u8DEF\u5831\u8868 -Calendar=\u65E5\u66C6 -DateFormat-Custom_Warning=\u8A3B\uFF1A\u81EA\u5B9A\u7FA9\u65E5\u671F\u683C\u5F0F\u4E0D\u652F\u6301\u683C\u5F0F\u6821\u9A57 -Unit_MM=\u516C\u5398 -Server-Start=\u555F\u52D5 -CellPage-Can_Break_On_Paginate=\u5206\u9801\u6642\u53EF\u4EE5\u65B7\u958B -Build_Tree_Accord_Marked_Filed_Length=\u4F9D\u8CF4\u6240\u9078\u8CC7\u6599\u96C6\u7684\u6A19\u8A18\u6B04\u4F4D\u7684\u9577\u5EA6\u69CB\u5EFA\u6A39\u72C0 -ComboCheckBox-Start_Symbol=\u8D77\u59CB\u7B26 -Real=\u5BE6\u969B -RWA-Batch_Modify_Cells=\u6279\u91CF\u4FEE\u6539\u5132\u5B58\u683C -FR-Designer_Build-Way=\u69CB\u5EFA\u65B9\u5F0F -Read=\u8B80\u53D6 -StyleAlignment-Degrees=\u5EA6\u6578 -M_Format_A-Border=\u6846\u7DDA(B) -Utils-Delete_Record=\u522A\u9664\u8A18\u9304 -Reload=\u91CD\u8F09 -Image-Select_Picture=\u9078\u64C7\u5716\u7247 -RWA-Submit=\u63D0\u4EA4 -the_template=\u8A72\u7BC4\u672C -FR-Designer_Component_Scale=\u5143\u4EF6\u7E2E\u653E -FRFont-italic=\u659C\u9AD4 -Year=\u5E74 -HF-Move_Right=\u53F3\u79FB -Data-Check=\u8CC7\u6599\u76E3\u63A7 -Unknown=\u672A\u77E5 -Submit_Style=\u63D0\u4EA4\u65B9\u5F0F -Left_Border_Line=\u5DE6\u6846\u7DDA -Brown=\u8910\u8272 -Select_A_Tree_DataSource_To_Build=\u9078\u64C7\u4E00\u500B\u6A39\u72C0\u8CC7\u6599\u96C6\u4F86\u69CB\u5EFA -Overlapping=\u91CD\u66E1\u578B -DS-Class_TableData=\u985E\u5225\u8CC7\u6599\u96C6 -FR-Designer-Plugin_Illegal_Plugin_Zip_Cannot_Be_Install=Illegal plugin,cannot be installed -DisplayNothingBeforeQuery=\u9EDE\u64CA\u67E5\u8A62\u524D\u4E0D\u986F\u793A\u5176\u4ED6\u5167\u5BB9 -Y_Axis=Y\u8EF8 -FormulaD-Most_Recently_Used=\u5E38\u7528\u51FD\u6578 -FormulaD-Input_formula_in_the_text_area_below=\u8ACB\u5728\u4E0B\u9762\u7684\u6587\u672C\u7DE8\u8F2F\u6846\u88E1\u9762\u8F38\u5165\u516C\u5F0F -Build-Way=\u69CB\u5EFA\u65B9\u5F0F -M_Edit-Undo=\u5FA9\u539F -Line-Style=\u7DAB\u578B -Datasource-Other_Attributes=\u5176\u4ED6\u5C6C\u6027 -M_Server-Global_Parameters=\u5168\u5C40\u53C3\u6578 -Suffix=\u5F8C\u7DB4 -Image-Image_Files=\u5716\u7247\u6A94\u6848 -EditRC-Entire_row=\u6574\u5217(R) -HF-First_Page=\u9996\u9801 -BackgroundTexture-Granite=\u82B1\u5D17\u77F3 -DataList=\u8CC7\u6599\u93C8 -Recursion=\u905E\u6B78 -BarStyle=\u689D\u5F62 -FR-Designer-Min_Width=\u6700\u5C0F\u5BEC\u5EA6 -Utils-Report-Env_Directory=\u5831\u8868\u5DE5\u4F5C\u76EE\u9304 -D-ChartArea=\u5716\u8868\u5340 -Only=\u53EA -FR-Base_No=\u5426 -SpecifiedG-Put_all_others_together=\u5C07\u5176\u4ED6\u6240\u6709\u7684\u5408\u5E76 -HF-NewLine_Des=\u53EF\u4EE5\u9EDE\u64CA\u4E0A\u9762\u7684\u79FB\u52D5\u548C\u522A\u9664\u6309\u9215\u4F86\u64CD\u4F5C\u63DB\u5217\u7B26 -WLayout-Border-ThreeContainer=\u64C1\u6709\u5317\u3001\u897F\u548C\u4E2D\u4E09\u584A\u7684\u908A\u754C\u4F48\u5C40\u5BB9\u5668\uFF0C\u5176\u4E2D\u5317\u90E8\u584A\u53EF\u4EE5\u6839\u64DA\u9700\u8981\u8ABF\u6574\u9AD8\u5EA6\uFF0C\u897F\u90E8\u584A\u53EF\u4EE5\u6839\u64DA\u9700\u8981\u8ABF\u6574\u5BEC\u5EA6\u3002 -Parameter_Name=\u53C3\u6578\u540D -FR-Base_Table=\u8868 -Des-Remove_WorkSheet=\u8981\u522A\u9664\u7684\u8868\u53EF\u80FD\u5B58\u5728\u8CC7\u6599,\u5982\u679C\u8981\u6C38\u4E45\u522A\u9664\u9019\u4E9B\u8CC7\u6599,\u8ACB\u6309'\u78BA\u5B9A'\u6309\u9215. -Rotation=\u65CB\u8F49 -Undefined=\u672A\u5B9A\u7FA9 -Support-Auto_Complete_Shortcut=Auto Complete Shortcut -Set_Column_Title_End=\u8A2D\u5B9A\u91CD\u8907\u7D50\u5C3E\u6B04 -Submit_Url=\u63D0\u4EA4\u5730\u5740 -ReportServerP-Are_you_sure_to_delete_the_selected_printer=\u4F60\u78BA\u5BE6\u60F3\u522A\u9664\u9078\u4E2D\u7684\u5370\u8868\u6A5F\u55CE -long_data_can_not_show_fully=\u9577\u8CC7\u6599\u986F\u793A\u4E0D\u5168 -Utils-Beyond_the_bottom_side_of_Border=\u8D85\u51FA\u4E0B\u908A\u754C -FR-Import-Export_PDF=PDF\u683C\u5F0F -Form-CheckBoxGroup=\u5FA9\u9078\u6846\u7D44 -Click-Me=\u9EDE\u6211\u6709\u9A5A\u559C\u54E6\uFF01 -Hyperlink-Self=\u5728\u539F\u7DB2\u9801\u4E2D\u6253\u958B\u93C8\u63A5(S) -Tree-Select_Leaf_Only_Tips=(\u4E0D\u52FE\u9078\u6B64\u9805\u6642\uFF0C\u8FD4\u56DE\u503C\u50C5\u70BA\u7528\u6236\u52FE\u9078\u7684\u7576\u524D\u7BC0\u9EDE\u800C\u4E0D\u5305\u62EC\u5176\u5B50\u7BC0\u9EDE) -StyleAlignment-Text_Rotation=\u6587\u672C\u65B9\u5411 -Format-Error=\u8F38\u5165\u7684\u503C\u683C\u5F0F\u4E0D\u6B63\u78BA -Server-Stop=\u505C\u6B62 -Preference-Setting_Grid=\u7DB2\u683C\u8A2D\u5B9A -ReportServerP-Add_Printer=\u589E\u52A0\u5370\u8868\u6A5F -FR-Designer-Plugin_Active=Active -Utils-File_name=\u6A94\u6848\u540D -NOT_NULL_Des=\u4E0D\u80FD\u70BA\u7A7A -Right_Border_Line=\u53F3\u6846\u7DDA -EditRC-Entire_column=\u6574\u6B04 (c) -PageSetup-Top_to_bottom=\u5148\u6B04\u5F8C\u5217 -Click-Get_Default_URL=\u9EDE\u64CA\u6B64\u6309\u9215\u7372\u5F97\u9810\u8A2DURL -StyleAlignment-Wrap_Text=\u81EA\u52D5\u63DB\u5217 -Remove_All_Button=\u6E05\u9664\u6240\u6709\u6309\u9215 -FR-Designer_Component_Interval=\u5143\u4EF6\u9593\u9694 -ReportColumns-Columns_vertically=\u6B04\u5206\u6B04 -ReportGUI-Print_Background=\u5217\u5370/\u532F\u51FA\u5831\u8868\u80CC\u666F -Export-CSV=CSV\u683C\u5F0F(\u9017\u865F\u5206\u9694) -M_Edit-Paste=\u8CBC\u4E0A(P) -FR-Designer-Basic_Restart_Designer=Restart designer -ReportServerP-PDF2-INFO=\u50C5\u5728LINUX/UNIX\u4E0B\u672A\u5B89\u88DD\u4E2D\u6587\u5B57\u9AD4\u6642\u4F7F\u7528 -FormulaD-Check_Valid=\u6AA2\u67E5\u5408\u6CD5\u6027 -server_disconnected=\u9023\u63A5\u5DF2\u65B7\u958B -ParameterD-Parameter_name_cannot_be_null=\u53C3\u6578\u7684\u540D\u5B57\u4E0D\u53EF\u4EE5\u70BA\u7A7A -FR-Designer-Plugin_Version_Is_Lower_Than_Current=The version of plugin is lower than current -RWA-NotChange_Unmodified=\u4E0D\u6539\u8B8A\u6642\u4E0D\u66F4\u65B0 -User_Information=\u7528\u6236\u8A0A\u606F -Custom_styles_lost=\u81EA\u5B9A\u7FA9\u6A23\u5F0F\u5DF2\u4E1F\u5931 -PageSetup-Margin=\u9801\u908A\u8DDD -M-New_FormBook=\u5EFA\u7ACB\u65B0\u5831\u8868 -Widget-TreeNode=\u6A39\u7BC0\u9EDE\u6309\u9215 -Form-Url=\u5730\u5740 -Utils-Beyond_the_left_side_of_Border=\u8D85\u51FA\u5DE6\u908A\u754C -Float_Element_Name=\u61F8\u6D6E\u5143\u7D20\u540D\u7A31 -Purple=\u7C89\u7D2B -DashBoard-Potence=\u6B0A\u9650 -M-Close_Template=\u95DC\u9589\u7BC4\u672C(C) -paper=\u7D19\u5F35 -Not_Exsit=\u4E0D\u5B58\u5728\u65BC\u5831\u8868 -Utils-Insert_Row=\u63D2\u5165\u5217 -Utils-Delete_Row=\u522A\u9664\u5217 -not_support_authority_edit=\u8A72\u5143\u7D20\u4E0D\u652F\u6301\u8A31\u53EF\u6B0A\u63A7\u5236 -Formula_Tips=\u516C\u5F0F\u5FC5\u9808\u4EE5"\ -FR-Action_Copy=\u8907\u88FD -Compile_Success=Compile Success -BackgroundTexture-RecycledPaper=\u518D\u751F\u7D19 -StyleAlignment-Single_Line=\u55AE\u5217\u986F\u793A -Utils-Move_Down=\u4E0B\u79FB -Please_Set_Repeat_First=\u8ACB\u5148\u8A2D\u5B9A\u91CD\u8907\u6A19\u984C\u5217\u548C\u6B04 -Writer-ShortCuts_Setting=\u586B\u5831\u5FEB\u6377\u9375\u8A2D\u5B9A -Verify-Data_Verify=\u8CC7\u6599\u6821\u9A57 -FR-mobile_analysis_style=\u89E3\u6790\u65B9\u5F0F -Confirm-Delete-File=\u662F\u5426\u522A\u9664\u6240\u9078\u6A94\u6848\uFF1F -PageSetup-Header=\u9801\u9996 -JavaScrit-Asynch=\u975E\u540C\u6B65 -ReportServerP-Toolbar=\u5DE5\u5177\u6B04 -Utils-Top_to_Bottom=\u7E31\u5411 -Platform=\u5E73\u53F0 -FR-Designer-FRFont_Underline=\u5E95\u7DDA -Show_in_Containing_Folder=\u6253\u958B\u6240\u5728\u8CC7\u6599\u593E -BackgroundTexture-WaterDroplets=\u6C34\u6EF4 -FR-Designer-Dependence_Install_Failed=\u4F9D\u8CF4\u5B89\u88DD\u5931\u6557 -Layout-Padding=\u5167\u908A\u8DDD -roles_already_authority_edited=\u5DF2\u914D\u7F6E\u89D2\u8272 -WidgetDisplyPosition=\u63A7\u5236\u9805\u986F\u793A\u4F4D\u7F6E -SpecifiedG-Force_Group=\u5F37\u5236\u5206\u7D44 -FormulaD-Formula_Definition=\u516C\u5F0F\u5B9A\u7FA9 -I-xyScatterStyle_Marker=\u6563\u9EDE\u5716 -Hour=\u5C0F\u6642 -ColorMatch=\u914D\u8272 -M_Edit-Order=\u758A\u653E\u9806\u5E8F(O) -BackgroundTexture-Bouquet=\u82B1\u675F -Verify-Error_Information=\u6821\u9A57\u51FA\u932F\u8A0A\u606F -LayerData=\u5E95\u5C64\u8CC7\u6599 -Rename=\u91CD\u547D\u540D -Widget-Load_By_Async=\u975E\u540C\u6B65\u8F09\u5165 -Shape=\u5716\u5F62 -BindColumn-This_Condition_has_been_existed=\u6B64\u689D\u4EF6\u5DF2\u7D93\u5B58\u5728 -NS-exception_readError=\u932F\u8AA4\u4EE3\u78BC\:1305 \u6A21\u677F\u6A94\u6848\u89E3\u6790\u51FA\u932F -Set_Column_Title_Start=\u8A2D\u5B9A\u91CD\u8907\u6A19\u984C\u6B04 -Fri=\u4E94 -M_Report-Report_Parameter=\u6A21\u677F\u53C3\u6578 -REPORTLETS=\u8A2A\u554F\u591A\u5F35\u6A21\u677F\u7684\u8DEF\u5F91\u7684\u53C3\u6578 -WLayout-Card-ToolTip=\u5361\u7247\u5F0F\u4F48\u5C40\uFF0C\u8A72\u4F48\u5C40\u5BB9\u5668\u4E2D\u53EF\u4EE5\u65B0\u589E\u591A\u500B\u5176\u5B83\u5143\u4EF6\u3002 -M-Popup_ChartType=\u5716\u8868\u985E\u578B -Please-Wait=\u8ACB\u7A0D\u5019 -FR-Designer-Form-ToolBar_Widget=\u63A7\u5236\u9805 -Widget-Array=\u6578\u7D44 -FieldBinding=\u7D81\u5B9A\u6B04\u4F4D -Top_Bottom_Border_Line=\u4E0A\u4E0B\u6846\u7DDA -M-Others=\u5176\u5B83... -Hyperlink-Link_Opened_in=\u9023\u7D50\u6253\u958B\u65BC -FR-Utils_WorkBook=\u5DE5\u4F5C\u7C3F -M_Insert-Float=\u61F8\u6D6E\u5143\u7D20 -Out_Thick_Border_Line=\u7C97\u5323\u6846\u7DDA -FR-App-File_Lookup_range=\u67E5\u627E\u7BC4\u570D -ReportColumns-Columns_to=\u5206\u6B04\u6210 -Transparent=\u900F\u660E -Parameter-Integer=\u6574\u578B -PDF-Print_Setting=PDF\u5217\u5370\u8A2D\u5B9A -Server-Embedded_Server=\u5167\u7F6E\u7684\u4F3A\u670D\u5668 -M_Server-Server_Config_Manager=\u4F3A\u670D\u5668\u914D\u7F6E(S) -FR-Utils-Would_you_like_to_cover_the_current_file=\u4F60\u5E0C\u671B\u8986\u84CB\u7576\u524D\u6A94\u6848\u55CE -CellWrite-InsertRow_COPY=\u539F\u503C -Edit_String_To_Formula=\u662F\u5426\u5C07\u5B57\u5143\u4E32\u7DE8\u8F2F\u70BA\u516C\u5F0F -Edit-Column_Count=\u6B04\u6578 -Father=\u7236 -ReportColumns-Columns_after=\u8D85\u904E -FR-Designer_Undo=\u5FA9\u539F -DBCP_MIN_IDLE=\u6700\u5C0F\u7A7A\u9591\u9023\u63A5\u6578 -M-Data_Analysis_Settings=\u8CC7\u6599\u5206\u6790\u8A2D\u5B9A -M-Form_Preview=\u8868\u55AE\u9810\u89BD -Form-Basic_Properties=\u57FA\u672C\u5C6C\u6027 -quote=\u5F15\u7528 -Thu=\u56DB -Collect-Collect_User_Information=\u6536\u96C6\u7528\u6236\u8A0A\u606F -Layer-Build=\u5206\u5C64\u69CB\u5EFA -FR-Designer-FRFont_Line_Style=\u7DDA\u578B -BackgroundTexture-BrownMarble=\u68D5\u8272\u5927\u7406\u77F3 -PageSetup-Page_Setup=\u9801\u9762\u8A2D\u5B9A -Form-Semicolon=\u5206\u865F -ECP_re_input=\u8ACB\u91CD\u65B0\u8F38\u5165\u5BC6\u78BC\: -ExpandD-Sort_After_Expand=\u64F4\u5C55\u5F8C -FR-Designer-Dependence_Install_Succeed=\u4F9D\u8CF4\u5B89\u88DD\u6210\u529F -Env-Configure_Workspace=\u914D\u7F6E\u5DE5\u4F5C\u76EE\u9304 -feedback_info=\u6B61\u8FCE\u60A8\u63D0\u51FA\u5BF6\u8CB4\u7684\u610F\u898B\u548C\u5EFA\u8B70\uFF0C\u8ACB\u5C07\u8A0A\u606F\u586B\u5BEB\u5F97\u76E1\u91CF\u8A73\u7D30\uFF0C\u6211\u5011\u6703\u76E1\u5FEB\u806F\u7E6B\u4F60 -Ratio=\u6BD4\u7387 -DBCP_TEST_ON_BORROW=\u7372\u53D6\u9023\u63A5\u524D\u6AA2\u9A57 -FR-Designer_layerIndex=\u4F9D\u8CF4\u7684\u5C64\u6578 -WEB-Write_Setting=\u586B\u5831\u9762\u9762\u8A2D\u5B9A -M-New_WorkBook=\u65B0\u589E\u5DE5\u4F5C\u7C3F -FR-Designer-Plugin_Has_Been_Actived=Plugin is now active -Datasource-Maximum_Number_of_Preview_Rows=\u6700\u5927\u7684\u9810\u89BD\u5217\u6578 -ExpandD-Cell_Expand_Attributes=\u64F4\u5C55\u5C6C\u6027 -Select_the_repeated_row_and_column=\u9078\u64C7\u9700\u8981\u91CD\u8907\u7684\u5217\u6B04 -FormulaD-Date_&_Time=\u65E5\u671F\u548C\u6642\u9593\u51FD\u6578 -Max-Mem-Row-Count=\u7DE9\u5B58\u81F3\u78C1\u7247\u7576\u8A18\u9304\u6578\u5927\u65BC -BorderLayout-South=\u5357 -Export-Text=\u6587\u5B57\u6A94\u6848(\u88FD\u9304\u7B26\u5206\u9694) -JavaScript-Synch=\u540C\u6B65 -FR-App-All_Warning=\u8B66\u544A -M_Edit-Send_Backward=\u4E0B\u79FB\u4E00\u5C64(B) -Form-Layout=\u5E03\u5C40 -FR-Designer-Plugin_Shop_Need_Update=\u63D2\u4EF6\u5546\u5E97\u6709\u65B0\u7248\u672C,\u662F\u5426\u66F4\u65B0? -FR-Designer_WorkBook=\u5DE5\u4F5C\u7C3F -UpBarBorderStyleAndColor=\u6F32\u67F1\u6A23\u5F0F -GridLayout=\u683C\u5B50\u5E03\u5C40 -Utils-Default_Value=\u9810\u8A2D\u503C -Widget-Comb_Widget_Config=\u7D44\u5408\u63A7\u5236\u9805 -Import-Excel2007_Source=Excel2007\u6E90\u6A94\u6848 -Y-Coordinate=\u7E31\u5EA7\u6A19 -FR-Base_SimSun_Not_Found=\u7121\u6CD5\u627E\u5230\u5B8B\u9AD4, \u8ACB\u9078\u64C7\u7576\u524D\u7CFB\u7D71\u4E0B\u9810\u8A2D\u8A9E\u8A00\u4F5C\u70BA\u8A2D\u8A08\u5668\u5B57\u9AD4. -FR-Designer_Seriously=\u56B4\u91CD -Upload=\u4E0A\u50B3 -Form-Widget_Property_Table=\u5C6C\u6027\u8868 -Des-Merger_Cell=\u9078\u64C7\u7684\u5340\u57DF\u5305\u542B\u591A\u500B\u8CC7\u6599\uFF0C\u5408\u5E76\u5132\u5B58\u683C\u5F8C\u5C07\u53EA\u4FDD\u7559\u7DE8\u8F2F\u904E\u7684\u6240\u6709\u5132\u5B58\u683C\u4E2D\u6700\u5DE6\u4E0A\u89D2\u7684\u6578\u503C. -FR-Designer-Basic_Copy_Build_NO=\u96D9\u64CA\u8907\u88FD\u69CB\u5EFA\u7248\u672C\u865F -FR-Base_TurnOn=\u958B\u5553 -FR-Base_Rows=\u5217 -Form-Remove_Repeat=\u53BB\u6389\u91CD\u8907\u9805 -Yes=\u662F -Datasource-JNDI_Name=JNDI\u7684\u540D\u5B57 -Utils-Delete_Column=\u522A\u9664\u6B04 -HF-Delete_it=\u522A\u9664 -JavaScript-Dynamic_Parameters=\u52D5\u614B\u53C3\u6578 -px=\u50CF\u7D20 -FR-App-Report_Template=\u5831\u8868\u7BC4\u672C -Verify-Message=\u932F\u8AA4\u8A0A\u606F -Plan=\u8A08\u756B -Vertical-Split_Layout=\u5782\u76F4\u5206\u5272\u5E03\u5C40 -ParameterD-Delay_Playing=\u9EDE\u64CA\u67E5\u8A62\u524D\u4E0D\u986F\u793A\u5831\u8868\u5167\u5BB9 -TurnOff=\u95DC\u9589 -FR-Please_Rename=\u8ACB\u91CD\u547D\u540D -Select_Data_Set=\u9078\u64C7\u8CC7\u6599\u96C6 -Name_has_Colon=\u540D\u5B57\: -ReportColumns-Columns_horizontally=\u5217\u5206\u6B04 -FR-Base_Yes=\u662F -ReportColumns-Repeat_Row=\u8907\u88FD\u5217\u5E8F\u6B04 -Print_Setting=\u5217\u5370\u8A2D\u5B9A -Registration-User_Name=\u5E33\u865F -Datasource-User_Defined=\u81EA\u5B9A\u7FA9 -FR-Designer-Plugin_DownLoadMessage=\u63D2\u4EF6\u9700\u8981\u4F9D\u8CF4\u7684\u652F\u6301\uFF0C\u662F\u5426\u5B89\u88DD({R1} m)? -Delay=\u5EF6\u9072 -FR-Designer-All_MSBold=\u5FAE\u8EDF\u96C5\u9ED1 -Utils-Now_create_connection=\u6B63\u5728\u5EFA\u7ACB\u8CC7\u6599\u9023\u63A5 -FR-Template-Path_chooseRightPath=\u8ACB\u9078\u64C7\u6B63\u78BA\u8DEF\u5F91 -FR-Remote_Re_Connect_to_Server=\u4F3A\u670D\u5668\u5DF2\u95DC\u9589\uFF0C\u662F\u5426\u91CD\u65B0\u9023\u63A5\u4F3A\u670D\u5668? -Nation=\u570B\u5BB6 -DBCP_MAX_WAIT=\u6700\u5927\u7B49\u5F85\u6642\u9593 -FR-App-Template_Form=\u8868\u55AE -Address=\u5730\u5740 -Sub_Report=\u5B50\u5831\u8868 -FR-Import-Export_Word=Word\u683C\u5F0F -FR-Server_Version_Tip=\u60A8\u7576\u524D\u9023\u63A5\u7684\u4F3A\u670D\u5668\u7248\u672C\u4F4E\u65BC\u60A8\u4F7F\u7528\u7684\u8A2D\u8A08\u5668\u7248\u672C\u865F\uFF0C\u7E7C\u7E8C\u9023\u63A5\uFF0C\u60A8\u7DE8\u8F2F\u7684\u4E00\u4E9B\u5C6C\u6027\u53EF\u80FD\u7121\u6CD5\u6709\u6548\u5132\u5B58\u3002 \u5047\u5982\u9700\u8981\u9023\u63A5\u8ACB\u5C07\u60A8\u7684\u8A2D\u8A08\u5668\u7248\u672C\u8207\u4F3A\u670D\u5668\u7248\u672C\u4FDD\u6301\u4E00\u81F4 -StyleAlignment-Left_To_Right=\u5F9E\u5DE6\u5411\u53F3 -Verify-ToolTips=\u4E0D\u6EFF\u8DB3\u516C\u5F0F\u63D0\u793A\u6821\u9A57\u51FA\u932F\u8A0A\u606F -BackgroundTexture-Stationery=\u4FE1\u7D19 -FR-Designer_RWA-Help=\u8A2D\u5B9A\u672A\u4FEE\u6539\u4E0D\u66F4\u65B0\u5F8C\uFF0C\u586B\u5831\u9810\u89BD\u5831\u8868\uFF0C\u8A18\u9304\u6240\u5728\u5132\u5B58\u683C\u6C92\u6709\u88AB\u7DE8\u8F2F\u4FEE\u6539\uFF0C\u5247\u6B64\u8A18\u9304\u4E0D\u6703\u9032\u884C\u66F4\u65B0\uFF1B\n\u5728\u5927\u8CC7\u6599\u91CF\u8A18\u9304\u67E5\u8A62\u4E26\u56DE\u586B\u60C5\u6CC1\u4E0B\uFF0C\u555F\u7528\u8A72\u8A2D\u5B9A\uFF0C\u53EF\u4EE5\u63D0\u9AD8\u586B\u5831\u63D0\u4EA4\u6027\u80FD\u3002 -M_Insert-Barcode=\u689D\u78BC -Bounds=\u908A\u754C -FR-Designer-Undo_All_Authority_Operations=\u5FA9\u539F\u524D\u4E00\u6B21\u7DE8\u8F2F -Datasource-Context=\u4E0A\u4E0B\u6587 -CellWrite-Page_After_Column=\u6B04\u5F8C\u5206\u9801 -FR-Designer_Cancel=\u53D6\u6D88 -Button-Group-Display-Columns=\u5C55\u793A\u6B04\u6578 -Widget-Height=\u63A7\u5236\u9805\u9AD8\u5EA6 -Examples=\u4F8B\u5B50 -Formula_Dictionary_Display_Example=\u5BE6\u969B\u503C\u7BC4\u570D\u70BA Formula_Dictionary_Display_Examples\ -StyleAlignment-Horizontal=\u6C34\u5E73\u5C0D\u9F4A -HyperLink_Must_Alone_Reset=\u591A\u500B\u8D85\u93C8 -ExpandD-Expand_Direction=\u64F4\u5C55\u65B9\u5411 -Include=\u5305\u62EC -Export-Excel-Page=\u5206\u9801\u532F\u51FA -FR-Designer-Min_Height=\u6700\u5C0F\u9AD8\u5EA6 -Filed=\u5340\u57DF -ReportServerP-Import_Css=\u5F15\u7528Css -M_Insert-Formula=\u63D2\u5165\u516C\u5F0F -FR-Designer_Auto-Build=\u81EA\u52D5\u69CB\u5EFA -FRFont-Foreground=\u984F\u8272 -Bubble-Width=\u6C23\u6CE1\u5BEC\u5EA6 -Form-Hierarchy_Tree=\u7D50\u69CB\u6A39 -WLayout-Border-LayoutContainer=\u64C1\u6709\u4E2D\u90E8\u548C\u5317\u90E8\u5169\u584A\u7684\u908A\u754C\u4F48\u5C40\u5BB9\u5668\uFF0C\u5176\u4E2D\u5317\u90E8\u584A\u53EF\u4EE5\u6839\u64DA\u9700\u8981\u8ABF\u6574\u9AD8\u5EA6 -Preference-JDK_Home=JDK\u8DEF\u5F91 -Utils-Insert_Column=\u63D2\u5165\u6B04 -FR-Designer_ToolBar_Top=\u9802\u90E8\u5DE5\u5177\u6B04 -BindColumn-The_Conditions_of_FatherCell=\u7236\u683C\u689D\u4EF6 -Links=\u93C8\u63A5 -M_Report-Report_Header=\u5831\u8868\u9801\u9996 -Sub_Report_Description=\u5B50\u5831\u8868\u9700\u8981\u5B58\u5728\u65BC\u7236\u8868\u904B\u884C\u74B0\u5883\u4E0B\uFF0C\u4E14\u5169\u8005\u4E0D\u80FD\u662F\u540C\u4E00\u6A21\u677F -T_Insert-Float=\u63D2\u5165\u61F8\u6D6E\u5143\u7D20 -BackgroundTexture-FishFossil=\u9B5A\u985E\u5316\u77F3 -My_Computer=\u6211\u7684\u96FB\u8166 -FORMLET=\u8A2A\u554F\u4E0D\u540C\u8868\u55AE\u7684\u8DEF\u5F91\u7684\u53C3\u6578 -HF-Undefined=\u6C92\u6709\u5B9A\u7FA9 -Widget-User_Defined_Widget_Config=\u9810\u5B9A\u7FA9\u63A7\u5236\u9805 -Report-Write_Attributes_Group_Warning=\u8A2D\u5B9A\u7232\u5132\u5B58\u683C\u7D44\u7684\u5404\u6B04\u4F4D\u4E2D\u7684\u5132\u5B58\u683C\u500B\u6578\u5FC5\u9808\u76F8\u540C -Form-Single_quote=\u55AE\u5F15\u865F -Compile_Success_And_Then_Save=Compile Success And Then Save -FR-Designer_Layout-Padding=\u5167\u908A\u8DDD -Layout_Container=\u4F48\u5C40\u5BB9\u5668 -Admin=\u7BA1\u7406\u54E1 -Form-EC_toolbar=\u5831\u8868\u584A\u5DE5\u5177\u6B04 -FR-App-All_Auto=\u81EA\u52D5 -Utils-Available_Columns=\u53EF\u9078\u6B04 -Form-Change_Widget_Name_Discription=\u8ACB\u8F38\u5165\u4E00\u500B\u65B0\u7684\u63A7\u5236\u9805\u540D -FR-Module_Designer=\u8A2D\u8A08\u5668\u6A21\u584A -FR-Import-Export_Text=\u6587\u5B57\u6A94\u6848(\u88FD\u8868\u7B26\u5206\u9694) -Values-Editor=\u503C\u7DE8\u8F2F\u5668 -FR-Designer_Yes=\u662F -ExpandD-Expandable=\u53EF\u4F38\u5C55\u6027 -Tree-Return_Full_Path=\u7D50\u679C\u8FD4\u56DE\u5B8C\u6574\u5C64\u6B21\u8DEF\u5F91 -FRFont-bolditalic=\u7C97\u9AD4\u659C\u9AD4 -FR-Base_StyleFormat_Sample=\u793A\u4F8B -Area_Value=\u5340\u57DF\u503C -FR-Designer-Plugin_Disable=Disable -Utils-Are_you_sure_to_remove_the_selected_item=\u4F60\u78BA\u5BE6\u6C7A\u5B9A\u522A\u9664\u9078\u4E2D\u7684\u9805 -Face_Write=\u586B\u5831 -Poly-Report_Block=\u8868\u683C\u985E\u578B\u805A\u5408\u584A -Vgap=\u5782\u76F4\u9593\u9699 -FR-Designer_HyperLink_Must_Alone_Reset=\u591A\u500B\u8D85\u93C8 -DS-Class=\u985E\u5225 -FR-Hyperlink_Please_Select_Reportlet=\u8ACB\u9078\u64C7\u7DB2\u8DEF\u5831\u8868 -FS_Report_Type=\u985E\u578B -HF-New_Line=\u63DB\u5217\u7B26 -Privilege=\u6B0A\u9650 -Export-Offline-Html=\u8F38\u51FA\u96E2\u7DDAhtml\u5831\u8868 -FR-Designer_open-new-form-tip=\u7576\u524D\u6A21\u677F\u70BA711\u4EE5\u4E0B\u7248\u672C\u88FD\u4F5C, \u7121\u6CD5\u517C\u5BB9, \u4E0D\u80FD\u6253\u958B. \u5047\u5982\u60F3\u6253\u958B\u4FEE\u6539\u6B64\u8868\u55AE, \u8ACB\u4F7F\u7528\u5C0D\u61C9\u7248\u672C\u8A2D\u8A08\u5668\u6253\u958B. -FR-Designer-Widget-Style_Frame_Style=\u6846\u67B6\u6A23\u5F0F -Present-No_Present=\u53D6\u6D88\u6A21\u5F0F\u8A2D\u5B9A -FR-Designer_Form-Password=\u5BC6\u78BC -X_Axis=X\u8EF8 -FR-mobile_html_analysis=HTML5\u89E3\u6790 -M_Edit-Bring_to_Front=\u7F6E\u65BC\u9802\u5C64(T) -Null_Value_Show=\u7A7A\u503C\u986F\u793A -Datasource-JNDI_DES=\u6CE8\u610F\:\u9700\u8981\u628A\u5305\u542BINITIAL_CONTEXT_FACTORY\u985E\u7684.jar\u6A94\u6848\u8907\u88FD\u5230\u8EDF\u9AD4\u5B89\u88DD\u6A94\u6848\u4E0B\u7684/lib\u76EE\u9304\u4E0B -PrintP-Print_Preview=\u5217\u5370\u9810\u89BD -Form-Hierarchy_Tree_Last=\u4E0A\u4E00\u500B -Has_been_gone=\ \u5DF2\u4E1F\u5931\uFF0C\u662F\u5426\u589E\u52A0\u8A72\u6A23\u5F0F\uFF1F -RWA-Add_Field=\u65B0\u589E\u6B04\u4F4D -newNode=\u65B0\u589E\u7BC0\u9EDE -PageSetup-Shrink_to_fit_content=\u6839\u64DA\u5132\u5B58\u683C\u5167\u5BB9\u81EA\u52D5\u8ABF\u6574 -FR-Designer_Date=\u65E5\u671F -Column_Multiple=\u8CC7\u6599\u500D\u6578 -FR-App-All_File=\u6A94\u6848 -Sort-Descending=\u964D\u51AA -FR-Designer-Plugin_Delete=Delete -Above=\u4EE5\u4E0A\u7248\u672C -Utils-The-Chart=\u5716\u8868 -FRFont-plain=\u5E38\u898F -Calculating=\u8655\u7406\u4E2D -Form-Object=\u8868\u55AE\u5C0D\u8C61 -May=\u4E94\u6708 -FR-Designer_Plugin_Normal_Update=Update -FR-Hyperlink_Reportlet=\u7DB2\u8DEF\u5831\u8868 -M_Edit-Copy=\u8907\u88FD(C) -Sub_Report_Message2=\u7236\u5831\u8868\u4E0D\u5728\u7576\u524D\u904B\u884C\u74B0\u5883\u4E0B -Sub_Report_Message3=\u4E0D\u80FD\u9078\u64C7\u81EA\u8EAB -Sub_Report_Message1=\u8ACB\u9078\u64C7\u6B63\u78BA\u8DEF\u5F91 -Form-Allow_CustomData=\u5141\u8A31\u81EA\u5B9A\u7FA9\u503C -FR-Server_Version_Tip_MoreInfo=\u5EFA\u8B70\u60A8\u6240\u5C6C\u5718\u968A\u4F7F\u7528\u7684\u6211\u65B9FineReport\u7523\u54C1\u7684\u8A2D\u8A08\u5668\u7248\u672C\u865F\u4EE5\u53CA\u90E8\u7F72\u7684\u4F3A\u670D\u5668\u7248\u672C\u865F\u4FDD\u6301\u4E00\u81F4\uFF0C\u4EE5\u907F\u514D\u7248\u672C\u4E0D\u4E00\u81F4\u9020\u6210\u7684\u554F\u984C\u98A8\u96AA\u3002\n\u5047\u5982\u60A8\u6253\u958B\u66F4\u9AD8\u8A2D\u8A08\u5668\u7248\u672C\u88FD\u4F5C\u7684\u6A21\u677F\uFF0C\u53EF\u80FD\u6253\u958B\u51FA\u932F\uFF0C\u4E5F\u53EF\u80FD\u4E1F\u5931\u539F\u6709\u6A21\u677F\u5C6C\u6027\u3002\u5047\u5982\u60A8\u88FD\u4F5C\u7684\u6A21\u677F\u4F7F\u7528\u7684\u8A2D\u8A08\u5668\u7248\u672C\u9AD8\u65BC\u60A8\u6700\u7D42\u90E8\u7F72\u6240\u7528\u7684\u4F3A\u670D\u5668\u7248\u672C\uFF0C\u4F3A\u670D\u5668\u53EF\u80FD\u7121\u6CD5\u6B63\u5E38\u8F09\u5165\u60A8\u88FD\u4F5C\u7684\u6A21\u677F\u3002 -FR-Designer_Server-version-tip-moreInfo=\u5EFA\u8B70\u60A8\u6240\u5C6C\u5718\u968A\u4F7F\u7528\u7684\u6211\u65B9FineReport\u7522\u54C1\u7684\u8A2D\u8A08\u5668\u7248\u672C\u865F\u4EE5\u53CA\u90E8\u7F72\u7684\u4F3A\u670D\u5668\u7248\u672C\u865F\u4FDD\u6301\u4E00\u81F4\uFF0C\u4EE5\u907F\u514D\u7248\u672C\u4E0D\u4E00\u81F4\u9020\u6210\u7684\u554F\u984C\u98A8\u96AA\u3002\u5047\u5982\u60A8\u6253\u958B\u66F4\u9AD8\u8A2D\u8A08\u5668\u7248\u672C\u88FD\u4F5C\u7684\u6A21\u677F\uFF0C\u53EF\u80FD\u6253\u958B\u51FA\u932F\uFF0C\u4E5F\u53EF\u80FD\u4E1F\u5931\u539F\u6709\u6A21\u677F\u5C6C\u6027\u3002\u5047\u5982\u60A8\u88FD\u4F5C\u7684\u6A21\u677F\u4F7F\u7528\u7684\u8A2D\u8A08\u5668\u7248\u672C\u9AD8\u65BC\u60A8\u6700\u7D42\u90E8\u7F72\u6240\u7528\u7684\u4F3A\u670D\u5668\u7248\u672C\uFF0C\u4F3A\u670D\u5668\u53EF\u80FD\u7121\u6CD5\u6B63\u5E38\u8F09\u5165\u60A8\u88FD\u4F5C\u7684\u6A21\u677F -Get_Lock=\u52A0\u9396 -HF-Edit_Footer=\u7DE8\u8F2F\u9801\u5C3E -Datasource-New_Charset=\u65B0\u7DE8\u78BC -Preference-Custom=Custom -BackgroundTexture-Newsprint=\u65B0\u805E\u7D19 -ConditionB-Add_bracket=\u65B0\u589E\u62EC\u865F -Datasource-Connection_successfully=\u93C8\u63A5\u6210\u529F -Function-The_class_must_implement_the_interface=\u6539\u985E\u5FC5\u9808\u5BE6\u73FE\u4ECB\u9762 -FR-Designer_ChartF-Transparency=\u900F\u660E -Crimson=\u6DF1\u7D05 -FR-Hyperlink_Dialog=\u5C0D\u8A71\u6846 -FR-Designer_Covered_All=\u5168\u90E8\u8986\u84CB -Hyperlink-New_Window=\u65B0\u7A97\u53E3 -Style_Name=\u683C\u5F0F\u540D -CSS_warning=\ \u76F8\u5C0D\u5831\u8868\u5DE5\u7A0B\u76EE\u9304\u5982WebReport,\u5982WebReport\\css\u4E0B\u6709\u5F15\u7528\u7684css\u6A94\u6848test.css\uFF0C\u5247\u76F8\u5C0D\u8DEF\u5F91\u70BAcss/test.css -FR-Base_Column=\u6B04 -Three_Rows_Of_Two_Grid=\u4E09\u5217\u5169\u6B04\u7684\u683C\u5B50 -DBCP_VALIDATION_QUERY=SQL\u9A57\u8B49\u67E5\u8A62 -M_Edit-Clear_Formats=\u683C\u5F0F(F) -Parameter_Setting=\u53C3\u6578\u8A2D\u5B9A -Related=\u806F\u52D5 -BorderLayout-Constraints=\u4F4D\u7F6E -Write_Preview=\u586B\u5831\u9810\u89BD -PageSetup-Page_Order=\u5217\u5370\u9806\u5E8F -Verify-Verify_Formula=\u6821\u9A57\u516C\u5F0F -State=\u7701\u5E02 -FR-Designer-Widget-Style_Body_Background=\u4E3B\u9AD4\u80CC\u666F -FR-App-Privilege_No=\u6C92\u6709\u6B0A\u9650 -Please_Drag_ParaPane= -Come_True=\u5BE6\u73FE -ISEMPTY=is empty -Background-Texture=\u7D0B\u7406 -FR-Designer_Verify-Message=\u932F\u8AA4\u8A0A\u606F -Locked=\uFF08\u5DF2\u9396\u5B9A\uFF09 -Utils-Design-Action_Cancel=\u53D6\u6D88 -Image-Titled=\u5E73\u92EA -Gradient-Direction=\u6F38\u8B8A\u65B9\u5411 -Green=\u9752\u7DA0 -Report_Engine=\u5831\u8868\u5F15\u64CE -Return-String=\u8FD4\u56DE\u5B57\u5143\u4E32 -Margin=\u908A\u8DDD -Pitch_Percentage=\u9593\u8DDD\u767E\u5206\u6BD4 -FR-Base_TurnOff=\u95DC\u9589 -Utils-has_been_existed=\u5DF2\u5B58\u5728 -HF-Insert_Formula=\u63D2\u5165\u516C\u5F0F -Utils-Exit_Designer=\u9000\u51FA\u8A2D\u8A08\u5668 -Formula_Dictionary_Display=\u5C0D\u65BC\u4E0A\u9762\u5BE6\u969B\u503C\u7BC4\u570D\u5167\u7684\u6BCF\u500B\u503C($$$)\uFF0C\u5176\u986F\u793A\u503C\u70BA -PageSetup-Left_to_right=\u5148\u5217\u5F8C\u6B04 -Utils-Import_Excel_Data=\u532F\u5165[Excel] -M-Save=\u5132\u5B58 -redo=\u53D6\u6D88\u5FA9\u539F -Status=\u72C0\u614B -Draw=\u7E6A\u88FD -FR-Designer_Message=\u8A0A\u606F -Records=\u689D\u8A18\u9304 -FR-Designer_ComboBox=\u4E0B\u62C9\u6846 -Driver=\u9A45\u52D5\u5668 -Template_Parameters=\u7BC4\u672C\u53C3\u6578 -Form-Remove_Repeat_Data=\u53BB\u9664\u91CD\u8907\u8CC7\u6599 -ECP_decode=\u6A21\u677F\u89E3\u5BC6 -Area_Name=\u5340\u57DF\u540D -Others=\u5176\u5B83 -Merge=\u5408\u5E76 -BackgroundTexture-Parchment=\u7F8A\u76AE\u7D19 -BindColumn-Bottom_N=\u5F8CN\u500B -Frame=\u6846\u67B6 -Bottom_Border_Line=\u4E0B\u6846\u7DDA -Muiti_In=\u591A\u5C64\u947D\u53D6 -FR-Designer-Dependence_Install_Online=\u5728\u7DDA\u5B89\u88DD\u4F9D\u8CF4\u74B0\u5883 -Use_Default_ToolBar=\u4F7F\u7528\u9810\u8A2D\u5DE5\u5177\u6B04 -M_Server-Platform_Manager=\u5831\u8868\u5E73\u81FA\u7BA1\u7406(P) -PageSetup-inches=\u82F1\u5BF8 -Form-Widget_Property=\u5C6C\u6027\u540D -FR-Layout_Padding=\u5167\u908A\u8DDD -Schema=\u4E3B\u984C -Server_Path=\u4E3B\u6A5F\u4F4D\u7F6E -Condition_Display=\u689D\u4EF6\u986F\u793A -FR-Server-Design_template_unopened=\u7121\u6CD5\u6253\u958B\u7BC4\u672C -Function-Function_Class_Name=\u51FD\u6578\u985E\u540D -Schedule-Template=\u7BC4\u672C\u540D\u7A31 -Tree_Data_Field=\u6A39\u72C0\u8CC7\u6599\u6B04\u4F4D -Border-Style-Normal=\u76F4\u89D2\u6846\u7DDA -Top_And_Double_Bottom_Border_Line=\u4E0A\u6846\u7DDA\u548C\u96D9\u4E0B\u6846\u7DDA -FR-Server_Embedded_Server_Start=\u5167\u7F6E\u7684\u4F3A\u670D\u5668-\u555F\u52D5 -FR-Designer-Basic_Restart_Designer_Later=Restart later -StyleAlignment-Top=\u9760\u4E0A\u5C0D\u9F4A -ReportServerP-First=\u9996\u9801 -Not_Exist=\u4E0D\u5B58\u5728 -FR-Remote_File_is_Locked=\u60A8\u6240\u8981\u6253\u958B\u7684\u5831\u8868\u6B63\u5728\u88AB\u5176\u4ED6\u4EBA\u7DE8\u8F2F\uFF0C\u8ACB\u7A0D\u5019\u6253\u958B -Apply=\u61C9\u7528 -Sytle-Indentation=\u7E2E\u9032 -Parameter-Float=\u55AE\u7CBE\u5EA6\u578B -HF-Center_Section=\u4E2D\u9593\u5340\u57DF -Form-Double_quotes=\u96D9\u5F15\u865F -M_File-Export-Word=Word\u683C\u5F0F -M_File-Export-Text=\u6587\u5B57\u6A94\u6848(\u88FD\u9304\u7B26\u5206\u9694) -PageSetup-First_Page_Number=\u8D77\u59CB\u9801\u78BC -Execute=\u57F7\u884C -Task=\u4EFB\u52D9 -Custom_Button_Type_Submit=\u63D0\u4EA4 -FR-Designer-Widget_Settings=\u63A7\u5236\u9805\u8A2D\u5B9A -IS_Need_Password=\u9700\u8981\u5BC6\u78BC -PageSetup-Horizontally=\u6C34\u5E73\u7F6E\u4E2D -No_Editor_Property_Definition=\u8A72\u7DE8\u8F2F\u5668\u6C92\u6709\u5C6C\u6027\u5B9A\u7FA9 -Env-Remote_Server=\u9060\u7A0B\u4F3A\u670D\u5668 -FR-Utils_Background=\u80CC\u666F -FR-Designer-Plugin_Warning=Warning -Server-version-info=\u60A8\u7576\u524D\u6253\u958B\u7684\u6A21\u677F\u6A94\u6848\u662F\u7531\u66F4\u9AD8\u7248\u672C\u7684\u8A2D\u8A08\u5668\u88FD\u4F5C\u7684\uFF0C\u6253\u958B\u6703\u6709\u51FA\u932F\u6216\u8005\u4E1F\u5931\u539F\u6709\u6A21\u677F\u5C6C\u6027\u7684\u98A8\u96AA\u3002\u5047\u5982\u9700\u8981\u6253\u958B\u6B64\u6A21\u677F\u8ACB\u60A8\u5C07\u60A8\u7684\u8A2D\u8A08\u5668\u5347\u7D1A\u81F3 -CellWrite-Page_After_Row=\u5217\u5F8C\u5206\u9801 -HF-Right_Section=\u53F3\u5340\u57DF -PageSetup-Title_Start_Row=\u91CD\u8907\u6A19\u984C\u5217 -From=\u5F9E\u7B2C -Preference-Grid_Line_Color=\u7DB2\u683C\u7DDA\u984F\u8272 -RowTo=\u5217\u81F3\u7B2C -FR-Designer_ReportColumns-Repeat_Column=\u91CD\u8907\u6B04\u5E8F\u6B04 -M_Server-Function_Manager=\u51FD\u6578\u7BA1\u7406\u5668 -KeyWord=\u95DC\u9375\u5B57 -DS-Multi_Dimensional_Database=\u591A\u7DAD\u8CC7\u6599\u5EAB -BiasD-Slope_Line=\u659C\u7DDA -Tue=\u4E8C -ReportServerP-Last=\u672B\u9801 -FR-Base_Columns=\u6B04 -SpecifiedG-Leave_in_their_own_groups=\u7559\u5728\u5404\u81EA\u7684\u7D44\u5167 -LOG-Please_Wait=\u8ACB\u7A0D\u5019 -Form-ToolBar=\u8868\u55AE\u5DE5\u5177\u6B04 -FR-Base_sure_remove_item=\u4F60\u78BA\u5BE6\u6C7A\u5B9A\u522A\u9664\u9078\u4E2D\u7684\u9805 -Component_Scale=\u5143\u4EF6\u7E2E\u653E -Hyperlink-Use_CJK_to_encode_parameter=\u4F7F\u7528CJK\u8655\u7406\u53C3\u6578 -LOG-Has_Been_Openned=\u5DF2\u7D93\u6253\u958B -FR-Designer-Dependence= -ECP_error_pwd=\u5BC6\u78BC\u932F\u8AA4 -REPORTLET=\u8A2A\u554F\u6A21\u677F\u7684\u8DEF\u5F91\u7684\u53C3\u6578\u3002 -RWA-Column_Offset=\u6B04\u504F\u79FB -Forecast=\u9810\u6E2C -Light_Orange=\u6DFA\u6854\u9EC3 -StyleAlignment-Vertical=\u5782\u76F4\u5C0D\u9F4A -Form-List=\u6B04\u8868 -ParameterD-Show_Parameter_Window=\u986F\u793A\u53C3\u6578\u7A97\u9AD4 -FR-Designer_Set_Submit_Event=\u8A2D\u5B9A\u63D0\u4EA4\u4E8B\u4EF6 -Value_Percent=\u503C\u6240\u4F54\u6BD4\u4F8B -DBCP_MIN_EVICTABLE_IDLE_TIMEMILLIS=\u4FDD\u6301\u7A7A\u9591\u6700\u5C0F\u6642\u9593\u503C -Function-The_class_must_be_located_in=\u6539\u985E\u5FC5\u9808\u653E\u7F6E\u5728 -FR-Action_Sort=\u6392\u5E8F -DataFunction-Average=\u5E73\u5747 -FR-Designer_Show_in_Containing_Folder=\u6253\u958B\u6240\u5728\u8CC7\u6599\u593E -M_File-Export-Excel=Excel\u683C\u5F0F -DataFunction-Max=\u6700\u5927\u503C -FR-Designer_Form-Widget_Name=\u63A7\u5236\u9805\u540D -FS_End_Date=\u7D50\u675F\u65E5\u671F -Export-Excel-Simple=\u539F\u6A23\u532F\u51FA -ColumnTo=\u6B04\u81F3\u7B2C -SpecifiedG-Discard_all_others=\u4E1F\u68C4\u5176\u4ED6\u6240\u6709\u7684 -DS-TableData=\u8CC7\u6599\u96C6 -Form-DataTable=\u8CC7\u6599\u8868 -Sub_Report_ToolTips=\u5B50\u5831\u8868\u63D0\u793A -Right_Top=\u53F3\u4E0A -M_Edit-Merge_Cell=\u5408\u5E76\u5132\u5B58\u683C -FR-Designer_Restore_Default=\u6062\u5FA9\u9810\u8A2D -Component_Interval=\u5143\u4EF6\u9593\u9694 -Cover_None=\u5168\u4E0D\u8986\u84CB -Datasource-From_Database=\u8CC7\u6599\u5EAB\u8868 -Folder=\u76EE\u9304 -Form-Allow_Edit=\u5141\u8A31\u76F4\u63A5\u7DE8\u8F2F -M_Edit-Clear=\u6E05\u9664(A) -ParentCell_Setting=\u7236\u683C\u8A2D\u5B9A -Only_selected_cell_can_paste_only=\u53EA\u6709\u9078\u4E2D\u5132\u5B58\u683C\u6642\u624D\u53EF\u4EE5\u8CBC\u4E0A -M_Report-Report_Columns=\u5831\u8868\u5206\u6B04 -Unit_Hundred=\u4F70 -FR-Designer_DataTable-Build=\u6975\u901F\u5206\u5C64\u69CB\u5EFA -Widget-Form_Widget_Config=\u8868\u55AE\u63A7\u5236\u9805 -Server-version-tip-moreInfo=\u5EFA\u8B70\u60A8\u6240\u5C6C\u5718\u968A\u4F7F\u7528\u7684\u6211\u65B9FineReport\u7522\u54C1\u7684\u8A2D\u8A08\u5668\u7248\u672C\u865F\u4EE5\u53CA\u90E8\u7F72\u7684\u4F3A\u670D\u5668\u7248\u672C\u865F\u4FDD\u6301\u4E00\u81F4\uFF0C\u4EE5\u907F\u514D\u7248\u672C\u4E0D\u4E00\u81F4\u9020\u6210\u7684\u554F\u984C\u98A8\u96AA\u3002\u5047\u5982\u60A8\u6253\u958B\u66F4\u9AD8\u8A2D\u8A08\u5668\u7248\u672C\u88FD\u4F5C\u7684\u6A21\u677F\uFF0C\u53EF\u80FD\u6253\u958B\u51FA\u932F\uFF0C\u4E5F\u53EF\u80FD\u4E1F\u5931\u539F\u6709\u6A21\u677F\u5C6C\u6027\u3002\u5047\u5982\u60A8\u88FD\u4F5C\u7684\u6A21\u677F\u4F7F\u7528\u7684\u8A2D\u8A08\u5668\u7248\u672C\u9AD8\u65BC\u60A8\u6700\u7D42\u90E8\u7F72\u6240\u7528\u7684\u4F3A\u670D\u5668\u7248\u672C\uFF0C\u4F3A\u670D\u5668\u53EF\u80FD\u7121\u6CD5\u6B63\u5E38\u8F09\u5165\u60A8\u88FD\u4F5C\u7684\u6A21\u677F -Actions=\u4EFB\u52D9 -FR-Designer-Dependence_Connect_Server_Error=\u7121\u6CD5\u9023\u63A5\u670D\u52D9\u5668\uFF0C\u8ACB\u7A0D\u5F8C\u518D\u8A66 -High=\u9AD8 -HJS-Send_Failed=\u767C\u9001\u5931\u6557 -HJS-Message=\u5167\u5BB9 -File-Allow_Upload_Files=\u5141\u8A31\u4E0A\u50B3\u6A94\u6848\u985E\u578B -FR-Designer-Form-ToolBar_Chart=\u5716\u8868 -Thick_Bottom_Border_Line=\u7C97\u5730\u6846\u7DDA -FR-Action_Remove=\u522A\u9664 -FRFont-Style=\u5B57\u5F62 -Select_DataColumn=\u9078\u64C7\u8CC7\u6599\u6B04 -StartValue=\u958B\u59CB\u503C -SINGLE_FILE_UPLOAD=\u53EA\u652F\u6301\u55AE\u6A94\u6848\u4E0A\u50B3 -BackgroundTexture-Cork=\u8EDF\u6728\u585E -M_Format-Data_Map=\u8CC7\u6599\u5B57\u5178 -FR-mobile_native_analysis=\u539F\u751F\u89E3\u6790 -HighLight=\u9AD8\u5149 -FR-Designer_Dropdown-More-Preview=\u4E0B\u62C9\u7372\u5F97\u66F4\u591A..... -local=\u672C\u6A5F -FR-Designer_Gradation=\u5C64\u6B21 -PageSetup-Finis_Start_Column=\u91CD\u8907\u7D50\u5C3E\u6B04 -Env-Invalid_User_and_Password=\u975E\u6CD5\u7684\u5E33\u865F\u6216\u5BC6\u78BC -FR-Designer-Plugin_All_Plugins=All plugins -FR-Designer_Prepare_Export=\u958B\u59CB\u532F\u51FA\uFF0C\u8ACB\u7A0D\u5019 -DBCP_TEST_ON_RETURN=\u6B78\u9084\u93C8\u63A5\u524D\u6AA2\u9A57 -no-alternatives=\u6C92\u6709\u9078\u64C7\u9805 -FR-Designer_Submmit_WClass=\u5F8C\u53F0\u985E\u63D0\u4EA4 -M_Insert-Slope_Line=\u63D2\u5165\u659C\u7DDA -FR-Designer-Plugin_Plugin_Description=Description -ExpandD-Not_Expand=\u4E0D\u64F4\u5C55 -Utils-Bottom_to_Top=\u5F9E\u4E0B\u5230\u4E0A -Collect-Click\!_Get_user_information_code=\u9EDE\u64CA\!\u7372\u53D6\u7528\u6236\u8A0A\u606F\u78BC -FR-Already_exist=\u7576\u524D\u74B0\u5883\u5DF2\u5B58\u5728 -Send=\u767C\u9001 -M_Edit-Clear_All=\u5168\u90E8(A) -Brown_Orange=\u68D5\u9EC3 -PageSetup-Portrait=\u7E31\u5411 -FR-Designer_Form-RadioGroup=\u55AE\u9078\u6309\u9215\u7D44 -FR-Utils-App_AllFiles=\u6240\u6709\u6A94\u6848 -Popup=\u5F48\u51FA -Server_Charset=\u4F3A\u670D\u5668\u7DE8\u78BC -CellWrite-Repeat_Content_When_Paging=\u5206\u9801\u65B7\u958B\u6642\u503C\u91CD\u8907\u986F\u793A -Utils-No_Pagination=\u4E0D\u5206\u9801 -Form-NullLayout=\u7D55\u5C0D\u5B9A\u4F4D -ConditionB-Remove_bracket=\u53BB\u6389\u62EC\u865F -email=\u90F5\u7BB1 -Minute=\u5206\u9418 -FR-Designer-Plugin_Update=Plugins to update -alraedy_close=\u5DF2\u7D93\u95DC\u9589 -ComboCheckBox-End_Symbol=\u7D50\u675F\u7B26 -DataColumn=\u8CC7\u6599\u6B04 -Form-Password=\u5BC6\u78BC -FR-Background_Image_Adjust=\u9069\u61C9 -Export-Excel-PageToSheet=\u5206\u9801\u5206Sheet\u532F\u51FA -Edit-Row_Count=\u5217\u6578 -DS-Report_TableData=\u5831\u8868\u8CC7\u6599\u96C6 -Sche-Hour=\u6642 -Group_Count=Group Count -EndValue=\u7D50\u675F\u503C -FR-Designer_Sytle-Indentation=\u7E2E\u9032 -DownBarBorderStyleAndColor=\u8DCC\u67F1\u6A23\u5F0F -World=\u4E16\u754C -FR-Designer-Basic_Cancel=Cancel -Finally=\u6700\u5F8C -Low=\u4F4E -Please_Input_The_Key=\u8ACB\u8F38\u5165\u5C0D\u61C9\u5730\u5716\u4F7F\u7528\u7684key -Smart=\u667A\u80FD -Preference-Predefined=Predefined -Current_custom_global=\u7576\u524D\u5831\u8868\u6240\u7528\u81EA\u5B9A\u7FA9\u5168\u5C40\u6A23\u5F0F -FR-Designer-Plugin_Shop_Need_Install=\u60A8\u9084\u6C92\u6709\u63D2\u4EF6\u5546\u5E97\u7684\u8CC7\u6E90,\u662F\u5426\u4E0B\u8F09? -WEB-Pagination_Setting=\u5206\u9801\u9810\u89BD\u8A2D\u5B9A -RCodeDrawPix=\u50CF\u7D20 -FR-Designer-Widget-Style_Alpha=\u4E0D\u900F\u660E\u5EA6 -BorderLayout-North=\u5317 -HJS-Current_Page=\u7576\u524D\u9801 -Compile=Compile -Show_Blank_Row=\u88DC\u5145\u7A7A\u767D\u5217 -TableData_Dynamic_Parameter_Setting=\u52D5\u614B\u53C3\u6578\u6CE8\u5165 -FR-Background_Image_Default=\u9810\u8A2D -BackgroundTexture-WhiteMarble=\u767D\u8272\u5927\u7406\u77F3 -DataFunction-Sum=\u6C42\u548C -Collect-The_user_information_code_is_invalid=\u9019\u500B\u7528\u6236\u8A0A\u606F\u78BC\u662F\u975E\u6CD5\u7684 -Preference-Locale=Locale -M_File-Export-PDF=PDF\u683C\u5F0F -BiasD-From-lower_left_to_upper_right=\u7E3D\u5DE6\u4E0B\u5230\u53F3\u4E0A\u767C\u6563 -Border-Style=\u6846\u7DDA\u6A23\u5F0F -Sort=\u6392\u5E8F -Image-Image_Layout=\u5716\u7247\u5E03\u5C40 -Panel=\u9762\u677F -FR-Designer-Basic_Copy_Build_NO_OK=\u69CB\u5EFA\u7248\u672C\u865F\u5DF2\u7D93\u5FA9\u88FD\u5230\u526A\u8CBC\u677F -All_Border_Line=\u6240\u6709\u6846\u7DDA -FR-Utils-Please_Input_a_New_Name=\u8ACB\u8F38\u5165\u65B0\u7684\u540D\u5B57 -FR-Base_Formula_Plugin=\u63D2\u4EF6\u51FD\u6578 -Two_Rows_Of_Three_Grid=\u5169\u5217\u4E09\u6B04\u7684\u683C\u5B50 -FR-Designer_Certificate_Pass=https\u79D8\u9470 -Bubble-Series_Name=\u7CFB\u5217\u540D -M-New_Multi_Report=\u65B0\u589E\u8907\u5408\u5F0F\u5831\u8868 -BackgroundTexture-PinkTissuePaper=\u7C89\u8272\u7802\u7D19 -Preference-Support_Default_Parent_Calculate=\u9810\u8A2D\u7236\u683C\u8A08\u7B97 -Show_Blank_Column=\u88DC\u5145\u7A7A\u767D\u6B04 -BaiduMap=\u767E\u5EA6\u5730\u5716 -Report-Web_Attributes=\u5831\u8868Web\u5C6C\u6027 -FR-Designer_StyleAlignment-Wrap_Text=\u81EA\u52D5\u63DB\u5217 -Need=\u9700\u8981 -Parameter-Double=\u96D9\u7CBE\u5EA6\u578B -Config_Servlet=\u914D\u7F6E\u9060\u7A0B\u4F3A\u670D\u5668 -Form-Comma=\u9017\u865F -Verify=\u6821\u9A57 -PageSetup-Landscape=\u6A6B\u5411 -Weeks=\u500B\u661F\u671F -FR-Designer-Widget-Style_Title_Background=\u6A19\u984C\u80CC\u666F -Preference-Pagination_Line_Color=\u5206\u9801\u7DDA\u984F\u8272 -Test_URL=\u6E2C\u8A66\u9023\u63A5 -Fill_blank_Data=\u88DC\u5145\u7A7A\u767D\u8CC7\u6599 -ReportServerP-The_name_of_printer_cannot_be_null=\u5370\u8868\u6A5F\u7684\u540D\u5B57\u4E0D\u80FD\u70BA\u7A7A -FR-Designer-Basic_Copy_Activation_Key=Double click to copy key to clipboard -Continuum=\u76F8\u9130\u9023\u7E8C -BackgroundTexture-MediumWood=\u6DF1\u8272\u6728\u88FD -Datasource-Column_Index=\u6B04\u5E8F\u865F -Function-Function_File=\u51FD\u6578\u6A94\u6848 -Form-Component_Bounds=\u5143\u4EF6\u908A\u754C -Utils-Submit=\u63D0\u4EA4 -Conditions_formula=\u689D\u4EF6\u516C\u5F0F -M_Insert-Image=\u63D2\u5165\u5716\u7247 -FR-Designer-Plugin_Will_Be_Delete=Delete plugin -FormulaD-Functions=\u51FD\u6578 -Mobile_Terminal=\u884C\u52D5\u8A2D\u5099 -CheckBox=\u5FA9\u9078\u6846 -FR-Designer-Plugin_Install=Install -Sun=\u65E5 -FR-Designer_ToolBar_Bottom=\u5E95\u90E8\u5DE5\u5177\u6B04 -Widget-Width=\u63A7\u5236\u9805\u5BEC\u5EA6 -Series_Name=\u7CFB\u5217\u540D -Set_Row_Title_Start=\u8A2D\u5B9A\u91CD\u8907\u6A19\u984C\u5217 -HF-Default_Page=\u9810\u8A2D\u9801 -Env_Des=\u5982\u679C\u767B\u9304\u74B0\u5883\u4E2D\u7684\u5831\u8868\u5DE5\u7A0B\u555F\u7528\u4E86\u6B0A\u9650\uFF0C\u5E33\u865F\u548C\u5BC6\u78BC\u7684\u586B\u5BEB\u5FC5\u9808\u5C0D\u61C9\u767B\u9304\u74B0\u5883\u7684\u7528\u6236\u548C\u5BC6\u78BC\u3002 -Widget-User_Defined=\u9810\u5B9A\u7FA9 -Url_location=\u7D55\u5C0D\u8DEF\u5F91 -Disk_File=\u78C1\u789F\u6A94\u6848 -Inside=\u5167\u90E8 -FR-Designer_filedChosen=\u4F9D\u8CF4\u7684\u5B57\u6BB5 -ServerM-Predefined_Styles=\u9810\u5B9A\u7FA9\u6A23\u5F0F -is_need_word_adjust=\u4E0D\u56FA\u5B9A\u5217\u9AD8\u532F\u51FA -Background-Null=\u6C92\u6709\u80CC\u666F -PageSetup-Vertically=\u5782\u76F4\u7F6E\u4E2D -FR-Designer_Root=\u6839\u7BC0\u9EDE -FR-Designer_Form-TextArea=\u6587\u672C\u57DF -ReportServerP-Import_JavaScript=\u5F15\u7528JavaScript -Form-TableTree=\u8868\u683C\u6A39 -Opened=\u5DF2\u958B\u5553 -M_Edit-Delete=\u522A\u9664(D) -Widget-Form_Widget_Container=\u8868\u55AE\u5BB9\u5668 -BindColumn-Summary=\u532F\u7E3D -Sche-Second=\u79D2 -Server-Open_Service_Manager=\u6253\u958B\u4F3A\u670D\u5668\u7BA1\u7406\u5668 -FRFont-Effects=\u7279\u6B8A\u6548\u679C -OtherGroup_Name=\u5176\u4ED6\u7D44\u7684\u540D\u5B57 -Specify=\u6307\u5B9A -Highlight-Click_to_Choose_Property_To_Modify=\u9EDE\u64CA\u9078\u64C7\u8981\u6539\u8B8A\u7684\u5C6C\u6027 -triggered=\u88AB\u89F8\u767C -Double_Bottom_BorderLine=\u96D9\u5E95\u6846\u7DDA -M_Insert-Sub_Report=\u63D2\u5165\u5B50\u5831\u8868 -Unit_Ten=\u5341 -Polybolck=\u805A\u5408\u584A -Select_sort_order=\u9078\u64C7\u6392\u6B04\u9806\u5E8F -HJS-Mail_to=\u6536\u4EF6\u4EBA -StyleAlignment-Left=\u9760\u5DE6\u5C0D\u9F4A -Two_Rows_Of_Two_Grid=\u5169\u5217\u5169\u6B04\u7684\u683C\u5B50 -FR-Designer-Form-Please_Drag_ParaPane=\u8ACB\u62D6\u5165\u53C3\u6578\u9762\u677F -Milliseconds=\u6BEB\u79D2 -DataFunction-None=\u7121 -Delivery=\u50B3\u905E -ColumnSpan=\u6B04\u8DE8\u5EA6 -StyleAlignment-Bottom=\u9760\u4E0B\u5C0D\u9F4A -Read_failure=\u8B80\u53D6\u5931\u6557\uFF0C\u53EF\u80FD\u6E90\u6A94\u6848\u5DF2\u640D\u58DE -Verify-Verify=\u8CC7\u6599\u6821\u9A57 -FR-Designer-Widget-Style_Title_Format=\u6A19\u984C\u683C\u5F0F -FR-Designer_Edit_String_To_Formula=\u662F\u5426\u5C07\u5B57\u5143\u4E32\u7DE8\u8F2F\u70BA\u516C\u5F0F -FR-Base_UnSignIn=\u672A\u767B\u9304 -Every=\u6BCF -CellWrite-Preview_Cell_Content=\u9810\u89BD\u5132\u5B58\u683C\u5167\u5BB9 -FormulaD-Data_Fields=\u8CC7\u6599\u9805 -FR-Designer_Role=\u89D2\u8272 -FR-Designer_Permissions=\u6B0A\u9650 -FR-Designer_Form_Button=\u6309\u9215 -FR-Designer_WF_Name=\u540D\u7A31 \ No newline at end of file +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 diff --git a/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java b/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java index 03612e0da..536f984eb 100644 --- a/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java +++ b/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java @@ -11,6 +11,7 @@ import com.fr.design.actions.UpdateAction; import com.fr.design.actions.community.*; import com.fr.design.actions.file.*; import com.fr.design.actions.help.AboutAction; +import com.fr.design.actions.help.AlphaFine.AlphafineAction; import com.fr.design.actions.help.TutorialAction; import com.fr.design.actions.help.WebDemoAction; import com.fr.design.actions.server.*; @@ -36,10 +37,8 @@ import com.fr.stable.ProductConstants; import javax.swing.*; import java.awt.*; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Locale; -import java.util.Set; +import java.util.*; +import java.util.List; /** * @author richer @@ -56,6 +55,7 @@ public abstract class ToolBarMenuDock { public static final int PANLE_HEIGNT = 26; private MenuDef[] menus; private ToolBarDef toolBarDef; + private ArrayList shortCuts; /** * 更新菜单 @@ -143,11 +143,36 @@ public abstract class ToolBarMenuDock { // 添加社区菜单 addCommunityMenuDef(menuList); - + + // 添加全部UpdateAction到actionmanager中 + getAllUpdateActions(menuList); + UpdateActionManager.getUpdateActionManager().setUpdateActions(shortCuts); + return menuList.toArray(new MenuDef[menuList.size()]); } - - public void addCommunityMenuDef(java.util.List menuList){ + + private List getAllUpdateActions(List menuList) { + shortCuts = new ArrayList<>(); + for (MenuDef menuDef : menuList) { + addUpdateActionToList(menuDef); + } + return shortCuts; + } + + private void addUpdateActionToList(MenuDef menuDef) { + if (menuDef instanceof OpenRecentReportMenuDef) { + return; + } + for (ShortCut shortCut : menuDef.getShortcutList()) { + if (shortCut instanceof UpdateAction) { + shortCuts.add((UpdateAction) shortCut); + } else if (shortCut instanceof MenuDef) { + addUpdateActionToList((MenuDef) shortCut); + } + } + } + + public void addCommunityMenuDef(java.util.List menuList){ Locale locale = FRContext.getLocale(); Locale [] locales =supportCommunityLocales(); for(int i = 0; i < locales.length; i++) { @@ -157,8 +182,8 @@ public abstract class ToolBarMenuDock { } } } - - public Locale[] supportCommunityLocales() { + + public Locale[] supportCommunityLocales() { return new Locale[]{ Locale.CHINA, Locale.TAIWAN, @@ -266,6 +291,10 @@ public abstract class ToolBarMenuDock { return new UILabel(); } + public Component createAlphafinePane(){ + return new UILabel(); + } + protected MenuDef createServerMenuDef(ToolBarMenuDockPlus plus) { MenuDef menuDef = new MenuDef(Inter.getLocText("FR-Designer_M-Server"), 'S'); @@ -332,6 +361,8 @@ public abstract class ToolBarMenuDock { } shortCuts.add(SeparatorDef.DEFAULT); shortCuts.add(new AboutAction()); + shortCuts.add(SeparatorDef.DEFAULT); + shortCuts.add(new AlphafineAction()); return shortCuts.toArray(new ShortCut[shortCuts.size()]); } @@ -544,7 +575,7 @@ public abstract class ToolBarMenuDock { for (MenuHandler handler : target) { int insertPosition = handler.insertPosition(menuDef.getShortCutCount()); - if (insertPosition == MenuHandler.HIDE) { + if (insertPosition == MenuHandler.HIDE) { return; } ShortCut shortCut = action.methodAction(handler); From 66a51909c006f935c6bb0994a7cda528f57ef024 Mon Sep 17 00:00:00 2001 From: neil Date: Fri, 12 May 2017 10:13:12 +0800 Subject: [PATCH 342/343] 1 --- .../com/fr/design/mainframe/toolbar/ToolBarMenuDockPlus.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDockPlus.java b/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDockPlus.java index ada075aeb..4e9e8c4f9 100644 --- a/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDockPlus.java +++ b/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDockPlus.java @@ -8,7 +8,7 @@ import com.fr.design.menu.ToolBarDef; public interface ToolBarMenuDockPlus { /** - * 模板的工具 + * 模板的 工具 * * @return 工具 */ From b2c4cc8e9dead31b31180d996c16802aa8b4b76e Mon Sep 17 00:00:00 2001 From: neil Date: Fri, 12 May 2017 10:13:22 +0800 Subject: [PATCH 343/343] 2 --- .../com/fr/design/mainframe/toolbar/ToolBarMenuDockPlus.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDockPlus.java b/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDockPlus.java index 4e9e8c4f9..ada075aeb 100644 --- a/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDockPlus.java +++ b/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDockPlus.java @@ -8,7 +8,7 @@ import com.fr.design.menu.ToolBarDef; public interface ToolBarMenuDockPlus { /** - * 模板的 工具 + * 模板的工具 * * @return 工具 */