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/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/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/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/src/com/fr/design/webattr/EditToolBar.java b/designer/src/com/fr/design/webattr/EditToolBar.java
index 58f455870..ac1295934 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;
@@ -199,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));
}
@@ -326,7 +327,7 @@ public class EditToolBar extends BasicPane {
private IconDefinePane iconPane;
private UIButton button;
private JavaScriptActionPane javaScriptPane;
- private ExportToolBarProvider[] exportToolBarProviders;
+ private ExportToolBarProvider[] exportToolBarProviders;
private ChangeListener changeListener = new ChangeListener() {
public void stateChanged(ChangeEvent e) {
@@ -386,6 +387,11 @@ 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);
+ }
+
this.add(centerPane, BorderLayout.CENTER);
}
@@ -479,7 +485,6 @@ public class EditToolBar extends BasicPane {
return submitPane;
}
-
@Override
protected String title4PopupWindow() {
return "Button";
@@ -528,13 +533,18 @@ public class EditToolBar extends BasicPane {
} else if (widget instanceof CustomToolBarButton) {
populateCustomToolBarButton();
}
- }
-
+
+ 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;
@@ -550,7 +560,7 @@ public class EditToolBar extends BasicPane {
}
}
}
-
+
private void populateCustomToolBarButton(){
card.show(centerPane, "custom");
CustomToolBarButton customToolBarButton = (CustomToolBarButton) widget;
@@ -558,7 +568,7 @@ public class EditToolBar extends BasicPane {
this.javaScriptPane.populateBean(customToolBarButton.getJSImpl());
}
}
-
+
private void populateSubmit(){
card.show(centerPane, "submit");
Submit submit = ((Submit) widget);
@@ -566,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;
@@ -581,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());
@@ -592,7 +602,7 @@ public class EditToolBar extends BasicPane {
/**
* 更新
- *
+ *
* @return 对应组件
*/
public Widget update() {
@@ -613,23 +623,29 @@ public class EditToolBar extends BasicPane {
if (widget instanceof Button) {
updateDefault();
}
+
+ 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());
@@ -637,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/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/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/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
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/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/dialog/mobile/MobileUseHtmlGroupBeanPane.java b/designer_base/src/com/fr/design/dialog/mobile/MobileUseHtmlGroupBeanPane.java
index 06666ee57..d70ad4c39 100644
--- a/designer_base/src/com/fr/design/dialog/mobile/MobileUseHtmlGroupBeanPane.java
+++ b/designer_base/src/com/fr/design/dialog/mobile/MobileUseHtmlGroupBeanPane.java
@@ -45,6 +45,8 @@ 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/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);
diff --git a/designer_base/src/com/fr/design/formula/FormulaPane.java b/designer_base/src/com/fr/design/formula/FormulaPane.java
index d7e3f21be..9aec1972a 100644
--- a/designer_base/src/com/fr/design/formula/FormulaPane.java
+++ b/designer_base/src/com/fr/design/formula/FormulaPane.java
@@ -32,10 +32,12 @@ import javax.swing.event.ListSelectionListener;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.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
@@ -60,29 +62,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-Designer_FormulaPane_Tips");
if(text.contains(tip)) {
text = text.substring(0, text.indexOf(tip));
insertPosition = 0;
@@ -90,9 +79,10 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{
}
}
});
-
- formulaTextArea.addMouseListener(new MouseAdapter() {
-
+ }
+
+ private void initFormulaTextAreaMouseListener(){
+ formulaTextArea.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
insertPosition = formulaTextArea.getCaretPosition();
@@ -115,52 +105,81 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{
}
}
});
- UIScrollPane formulaTextAreaScrollPane = new UIScrollPane(formulaTextArea);
- formulaTextAreaScrollPane.setBorder(null);
- textPane.add(formulaLabel, BorderLayout.NORTH);
- textPane.add(formulaTextAreaScrollPane, BorderLayout.CENTER);
- textPane.add(checkBoxandbuttonPane, BorderLayout.SOUTH);
-
- // tipsPane
- JPanel tipsPane = new JPanel(new BorderLayout(4, 4));
- this.add(tipsPane, BorderLayout.EAST);
-
- JPanel searchPane = new JPanel(new BorderLayout(4, 4));
- searchPane.add(keyWordTextField, BorderLayout.CENTER);
- UIButton searchButton = new UIButton(Inter.getLocText("Search"));
- searchPane.add(searchButton, BorderLayout.EAST);
- tipsPane.add(searchPane, BorderLayout.NORTH);
-
- keyWordTextField.addKeyListener(new KeyListener() {
-
+ }
+
+ private void initFormulaTextArea(){
+ formulaTextArea = new RSyntaxTextArea();
+ configFormulaArea();
+ initFormulaTextAreaKeyListener();
+ initFormulaTextAreaMouseListener();
+ }
+
+ private void initKeyWordTextFieldKeyListener(){
+ keyWordTextField.addKeyListener(new KeyListener() {
@Override
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-Designer_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);
@@ -169,20 +188,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);
}
@@ -253,11 +259,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();
@@ -461,7 +473,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-Designer_FormulaPane_Tips"));
this.formulaTextArea.setCaretPosition(0);
ifHasBeenWriten = 0;
this.listModel.removeAllElements();
@@ -548,22 +561,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);
@@ -573,48 +585,44 @@ 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);
-
- 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: 从函数分组插件中添加分组
+ FunctionConstants.addFunctionGroupFromPlugins(functionTypeListModel);
+ }
+
+ private void initFunctionNameListCellRenderer(){
+ functionNameList.setCellRenderer(new DefaultListCellRenderer() {
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
@@ -625,8 +633,10 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{
return this;
}
});
-
- functionNameList.addListSelectionListener(new ListSelectionListener() {
+ }
+
+ private void initFunctionNameListSelectionListener(){
+ functionNameList.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent evt) {
Object selectedValue = functionNameList.getSelectedValue();
@@ -640,11 +650,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)) {
@@ -654,7 +664,6 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{
applyText(insert);
}
-
if (SwingUtilities.isRightMouseButton(evt)) {
JPopupMenu popupMenu = new JPopupMenu();
LookDetailAction lookDetailAction = new LookDetailAction();
@@ -665,24 +674,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-Designer_FormulaPane_Formula_Description") + ":", desScrollPane), BorderLayout.EAST);
descriptionTextArea.setBackground(new Color(255, 255, 225));
descriptionTextArea.setLineWrap(true);
descriptionTextArea.setWrapStyleWord(true);
@@ -696,19 +709,41 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{
}
});
- variablesTree.addTreeSelectionListener(new TreeSelectionListener() {
-
- public void valueChanged(TreeSelectionEvent e) {
- 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/";
@@ -716,43 +751,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-Designer_FormulaPane_Variables") + ":", variablesTreePane), BorderLayout.CENTER);
+ variablesTree.setRootVisible(false);
+ variablesTree.setShowsRootHandles(true);
+ variablesTree.addMouseListener(applyTextMouseListener);
+ variablesTree.setCellRenderer(applyTreeCellRenderer);
+
+ initDescriptionTextArea();
+
+ initVariablesTreeSelectionListener();
+ }
+
+ private void initComponents() {
+ this.setLayout(new BorderLayout(4, 4));
+ // Function
+ JPanel functionPane = new JPanel(new BorderLayout(4, 4));
+ this.add(functionPane, BorderLayout.WEST);
+ initFunctionTypeList(functionPane);
+ initFunctionNameList(functionPane);
+ initVariablesTree();
// 选择:
functionTypeList.setSelectedIndex(0);
}
@@ -763,7 +797,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-Designer_FormulaPane_Function_Detail"));
this.setMnemonic('L');
this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_file/preview.png"));
}
@@ -778,7 +812,7 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{
BasicPane basicPane = new BasicPane() {
@Override
protected String title4PopupWindow() {
- return Inter.getLocText("Function_Detail");
+ return Inter.getLocText("FR-Designer_FormulaPane_Function_Detail");
}
};
basicPane.setLayout(FRGUIPaneFactory.createBorderLayout());
@@ -855,7 +889,7 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{
return this;
}
};
-
+
public void populate(VariableResolver variableResolver) {
// varibale tree.
DefaultTreeModel variableModel = (DefaultTreeModel) variablesTree.getModel();
@@ -868,53 +902,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-Designer_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);
@@ -993,6 +1003,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 cfb983dd7..8a0675897 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.FunctionDefContainer;
+import com.fr.stable.fun.mark.Mutable;
import com.fr.stable.script.Function;
import com.fr.stable.script.FunctionDef;
@@ -23,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() {
@@ -96,7 +139,13 @@ public abstract class FunctionConstants {
}
Collections.addAll(all, PLUGIN.getDescriptions());
Collections.addAll(all, CUSTOM.getDescriptions());
-
+ //hugh:自定义函数分组
+ 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);
return all.toArray(new NameAndDescription[all.size()]);
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/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;
/**
* 数据连接弹出菜单的名字
diff --git a/designer_base/src/com/fr/design/fun/ExtraButtonToolBarProvider.java b/designer_base/src/com/fr/design/fun/ExtraButtonToolBarProvider.java
new file mode 100644
index 000000000..09bff1f1a
--- /dev/null
+++ b/designer_base/src/com/fr/design/fun/ExtraButtonToolBarProvider.java
@@ -0,0 +1,41 @@
+package com.fr.design.fun;
+
+import com.fr.form.ui.Widget;
+import com.fr.stable.fun.mark.Mutable;
+
+import javax.swing.*;
+import java.awt.*;
+
+/**
+ * 报表工具栏设计器端拓展,用于配置按钮额外属性
+ * Created by harry on 2016-12-23.
+ */
+public interface ExtraButtonToolBarProvider extends Mutable {
+
+ String XML_TAG = "ExtraButtonToolBarProvider";
+
+ int CURRENT_LEVEL = 1;
+
+ /**
+ * 用于添加属性面板
+ *
+ * @param centerPane 面板
+ */
+ void updateCenterPane(JPanel centerPane);
+
+ /**
+ * 更新界面
+ *
+ * @param widget 控件
+ * @param card 卡片布局
+ * @param centerPane 面板
+ */
+ void populate(Widget widget, CardLayout card, JPanel centerPane);
+
+ /**
+ * 保存界面设置
+ *
+ * @param widget 控件
+ */
+ void update(Widget widget);
+}
diff --git a/designer_base/src/com/fr/design/fun/impl/AbstractExtraButtonToolBarProvider.java b/designer_base/src/com/fr/design/fun/impl/AbstractExtraButtonToolBarProvider.java
new file mode 100644
index 000000000..064d72d1c
--- /dev/null
+++ b/designer_base/src/com/fr/design/fun/impl/AbstractExtraButtonToolBarProvider.java
@@ -0,0 +1,19 @@
+package com.fr.design.fun.impl;
+
+import com.fr.design.fun.ExtraButtonToolBarProvider;
+import com.fr.stable.fun.impl.AbstractProvider;
+import com.fr.stable.fun.mark.API;
+
+/**
+ * Created by harry on 2016-12-23.
+ */
+@API(level = ExtraButtonToolBarProvider.CURRENT_LEVEL)
+public abstract class AbstractExtraButtonToolBarProvider extends AbstractProvider implements ExtraButtonToolBarProvider {
+ public int currentAPILevel() {
+ return ExtraButtonToolBarProvider.CURRENT_LEVEL;
+ }
+
+ public String mark4Provider() {
+ return getClass().getName();
+ }
+}
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;
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..350b99ead 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,14 @@ public class UIComboBox extends JComboBox implements UIObserver, GlobalNameObser
uiObserverListener = listener;
}
+ public void removeChangeListener(){
+ uiObserverListener = null;
+ }
+
+ public UIObserverListener getUiObserverListener(){
+ return uiObserverListener;
+ }
+
/**
* @return
*/
diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties
index d3dc874dd..fa84ee8d9 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,13 +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-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 878814518..e409147ef 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,13 +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-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_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 43131c114..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,13 +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
-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 494e6fb30..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,13 +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
-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_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/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);
}
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_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
};
}
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..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.*;
/**
* 取色框
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;
}
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());
}
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/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() {
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
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/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());
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());
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..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,8 @@ public class ChartTextAttrPane extends BasicPane {
}
public void populate(FRFont frFont) {
+ UIObserverListener listener = fontNameComboBox == null ? null : fontNameComboBox.getUiObserverListener();
+ removeAllComboBoxListener();
if (frFont == null) {
return;
}
@@ -83,6 +86,19 @@ public class ChartTextAttrPane extends BasicPane {
if (fontColor != null) {
fontColor.setColor(frFont.getForeground());
}
+
+ //更新结束后,注册监听器
+ registerAllComboBoxListener(listener);
+ }
+
+ private void removeAllComboBoxListener() {
+ fontNameComboBox.removeChangeListener();
+ fontSizeComboBox.removeChangeListener();
+ }
+
+ private void registerAllComboBoxListener(UIObserverListener listener) {
+ fontNameComboBox.registerChangeListener(listener);
+ fontSizeComboBox.registerChangeListener(listener);
}
/**
diff --git a/designer_form/src/com/fr/design/mainframe/FormParaWidgetPane.java b/designer_form/src/com/fr/design/mainframe/FormParaWidgetPane.java
index cb111bb92..6187bbd48 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;
@@ -46,49 +45,49 @@ 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;
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 < COMMON_CHAR_NUM; i++) {
+ chartTypePane.add(new ToolBarButton(loadChartOptions()[i]));
}
add(createChartCombinationPane(chartTypePane, Inter.getLocText("FR-Designer-Form-ToolBar_Chart")));
jSeparatorChart = createJSeparator();
@@ -123,115 +122,113 @@ 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) {
- JPanel componentsPara = new JPanel(new FlowLayout(FlowLayout.LEFT));
- WidgetOption[] chartOptions = loadChartOptions();
- 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);
- 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);
}
});
- 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 +236,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 +265,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 +332,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 +345,9 @@ public class FormParaWidgetPane extends JPanel{
}
/**
- * 响应界面改变事件
- * @param evt 事件
+ * 响应界面改变事件
+ *
+ * @param evt 事件
*/
public void fireCreatorModified(DesignerEvent evt) {
button.setEnabled(designer.getParaComponent() == null);
@@ -356,14 +355,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 +374,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 +393,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 +404,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 +416,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;
}