diff --git a/designer/src/com/fr/design/mainframe/ElementCasePaneDelegate.java b/designer/src/com/fr/design/mainframe/ElementCasePaneDelegate.java index 0f1c38bd2..8d25463ab 100644 --- a/designer/src/com/fr/design/mainframe/ElementCasePaneDelegate.java +++ b/designer/src/com/fr/design/mainframe/ElementCasePaneDelegate.java @@ -188,12 +188,12 @@ public class ElementCasePaneDelegate extends ElementCasePane { MenuDef menuDef = new MenuDef(KeySetUtils.CELL.getMenuKeySetName(), KeySetUtils.CELL.getMnemonic()); menuDef.addShortCut(new CellExpandAttrAction()); - menuDef.addShortCut(new CellWidgetAttrAction()); menuDef.addShortCut(new GlobalStyleMenuDef(this)); - menuDef.addShortCut(new ConditionAttributesAction()); - // 单元格形态 menuDef.addShortCut(DeprecatedActionManager.getPresentMenu(this)); + menuDef.addShortCut(new CellWidgetAttrAction()); + menuDef.addShortCut(new ConditionAttributesAction()); + menuDef.addShortCut(new HyperlinkAction()); menuDef.addShortCut(SeparatorDef.DEFAULT); menuDef.addShortCut(new MergeCellAction(this)); diff --git a/designer/src/com/fr/design/mainframe/bbs/UserInfoLabel.java b/designer/src/com/fr/design/mainframe/bbs/UserInfoLabel.java index c1dd4c876..b313ac1ba 100644 --- a/designer/src/com/fr/design/mainframe/bbs/UserInfoLabel.java +++ b/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.design.DesignerEnvManager; 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.imenu.UIMenuItem; import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.mainframe.DesignerContext; +import com.fr.design.utils.concurrent.ThreadFactoryBuilder; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.ComparatorUtils; import com.fr.general.DateUtils; import com.fr.general.Inter; import com.fr.general.SiteCenter; import com.fr.general.http.HttpClient; -import com.fr.stable.*; - -import javax.swing.*; -import java.awt.*; +import com.fr.stable.EncodeConstants; +import com.fr.stable.OperatingSystem; +import com.fr.stable.StableUtils; +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.MouseEvent; import java.io.UnsupportedEncodingException; +import java.lang.reflect.Constructor; +import java.lang.reflect.Method; import java.net.URI; import java.net.URLEncoder; import java.text.SimpleDateFormat; 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 @@ -36,6 +52,7 @@ import java.util.Date; */ public class UserInfoLabel extends UILabel { + private static final int VERSION_8 = 8; //默认查询消息时间, 30s private static final long CHECK_MESSAGE_TIME = 30 * 1000L; //默认论坛检测到更新后的弹出延迟时间 @@ -72,6 +89,10 @@ public class UserInfoLabel extends UILabel { } public UserInfoLabel(UserInfoPane userInfoPane) { + init(userInfoPane); + } + + private void init(UserInfoPane userInfoPane) { this.userInfoPane = userInfoPane; String userName = ConfigManager.getProviderInstance().getBbsUsername(); @@ -79,8 +100,10 @@ public class UserInfoLabel extends UILabel { this.setHorizontalAlignment(SwingConstants.CENTER); this.setText(userName); - LoginWebBridge.getHelper().setUILabel(UserInfoLabel.this); - PluginWebBridge.getHelper().setUILabel(UserInfoLabel.this); + if (StableUtils.getMajorJavaVersion() == VERSION_8) { + LoginWebBridge.getHelper().setUILabel(UserInfoLabel.this); + PluginWebBridge.getHelper().setUILabel(UserInfoLabel.this); + } UserLoginContext.addLoginContextListener(new LoginContextListener() { @Override @@ -104,8 +127,13 @@ public class UserInfoLabel extends UILabel { * showBBSDialog 弹出BBS资讯框 */ 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(1), namedThreadFactory); + threadPoolExecutor.execute(new Runnable() { @Override public void run() { // vito:最新mac10.12和javafx弹出框初始化时会有大几率卡死在native方法,这里先屏蔽一下。 @@ -127,18 +155,21 @@ public class UserInfoLabel extends UILabel { return; } String res = hc.getResponseText(); - if (res.indexOf(BBSConstants.UPDATE_KEY) == -1) { + if (!res.contains(BBSConstants.UPDATE_KEY)) { return; } try { - BBSDialog bbsLabel = new BBSDialog(DesignerContext.getDesignerFrame()); - bbsLabel.showWindow(SiteCenter.getInstance().acquireUrlByKind("bbs.popup")); + Class clazz = Class.forName("com.fr.design.mainframe.bbs.BBSDialog"); + 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())); - } catch (Throwable e) { + } catch (Throwable ignored) { + // ignored } } }); - showBBSThread.start(); } private void sleep(long millis) { diff --git a/designer/src/com/fr/design/mainframe/bbs/bbs.properties b/designer/src/com/fr/design/mainframe/bbs/bbs.properties index dc2ee5d73..ae39a3ee3 100644 --- a/designer/src/com/fr/design/mainframe/bbs/bbs.properties +++ b/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 GET_MESSAGE_URL=http://feedback.finedevelop.com:3000/bbs/message/count 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 -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 UPDATE_INFO_URL=http://bbs.finereport.com/source/plugin/infor/infor.html diff --git a/designer/src/com/fr/design/mainframe/errorinfo/ErrorInfoUploader.java b/designer/src/com/fr/design/mainframe/errorinfo/ErrorInfoUploader.java index 40e870047..1ab7e44de 100644 --- a/designer/src/com/fr/design/mainframe/errorinfo/ErrorInfoUploader.java +++ b/designer/src/com/fr/design/mainframe/errorinfo/ErrorInfoUploader.java @@ -35,7 +35,6 @@ public class ErrorInfoUploader { public static final String FOLDER_NAME = "errorInfo"; private static ErrorInfoUploader collector; - private static boolean licSupport = true; // 在一台不能上网的电脑里发现了10w个errorinfo... private static final int MAX_ERROR_SIZE = 2000; @@ -51,17 +50,7 @@ public class ErrorInfoUploader { }); } }); - - // 这个控制没啥意义, 主要在于宣传功能. - licSupport = VT4FR.AlphaFine.support(); - FRCoreContext.listenerLicense(new LicenseListener() { - - @Override - public void onChange() { - - licSupport = VT4FR.AlphaFine.support(); - } - }); + } private ErrorInfoUploader() { @@ -83,7 +72,8 @@ public class ErrorInfoUploader { // 从云中心更新最新的解决方案文件 private void checkUpdateSolution(){ - if (!licSupport) { + + if (!VT4FR.AlphaFine.support()) { return; } diff --git a/designer/src/com/fr/design/report/mobile/AppFitPreviewPane.java b/designer/src/com/fr/design/report/mobile/AppFitPreviewPane.java index bbb44f612..8ee6ebe93 100644 --- a/designer/src/com/fr/design/report/mobile/AppFitPreviewPane.java +++ b/designer/src/com/fr/design/report/mobile/AppFitPreviewPane.java @@ -1,5 +1,6 @@ package com.fr.design.report.mobile; +import com.fr.design.constants.UIConstants; import com.fr.design.dialog.BasicPane; import com.fr.design.gui.ilable.UILabel; import com.fr.design.layout.FRGUIPaneFactory; @@ -31,16 +32,16 @@ public class AppFitPreviewPane extends BasicPane{ } private void initCacheImage() { - cachedVerticalPreviewImage.add(new ImageIcon(IOUtils.readImage("/com/fr/design/images/dialog/appfit/V0.png"))); - cachedVerticalPreviewImage.add(new ImageIcon(IOUtils.readImage("/com/fr/design/images/dialog/appfit/V1.png"))); - cachedVerticalPreviewImage.add(new ImageIcon(IOUtils.readImage("/com/fr/design/images/dialog/appfit/V2.png"))); - cachedVerticalPreviewImage.add(new ImageIcon(IOUtils.readImage("/com/fr/design/images/dialog/appfit/V3.png"))); - cachedVerticalPreviewImage.add(new ImageIcon(IOUtils.readImage("/com/fr/design/images/dialog/appfit/V4.png"))); - cachedHorizonPreviewImage.add(new ImageIcon(IOUtils.readImage("/com/fr/design/images/dialog/appfit/H0.png"))); - cachedHorizonPreviewImage.add(new ImageIcon(IOUtils.readImage("/com/fr/design/images/dialog/appfit/H1.png"))); - cachedHorizonPreviewImage.add(new ImageIcon(IOUtils.readImage("/com/fr/design/images/dialog/appfit/H2.png"))); - cachedHorizonPreviewImage.add(new ImageIcon(IOUtils.readImage("/com/fr/design/images/dialog/appfit/H3.png"))); - cachedHorizonPreviewImage.add(new ImageIcon(IOUtils.readImage("/com/fr/design/images/dialog/appfit/H4.png"))); + cachedVerticalPreviewImage.add(new ImageIcon(UIConstants.APPFIT_V0)); + cachedVerticalPreviewImage.add(new ImageIcon(UIConstants.APPFIT_V1)); + cachedVerticalPreviewImage.add(new ImageIcon(UIConstants.APPFIT_V2)); + cachedVerticalPreviewImage.add(new ImageIcon(UIConstants.APPFIT_V3)); + cachedVerticalPreviewImage.add(new ImageIcon(UIConstants.APPFIT_V4)); + cachedHorizonPreviewImage.add(new ImageIcon(UIConstants.APPFIT_H0)); + cachedHorizonPreviewImage.add(new ImageIcon(UIConstants.APPFIT_H1)); + cachedHorizonPreviewImage.add(new ImageIcon(UIConstants.APPFIT_H2)); + cachedHorizonPreviewImage.add(new ImageIcon(UIConstants.APPFIT_H3)); + cachedHorizonPreviewImage.add(new ImageIcon(UIConstants.APPFIT_H4)); } private void initComponents() { diff --git a/designer/src/com/fr/design/widget/ui/DateEditorDefinePane.java b/designer/src/com/fr/design/widget/ui/DateEditorDefinePane.java index 5ef1e7a47..a42227328 100644 --- a/designer/src/com/fr/design/widget/ui/DateEditorDefinePane.java +++ b/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.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.gui.ibutton.UIButtonGroup; import com.fr.design.gui.icombobox.UIComboBox; @@ -16,6 +18,7 @@ import com.fr.general.Inter; import com.fr.stable.ArrayUtils; import javax.swing.*; +import javax.swing.border.TitledBorder; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import java.awt.*; @@ -78,8 +81,10 @@ public class DateEditorDefinePane extends DirectWriteEditorDefinePane { EastRegionContainerPane.getInstance().replaceCellAttrPane(CellElementPropertyPane.getInstance()); EastRegionContainerPane.getInstance().replaceCellElementPane(QuickEditorRegion.getInstance()); EastRegionContainerPane.getInstance().replaceWidgetSettingsPane(CellWidgetPropertyPane.getInstance()); + // 条件属性 + ConditionAttributesGroupPane conditionAttributesGroupPane = ConditionAttributesGroupPane.getInstance(); + conditionAttributesGroupPane.populate(editComponent); EastRegionContainerPane.getInstance().updateCellElementState(isSelectedOneCell()); - } - EastRegionContainerPane.getInstance().replaceCellAttrPane(CellElementPropertyPane.getInstance()); + } // 超级链接 HyperlinkGroupPane hyperlinkGroupPane = DesignerContext.getDesignerFrame().getSelectedJTemplate() .getHyperLinkPane(HyperlinkGroupPaneActionImpl.getInstance()); hyperlinkGroupPane.populate(editComponent); - // 条件属性 - ConditionAttributesGroupPane conditionAttributesGroupPane = ConditionAttributesGroupPane.getInstance(); - conditionAttributesGroupPane.populate(editComponent); } private boolean isSelectedOneCell() { diff --git a/designer/src/com/fr/start/Designer.java b/designer/src/com/fr/start/Designer.java index 7f1a7b8cb..2f484553a 100644 --- a/designer/src/com/fr/start/Designer.java +++ b/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.UIPopupMenu; 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.bbs.UserInfoLabel; 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.module.DesignModuleFactory; import com.fr.design.module.DesignerModule; +import com.fr.design.utils.concurrent.ThreadFactoryBuilder; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.ComparatorUtils; import com.fr.general.Inter; import com.fr.stable.ProductConstants; import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; -import com.fr.stable.web.ServletContext; import com.fr.stable.xml.XMLTools; -import javax.swing.*; +import javax.swing.JComponent; +import javax.swing.JPanel; 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.ActionListener; import java.io.File; 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 { private static final int TOOLBARPANEVGAP = -4; @@ -147,6 +160,7 @@ public class Designer extends BaseDesigner { private JPanel generateEmptyGap(final int width) { JPanel panel = new JPanel() { + @Override public Dimension getPreferredSize() { Dimension dim = super.getPreferredSize(); dim.width = width; @@ -163,6 +177,7 @@ public class Designer extends BaseDesigner { * * @return 按钮 */ + @Override public UIButton[] createUp() { return new UIButton[]{createSaveButton(), createUndoButton(), createRedoButton()}; } @@ -218,10 +233,12 @@ public class Designer extends BaseDesigner { private void createRunButton(UILargeToolbar largeToolbar) { run = new UIPreviewButton(new UIButton(UIConstants.PAGE_BIG_ICON) { + @Override public Dimension getPreferredSize() { return new Dimension(34, 34); } }, new UIButton(UIConstants.PREVIEW_DOWN) { + @Override public Dimension getPreferredSize() { return new Dimension(34, 10); } @@ -296,6 +313,7 @@ public class Designer extends BaseDesigner { * @param plus 对象 * @return 更新后的toolbar */ + @Override public JComponent resetToolBar(JComponent toolbarComponent, ToolBarMenuDockPlus plus) { //如果是处于权限编辑状态 if (BaseUtils.isAuthorityEditing()) { @@ -339,6 +357,7 @@ public class Designer extends BaseDesigner { * * @return 面板组件 */ + @Override public Component createBBSLoginPane() { if (userInfoPane == null) { userInfoPane = new UserInfoPane(); @@ -351,11 +370,13 @@ public class Designer extends BaseDesigner { * * @return 面板组件 */ + @Override public Component createAlphaFinePane() { return AlphaFinePane.getAlphaFinePane(); } + @Override protected SplashPane createSplashPane() { return new ReportSplashPane(); } @@ -363,6 +384,7 @@ public class Designer extends BaseDesigner { /** * 收集用户信息吗 */ + @Override protected void collectUserInformation() { //定制的就不弹出来了 if (!ComparatorUtils.equals(ProductConstants.APP_NAME, ProductConstants.DEFAULT_APP_NAME)) { @@ -395,14 +417,19 @@ public class Designer extends BaseDesigner { int status = envManager.getActiveKeyStatus(); //没有联网验证过 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(1), + namedThreadFactory); + threadPoolExecutor.execute(new Runnable() { @Override public void run() { ActiveKeyGenerator.onLineVerify(key); } }); - authThread.start(); } } @@ -443,6 +470,7 @@ public class Designer extends BaseDesigner { /** * 设计器退出时, 做的一些操作. */ + @Override public void shutDown() { InformationCollector collector = InformationCollector.getInstance(); collector.collectStopTime(); diff --git a/designer_base/src/com/fr/design/constants/UIConstants.java b/designer_base/src/com/fr/design/constants/UIConstants.java index 3df47f30a..21d7bcf3a 100644 --- a/designer_base/src/com/fr/design/constants/UIConstants.java +++ b/designer_base/src/com/fr/design/constants/UIConstants.java @@ -18,8 +18,19 @@ import java.awt.image.BufferedImage; public interface UIConstants { 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 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_EMPTYBORDER = BorderFactory.createEmptyBorder(0, 10, 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_HOVER = 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 TEXT_FILED_BORDER_SELECTED = new Color(0x3384f0); public static final Color SHEET_NORMAL = new Color(0xc8c8ca); diff --git a/designer_base/src/com/fr/design/extra/LoginWebBridge.java b/designer_base/src/com/fr/design/extra/LoginWebBridge.java index eef13830e..330b9fc03 100644 --- a/designer_base/src/com/fr/design/extra/LoginWebBridge.java +++ b/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.XMLHelper; import com.fr.design.gui.ilable.UILabel; +import com.fr.general.ComparatorUtils; import com.fr.general.SiteCenter; import com.fr.general.http.HttpClient; import com.fr.json.JSONObject; @@ -63,7 +64,7 @@ public class LoginWebBridge { private UILabel uiLabel; private WebEngine webEngine; - public LoginWebBridge() { + private LoginWebBridge() { } public static LoginWebBridge getHelper() { @@ -92,7 +93,7 @@ public class LoginWebBridge { return messageCount; } - public void setQqDialog(UIDialog qqDialog) { + public void setQQDialog(UIDialog qqDialog) { closeQQWindow(); this.qqDialog = qqDialog; } @@ -282,9 +283,9 @@ public class LoginWebBridge { try { JSONObject jo = new JSONObject(userInfo); String status = jo.get("status").toString(); - if (status.equals(LOGIN_SUCCESS)) { + if (ComparatorUtils.equals(status, LOGIN_SUCCESS)) { 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(); loginSuccess(username); @@ -293,18 +294,18 @@ public class LoginWebBridge { list.add(username); list.add(StringUtils.EMPTY); BBSLoginUtils.bbsLogin(list); - } else if (status.equals(LOGIN_FAILED)) { + } else if (ComparatorUtils.equals(status, LOGIN_FAILED)) { //账号没有QQ授权 closeQQWindow(); try { Desktop.getDesktop().browse(new URI(SiteCenter.getInstance().acquireUrlByKind("QQ_binding"))); - } catch (Exception exp) { + } catch (Exception ignored) { + // ignored } } } catch (Exception e) { FRContext.getLogger().error(e.getMessage()); } - } public void openUrlAtLocalWebBrowser(WebEngine eng, String url) { diff --git a/designer_base/src/com/fr/design/extra/PluginWebBridge.java b/designer_base/src/com/fr/design/extra/PluginWebBridge.java index 8f40280b1..fed3c6855 100644 --- a/designer_base/src/com/fr/design/extra/PluginWebBridge.java +++ b/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.extra.exe.GetPluginCategoriesExecutor; 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.ReadUpdateOnlineExecutor; import com.fr.design.extra.exe.SearchOnlineExecutor; 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.utils.concurrent.ThreadFactoryBuilder; import com.fr.general.FRLogger; import com.fr.general.Inter; import com.fr.general.SiteCenter; @@ -28,6 +29,7 @@ import javafx.scene.web.WebEngine; import javafx.stage.FileChooser; import javafx.stage.Stage; import netscape.javascript.JSObject; + import javax.swing.JDialog; import javax.swing.JOptionPane; import javax.swing.SwingUtilities; @@ -41,25 +43,34 @@ import java.util.List; import java.util.Map; import java.util.Set; 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组件的接口,用于安装,卸载,更新以及更改插件可用状态 */ 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 UIDialog uiDialog; private ACTIONS action; - private String ACTION = "action"; - private String KEYWORD = "keyword"; + private Map config; private WebEngine webEngine; private UILabel uiLabel; - private ExecutorService threadPoolExecutor = Executors.newSingleThreadExecutor(); + private ExecutorService threadPoolExecutor = new ThreadPoolExecutor(COREPOOLSIZE, MAXPOOLSIZE, + 0L, TimeUnit.MILLISECONDS, + new LinkedBlockingQueue(COREPOOLSIZE), + new ThreadFactoryBuilder().setNameFormat(THREAD_NAME_TEMPLATE).build()); /** * 动作枚举 diff --git a/designer_base/src/com/fr/design/extra/ShopManagerPane.java b/designer_base/src/com/fr/design/extra/ShopManagerPane.java index 857e96cc8..49d89733d 100644 --- a/designer_base/src/com/fr/design/extra/ShopManagerPane.java +++ b/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.general.Inter; -import javafx.embed.swing.JFXPanel; -import java.awt.*; +import java.awt.BorderLayout; +import java.awt.Component; /** * @author richie @@ -19,7 +19,7 @@ import java.awt.*; */ public class ShopManagerPane extends BasicPane { - public ShopManagerPane(JFXPanel webPane) { + public ShopManagerPane(Component webPane) { setLayout(new BorderLayout()); add(webPane, BorderLayout.CENTER); } diff --git a/designer_base/src/com/fr/design/extra/WebViewDlgHelper.java b/designer_base/src/com/fr/design/extra/WebViewDlgHelper.java index c394e7519..16eb61192 100644 --- a/designer_base/src/com/fr/design/extra/WebViewDlgHelper.java +++ b/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.StableUtils; -import javax.swing.*; -import java.awt.*; +import javax.swing.JOptionPane; +import javax.swing.SwingWorker; +import java.awt.BorderLayout; +import java.awt.Component; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; +import java.lang.reflect.Constructor; import java.net.HttpURLConnection; import java.util.concurrent.ExecutionException; /** - * Created by vito on 2016/9/28. + * 在合适的 jre 环境下创建带有 WebView 的窗口 + * + * @author vito + * @date 2016/9/28 */ public class WebViewDlgHelper { private static final String LATEST = "latest"; private static final String SHOP_SCRIPTS = "shop_scripts"; private static final int VERSION_8 = 8; - // 调试时,使用installHome = ClassLoader.getSystemResource("").getPath()代替下面 private static String installHome = FRContext.getCurrentEnv().getWebReportPath(); private static final int BYTES_NUM = 1024; @@ -146,24 +151,46 @@ public class WebViewDlgHelper { } public static void createQQLoginDialog() { - QQLoginWebPane webPane = new QQLoginWebPane(new File(installHome).getAbsolutePath()); - UIDialog qqlog = new QQLoginDialog(DesignerContext.getDesignerFrame(), webPane); - LoginWebBridge.getHelper().setQqDialog(qqlog); - qqlog.setVisible(true); + try { + Class clazz = Class.forName("com.fr.design.extra.QQLoginWebPane"); + Constructor constructor = clazz.getConstructor(String.class); + 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) { - BasicPane managerPane = new ShopManagerPane(new PluginWebPane(mainJsPath)); - UIDialog dlg = new ShopDialog(DesignerContext.getDesignerFrame(), managerPane); - PluginWebBridge.getHelper().setDialogHandle(dlg); - dlg.setVisible(true); + try { + Class clazz = Class.forName("com.fr.design.extra.PluginWebPane"); + Constructor constructor = clazz.getConstructor(String.class); + 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() { - LoginWebPane webPane = new LoginWebPane(installHome); - UIDialog qqdlg = new LoginDialog(DesignerContext.getDesignerFrame(), webPane); - LoginWebBridge.getHelper().setDialogHandle(qqdlg); - qqdlg.setVisible(true); + try { + Class clazz = Class.forName("com.fr.design.extra.LoginWebPane"); + Constructor constructor = clazz.getConstructor(String.class); + 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() { @@ -183,6 +210,7 @@ public class WebViewDlgHelper { PluginUtils.downloadShopScripts(scriptsId, new Process() { @Override public void process(Double integer) { + // 这个注释毫无意义,就是为了通过SonarQube } }); } catch (PluginVerifyException e) { diff --git a/designer_base/src/com/fr/design/gui/controlpane/UIControlPane.java b/designer_base/src/com/fr/design/gui/controlpane/UIControlPane.java index d1673d47a..66ce1865c 100644 --- a/designer_base/src/com/fr/design/gui/controlpane/UIControlPane.java +++ b/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) { super(); this.parentDialog = parentDialog; - originColor = UIConstants.UI_TOOLBAR_COLOR; + originColor = UIConstants.DIALOG_TITLEBAR_BACKGROUND; contentPane = new JPanel(); contentPane.setBackground(originColor); contentPane.setLayout(new BorderLayout()); titleLabel = new UILabel(title); + Font font = new Font("SimSun", Font.PLAIN, 12); + titleLabel.setFont(font); contentPane.add(titleLabel, BorderLayout.WEST); - contentPane.setBorder(new EmptyBorder(5, 10, 5, 0)); + contentPane.setBorder(new EmptyBorder(5, 14, 6, 0)); setLayout(new BorderLayout()); add(contentPane, BorderLayout.CENTER); @@ -466,7 +468,7 @@ public abstract class UIControlPane extends BasicPane implements UnrepeatedNameH @Override public Dimension getPreferredSize() { - return new Dimension(super.getPreferredSize().width, 25); + return new Dimension(super.getPreferredSize().width, 28); } } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/gui/date/UICalendarPanel.java b/designer_base/src/com/fr/design/gui/date/UICalendarPanel.java index 137209b90..e11b908db 100644 --- a/designer_base/src/com/fr/design/gui/date/UICalendarPanel.java +++ b/designer_base/src/com/fr/design/gui/date/UICalendarPanel.java @@ -1,30 +1,48 @@ 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.background.GradientBackground; import com.fr.design.constants.UIConstants; import com.fr.design.gui.ibutton.UIButton; 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.layout.FRGUIPaneFactory; +import com.fr.design.utils.gui.GUIPaintUtils; import com.fr.general.Inter; import com.fr.stable.Constants; 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 { 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) { + this.selectedDate = selectedDate; this.isTimePicker = isTimerPicker; calendar = Calendar.getInstance(); @@ -84,11 +103,8 @@ public class UICalendarPanel extends JPanel { if (isTimerPicker) { setPreferredSize(new Dimension(218, 209)); add(BorderLayout.SOUTH, createSouthPane()); - updateDays(); updateHMS(); } - - updateDays(); } // << < yyyy/MM/dd > >> diff --git a/designer_base/src/com/fr/design/gui/icombobox/TextFontComboBox.java b/designer_base/src/com/fr/design/gui/icombobox/TextFontComboBox.java index f2d4b1e29..a0b3f056b 100644 --- a/designer_base/src/com/fr/design/gui/icombobox/TextFontComboBox.java +++ b/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.stable.StringUtils; -import javax.swing.*; +import javax.swing.ComboBoxEditor; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; -import java.awt.*; +import java.awt.Component; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; @@ -61,7 +61,12 @@ public class TextFontComboBox extends ExtendedComboBox { private volatile boolean setting = false; public FilterComboBoxEditor() { - textField = new UITextField(15); + textField = new UITextField(15){ + @Override + public boolean shouldResponseChangeListener() { + return false; + } + }; textField.getDocument().addDocumentListener(this); } diff --git a/designer_base/src/com/fr/design/gui/style/FRFontPane.java b/designer_base/src/com/fr/design/gui/style/FRFontPane.java index 6aa5338ae..d7d445ddc 100644 --- a/designer_base/src/com/fr/design/gui/style/FRFontPane.java +++ b/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.icombobox.LineComboBox; import com.fr.design.gui.icombobox.UIComboBox; +import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; 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), 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 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 JPanel buttonPane; private JPanel isSuperOrSubPane; @@ -104,9 +107,11 @@ public class FRFontPane extends AbstractBasicStylePane implements GlobalNameObse if (line == Constants.LINE_NONE) { underline.setSelected(false); cly.show(linePane, "none"); + linePane.setPreferredSize(HIDE_SIZE); } else { underline.setSelected(true); cly.show(linePane, "combobox"); + linePane.setPreferredSize(UNDER_LINE_SIZE); this.underlineCombo.setSelectedLineStyle(line); } // effects @@ -297,8 +302,14 @@ public class FRFontPane extends AbstractBasicStylePane implements GlobalNameObse public void stateChanged(ChangeEvent e) { CardLayout cly = (CardLayout) linePane.getLayout(); cly.show(linePane, underline.isSelected() ? "combobox" : "none"); + if(underline.isSelected()){ + linePane.setPreferredSize(UNDER_LINE_SIZE); + }else{ + linePane.setPreferredSize(HIDE_SIZE); + } } }); + return linePane; } diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index 1658fecd6..736d53e7c 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -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_Connection-Failure=Connection failure, check your network status FR-Designer-BBSLogin_Connection-Failure-Tip=Tip @@ -591,13 +590,13 @@ FR-Designer_Style=Style FR-Designer_Color=Color FR-Designer_Border=Border FR-Designer_Background-Pattern=Pattern -FR-Designer_SimpleDetail_Report= -FR-Designer_SimpleCross_Report= +FR-Designer_SimpleDetail_Report=Simple list +FR-Designer_SimpleCross_Report=Simple cross table FR-Designer_Edit_Button_ToolBar=Edit Button ToolBar FR-Designer_Remove_Button_ToolBar=Remove Button ToolBar -FR-Designer_Get-CubeGetting= -FR-Designer_DoubleLayer_Report= -FR-Designer_Get-Cube= +FR-Designer_Get-CubeGetting=Getting cube +FR-Designer_DoubleLayer_Report=Double deck header +FR-Designer_Get-Cube=Getting the cube CellWrite-InsertRow_NULL=Null DashBoard-ChartFloat=Chart contact_info=Contact information (optional) @@ -1246,7 +1245,7 @@ FR-Designer-Cell_Group=Cell Group Week=Week PageSetup-Orientation=Orientation M-Open_Recent=Open Recent -NNormal= +NNormal=normal Integer=Integer Select_The_Source_To_Save=Select Source to Save 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 Ratio=Ratio DBCP_TEST_ON_BORROW=Test before Getting Connections -FR-Designer_layerIndex= +FR-Designer_layerIndex=Dependent layers WEB-Write_Setting=Filling Settings 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 @@ -1760,7 +1759,7 @@ FR-Base_sure_remove_item=Are you sure to delete the selected item Component_Scale=Component Scale Hyperlink-Use_CJK_to_encode_parameter=Use CJK to process parameter LOG-Has_Been_Openned=Report Has Been Openned -FR-Designer-Dependence= +FR-Designer-Dependence=Dependent environment ECP_error_pwd=Password Error REPORTLET=Parameter of access path to template 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 M_Report-Report_Columns=Multi-columns/lines Unit_Hundred=Hundred -FR-Designer_DataTable-Build= +FR-Designer_DataTable-Build=Speed layered construction Widget-Form_Widget_Config=Form control Server-version-tip-moreInfo=Conform the version numbers of FineReport Designer and the deployment server are consistent, in order to avoid the problems caused by inconsistent versions. If you open the template produced by higher designer vision, error may occurs or the original template properties missed. If the Designer Version you used to create the template is higher than the final deployment server version, the server may not be able to properly load the template. Actions=Task @@ -1819,7 +1818,7 @@ BackgroundTexture-Cork=Cork M_Format-Data_Map=Data Dictionary FR-mobile_native_analysis=native analysis HighLight=High Light -FR-Designer_Dropdown-More-Preview= +FR-Designer_Dropdown-More-Preview=Pull down to get more previews local=local FR-Designer_Gradation=Gradation PageSetup-Finis_Start_Column=Duplicate Last Column @@ -1942,7 +1941,7 @@ Widget-User_Defined=Predefine Url_location=Absolute path Disk_File=Disk File Inside=Inside -FR-Designer_filedChosen= +FR-Designer_filedChosen=Dependent fields ServerM-Predefined_Styles=Predefined Styles is_need_word_adjust=Word Auto Adjust 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_Specify_Tip=Specify_Tip 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-Basic_Dynamic_Parameter_Injection=Injection FR-Designer_Label=Label @@ -2131,17 +2130,17 @@ FR-Designer_Insert_Cell_Element=Insert Cell Element FR-Designer_Add_Condition=Add Condition FR-Designer_Use_Params_Template=use parameter template FR-Designer_Label_Name=label name -FR-Designer_Widget_Visible= -FR-Designer_Widget_Display_Report_Tool= -FR-Designer_Cell_Value= -FR-Designer_Cell_Visible= -FR-Designer_Widget_Formula= -FR-Designer_Show= -FR-Designer_Widget_Position= -FR-Designer_Float_Visible= -FR-Designer_Widget_String= -FR-Designer_Widget_Field= -FR-Designer_Widget_Enabled= +FR-Designer_Widget_Visible=Visible control +FR-Designer_Widget_Display_Report_Tool=Display report block toolbar +FR-Designer_Cell_Value=cell value +FR-Designer_Cell_Visible=Cell visible +FR-Designer_Widget_Formula=formula +FR-Designer_Show=display +FR-Designer_Widget_Position=Control location +FR-Designer_Float_Visible=Suspended elements are visible +FR-Designer_Widget_String=Character string +FR-Designer_Widget_Field=field +FR-Designer_Widget_Enabled=Control available FR-Designer_Export_Background= FR-Designer_Print_Background= FR-Designer_Sheet_Label_Page_Display_Position= diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 898c1fb3c..4b43d92f4 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -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_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 @@ -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_Mobile_Form_Analysis_Annotation=\u6CE8\u91CB\uFF1A\u53EF\u4EE5\u901A\u904E\u8A72\u5C6C\u6027\u63A7\u5236\u8868\u55AE\u5728APP\u4E2D\u7684\u89E3\u6790\u65B9\u5F0F\u3002 FR-Designer_Mobile_Report_Analysis_Annotation=\u6CE8\u91CB\uFF1A\u53EF\u4EE5\u901A\u904E\u8A72\u5C6C\u6027\u63A7\u5236\u5831\u8868\u5728APP\u4E2D\u7684\u89E3\u6790\u65B9\u5F0F\uFF0C\u53EA\u652F\u6301\u5206\u9801\u9810\u89BD\uFF0C\u586B\u5831\u9810\u89BD\u6642\u5C6C\u6027\u7121\u6548\u3002 -FR-Designer_Background_Null= -FR-Designer_Background_Color= -FR-Designer_Background_Texture= -FR-Designer_Background_Pattern= -FR-Designer_Background_Gradient_Color= -FR-Designer_Background_Image= -FR-Designer_Background_Clear= -FR-Designer_Background_Image_Select= +FR-Designer_Background_Null=\u6C92\u6709\u80CC\u666F +FR-Designer_Background_Color=\u984F\u8272 +FR-Designer_Background_Texture=\u7D0B\u7406 +FR-Designer_Background_Pattern=\u5716\u6848 +FR-Designer_Background_Gradient_Color=\u6F38\u8B8A\u8272 +FR-Designer_Background_Image=\u5716\u7247 +FR-Designer_Background_Clear=\u6E05\u9664 +FR-Designer_Background_Image_Select=\u9078\u64C7\u5716\u7247 FR-Designer_Too_Large_To_Paste=\u7D44\u4EF6\u5927\u5C0F\u8D85\u51FA\u908A\u754C\uFF0C\u7121\u6CD5\u7C98\u8CBC\uFF01 FR-Designer_Too_Small_To_Paste=\u6B64\u8655\u7121\u6CD5\u7C98\u8CBC\uFF0C\u5C0F\u65BC\u7D44\u4EF6\u6700\u5C0F\u9AD8\u5EA6\uFF01 -FR-Designer_Initial_Background_Tips= -FR-Designer_Mouse_Move_Tips= -FR-Designer_Mouse_Click_Tips= +FR-Designer_Initial_Background_Tips=\u6309\u9215\u7684\u521D\u59CB\u80CC\u666F +FR-Designer_Mouse_Move_Tips=\u6ED1\u9F20\u79FB\u52D5\u5230\u6309\u9215\u4E0A\u7684\u80CC\u666F\uFF0C\u82E5\u7121\u5247\u4E0D\u6539\u8B8A\u80CC\u666F +FR-Designer_Mouse_Click_Tips=\u6ED1\u9F20\u9EDE\u9078\u6309\u9215\u6642\u80CC\u666F\uFF0C\u82E5\u7121\u5247\u4E0D\u6539\u8B8A\u80CC\u666F FR-Designer_AxisReversed=\u8EF8\u9006\u5E8F FR-Designer_Logarithmic=\u5C0D\u6578\u523B\u5EA6 FR-Designer_Chart_Log_Base=\u5E95\u6578 @@ -584,20 +583,20 @@ FR-Designer_Style=\u6A23\u5F0F FR-Designer_Color=\u984F\u8272 FR-Designer_Border=\u6846\u7DDA FR-Designer_Background-Pattern=\u5716\u6848 -FR-Designer_SimpleDetail_Report= -FR-Designer_Reset= -FR-Designer_AllCategories= -FR-Designer-Selected_Widget= -FR-Designer_SimpleCross_Report= -FR-Designer_LocalWidget= +FR-Designer_SimpleDetail_Report=\u7C21\u55AE\u660E\u7D30\u8868 +FR-Designer_Reset=\u53D6\u6D88\u522A\u9664 +FR-Designer_AllCategories=\u6240\u6709\u5206\u985E +FR-Designer-Selected_Widget=\u7576\u524D\u63A7\u5236\u5143\u4EF6 +FR-Designer_SimpleCross_Report=\u7C21\u55AE\u4EA4\u53C9\u8868 +FR-Designer_LocalWidget=\u672C\u5730\u5143\u4EF6\u5EAB FR-Designer_Edit_Button_ToolBar=\u7DE8\u8F2F\u6309\u9215\u6240\u5728\u5DE5\u5177\u6B04 FR-Designer_Remove_Button_ToolBar=\u79FB\u9664\u6309\u9215\u6240\u5728\u5DE5\u5177\u6B04 -FR-Designer_Install_Template= -FR-Designer_Allow-Blank= -FR-Designer_Delete_Template= -FR-Designer_Download_Template= -FR-Designer_DoubleLayer_Report= -FR-Designer_Validate= +FR-Designer_Install_Template=\u5B89\u88DD +FR-Designer_Allow-Blank=\u5141\u8A31\u70BA\u7A7A +FR-Designer_Delete_Template=\u522A\u9664 +FR-Designer_Download_Template=\u4E0B\u8F09 +FR-Designer_DoubleLayer_Report=\u96D9\u5C64\u8868\u982D +FR-Designer_Validate=\u6821\u9A57 CellWrite-InsertRow_NULL=\u7A7A\u503C DashBoard-ChartFloat=\u5716\u8868 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 CellWrite-InsertRow_DEFAULT=\u9810\u8A2D\u503C 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 File-File_Size_Limit=\u6A94\u6848\u5927\u5C0F\u9650\u5236 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 Hyperlink-Use_CJK_to_encode_parameter=\u4F7F\u7528CJK\u8655\u7406\u53C3\u6578 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 REPORTLET=\u8A2A\u554F\u6A21\u677F\u7684\u8DEF\u5F91\u7684\u53C3\u6578\u3002 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_Configured_Roles=\u5DF2\u914D\u7F6E\u89D2\u8272 FR-Designer_Add_Hyperlink=\u65B0\u589E\u9023\u63A5 -FR-Designer_Scale_selfAdaptButton= -FR-Designer_Scale_customButton= -FR-Designer_FRFont_Subscript= -FR-Designer_FRFont_Superscript= -FR-Designer_FRFont_Shadow= -FR-Designer_FRFont_Strikethrough= -FR-Designer_FRFont_Underline= -FR-Designer_FRFont_bold= -FR-Designer_FRFont_italic= -FR-Designer_FRFont_Foreground= -FR-Designer_FRFont_Style= -FR-Designer_FRFont_plain= -FR-Designer_FRFont_bolditalic= -FR-Designer_outBorder= -FR-Designer_inBorder= -FR-Designer_ExpandD_Up_Father_Cell= -FR-Designer_ExpandD_Expand_Direction= -FR-Designer_Expand= -FR-Designer_ExpendSort= -FR-Designer_ExpandD_Expandable= -FR-Designer_Read_failure= -FR-Designer_Image_Layout= -FR-Designer_StyleAlignment_Text_Style= -FR-Designer_StyleAlignment_Text_Rotation= -FR-Designer_Style_Left_Indent= -FR-Designer_Style_Right_Indent= -FR-Designer_Style_Spacing_Before= -FR-Designer_Style_Spacing_After= -FR-Designer_Style_Line_Spacing= -FR-Designer_Left= -FR-Designer_Right= -FR-Designer_Front= -FR-Designer_Behind= -FR-Designer_StyleAlignment_Wrap_Text= -FR-Designer_StyleAlignment_Single_Line= -FR-Designer_StyleAlignment_Single_Line(Adjust_Font)= -FR-Designer_StyleAlignment_Multi_Line(Adjust_Font)= -FR-Designer_Auto_Adjust_Height= -FR-Designer_Auto_Adjust_Wdith= -FR-Designer_Type_Set= -FR-Designer_Dic_Data_Query= -FR-Designer_Dictionary_Dynamic_SQL= -FR-Designer_Datasource_From_Database= -FR-Designer_CellWrite_InsertRow_NULL= -FR-Designer_CellWrite_InsertRow_COPY= -FR-Designer_CellWrite_InsertRow_Policy= -FR-Designer_CellWrite_Page_Before_Row= -FR-Designer_CellWrite_Page_After_Row= -FR-Designer_CellWrite_Page_Before_Column= -FR-Designer_CellWrite_Page_After_Column= -FR-Designer_CellPage_Can_Break_On_Paginate= -FR-Designer_CellPage_Repeat_Content_When_Paging= -FR-Designer_CellWrite_Preview_Cell_Content= -FR-Designer_CellWrite_Print_Content= -FR-Designer_CellWrite_Print_Background= -FR-Designer_CellWrite_Show_As_Image= -FR-Designer_CellWrite_Show_As_HTML= -FR-Designer_Datasource_Other_Attributes= -FR-Designer_Not_use_a_cell_attribute_table_editing= -FR-Designer_CellElement_Property_Table= -FR-Designer_T_Insert_Float= -FR-Designer_Add_FloatElement= -FR-Designer_Insert_Image= -FR-Designer_Insert_Chart= -FR-Designer_Insert_Text= -FR-Designer_Insert_Formula= -FR-Designer_Scale_Down= -FR-Designer_Scale_Up= -FR-Designer_Scale_Slider= -FR-Designer_Scale_Grade= -FR-Designer_AlphaFine_EnableInternet= -FR-Designer_Scale_EnlargeOrReduce= -FR-Designer-StyleAlignment_Style_PartSpacing= -FR-Designer_Use_Params_Template= -FR-Designer_Label_Name= -FR-Designer_Add_Event= +FR-Designer_Scale_selfAdaptButton=\u6070\u597D\u5BB9\u7D0D\u9078\u5B9A\u5340\u57DF +FR-Designer_Scale_customButton=\u81EA\u5B9A\u7FA9 +FR-Designer_FRFont_Subscript=\u4E0B\u6A19 +FR-Designer_FRFont_Superscript=\u4E0A\u6A19 +FR-Designer_FRFont_Shadow=\u9670\u5F71 +FR-Designer_FRFont_Strikethrough=\u522A\u9664\u7DDA +FR-Designer_FRFont_Underline=\u4E0B\u5283\u7DDA +FR-Designer_FRFont_bold=\u52A0\u7C97 +FR-Designer_FRFont_italic=\u659C\u9AD4 +FR-Designer_FRFont_Foreground=\u984F\u8272 +FR-Designer_FRFont_Style=\u5B57\u5F62 +FR-Designer_FRFont_plain=\u5E38\u898F +FR-Designer_FRFont_bolditalic=\u52A0\u7C97\u50BE\u659C +FR-Designer_outBorder=\u5916\u908A\u6846 +FR-Designer_inBorder=\u5167\u908A\u6846 +FR-Designer_ExpandD_Up_Father_Cell=\u4E0A\u7236\u683C +FR-Designer_ExpandD_Expand_Direction=\u64F4\u5145\u5957\u4EF6\u65B9\u5411 +FR-Designer_Expand=\u64F4\u5145\u5957\u4EF6 +FR-Designer_ExpendSort=\u64F4\u5145\u5957\u4EF6\u5F8C\u6392\u5E8F +FR-Designer_ExpandD_Expandable=\u53EF\u4F38\u5C55\u6027 +FR-Designer_Read_failure=\u8B80\u53D6\u5931\u6557\uFF0C\u53EF\u80FD\u539F\u59CB\u6A94\u5DF2\u640D\u58DE +FR-Designer_Image_Layout=\u5716\u7247\u4F48\u5C40 +FR-Designer_StyleAlignment_Text_Style=\u6587\u5B57\u63A7\u5236 +FR-Designer_StyleAlignment_Text_Rotation=\u6587\u5B57\u65B9\u5411 +FR-Designer_Style_Left_Indent=\u5DE6\u7E2E\u6392 +FR-Designer_Style_Right_Indent=\u53F3\u7E2E\u6392 +FR-Designer_Style_Spacing_Before=\u6BB5\u524D +FR-Designer_Style_Spacing_After=\u6BB5\u5F8C +FR-Designer_Style_Line_Spacing=\u884C\u9593\u8DDD +FR-Designer_Left=\u5DE6 +FR-Designer_Right=\u53F3 +FR-Designer_Front=\u524D +FR-Designer_Behind=\u5F8C +FR-Designer_StyleAlignment_Wrap_Text=\u81EA\u52D5\u63DB\u884C +FR-Designer_StyleAlignment_Single_Line=\u55AE\u884C\u986F\u793A +FR-Designer_StyleAlignment_Single_Line(Adjust_Font)=\u55AE\u884C\u986F\u793A(\u8ABF\u6574\u5B57\u578B) +FR-Designer_StyleAlignment_Multi_Line(Adjust_Font)=\u591A\u884C\u986F\u793A(\u8ABF\u6574\u5B57\u578B) +FR-Designer_Auto_Adjust_Height=\u81EA\u52D5\u8ABF\u6574\u884C\u9AD8 +FR-Designer_Auto_Adjust_Wdith=\u81EA\u52D5\u8ABF\u6574\u5217\u5BEC +FR-Designer_Type_Set=\u578B\u5225\u8A2D\u5B9A +FR-Designer_Dic_Data_Query=\u8CC7\u6599\u67E5\u8A62 +FR-Designer_Dictionary_Dynamic_SQL=\u52D5\u614BSQL +FR-Designer_Datasource_From_Database=\u8CC7\u6599\u5EAB\u8868 +FR-Designer_CellWrite_InsertRow_NULL=\u7A7A\u503C +FR-Designer_CellWrite_InsertRow_COPY=\u539F\u503C +FR-Designer_CellWrite_InsertRow_Policy=\u63D2\u5165\u884C\u7B56\u7565 +FR-Designer_CellWrite_Page_Before_Row=\u884C\u524D\u5206\u9801 +FR-Designer_CellWrite_Page_After_Row=\u884C\u5F8C\u5206\u9801 +FR-Designer_CellWrite_Page_Before_Column=\u5217\u524D\u5206\u9801 +FR-Designer_CellWrite_Page_After_Column=\u5217\u5F8C\u5206\u9801 +FR-Designer_CellPage_Can_Break_On_Paginate=\u5206\u9801\u6642\u53EF\u4EE5\u65B7\u958B +FR-Designer_CellPage_Repeat_Content_When_Paging=\u5206\u9801\u65B7\u958B\u6642\u503C\u91CD\u8907\u986F\u793A +FR-Designer_CellWrite_Preview_Cell_Content=\u9810\u89BD\u55AE\u5143\u683C\u5167\u5BB9 +FR-Designer_CellWrite_Print_Content=\u5217\u5370/\u532F\u51FA\u55AE\u5143\u683C\u5167\u5BB9 +FR-Designer_CellWrite_Print_Background=\u5217\u5370/\u532F\u51FA\u55AE\u5143\u683C\u80CC\u666F +FR-Designer_CellWrite_Show_As_Image=\u7528\u5716\u7247\u986F\u793A\u5167\u5BB9 +FR-Designer_CellWrite_Show_As_HTML=\u7528HTML\u986F\u793A\u5167\u5BB9 +FR-Designer_Datasource_Other_Attributes=\u5176\u4ED6\u5C6C\u6027 +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=\u55AE\u5143\u683C\u5C6C\u6027\u8868 +FR-Designer_T_Insert_Float=\u63D2\u5165\u61F8\u6D6E\u5143\u7D20 +FR-Designer_Add_FloatElement=\u65B0\u589E\u5143\u7D20 +FR-Designer_Insert_Image=\u63D2\u5165\u5716\u7247 +FR-Designer_Insert_Chart=\u63D2\u5165\u5716\u8868 +FR-Designer_Insert_Text=\u63D2\u5165\u666E\u901A\u6587\u5B57 +FR-Designer_Insert_Formula=\u63D2\u5165\u516C\u5F0F +FR-Designer_Scale_Down=\u7E2E\u5C0F +FR-Designer_Scale_Up=\u653E\u5927 +FR-Designer_Scale_Slider=\u7E2E\u653E\u6ED1\u584A +FR-Designer_Scale_Grade=\u7E2E\u653E\u7D1A\u5225\uFF0C\u55AE\u64CA\u5F8C\u8ABF\u7BC0\u986F\u793A\u6BD4\u4F8B\u3002 +FR-Designer_AlphaFine_EnableInternet=\u806F\u7DB2 +FR-Designer_Scale_EnlargeOrReduce=\u7E2E\u653E +FR-Designer-StyleAlignment_Style_PartSpacing=\u6BB5\u9593\u8DDD +FR-Designer_Use_Params_Template=\u4F7F\u7528\u5E38\u7528\u5F15\u6578\u7D44\u5408 +FR-Designer_Label_Name=\u6A19\u7C64\u540D\u7A31 +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_Dynamic_Parameter=\u52D5\u614B\u53C3\u6578 -FR-Designer_Remove_Item= -FR-Designer_Widget_No_Repeat= -FR-Designer_Widget_Error_Tip= -FR-Designer_Widget_Return_Leaf= -FR-Designer_Widget_Return_Path= -FR-Designer_Widget_Display_Position= -FR-Designer_Size_Limit= -FR-Designer_Widget_Name= -FR-Designer_Coords_And_Size= -FR-Designer_Barcode_Size= +FR-Designer_Remove_Item=\u522A\u9664\u9078\u4E2D +FR-Designer_Widget_No_Repeat=\u53BB\u9664\u91CD\u8907\u9805 +FR-Designer_Widget_Error_Tip=\u932F\u8AA4\u63D0\u793A +FR-Designer_Widget_Return_Leaf=\u7D50\u679C\u8FD4\u56DE\u8449\u5B50\u7BC0\u9EDE +FR-Designer_Widget_Return_Path=\u7D50\u679C\u8FD4\u56DE\u5B8C\u6574\u5C64\u6B21\u8DEF\u5F91 +FR-Designer_Widget_Display_Position=\u986F\u793A\u4F4D\u7F6E +FR-Designer_Size_Limit=\u5927\u5C0F\u9650\u5236 +FR-Designer_Widget_Name=\u63A7\u5236\u5143\u4EF6\u540D\u7A31 +FR-Designer_Coords_And_Size=\u5EA7\u6A19\XB7\u5C3A\u5BF8 +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_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 M-New_FormBook=\u65B0\u589E\u6C7A\u7B56\u5831\u8868 FR-Designer-AlphaFine_NO_Result=\u7121\u641C\u7D22\u7D50\u679C -FR-Designer-Download_Online_Sources= -FR-Designer_Select_Color= +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=\u9078\u64C7\u984F\u8272 FR-Designer-Basic_Dynamic_Parameter_Injection=\u6CE8\u5165 FR-Designer_Label=\u6A19\u7C3D FR-Designer_Widgetname=\u63A7\u5236\u9805\u540D FR-Designer_Insert_Cell_Element=\u63D2\u5165\u5143\u7D20 -FR-Designer_Add_Condition= -FR-Designer_Widget_Visible= -FR-Designer_Widget_Display_Report_Tool= -FR-Designer_Cell_Value= -FR-Designer_Cell_Visible= -FR-Designer_Widget_Formula= -FR-Designer_Show= -FR-Designer_Widget_Position= -FR-Designer_Float_Visible= -FR-Designer_Widget_String= -FR-Designer_Widget_Field= -FR-Designer_Widget_Enabled= +FR-Designer_Add_Condition=\u65B0\u589E\u689D\u4EF6 +FR-Designer_Widget_Visible=\u63A7\u5236\u5143\u4EF6\u53EF\u898B +FR-Designer_Widget_Display_Report_Tool=\u986F\u793A\u5831\u8868\u584A\u5DE5\u5177\u6B04 +FR-Designer_Cell_Value=\u55AE\u5143\u683C\u503C +FR-Designer_Cell_Visible=\u55AE\u5143\u683C\u53EF\u898B +FR-Designer_Widget_Formula=\u516C\u5F0F +FR-Designer_Show=\u986F\u793A +FR-Designer_Widget_Position=\u63A7\u5236\u5143\u4EF6\u4F4D\u7F6E +FR-Designer_Float_Visible=\u61F8\u6D6E\u5143\u7D20\u53EF\u898B +FR-Designer_Widget_String=\u5B57\u4E32 +FR-Designer_Widget_Field=\u6B04\u4F4D +FR-Designer_Widget_Enabled=\u63A7\u5236\u5143\u4EF6\u53EF\u7528 FR-Designer_Export_Background= FR-Designer_Print_Background= FR-Designer_Sheet_Label_Page_Display_Position= diff --git a/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java b/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java index 258a9e22b..f43419d47 100644 --- a/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java +++ b/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 TutorialAction()); } - shortCuts.add(SeparatorDef.DEFAULT); - shortCuts.add(SeparatorDef.DEFAULT); - if (ComparatorUtils.equals(ProductConstants.APP_NAME, FINEREPORT)) { - shortCuts.add(SeparatorDef.DEFAULT); - } if (AlphaFineConfigManager.isALPHALicAvailable()) { shortCuts.add(new AlphaFineAction()); - shortCuts.add(SeparatorDef.DEFAULT); } shortCuts.add(SeparatorDef.DEFAULT); shortCuts.add(new AboutAction()); diff --git a/designer_base/src/com/fr/design/utils/concurrent/ThreadFactoryBuilder.java b/designer_base/src/com/fr/design/utils/concurrent/ThreadFactoryBuilder.java new file mode 100644 index 000000000..3af213ac9 --- /dev/null +++ b/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: + *
    + *
  • whether threads should be marked as {@linkplain Thread#setDaemon daemon} threads + *
  • a {@linkplain ThreadFactoryBuilder#setNameFormat naming format} + *
  • a {@linkplain Thread#setPriority thread priority} + *
  • an {@linkplain Thread#setUncaughtExceptionHandler uncaught exception handler} + *
  • a {@linkplain ThreadFactory#newThread backing thread factory} + *
+ *

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); + } +} diff --git a/designer_base/src/com/fr/design/widget/WidgetBoundsPaneFactory.java b/designer_base/src/com/fr/design/widget/WidgetBoundsPaneFactory.java index bd3612d11..8092fc5e8 100644 --- a/designer_base/src/com/fr/design/widget/WidgetBoundsPaneFactory.java +++ b/designer_base/src/com/fr/design/widget/WidgetBoundsPaneFactory.java @@ -28,7 +28,7 @@ public class WidgetBoundsPaneFactory { double[] rowSize = {p, p}; double[] columnSize = {p, f}; 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)); boundsPane.add(panel); 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 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[]{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[]{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}; - int[][] rowCount = {{1, 1}, {1, 1}, {1, 1}, {1, 1}}; - final JPanel panel = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_W1, IntervalConstants.INTERVAL_L1); + int[][] rowCount = {{1, 1}, {1, 1}}; + 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(); - panel.setBorder(BorderFactory.createEmptyBorder(10, 0, 10, 0)); - boundsPane.add(panel); + northPanel.setBorder(BorderFactory.createEmptyBorder(10, 0, 10, 0)); + 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); } } diff --git a/designer_base/src/com/fr/design/write/submit/CustomJobPane.java b/designer_base/src/com/fr/design/write/submit/CustomJobPane.java index d9368d87d..c29c75148 100644 --- a/designer_base/src/com/fr/design/write/submit/CustomJobPane.java +++ b/designer_base/src/com/fr/design/write/submit/CustomJobPane.java @@ -1 +1,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(); } } \ No newline at end of file +package com.fr.design.write.submit; + +import com.fr.base.GraphHelper; +import com.fr.data.AbstractClassJob; +import com.fr.design.data.tabledata.tabledatapane.ClassNameSelectPane; +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.formula.JavaEditorPane; +import com.fr.design.gui.frpane.ObjectProperiesPane; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.itextarea.UITextArea; +import com.fr.design.gui.itextfield.UITextField; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.dialog.BasicDialog; +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.general.Inter; +import com.fr.stable.StringUtils; +import com.fr.design.utils.gui.GUICoreUtils; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +/** + * Author : Shockway + * Date: 13-7-29 + * Time: 下午6:48 + */ +public abstract class CustomJobPane extends BasicBeanPane { + protected UITextField classNameTextField; + protected ObjectProperiesPane objectProperiesPane; + public static final int DEFAULT_LENGTH = 30; + + public CustomJobPane() { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + JPanel reportletNamePane = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(); + classNameTextField = new UITextField(getLengthOfTextField()); + reportletNamePane.add(classNameTextField); + + UIButton browserButton = new UIButton(Inter.getLocText("FR-Designer_Select")); + browserButton.setPreferredSize(new Dimension( + GraphHelper.getLocTextWidth("FR-Designer_Select") + 20, + classNameTextField.getPreferredSize().height)); + + UIButton editButton = new UIButton(Inter.getLocText("FR-Designer_Edit")); + editButton.setPreferredSize(new Dimension( + GraphHelper.getLocTextWidth("FR-Designer_Edit") + 20, + classNameTextField.getPreferredSize().height)); + + reportletNamePane.add(browserButton); + reportletNamePane.add(editButton); + + browserButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent evt) { + final ClassNameSelectPane bPane = new ClassNameSelectPane(); + bPane.setClassPath(classNameTextField.getText()); + bPane.showWindow( + SwingUtilities.getWindowAncestor(getWindowAncestor()), + new DialogActionAdapter() { + public void doOk() { + classNameTextField.setText(bPane.getClassPath()); + checkAddButtonEnable(); + } + }).setVisible(true); + } + }); + editButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + final JavaEditorPane javaEditorPane = new JavaEditorPane(classNameTextField.getText(), JavaEditorPane.DEFAULT_SUBMIT_JOB); + final BasicDialog dlg = javaEditorPane.showMediumWindow(SwingUtilities.getWindowAncestor(CustomJobPane.this), + new DialogActionAdapter() { + public void doOk() { + classNameTextField.setText(javaEditorPane.getClassText()); + checkAddButtonEnable(); + } + }); + javaEditorPane.addSaveActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + dlg.doOK(); + } + }); + dlg.setVisible(true); + } + }); + + reportletNamePane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("FR-Designer_ClassName"), null)); + this.add(reportletNamePane, BorderLayout.NORTH); + + objectProperiesPane = new ObjectProperiesPane(); + objectProperiesPane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("FR-Designer_Property"), null)); + this.add(objectProperiesPane, BorderLayout.CENTER); + + UITextArea area = new UITextArea(2, 1); + area.setText(Inter.getLocText(new String[]{"Come_True", "Interface"}) + ":com.fr.data.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(); + } +} \ No newline at end of file diff --git a/designer_base/src/com/fr/env/RemoteEnv.java b/designer_base/src/com/fr/env/RemoteEnv.java index 842257d1f..65733b1df 100644 --- a/designer_base/src/com/fr/env/RemoteEnv.java +++ b/designer_base/src/com/fr/env/RemoteEnv.java @@ -109,6 +109,7 @@ public class RemoteEnv extends AbstractEnv { private Timer logTimer = null; private static ThreadLocal threadLocal = new ThreadLocal(); private boolean isReadTimeOut = false; + private String buildFilePath; public RemoteEnv() { this.clock = new Clock(this); @@ -2036,19 +2037,20 @@ public class RemoteEnv extends AbstractEnv { public void setLicName(String licName) { //do nth } - - + + /** * 获取当前env的build文件路径 */ public String getBuildFilePath() { - return ResourceConstants.BUILD_PATH; + return StringUtils.isEmpty(buildFilePath) ? ResourceConstants.BUILD_PATH : buildFilePath; } /** * 设置当前env的build文件路径 */ public void setBuildFilePath(String buildFilePath) { + this.buildFilePath = buildFilePath; } /** diff --git a/designer_chart/src/com/fr/plugin/chart/designer/component/format/VanChartFormatPaneWithCheckBox.java b/designer_chart/src/com/fr/plugin/chart/designer/component/format/VanChartFormatPaneWithCheckBox.java index 2853cae73..3893f4f8d 100644 --- a/designer_chart/src/com/fr/plugin/chart/designer/component/format/VanChartFormatPaneWithCheckBox.java +++ b/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 arrowPoint = new Point(comPoint.x +formatButton.getWidth() - 25, comPoint.y + formatButton.getHeight()); - UIBubbleFloatPane