Browse Source

Merge branch 'release/9.0' of http://cloud.finedevelop.com:2015/scm/ba/design into release/9.0

master
daniel 7 years ago
parent
commit
edcd65ecaf
  1. 6
      designer/src/com/fr/design/mainframe/ElementCasePaneDelegate.java
  2. 59
      designer/src/com/fr/design/mainframe/bbs/UserInfoLabel.java
  3. 4
      designer/src/com/fr/design/mainframe/bbs/bbs.properties
  4. 14
      designer/src/com/fr/design/mainframe/errorinfo/ErrorInfoUploader.java
  5. 21
      designer/src/com/fr/design/report/mobile/AppFitPreviewPane.java
  6. 9
      designer/src/com/fr/design/widget/ui/DateEditorDefinePane.java
  7. 5
      designer/src/com/fr/design/widget/ui/btn/DefineAppendColumnRowPane.java
  8. 1
      designer/src/com/fr/design/widget/ui/btn/DefineDeleteColumnRowPane.java
  9. 9
      designer/src/com/fr/poly/creator/ECBlockEditor.java
  10. 42
      designer/src/com/fr/start/Designer.java
  11. 14
      designer_base/src/com/fr/design/constants/UIConstants.java
  12. 15
      designer_base/src/com/fr/design/extra/LoginWebBridge.java
  13. 21
      designer_base/src/com/fr/design/extra/PluginWebBridge.java
  14. 6
      designer_base/src/com/fr/design/extra/ShopManagerPane.java
  15. 60
      designer_base/src/com/fr/design/extra/WebViewDlgHelper.java
  16. 8
      designer_base/src/com/fr/design/gui/controlpane/UIControlPane.java
  17. 52
      designer_base/src/com/fr/design/gui/date/UICalendarPanel.java
  18. 11
      designer_base/src/com/fr/design/gui/icombobox/TextFontComboBox.java
  19. 11
      designer_base/src/com/fr/design/gui/style/FRFontPane.java
  20. 47
      designer_base/src/com/fr/design/locale/designer_en_US.properties
  21. 251
      designer_base/src/com/fr/design/locale/designer_zh_TW.properties
  22. 6
      designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java
  23. 178
      designer_base/src/com/fr/design/utils/concurrent/ThreadFactoryBuilder.java
  24. 19
      designer_base/src/com/fr/design/widget/WidgetBoundsPaneFactory.java
  25. 141
      designer_base/src/com/fr/design/write/submit/CustomJobPane.java
  26. 4
      designer_base/src/com/fr/env/RemoteEnv.java
  27. 2
      designer_chart/src/com/fr/plugin/chart/designer/component/format/VanChartFormatPaneWithCheckBox.java
  28. 2
      designer_chart/src/com/fr/plugin/chart/map/designer/type/VanChartMapSourceChoosePane.java
  29. 8
      designer_form/src/com/fr/design/designer/creator/XCheckBox.java
  30. 6
      designer_form/src/com/fr/design/designer/properties/FRAbsoluteBodyLayoutPropertiesGroupModel.java
  31. 1
      designer_form/src/com/fr/design/designer/properties/FRFitLayoutPropertiesGroupModel.java
  32. 27
      designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java
  33. 29
      designer_form/src/com/fr/design/mainframe/widget/ui/FormWidgetCardPane.java
  34. 8
      designer_form/src/com/fr/design/widget/ui/designer/DateEditorDefinePane.java
  35. 2
      designer_form/src/com/fr/design/widget/ui/designer/LabelDefinePane.java
  36. 44
      designer_form/src/com/fr/design/widget/ui/designer/component/PaddingBoundPane.java

6
designer/src/com/fr/design/mainframe/ElementCasePaneDelegate.java

@ -188,12 +188,12 @@ public class ElementCasePaneDelegate extends ElementCasePane<WorkSheet> {
MenuDef menuDef = new MenuDef(KeySetUtils.CELL.getMenuKeySetName(), KeySetUtils.CELL.getMnemonic()); MenuDef menuDef = new MenuDef(KeySetUtils.CELL.getMenuKeySetName(), KeySetUtils.CELL.getMnemonic());
menuDef.addShortCut(new CellExpandAttrAction()); menuDef.addShortCut(new CellExpandAttrAction());
menuDef.addShortCut(new CellWidgetAttrAction());
menuDef.addShortCut(new GlobalStyleMenuDef(this)); menuDef.addShortCut(new GlobalStyleMenuDef(this));
menuDef.addShortCut(new ConditionAttributesAction());
// 单元格形态 // 单元格形态
menuDef.addShortCut(DeprecatedActionManager.getPresentMenu(this)); menuDef.addShortCut(DeprecatedActionManager.getPresentMenu(this));
menuDef.addShortCut(new CellWidgetAttrAction());
menuDef.addShortCut(new ConditionAttributesAction());
menuDef.addShortCut(new HyperlinkAction()); menuDef.addShortCut(new HyperlinkAction());
menuDef.addShortCut(SeparatorDef.DEFAULT); menuDef.addShortCut(SeparatorDef.DEFAULT);
menuDef.addShortCut(new MergeCellAction(this)); menuDef.addShortCut(new MergeCellAction(this));

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

@ -7,28 +7,44 @@ import com.fr.base.ConfigManager;
import com.fr.base.FRContext; import com.fr.base.FRContext;
import com.fr.design.DesignerEnvManager; import com.fr.design.DesignerEnvManager;
import com.fr.design.bbs.BBSLoginUtils; import com.fr.design.bbs.BBSLoginUtils;
import com.fr.design.extra.*; import com.fr.design.extra.LoginContextListener;
import com.fr.design.extra.LoginWebBridge;
import com.fr.design.extra.PluginWebBridge;
import com.fr.design.extra.UserLoginContext;
import com.fr.design.extra.WebViewDlgHelper;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.imenu.UIMenuItem; import com.fr.design.gui.imenu.UIMenuItem;
import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.gui.imenu.UIPopupMenu;
import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.DesignerContext;
import com.fr.design.utils.concurrent.ThreadFactoryBuilder;
import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.general.ComparatorUtils; import com.fr.general.ComparatorUtils;
import com.fr.general.DateUtils; import com.fr.general.DateUtils;
import com.fr.general.Inter; import com.fr.general.Inter;
import com.fr.general.SiteCenter; import com.fr.general.SiteCenter;
import com.fr.general.http.HttpClient; import com.fr.general.http.HttpClient;
import com.fr.stable.*; import com.fr.stable.EncodeConstants;
import com.fr.stable.OperatingSystem;
import javax.swing.*; import com.fr.stable.StableUtils;
import java.awt.*; import com.fr.stable.StringUtils;
import javax.swing.SwingConstants;
import java.awt.Cursor;
import java.awt.Desktop;
import java.awt.Frame;
import java.awt.event.MouseAdapter; import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.net.URI; import java.net.URI;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/** /**
* @author neil * @author neil
@ -36,6 +52,7 @@ import java.util.Date;
*/ */
public class UserInfoLabel extends UILabel { public class UserInfoLabel extends UILabel {
private static final int VERSION_8 = 8;
//默认查询消息时间, 30s //默认查询消息时间, 30s
private static final long CHECK_MESSAGE_TIME = 30 * 1000L; private static final long CHECK_MESSAGE_TIME = 30 * 1000L;
//默认论坛检测到更新后的弹出延迟时间 //默认论坛检测到更新后的弹出延迟时间
@ -72,6 +89,10 @@ public class UserInfoLabel extends UILabel {
} }
public UserInfoLabel(UserInfoPane userInfoPane) { public UserInfoLabel(UserInfoPane userInfoPane) {
init(userInfoPane);
}
private void init(UserInfoPane userInfoPane) {
this.userInfoPane = userInfoPane; this.userInfoPane = userInfoPane;
String userName = ConfigManager.getProviderInstance().getBbsUsername(); String userName = ConfigManager.getProviderInstance().getBbsUsername();
@ -79,8 +100,10 @@ public class UserInfoLabel extends UILabel {
this.setHorizontalAlignment(SwingConstants.CENTER); this.setHorizontalAlignment(SwingConstants.CENTER);
this.setText(userName); this.setText(userName);
LoginWebBridge.getHelper().setUILabel(UserInfoLabel.this); if (StableUtils.getMajorJavaVersion() == VERSION_8) {
PluginWebBridge.getHelper().setUILabel(UserInfoLabel.this); LoginWebBridge.getHelper().setUILabel(UserInfoLabel.this);
PluginWebBridge.getHelper().setUILabel(UserInfoLabel.this);
}
UserLoginContext.addLoginContextListener(new LoginContextListener() { UserLoginContext.addLoginContextListener(new LoginContextListener() {
@Override @Override
@ -104,8 +127,13 @@ public class UserInfoLabel extends UILabel {
* showBBSDialog 弹出BBS资讯框 * showBBSDialog 弹出BBS资讯框
*/ */
public static void showBBSDialog() { public static void showBBSDialog() {
Thread showBBSThread = new Thread(new Runnable() { ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
.setNameFormat("bbs-dlg-thread-%s").build();
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
1, 1,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(1), namedThreadFactory);
threadPoolExecutor.execute(new Runnable() {
@Override @Override
public void run() { public void run() {
// vito:最新mac10.12和javafx弹出框初始化时会有大几率卡死在native方法,这里先屏蔽一下。 // vito:最新mac10.12和javafx弹出框初始化时会有大几率卡死在native方法,这里先屏蔽一下。
@ -127,18 +155,21 @@ public class UserInfoLabel extends UILabel {
return; return;
} }
String res = hc.getResponseText(); String res = hc.getResponseText();
if (res.indexOf(BBSConstants.UPDATE_KEY) == -1) { if (!res.contains(BBSConstants.UPDATE_KEY)) {
return; return;
} }
try { try {
BBSDialog bbsLabel = new BBSDialog(DesignerContext.getDesignerFrame()); Class<?> clazz = Class.forName("com.fr.design.mainframe.bbs.BBSDialog");
bbsLabel.showWindow(SiteCenter.getInstance().acquireUrlByKind("bbs.popup")); Constructor constructor = clazz.getConstructor(Frame.class);
Object instance = constructor.newInstance(DesignerContext.getDesignerFrame());
Method showWindow = clazz.getMethod("showWindow", String.class);
showWindow.invoke(instance, SiteCenter.getInstance().acquireUrlByKind("bbs.popup"));
DesignerEnvManager.getEnvManager().setLastShowBBSNewsTime(DateUtils.DATEFORMAT2.format(new Date())); DesignerEnvManager.getEnvManager().setLastShowBBSNewsTime(DateUtils.DATEFORMAT2.format(new Date()));
} catch (Throwable e) { } catch (Throwable ignored) {
// ignored
} }
} }
}); });
showBBSThread.start();
} }
private void sleep(long millis) { private void sleep(long millis) {

4
designer/src/com/fr/design/mainframe/bbs/bbs.properties

@ -4,8 +4,8 @@ COLLECT_URL=http://www.finereporthelp.com:8081/bbs/ReportServer?op=bbs&cmd=colle
DEFAULT_URL=http\://bbs.finereport.com/home.php?mod=space&do=notice DEFAULT_URL=http\://bbs.finereport.com/home.php?mod=space&do=notice
GET_MESSAGE_URL=http://feedback.finedevelop.com:3000/bbs/message/count GET_MESSAGE_URL=http://feedback.finedevelop.com:3000/bbs/message/count
GET_SIGN_INFO_URL=http\://bbs.finereport.com GET_SIGN_INFO_URL=http\://bbs.finereport.com
LLINK= http\://bbs.fanruan.com/home.php?mod=space&uid=66470&do=profile|http\://bbs.fanruan.com/home.php?mod=space&uid=67190&do=profile|http\://bbs.fanruan.com/home.php?mod=space&uid=65659&do=profile|http\://bbs.fanruan.com/home.php?mod=space&uid=60352&do=profile|http\://bbs.fanruan.com/home.php?mod=space&uid=78157&do=profile LINK=http\://bbs.fanruan.com/home.php?mod=space&uid=66470&do=profile|http\://bbs.fanruan.com/home.php?mod=space&uid=67190&do=profile|http\://bbs.fanruan.com/home.php?mod=space&uid=65659&do=profile|http\://bbs.fanruan.com/home.php?mod=space&uid=60352&do=profile|http\://bbs.fanruan.com/home.php?mod=space&uid=78157&do=profile
SHARE_URL=http\://bbs.finereport.com SHARE_URL=http\://bbs.finereport.com
UUSER=cherishdqy\uFF08\u9093\u79CB\u4E91\uFF09|yets11\uFF08\u9676\u5B5D\u6587\uFF09|\u661F\u75D5\uFF08\u71D5\u5B8F\u4F1F\uFF09|\u9759\u542C\u7985\u9E23\uFF08\u674E\u51A0\u519B\uFF09|yiyemeiying\uFF08\u5218\u4F73\uFF09 USER=cherishdqy\uFF08\u9093\u79CB\u4E91\uFF09|yets11\uFF08\u9676\u5B5D\u6587\uFF09|\u661F\u75D5\uFF08\u71D5\u5B8F\u4F1F\uFF09|\u9759\u542C\u7985\u9E23\uFF08\u674E\u51A0\u519B\uFF09|yiyemeiying\uFF08\u5218\u4F73\uFF09
VERIFY_URL=http://www.finereporthelp.com:8081/bbs/ReportServer?op=bbs&cmd=verify VERIFY_URL=http://www.finereporthelp.com:8081/bbs/ReportServer?op=bbs&cmd=verify
UPDATE_INFO_URL=http://bbs.finereport.com/source/plugin/infor/infor.html UPDATE_INFO_URL=http://bbs.finereport.com/source/plugin/infor/infor.html

14
designer/src/com/fr/design/mainframe/errorinfo/ErrorInfoUploader.java

@ -35,7 +35,6 @@ public class ErrorInfoUploader {
public static final String FOLDER_NAME = "errorInfo"; public static final String FOLDER_NAME = "errorInfo";
private static ErrorInfoUploader collector; private static ErrorInfoUploader collector;
private static boolean licSupport = true;
// 在一台不能上网的电脑里发现了10w个errorinfo... // 在一台不能上网的电脑里发现了10w个errorinfo...
private static final int MAX_ERROR_SIZE = 2000; private static final int MAX_ERROR_SIZE = 2000;
@ -52,16 +51,6 @@ public class ErrorInfoUploader {
} }
}); });
// 这个控制没啥意义, 主要在于宣传功能.
licSupport = VT4FR.AlphaFine.support();
FRCoreContext.listenerLicense(new LicenseListener() {
@Override
public void onChange() {
licSupport = VT4FR.AlphaFine.support();
}
});
} }
private ErrorInfoUploader() { private ErrorInfoUploader() {
@ -83,7 +72,8 @@ public class ErrorInfoUploader {
// 从云中心更新最新的解决方案文件 // 从云中心更新最新的解决方案文件
private void checkUpdateSolution(){ private void checkUpdateSolution(){
if (!licSupport) {
if (!VT4FR.AlphaFine.support()) {
return; return;
} }

21
designer/src/com/fr/design/report/mobile/AppFitPreviewPane.java

@ -1,5 +1,6 @@
package com.fr.design.report.mobile; package com.fr.design.report.mobile;
import com.fr.design.constants.UIConstants;
import com.fr.design.dialog.BasicPane; import com.fr.design.dialog.BasicPane;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.FRGUIPaneFactory;
@ -31,16 +32,16 @@ public class AppFitPreviewPane extends BasicPane{
} }
private void initCacheImage() { private void initCacheImage() {
cachedVerticalPreviewImage.add(new ImageIcon(IOUtils.readImage("/com/fr/design/images/dialog/appfit/V0.png"))); cachedVerticalPreviewImage.add(new ImageIcon(UIConstants.APPFIT_V0));
cachedVerticalPreviewImage.add(new ImageIcon(IOUtils.readImage("/com/fr/design/images/dialog/appfit/V1.png"))); cachedVerticalPreviewImage.add(new ImageIcon(UIConstants.APPFIT_V1));
cachedVerticalPreviewImage.add(new ImageIcon(IOUtils.readImage("/com/fr/design/images/dialog/appfit/V2.png"))); cachedVerticalPreviewImage.add(new ImageIcon(UIConstants.APPFIT_V2));
cachedVerticalPreviewImage.add(new ImageIcon(IOUtils.readImage("/com/fr/design/images/dialog/appfit/V3.png"))); cachedVerticalPreviewImage.add(new ImageIcon(UIConstants.APPFIT_V3));
cachedVerticalPreviewImage.add(new ImageIcon(IOUtils.readImage("/com/fr/design/images/dialog/appfit/V4.png"))); cachedVerticalPreviewImage.add(new ImageIcon(UIConstants.APPFIT_V4));
cachedHorizonPreviewImage.add(new ImageIcon(IOUtils.readImage("/com/fr/design/images/dialog/appfit/H0.png"))); cachedHorizonPreviewImage.add(new ImageIcon(UIConstants.APPFIT_H0));
cachedHorizonPreviewImage.add(new ImageIcon(IOUtils.readImage("/com/fr/design/images/dialog/appfit/H1.png"))); cachedHorizonPreviewImage.add(new ImageIcon(UIConstants.APPFIT_H1));
cachedHorizonPreviewImage.add(new ImageIcon(IOUtils.readImage("/com/fr/design/images/dialog/appfit/H2.png"))); cachedHorizonPreviewImage.add(new ImageIcon(UIConstants.APPFIT_H2));
cachedHorizonPreviewImage.add(new ImageIcon(IOUtils.readImage("/com/fr/design/images/dialog/appfit/H3.png"))); cachedHorizonPreviewImage.add(new ImageIcon(UIConstants.APPFIT_H3));
cachedHorizonPreviewImage.add(new ImageIcon(IOUtils.readImage("/com/fr/design/images/dialog/appfit/H4.png"))); cachedHorizonPreviewImage.add(new ImageIcon(UIConstants.APPFIT_H4));
} }
private void initComponents() { private void initComponents() {

9
designer/src/com/fr/design/widget/ui/DateEditorDefinePane.java

@ -2,6 +2,8 @@ package com.fr.design.widget.ui;
import com.fr.base.FRContext; import com.fr.base.FRContext;
import com.fr.data.core.FormatField; import com.fr.data.core.FormatField;
import com.fr.design.border.UIRoundedBorder;
import com.fr.design.constants.UIConstants;
import com.fr.design.designer.IntervalConstants; import com.fr.design.designer.IntervalConstants;
import com.fr.design.gui.ibutton.UIButtonGroup; import com.fr.design.gui.ibutton.UIButtonGroup;
import com.fr.design.gui.icombobox.UIComboBox; import com.fr.design.gui.icombobox.UIComboBox;
@ -16,6 +18,7 @@ import com.fr.general.Inter;
import com.fr.stable.ArrayUtils; import com.fr.stable.ArrayUtils;
import javax.swing.*; import javax.swing.*;
import javax.swing.border.TitledBorder;
import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener; import javax.swing.event.ChangeListener;
import java.awt.*; import java.awt.*;
@ -78,8 +81,10 @@ public class DateEditorDefinePane extends DirectWriteEditorDefinePane<DateEditor
} }
private JPanel createFormatPane(UIComboBox formatComboBox, UILabel sampleLabel){ private JPanel createFormatPane(UIComboBox formatComboBox, UILabel sampleLabel){
JPanel previewPane = FRGUIPaneFactory.createTitledBorderPane(Inter.getLocText("FR-Base_StyleFormat_Sample"));
previewPane.setLayout(new BorderLayout()); JPanel previewPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
TitledBorder titledBorder = new TitledBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, 5), Inter.getLocText("FR-Base_StyleFormat_Sample"), 4, 2, this.getFont(), UIConstants.LINE_COLOR);
previewPane.setBorder(titledBorder);
JPanel sampleLabelWrapper = new JPanel(new BorderLayout()); JPanel sampleLabelWrapper = new JPanel(new BorderLayout());
sampleLabelWrapper.setBorder(BorderFactory.createEmptyBorder(0, SAMPLE_LABEL_PADDING, SAMPLE_LABEL_PADDING, SAMPLE_LABEL_PADDING)); sampleLabelWrapper.setBorder(BorderFactory.createEmptyBorder(0, SAMPLE_LABEL_PADDING, SAMPLE_LABEL_PADDING, SAMPLE_LABEL_PADDING));

5
designer/src/com/fr/design/widget/ui/btn/DefineAppendColumnRowPane.java

@ -1,5 +1,6 @@
package com.fr.design.widget.ui.btn; package com.fr.design.widget.ui.btn;
import java.awt.Color;
import java.awt.Component; import java.awt.Component;
import javax.swing.BorderFactory; import javax.swing.BorderFactory;
@ -43,7 +44,9 @@ public class DefineAppendColumnRowPane extends BasicPane {
rowCountLable = new UILabel(Inter.getLocText("Edit-Row_Count")); rowCountLable = new UILabel(Inter.getLocText("Edit-Row_Count"));
JPanel lpane = FRGUIPaneFactory.createBorderLayout_S_Pane(); JPanel lpane = FRGUIPaneFactory.createBorderLayout_S_Pane();
lpane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); lpane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
lpane.add(new UILabel(Inter.getLocText("Append_Delete_Row_Message"))); UILabel label = new UILabel(Inter.getLocText("Append_Delete_Row_Message"));
label.setForeground(new Color(0x8F8F92));
lpane.add(label);
Component[][] components = { { new UILabel(Inter.getLocText(new String[]{"Specify", "Cell"})), crEditor }, { rowCountLable, jNumberEditor } ,{lpane,null}}; Component[][] components = { { new UILabel(Inter.getLocText(new String[]{"Specify", "Cell"})), crEditor }, { rowCountLable, jNumberEditor } ,{lpane,null}};
JPanel contentPane = TableLayoutHelper.createGapTableLayoutPane(components, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L2, IntervalConstants.INTERVAL_L1); JPanel contentPane = TableLayoutHelper.createGapTableLayoutPane(components, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L2, IntervalConstants.INTERVAL_L1);
contentPane.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0)); contentPane.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0));

1
designer/src/com/fr/design/widget/ui/btn/DefineDeleteColumnRowPane.java

@ -36,6 +36,7 @@ public class DefineDeleteColumnRowPane extends BasicPane {
double columnSize[] = { p, f}; double columnSize[] = { p, f};
crEditor = new ColumnRowEditor(); crEditor = new ColumnRowEditor();
UILabel messageLabel = new UILabel(Inter.getLocText("Append_Delete_Row_Message")); UILabel messageLabel = new UILabel(Inter.getLocText("Append_Delete_Row_Message"));
messageLabel.setForeground(new Color(0x8F8F92));
Component[][] components = { Component[][] components = {
{ new UILabel(Inter.getLocText(new String[]{"Specify", "Cell"})), crEditor }, { new UILabel(Inter.getLocText(new String[]{"Specify", "Cell"})), crEditor },
{ messageLabel, null}}; { messageLabel, null}};

9
designer/src/com/fr/poly/creator/ECBlockEditor.java

@ -161,19 +161,18 @@ public class ECBlockEditor extends BlockEditor<ECBlockPane, PolyECBlock> {
EastRegionContainerPane.getInstance().replaceCellAttrPane(CellElementPropertyPane.getInstance()); EastRegionContainerPane.getInstance().replaceCellAttrPane(CellElementPropertyPane.getInstance());
EastRegionContainerPane.getInstance().replaceCellElementPane(QuickEditorRegion.getInstance()); EastRegionContainerPane.getInstance().replaceCellElementPane(QuickEditorRegion.getInstance());
EastRegionContainerPane.getInstance().replaceWidgetSettingsPane(CellWidgetPropertyPane.getInstance()); EastRegionContainerPane.getInstance().replaceWidgetSettingsPane(CellWidgetPropertyPane.getInstance());
// 条件属性
ConditionAttributesGroupPane conditionAttributesGroupPane = ConditionAttributesGroupPane.getInstance();
conditionAttributesGroupPane.populate(editComponent);
EastRegionContainerPane.getInstance().updateCellElementState(isSelectedOneCell()); EastRegionContainerPane.getInstance().updateCellElementState(isSelectedOneCell());
}
EastRegionContainerPane.getInstance().replaceCellAttrPane(CellElementPropertyPane.getInstance()); }
// 超级链接 // 超级链接
HyperlinkGroupPane hyperlinkGroupPane = DesignerContext.getDesignerFrame().getSelectedJTemplate() HyperlinkGroupPane hyperlinkGroupPane = DesignerContext.getDesignerFrame().getSelectedJTemplate()
.getHyperLinkPane(HyperlinkGroupPaneActionImpl.getInstance()); .getHyperLinkPane(HyperlinkGroupPaneActionImpl.getInstance());
hyperlinkGroupPane.populate(editComponent); hyperlinkGroupPane.populate(editComponent);
// 条件属性
ConditionAttributesGroupPane conditionAttributesGroupPane = ConditionAttributesGroupPane.getInstance();
conditionAttributesGroupPane.populate(editComponent);
} }
private boolean isSelectedOneCell() { private boolean isSelectedOneCell() {

42
designer/src/com/fr/start/Designer.java

@ -20,7 +20,12 @@ import com.fr.design.gui.ibutton.UIPreviewButton;
import com.fr.design.gui.imenu.UIMenuItem; import com.fr.design.gui.imenu.UIMenuItem;
import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.gui.imenu.UIPopupMenu;
import com.fr.design.gui.itoolbar.UILargeToolbar; import com.fr.design.gui.itoolbar.UILargeToolbar;
import com.fr.design.mainframe.*; import com.fr.design.mainframe.ActiveKeyGenerator;
import com.fr.design.mainframe.BaseJForm;
import com.fr.design.mainframe.DesignerContext;
import com.fr.design.mainframe.InformationCollector;
import com.fr.design.mainframe.JTemplate;
import com.fr.design.mainframe.JWorkBook;
import com.fr.design.mainframe.alphafine.component.AlphaFinePane; import com.fr.design.mainframe.alphafine.component.AlphaFinePane;
import com.fr.design.mainframe.bbs.UserInfoLabel; import com.fr.design.mainframe.bbs.UserInfoLabel;
import com.fr.design.mainframe.bbs.UserInfoPane; import com.fr.design.mainframe.bbs.UserInfoPane;
@ -31,22 +36,30 @@ import com.fr.design.menu.SeparatorDef;
import com.fr.design.menu.ShortCut; import com.fr.design.menu.ShortCut;
import com.fr.design.module.DesignModuleFactory; import com.fr.design.module.DesignModuleFactory;
import com.fr.design.module.DesignerModule; import com.fr.design.module.DesignerModule;
import com.fr.design.utils.concurrent.ThreadFactoryBuilder;
import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.general.ComparatorUtils; import com.fr.general.ComparatorUtils;
import com.fr.general.Inter; import com.fr.general.Inter;
import com.fr.stable.ProductConstants; import com.fr.stable.ProductConstants;
import com.fr.stable.StableUtils; import com.fr.stable.StableUtils;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
import com.fr.stable.web.ServletContext;
import com.fr.stable.xml.XMLTools; import com.fr.stable.xml.XMLTools;
import javax.swing.*; import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.border.MatteBorder; import javax.swing.border.MatteBorder;
import java.awt.*; import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.io.File; import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class Designer extends BaseDesigner { public class Designer extends BaseDesigner {
private static final int TOOLBARPANEVGAP = -4; private static final int TOOLBARPANEVGAP = -4;
@ -147,6 +160,7 @@ public class Designer extends BaseDesigner {
private JPanel generateEmptyGap(final int width) { private JPanel generateEmptyGap(final int width) {
JPanel panel = new JPanel() { JPanel panel = new JPanel() {
@Override
public Dimension getPreferredSize() { public Dimension getPreferredSize() {
Dimension dim = super.getPreferredSize(); Dimension dim = super.getPreferredSize();
dim.width = width; dim.width = width;
@ -163,6 +177,7 @@ public class Designer extends BaseDesigner {
* *
* @return 按钮 * @return 按钮
*/ */
@Override
public UIButton[] createUp() { public UIButton[] createUp() {
return new UIButton[]{createSaveButton(), createUndoButton(), createRedoButton()}; return new UIButton[]{createSaveButton(), createUndoButton(), createRedoButton()};
} }
@ -218,10 +233,12 @@ public class Designer extends BaseDesigner {
private void createRunButton(UILargeToolbar largeToolbar) { private void createRunButton(UILargeToolbar largeToolbar) {
run = new UIPreviewButton(new UIButton(UIConstants.PAGE_BIG_ICON) { run = new UIPreviewButton(new UIButton(UIConstants.PAGE_BIG_ICON) {
@Override
public Dimension getPreferredSize() { public Dimension getPreferredSize() {
return new Dimension(34, 34); return new Dimension(34, 34);
} }
}, new UIButton(UIConstants.PREVIEW_DOWN) { }, new UIButton(UIConstants.PREVIEW_DOWN) {
@Override
public Dimension getPreferredSize() { public Dimension getPreferredSize() {
return new Dimension(34, 10); return new Dimension(34, 10);
} }
@ -296,6 +313,7 @@ public class Designer extends BaseDesigner {
* @param plus 对象 * @param plus 对象
* @return 更新后的toolbar * @return 更新后的toolbar
*/ */
@Override
public JComponent resetToolBar(JComponent toolbarComponent, ToolBarMenuDockPlus plus) { public JComponent resetToolBar(JComponent toolbarComponent, ToolBarMenuDockPlus plus) {
//如果是处于权限编辑状态 //如果是处于权限编辑状态
if (BaseUtils.isAuthorityEditing()) { if (BaseUtils.isAuthorityEditing()) {
@ -339,6 +357,7 @@ public class Designer extends BaseDesigner {
* *
* @return 面板组件 * @return 面板组件
*/ */
@Override
public Component createBBSLoginPane() { public Component createBBSLoginPane() {
if (userInfoPane == null) { if (userInfoPane == null) {
userInfoPane = new UserInfoPane(); userInfoPane = new UserInfoPane();
@ -351,11 +370,13 @@ public class Designer extends BaseDesigner {
* *
* @return 面板组件 * @return 面板组件
*/ */
@Override
public Component createAlphaFinePane() { public Component createAlphaFinePane() {
return AlphaFinePane.getAlphaFinePane(); return AlphaFinePane.getAlphaFinePane();
} }
@Override
protected SplashPane createSplashPane() { protected SplashPane createSplashPane() {
return new ReportSplashPane(); return new ReportSplashPane();
} }
@ -363,6 +384,7 @@ public class Designer extends BaseDesigner {
/** /**
* 收集用户信息吗 * 收集用户信息吗
*/ */
@Override
protected void collectUserInformation() { protected void collectUserInformation() {
//定制的就不弹出来了 //定制的就不弹出来了
if (!ComparatorUtils.equals(ProductConstants.APP_NAME, ProductConstants.DEFAULT_APP_NAME)) { if (!ComparatorUtils.equals(ProductConstants.APP_NAME, ProductConstants.DEFAULT_APP_NAME)) {
@ -395,14 +417,19 @@ public class Designer extends BaseDesigner {
int status = envManager.getActiveKeyStatus(); int status = envManager.getActiveKeyStatus();
//没有联网验证过 //没有联网验证过
if (status != 0) { if (status != 0) {
Thread authThread = new Thread(new Runnable() { ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
.setNameFormat("net-verify-thread-%s").build();
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
1, 1,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(1),
namedThreadFactory);
threadPoolExecutor.execute(new Runnable() {
@Override @Override
public void run() { public void run() {
ActiveKeyGenerator.onLineVerify(key); ActiveKeyGenerator.onLineVerify(key);
} }
}); });
authThread.start();
} }
} }
@ -443,6 +470,7 @@ public class Designer extends BaseDesigner {
/** /**
* 设计器退出时, 做的一些操作. * 设计器退出时, 做的一些操作.
*/ */
@Override
public void shutDown() { public void shutDown() {
InformationCollector collector = InformationCollector.getInstance(); InformationCollector collector = InformationCollector.getInstance();
collector.collectStopTime(); collector.collectStopTime();

14
designer_base/src/com/fr/design/constants/UIConstants.java

@ -18,8 +18,19 @@ import java.awt.image.BufferedImage;
public interface UIConstants { public interface UIConstants {
public static final Icon CPT_ICON = BaseUtils.readIcon("/com/fr/base/images/oem/cpt.png"); public static final Icon CPT_ICON = BaseUtils.readIcon("/com/fr/base/images/oem/cpt.png");
public static final Icon BLACK_ICON = BaseUtils.readIcon("/com/fr/base/images/cell/blank.gif"); public static final Icon BLACK_ICON = BaseUtils.readIcon("/com/fr/base/images/cell/blank.gif");
public static final Image APPFIT_V0 = BaseUtils.readImage("/com/fr/design/images/dialog/appfit/V0.png");
public static final Image APPFIT_V1 = BaseUtils.readImage("/com/fr/design/images/dialog/appfit/V1.png");
public static final Image APPFIT_V2 = BaseUtils.readImage("/com/fr/design/images/dialog/appfit/V2.png");
public static final Image APPFIT_V3 = BaseUtils.readImage("/com/fr/design/images/dialog/appfit/V3.png");
public static final Image APPFIT_V4 = BaseUtils.readImage("/com/fr/design/images/dialog/appfit/V4.png");
public static final Image APPFIT_H0 = BaseUtils.readImage("/com/fr/design/images/dialog/appfit/H0.png");
public static final Image APPFIT_H1 = BaseUtils.readImage("/com/fr/design/images/dialog/appfit/H1.png");
public static final Image APPFIT_H2 = BaseUtils.readImage("/com/fr/design/images/dialog/appfit/H2.png");
public static final Image APPFIT_H3 = BaseUtils.readImage("/com/fr/design/images/dialog/appfit/H3.png");
public static final Image APPFIT_H4 = BaseUtils.readImage("/com/fr/design/images/dialog/appfit/H4.png");
public static final Border CELL_ATTR_ZEROBORDER = BorderFactory.createEmptyBorder(0, 0, 0, 0); public static final Border CELL_ATTR_ZEROBORDER = BorderFactory.createEmptyBorder(0, 0, 0, 0);
public static final Border CELL_ATTR_EMPTYBORDER = BorderFactory.createEmptyBorder(0, 10, 0, 0); public static final Border CELL_ATTR_EMPTYBORDER = BorderFactory.createEmptyBorder(0, 10, 0, 0);
public static final Border CELL_ATTR_PRESENTBORDER = BorderFactory.createEmptyBorder(0, 5, 0, 0); public static final Border CELL_ATTR_PRESENTBORDER = BorderFactory.createEmptyBorder(0, 5, 0, 0);
@ -98,6 +109,7 @@ public interface UIConstants {
public static final Color ATTRIBUTE_NORMAL = Color.WHITE; public static final Color ATTRIBUTE_NORMAL = Color.WHITE;
public static final Color ATTRIBUTE_HOVER = new Color(0xF5F5F7); public static final Color ATTRIBUTE_HOVER = new Color(0xF5F5F7);
public static final Color UI_TOOLBAR_COLOR = new Color(0xF5F5F7); public static final Color UI_TOOLBAR_COLOR = new Color(0xF5F5F7);
public static final Color DIALOG_TITLEBAR_BACKGROUND = new Color(0xFCFCFD);
public static final Color CHECKBOX_HOVER_SELECTED = new Color(0x3394f0); public static final Color CHECKBOX_HOVER_SELECTED = new Color(0x3394f0);
public static final Color TEXT_FILED_BORDER_SELECTED = new Color(0x3384f0); public static final Color TEXT_FILED_BORDER_SELECTED = new Color(0x3384f0);
public static final Color SHEET_NORMAL = new Color(0xc8c8ca); public static final Color SHEET_NORMAL = new Color(0xc8c8ca);

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

@ -8,6 +8,7 @@ import com.fr.design.extra.exe.PluginLoginExecutor;
import com.fr.design.extra.ucenter.Client; import com.fr.design.extra.ucenter.Client;
import com.fr.design.extra.ucenter.XMLHelper; import com.fr.design.extra.ucenter.XMLHelper;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
import com.fr.general.ComparatorUtils;
import com.fr.general.SiteCenter; import com.fr.general.SiteCenter;
import com.fr.general.http.HttpClient; import com.fr.general.http.HttpClient;
import com.fr.json.JSONObject; import com.fr.json.JSONObject;
@ -63,7 +64,7 @@ public class LoginWebBridge {
private UILabel uiLabel; private UILabel uiLabel;
private WebEngine webEngine; private WebEngine webEngine;
public LoginWebBridge() { private LoginWebBridge() {
} }
public static LoginWebBridge getHelper() { public static LoginWebBridge getHelper() {
@ -92,7 +93,7 @@ public class LoginWebBridge {
return messageCount; return messageCount;
} }
public void setQqDialog(UIDialog qqDialog) { public void setQQDialog(UIDialog qqDialog) {
closeQQWindow(); closeQQWindow();
this.qqDialog = qqDialog; this.qqDialog = qqDialog;
} }
@ -282,9 +283,9 @@ public class LoginWebBridge {
try { try {
JSONObject jo = new JSONObject(userInfo); JSONObject jo = new JSONObject(userInfo);
String status = jo.get("status").toString(); String status = jo.get("status").toString();
if (status.equals(LOGIN_SUCCESS)) { if (ComparatorUtils.equals(status, LOGIN_SUCCESS)) {
String username = jo.get("username").toString(); String username = jo.get("username").toString();
int uid = Integer.parseInt(jo.get("uid") == null ? "" : jo.get("uid").toString()); int uid = Integer.parseInt(jo.get("uid") == null ? StringUtils.EMPTY : jo.get("uid").toString());
closeQQWindow(); closeQQWindow();
loginSuccess(username); loginSuccess(username);
@ -293,18 +294,18 @@ public class LoginWebBridge {
list.add(username); list.add(username);
list.add(StringUtils.EMPTY); list.add(StringUtils.EMPTY);
BBSLoginUtils.bbsLogin(list); BBSLoginUtils.bbsLogin(list);
} else if (status.equals(LOGIN_FAILED)) { } else if (ComparatorUtils.equals(status, LOGIN_FAILED)) {
//账号没有QQ授权 //账号没有QQ授权
closeQQWindow(); closeQQWindow();
try { try {
Desktop.getDesktop().browse(new URI(SiteCenter.getInstance().acquireUrlByKind("QQ_binding"))); Desktop.getDesktop().browse(new URI(SiteCenter.getInstance().acquireUrlByKind("QQ_binding")));
} catch (Exception exp) { } catch (Exception ignored) {
// ignored
} }
} }
} catch (Exception e) { } catch (Exception e) {
FRContext.getLogger().error(e.getMessage()); FRContext.getLogger().error(e.getMessage());
} }
} }
public void openUrlAtLocalWebBrowser(WebEngine eng, String url) { public void openUrlAtLocalWebBrowser(WebEngine eng, String url) {

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

@ -7,12 +7,13 @@ import com.fr.design.bbs.BBSLoginUtils;
import com.fr.design.dialog.UIDialog; import com.fr.design.dialog.UIDialog;
import com.fr.design.extra.exe.GetPluginCategoriesExecutor; import com.fr.design.extra.exe.GetPluginCategoriesExecutor;
import com.fr.design.extra.exe.GetPluginFromStoreExecutor; import com.fr.design.extra.exe.GetPluginFromStoreExecutor;
import com.fr.design.extra.exe.GetPluginPrefixExecutor;
import com.fr.design.extra.exe.PluginLoginExecutor; import com.fr.design.extra.exe.PluginLoginExecutor;
import com.fr.design.extra.exe.ReadUpdateOnlineExecutor; import com.fr.design.extra.exe.ReadUpdateOnlineExecutor;
import com.fr.design.extra.exe.SearchOnlineExecutor; import com.fr.design.extra.exe.SearchOnlineExecutor;
import com.fr.design.extra.exe.callback.JSCallback; import com.fr.design.extra.exe.callback.JSCallback;
import com.fr.design.extra.exe.GetPluginPrefixExecutor;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
import com.fr.design.utils.concurrent.ThreadFactoryBuilder;
import com.fr.general.FRLogger; import com.fr.general.FRLogger;
import com.fr.general.Inter; import com.fr.general.Inter;
import com.fr.general.SiteCenter; import com.fr.general.SiteCenter;
@ -28,6 +29,7 @@ import javafx.scene.web.WebEngine;
import javafx.stage.FileChooser; import javafx.stage.FileChooser;
import javafx.stage.Stage; import javafx.stage.Stage;
import netscape.javascript.JSObject; import netscape.javascript.JSObject;
import javax.swing.JDialog; import javax.swing.JDialog;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
import javax.swing.SwingUtilities; import javax.swing.SwingUtilities;
@ -41,25 +43,34 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/** /**
* 开放给Web组件的接口,用于安装,卸载,更新以及更改插件可用状态 * 开放给Web组件的接口,用于安装,卸载,更新以及更改插件可用状态
*/ */
public class PluginWebBridge { public class PluginWebBridge {
private static final String THREAD_NAME_TEMPLATE = "pluginbridge-thread-%s";
private static final String ACTION = "action";
private static final String KEYWORD = "keyword";
private static final int COREPOOLSIZE = 3;
private static final int MAXPOOLSIZE = 5;
private static PluginWebBridge helper; private static PluginWebBridge helper;
private UIDialog uiDialog; private UIDialog uiDialog;
private ACTIONS action; private ACTIONS action;
private String ACTION = "action";
private String KEYWORD = "keyword";
private Map<String, Object> config; private Map<String, Object> config;
private WebEngine webEngine; private WebEngine webEngine;
private UILabel uiLabel; private UILabel uiLabel;
private ExecutorService threadPoolExecutor = Executors.newSingleThreadExecutor(); private ExecutorService threadPoolExecutor = new ThreadPoolExecutor(COREPOOLSIZE, MAXPOOLSIZE,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(COREPOOLSIZE),
new ThreadFactoryBuilder().setNameFormat(THREAD_NAME_TEMPLATE).build());
/** /**
* 动作枚举 * 动作枚举

6
designer_base/src/com/fr/design/extra/ShopManagerPane.java

@ -2,9 +2,9 @@ package com.fr.design.extra;
import com.fr.design.dialog.BasicPane; import com.fr.design.dialog.BasicPane;
import com.fr.general.Inter; import com.fr.general.Inter;
import javafx.embed.swing.JFXPanel;
import java.awt.*; import java.awt.BorderLayout;
import java.awt.Component;
/** /**
* @author richie * @author richie
@ -19,7 +19,7 @@ import java.awt.*;
*/ */
public class ShopManagerPane extends BasicPane { public class ShopManagerPane extends BasicPane {
public ShopManagerPane(JFXPanel webPane) { public ShopManagerPane(Component webPane) {
setLayout(new BorderLayout()); setLayout(new BorderLayout());
add(webPane, BorderLayout.CENTER); add(webPane, BorderLayout.CENTER);
} }

60
designer_base/src/com/fr/design/extra/WebViewDlgHelper.java

@ -17,23 +17,28 @@ import com.fr.plugin.PluginVerifyException;
import com.fr.stable.EnvChangedListener; import com.fr.stable.EnvChangedListener;
import com.fr.stable.StableUtils; import com.fr.stable.StableUtils;
import javax.swing.*; import javax.swing.JOptionPane;
import java.awt.*; import javax.swing.SwingWorker;
import java.awt.BorderLayout;
import java.awt.Component;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.InputStream; import java.io.InputStream;
import java.lang.reflect.Constructor;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
/** /**
* Created by vito on 2016/9/28. * 在合适的 jre 环境下创建带有 WebView 的窗口
*
* @author vito
* @date 2016/9/28
*/ */
public class WebViewDlgHelper { public class WebViewDlgHelper {
private static final String LATEST = "latest"; private static final String LATEST = "latest";
private static final String SHOP_SCRIPTS = "shop_scripts"; private static final String SHOP_SCRIPTS = "shop_scripts";
private static final int VERSION_8 = 8; private static final int VERSION_8 = 8;
// 调试时,使用installHome = ClassLoader.getSystemResource("").getPath()代替下面
private static String installHome = FRContext.getCurrentEnv().getWebReportPath(); private static String installHome = FRContext.getCurrentEnv().getWebReportPath();
private static final int BYTES_NUM = 1024; private static final int BYTES_NUM = 1024;
@ -146,24 +151,46 @@ public class WebViewDlgHelper {
} }
public static void createQQLoginDialog() { public static void createQQLoginDialog() {
QQLoginWebPane webPane = new QQLoginWebPane(new File(installHome).getAbsolutePath()); try {
UIDialog qqlog = new QQLoginDialog(DesignerContext.getDesignerFrame(), webPane); Class<?> clazz = Class.forName("com.fr.design.extra.QQLoginWebPane");
LoginWebBridge.getHelper().setQqDialog(qqlog); Constructor constructor = clazz.getConstructor(String.class);
qqlog.setVisible(true); Component webPane = (Component) constructor.newInstance(new File(installHome).getAbsolutePath());
UIDialog qqLoginDialog = new QQLoginDialog(DesignerContext.getDesignerFrame(), webPane);
LoginWebBridge.getHelper().setQQDialog(qqLoginDialog);
qqLoginDialog.setVisible(true);
} catch (Throwable ignored) {
// ignored
}
} }
private static void showPluginDlg(String mainJsPath) { private static void showPluginDlg(String mainJsPath) {
BasicPane managerPane = new ShopManagerPane(new PluginWebPane(mainJsPath)); try {
UIDialog dlg = new ShopDialog(DesignerContext.getDesignerFrame(), managerPane); Class<?> clazz = Class.forName("com.fr.design.extra.PluginWebPane");
PluginWebBridge.getHelper().setDialogHandle(dlg); Constructor constructor = clazz.getConstructor(String.class);
dlg.setVisible(true); Component webPane = (Component) constructor.newInstance(mainJsPath);
BasicPane managerPane = new ShopManagerPane(webPane);
UIDialog dlg = new ShopDialog(DesignerContext.getDesignerFrame(), managerPane);
PluginWebBridge.getHelper().setDialogHandle(dlg);
dlg.setVisible(true);
} catch (Throwable ignored) {
// ignored
}
} }
private static void showLoginDlg() { private static void showLoginDlg() {
LoginWebPane webPane = new LoginWebPane(installHome); try {
UIDialog qqdlg = new LoginDialog(DesignerContext.getDesignerFrame(), webPane); Class<?> clazz = Class.forName("com.fr.design.extra.LoginWebPane");
LoginWebBridge.getHelper().setDialogHandle(qqdlg); Constructor constructor = clazz.getConstructor(String.class);
qqdlg.setVisible(true); Component webPane = (Component) constructor.newInstance(installHome);
UIDialog qqdlg = new LoginDialog(DesignerContext.getDesignerFrame(), webPane);
LoginWebBridge.getHelper().setDialogHandle(qqdlg);
qqdlg.setVisible(true);
} catch (Throwable ignored) {
// ignored
}
} }
private static Component initTraditionalStore() { private static Component initTraditionalStore() {
@ -183,6 +210,7 @@ public class WebViewDlgHelper {
PluginUtils.downloadShopScripts(scriptsId, new Process<Double>() { PluginUtils.downloadShopScripts(scriptsId, new Process<Double>() {
@Override @Override
public void process(Double integer) { public void process(Double integer) {
// 这个注释毫无意义,就是为了通过SonarQube
} }
}); });
} catch (PluginVerifyException e) { } catch (PluginVerifyException e) {

8
designer_base/src/com/fr/design/gui/controlpane/UIControlPane.java

@ -443,14 +443,16 @@ public abstract class UIControlPane extends BasicPane implements UnrepeatedNameH
public PopupToolPane(String title, JDialog parentDialog) { public PopupToolPane(String title, JDialog parentDialog) {
super(); super();
this.parentDialog = parentDialog; this.parentDialog = parentDialog;
originColor = UIConstants.UI_TOOLBAR_COLOR; originColor = UIConstants.DIALOG_TITLEBAR_BACKGROUND;
contentPane = new JPanel(); contentPane = new JPanel();
contentPane.setBackground(originColor); contentPane.setBackground(originColor);
contentPane.setLayout(new BorderLayout()); contentPane.setLayout(new BorderLayout());
titleLabel = new UILabel(title); titleLabel = new UILabel(title);
Font font = new Font("SimSun", Font.PLAIN, 12);
titleLabel.setFont(font);
contentPane.add(titleLabel, BorderLayout.WEST); contentPane.add(titleLabel, BorderLayout.WEST);
contentPane.setBorder(new EmptyBorder(5, 10, 5, 0)); contentPane.setBorder(new EmptyBorder(5, 14, 6, 0));
setLayout(new BorderLayout()); setLayout(new BorderLayout());
add(contentPane, BorderLayout.CENTER); add(contentPane, BorderLayout.CENTER);
@ -466,7 +468,7 @@ public abstract class UIControlPane extends BasicPane implements UnrepeatedNameH
@Override @Override
public Dimension getPreferredSize() { public Dimension getPreferredSize() {
return new Dimension(super.getPreferredSize().width, 25); return new Dimension(super.getPreferredSize().width, 28);
} }
} }
} }

52
designer_base/src/com/fr/design/gui/date/UICalendarPanel.java

@ -1,30 +1,48 @@
package com.fr.design.gui.date; package com.fr.design.gui.date;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.RoundRectangle2D;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.swing.*;
import com.fr.base.BaseUtils; import com.fr.base.BaseUtils;
import com.fr.base.background.GradientBackground; import com.fr.base.background.GradientBackground;
import com.fr.design.constants.UIConstants; import com.fr.design.constants.UIConstants;
import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.EventListenerList;
import com.fr.design.gui.itextfield.UITextField; import com.fr.design.gui.itextfield.UITextField;
import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.utils.gui.GUIPaintUtils;
import com.fr.general.Inter; import com.fr.general.Inter;
import com.fr.stable.Constants; import com.fr.stable.Constants;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
import com.fr.design.utils.gui.GUIPaintUtils;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.Icon;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.EventListenerList;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.RoundRectangle2D;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class UICalendarPanel extends JPanel { public class UICalendarPanel extends JPanel {
private static final Font FONT_SONG = new Font(Inter.getLocText("Song_TypeFace"),0,12); private static final Font FONT_SONG = new Font(Inter.getLocText("Song_TypeFace"),0,12);
@ -60,6 +78,7 @@ public class UICalendarPanel extends JPanel {
} }
public UICalendarPanel(Date selectedDate, boolean isTimerPicker) { public UICalendarPanel(Date selectedDate, boolean isTimerPicker) {
this.selectedDate = selectedDate; this.selectedDate = selectedDate;
this.isTimePicker = isTimerPicker; this.isTimePicker = isTimerPicker;
calendar = Calendar.getInstance(); calendar = Calendar.getInstance();
@ -84,11 +103,8 @@ public class UICalendarPanel extends JPanel {
if (isTimerPicker) { if (isTimerPicker) {
setPreferredSize(new Dimension(218, 209)); setPreferredSize(new Dimension(218, 209));
add(BorderLayout.SOUTH, createSouthPane()); add(BorderLayout.SOUTH, createSouthPane());
updateDays();
updateHMS(); updateHMS();
} }
updateDays();
} }
// << < yyyy/MM/dd > >> // << < yyyy/MM/dd > >>

11
designer_base/src/com/fr/design/gui/icombobox/TextFontComboBox.java

@ -6,10 +6,10 @@ import com.fr.design.gui.icombobox.filter.StartsWithFilter;
import com.fr.design.gui.itextfield.UITextField; import com.fr.design.gui.itextfield.UITextField;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
import javax.swing.*; import javax.swing.ComboBoxEditor;
import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener; import javax.swing.event.DocumentListener;
import java.awt.*; import java.awt.Component;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -61,7 +61,12 @@ public class TextFontComboBox<T> extends ExtendedComboBox {
private volatile boolean setting = false; private volatile boolean setting = false;
public FilterComboBoxEditor() { public FilterComboBoxEditor() {
textField = new UITextField(15); textField = new UITextField(15){
@Override
public boolean shouldResponseChangeListener() {
return false;
}
};
textField.getDocument().addDocumentListener(this); textField.getDocument().addDocumentListener(this);
} }

11
designer_base/src/com/fr/design/gui/style/FRFontPane.java

@ -16,6 +16,7 @@ import com.fr.design.gui.ibutton.UIColorButton;
import com.fr.design.gui.ibutton.UIToggleButton; import com.fr.design.gui.ibutton.UIToggleButton;
import com.fr.design.gui.icombobox.LineComboBox; import com.fr.design.gui.icombobox.LineComboBox;
import com.fr.design.gui.icombobox.UIComboBox; import com.fr.design.gui.icombobox.UIComboBox;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper; import com.fr.design.layout.TableLayoutHelper;
import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.utils.gui.GUICoreUtils;
@ -41,6 +42,8 @@ public class FRFontPane extends AbstractBasicStylePane implements GlobalNameObse
public static Integer[] FONT_SIZES = {new Integer(6), new Integer(8), new Integer(9), new Integer(10), new Integer(11), new Integer(12), new Integer(14), new Integer(16), public static Integer[] FONT_SIZES = {new Integer(6), new Integer(8), new Integer(9), new Integer(10), new Integer(11), new Integer(12), new Integer(14), new Integer(16),
new Integer(18), new Integer(20), new Integer(22), new Integer(24), new Integer(26), new Integer(28), new Integer(36), new Integer(48), new Integer(72)}; new Integer(18), new Integer(20), new Integer(22), new Integer(24), new Integer(26), new Integer(28), new Integer(36), new Integer(48), new Integer(72)};
private static final Dimension BUTTON_SIZE = new Dimension(20, 18); private static final Dimension BUTTON_SIZE = new Dimension(20, 18);
private static final Dimension UNDER_LINE_SIZE = new Dimension(87, 20);
private static final Dimension HIDE_SIZE = new Dimension(0, 0);
private final String[] fontSizeStyles = {Inter.getLocText("FR-Designer_FRFont_plain"), Inter.getLocText("FR-Designer_FRFont_bold"), Inter.getLocText("FR-Designer_FRFont_italic"), Inter.getLocText("FR-Designer_FRFont_bolditalic")}; private final String[] fontSizeStyles = {Inter.getLocText("FR-Designer_FRFont_plain"), Inter.getLocText("FR-Designer_FRFont_bold"), Inter.getLocText("FR-Designer_FRFont_italic"), Inter.getLocText("FR-Designer_FRFont_bolditalic")};
private JPanel buttonPane; private JPanel buttonPane;
private JPanel isSuperOrSubPane; private JPanel isSuperOrSubPane;
@ -104,9 +107,11 @@ public class FRFontPane extends AbstractBasicStylePane implements GlobalNameObse
if (line == Constants.LINE_NONE) { if (line == Constants.LINE_NONE) {
underline.setSelected(false); underline.setSelected(false);
cly.show(linePane, "none"); cly.show(linePane, "none");
linePane.setPreferredSize(HIDE_SIZE);
} else { } else {
underline.setSelected(true); underline.setSelected(true);
cly.show(linePane, "combobox"); cly.show(linePane, "combobox");
linePane.setPreferredSize(UNDER_LINE_SIZE);
this.underlineCombo.setSelectedLineStyle(line); this.underlineCombo.setSelectedLineStyle(line);
} }
// effects // effects
@ -297,8 +302,14 @@ public class FRFontPane extends AbstractBasicStylePane implements GlobalNameObse
public void stateChanged(ChangeEvent e) { public void stateChanged(ChangeEvent e) {
CardLayout cly = (CardLayout) linePane.getLayout(); CardLayout cly = (CardLayout) linePane.getLayout();
cly.show(linePane, underline.isSelected() ? "combobox" : "none"); cly.show(linePane, underline.isSelected() ? "combobox" : "none");
if(underline.isSelected()){
linePane.setPreferredSize(UNDER_LINE_SIZE);
}else{
linePane.setPreferredSize(HIDE_SIZE);
}
} }
}); });
return linePane; return linePane;
} }

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

@ -1,4 +1,3 @@
# generated time: \u661F\u671F\u56DB \u5341\u4E00\u6708 24 12:02:51 CST 2016
FR-Designer-BBSLogin_Account=User name FR-Designer-BBSLogin_Account=User name
FR-Designer-BBSLogin_Connection-Failure=Connection failure, check your network status FR-Designer-BBSLogin_Connection-Failure=Connection failure, check your network status
FR-Designer-BBSLogin_Connection-Failure-Tip=Tip FR-Designer-BBSLogin_Connection-Failure-Tip=Tip
@ -591,13 +590,13 @@ FR-Designer_Style=Style
FR-Designer_Color=Color FR-Designer_Color=Color
FR-Designer_Border=Border FR-Designer_Border=Border
FR-Designer_Background-Pattern=Pattern FR-Designer_Background-Pattern=Pattern
FR-Designer_SimpleDetail_Report= FR-Designer_SimpleDetail_Report=Simple list
FR-Designer_SimpleCross_Report= FR-Designer_SimpleCross_Report=Simple cross table
FR-Designer_Edit_Button_ToolBar=Edit Button ToolBar FR-Designer_Edit_Button_ToolBar=Edit Button ToolBar
FR-Designer_Remove_Button_ToolBar=Remove Button ToolBar FR-Designer_Remove_Button_ToolBar=Remove Button ToolBar
FR-Designer_Get-CubeGetting= FR-Designer_Get-CubeGetting=Getting cube
FR-Designer_DoubleLayer_Report= FR-Designer_DoubleLayer_Report=Double deck header
FR-Designer_Get-Cube= FR-Designer_Get-Cube=Getting the cube
CellWrite-InsertRow_NULL=Null CellWrite-InsertRow_NULL=Null
DashBoard-ChartFloat=Chart DashBoard-ChartFloat=Chart
contact_info=Contact information (optional) contact_info=Contact information (optional)
@ -1246,7 +1245,7 @@ FR-Designer-Cell_Group=Cell Group
Week=Week Week=Week
PageSetup-Orientation=Orientation PageSetup-Orientation=Orientation
M-Open_Recent=Open Recent M-Open_Recent=Open Recent
NNormal= NNormal=normal
Integer=Integer Integer=Integer
Select_The_Source_To_Save=Select Source to Save Select_The_Source_To_Save=Select Source to Save
Transition=Branch Transition=Branch
@ -1458,7 +1457,7 @@ Env-Configure_Workspace=Configure working directory
feedback_info=We welcome your comments and suggestions, please fill out the information as detailed as possible, we will contact you soon feedback_info=We welcome your comments and suggestions, please fill out the information as detailed as possible, we will contact you soon
Ratio=Ratio Ratio=Ratio
DBCP_TEST_ON_BORROW=Test before Getting Connections DBCP_TEST_ON_BORROW=Test before Getting Connections
FR-Designer_layerIndex= FR-Designer_layerIndex=Dependent layers
WEB-Write_Setting=Filling Settings WEB-Write_Setting=Filling Settings
M-New_WorkBook=New General Report M-New_WorkBook=New General Report
FR-Designer-Plugin_Has_Been_Actived=Plugin is now active, restart the designer and sever to enable it and the sever need to be manually restarted FR-Designer-Plugin_Has_Been_Actived=Plugin is now active, restart the designer and sever to enable it and the sever need to be manually restarted
@ -1760,7 +1759,7 @@ FR-Base_sure_remove_item=Are you sure to delete the selected item
Component_Scale=Component Scale Component_Scale=Component Scale
Hyperlink-Use_CJK_to_encode_parameter=Use CJK to process parameter Hyperlink-Use_CJK_to_encode_parameter=Use CJK to process parameter
LOG-Has_Been_Openned=Report Has Been Openned LOG-Has_Been_Openned=Report Has Been Openned
FR-Designer-Dependence= FR-Designer-Dependence=Dependent environment
ECP_error_pwd=Password Error ECP_error_pwd=Password Error
REPORTLET=Parameter of access path to template REPORTLET=Parameter of access path to template
RWA-Column_Offset=Column Offset RWA-Column_Offset=Column Offset
@ -1799,7 +1798,7 @@ ParentCell_Setting=Parent Cell Setting
Only_selected_cell_can_paste_only=Paste when cell is selected Only_selected_cell_can_paste_only=Paste when cell is selected
M_Report-Report_Columns=Multi-columns/lines M_Report-Report_Columns=Multi-columns/lines
Unit_Hundred=Hundred Unit_Hundred=Hundred
FR-Designer_DataTable-Build= FR-Designer_DataTable-Build=Speed layered construction
Widget-Form_Widget_Config=Form control Widget-Form_Widget_Config=Form control
Server-version-tip-moreInfo=Conform the version numbers of FineReport Designer and the deployment server are consistent, in order to avoid the problems caused by inconsistent versions. If you open the template produced by higher designer vision, error may occurs or the original template properties missed. If the Designer Version you used to create the template is higher than the final deployment server version, the server may not be able to properly load the template. Server-version-tip-moreInfo=Conform the version numbers of FineReport Designer and the deployment server are consistent, in order to avoid the problems caused by inconsistent versions. If you open the template produced by higher designer vision, error may occurs or the original template properties missed. If the Designer Version you used to create the template is higher than the final deployment server version, the server may not be able to properly load the template.
Actions=Task Actions=Task
@ -1819,7 +1818,7 @@ BackgroundTexture-Cork=Cork
M_Format-Data_Map=Data Dictionary M_Format-Data_Map=Data Dictionary
FR-mobile_native_analysis=native analysis FR-mobile_native_analysis=native analysis
HighLight=High Light HighLight=High Light
FR-Designer_Dropdown-More-Preview= FR-Designer_Dropdown-More-Preview=Pull down to get more previews
local=local local=local
FR-Designer_Gradation=Gradation FR-Designer_Gradation=Gradation
PageSetup-Finis_Start_Column=Duplicate Last Column PageSetup-Finis_Start_Column=Duplicate Last Column
@ -1942,7 +1941,7 @@ Widget-User_Defined=Predefine
Url_location=Absolute path Url_location=Absolute path
Disk_File=Disk File Disk_File=Disk File
Inside=Inside Inside=Inside
FR-Designer_filedChosen= FR-Designer_filedChosen=Dependent fields
ServerM-Predefined_Styles=Predefined Styles ServerM-Predefined_Styles=Predefined Styles
is_need_word_adjust=Word Auto Adjust is_need_word_adjust=Word Auto Adjust
Background-Null=No Background Background-Null=No Background
@ -2122,7 +2121,7 @@ FS-Designer_DS_Filter_Odd_Tip=Odd_Tip
FS-Designer_DS_Filter_Even_Tip=Even_Tip FS-Designer_DS_Filter_Even_Tip=Even_Tip
FS-Designer_DS_Filter_Specify_Tip=Specify_Tip FS-Designer_DS_Filter_Specify_Tip=Specify_Tip
FR-Designer-AlphaFine_NO_Result=no search result FR-Designer-AlphaFine_NO_Result=no search result
FR-Designer-Download_Online_Sources= FR-Designer-Download_Online_Sources=The chart needs to download the latest resource file. Is it installed?
FR-Designer_Select_Color=Select Color FR-Designer_Select_Color=Select Color
FR-Designer-Basic_Dynamic_Parameter_Injection=Injection FR-Designer-Basic_Dynamic_Parameter_Injection=Injection
FR-Designer_Label=Label FR-Designer_Label=Label
@ -2131,17 +2130,17 @@ FR-Designer_Insert_Cell_Element=Insert Cell Element
FR-Designer_Add_Condition=Add Condition FR-Designer_Add_Condition=Add Condition
FR-Designer_Use_Params_Template=use parameter template FR-Designer_Use_Params_Template=use parameter template
FR-Designer_Label_Name=label name FR-Designer_Label_Name=label name
FR-Designer_Widget_Visible= FR-Designer_Widget_Visible=Visible control
FR-Designer_Widget_Display_Report_Tool= FR-Designer_Widget_Display_Report_Tool=Display report block toolbar
FR-Designer_Cell_Value= FR-Designer_Cell_Value=cell value
FR-Designer_Cell_Visible= FR-Designer_Cell_Visible=Cell visible
FR-Designer_Widget_Formula= FR-Designer_Widget_Formula=formula
FR-Designer_Show= FR-Designer_Show=display
FR-Designer_Widget_Position= FR-Designer_Widget_Position=Control location
FR-Designer_Float_Visible= FR-Designer_Float_Visible=Suspended elements are visible
FR-Designer_Widget_String= FR-Designer_Widget_String=Character string
FR-Designer_Widget_Field= FR-Designer_Widget_Field=field
FR-Designer_Widget_Enabled= FR-Designer_Widget_Enabled=Control available
FR-Designer_Export_Background= FR-Designer_Export_Background=
FR-Designer_Print_Background= FR-Designer_Print_Background=
FR-Designer_Sheet_Label_Page_Display_Position= FR-Designer_Sheet_Label_Page_Display_Position=

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

@ -1,4 +1,3 @@
# generated time: \u661F\u671F\u56DB \u5341\u4E00\u6708 24 12:02:51 CST 2016
FR-Designer-BBSLogin_Account=\u767B\u5165\u5E33\u865F FR-Designer-BBSLogin_Account=\u767B\u5165\u5E33\u865F
FR-Designer-BBSLogin_Connection-Failure=\u767B\u5165\u9023\u63A5\u5931\u6557\uFF0C\u8ACB\u6AA2\u67E5\u7576\u524D\u7DB2\u8DEF\u72C0\u614B FR-Designer-BBSLogin_Connection-Failure=\u767B\u5165\u9023\u63A5\u5931\u6557\uFF0C\u8ACB\u6AA2\u67E5\u7576\u524D\u7DB2\u8DEF\u72C0\u614B
FR-Designer-BBSLogin_Connection-Failure-Tip=\u9023\u7DDA\u5931\u6557\u63D0\u793A FR-Designer-BBSLogin_Connection-Failure-Tip=\u9023\u7DDA\u5931\u6557\u63D0\u793A
@ -563,19 +562,19 @@ FR-Designer_Plugin_Should_Update_Please_Contact_Developer=\u633F\u4EF6\u7248\u67
FR-Designer_WidgetOrder=\u63A7\u4EF6\u9806\u5E8F FR-Designer_WidgetOrder=\u63A7\u4EF6\u9806\u5E8F
FR-Designer_Mobile_Form_Analysis_Annotation=\u6CE8\u91CB\uFF1A\u53EF\u4EE5\u901A\u904E\u8A72\u5C6C\u6027\u63A7\u5236\u8868\u55AE\u5728APP\u4E2D\u7684\u89E3\u6790\u65B9\u5F0F\u3002 FR-Designer_Mobile_Form_Analysis_Annotation=\u6CE8\u91CB\uFF1A\u53EF\u4EE5\u901A\u904E\u8A72\u5C6C\u6027\u63A7\u5236\u8868\u55AE\u5728APP\u4E2D\u7684\u89E3\u6790\u65B9\u5F0F\u3002
FR-Designer_Mobile_Report_Analysis_Annotation=\u6CE8\u91CB\uFF1A\u53EF\u4EE5\u901A\u904E\u8A72\u5C6C\u6027\u63A7\u5236\u5831\u8868\u5728APP\u4E2D\u7684\u89E3\u6790\u65B9\u5F0F\uFF0C\u53EA\u652F\u6301\u5206\u9801\u9810\u89BD\uFF0C\u586B\u5831\u9810\u89BD\u6642\u5C6C\u6027\u7121\u6548\u3002 FR-Designer_Mobile_Report_Analysis_Annotation=\u6CE8\u91CB\uFF1A\u53EF\u4EE5\u901A\u904E\u8A72\u5C6C\u6027\u63A7\u5236\u5831\u8868\u5728APP\u4E2D\u7684\u89E3\u6790\u65B9\u5F0F\uFF0C\u53EA\u652F\u6301\u5206\u9801\u9810\u89BD\uFF0C\u586B\u5831\u9810\u89BD\u6642\u5C6C\u6027\u7121\u6548\u3002
FR-Designer_Background_Null= FR-Designer_Background_Null=\u6C92\u6709\u80CC\u666F
FR-Designer_Background_Color= FR-Designer_Background_Color=\u984F\u8272
FR-Designer_Background_Texture= FR-Designer_Background_Texture=\u7D0B\u7406
FR-Designer_Background_Pattern= FR-Designer_Background_Pattern=\u5716\u6848
FR-Designer_Background_Gradient_Color= FR-Designer_Background_Gradient_Color=\u6F38\u8B8A\u8272
FR-Designer_Background_Image= FR-Designer_Background_Image=\u5716\u7247
FR-Designer_Background_Clear= FR-Designer_Background_Clear=\u6E05\u9664
FR-Designer_Background_Image_Select= FR-Designer_Background_Image_Select=\u9078\u64C7\u5716\u7247
FR-Designer_Too_Large_To_Paste=\u7D44\u4EF6\u5927\u5C0F\u8D85\u51FA\u908A\u754C\uFF0C\u7121\u6CD5\u7C98\u8CBC\uFF01 FR-Designer_Too_Large_To_Paste=\u7D44\u4EF6\u5927\u5C0F\u8D85\u51FA\u908A\u754C\uFF0C\u7121\u6CD5\u7C98\u8CBC\uFF01
FR-Designer_Too_Small_To_Paste=\u6B64\u8655\u7121\u6CD5\u7C98\u8CBC\uFF0C\u5C0F\u65BC\u7D44\u4EF6\u6700\u5C0F\u9AD8\u5EA6\uFF01 FR-Designer_Too_Small_To_Paste=\u6B64\u8655\u7121\u6CD5\u7C98\u8CBC\uFF0C\u5C0F\u65BC\u7D44\u4EF6\u6700\u5C0F\u9AD8\u5EA6\uFF01
FR-Designer_Initial_Background_Tips= FR-Designer_Initial_Background_Tips=\u6309\u9215\u7684\u521D\u59CB\u80CC\u666F
FR-Designer_Mouse_Move_Tips= FR-Designer_Mouse_Move_Tips=\u6ED1\u9F20\u79FB\u52D5\u5230\u6309\u9215\u4E0A\u7684\u80CC\u666F\uFF0C\u82E5\u7121\u5247\u4E0D\u6539\u8B8A\u80CC\u666F
FR-Designer_Mouse_Click_Tips= FR-Designer_Mouse_Click_Tips=\u6ED1\u9F20\u9EDE\u9078\u6309\u9215\u6642\u80CC\u666F\uFF0C\u82E5\u7121\u5247\u4E0D\u6539\u8B8A\u80CC\u666F
FR-Designer_AxisReversed=\u8EF8\u9006\u5E8F FR-Designer_AxisReversed=\u8EF8\u9006\u5E8F
FR-Designer_Logarithmic=\u5C0D\u6578\u523B\u5EA6 FR-Designer_Logarithmic=\u5C0D\u6578\u523B\u5EA6
FR-Designer_Chart_Log_Base=\u5E95\u6578 FR-Designer_Chart_Log_Base=\u5E95\u6578
@ -584,20 +583,20 @@ FR-Designer_Style=\u6A23\u5F0F
FR-Designer_Color=\u984F\u8272 FR-Designer_Color=\u984F\u8272
FR-Designer_Border=\u6846\u7DDA FR-Designer_Border=\u6846\u7DDA
FR-Designer_Background-Pattern=\u5716\u6848 FR-Designer_Background-Pattern=\u5716\u6848
FR-Designer_SimpleDetail_Report= FR-Designer_SimpleDetail_Report=\u7C21\u55AE\u660E\u7D30\u8868
FR-Designer_Reset= FR-Designer_Reset=\u53D6\u6D88\u522A\u9664
FR-Designer_AllCategories= FR-Designer_AllCategories=\u6240\u6709\u5206\u985E
FR-Designer-Selected_Widget= FR-Designer-Selected_Widget=\u7576\u524D\u63A7\u5236\u5143\u4EF6
FR-Designer_SimpleCross_Report= FR-Designer_SimpleCross_Report=\u7C21\u55AE\u4EA4\u53C9\u8868
FR-Designer_LocalWidget= FR-Designer_LocalWidget=\u672C\u5730\u5143\u4EF6\u5EAB
FR-Designer_Edit_Button_ToolBar=\u7DE8\u8F2F\u6309\u9215\u6240\u5728\u5DE5\u5177\u6B04 FR-Designer_Edit_Button_ToolBar=\u7DE8\u8F2F\u6309\u9215\u6240\u5728\u5DE5\u5177\u6B04
FR-Designer_Remove_Button_ToolBar=\u79FB\u9664\u6309\u9215\u6240\u5728\u5DE5\u5177\u6B04 FR-Designer_Remove_Button_ToolBar=\u79FB\u9664\u6309\u9215\u6240\u5728\u5DE5\u5177\u6B04
FR-Designer_Install_Template= FR-Designer_Install_Template=\u5B89\u88DD
FR-Designer_Allow-Blank= FR-Designer_Allow-Blank=\u5141\u8A31\u70BA\u7A7A
FR-Designer_Delete_Template= FR-Designer_Delete_Template=\u522A\u9664
FR-Designer_Download_Template= FR-Designer_Download_Template=\u4E0B\u8F09
FR-Designer_DoubleLayer_Report= FR-Designer_DoubleLayer_Report=\u96D9\u5C64\u8868\u982D
FR-Designer_Validate= FR-Designer_Validate=\u6821\u9A57
CellWrite-InsertRow_NULL=\u7A7A\u503C CellWrite-InsertRow_NULL=\u7A7A\u503C
DashBoard-ChartFloat=\u5716\u8868 DashBoard-ChartFloat=\u5716\u8868
contact_info=\u806F\u7E6B\u8A0A\u606F(\u9078\u586B) contact_info=\u806F\u7E6B\u8A0A\u606F(\u9078\u586B)
@ -678,7 +677,7 @@ Need_Min_Value=\u9700\u8981\u6700\u5C0F\u503C
Allow_Blank=\u5141\u8A31\u70BA\u7A7A\u767D Allow_Blank=\u5141\u8A31\u70BA\u7A7A\u767D
CellWrite-InsertRow_DEFAULT=\u9810\u8A2D\u503C CellWrite-InsertRow_DEFAULT=\u9810\u8A2D\u503C
Widget-Load_By_Complete=\u5B8C\u5168\u8F09\u5165 Widget-Load_By_Complete=\u5B8C\u5168\u8F09\u5165
FR-Designer-Basic_Only_Submit_Current_Sheet= FR-Designer-Basic_Only_Submit_Current_Sheet=\u53EA\u63D0\u4EA4\u7576\u524DSHEET
Sort-Sort_Order=\u6392\u5217\u9806\u5E8F Sort-Sort_Order=\u6392\u5217\u9806\u5E8F
File-File_Size_Limit=\u6A94\u6848\u5927\u5C0F\u9650\u5236 File-File_Size_Limit=\u6A94\u6848\u5927\u5C0F\u9650\u5236
PrintP-Print=\u5217\u5370(T) PrintP-Print=\u5217\u5370(T)
@ -1759,7 +1758,7 @@ FR-Base_sure_remove_item=\u4F60\u78BA\u5BE6\u6C7A\u5B9A\u522A\u9664\u9078\u4E2D\
Component_Scale=\u5143\u4EF6\u7E2E\u653E Component_Scale=\u5143\u4EF6\u7E2E\u653E
Hyperlink-Use_CJK_to_encode_parameter=\u4F7F\u7528CJK\u8655\u7406\u53C3\u6578 Hyperlink-Use_CJK_to_encode_parameter=\u4F7F\u7528CJK\u8655\u7406\u53C3\u6578
LOG-Has_Been_Openned=\u5DF2\u7D93\u6253\u958B LOG-Has_Been_Openned=\u5DF2\u7D93\u6253\u958B
FR-Designer-Dependence= FR-Designer-Dependence=\u4F9D\u8CF4\u74B0\u5883
ECP_error_pwd=\u5BC6\u78BC\u932F\u8AA4 ECP_error_pwd=\u5BC6\u78BC\u932F\u8AA4
REPORTLET=\u8A2A\u554F\u6A21\u677F\u7684\u8DEF\u5F91\u7684\u53C3\u6578\u3002 REPORTLET=\u8A2A\u554F\u6A21\u677F\u7684\u8DEF\u5F91\u7684\u53C3\u6578\u3002
RWA-Column_Offset=\u6B04\u504F\u79FB RWA-Column_Offset=\u6B04\u504F\u79FB
@ -2031,117 +2030,117 @@ FR-Designer_Widget_Library=\u7D44\u4EF6\u5EAB
FR-Designer_No_Settings_Available=\u7121\u53EF\u7528\u914D\u5BD8\u9805\uFF01 FR-Designer_No_Settings_Available=\u7121\u53EF\u7528\u914D\u5BD8\u9805\uFF01
FR-Designer_Configured_Roles=\u5DF2\u914D\u7F6E\u89D2\u8272 FR-Designer_Configured_Roles=\u5DF2\u914D\u7F6E\u89D2\u8272
FR-Designer_Add_Hyperlink=\u65B0\u589E\u9023\u63A5 FR-Designer_Add_Hyperlink=\u65B0\u589E\u9023\u63A5
FR-Designer_Scale_selfAdaptButton= FR-Designer_Scale_selfAdaptButton=\u6070\u597D\u5BB9\u7D0D\u9078\u5B9A\u5340\u57DF
FR-Designer_Scale_customButton= FR-Designer_Scale_customButton=\u81EA\u5B9A\u7FA9
FR-Designer_FRFont_Subscript= FR-Designer_FRFont_Subscript=\u4E0B\u6A19
FR-Designer_FRFont_Superscript= FR-Designer_FRFont_Superscript=\u4E0A\u6A19
FR-Designer_FRFont_Shadow= FR-Designer_FRFont_Shadow=\u9670\u5F71
FR-Designer_FRFont_Strikethrough= FR-Designer_FRFont_Strikethrough=\u522A\u9664\u7DDA
FR-Designer_FRFont_Underline= FR-Designer_FRFont_Underline=\u4E0B\u5283\u7DDA
FR-Designer_FRFont_bold= FR-Designer_FRFont_bold=\u52A0\u7C97
FR-Designer_FRFont_italic= FR-Designer_FRFont_italic=\u659C\u9AD4
FR-Designer_FRFont_Foreground= FR-Designer_FRFont_Foreground=\u984F\u8272
FR-Designer_FRFont_Style= FR-Designer_FRFont_Style=\u5B57\u5F62
FR-Designer_FRFont_plain= FR-Designer_FRFont_plain=\u5E38\u898F
FR-Designer_FRFont_bolditalic= FR-Designer_FRFont_bolditalic=\u52A0\u7C97\u50BE\u659C
FR-Designer_outBorder= FR-Designer_outBorder=\u5916\u908A\u6846
FR-Designer_inBorder= FR-Designer_inBorder=\u5167\u908A\u6846
FR-Designer_ExpandD_Up_Father_Cell= FR-Designer_ExpandD_Up_Father_Cell=\u4E0A\u7236\u683C
FR-Designer_ExpandD_Expand_Direction= FR-Designer_ExpandD_Expand_Direction=\u64F4\u5145\u5957\u4EF6\u65B9\u5411
FR-Designer_Expand= FR-Designer_Expand=\u64F4\u5145\u5957\u4EF6
FR-Designer_ExpendSort= FR-Designer_ExpendSort=\u64F4\u5145\u5957\u4EF6\u5F8C\u6392\u5E8F
FR-Designer_ExpandD_Expandable= FR-Designer_ExpandD_Expandable=\u53EF\u4F38\u5C55\u6027
FR-Designer_Read_failure= FR-Designer_Read_failure=\u8B80\u53D6\u5931\u6557\uFF0C\u53EF\u80FD\u539F\u59CB\u6A94\u5DF2\u640D\u58DE
FR-Designer_Image_Layout= FR-Designer_Image_Layout=\u5716\u7247\u4F48\u5C40
FR-Designer_StyleAlignment_Text_Style= FR-Designer_StyleAlignment_Text_Style=\u6587\u5B57\u63A7\u5236
FR-Designer_StyleAlignment_Text_Rotation= FR-Designer_StyleAlignment_Text_Rotation=\u6587\u5B57\u65B9\u5411
FR-Designer_Style_Left_Indent= FR-Designer_Style_Left_Indent=\u5DE6\u7E2E\u6392
FR-Designer_Style_Right_Indent= FR-Designer_Style_Right_Indent=\u53F3\u7E2E\u6392
FR-Designer_Style_Spacing_Before= FR-Designer_Style_Spacing_Before=\u6BB5\u524D
FR-Designer_Style_Spacing_After= FR-Designer_Style_Spacing_After=\u6BB5\u5F8C
FR-Designer_Style_Line_Spacing= FR-Designer_Style_Line_Spacing=\u884C\u9593\u8DDD
FR-Designer_Left= FR-Designer_Left=\u5DE6
FR-Designer_Right= FR-Designer_Right=\u53F3
FR-Designer_Front= FR-Designer_Front=\u524D
FR-Designer_Behind= FR-Designer_Behind=\u5F8C
FR-Designer_StyleAlignment_Wrap_Text= FR-Designer_StyleAlignment_Wrap_Text=\u81EA\u52D5\u63DB\u884C
FR-Designer_StyleAlignment_Single_Line= FR-Designer_StyleAlignment_Single_Line=\u55AE\u884C\u986F\u793A
FR-Designer_StyleAlignment_Single_Line(Adjust_Font)= FR-Designer_StyleAlignment_Single_Line(Adjust_Font)=\u55AE\u884C\u986F\u793A(\u8ABF\u6574\u5B57\u578B)
FR-Designer_StyleAlignment_Multi_Line(Adjust_Font)= FR-Designer_StyleAlignment_Multi_Line(Adjust_Font)=\u591A\u884C\u986F\u793A(\u8ABF\u6574\u5B57\u578B)
FR-Designer_Auto_Adjust_Height= FR-Designer_Auto_Adjust_Height=\u81EA\u52D5\u8ABF\u6574\u884C\u9AD8
FR-Designer_Auto_Adjust_Wdith= FR-Designer_Auto_Adjust_Wdith=\u81EA\u52D5\u8ABF\u6574\u5217\u5BEC
FR-Designer_Type_Set= FR-Designer_Type_Set=\u578B\u5225\u8A2D\u5B9A
FR-Designer_Dic_Data_Query= FR-Designer_Dic_Data_Query=\u8CC7\u6599\u67E5\u8A62
FR-Designer_Dictionary_Dynamic_SQL= FR-Designer_Dictionary_Dynamic_SQL=\u52D5\u614BSQL
FR-Designer_Datasource_From_Database= FR-Designer_Datasource_From_Database=\u8CC7\u6599\u5EAB\u8868
FR-Designer_CellWrite_InsertRow_NULL= FR-Designer_CellWrite_InsertRow_NULL=\u7A7A\u503C
FR-Designer_CellWrite_InsertRow_COPY= FR-Designer_CellWrite_InsertRow_COPY=\u539F\u503C
FR-Designer_CellWrite_InsertRow_Policy= FR-Designer_CellWrite_InsertRow_Policy=\u63D2\u5165\u884C\u7B56\u7565
FR-Designer_CellWrite_Page_Before_Row= FR-Designer_CellWrite_Page_Before_Row=\u884C\u524D\u5206\u9801
FR-Designer_CellWrite_Page_After_Row= FR-Designer_CellWrite_Page_After_Row=\u884C\u5F8C\u5206\u9801
FR-Designer_CellWrite_Page_Before_Column= FR-Designer_CellWrite_Page_Before_Column=\u5217\u524D\u5206\u9801
FR-Designer_CellWrite_Page_After_Column= FR-Designer_CellWrite_Page_After_Column=\u5217\u5F8C\u5206\u9801
FR-Designer_CellPage_Can_Break_On_Paginate= FR-Designer_CellPage_Can_Break_On_Paginate=\u5206\u9801\u6642\u53EF\u4EE5\u65B7\u958B
FR-Designer_CellPage_Repeat_Content_When_Paging= FR-Designer_CellPage_Repeat_Content_When_Paging=\u5206\u9801\u65B7\u958B\u6642\u503C\u91CD\u8907\u986F\u793A
FR-Designer_CellWrite_Preview_Cell_Content= FR-Designer_CellWrite_Preview_Cell_Content=\u9810\u89BD\u55AE\u5143\u683C\u5167\u5BB9
FR-Designer_CellWrite_Print_Content= FR-Designer_CellWrite_Print_Content=\u5217\u5370/\u532F\u51FA\u55AE\u5143\u683C\u5167\u5BB9
FR-Designer_CellWrite_Print_Background= FR-Designer_CellWrite_Print_Background=\u5217\u5370/\u532F\u51FA\u55AE\u5143\u683C\u80CC\u666F
FR-Designer_CellWrite_Show_As_Image= FR-Designer_CellWrite_Show_As_Image=\u7528\u5716\u7247\u986F\u793A\u5167\u5BB9
FR-Designer_CellWrite_Show_As_HTML= FR-Designer_CellWrite_Show_As_HTML=\u7528HTML\u986F\u793A\u5167\u5BB9
FR-Designer_Datasource_Other_Attributes= FR-Designer_Datasource_Other_Attributes=\u5176\u4ED6\u5C6C\u6027
FR-Designer_Not_use_a_cell_attribute_table_editing= FR-Designer_Not_use_a_cell_attribute_table_editing=\u60A8\u4E0D\u53EF\u4EE5\u7528\u55AE\u5143\u683C\u5C6C\u6027\u8868\u7DE8\u8F2F
FR-Designer_CellElement_Property_Table= FR-Designer_CellElement_Property_Table=\u55AE\u5143\u683C\u5C6C\u6027\u8868
FR-Designer_T_Insert_Float= FR-Designer_T_Insert_Float=\u63D2\u5165\u61F8\u6D6E\u5143\u7D20
FR-Designer_Add_FloatElement= FR-Designer_Add_FloatElement=\u65B0\u589E\u5143\u7D20
FR-Designer_Insert_Image= FR-Designer_Insert_Image=\u63D2\u5165\u5716\u7247
FR-Designer_Insert_Chart= FR-Designer_Insert_Chart=\u63D2\u5165\u5716\u8868
FR-Designer_Insert_Text= FR-Designer_Insert_Text=\u63D2\u5165\u666E\u901A\u6587\u5B57
FR-Designer_Insert_Formula= FR-Designer_Insert_Formula=\u63D2\u5165\u516C\u5F0F
FR-Designer_Scale_Down= FR-Designer_Scale_Down=\u7E2E\u5C0F
FR-Designer_Scale_Up= FR-Designer_Scale_Up=\u653E\u5927
FR-Designer_Scale_Slider= FR-Designer_Scale_Slider=\u7E2E\u653E\u6ED1\u584A
FR-Designer_Scale_Grade= FR-Designer_Scale_Grade=\u7E2E\u653E\u7D1A\u5225\uFF0C\u55AE\u64CA\u5F8C\u8ABF\u7BC0\u986F\u793A\u6BD4\u4F8B\u3002
FR-Designer_AlphaFine_EnableInternet= FR-Designer_AlphaFine_EnableInternet=\u806F\u7DB2
FR-Designer_Scale_EnlargeOrReduce= FR-Designer_Scale_EnlargeOrReduce=\u7E2E\u653E
FR-Designer-StyleAlignment_Style_PartSpacing= FR-Designer-StyleAlignment_Style_PartSpacing=\u6BB5\u9593\u8DDD
FR-Designer_Use_Params_Template= FR-Designer_Use_Params_Template=\u4F7F\u7528\u5E38\u7528\u5F15\u6578\u7D44\u5408
FR-Designer_Label_Name= FR-Designer_Label_Name=\u6A19\u7C64\u540D\u7A31
FR-Designer_Add_Event= FR-Designer_Add_Event=\u65B0\u589E\u4E8B\u4EF6
FR-Designer_Not_Support_Authority_Edit=\u8A72\u5143\u7D20\u4E0D\u652F\u63F4\u8A31\u53EF\u6B0A\u63A7\u5236 FR-Designer_Not_Support_Authority_Edit=\u8A72\u5143\u7D20\u4E0D\u652F\u63F4\u8A31\u53EF\u6B0A\u63A7\u5236
FR-Designer_Dynamic_Parameter=\u52D5\u614B\u53C3\u6578 FR-Designer_Dynamic_Parameter=\u52D5\u614B\u53C3\u6578
FR-Designer_Remove_Item= FR-Designer_Remove_Item=\u522A\u9664\u9078\u4E2D
FR-Designer_Widget_No_Repeat= FR-Designer_Widget_No_Repeat=\u53BB\u9664\u91CD\u8907\u9805
FR-Designer_Widget_Error_Tip= FR-Designer_Widget_Error_Tip=\u932F\u8AA4\u63D0\u793A
FR-Designer_Widget_Return_Leaf= FR-Designer_Widget_Return_Leaf=\u7D50\u679C\u8FD4\u56DE\u8449\u5B50\u7BC0\u9EDE
FR-Designer_Widget_Return_Path= FR-Designer_Widget_Return_Path=\u7D50\u679C\u8FD4\u56DE\u5B8C\u6574\u5C64\u6B21\u8DEF\u5F91
FR-Designer_Widget_Display_Position= FR-Designer_Widget_Display_Position=\u986F\u793A\u4F4D\u7F6E
FR-Designer_Size_Limit= FR-Designer_Size_Limit=\u5927\u5C0F\u9650\u5236
FR-Designer_Widget_Name= FR-Designer_Widget_Name=\u63A7\u5236\u5143\u4EF6\u540D\u7A31
FR-Designer_Coords_And_Size= FR-Designer_Coords_And_Size=\u5EA7\u6A19\XB7\u5C3A\u5BF8
FR-Designer_Barcode_Size= FR-Designer_Barcode_Size=\u689D\u5F62\u78BC\u5927\u5C0F
FS-Designer_DS_Filter_Odd_Tip=\u63D0\u793A\uFF1A\u5E8F\u865F\u5F9E1\u958B\u59CB\uFF0C\u9078\u64C7\u4E86\u5947\u6578\u96C6(1,3,5...) FS-Designer_DS_Filter_Odd_Tip=\u63D0\u793A\uFF1A\u5E8F\u865F\u5F9E1\u958B\u59CB\uFF0C\u9078\u64C7\u4E86\u5947\u6578\u96C6(1,3,5...)
FS-Designer_DS_Filter_Even_Tip=\u63D0\u793A\uFF1A\u5E8F\u865F\u5F9E1\u958B\u59CB\uFF0C\u9078\u64C7\u4E86\u5076\u6578\u96C6(2,4,6...) FS-Designer_DS_Filter_Even_Tip=\u63D0\u793A\uFF1A\u5E8F\u865F\u5F9E1\u958B\u59CB\uFF0C\u9078\u64C7\u4E86\u5076\u6578\u96C6(2,4,6...)
FS-Designer_DS_Filter_Specify_Tip=\u63D0\u793A\uFF1A\u683C\u5F0F\u70BA1,2-3,5,8\uFF0C\u5E8F\u865F\u5F9E1\u958B\u59CB\uFF0C\u5185\u7F6E\u53C3\u6578$_count_\u8868\u793A\u7E02\u500B\u6578 FS-Designer_DS_Filter_Specify_Tip=\u63D0\u793A\uFF1A\u683C\u5F0F\u70BA1,2-3,5,8\uFF0C\u5E8F\u865F\u5F9E1\u958B\u59CB\uFF0C\u5185\u7F6E\u53C3\u6578$_count_\u8868\u793A\u7E02\u500B\u6578
M-New_FormBook=\u65B0\u589E\u6C7A\u7B56\u5831\u8868 M-New_FormBook=\u65B0\u589E\u6C7A\u7B56\u5831\u8868
FR-Designer-AlphaFine_NO_Result=\u7121\u641C\u7D22\u7D50\u679C FR-Designer-AlphaFine_NO_Result=\u7121\u641C\u7D22\u7D50\u679C
FR-Designer-Download_Online_Sources= FR-Designer-Download_Online_Sources=\u5716\u8868\u9700\u8981\u4E0B\u8F09\u6700\u65B0\u7684\u8CC7\u539F\u59CB\u6A94\uFF0C\u662F\u5426\u5B89\u88DD\uFF1F
FR-Designer_Select_Color= FR-Designer_Select_Color=\u9078\u64C7\u984F\u8272
FR-Designer-Basic_Dynamic_Parameter_Injection=\u6CE8\u5165 FR-Designer-Basic_Dynamic_Parameter_Injection=\u6CE8\u5165
FR-Designer_Label=\u6A19\u7C3D FR-Designer_Label=\u6A19\u7C3D
FR-Designer_Widgetname=\u63A7\u5236\u9805\u540D FR-Designer_Widgetname=\u63A7\u5236\u9805\u540D
FR-Designer_Insert_Cell_Element=\u63D2\u5165\u5143\u7D20 FR-Designer_Insert_Cell_Element=\u63D2\u5165\u5143\u7D20
FR-Designer_Add_Condition= FR-Designer_Add_Condition=\u65B0\u589E\u689D\u4EF6
FR-Designer_Widget_Visible= FR-Designer_Widget_Visible=\u63A7\u5236\u5143\u4EF6\u53EF\u898B
FR-Designer_Widget_Display_Report_Tool= FR-Designer_Widget_Display_Report_Tool=\u986F\u793A\u5831\u8868\u584A\u5DE5\u5177\u6B04
FR-Designer_Cell_Value= FR-Designer_Cell_Value=\u55AE\u5143\u683C\u503C
FR-Designer_Cell_Visible= FR-Designer_Cell_Visible=\u55AE\u5143\u683C\u53EF\u898B
FR-Designer_Widget_Formula= FR-Designer_Widget_Formula=\u516C\u5F0F
FR-Designer_Show= FR-Designer_Show=\u986F\u793A
FR-Designer_Widget_Position= FR-Designer_Widget_Position=\u63A7\u5236\u5143\u4EF6\u4F4D\u7F6E
FR-Designer_Float_Visible= FR-Designer_Float_Visible=\u61F8\u6D6E\u5143\u7D20\u53EF\u898B
FR-Designer_Widget_String= FR-Designer_Widget_String=\u5B57\u4E32
FR-Designer_Widget_Field= FR-Designer_Widget_Field=\u6B04\u4F4D
FR-Designer_Widget_Enabled= FR-Designer_Widget_Enabled=\u63A7\u5236\u5143\u4EF6\u53EF\u7528
FR-Designer_Export_Background= FR-Designer_Export_Background=
FR-Designer_Print_Background= FR-Designer_Print_Background=
FR-Designer_Sheet_Label_Page_Display_Position= FR-Designer_Sheet_Label_Page_Display_Position=

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

@ -441,14 +441,8 @@ public abstract class ToolBarMenuDock {
shortCuts.add(new VideoAction()); shortCuts.add(new VideoAction());
shortCuts.add(new TutorialAction()); shortCuts.add(new TutorialAction());
} }
shortCuts.add(SeparatorDef.DEFAULT);
shortCuts.add(SeparatorDef.DEFAULT);
if (ComparatorUtils.equals(ProductConstants.APP_NAME, FINEREPORT)) {
shortCuts.add(SeparatorDef.DEFAULT);
}
if (AlphaFineConfigManager.isALPHALicAvailable()) { if (AlphaFineConfigManager.isALPHALicAvailable()) {
shortCuts.add(new AlphaFineAction()); shortCuts.add(new AlphaFineAction());
shortCuts.add(SeparatorDef.DEFAULT);
} }
shortCuts.add(SeparatorDef.DEFAULT); shortCuts.add(SeparatorDef.DEFAULT);
shortCuts.add(new AboutAction()); shortCuts.add(new AboutAction());

178
designer_base/src/com/fr/design/utils/concurrent/ThreadFactoryBuilder.java

@ -0,0 +1,178 @@
/*
* Copyright (C) 2010 The Guava Authors
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package com.fr.design.utils.concurrent;
import java.lang.Thread.UncaughtExceptionHandler;
import java.util.Locale;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.atomic.AtomicLong;
/**
* A ThreadFactory builder, providing any combination of these features:
* <ul>
* <li>whether threads should be marked as {@linkplain Thread#setDaemon daemon} threads
* <li>a {@linkplain ThreadFactoryBuilder#setNameFormat naming format}
* <li>a {@linkplain Thread#setPriority thread priority}
* <li>an {@linkplain Thread#setUncaughtExceptionHandler uncaught exception handler}
* <li>a {@linkplain ThreadFactory#newThread backing thread factory}
* </ul>
* <p>If no backing thread factory is provided, a default backing thread factory is used as if by
* calling {@code setThreadFactory(}{@link Executors#defaultThreadFactory()}{@code )}.
*
* @author Kurt Alfred Kluever
* @since 4.0
*/
public final class ThreadFactoryBuilder {
private String nameFormat = null;
private Boolean daemon = null;
private Integer priority = null;
private UncaughtExceptionHandler uncaughtExceptionHandler = null;
private ThreadFactory backingThreadFactory = null;
/**
* Creates a new {@link ThreadFactory} builder.
*/
public ThreadFactoryBuilder() {
// 这个注释毫无意义,就是为了通过SonarQube
}
/**
* Sets the naming format to use when naming threads ({@link Thread#setName}) which are created
* with this ThreadFactory.
*
* @param nameFormat a {@link String#format(String, Object...)}-compatible format String, to which
* a unique integer (0, 1, etc.) will be supplied as the single parameter. This integer will
* be unique to the built instance of the ThreadFactory and will be assigned sequentially. For
* example, {@code "rpc-pool-%d"} will generate thread names like {@code "rpc-pool-0"},
* {@code "rpc-pool-1"}, {@code "rpc-pool-2"}, etc.
* @return this for the builder pattern
*/
public ThreadFactoryBuilder setNameFormat(String nameFormat) {
String unused = format(nameFormat, 0); // fail fast if the format is bad or null
this.nameFormat = nameFormat;
return this;
}
/**
* Sets daemon or not for new threads created with this ThreadFactory.
*
* @param daemon whether or not new Threads created with this ThreadFactory will be daemon threads
* @return this for the builder pattern
*/
public ThreadFactoryBuilder setDaemon(boolean daemon) {
this.daemon = daemon;
return this;
}
/**
* Sets the priority for new threads created with this ThreadFactory.
*
* @param priority the priority for new Threads created with this ThreadFactory
* @return this for the builder pattern
*/
public ThreadFactoryBuilder setPriority(int priority) {
// Thread#setPriority() already checks for validity. These error messages
// are nicer though and will fail-fast.
if (priority < Thread.MIN_PRIORITY) {
throw new IllegalArgumentException(format("Thread priority (%s) must be >= %s", priority, Thread.MIN_PRIORITY));
}
if (priority > Thread.MAX_PRIORITY) {
throw new IllegalArgumentException(format("Thread priority (%s) must be <= %s", priority, Thread.MAX_PRIORITY));
}
this.priority = priority;
return this;
}
/**
* Sets the {@link UncaughtExceptionHandler} for new threads created with this ThreadFactory.
*
* @param uncaughtExceptionHandler the uncaught exception handler for new Threads created with
* this ThreadFactory
* @return this for the builder pattern
*/
public ThreadFactoryBuilder setUncaughtExceptionHandler(
UncaughtExceptionHandler uncaughtExceptionHandler) {
if (uncaughtExceptionHandler == null) {
throw new NullPointerException();
}
this.uncaughtExceptionHandler = uncaughtExceptionHandler;
return this;
}
/**
* Sets the backing {@link ThreadFactory} for new threads created with this ThreadFactory. Threads
* will be created by invoking #newThread(Runnable) on this backing {@link ThreadFactory}.
*
* @param backingThreadFactory the backing {@link ThreadFactory} which will be delegated to during
* thread creation.
* @return this for the builder pattern
*/
public ThreadFactoryBuilder setThreadFactory(ThreadFactory backingThreadFactory) {
if (backingThreadFactory == null) {
throw new NullPointerException();
}
this.backingThreadFactory = backingThreadFactory;
return this;
}
/**
* Returns a new thread factory using the options supplied during the building process. After
* building, it is still possible to change the options used to build the ThreadFactory and/or
* build again. State is not shared amongst built instances.
*
* @return the fully constructed {@link ThreadFactory}
*/
public ThreadFactory build() {
return doBuild(this);
}
// Split out so that the anonymous ThreadFactory can't contain a reference back to the builder.
// At least, I assume that's why. TODO(cpovirk): Check, and maybe add a test for this.
private static ThreadFactory doBuild(ThreadFactoryBuilder builder) {
final String nameFormat = builder.nameFormat;
final Boolean daemon = builder.daemon;
final Integer priority = builder.priority;
final UncaughtExceptionHandler uncaughtExceptionHandler = builder.uncaughtExceptionHandler;
final ThreadFactory backingThreadFactory =
(builder.backingThreadFactory != null)
? builder.backingThreadFactory
: Executors.defaultThreadFactory();
final AtomicLong count = (nameFormat != null) ? new AtomicLong(0) : null;
return new ThreadFactory() {
@Override
public Thread newThread(Runnable runnable) {
Thread thread = backingThreadFactory.newThread(runnable);
if (nameFormat != null) {
thread.setName(format(nameFormat, count.getAndIncrement()));
}
if (daemon != null) {
thread.setDaemon(daemon);
}
if (priority != null) {
thread.setPriority(priority);
}
if (uncaughtExceptionHandler != null) {
thread.setUncaughtExceptionHandler(uncaughtExceptionHandler);
}
return thread;
}
};
}
private static String format(String format, Object... args) {
return String.format(Locale.ROOT, format, args);
}
}

19
designer_base/src/com/fr/design/widget/WidgetBoundsPaneFactory.java

@ -28,7 +28,7 @@ public class WidgetBoundsPaneFactory {
double[] rowSize = {p, p}; double[] rowSize = {p, p};
double[] columnSize = {p, f}; double[] columnSize = {p, f};
int[][] rowCount = {{1, 1}, {1, 1}}; int[][] rowCount = {{1, 1}, {1, 1}};
final JPanel panel = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_W1, IntervalConstants.INTERVAL_L1); final JPanel panel = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_W1, IntervalConstants.INTERVAL_L6);
panel.setBorder(BorderFactory.createEmptyBorder(10, 0, 10, 0)); panel.setBorder(BorderFactory.createEmptyBorder(10, 0, 10, 0));
boundsPane.add(panel); boundsPane.add(panel);
return new UIExpandablePane(Inter.getLocText("FR-Designer_Coords_And_Size"), 280, 24, boundsPane); return new UIExpandablePane(Inter.getLocText("FR-Designer_Coords_And_Size"), 280, 24, boundsPane);
@ -49,19 +49,24 @@ public class WidgetBoundsPaneFactory {
double f = TableLayout.FILL; double f = TableLayout.FILL;
double p = TableLayout.PREFERRED; double p = TableLayout.PREFERRED;
Component[][] components = new Component[][]{ Component[][] northComponents = new Component[][]{
new Component[]{new UILabel(Inter.getLocText("FR-Designer_Widget_Position")), createRightPane(x, y)}, new Component[]{new UILabel(Inter.getLocText("FR-Designer_Widget_Position")), createRightPane(x, y)},
new Component[]{null, createRightPane(new UILabel(Inter.getLocText("FR-Designer_X_Coordinate"), SwingConstants.CENTER), new UILabel(Inter.getLocText("FR-Designer_Y_Coordinate"), SwingConstants.CENTER))}, new Component[]{null, createRightPane(new UILabel(Inter.getLocText("FR-Designer_X_Coordinate"), SwingConstants.CENTER), new UILabel(Inter.getLocText("FR-Designer_Y_Coordinate"), SwingConstants.CENTER))},
};
Component[][] centerComponents = new Component[][]{
new Component[]{new UILabel(Inter.getLocText("FR-Designer-Widget_Size")), createRightPane(width, height)}, new Component[]{new UILabel(Inter.getLocText("FR-Designer-Widget_Size")), createRightPane(width, height)},
new Component[]{null, createRightPane(new UILabel(Inter.getLocText("FR-Designer-Tree_Width"), SwingConstants.CENTER), new UILabel(Inter.getLocText("FR-Designer-Tree_Height"), SwingConstants.CENTER))}, new Component[]{null, createRightPane(new UILabel(Inter.getLocText("FR-Designer-Tree_Width"), SwingConstants.CENTER), new UILabel(Inter.getLocText("FR-Designer-Tree_Height"), SwingConstants.CENTER))},
}; };
double[] rowSize = {p, p, p, p}; double[] rowSize = {p, p};
double[] columnSize = {p, f}; double[] columnSize = {p, f};
int[][] rowCount = {{1, 1}, {1, 1}, {1, 1}, {1, 1}}; int[][] rowCount = {{1, 1}, {1, 1}};
final JPanel panel = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_W1, IntervalConstants.INTERVAL_L1); final JPanel northPanel = TableLayoutHelper.createGapTableLayoutPane(northComponents, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_W1, IntervalConstants.INTERVAL_L6);
final JPanel centerPanel = TableLayoutHelper.createGapTableLayoutPane(centerComponents, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_W1, IntervalConstants.INTERVAL_L6);
JPanel boundsPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); JPanel boundsPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
panel.setBorder(BorderFactory.createEmptyBorder(10, 0, 10, 0)); northPanel.setBorder(BorderFactory.createEmptyBorder(10, 0, 10, 0));
boundsPane.add(panel); centerPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 0));
boundsPane.add(northPanel, BorderLayout.NORTH);
boundsPane.add(centerPanel, BorderLayout.CENTER);
return new UIExpandablePane(Inter.getLocText("FR-Designer_Coords_And_Size"), 230, 24, boundsPane); return new UIExpandablePane(Inter.getLocText("FR-Designer_Coords_And_Size"), 230, 24, boundsPane);
} }
} }

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

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

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

@ -109,6 +109,7 @@ public class RemoteEnv extends AbstractEnv {
private Timer logTimer = null; private Timer logTimer = null;
private static ThreadLocal<String> threadLocal = new ThreadLocal<String>(); private static ThreadLocal<String> threadLocal = new ThreadLocal<String>();
private boolean isReadTimeOut = false; private boolean isReadTimeOut = false;
private String buildFilePath;
public RemoteEnv() { public RemoteEnv() {
this.clock = new Clock(this); this.clock = new Clock(this);
@ -2042,13 +2043,14 @@ public class RemoteEnv extends AbstractEnv {
* 获取当前env的build文件路径 * 获取当前env的build文件路径
*/ */
public String getBuildFilePath() { public String getBuildFilePath() {
return ResourceConstants.BUILD_PATH; return StringUtils.isEmpty(buildFilePath) ? ResourceConstants.BUILD_PATH : buildFilePath;
} }
/** /**
* 设置当前env的build文件路径 * 设置当前env的build文件路径
*/ */
public void setBuildFilePath(String buildFilePath) { public void setBuildFilePath(String buildFilePath) {
this.buildFilePath = buildFilePath;
} }
/** /**

2
designer_chart/src/com/fr/plugin/chart/designer/component/format/VanChartFormatPaneWithCheckBox.java

@ -93,7 +93,7 @@ public abstract class VanChartFormatPaneWithCheckBox extends JPanel{
} }
Point comPoint = formatButton.getLocationOnScreen(); Point comPoint = formatButton.getLocationOnScreen();
Point arrowPoint = new Point(comPoint.x +formatButton.getWidth() - 25, comPoint.y + formatButton.getHeight()); Point arrowPoint = new Point(comPoint.x +formatButton.getWidth() - 25, comPoint.y + formatButton.getHeight());
UIBubbleFloatPane<Style> pane = new UIBubbleFloatPane(Constants.LEFT, arrowPoint, formatPane, 258, 240) { UIBubbleFloatPane<Style> pane = new UIBubbleFloatPane(Constants.LEFT, arrowPoint, formatPane, 258, 255) {
@Override @Override
public void updateContentPane() { public void updateContentPane() {

2
designer_chart/src/com/fr/plugin/chart/map/designer/type/VanChartMapSourceChoosePane.java

@ -23,10 +23,10 @@ import com.fr.general.Inter;
import com.fr.general.http.HttpClient; import com.fr.general.http.HttpClient;
import com.fr.plugin.chart.base.GisLayer; import com.fr.plugin.chart.base.GisLayer;
import com.fr.plugin.chart.base.ViewCenter; import com.fr.plugin.chart.base.ViewCenter;
import com.fr.plugin.chart.base.WMSLayer;
import com.fr.plugin.chart.designer.TableLayout4VanChartHelper; import com.fr.plugin.chart.designer.TableLayout4VanChartHelper;
import com.fr.plugin.chart.drillmap.designer.data.comp.MapDataTree; import com.fr.plugin.chart.drillmap.designer.data.comp.MapDataTree;
import com.fr.plugin.chart.map.VanChartMapPlot; import com.fr.plugin.chart.map.VanChartMapPlot;
import com.fr.plugin.chart.map.layer.WMSLayer;
import com.fr.plugin.chart.map.server.CompatibleGEOJSONHelper; import com.fr.plugin.chart.map.server.CompatibleGEOJSONHelper;
import com.fr.plugin.chart.map.server.GEOJSONHelper; import com.fr.plugin.chart.map.server.GEOJSONHelper;
import com.fr.plugin.chart.map.server.MapLayerConfigManager; import com.fr.plugin.chart.map.server.MapLayerConfigManager;

8
designer_form/src/com/fr/design/designer/creator/XCheckBox.java

@ -83,4 +83,12 @@ public class XCheckBox extends XWidgetCreator {
protected String getIconName() { protected String getIconName() {
return "check_box_16.png"; return "check_box_16.png";
} }
public void firePropertyChange(){
((UICheckBox) editor).setText(((CheckBox) data).getText());
WidgetValue value = ((CheckBox) data).getWidgetValue();
if (value != null && value.getValue() instanceof Boolean) {
((UICheckBox) editor).setSelected((Boolean) value.getValue());
}
}
} }

6
designer_form/src/com/fr/design/designer/properties/FRAbsoluteBodyLayoutPropertiesGroupModel.java

@ -2,6 +2,7 @@ package com.fr.design.designer.properties;
import com.fr.design.designer.creator.*; import com.fr.design.designer.creator.*;
import com.fr.design.designer.creator.cardlayout.XWCardMainBorderLayout; import com.fr.design.designer.creator.cardlayout.XWCardMainBorderLayout;
import com.fr.design.mainframe.DesignerContext;
import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.FormDesigner;
import com.fr.design.mainframe.FormSelectionUtils; import com.fr.design.mainframe.FormSelectionUtils;
import com.fr.design.mainframe.WidgetPropertyPane; import com.fr.design.mainframe.WidgetPropertyPane;
@ -97,6 +98,11 @@ public class FRAbsoluteBodyLayoutPropertiesGroupModel extends FRAbsoluteLayoutPr
if (row == 0) { if (row == 0) {
if (state == WBodyLayoutType.FIT.getTypeValue()) { if (state == WBodyLayoutType.FIT.getTypeValue()) {
return switch2FitBodyLayout(); return switch2FitBodyLayout();
} else {
XWFitLayout xfl = (XWFitLayout) xwAbsoluteLayout.getBackupParent();
if (xfl.toData().removeMargin()) {
DesignerContext.getDesignerFrame().getSelectedJTemplate().fireTargetModified();
}
} }
} }
if (row == 1) { if (row == 1) {

1
designer_form/src/com/fr/design/designer/properties/FRFitLayoutPropertiesGroupModel.java

@ -152,6 +152,7 @@ public class FRFitLayoutPropertiesGroupModel implements GroupModel {
wAbsoluteBodyLayout.setCompState(WAbsoluteLayout.STATE_FIXED); wAbsoluteBodyLayout.setCompState(WAbsoluteLayout.STATE_FIXED);
Component[] components = xfl.getComponents(); Component[] components = xfl.getComponents();
xfl.removeAll(); xfl.removeAll();
xfl.toData().removeMargin();
XWAbsoluteBodyLayout xwAbsoluteBodyLayout = new XWAbsoluteBodyLayout(wAbsoluteBodyLayout, new Dimension(0, 0)); XWAbsoluteBodyLayout xwAbsoluteBodyLayout = new XWAbsoluteBodyLayout(wAbsoluteBodyLayout, new Dimension(0, 0));
xfl.getLayoutAdapter().addBean(xwAbsoluteBodyLayout, 0, 0); xfl.getLayoutAdapter().addBean(xwAbsoluteBodyLayout, 0, 0);
for (Component component : components) { for (Component component : components) {

27
designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java

@ -250,26 +250,23 @@ public class MobileWidgetTable extends JTable {
return new String[0][0]; return new String[0][0];
} }
//选择的控件 WFitLayout body = (WFitLayout) designer.getRootComponent().toData();
XCreator selectedCreator = designer.getSelectionModel().getSelection().getSelectedCreator();
Widget selectedModel = selectedCreator != null ? selectedCreator.toData() : null;
if (selectedModel == null) { if (body == null || !body.acceptType(WSortLayout.class)) {
return new String[0][0]; return new String[0][0];
} }
// 选择的控件有两种类型,一种是WLayout,代表容器,一种是Widget,代表控件 List<String> mobileWidgetList = body.getOrderedMobileWidgetList();
if (selectedModel.acceptType(WSortLayout.class)) { String[][] widgetName = new String[mobileWidgetList.size() + 1][1];
List<String> mobileWidgetList = ((WSortLayout) selectedModel).getOrderedMobileWidgetList(); widgetName[0][0] = Inter.getLocText("FR-Designer_WidgetOrder");
String[][] widgetName = new String[mobileWidgetList.size() + 1][1]; for (int i = 0; i < mobileWidgetList.size(); i++) {
widgetName[0][0] = Inter.getLocText("FR-Designer_WidgetOrder"); widgetName[i + 1][0] = mobileWidgetList.get(i);
for (int i = 0; i < mobileWidgetList.size(); i++) {
widgetName[i + 1][0] = mobileWidgetList.get(i);
}
return widgetName;
} else {
return new String[0][0];
} }
if (!body.isSorted()) {
body.setSorted(true);
}
return widgetName;
} }
public boolean isCollapsed() { public boolean isCollapsed() {

29
designer_form/src/com/fr/design/mainframe/widget/ui/FormWidgetCardPane.java

@ -2,7 +2,14 @@ package com.fr.design.mainframe.widget.ui;
import com.fr.design.data.DataCreatorUI; import com.fr.design.data.DataCreatorUI;
import com.fr.design.designer.beans.events.DesignerEvent; import com.fr.design.designer.beans.events.DesignerEvent;
import com.fr.design.designer.creator.*; import com.fr.design.designer.creator.XCreator;
import com.fr.design.designer.creator.XCreatorUtils;
import com.fr.design.designer.creator.XLayoutContainer;
import com.fr.design.designer.creator.XWAbsoluteLayout;
import com.fr.design.designer.creator.XWFitLayout;
import com.fr.design.designer.creator.XWParameterLayout;
import com.fr.design.designer.creator.XWScaleLayout;
import com.fr.design.designer.creator.XWTitleLayout;
import com.fr.design.dialog.AttrScrollPane; import com.fr.design.dialog.AttrScrollPane;
import com.fr.design.dialog.BasicScrollPane; import com.fr.design.dialog.BasicScrollPane;
import com.fr.design.foldablepane.UIExpandablePane; import com.fr.design.foldablepane.UIExpandablePane;
@ -11,8 +18,8 @@ import com.fr.design.gui.frpane.AttributeChangeListener;
import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.FormDesigner;
import com.fr.design.widget.DataModify; import com.fr.design.widget.DataModify;
import com.fr.design.widget.Operator;
import com.fr.design.widget.FormWidgetDefinePaneFactoryBase; import com.fr.design.widget.FormWidgetDefinePaneFactoryBase;
import com.fr.design.widget.Operator;
import com.fr.design.widget.ui.designer.component.WidgetAbsoluteBoundPane; import com.fr.design.widget.ui.designer.component.WidgetAbsoluteBoundPane;
import com.fr.design.widget.ui.designer.component.WidgetBoundPane; import com.fr.design.widget.ui.designer.component.WidgetBoundPane;
import com.fr.form.ui.Widget; import com.fr.form.ui.Widget;
@ -79,14 +86,8 @@ public class FormWidgetCardPane extends AbstractAttrNoScrollPane {
} }
public XCreator findXcreator(FormDesigner designer) { public XCreator findXcreator(FormDesigner designer) {
int size = designer.getSelectionModel().getSelection().size(); XCreator creator = designer.getSelectionModel().getSelection().getSelectedCreator();
if (size == 0 || size == 1) { return creator != null ? creator : designer.getRootComponent();
XCreator creator = size == 0 ? designer.getRootComponent() : designer.getSelectionModel().getSelection()
.getSelectedCreator();
return creator;
} else {
return null;
}
} }
/** /**
@ -128,7 +129,7 @@ public class FormWidgetCardPane extends AbstractAttrNoScrollPane {
this.listener = new AttributeChangeListener() { this.listener = new AttributeChangeListener() {
@Override @Override
public void attributeChange() { public void attributeChange() {
if(!isExtraWidget){ if (!isExtraWidget) {
updateCreator(); updateCreator();
} }
updateWidgetBound(); updateWidgetBound();
@ -136,7 +137,7 @@ public class FormWidgetCardPane extends AbstractAttrNoScrollPane {
} }
}; };
if(isExtraWidget){ if (isExtraWidget) {
return; return;
} }
@ -191,7 +192,7 @@ public class FormWidgetCardPane extends AbstractAttrNoScrollPane {
innerWidget = crBoundsWidget.getWidget(); innerWidget = crBoundsWidget.getWidget();
} }
currentEditorDefinePane.populateBean(innerWidget); currentEditorDefinePane.populateBean(innerWidget);
if(widgetPropertyPane != null){ if (widgetPropertyPane != null) {
widgetPropertyPane.populate(innerWidget); widgetPropertyPane.populate(innerWidget);
} }
reinitAllListeners(); reinitAllListeners();
@ -212,7 +213,7 @@ public class FormWidgetCardPane extends AbstractAttrNoScrollPane {
fireValueChanged(); fireValueChanged();
} }
public void updateWidgetBound (){ public void updateWidgetBound() {
if (widgetBoundPane != null && ComparatorUtils.equals(getGlobalName(), Inter.getLocText("FR-Designer_Coords_And_Size"))) { if (widgetBoundPane != null && ComparatorUtils.equals(getGlobalName(), Inter.getLocText("FR-Designer_Coords_And_Size"))) {
widgetBoundPane.update(); widgetBoundPane.update();
designer.getEditListenerTable().fireCreatorModified(DesignerEvent.CREATOR_RESIZED); designer.getEditListenerTable().fireCreatorModified(DesignerEvent.CREATOR_RESIZED);

8
designer_form/src/com/fr/design/widget/ui/designer/DateEditorDefinePane.java

@ -2,6 +2,8 @@ package com.fr.design.widget.ui.designer;
import com.fr.base.FRContext; import com.fr.base.FRContext;
import com.fr.data.core.FormatField; import com.fr.data.core.FormatField;
import com.fr.design.border.UIRoundedBorder;
import com.fr.design.constants.UIConstants;
import com.fr.design.designer.IntervalConstants; import com.fr.design.designer.IntervalConstants;
import com.fr.design.designer.creator.XCreator; import com.fr.design.designer.creator.XCreator;
import com.fr.design.gui.ibutton.UIButtonGroup; import com.fr.design.gui.ibutton.UIButtonGroup;
@ -18,6 +20,7 @@ import com.fr.general.Inter;
import com.fr.stable.ArrayUtils; import com.fr.stable.ArrayUtils;
import javax.swing.*; import javax.swing.*;
import javax.swing.border.TitledBorder;
import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener; import javax.swing.event.ChangeListener;
import java.awt.*; import java.awt.*;
@ -87,8 +90,9 @@ public class DateEditorDefinePane extends DirectWriteEditorDefinePane<DateEditor
private JPanel createFormatPane(UIComboBox formatComboBox, UILabel sampleLabel){ private JPanel createFormatPane(UIComboBox formatComboBox, UILabel sampleLabel){
JPanel previewPane = FRGUIPaneFactory.createTitledBorderPane(Inter.getLocText("FR-Base_StyleFormat_Sample")); JPanel previewPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
previewPane.setLayout(new BorderLayout()); TitledBorder titledBorder = new TitledBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, 5), Inter.getLocText("FR-Base_StyleFormat_Sample"), 4, 2, this.getFont(), UIConstants.LINE_COLOR);
previewPane.setBorder(titledBorder);
JPanel sampleLabelWrapper = new JPanel(new BorderLayout()); JPanel sampleLabelWrapper = new JPanel(new BorderLayout());
sampleLabelWrapper.setBorder(BorderFactory.createEmptyBorder(0, SAMPLE_LABEL_PADDING, SAMPLE_LABEL_PADDING, SAMPLE_LABEL_PADDING)); sampleLabelWrapper.setBorder(BorderFactory.createEmptyBorder(0, SAMPLE_LABEL_PADDING, SAMPLE_LABEL_PADDING, SAMPLE_LABEL_PADDING));

2
designer_form/src/com/fr/design/widget/ui/designer/LabelDefinePane.java

@ -75,7 +75,7 @@ public class LabelDefinePane extends AbstractDataModify<Label> {
}; };
JPanel panel = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_W1, IntervalConstants.INTERVAL_L1); JPanel panel = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_W1, IntervalConstants.INTERVAL_L1);
JPanel boundsPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); JPanel boundsPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
panel.setBorder(BorderFactory.createEmptyBorder(10, 0, 10, 0)); panel.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0));
boundsPane.add(panel); boundsPane.add(panel);
return boundsPane; return boundsPane;
} }

44
designer_form/src/com/fr/design/widget/ui/designer/component/PaddingBoundPane.java

@ -14,6 +14,7 @@ import com.fr.general.Inter;
import javax.swing.BorderFactory; import javax.swing.BorderFactory;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.SwingConstants; import javax.swing.SwingConstants;
import java.awt.BorderLayout;
import java.awt.Component; import java.awt.Component;
@ -40,32 +41,37 @@ public class PaddingBoundPane extends BasicPane{
bottom.setGlobalName(Inter.getLocText("FR-Designer_Layout-Padding")); bottom.setGlobalName(Inter.getLocText("FR-Designer_Layout-Padding"));
left.setGlobalName(Inter.getLocText("FR-Designer_Layout-Padding")); left.setGlobalName(Inter.getLocText("FR-Designer_Layout-Padding"));
right.setGlobalName(Inter.getLocText("FR-Designer_Layout-Padding")); right.setGlobalName(Inter.getLocText("FR-Designer_Layout-Padding"));
double f = TableLayout.FILL; UILabel label = new UILabel(Inter.getLocText("FR-Designer_Layout-Padding"));
double p = TableLayout.PREFERRED; label.setBorder(BorderFactory.createEmptyBorder(IntervalConstants.INTERVAL_L1, 0, 0, 0));
double[] rowSize = {p, p, p, p}; label.setVerticalAlignment(SwingConstants.TOP);
double[] columnSize = {p, f}; JPanel panel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{
int[][] rowCount = {{1, 1}, {1, 1}, {1, 1}, {1, 1}}; new Component[]{label, createRightPane()}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_W2, IntervalConstants.INTERVAL_L1 );
Component[][] components = new Component[][]{
new Component[]{new UILabel(Inter.getLocText("FR-Designer_Layout-Padding")), createRightPane(top, bottom)},
new Component[]{null, createRightPane(new UILabel(Inter.getLocText("FR-Designer_Top"), SwingConstants.CENTER), new UILabel(Inter.getLocText("FR-Designer_Bottom"), SwingConstants.CENTER))},
new Component[]{null, createRightPane(left, right)},
new Component[]{null, createRightPane(new UILabel(Inter.getLocText("FR-Designer_Left"), SwingConstants.CENTER), new UILabel(Inter.getLocText("FR-Designer_Right"), SwingConstants.CENTER))},
};
JPanel panel = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_W2, IntervalConstants.INTERVAL_L1);
panel.setBorder(BorderFactory.createEmptyBorder(IntervalConstants.INTERVAL_L1, 0, IntervalConstants.INTERVAL_L1, 0));
this.add(panel); this.add(panel);
} }
public JPanel createRightPane(Component com1, Component com2){
public JPanel createRightPane(){
double f = TableLayout.FILL; double f = TableLayout.FILL;
double p = TableLayout.PREFERRED; double p = TableLayout.PREFERRED;
double[] rowSize = {p}; double[] rowSize = {p, p};
double[] columnSize = {f, f}; double[] columnSize = {f, f};
int[][] rowCount = {{1, 1}}; int[][] rowCount = {{1, 1}, {1, 1}};
Component[][] components = new Component[][]{ Component[][] components1 = new Component[][]{
new Component[]{com1, com2} new Component[]{top, bottom},
new Component[]{new UILabel(Inter.getLocText("FR-Designer_Top"), SwingConstants.CENTER), new UILabel(Inter.getLocText("FR-Designer_Bottom"), SwingConstants.CENTER)}
};
Component[][] components2 = new Component[][]{
new Component[]{left, right},
new Component[]{new UILabel(Inter.getLocText("FR-Designer_Left"), SwingConstants.CENTER), new UILabel(Inter.getLocText("FR-Designer_Right"), SwingConstants.CENTER)}
}; };
return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_L6, IntervalConstants.INTERVAL_L1); JPanel northPanel = TableLayoutHelper.createGapTableLayoutPane(components1, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_L6, IntervalConstants.INTERVAL_L6);
northPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, IntervalConstants.INTERVAL_L1, 0));
JPanel centerPanel = TableLayoutHelper.createGapTableLayoutPane(components2, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_L6, IntervalConstants.INTERVAL_L6);
JPanel panel = FRGUIPaneFactory.createBorderLayout_S_Pane();
panel.setBorder(BorderFactory.createEmptyBorder(IntervalConstants.INTERVAL_L1, 0, IntervalConstants.INTERVAL_L1, 0));
panel.add(northPanel, BorderLayout.NORTH);
panel.add(centerPanel, BorderLayout.CENTER);
return panel;
} }

Loading…
Cancel
Save