Browse Source

Merge remote-tracking branch 'origin/feature/10.0' into feature/10.0

master
ju 6 years ago
parent
commit
1fd50ade41
  1. 4
      designer-base/src/com/fr/design/actions/help/AboutPane.java
  2. 5
      designer-base/src/com/fr/design/extra/PluginWebBridge.java
  3. 37
      designer-base/src/com/fr/design/extra/WebViewDlgHelper.java
  4. 56
      designer-base/src/com/fr/design/gui/imenu/UIBasicMenuItemUI.java
  5. 40
      designer-base/src/com/fr/design/mainframe/DesignerFrameFileDealerPane.java
  6. 22
      designer-base/src/com/fr/start/BaseDesigner.java
  7. 10
      designer-realize/src/com/fr/design/mainframe/alphafine/component/AlphaFinePane.java
  8. 47
      designer-realize/src/com/fr/start/Designer.java
  9. 406
      designer-realize/src/com/fr/start/preload/ImagePreLoader.java

4
designer-base/src/com/fr/design/actions/help/AboutPane.java

@ -9,7 +9,6 @@ import com.fr.design.gui.ilable.ActionLabel;
import com.fr.design.gui.ilable.BoldFontTextLabel; import com.fr.design.gui.ilable.BoldFontTextLabel;
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;
import com.fr.general.ComparatorUtils;
import com.fr.general.GeneralUtils; import com.fr.general.GeneralUtils;
import com.fr.general.Inter; import com.fr.general.Inter;
import com.fr.general.SiteCenter; import com.fr.general.SiteCenter;
@ -34,6 +33,7 @@ public class AboutPane extends JPanel {
private static final int DEFAULT_GAP = 12; private static final int DEFAULT_GAP = 12;
private static final String COPYRIGHT_LABEL = "\u00A9 "; private static final String COPYRIGHT_LABEL = "\u00A9 ";
private static final String BUILD_PREFIX = " "; private static final String BUILD_PREFIX = " ";
private static final String COMPANY_TELEPHONE = SiteCenter.getInstance().acquireUrlByKind("company_telephone");
public AboutPane() { public AboutPane() {
this.setLayout(FRGUIPaneFactory.createBorderLayout()); this.setLayout(FRGUIPaneFactory.createBorderLayout());
@ -90,7 +90,7 @@ public class AboutPane extends JPanel {
if (FRContext.getLocale().equals(Locale.US)) { if (FRContext.getLocale().equals(Locale.US)) {
return; return;
} }
boxCenterAlignmentPane = new BoxCenterAligmentPane(Inter.getLocText("FR-Designer_Service_Phone") + SiteCenter.getInstance().acquireUrlByKind("service.phone." + FRContext.getLocale(), ProductConstants.COMPARE_TELEPHONE)); boxCenterAlignmentPane = new BoxCenterAligmentPane(Inter.getLocText("FR-Designer_Service_Phone") + SiteCenter.getInstance().acquireUrlByKind("service.phone." + FRContext.getLocale(), COMPANY_TELEPHONE));
contentPane.add(boxCenterAlignmentPane); contentPane.add(boxCenterAlignmentPane);
// 繁体版不显示QQ // 繁体版不显示QQ
if (FRContext.getLocale().equals(Locale.TAIWAN)) { if (FRContext.getLocale().equals(Locale.TAIWAN)) {

5
designer-base/src/com/fr/design/extra/PluginWebBridge.java

@ -559,6 +559,11 @@ public class PluginWebBridge {
uiLabel.setText(Inter.getLocText("FR-Base_UnSignIn")); uiLabel.setText(Inter.getLocText("FR-Base_UnSignIn"));
} }
public void updatePluginStore(final JSObject callback){
JSCallback jsCallback = new JSCallback(webEngine, callback);
jsCallback.execute(StringUtils.EMPTY);
}
/** /**
* 初始化设计器部分 * 初始化设计器部分
*/ */

37
designer-base/src/com/fr/design/extra/WebViewDlgHelper.java

@ -17,7 +17,9 @@ import com.fr.log.FineLoggerFactory;
import com.fr.plugin.PluginStoreConstants; import com.fr.plugin.PluginStoreConstants;
import com.fr.plugin.PluginVerifyException; import com.fr.plugin.PluginVerifyException;
import com.fr.stable.EnvChangedListener; import com.fr.stable.EnvChangedListener;
import com.fr.stable.ProductConstants;
import com.fr.stable.StableUtils; import com.fr.stable.StableUtils;
import com.fr.stable.StringUtils;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
import javax.swing.SwingWorker; import javax.swing.SwingWorker;
@ -44,7 +46,7 @@ public class WebViewDlgHelper {
private static final int VERSION_8 = 8; private static final int VERSION_8 = 8;
private static String installHome = FRContext.getCurrentEnv().getWebReportPath(); private static String installHome = FRContext.getCurrentEnv().getWebReportPath();
private static final String MAIN_JS_PATH = "/scripts/plugin.html"; private static final String MAIN_JS_PATH = "/scripts/plugin.html";
private static final int BYTES_NUM = 1024; private static final String ENV_VERSION = "ENV_VERSION";
static { static {
GeneralContext.addEnvChangedListener(new EnvChangedListener() { GeneralContext.addEnvChangedListener(new EnvChangedListener() {
@ -70,10 +72,24 @@ public class WebViewDlgHelper {
if (rv == JOptionPane.OK_OPTION) { if (rv == JOptionPane.OK_OPTION) {
downloadShopScripts(SHOP_SCRIPTS); downloadShopScripts(SHOP_SCRIPTS);
} }
} else { }
showPluginDlg(); String jar_version = PluginStoreConstants.getInstance().getProps(ENV_VERSION, StringUtils.EMPTY);
if (ComparatorUtils.equals(jar_version, ProductConstants.VERSION)) {
updateShopScripts(SHOP_SCRIPTS); updateShopScripts(SHOP_SCRIPTS);
} else {
int rv = JOptionPane.showConfirmDialog(
null,
Inter.getLocText("Fine-Plugin_Shop_Need_Install_Version"),
Inter.getLocText("FR-Designer-Plugin_Warning"),
JOptionPane.OK_CANCEL_OPTION,
JOptionPane.INFORMATION_MESSAGE
);
if (rv == JOptionPane.OK_OPTION) {
downloadShopScripts(SHOP_SCRIPTS);
deleteExtraFile(StableUtils.pathJoin(installHome, "plugin.html"));
}
} }
} else { } else {
BasicPane traditionalStorePane = new BasicPane() { BasicPane traditionalStorePane = new BasicPane() {
@Override @Override
@ -109,6 +125,16 @@ public class WebViewDlgHelper {
} }
} }
/**
* 删除9.0工程下无用的plugin.html文件
*
* @param filePath 待删除文件路径
*/
private static void deleteExtraFile(String filePath){
CommonIOUtils.deleteFile(new File(filePath));
}
/** /**
* 以关键词打开设计器商店 * 以关键词打开设计器商店
* *
@ -252,12 +278,10 @@ public class WebViewDlgHelper {
try { try {
if (get()) { if (get()) {
String relativePath = "/scripts/plugin.html";
IOUtils.unzip(new File(StableUtils.pathJoin(PluginConstants.DOWNLOAD_PATH, PluginConstants.TEMP_FILE)), installHome); IOUtils.unzip(new File(StableUtils.pathJoin(PluginConstants.DOWNLOAD_PATH, PluginConstants.TEMP_FILE)), installHome);
copyMainFile(StableUtils.pathJoin(installHome, relativePath));
// TODO: 2017/4/17 删除之前存放在安装目录下的script
PluginStoreConstants.refreshProps(); // 下载完刷新一下版本号等 PluginStoreConstants.refreshProps(); // 下载完刷新一下版本号等
JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Designer-Plugin_Shop_Installed"), Inter.getLocText("FR-Designer_Tooltips"), JOptionPane.INFORMATION_MESSAGE); JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Designer-Plugin_Shop_Installed"), Inter.getLocText("FR-Designer_Tooltips"), JOptionPane.INFORMATION_MESSAGE);
showPluginDlg();
} }
} catch (InterruptedException | ExecutionException e) { } catch (InterruptedException | ExecutionException e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e); FineLoggerFactory.getLogger().error(e.getMessage(), e);
@ -290,6 +314,7 @@ public class WebViewDlgHelper {
} }
} }
} }
showPluginDlg();
return null; return null;
} }
}.execute(); }.execute();

56
designer-base/src/com/fr/design/gui/imenu/UIBasicMenuItemUI.java

@ -4,20 +4,49 @@
package com.fr.design.gui.imenu; package com.fr.design.gui.imenu;
import com.fr.general.ComparatorUtils;
import com.fr.design.utils.ColorRoutines; import com.fr.design.utils.ColorRoutines;
import com.fr.design.utils.ThemeUtils; import com.fr.design.utils.ThemeUtils;
import com.fr.general.ComparatorUtils;
import javax.swing.*; import javax.swing.AbstractAction;
import javax.swing.ActionMap;
import javax.swing.ButtonModel;
import javax.swing.Icon;
import javax.swing.InputMap;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JComponent;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.KeyStroke;
import javax.swing.LookAndFeel;
import javax.swing.MenuElement;
import javax.swing.MenuSelectionManager;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.event.MenuDragMouseEvent; import javax.swing.event.MenuDragMouseEvent;
import javax.swing.event.MenuDragMouseListener; import javax.swing.event.MenuDragMouseListener;
import javax.swing.event.MenuKeyListener; import javax.swing.event.MenuKeyListener;
import javax.swing.event.MouseInputListener; import javax.swing.event.MouseInputListener;
import javax.swing.plaf.*; import javax.swing.plaf.ActionMapUIResource;
import javax.swing.plaf.ColorUIResource;
import javax.swing.plaf.ComponentInputMapUIResource;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.MenuItemUI;
import javax.swing.plaf.UIResource;
import javax.swing.plaf.basic.BasicGraphicsUtils; import javax.swing.plaf.basic.BasicGraphicsUtils;
import javax.swing.plaf.basic.BasicHTML; import javax.swing.plaf.basic.BasicHTML;
import javax.swing.text.View; import javax.swing.text.View;
import java.awt.*; import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.InputEvent; import java.awt.event.InputEvent;
import java.awt.event.KeyEvent; import java.awt.event.KeyEvent;
@ -588,7 +617,7 @@ public class UIBasicMenuItemUI extends MenuItemUI {
} }
protected void installDefaults() { protected void installDefaults() {
String prefix = getPropertyPrefix(); final String prefix = getPropertyPrefix();
acceleratorFont = UIManager.getFont("MenuItem.acceleratorFont"); acceleratorFont = UIManager.getFont("MenuItem.acceleratorFont");
@ -600,7 +629,7 @@ public class UIBasicMenuItemUI extends MenuItemUI {
LookAndFeel.installBorder(menuItem, prefix + ".border"); LookAndFeel.installBorder(menuItem, prefix + ".border");
oldBorderPainted = menuItem.isBorderPainted(); oldBorderPainted = menuItem.isBorderPainted();
menuItem.setBorderPainted(((Boolean) (UIManager.get(prefix + ".borderPainted"))).booleanValue()); menuItem.setBorderPainted(((Boolean) (UIManager.get(prefix + ".borderPainted"))).booleanValue());
LookAndFeel.installColorsAndFont(menuItem, prefix + ".background", prefix + ".foreground", prefix + ".font"); installFont(prefix, menuItem);
// MenuItem specific defaults // MenuItem specific defaults
if (selectionBackground == null || selectionBackground instanceof UIResource) { if (selectionBackground == null || selectionBackground instanceof UIResource) {
@ -637,6 +666,21 @@ public class UIBasicMenuItemUI extends MenuItemUI {
defaultIconGap = DEFAULT_ICON_GAP; // Should be from table defaultIconGap = DEFAULT_ICON_GAP; // Should be from table
} }
private void installFont(final String prefix, final JComponent menuItem) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
if (menuItem == null) {
return;
}
LookAndFeel.installColorsAndFont(menuItem, prefix + ".background", prefix + ".foreground", prefix + ".font");
}
});
thread.setName("UIBasicMenuItemUI");
thread.setDaemon(true);
thread.start();
}
protected Dimension getPreferredMenuItemSize(JComponent c, Icon checkIcon, protected Dimension getPreferredMenuItemSize(JComponent c, Icon checkIcon,
Icon arrowIcon, int defaultTextIconGap) { Icon arrowIcon, int defaultTextIconGap) {
JMenuItem b = (JMenuItem) c; JMenuItem b = (JMenuItem) c;

40
designer-base/src/com/fr/design/mainframe/DesignerFrameFileDealerPane.java

@ -10,7 +10,11 @@ import com.fr.design.constants.UIConstants;
import com.fr.design.data.DesignTableDataManager; import com.fr.design.data.DesignTableDataManager;
import com.fr.design.data.datapane.TableDataTreePane; import com.fr.design.data.datapane.TableDataTreePane;
import com.fr.design.data.tabledata.ResponseDataSourceChange; import com.fr.design.data.tabledata.ResponseDataSourceChange;
import com.fr.design.file.*; import com.fr.design.file.FileOperations;
import com.fr.design.file.FileToolbarStateChangeListener;
import com.fr.design.file.HistoryTemplateListPane;
import com.fr.design.file.MutilTempalteTabPane;
import com.fr.design.file.TemplateTreePane;
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 com.fr.design.gui.imenu.UIMenuHighLight; import com.fr.design.gui.imenu.UIMenuHighLight;
@ -33,15 +37,23 @@ import com.fr.stable.CoreConstants;
import com.fr.stable.StableUtils; import com.fr.stable.StableUtils;
import com.fr.stable.project.ProjectConstants; import com.fr.stable.project.ProjectConstants;
import javax.swing.*; import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
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.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter; import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent; import java.awt.event.KeyEvent;
import java.io.File;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@ -129,9 +141,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt
public void refreshDockingView() { public void refreshDockingView() {
ToolBarDef toolbarDef = new ToolBarDef(); ToolBarDef toolbarDef = new ToolBarDef();
toolbarDef.addShortCut(openReportAction, refreshTreeAction); toolbarDef.addShortCut(openReportAction, refreshTreeAction);
if (FRContext.getCurrentEnv().isSupportLocalFileOperate()) {
toolbarDef.addShortCut(openFolderAction, renameAction); toolbarDef.addShortCut(openFolderAction, renameAction);
}
toolbarDef.addShortCut(delFileAction); toolbarDef.addShortCut(delFileAction);
Set<ShortCut> extraShortCuts = ExtraDesignClassManager.getInstance().getExtraShortCuts(); Set<ShortCut> extraShortCuts = ExtraDesignClassManager.getInstance().getExtraShortCuts();
for (ShortCut shortCut : extraShortCuts){ for (ShortCut shortCut : extraShortCuts){
@ -256,23 +266,6 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt
public void stateChange() { public void stateChange() {
//当前环境为远程环境时 //当前环境为远程环境时
if (FRContext.getCurrentEnv() != null) { if (FRContext.getCurrentEnv() != null) {
if (!FRContext.getCurrentEnv().isSupportLocalFileOperate()) {
if (selectedOperation.getSelectedTemplatePath() != null) {
openReportAction.setEnabled(true);
} else {
openReportAction.setEnabled(false);
}
FileNode node = TemplateTreePane.getInstance().getTemplateFileTree().getSelectedFileNode();
if (selectedOperation.getSelectedTemplatePath() != null){
if (node.getLock() != null && !ComparatorUtils.equals(node.getUserID(),node.getLock())){
delFileAction.setEnabled(false);
} else {
delFileAction.setEnabled(true);
}
} else {
delFileAction.setEnabled(false);
}
} else {
//当前环境为本地环境时 //当前环境为本地环境时
if (selectedOperation.getSelectedTemplatePath() != null) { if (selectedOperation.getSelectedTemplatePath() != null) {
openReportAction.setEnabled(true); openReportAction.setEnabled(true);
@ -286,7 +279,6 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt
openFolderAction.setEnabled(containsFolderNums() + seletedTemplateNums() != 0); openFolderAction.setEnabled(containsFolderNums() + seletedTemplateNums() != 0);
} }
refreshTreeAction.setEnabled(true); refreshTreeAction.setEnabled(true);
}
if (containsFolderNums() > 0 && (containsFolderNums() + seletedTemplateNums() > 1)) { if (containsFolderNums() > 0 && (containsFolderNums() + seletedTemplateNums() > 1)) {
refreshActions(); refreshActions();
} else if (containsFolderNums() == 0 && seletedTemplateNums() > 1) { } else if (containsFolderNums() == 0 && seletedTemplateNums() > 1) {

22
designer-base/src/com/fr/start/BaseDesigner.java

@ -11,6 +11,7 @@ import com.fr.design.file.TemplateTreePane;
import com.fr.design.fun.DesignerStartOpenFileProcessor; import com.fr.design.fun.DesignerStartOpenFileProcessor;
import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.DesignerContext;
import com.fr.design.mainframe.DesignerFrame; import com.fr.design.mainframe.DesignerFrame;
import com.fr.design.mainframe.loghandler.LogMessageBar;
import com.fr.design.mainframe.toolbar.ToolBarMenuDock; import com.fr.design.mainframe.toolbar.ToolBarMenuDock;
import com.fr.design.utils.DesignUtils; import com.fr.design.utils.DesignUtils;
import com.fr.event.EventDispatcher; import com.fr.event.EventDispatcher;
@ -48,12 +49,32 @@ public abstract class BaseDesigner extends ToolBarMenuDock {
EventDispatcher.fire(ModuleEvent.MajorModuleStarting, InterProviderFactory.getProvider().getLocText("FR-Designer_Initializing")); EventDispatcher.fire(ModuleEvent.MajorModuleStarting, InterProviderFactory.getProvider().getLocText("FR-Designer_Initializing"));
// 初始化look and feel.这个在预加载之前执行是因为lookAndFeel里的东西,预加载时也要用到 // 初始化look and feel.这个在预加载之前执行是因为lookAndFeel里的东西,预加载时也要用到
DesignUtils.initLookAndFeel(); DesignUtils.initLookAndFeel();
// 预加载一些耗时的单例面板
preLoadPane();
// 初始化Log Handler // 初始化Log Handler
DesignerEnvManager.loadLogSetting(); DesignerEnvManager.loadLogSetting();
createDesignerFrame(); createDesignerFrame();
} }
private void preLoadPane() {
ExecutorService service = Executors.newCachedThreadPool();
service.submit(new Runnable() {
@Override
public void run() {
LogMessageBar.getInstance();
}
});
service.submit(new Runnable() {
@Override
public void run() {
HistoryTemplateListPane.getInstance();
}
});
service.shutdown();
}
public void show(final String[] args) { public void show(final String[] args) {
ExecutorService executorService = Executors.newSingleThreadExecutor(); ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService.submit(new Runnable() { executorService.submit(new Runnable() {
@ -61,6 +82,7 @@ public abstract class BaseDesigner extends ToolBarMenuDock {
public void run() { public void run() {
collectUserInformation(); collectUserInformation();
showDesignerFrame(args, DesignerContext.getDesignerFrame(), false); showDesignerFrame(args, DesignerContext.getDesignerFrame(), false);
DesignerContext.getDesignerFrame().refreshEnv();
for (int i = 0; !TemplateTreePane.getInstance().getTemplateFileTree().isTemplateShowing() && i < LOAD_TREE_MAXNUM; i++) { for (int i = 0; !TemplateTreePane.getInstance().getTemplateFileTree().isTemplateShowing() && i < LOAD_TREE_MAXNUM; i++) {
TemplateTreePane.getInstance().getTemplateFileTree().refresh(); TemplateTreePane.getInstance().getTemplateFileTree().refresh();
} }

10
designer-realize/src/com/fr/design/mainframe/alphafine/component/AlphaFinePane.java

@ -1,16 +1,18 @@
package com.fr.design.mainframe.alphafine.component; package com.fr.design.mainframe.alphafine.component;
import com.bulenkov.iconloader.IconLoader;
import com.fr.design.actions.help.alphafine.AlphaFineContext; import com.fr.design.actions.help.alphafine.AlphaFineContext;
import com.fr.design.actions.help.alphafine.AlphaFineListener; import com.fr.design.actions.help.alphafine.AlphaFineListener;
import com.fr.design.constants.UIConstants; import com.fr.design.constants.UIConstants;
import com.fr.design.dialog.BasicPane; import com.fr.design.dialog.BasicPane;
import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.mainframe.alphafine.AlphaFineHelper; import com.fr.design.mainframe.alphafine.AlphaFineHelper;
import com.fr.design.utils.ThemeUtils; import com.fr.general.IOUtils;
import com.fr.general.Inter; import com.fr.general.Inter;
import java.awt.*; import java.awt.AWTEvent;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
@ -28,7 +30,7 @@ public class AlphaFinePane extends BasicPane {
setPreferredSize(new Dimension(24, 24)); setPreferredSize(new Dimension(24, 24));
setLayout(new BorderLayout()); setLayout(new BorderLayout());
UIButton refreshButton = new UIButton(); UIButton refreshButton = new UIButton();
refreshButton.setIcon(IconLoader.getIcon("/com/fr/design/mainframe/alphafine/images/smallsearch.png")); refreshButton.setIcon(IOUtils.readIcon(("/com/fr/design/mainframe/alphafine/images/smallsearch.png")));
refreshButton.setToolTipText(Inter.getLocText("FR-Designer_AlphaFine")); refreshButton.setToolTipText(Inter.getLocText("FR-Designer_AlphaFine"));
refreshButton.set4ToolbarButton(); refreshButton.set4ToolbarButton();
refreshButton.setRolloverEnabled(false); refreshButton.setRolloverEnabled(false);

47
designer-realize/src/com/fr/start/Designer.java

@ -30,6 +30,7 @@ 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;
import com.fr.design.mainframe.templateinfo.TemplateInfoCollector;
import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus;
import com.fr.design.menu.KeySetUtils; import com.fr.design.menu.KeySetUtils;
import com.fr.design.menu.MenuDef; import com.fr.design.menu.MenuDef;
@ -41,6 +42,7 @@ 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.general.SiteCenter;
import com.fr.module.Module; import com.fr.module.Module;
import com.fr.module.ModuleContext; import com.fr.module.ModuleContext;
import com.fr.stable.BuildContext; import com.fr.stable.BuildContext;
@ -52,16 +54,23 @@ import com.fr.stable.xml.XMLTools;
import com.fr.start.fx.SplashFx; import com.fr.start.fx.SplashFx;
import com.fr.start.jni.SplashMac; import com.fr.start.jni.SplashMac;
import com.fr.start.module.StartupArgs; import com.fr.start.module.StartupArgs;
import com.fr.start.server.FineEmbedServer; import com.fr.start.preload.ImagePreLoader;
import com.fr.start.server.ServerTray; import com.fr.start.server.ServerTray;
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.Cursor;
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.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor;
@ -87,7 +96,7 @@ public class Designer extends BaseDesigner {
* @param args 参数 * @param args 参数
*/ */
public static void main(String[] args) { public static void main(String[] args) {
preloadResource();
BuildContext.setBuildFilePath("/com/fr/stable/build.properties"); BuildContext.setBuildFilePath("/com/fr/stable/build.properties");
SplashContext.getInstance().registerSplash(createSplash()); SplashContext.getInstance().registerSplash(createSplash());
SplashContext.getInstance().show(); SplashContext.getInstance().show();
@ -102,6 +111,33 @@ public class Designer extends BaseDesigner {
} }
private static void preloadResource() {
ExecutorService service = Executors.newCachedThreadPool();
service.submit(new Runnable() {
@Override
public void run() {
SiteCenter.getInstance();
Cursor cursor = UIConstants.CELL_DEFAULT_CURSOR;
}
});
service.submit(new Runnable() {
@Override
public void run() {
new ImagePreLoader();
}
});
service.submit(new Runnable() {
@Override
public void run() {
TemplateInfoCollector.getInstance();
}
});
service.shutdown();
}
private static SplashStrategy createSplash() { private static SplashStrategy createSplash() {
// 这里可以开接口加载自定义启动画面 // 这里可以开接口加载自定义启动画面
if (OperatingSystem.isWindows()) { if (OperatingSystem.isWindows()) {
@ -498,6 +534,9 @@ public class Designer extends BaseDesigner {
collector.collectStopTime(); collector.collectStopTime();
collector.saveXMLFile(); collector.saveXMLFile();
Env currentEnv = FRContext.getCurrentEnv(); Env currentEnv = FRContext.getCurrentEnv();
if (currentEnv == null) {
return;
}
currentEnv.doWhenServerShutDown(); currentEnv.doWhenServerShutDown();
} }

406
designer-realize/src/com/fr/start/preload/ImagePreLoader.java

@ -0,0 +1,406 @@
package com.fr.start.preload;
import com.fr.general.IOUtils;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* 在设计器框架加载之前, 先用多个线程把相关的资源文件全部load到缓存中.
*/
public class ImagePreLoader {
public static final int THRESHOLD = 50;
public ImagePreLoader() {
ExecutorService service = Executors.newCachedThreadPool();
int len = preLoadImages.length;
int start = 0;
for (int i = 0; i < len; i++) {
if (i != 0 && i % THRESHOLD == 0) {
loadImage(start,i, service);
start = i;
}
if (len - i < THRESHOLD) {
loadImage(start, len, service);
break;
}
}
service.shutdown();
}
private void loadImage(final int start, final int end, ExecutorService service) {
service.submit(new Runnable() {
@Override
public void run() {
for (int i = start; i < end; i++) {
IOUtils.readImageWithCache(preLoadImages[i]);
}
}
});
}
private String[] preLoadImages = {
"com/fr/design/images/m_file/formExport.png",
"com/fr/base/images/oem/cpt.png",
"com/fr/design/images/data/store_procedure.png",
"/com/fr/design/images/m_file/preview.png",
"com/fr/base/images/cell/blank.gif",
"com/fr/design/images/data/dock/serverdatabase.png",
"/com/fr/design/images/data/dock/serverclasstabledata.png",
"/com/fr/design/images/data/dock/serverdatatable.png",
"/com/fr/design/images/data/file.png",
"/com/fr/design/images/data/tree.png",
"/com/fr/design/images/buttonicon/minus.png",
"/com/fr/design/images/buttonicon/plus.png",
"/com/fr/design/images/data/multi.png",
"/com/fr/design/images/data/store_procedure.png",
"com/fr/design/images/buttonicon/arrowdown.png",
"com/fr/design/images/buttonicon/arrowup.png",
"com/fr/design/images/buttonicon/yes.png",
"com/fr/design/images/buttonicon/select_item.png",
"com/fr/design/images/buttonicon/prewidget.png",
"com/fr/design/images/buttonicon/editn.png",
"com/fr/design/images/buttonicon/editp.png",
"com/fr/design/images/buttonicon/hiden.png",
"com/fr/design/images/buttonicon/hidep.png",
"com/fr/design/images/buttonicon/viewn.png",
"com/fr/design/images/buttonicon/viewp.png",
"com/fr/design/images/buttonicon/run24.png",
"com/fr/design/images/buttonicon/runs.png",
"com/fr/design/mainframe/alphafine/images/smallsearch.png",
"com/fr/design/images/buttonicon/pageb24.png",
"com/fr/design/images/buttonicon/writeb24.png",
"com/fr/design/images/buttonicon/anab24.png",
"com/fr/design/images/buttonicon/pages.png",
"com/fr/design/images/buttonicon/writes.png",
"com/fr/design/images/buttonicon/anas.png",
"com/fr/design/images/buttonicon/refresh.png",
"com/fr/design/images/gui/color/foreground.png",
"com/fr/design/images/buttonicon/history.png",
"com/fr/design/images/m_file/close.png",
"com/fr/design/images/m_file/edit.png",
"com/fr/design/images/data/search.png",
"com/fr/design/images/data/black_search.png",
"com/fr/design/images/data/source/delete.png",
"com/fr/design/images/control/edit.png",
"com/fr/design/images/control/edit_white.png",
"com/fr/design/images/buttonicon/prevew_down_icon.png",
"com/fr/design/images/m_report/close.png",
"com/fr/design/images/m_report/close_over.png",
"com/fr/design/images/m_report/close_press.png",
"com/fr/design/images/buttonicon/save.png",
"com/fr/design/images/buttonicon/undo.png",
"com/fr/design/images/buttonicon/redo.png",
"com/fr/design/images/buttonicon/additicon_grey.png",
"com/fr/design/images/buttonicon/addicon.png",
"com/fr/design/images/buttonicon/list_normal.png",
"com/fr/design/images/buttonicon/list_pressed.png",
"com/fr/design/images/buttonicon/close_icon.png",
"com/fr/design/images/buttonicon/mouseoverclose icon.png",
"com/fr/design/images/buttonicon/pressclose icon.png",
"com/fr/design/images/buttonicon/open.png",
"com/fr/design/images/m_file/view_folder.png",
"com/fr/design/images/data/source/rename.png",
"com/fr/design/images/buttonicon/minus.png",
"com/fr/design/images/buttonicon/plus.png",
"com/fr/design/images/data/database.png",
"com/fr/design/images/data/source/classTableData.png",
"com/fr/design/images/data/dataTable.png",
"com/fr/design/images/data/multi.png",
"com/fr/design/images/data/file.png",
"com/fr/design/images/data/tree.png",
"com/fr/design/images/control/tab/remove.png",
"com/fr/design/images/m_file/preview.png",
"com/fr/design/images/m_web/connection.png",
"com/fr/design/images/control/addPopup.png",
"com/fr/design/images/buttonicon/propertiestab/cellelement_normal.png",
"com/fr/design/images/buttonicon/propertiestab/cellattr_normal.png",
"com/fr/design/images/buttonicon/propertiestab/floatelement_normal.png",
"com/fr/design/images/buttonicon/propertiestab/widgetsettings_normal.png",
"com/fr/design/images/buttonicon/propertiestab/conditionattr_normal.png",
"com/fr/design/images/buttonicon/propertiestab/hyperlink_normal.png",
"com/fr/design/images/buttonicon/propertiestab/widgetlib_normal.png",
"com/fr/design/images/buttonicon/propertiestab/authorityedit_normal.png",
"com/fr/design/images/buttonicon/propertiestab/configuredroles_normal.png",
"com/fr/design/images/buttonicon/propertiestab/cellelement_selected.png",
"com/fr/design/images/log/selectedall.png",
"com/fr/design/images/m_edit/copy.png",
"com/fr/design/images/log/clear.png",
"com/fr/design/images/log/clear.png",
"com/fr/design/images/log/selectedall.png",
"com/fr/design/images/log/setting.png",
"com/fr/design/images/buttonicon/newcpts.png",
"com/fr/base/images/oem/logo.png",
"com/fr/design/images/data/bind/localconnect.png",
"com/fr/design/images/gui/tab_add_normal.png",
"com/fr/design/images/m_help/demo.png",
"com/fr/design/images/gui/tab_add_hover.png",
"com/fr/design/images/gui/tab_add_click.png",
"com/fr/design/images/gui/tab_delete.png",
"com/fr/design/images/bbs.png",
"com/fr/design/images/video.png",
"com/fr/design/images/help.png",
"com/fr/design/images/questions.png",
"com/fr/design/images/update.png",
"com/fr/design/images/need.png",
"com/fr/design/images/bug.png",
"com/fr/design/images/signature.png",
"com/fr/design/images/m_file/switch.png",
"com/fr/design/images/gui/blank.gif",
"com/fr/design/images/gui/folder.png",
"com/fr/design/images/gui/javaFile.gif",
"com/fr/design/images/gui/classFile.gif",
"com/fr/design/images/gui/jspFile.gif",
"com/fr/design/images/gui/jsFile.gif",
"com/fr/design/images/gui/xmlFile.gif",
"com/fr/design/images/gui/htmlFile.gif",
"com/fr/design/images/gui/jarFile.gif",
"com/fr/design/images/gui/gifFile.gif",
"com/fr/design/images/gui/jpgFile.gif",
"com/fr/design/images/gui/bmpFile.gif",
"com/fr/design/images/gui/cptFile.png",
"com/fr/design/images/gui/frm.png",
"com/fr/design/images/gui/cht.png",
"com/fr/design/images/chart/ChartType.png",
"com/fr/van/chart/map/images/mapData.png",
"com/fr/design/images/buttonicon/add.png",
"com/fr/base/images/cell/control/remove.png",
"com/fr/design/images/control/up.png",
"com/fr/design/images/control/down.png",
"com/fr/design/images/control/sortAsc.png",
"com/fr/design/images/m_insert/formula.png",
"com/fr/design/images/calender/year_reduce.png",
"com/fr/design/images/calender/year_reduce_hover.png",
"com/fr/design/images/calender/year_reduce_click.png",
"com/fr/design/images/calender/month_reduce.png",
"com/fr/design/images/calender/month_reduce_hover.png",
"com/fr/design/images/calender/month_reduce_click.png",
"com/fr/design/images/calender/month_add.png",
"com/fr/design/images/calender/month_add_hover.png",
"com/fr/design/images/calender/month_add_click.png",
"com/fr/design/images/calender/year_add.png",
"com/fr/design/images/calender/year_add_hover.png",
"com/fr/design/images/calender/year_add_click.png",
"com/fr/design/images/buttonicon/type_string.png",
"com/fr/base/images/cell/control/add.png",
"com/fr/design/images/expand/cellAttr.gif",
"com/fr/design/images/expand/none16x16.png",
"com/fr/design/images/expand/asc.png",
"com/fr/design/images/expand/des.png",
"com/fr/design/images/form/toolbar/pie.png",
"com/fr/design/images/buttonicon/widget/date_16.png",
"com/fr/design/images/buttonicon/widget/tree_16.png",
"com/fr/design/images/buttonicon/widget/comboboxtree.png",
"com/fr/design/images/buttonicon/widget/checkbox_group_16.png",
"com/fr/design/images/buttonicon/widget/button_group_16.png",
"com/fr/design/images/buttonicon/widget/number_field_16.png",
"com/fr/design/images/buttonicon/widget/label_16.png",
"com/fr/web/images/form/resources/button_16.png",
"com/fr/design/images/buttonicon/widget/button_16.png",
"com/fr/design/images/buttonicon/widget/files_up.png",
"com/fr/design/images/buttonicon/widget/combo_box_16.png",
"com/fr/design/images/buttonicon/widget/combo_check_16.png",
"com/fr/design/images/buttonicon/widget/check_box_16.png",
"com/fr/web/images/form/resources/list_16.png",
"com/fr/design/images/buttonicon/widget/text_field_16.png",
"com/fr/design/images/buttonicon/widget/text_area_16.png",
"com/fr/design/images/buttonicon/widget/password_field_16.png",
"com/fr/web/images/form/resources/iframe_16.png",
"com/fr/design/images/form/toolbar/column.png",
"com/fr/design/images/form/toolbar/bar.png",
"com/fr/design/images/form/toolbar/line.png",
"com/fr/design/images/form/toolbar/area.png",
"com/fr/design/images/form/toolbar/gauge.png",
"com/fr/design/images/form/toolbar/radar.png",
"com/fr/design/images/form/toolbar/scatter.png",
"com/fr/design/images/form/toolbar/bubble.png",
"com/fr/design/images/form/toolbar/custom.png",
"com/fr/design/images/form/toolbar/multiPie.png",
"com/fr/design/images/form/toolbar/map.png",
"com/fr/design/images/form/toolbar/drillmap.png",
"com/fr/design/images/form/toolbar/treeMap.png",
"com/fr/design/images/form/toolbar/funnel.png",
"com/fr/design/images/form/toolbar/heatmap.png",
"com/fr/design/images/form/toolbar/wordcloud.png",
"com/fr/design/images/form/toolbar/gantt.png",
"com/fr/design/images/form/toolbar/structure.png",
"com/fr/design/images/control/help_open.png",
"com/fr/web/images/form/forbid.png",
"com/fr/web/images/form/resources/layout_absolute.png",
"com/fr/design/images/m_edit/cut.png",
"com/fr/design/images/m_edit/paste.png",
"com/fr/design/images/m_report/delete.png",
"com/fr/design/images/toolbarbtn/parametersetting.png",
"com/fr/base/images/oem/addworksheet.png",
"com/fr/design/images/sheet/addpolysheet.png",
"com/fr/base/images/oem/worksheet.png",
"com/fr/design/images/sheet/polysheet.png",
"com/fr/design/images/sheet/left_normal@1x.png",
"com/fr/design/images/sheet/right_normal@1x.png",
"com/fr/design/images/sheet/left_hover@1x.png",
"com/fr/design/images/sheet/right_hover@1x.png",
"com/fr/design/images/data/source/normalDown20.png",
"com/fr/design/images/data/source/hoverDown20.png",
"com/fr/design/images/data/source/normalUp20.png",
"com/fr/design/images/data/source/hoverUp20.png",
"com/fr/design/images/m_edit/formatBrush.png",
"com/fr/design/images/expand/none16x16_selected@1x.png",
"com/fr/design/images/expand/vertical.png",
"com/fr/design/images/expand/vertical_selected@1x.png",
"com/fr/design/images/expand/landspace.png",
"com/fr/design/images/expand/landspace_selected@1x.png",
"com/fr/design/images/buttonicon/select.png",
"com/fr/design/images/expand/asc_selected.png",
"com/fr/design/images/expand/des_selected.png",
"com/fr/design/images/m_format/cellstyle/bold.png",
"com/fr/design/images/m_format/cellstyle/italic.png",
"com/fr/design/images/m_format/cellstyle/underline.png",
"com/fr/design/images/m_format/cellstyle/strikethrough.png",
"com/fr/design/images/m_format/cellstyle/shadow.png",
"com/fr/design/images/m_format/cellstyle/sup.png",
"com/fr/design/images/m_format/cellstyle/sub.png",
"com/fr/base/images/dialog/border/top.png",
"com/fr/design/images/m_format/cellstyle/top_white.png",
"com/fr/base/images/dialog/border/left.png",
"com/fr/design/images/m_format/cellstyle/left_white.png",
"com/fr/base/images/dialog/border/bottom.png",
"com/fr/design/images/m_format/cellstyle/bottom_white.png",
"com/fr/base/images/dialog/border/right.png",
"com/fr/design/images/m_format/cellstyle/right_white.png",
"com/fr/base/images/dialog/border/horizontal.png",
"com/fr/design/images/m_format/cellstyle/horizontal_white.png",
"com/fr/base/images/dialog/border/vertical.png",
"com/fr/design/images/m_format/cellstyle/vertical_white.png",
"com/fr/design/images/m_format/out.png",
"com/fr/design/images/m_format/cellstyle/out_white.png",
"com/fr/design/images/m_format/in.png",
"com/fr/design/images/m_format/cellstyle/in_white.png",
"com/fr/design/images/m_format/cellstyle/h_left_normal.png",
"com/fr/design/images/m_format/cellstyle/h_left_normal_white.png",
"com/fr/design/images/m_format/cellstyle/h_center_normal.png",
"com/fr/design/images/m_format/cellstyle/h_center_normal_white.png",
"com/fr/design/images/m_format/cellstyle/h_right_normal.png",
"com/fr/design/images/m_format/cellstyle/h_right_normal_white.png",
"com/fr/design/images/m_format/cellstyle/h_s_normal.png",
"com/fr/design/images/m_format/cellstyle/h_s_normal_white.png",
"com/fr/design/images/m_format/cellstyle/defaultAlignment.png",
"com/fr/design/images/m_format/cellstyle/defaultAlignment_white.png",
"com/fr/design/images/m_format/cellstyle/v_top_normal.png",
"com/fr/design/images/m_format/cellstyle/v_top_normal_white.png",
"com/fr/design/images/m_format/cellstyle/v_center_normal.png",
"com/fr/design/images/m_format/cellstyle/v_center_normal_white.png",
"com/fr/design/images/m_format/cellstyle/v_down_normal.png",
"com/fr/design/images/m_format/cellstyle/v_down_normal_white.png",
"com/fr/design/images/control/refresh.png",
"com/fr/design/images/toolbarbtn/close.png",
"com/fr/design/images/buttonicon/new_form3.png",
"com/fr/design/images/m_file/save.png",
"com/fr/design/images/m_file/saveAs.png",
"com/fr/design/images/m_edit/undo.png",
"com/fr/design/images/m_edit/redo.png",
"com/fr/design/images/m_file/excel.png",
"com/fr/design/images/m_file/pdf.png",
"com/fr/design/images/m_file/word.png",
"com/fr/design/images/m_file/svg.png",
"com/fr/design/images/m_file/csv.png",
"com/fr/design/images/m_file/text.png",
"com/fr/design/images/m_web/datasource.png",
"com/fr/design/images/m_report/webreportattribute.png",
"com/fr/design/images/m_report/exportAttr.png",
"com/fr/design/images/m_report/p.png",
"com/fr/design/images/m_report/mobile.png",
"com/fr/web/images/print.png",
"com/fr/design/images/m_report/watermark.png",
"com/fr/design/images/m_file/pageSetup.png",
"com/fr/design/images/m_report/header.png",
"com/fr/design/images/m_report/footer.png",
"com/fr/design/images/m_report/background.png",
"com/fr/design/images/m_report/reportWriteAttr.png",
"com/fr/design/images/m_report/linearAttr.png",
"com/fr/design/images/m_report/reportEngineAttr.png",
"com/fr/design/images/m_report/allow_authority_edit.png",
"com/fr/design/images/m_insert/bindColumn.png",
"com/fr/design/images/m_insert/text.png",
"com/fr/design/images/m_insert/richtext.png",
"com/fr/design/images/m_insert/chart.png",
"com/fr/design/images/m_insert/image.png",
"com/fr/design/images/m_insert/bias.png",
"com/fr/design/images/arrow/arrow_up.png",
"com/fr/design/images/m_insert/subReport.png",
"com/fr/design/images/arrow/arrow_down.png",
"com/fr/design/images/toolbarbtn/toolbarbtnsetting.png",
"com/fr/design/images/control/addPopup.png",
"com/fr/design/images/toolbarbtn/toolbarbtnclear.png",
"com/fr/design/images/m_insert/insertRow.png",
"com/fr/design/images/m_insert/insertColumn.png",
"com/fr/design/images/m_format/modified.png",
"com/fr/design/images/m_format/highlight.png",
"com/fr/web/images/form/resources/preview_16.png",
"com/fr/web/images/save.png",
"com/fr/design/images/m_insert/hyperLink.png",
"com/fr/web/images/flashPrint.png",
"com/fr/design/images/m_edit/merge.png",
"com/fr/web/images/appletPrint.png",
"com/fr/design/images/m_edit/unmerge.png",
"com/fr/web/images/pdf.png",
"com/fr/design/images/m_format/cellAttr.png",
"com/fr/web/images/pdfPrint.png",
"com/fr/web/images/serverPrint.png",
"com/fr/web/images/email.png",
"com/fr/web/images/preview.png",
"com/fr/design/images/server/platform_16_16.png",
"com/fr/design/images/data/user_widget.png",
"com/fr/design/images/server/plugin.png",
"com/fr/web/images/excel.png",
"com/fr/design/images/m_web/function.png",
"com/fr/web/images/word.png",
"com/fr/web/images/pageSetup.png",
"com/fr/web/images/export.png",
"com/fr/design/images/m_web/edit.png",
"com/fr/web/images/pageNumber.png",
"com/fr/web/images/first.png",
"com/fr/design/images/m_web/style.png",
"com/fr/web/images/last.png",
"com/fr/web/images/previous.png",
"com/fr/web/images/next.png",
"com/fr/web/images/scale.png",
"com/fr/web/images/appendRow.png",
"com/fr/web/images/deleteRow.png",
"com/fr/web/images/verify.gif",
"com/fr/web/images/save2.png",
"com/fr/design/images/m_file/export.png",
"com/fr/web/images/showValue.png",
"com/fr/web/images/pianyi.png",
"com/fr/web/images/writeOffline.png",
"com/fr/web/images/edit/stash.png",
"com/fr/web/images/edit/clearstash.png",
"com/fr/design/images/m_insert/cell.png",
"com/fr/design/images/m_insert/float.png",
"com/fr/design/images/gui/color/background.png",
"com/fr/design/images/m_format/cell.png",
"com/fr/design/images/data/source/dataDictionary.png",
"com/fr/design/images/m_format/cellstyle/bold_white.png",
"com/fr/design/images/m_format/cellstyle/italic_white.png",
"com/fr/design/images/m_format/cellstyle/underline_white.png",
"com/fr/design/images/m_format/noboder.png",
"com/fr/design/images/gui/popup.gif",
"com/fr/design/images/m_insert/floatPop.png",
"com/fr/web/images/platform/demo.png",
"com/fr/base/images/dialog/pagesetup/down.png",
"com/fr/base/images/dialog/pagesetup/over.png",
"com/fr/web/images/reportlet.png",
"com/fr/design/images/buttonicon/switchShortCuts.png",
"com/fr/design/images/buttonicon/ds_column_name.png",
"com/fr/base/images/cell/control/add.png",
"com/fr/base/images/cell/control/rename.png",
"com/fr/base/images/cell/control/remove.png",
"com/fr/design/images/control/up.png",
"com/fr/design/images/control/down.png",
"com/fr/design/images/condition/bracket.png",
"com/fr/design/images/condition/unBracket.png"
};
}
Loading…
Cancel
Save