Browse Source

Merge branch 'feature/9.0' of http://cloud.finedevelop.com:2015/scm/~kerry/design into feature/9.0

kerry 8 years ago
parent
commit
1281565f15
  1. 38
      designer/src/com/fr/design/mainframe/JWorkBook.java
  2. 36
      designer/src/com/fr/design/mainframe/alphafine/component/AlphaFineDialog.java
  3. 18
      designer/src/com/fr/design/mainframe/alphafine/search/manager/impl/FileSearchManager.java
  4. 12
      designer/src/com/fr/design/mainframe/alphafine/search/manager/impl/PluginSearchManager.java
  5. 3
      designer/src/com/fr/start/Designer.java
  6. 19
      designer_base/src/com/fr/design/actions/core/ActionFactory.java
  7. 10
      designer_base/src/com/fr/design/actions/file/WebPreviewUtils.java
  8. 14
      designer_base/src/com/fr/design/extra/PluginOperateUtils.java
  9. 18
      designer_base/src/com/fr/design/extra/PluginWebBridge.java
  10. 26
      designer_base/src/com/fr/design/extra/WebViewDlgHelper.java
  11. 15
      designer_base/src/com/fr/design/extra/exe/GetPluginFromStoreExecutor.java
  12. 8
      designer_base/src/com/fr/design/file/MutilTempalteTabPane.java
  13. 14
      designer_base/src/com/fr/design/fun/TemplateTreeShortCutProvider.java
  14. 26
      designer_base/src/com/fr/design/fun/impl/AbstractTemplateTreeShortCutProvider.java
  15. BIN
      designer_base/src/com/fr/design/images/chart/EmptyChart.png
  16. 3
      designer_base/src/com/fr/design/locale/designer.properties
  17. 3
      designer_base/src/com/fr/design/locale/designer_en_US.properties
  18. 3
      designer_base/src/com/fr/design/locale/designer_ja_JP.properties
  19. 3
      designer_base/src/com/fr/design/locale/designer_ko_KR.properties
  20. 3
      designer_base/src/com/fr/design/locale/designer_zh_CN.properties
  21. 3
      designer_base/src/com/fr/design/locale/designer_zh_TW.properties
  22. 29
      designer_base/src/com/fr/design/mainframe/DesignerFrameFileDealerPane.java
  23. 6
      designer_base/src/com/fr/design/mainframe/JTemplate.java
  24. 8
      designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java
  25. 36
      designer_base/src/com/fr/design/mainframe/toolbar/ToolBarNewTemplatePane.java
  26. 46
      designer_base/src/com/fr/design/mainframe/toolbar/VcsScene.java
  27. 20
      designer_base/src/com/fr/env/RemoteEnv.java
  28. BIN
      designer_chart/src/com/fr/design/images/us_emptydata.png
  29. BIN
      designer_chart/src/com/fr/design/images/zh_emptydata.png
  30. 1
      designer_chart/src/com/fr/design/module/ChartDesignerModule.java
  31. 46
      designer_chart/src/com/fr/design/module/ChartEmptyDataStyleAction.java
  32. 237
      designer_chart/src/com/fr/design/module/ChartEmptyDataStylePane.java

38
designer/src/com/fr/design/mainframe/JWorkBook.java

@ -1,12 +1,25 @@
package com.fr.design.mainframe; package com.fr.design.mainframe;
import com.fr.base.*; import com.fr.base.BaseUtils;
import com.fr.base.DynamicUnitList;
import com.fr.base.FRContext;
import com.fr.base.Parameter;
import com.fr.base.ScreenResolution;
import com.fr.base.vcs.DesignerMode;
import com.fr.design.DesignModelAdapter; import com.fr.design.DesignModelAdapter;
import com.fr.design.ExtraDesignClassManager; import com.fr.design.ExtraDesignClassManager;
import com.fr.design.actions.AllowAuthorityEditAction; import com.fr.design.actions.AllowAuthorityEditAction;
import com.fr.design.actions.ExitAuthorityEditAction; import com.fr.design.actions.ExitAuthorityEditAction;
import com.fr.design.actions.file.WebPreviewUtils; import com.fr.design.actions.file.WebPreviewUtils;
import com.fr.design.actions.file.export.*; import com.fr.design.actions.file.export.CSVExportAction;
import com.fr.design.actions.file.export.EmbeddedExportExportAction;
import com.fr.design.actions.file.export.ExcelExportAction;
import com.fr.design.actions.file.export.PDFExportAction;
import com.fr.design.actions.file.export.PageExcelExportAction;
import com.fr.design.actions.file.export.PageToSheetExcelExportAction;
import com.fr.design.actions.file.export.SVGExportAction;
import com.fr.design.actions.file.export.TextExportAction;
import com.fr.design.actions.file.export.WordExportAction;
import com.fr.design.actions.report.ReportExportAttrAction; import com.fr.design.actions.report.ReportExportAttrAction;
import com.fr.design.actions.report.ReportMobileAttrAction; import com.fr.design.actions.report.ReportMobileAttrAction;
import com.fr.design.actions.report.ReportParameterAction; import com.fr.design.actions.report.ReportParameterAction;
@ -30,7 +43,11 @@ import com.fr.design.mainframe.cell.QuickEditorRegion;
import com.fr.design.mainframe.templateinfo.JWorkBookProcessInfo; import com.fr.design.mainframe.templateinfo.JWorkBookProcessInfo;
import com.fr.design.mainframe.templateinfo.TemplateProcessInfo; import com.fr.design.mainframe.templateinfo.TemplateProcessInfo;
import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus;
import com.fr.design.menu.*; import com.fr.design.menu.KeySetUtils;
import com.fr.design.menu.MenuDef;
import com.fr.design.menu.NameSeparator;
import com.fr.design.menu.ShortCut;
import com.fr.design.menu.ToolBarDef;
import com.fr.design.module.DesignModuleFactory; import com.fr.design.module.DesignModuleFactory;
import com.fr.design.parameter.ParameterDefinitePane; import com.fr.design.parameter.ParameterDefinitePane;
import com.fr.design.parameter.ParameterInputPane; import com.fr.design.parameter.ParameterInputPane;
@ -62,7 +79,6 @@ import com.fr.poly.PolyDesigner;
import com.fr.poly.creator.BlockCreator; import com.fr.poly.creator.BlockCreator;
import com.fr.privilege.finegrain.WorkSheetPrivilegeControl; import com.fr.privilege.finegrain.WorkSheetPrivilegeControl;
import com.fr.report.ReportHelper; import com.fr.report.ReportHelper;
import com.fr.report.elementcase.ElementCase;
import com.fr.report.elementcase.TemplateElementCase; import com.fr.report.elementcase.TemplateElementCase;
import com.fr.report.poly.PolyWorkSheet; import com.fr.report.poly.PolyWorkSheet;
import com.fr.report.worksheet.WorkSheet; import com.fr.report.worksheet.WorkSheet;
@ -73,11 +89,13 @@ import com.fr.stable.module.Module;
import com.fr.stable.project.ProjectConstants; import com.fr.stable.project.ProjectConstants;
import javax.swing.*; import javax.swing.*;
import javax.swing.Icon;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.util.*; import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
/** /**
* JWorkBook used to edit WorkBook. * JWorkBook used to edit WorkBook.
@ -570,9 +588,11 @@ public class JWorkBook extends JTemplate<WorkBook, WorkBookUndoState> {
* @return 子菜单 * @return 子菜单
*/ */
public ShortCut[] shortcut4FileMenu() { public ShortCut[] shortcut4FileMenu() {
return (ShortCut[]) ArrayUtils.addAll( boolean showWorkBookExportMenu = DesignerMode.isVcsMode()
super.shortcut4FileMenu(), || BaseUtils.isAuthorityEditing()
BaseUtils.isAuthorityEditing() || (FRContext.getCurrentEnv() instanceof RemoteEnv) ? new ShortCut[0] : new ShortCut[]{this.createWorkBookExportMenu()} || (FRContext.getCurrentEnv() instanceof RemoteEnv);
return (ShortCut[]) ArrayUtils.addAll(super.shortcut4FileMenu(),
showWorkBookExportMenu ? new ShortCut[0] : new ShortCut[]{this.createWorkBookExportMenu()}
); );
} }

36
designer/src/com/fr/design/mainframe/alphafine/component/AlphaFineDialog.java

@ -390,7 +390,6 @@ public class AlphaFineDialog extends UIDialog {
*/ */
private void rebuildList(String searchText) { private void rebuildList(String searchText) {
resetContainer(); resetContainer();
if (searchText.startsWith(ADVANCED_SEARCH_MARK)) { if (searchText.startsWith(ADVANCED_SEARCH_MARK)) {
if (searchText.startsWith(ACTION_MARK_SHORT) || searchText.startsWith(ACTION_MARK)) { if (searchText.startsWith(ACTION_MARK_SHORT) || searchText.startsWith(ACTION_MARK)) {
storeText = searchText.substring(searchText.indexOf(StringUtils.BLANK) + 1, searchText.length()); storeText = searchText.substring(searchText.indexOf(StringUtils.BLANK) + 1, searchText.length());
@ -624,6 +623,7 @@ public class AlphaFineDialog extends UIDialog {
private void dealWithMoreOrLessResult(int index, MoreModel selectedValue) { private void dealWithMoreOrLessResult(int index, MoreModel selectedValue) {
if (ComparatorUtils.equals(Inter.getLocText("FR-Designer_AlphaFine_ShowAll"), selectedValue.getContent())) { if (ComparatorUtils.equals(Inter.getLocText("FR-Designer_AlphaFine_ShowAll"), selectedValue.getContent())) {
selectedValue.setContent(Inter.getLocText("FR-Designer_AlphaFine_ShowLess")); selectedValue.setContent(Inter.getLocText("FR-Designer_AlphaFine_ShowLess"));
rebuildShowMoreList(index, selectedValue); rebuildShowMoreList(index, selectedValue);
} else { } else {
selectedValue.setContent(Inter.getLocText("FR-Designer_AlphaFine_ShowAll")); selectedValue.setContent(Inter.getLocText("FR-Designer_AlphaFine_ShowAll"));
@ -664,7 +664,9 @@ public class AlphaFineDialog extends UIDialog {
searchResultList.setSelectedIndex(searchResultList.getSelectedIndex() + 1); searchResultList.setSelectedIndex(searchResultList.getSelectedIndex() + 1);
} else if (e.getKeyCode() == KeyEvent.VK_UP) { } else if (e.getKeyCode() == KeyEvent.VK_UP) {
searchResultList.setSelectedIndex(searchResultList.getSelectedIndex() - 1); searchResultList.setSelectedIndex(searchResultList.getSelectedIndex() - 1);
} else escAlphaFineDialog(e); } else {
escAlphaFineDialog(e);
}
} }
}); });
@ -794,14 +796,34 @@ public class AlphaFineDialog extends UIDialog {
* @param index * @param index
* @param selectedValue * @param selectedValue
*/ */
private void rebuildShowMoreList(int index, MoreModel selectedValue) { private void rebuildShowMoreList(final int index, final MoreModel selectedValue) {
SearchResult moreResult = getMoreResult(selectedValue);
if ((selectedValue).getContent().equals(Inter.getLocText("FR-Designer_AlphaFine_ShowLess"))) { if ((selectedValue).getContent().equals(Inter.getLocText("FR-Designer_AlphaFine_ShowLess"))) {
for (int i = 0; i < moreResult.size(); i++) { splitLabel.setIcon(new ImageIcon(getClass().getResource(AlphaFineConstants.IMAGE_URL + "bigloading.gif")));
this.searchListModel.add(index + AlphaFineConstants.SHOW_SIZE + 1 + i, moreResult.get(i)); if (this.searchWorker != null && !this.searchWorker.isDone()) {
this.searchWorker.cancel(true);
this.searchWorker = null;
}
this.searchWorker = new SwingWorker() {
@Override
protected Object doInBackground() throws Exception {
SearchResult moreResults = getMoreResult(selectedValue);
for (int i = 0; i < moreResults.size(); i++) {
searchListModel.add(index + AlphaFineConstants.SHOW_SIZE + 1 + i, moreResults.get(i));
} }
return null;
}
@Override
protected void done() {
if (!isCancelled()) {
splitLabel.setIcon(null);
}
}
};
this.searchWorker.execute();
} else { } else {
for (int i = 0; i < moreResult.size(); i++) { for (int i = 0; i < getMoreResult(selectedValue).size(); i++) {
this.searchListModel.remove(index + AlphaFineConstants.SHOW_SIZE + 1); this.searchListModel.remove(index + AlphaFineConstants.SHOW_SIZE + 1);
} }

18
designer/src/com/fr/design/mainframe/alphafine/search/manager/impl/FileSearchManager.java

@ -39,6 +39,7 @@ public class FileSearchManager implements AlphaFineSearchProvider {
private static FileSearchManager fileSearchManager = null; private static FileSearchManager fileSearchManager = null;
private SearchResult filterModelList; private SearchResult filterModelList;
private SearchResult lessModelList; private SearchResult lessModelList;
private SearchResult moreModelList;
private List<FileNode> fileNodes = null; private List<FileNode> fileNodes = null;
//停止搜索 //停止搜索
private boolean stopSearch = false; private boolean stopSearch = false;
@ -73,6 +74,7 @@ public class FileSearchManager implements AlphaFineSearchProvider {
public synchronized SearchResult getLessSearchResult(String searchText) { public synchronized SearchResult getLessSearchResult(String searchText) {
this.filterModelList = new SearchResult(); this.filterModelList = new SearchResult();
this.lessModelList = new SearchResult(); this.lessModelList = new SearchResult();
this.moreModelList = new SearchResult();
searchText = dealWithSearchText(searchText); searchText = dealWithSearchText(searchText);
if (StringUtils.isBlank(searchText) || ComparatorUtils.equals(searchText, DS_NAME)) { if (StringUtils.isBlank(searchText) || ComparatorUtils.equals(searchText, DS_NAME)) {
lessModelList.add(new MoreModel(Inter.getLocText("FR-Designer_Templates"))); lessModelList.add(new MoreModel(Inter.getLocText("FR-Designer_Templates")));
@ -101,16 +103,20 @@ public class FileSearchManager implements AlphaFineSearchProvider {
@Override @Override
public SearchResult getMoreSearchResult(String searchText) { public SearchResult getMoreSearchResult(String searchText) {
if (moreModelList != null && !moreModelList.isEmpty()) {
return moreModelList;
}
this.filterModelList = new SearchResult(); this.filterModelList = new SearchResult();
this.lessModelList = new SearchResult(); this.lessModelList = new SearchResult();
this.moreModelList = new SearchResult();
searchText = dealWithSearchText(searchText); searchText = dealWithSearchText(searchText);
Env env = FRContext.getCurrentEnv(); Env env = FRContext.getCurrentEnv();
AlphaFineHelper.checkCancel(); AlphaFineHelper.checkCancel();
isContainCpt = true; isContainCpt = true;
isContainFrm = true; isContainFrm = true;
doSearch(searchText, false, env); doSearch(searchText, false, env);
lessModelList.addAll(filterModelList.subList(AlphaFineConstants.SHOW_SIZE, filterModelList.size())); moreModelList.addAll(filterModelList.subList(AlphaFineConstants.SHOW_SIZE, filterModelList.size()));
return lessModelList; return moreModelList;
} }
private void doSearch(String searchText, boolean needMore, Env env) { private void doSearch(String searchText, boolean needMore, Env env) {
@ -272,4 +278,12 @@ public class FileSearchManager implements AlphaFineSearchProvider {
public void setContainFrm(boolean containFrm) { public void setContainFrm(boolean containFrm) {
isContainFrm = containFrm; isContainFrm = containFrm;
} }
public SearchResult getMoreModelList() {
return moreModelList;
}
public void setMoreModelList(SearchResult moreModelList) {
this.moreModelList = moreModelList;
}
} }

12
designer/src/com/fr/design/mainframe/alphafine/search/manager/impl/PluginSearchManager.java

@ -15,6 +15,8 @@ import com.fr.general.http.HttpClient;
import com.fr.json.JSONArray; import com.fr.json.JSONArray;
import com.fr.json.JSONException; import com.fr.json.JSONException;
import com.fr.json.JSONObject; import com.fr.json.JSONObject;
import com.fr.plugin.basic.version.Version;
import com.fr.plugin.basic.version.VersionIntervalFactory;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
@ -37,10 +39,18 @@ public class PluginSearchManager implements AlphaFineSearchProvider {
} }
private static boolean isCompatibleCurrentEnv(String envVersion){
return VersionIntervalFactory.create(envVersion).contain(Version.currentEnvVersion());
}
private static PluginModel getPluginModel(JSONObject object, boolean isFromCloud) { private static PluginModel getPluginModel(JSONObject object, boolean isFromCloud) {
String name = object.optString("name"); String name = object.optString("name");
String content = object.optString("description"); String content = object.optString("description");
String pluginId = object.optString("pluginid"); String pluginId = object.optString("pluginid");
String envVersion = object.optString("envversion");
if (!isCompatibleCurrentEnv(envVersion)) {
return null;
}
int id = object.optInt("id"); int id = object.optInt("id");
int searchCount = object.optInt("searchCount"); int searchCount = object.optInt("searchCount");
String imageUrl = null; String imageUrl = null;
@ -107,7 +117,7 @@ public class PluginSearchManager implements AlphaFineSearchProvider {
for (int i = 0; i < jsonArray.length(); i++) { for (int i = 0; i < jsonArray.length(); i++) {
AlphaFineHelper.checkCancel(); AlphaFineHelper.checkCancel();
PluginModel cellModel = getPluginModel(jsonArray.optJSONObject(i), false); PluginModel cellModel = getPluginModel(jsonArray.optJSONObject(i), false);
if (!AlphaFineHelper.getFilterResult().contains(cellModel)) { if (cellModel != null && !AlphaFineHelper.getFilterResult().contains(cellModel)) {
searchResult.add(cellModel); searchResult.add(cellModel);
} }
} }

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

@ -130,6 +130,9 @@ public class Designer extends BaseDesigner {
if (ActionFactory.getChartPreStyleAction() != null) { if (ActionFactory.getChartPreStyleAction() != null) {
menuDef.addShortCut(ActionFactory.getChartPreStyleAction()); menuDef.addShortCut(ActionFactory.getChartPreStyleAction());
} }
if (ActionFactory.getChartEmptyDataStyleAction() != null) {
menuDef.addShortCut(ActionFactory.getChartEmptyDataStyleAction());
}
if (ActionFactory.getChartMapEditorAction() != null) { if (ActionFactory.getChartMapEditorAction() != null) {
menuDef.addShortCut(ActionFactory.getChartMapEditorAction()); menuDef.addShortCut(ActionFactory.getChartMapEditorAction());
} }

19
designer_base/src/com/fr/design/actions/core/ActionFactory.java

@ -50,6 +50,7 @@ public class ActionFactory {
private static ConcurrentMap<Class, Class<? extends QuickEditor>> cellEditorClass = new ConcurrentHashMap<>(); private static ConcurrentMap<Class, Class<? extends QuickEditor>> cellEditorClass = new ConcurrentHashMap<>();
private static UpdateAction chartPreStyleAction = null; private static UpdateAction chartPreStyleAction = null;
private static UpdateAction chartEmptyDataStyleAction = null;
private static UpdateAction chartMapEditorAction = null; private static UpdateAction chartMapEditorAction = null;
private ActionFactory() { private ActionFactory() {
@ -126,6 +127,15 @@ public class ActionFactory {
chartPreStyleAction = action; chartPreStyleAction = action;
} }
/**
* 注册图表的 空数据提示样式.
*
* @param action 注册的图表空数据提示样式action
*/
public static void registerChartEmptyDataStyleAction(UpdateAction action) {
chartEmptyDataStyleAction = action;
}
/** /**
* kunsnat: 图表注册 悬浮元素编辑器 , 因为ChartCollection和ChartQuickEditor一个在Chart,一个在Designer, 所以分开注册. * kunsnat: 图表注册 悬浮元素编辑器 , 因为ChartCollection和ChartQuickEditor一个在Chart,一个在Designer, 所以分开注册.
* *
@ -157,6 +167,15 @@ public class ActionFactory {
return chartPreStyleAction; return chartPreStyleAction;
} }
/**
* 图表空数据提示样式Action
*
* @return 图表空数据提示样式Action
*/
public static UpdateAction getChartEmptyDataStyleAction() {
return chartEmptyDataStyleAction;
}
/** /**
* 图表编辑器Action * 图表编辑器Action

10
designer_base/src/com/fr/design/actions/file/WebPreviewUtils.java

@ -1,5 +1,6 @@
package com.fr.design.actions.file; package com.fr.design.actions.file;
import com.fr.base.vcs.DesignerMode;
import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.DesignerContext;
import com.fr.design.mainframe.JTemplate; import com.fr.design.mainframe.JTemplate;
import com.fr.design.utils.DesignUtils; import com.fr.design.utils.DesignUtils;
@ -11,6 +12,8 @@ import com.fr.general.web.ParameterConsts;
import com.fr.stable.project.ProjectConstants; import com.fr.stable.project.ProjectConstants;
import javax.swing.*; import javax.swing.*;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
public final class WebPreviewUtils { public final class WebPreviewUtils {
@ -28,6 +31,10 @@ public final class WebPreviewUtils {
return; return;
} }
if (map == null || map == Collections.EMPTY_MAP) {
map = new HashMap<>();
}
map.put("mode", DesignerMode.getMode().toString());
DesignerContext.getDesignerFrame().refreshToolbar(); DesignerContext.getDesignerFrame().refreshToolbar();
jt.stopEditing(); jt.stopEditing();
@ -68,7 +75,7 @@ public final class WebPreviewUtils {
String path = currentTemplate.getPath(); String path = currentTemplate.getPath();
if (path.startsWith(ProjectConstants.REPORTLETS_NAME)) { if (path.startsWith(ProjectConstants.REPORTLETS_NAME)) {
path = path.substring(ProjectConstants.REPORTLETS_NAME.length() + 1); path = path.substring(ProjectConstants.REPORTLETS_NAME.length() + 1);
}
java.util.List<String> parameterNameList = new java.util.ArrayList<String>(); java.util.List<String> parameterNameList = new java.util.ArrayList<String>();
java.util.List<String> parameterValueList = new java.util.ArrayList<String>(); java.util.List<String> parameterValueList = new java.util.ArrayList<String>();
@ -81,7 +88,6 @@ public final class WebPreviewUtils {
} }
} }
DesignUtils.visitEnvServerByParameters(parameterNameList.toArray(new String[parameterNameList.size()]), parameterValueList.toArray(new String[parameterValueList.size()])); DesignUtils.visitEnvServerByParameters(parameterNameList.toArray(new String[parameterNameList.size()]), parameterValueList.toArray(new String[parameterValueList.size()]));
}
} else { } else {
int selVal = JOptionPane.showConfirmDialog(DesignerContext.getDesignerFrame(), Inter.getLocText("Web_Preview_Message"), int selVal = JOptionPane.showConfirmDialog(DesignerContext.getDesignerFrame(), Inter.getLocText("Web_Preview_Message"),
Inter.getLocText("Preview_ToolTips"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE); Inter.getLocText("Preview_ToolTips"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE);

14
designer_base/src/com/fr/design/extra/PluginOperateUtils.java

@ -122,7 +122,7 @@ public class PluginOperateUtils {
return resultArray.toString(); return resultArray.toString();
} }
public static void dealParams(StringBuilder url, String category, String seller, String fee) { public static void dealParams(StringBuilder url, String category, String seller, String fee, String scope) {
if (StringUtils.isNotBlank(category)) { if (StringUtils.isNotBlank(category)) {
url.append("cid=").append(category.split("-")[1]); url.append("cid=").append(category.split("-")[1]);
} else { } else {
@ -152,6 +152,18 @@ public class PluginOperateUtils {
url.append("&fee=").append(StringUtils.EMPTY); url.append("&fee=").append(StringUtils.EMPTY);
} }
} }
if (StringUtils.isNotBlank(scope)) {
switch (scope.split("-")[1]) {
case "universal":
url.append("&scope=").append(1);
break;
case "program":
url.append("&scope=").append(2);
break;
default:
url.append("&scope=").append(StringUtils.EMPTY);
}
}
} }
public static void getLoginInfo(JSCallback jsCallback, UILabel uiLabel) { public static void getLoginInfo(JSCallback jsCallback, UILabel uiLabel) {

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

@ -339,10 +339,26 @@ public class PluginWebBridge {
* @param callback 回调函数 * @param callback 回调函数
*/ */
public void getPluginFromStore(String category, String seller, String fee, final JSObject callback) { public void getPluginFromStore(String category, String seller, String fee, final JSObject callback) {
Task<Void> task = new PluginTask<>(webEngine, callback, new GetPluginFromStoreExecutor(category, seller, fee)); Task<Void> task = new PluginTask<>(webEngine, callback, new GetPluginFromStoreExecutor(category, seller, fee, ""));
threadPoolExecutor.submit(task); threadPoolExecutor.submit(task);
} }
/**
* 根据条件获取在线插件
*
* @param info 插件信息
* @param callback 回调函数
*/
public void getPluginFromStoreNew(String info, final JSObject callback) {
try {
Task<Void> task = new PluginTask<>(webEngine, callback, new GetPluginFromStoreExecutor(new JSONObject(info)));
threadPoolExecutor.submit(task);
} catch (JSONException e) {
FRLogger.getLogger().error(e.getMessage());
}
}
public void getPluginPrefix(final JSObject callback) { public void getPluginPrefix(final JSObject callback) {
Task<Void> task = new PluginTask<>(webEngine, callback, new GetPluginPrefixExecutor()); Task<Void> task = new PluginTask<>(webEngine, callback, new GetPluginPrefixExecutor());
threadPoolExecutor.submit(task); threadPoolExecutor.submit(task);

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

@ -5,6 +5,7 @@ import com.fr.design.dialog.BasicPane;
import com.fr.design.dialog.UIDialog; import com.fr.design.dialog.UIDialog;
import com.fr.design.gui.frpane.UITabbedPane; import com.fr.design.gui.frpane.UITabbedPane;
import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.DesignerContext;
import com.fr.general.CommonIOUtils;
import com.fr.general.ComparatorUtils; import com.fr.general.ComparatorUtils;
import com.fr.general.GeneralContext; import com.fr.general.GeneralContext;
import com.fr.general.IOUtils; import com.fr.general.IOUtils;
@ -22,9 +23,7 @@ import javax.swing.SwingWorker;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.Component; import java.awt.Component;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.IOException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.lang.reflect.Constructor; import java.lang.reflect.Constructor;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
@ -94,27 +93,17 @@ public class WebViewDlgHelper {
public static void checkAndCopyMainFile(String indexPath, String mainJsPath) { public static void checkAndCopyMainFile(String indexPath, String mainJsPath) {
File file = new File(indexPath); File file = new File(indexPath);
if (!file.exists()) { if (!file.exists()) {
copyMainFile(indexPath, mainJsPath); copyMainFile(mainJsPath);
} }
} }
/** /**
* 將script文件夹中的plugin.html文件复制到webreport下 * 將script文件夹中的plugin.html文件复制到webreport下
*/ */
public static void copyMainFile(String indexPath, String mainJsPath) { private static void copyMainFile(String mainJsPath) {
try { try {
File mainJsFile = new File(mainJsPath); CommonIOUtils.copy(new File(mainJsPath), new File(installHome));
int byteread = 0; } catch (IOException e) {
if (mainJsFile.exists()) {
InputStream inStream = new FileInputStream(mainJsPath);
FileOutputStream fs = new FileOutputStream(indexPath);
byte[] buffer = new byte[BYTES_NUM];
while ((byteread = inStream.read(buffer)) != -1) {
fs.write(buffer, 0, byteread);
}
inStream.close();
}
} catch (Exception e) {
FRContext.getLogger().error(e.getMessage()); FRContext.getLogger().error(e.getMessage());
} }
} }
@ -131,6 +120,7 @@ public class WebViewDlgHelper {
/** /**
* 以关键词打开设计器商店显示搜索结果 * 以关键词打开设计器商店显示搜索结果
*
* @param keyword * @param keyword
* @param data * @param data
*/ */
@ -240,7 +230,7 @@ public class WebViewDlgHelper {
if (get()) { if (get()) {
String relativePath = "/scripts/plugin.html"; 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, "plugin.html"), StableUtils.pathJoin(installHome, relativePath)); copyMainFile(StableUtils.pathJoin(installHome, relativePath));
// TODO: 2017/4/17 删除之前存放在安装目录下的script // 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);

15
designer_base/src/com/fr/design/extra/exe/GetPluginFromStoreExecutor.java

@ -20,11 +20,20 @@ public class GetPluginFromStoreExecutor implements Executor {
private String category; private String category;
private String seller; private String seller;
private String fee; private String fee;
private String scope;
public GetPluginFromStoreExecutor(String category, String seller, String fee) { public GetPluginFromStoreExecutor(JSONObject info) {
this.category = info.optString("category");
this.fee = info.optString("fee");
this.seller = info.optString("seller");
this.scope = info.optString("scope");
}
public GetPluginFromStoreExecutor(String category, String seller, String fee, String scope) {
this.category = category; this.category = category;
this.seller = seller; this.seller = seller;
this.fee = fee; this.fee = fee;
this.scope = scope;
} }
@Override @Override
@ -44,7 +53,7 @@ public class GetPluginFromStoreExecutor implements Executor {
@Override @Override
public void run(Process<String> process) { public void run(Process<String> process) {
String plistUrl = SiteCenter.getInstance().acquireUrlByKind("shop.plugin.plist") + "?"; String plistUrl = SiteCenter.getInstance().acquireUrlByKind("shop.plugin.plist") + "?";
boolean getRecommend = StringUtils.isEmpty(category) && StringUtils.isEmpty(seller) && StringUtils.isEmpty(fee); boolean getRecommend = StringUtils.isEmpty(category) && StringUtils.isEmpty(seller) && StringUtils.isEmpty(fee) && StringUtils.isEmpty(scope);
if (getRecommend) { if (getRecommend) {
result = PluginOperateUtils.getRecommendPlugins(); result = PluginOperateUtils.getRecommendPlugins();
return; return;
@ -53,7 +62,7 @@ public class GetPluginFromStoreExecutor implements Executor {
if (StringUtils.isNotBlank(plistUrl)) { if (StringUtils.isNotBlank(plistUrl)) {
StringBuilder url = new StringBuilder(); StringBuilder url = new StringBuilder();
url.append(plistUrl); url.append(plistUrl);
PluginOperateUtils.dealParams(url, category, seller, fee); PluginOperateUtils.dealParams(url, category, seller, fee, scope);
try { try {
HttpClient httpClient = new HttpClient(url.toString()); HttpClient httpClient = new HttpClient(url.toString());
httpClient.asGet(); httpClient.asGet();

8
designer_base/src/com/fr/design/file/MutilTempalteTabPane.java

@ -3,6 +3,7 @@ package com.fr.design.file;
import com.fr.base.BaseUtils; import com.fr.base.BaseUtils;
import com.fr.base.GraphHelper; import com.fr.base.GraphHelper;
import com.fr.base.vcs.DesignerMode;
import com.fr.design.constants.UIConstants; import com.fr.design.constants.UIConstants;
import com.fr.design.gui.imenu.UIMenuItem; import com.fr.design.gui.imenu.UIMenuItem;
import com.fr.design.gui.imenu.UIScrollPopUpMenu; import com.fr.design.gui.imenu.UIScrollPopUpMenu;
@ -632,6 +633,11 @@ public class MutilTempalteTabPane extends JComponent implements MouseListener, M
* @param e 鼠标事件 * @param e 鼠标事件
*/ */
public void mousePressed(MouseEvent e) { public void mousePressed(MouseEvent e) {
//如果在版本管理情况下,不允许切换tab
if (DesignerMode.isVcsMode()) {
JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Designer-Vcs_tab_click"), Inter.getLocText("FR-Designer_Alert"), JOptionPane.WARNING_MESSAGE);
return;
}
int evtX = e.getX(); int evtX = e.getX();
int evtY = e.getY(); int evtY = e.getY();
@ -951,6 +957,4 @@ public class MutilTempalteTabPane extends JComponent implements MouseListener, M
} }
} }
} }
} }

14
designer_base/src/com/fr/design/fun/TemplateTreeShortCutProvider.java

@ -0,0 +1,14 @@
package com.fr.design.fun;
import com.fr.stable.fun.mark.Aftermath;
import com.fr.stable.fun.mark.Mutable;
/**
* 左上角目录树上边工具条的插件接口
* Created by hzzz on 2017/11/30.
*/
public interface TemplateTreeShortCutProvider extends Mutable, Aftermath {
String XML_TAG = "TemplateTreeShortCut";
int CURRENT_LEVEL = 1;
}

26
designer_base/src/com/fr/design/fun/impl/AbstractTemplateTreeShortCutProvider.java

@ -0,0 +1,26 @@
package com.fr.design.fun.impl;
import com.fr.design.actions.UpdateAction;
import com.fr.design.fun.TemplateTreeShortCutProvider;
import com.fr.stable.fun.mark.API;
/**
* 左上角目录树上边工具条的插件接口
* Created by hzzz on 2017/11/30.
*/
@API(level = TemplateTreeShortCutProvider.CURRENT_LEVEL)
public abstract class AbstractTemplateTreeShortCutProvider extends UpdateAction implements TemplateTreeShortCutProvider {
@Override
public String mark4Provider() {
return getClass().getName();
}
@Override
public void process() {
}
@Override
public void undo() {
}
}

BIN
designer_base/src/com/fr/design/images/chart/EmptyChart.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 274 B

3
designer_base/src/com/fr/design/locale/designer.properties

@ -2149,6 +2149,9 @@ FR-Designer_Provide_Choose_All=
FR-Designer_Decimal_Places= FR-Designer_Decimal_Places=
FR-Designer_Env_Des_Https=If HTTPS is enabled or the HTTPS configuration (certificate path, HTTPS key) is modified, you must restart the designer to take effect. FR-Designer_Env_Des_Https=If HTTPS is enabled or the HTTPS configuration (certificate path, HTTPS key) is modified, you must restart the designer to take effect.
FR-Designer_Format_JavaScript=Format Code FR-Designer_Format_JavaScript=Format Code
FR-Designer_Tip_Content=
FR-Designer_Chart_Empty_Data=
FR-Designer-Vcs_tab_click=Please exit the version management status and then switch the template
FR-Designer_Preference_CachingTemplate=Template memory optimization FR-Designer_Preference_CachingTemplate=Template memory optimization
FR-Designer_Preference_MaxCachingTemplate=The designer maximum cache template number: FR-Designer_Preference_MaxCachingTemplate=The designer maximum cache template number:
FR-Designer_Preference_CachingTemplateTip=Set to 0 to close the function; restart the designer and take effect FR-Designer_Preference_CachingTemplateTip=Set to 0 to close the function; restart the designer and take effect

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

@ -2148,6 +2148,9 @@ FR-Designer_Provide_Choose_All=
FR-Designer_Decimal_Places= FR-Designer_Decimal_Places=
FR-Designer_Env_Des_Https=If HTTPS is enabled or the HTTPS configuration (certificate path, HTTPS key) is modified, you must restart the designer to take effect. FR-Designer_Env_Des_Https=If HTTPS is enabled or the HTTPS configuration (certificate path, HTTPS key) is modified, you must restart the designer to take effect.
FR-Designer_Format_JavaScript=Format Code FR-Designer_Format_JavaScript=Format Code
FR-Designer_Tip_Content=
FR-Designer_Chart_Empty_Data=
FR-Designer-Vcs_tab_click=Please exit the version management status and then switch the template
FR-Designer_Preference_CachingTemplate=Template memory optimization FR-Designer_Preference_CachingTemplate=Template memory optimization
FR-Designer_Preference_MaxCachingTemplate=The designer maximum cache template number: FR-Designer_Preference_MaxCachingTemplate=The designer maximum cache template number:
FR-Designer_Preference_CachingTemplateTip=Set to 0 to close the function; restart the designer and take effect FR-Designer_Preference_CachingTemplateTip=Set to 0 to close the function; restart the designer and take effect

3
designer_base/src/com/fr/design/locale/designer_ja_JP.properties

@ -2149,6 +2149,9 @@ FR-Designer_Decimal_Places=\u5C0F\u6570\u67A0\u6570:
FR-Base-Load_Resource_File=\u8A2D\u5B9A\u30D5\u30A1\u30A4\u30EB\u30ED\u30FC\u30C9 FR-Base-Load_Resource_File=\u8A2D\u5B9A\u30D5\u30A1\u30A4\u30EB\u30ED\u30FC\u30C9
FR-Designer_Env_Des_Https= FR-Designer_Env_Des_Https=
FR-Designer_Format_JavaScript=Format Code FR-Designer_Format_JavaScript=Format Code
FR-Designer_Tip_Content=
FR-Designer_Chart_Empty_Data=
FR-Designer-Vcs_tab_click=
FR-Designer_Move_Up= FR-Designer_Move_Up=
FR-Designer_Move_Down= FR-Designer_Move_Down=
FR-Designer_Move_To_Top= FR-Designer_Move_To_Top=

3
designer_base/src/com/fr/design/locale/designer_ko_KR.properties

@ -2149,6 +2149,9 @@ FR-Designer_Export_Background=
FR-Designer_Print_Background= FR-Designer_Print_Background=
FR-Designer_Env_Des_Https= FR-Designer_Env_Des_Https=
FR-Designer_Format_JavaScript=Format Code FR-Designer_Format_JavaScript=Format Code
FR-Designer_Tip_Content=
FR-Designer_Chart_Empty_Data=
FR-Designer-Vcs_tab_click=
FR-Designer_Move_Up= FR-Designer_Move_Up=
FR-Designer_Move_Down= FR-Designer_Move_Down=
FR-Designer_Move_To_Top= FR-Designer_Move_To_Top=

3
designer_base/src/com/fr/design/locale/designer_zh_CN.properties

@ -2149,6 +2149,9 @@ FR-Designer_Provide_Choose_All=
FR-Designer_Decimal_Places= FR-Designer_Decimal_Places=
FR-Designer_Env_Des_Https=\u82E5\u542F\u7528https\u6216\u4FEE\u6539https\u914D\u7F6E\uFF08\u8BC1\u4E66\u8DEF\u5F84\u3001https\u79D8\u94A5\uFF09\uFF0C\u5FC5\u987B\u91CD\u542F\u8BBE\u8BA1\u5668\u624D\u80FD\u751F\u6548\u3002 FR-Designer_Env_Des_Https=\u82E5\u542F\u7528https\u6216\u4FEE\u6539https\u914D\u7F6E\uFF08\u8BC1\u4E66\u8DEF\u5F84\u3001https\u79D8\u94A5\uFF09\uFF0C\u5FC5\u987B\u91CD\u542F\u8BBE\u8BA1\u5668\u624D\u80FD\u751F\u6548\u3002
FR-Designer_Format_JavaScript=\u683C\u5F0F\u5316\u4EE3\u7801 FR-Designer_Format_JavaScript=\u683C\u5F0F\u5316\u4EE3\u7801
FR-Designer_Tip_Content=\u63D0\u793A\u5185\u5BB9
FR-Designer_Chart_Empty_Data=\u56FE\u8868\u7A7A\u6570\u636E\u63D0\u793A
FR-Designer-Vcs_tab_click=\u8BF7\u5148\u9000\u51FA\u7248\u672C\u7BA1\u7406\u72B6\u6001\u518D\u5207\u6362\u6A21\u677F
FR-Designer_Preference_CachingTemplate=\u6A21\u677F\u5185\u5B58\u4F18\u5316 FR-Designer_Preference_CachingTemplate=\u6A21\u677F\u5185\u5B58\u4F18\u5316
FR-Designer_Preference_MaxCachingTemplate=\u8BBE\u8BA1\u5668\u6700\u5927\u7F13\u5B58\u6A21\u677F\u4E2A\u6570\uFF1A FR-Designer_Preference_MaxCachingTemplate=\u8BBE\u8BA1\u5668\u6700\u5927\u7F13\u5B58\u6A21\u677F\u4E2A\u6570\uFF1A
FR-Designer_Preference_CachingTemplateTip=\u8BBE\u7F6E\u4E3A0\u8868\u793A\u5173\u95ED\u8BE5\u529F\u80FD\uFF1B\u91CD\u542F\u8BBE\u8BA1\u5668\u540E\u751F\u6548 FR-Designer_Preference_CachingTemplateTip=\u8BBE\u7F6E\u4E3A0\u8868\u793A\u5173\u95ED\u8BE5\u529F\u80FD\uFF1B\u91CD\u542F\u8BBE\u8BA1\u5668\u540E\u751F\u6548

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

@ -2148,6 +2148,9 @@ FR-Designer_Provide_Choose_All=
FR-Designer_Decimal_Places= FR-Designer_Decimal_Places=
FR-Designer_Env_Des_Https=\u82E5\u555F\u7528https\u6216\u4FEE\u6539https\u914D\u7F6E\uFF08\u8B49\u66F8\u8DEF\u5F91\u3001https\u7955\u9470\uFF09\uFF0C\u5FC5\u9808\u91CD\u555F\u8A2D\u8A08\u5668\u624D\u80FD\u751F\u6548\u3002 FR-Designer_Env_Des_Https=\u82E5\u555F\u7528https\u6216\u4FEE\u6539https\u914D\u7F6E\uFF08\u8B49\u66F8\u8DEF\u5F91\u3001https\u7955\u9470\uFF09\uFF0C\u5FC5\u9808\u91CD\u555F\u8A2D\u8A08\u5668\u624D\u80FD\u751F\u6548\u3002
FR-Designer_Format_JavaScript=Format Code FR-Designer_Format_JavaScript=Format Code
FR-Designer_Tip_Content=
FR-Designer_Chart_Empty_Data=
FR-Designer-Vcs_tab_click=
FR-Designer_Preference_CachingTemplate=\u7BC4\u672C\u8A18\u61B6\u9AD4\u512A\u5316 FR-Designer_Preference_CachingTemplate=\u7BC4\u672C\u8A18\u61B6\u9AD4\u512A\u5316
FR-Designer_Preference_MaxCachingTemplate=\u8A2D\u8A08\u5668\u6700\u5927\u7DE9\u5B58\u7BC4\u672C\u500B\u6578\uFF1A FR-Designer_Preference_MaxCachingTemplate=\u8A2D\u8A08\u5668\u6700\u5927\u7DE9\u5B58\u7BC4\u672C\u500B\u6578\uFF1A
FR-Designer_Preference_CachingTemplateTip=\u8A2D\u5B9A\u70BA0\u8868\u793A\u95DC\u9589\u8A72\u529F\u80FD\uFF1B\u91CD\u5553\u8A2D\u8A08\u5668\u5F8C\u751F\u6548 FR-Designer_Preference_CachingTemplateTip=\u8A2D\u5B9A\u70BA0\u8868\u793A\u95DC\u9589\u8A72\u529F\u80FD\uFF1B\u91CD\u5553\u8A2D\u8A08\u5668\u5F8C\u751F\u6548

29
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;
@ -41,6 +45,7 @@ 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.io.File;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@ -51,6 +56,11 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt
private CardLayout card; private CardLayout card;
private JPanel cardPane; private JPanel cardPane;
private java.util.List<FileToolbarStateChangeListener> otherToobarStateChangeListeners= new ArrayList<>();
public FileOperations getSelectedOperation() {
return selectedOperation;
}
private FileOperations selectedOperation; private FileOperations selectedOperation;
private UIToolbar toolBar; private UIToolbar toolBar;
@ -160,6 +170,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt
/** /**
* 响应数据集改变 * 响应数据集改变
*
* @param map 改变名字的数据集 * @param map 改变名字的数据集
*/ */
public void fireDSChanged(Map<String, String> map) { public void fireDSChanged(Map<String, String> map) {
@ -211,6 +222,21 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt
public void actionPerformed(ActionEvent evt) { public void actionPerformed(ActionEvent evt) {
selectedOperation.refresh(); selectedOperation.refresh();
stateChange(); stateChange();
}
}
public void addToobarStateChangeListener(FileToolbarStateChangeListener toobarStateChangeListener) {
this.otherToobarStateChangeListeners.add(toobarStateChangeListener);
}
public void removeToobarStateChangeListener(FileToolbarStateChangeListener toobarStateChangeListener) {
this.otherToobarStateChangeListeners.remove(toobarStateChangeListener);
}
private void otherStateChange() {
for (FileToolbarStateChangeListener toobarStateChangeListener : otherToobarStateChangeListeners) {
toobarStateChangeListener.stateChange();
} }
} }
@ -328,6 +354,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt
delFileAction.setEnabled(true); delFileAction.setEnabled(true);
} }
otherStateChange();
} }
/** /**

6
designer_base/src/com/fr/design/mainframe/JTemplate.java

@ -3,6 +3,7 @@ package com.fr.design.mainframe;
import com.fr.base.*; import com.fr.base.*;
import com.fr.base.io.IOFile; import com.fr.base.io.IOFile;
import com.fr.base.iofileattr.TemplateIdAttrMark; import com.fr.base.iofileattr.TemplateIdAttrMark;
import com.fr.base.vcs.DesignerMode;
import com.fr.design.DesignModelAdapter; import com.fr.design.DesignModelAdapter;
import com.fr.design.DesignState; import com.fr.design.DesignState;
import com.fr.design.DesignerEnvManager; import com.fr.design.DesignerEnvManager;
@ -29,6 +30,7 @@ import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.mainframe.templateinfo.TemplateInfoCollector; import com.fr.design.mainframe.templateinfo.TemplateInfoCollector;
import com.fr.design.mainframe.templateinfo.TemplateProcessInfo; import com.fr.design.mainframe.templateinfo.TemplateProcessInfo;
import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus;
import com.fr.design.mainframe.toolbar.VcsScene;
import com.fr.design.menu.MenuDef; import com.fr.design.menu.MenuDef;
import com.fr.design.menu.NameSeparator; import com.fr.design.menu.NameSeparator;
import com.fr.design.menu.ShortCut; import com.fr.design.menu.ShortCut;
@ -682,7 +684,9 @@ public abstract class JTemplate<T extends IOFile, U extends BaseUndoState<?>> ex
* @return 返回菜单 * @return 返回菜单
*/ */
public ShortCut[] shortcut4FileMenu() { public ShortCut[] shortcut4FileMenu() {
if (BaseUtils.isAuthorityEditing()) { if (DesignerMode.isVcsMode()) {
return VcsScene.shortcut4FileMenu(this);
} else if (BaseUtils.isAuthorityEditing()) {
return new ShortCut[]{new SaveTemplateAction(this), new UndoAction(this), new RedoAction(this)}; return new ShortCut[]{new SaveTemplateAction(this), new UndoAction(this), new RedoAction(this)};
} else { } else {
return new ShortCut[]{new SaveTemplateAction(this), new SaveAsTemplateAction(this), new UndoAction(this), new RedoAction(this)}; return new ShortCut[]{new SaveTemplateAction(this), new SaveAsTemplateAction(this), new UndoAction(this), new RedoAction(this)};

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

@ -5,6 +5,7 @@ package com.fr.design.mainframe.toolbar;
import com.fr.base.BaseUtils; import com.fr.base.BaseUtils;
import com.fr.base.FRContext; import com.fr.base.FRContext;
import com.fr.base.vcs.DesignerMode;
import com.fr.design.DesignState; import com.fr.design.DesignState;
import com.fr.design.ExtraDesignClassManager; import com.fr.design.ExtraDesignClassManager;
import com.fr.design.actions.UpdateAction; import com.fr.design.actions.UpdateAction;
@ -316,8 +317,13 @@ public abstract class ToolBarMenuDock {
} }
public MenuDef createFileMenuDef(ToolBarMenuDockPlus plus) { public MenuDef createFileMenuDef(ToolBarMenuDockPlus plus) {
MenuDef menuDef = new MenuDef(Inter.getLocText("FR-Designer_File"), 'F');
if (DesignerMode.isVcsMode()) {
MenuDef menuDef = VcsScene.createFileMenuDef(plus);
insertMenu(menuDef, MenuHandler.FILE);
return menuDef;
}
MenuDef menuDef = new MenuDef(Inter.getLocText("FR-Designer_File"), 'F');
ShortCut[] scs = new ShortCut[0]; ShortCut[] scs = new ShortCut[0];
if (!BaseUtils.isAuthorityEditing()) { if (!BaseUtils.isAuthorityEditing()) {
scs = createNewFileShortCuts(); scs = createNewFileShortCuts();

36
designer_base/src/com/fr/design/mainframe/toolbar/ToolBarNewTemplatePane.java

@ -0,0 +1,36 @@
package com.fr.design.mainframe.toolbar;
import com.fr.base.BaseUtils;
import com.fr.design.file.NewTemplatePane;
import javax.swing.*;
/**
* Created by hzzz on 2017/12/26.
*/
public class ToolBarNewTemplatePane extends NewTemplatePane {
private static final ToolBarNewTemplatePane instance = new ToolBarNewTemplatePane();
private ToolBarNewTemplatePane() {
}
public static NewTemplatePane getInstance() {
return instance;
}
@Override
public Icon getNew() {
return BaseUtils.readIcon("/com/fr/design/images/buttonicon/addicon.png");
}
@Override
public Icon getMouseOverNew() {
return BaseUtils.readIcon("/com/fr/design/images/buttonicon/add_press.png");
}
@Override
public Icon getMousePressNew() {
return BaseUtils.readIcon("/com/fr/design/images/buttonicon/add_press.png");
}
}

46
designer_base/src/com/fr/design/mainframe/toolbar/VcsScene.java

@ -0,0 +1,46 @@
package com.fr.design.mainframe.toolbar;
import com.fr.base.BaseUtils;
import com.fr.design.actions.edit.RedoAction;
import com.fr.design.actions.edit.UndoAction;
import com.fr.design.actions.file.ExitDesignerAction;
import com.fr.design.actions.file.PreferenceAction;
import com.fr.design.mainframe.JTemplate;
import com.fr.design.menu.MenuDef;
import com.fr.design.menu.SeparatorDef;
import com.fr.design.menu.ShortCut;
import com.fr.general.Inter;
import com.fr.stable.ArrayUtils;
/**
* Created by hzzz on 2017/12/28.
*/
public class VcsScene {
public static MenuDef createFileMenuDef(ToolBarMenuDockPlus plus) {
MenuDef menuDef = new MenuDef(Inter.getLocText("FR-Designer_File"), 'F');
ShortCut[] scs = new ShortCut[0];
if (!ArrayUtils.isEmpty(scs)) {
menuDef.addShortCut(scs);
}
scs = plus.shortcut4FileMenu();
if (!ArrayUtils.isEmpty(scs)) {
menuDef.addShortCut(SeparatorDef.DEFAULT);
menuDef.addShortCut(scs);
menuDef.addShortCut(SeparatorDef.DEFAULT);
}
if (!BaseUtils.isAuthorityEditing()) {
menuDef.addShortCut(new PreferenceAction());
}
menuDef.addShortCut(new ExitDesignerAction());
return menuDef;
}
public static ShortCut[] shortcut4FileMenu(JTemplate jTemplate) {
return new ShortCut[]{new UndoAction(jTemplate), new RedoAction(jTemplate)};
}
}

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

@ -29,7 +29,12 @@ import com.fr.file.CacheManager;
import com.fr.file.DatasourceManager; import com.fr.file.DatasourceManager;
import com.fr.file.DatasourceManagerProvider; import com.fr.file.DatasourceManagerProvider;
import com.fr.file.filetree.FileNode; import com.fr.file.filetree.FileNode;
import com.fr.general.*; import com.fr.general.ComparatorUtils;
import com.fr.general.FRLogger;
import com.fr.general.IOUtils;
import com.fr.general.Inter;
import com.fr.general.LogRecordTime;
import com.fr.general.LogUtils;
import com.fr.general.http.HttpClient; import com.fr.general.http.HttpClient;
import com.fr.json.JSONArray; import com.fr.json.JSONArray;
import com.fr.json.JSONException; import com.fr.json.JSONException;
@ -2077,7 +2082,6 @@ public class RemoteEnv extends AbstractEnv {
} }
@Override @Override
public String pluginServiceAction(String serviceID, String req) throws Exception { public String pluginServiceAction(String serviceID, String req) throws Exception {
HashMap<String, String> para = new HashMap<String, String>(); HashMap<String, String> para = new HashMap<String, String>();
@ -2092,11 +2096,13 @@ public class RemoteEnv extends AbstractEnv {
/** /**
* 远程不启动使用虚拟服务 * 远程不启动使用虚拟服务
*
* @param serviceID * @param serviceID
*/ */
@Override @Override
public void pluginServiceStart(String serviceID) { public void pluginServiceStart(String serviceID) {
} }
@Override @Override
public File[] loadREUFile() throws Exception { public File[] loadREUFile() throws Exception {
File target = new File(CacheManager.getProviderInstance().getCacheDirectory(), File target = new File(CacheManager.getProviderInstance().getCacheDirectory(),
@ -2246,4 +2252,14 @@ public class RemoteEnv extends AbstractEnv {
return JSONArray.create(); return JSONArray.create();
} }
} }
public String post(HashMap<String, String> para, boolean isSignIn) {
try {
HttpClient client = createHttpMethod(para, isSignIn);
return stream2String(execute4InputStream(client));
} catch (Exception e) {
FRContext.getLogger().error(e.getMessage());
return StringUtils.EMPTY;
}
}
} }

BIN
designer_chart/src/com/fr/design/images/us_emptydata.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
designer_chart/src/com/fr/design/images/zh_emptydata.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

1
designer_chart/src/com/fr/design/module/ChartDesignerModule.java

@ -53,6 +53,7 @@ public class ChartDesignerModule extends DesignModule {
DesignModuleFactory.registerChartPropertyPaneClass(ChartPropertyPane.class); DesignModuleFactory.registerChartPropertyPaneClass(ChartPropertyPane.class);
ActionFactory.registerChartPreStyleAction(new ChartPreStyleAction()); ActionFactory.registerChartPreStyleAction(new ChartPreStyleAction());
ActionFactory.registerChartEmptyDataStyleAction(new ChartEmptyDataStyleAction());
ActionFactory.registerChartMapEditorAction(new ChartMapEditorAction()); ActionFactory.registerChartMapEditorAction(new ChartMapEditorAction());
} }

46
designer_chart/src/com/fr/design/module/ChartEmptyDataStyleAction.java

@ -0,0 +1,46 @@
package com.fr.design.module;
import com.fr.design.actions.UpdateAction;
import com.fr.design.dialog.BasicDialog;
import com.fr.design.dialog.DialogActionAdapter;
import com.fr.design.mainframe.DesignerContext;
import com.fr.design.mainframe.DesignerFrame;
import com.fr.general.IOUtils;
import com.fr.general.Inter;
import java.awt.event.ActionEvent;
/**
* Created by mengao on 2017/11/23.
* 空数据配置action
*/
public class ChartEmptyDataStyleAction extends UpdateAction {
public ChartEmptyDataStyleAction() {
this.setSmallIcon(IOUtils.readIcon("com/fr/design/images/chart/EmptyChart.png"));
this.setName(Inter.getLocText("FR-Designer_Chart_Empty_Data"));
}
@Override
public void actionPerformed(ActionEvent e) {
DesignerFrame designerFrame = DesignerContext.getDesignerFrame();
final ChartEmptyDataStylePane pane = new ChartEmptyDataStylePane();
BasicDialog dialog = pane.showWindow(designerFrame);
dialog.addDialogActionListener(new DialogActionAdapter() {
@Override
public void doOk() {
pane.updateBean();
}
@Override
public void doCancel() {
//直接关闭弹出框
}
});
pane.populateBean();
dialog.setVisible(true);
}
}

237
designer_chart/src/com/fr/design/module/ChartEmptyDataStylePane.java

@ -0,0 +1,237 @@
package com.fr.design.module;
import com.fr.base.BaseUtils;
import com.fr.base.ChartEmptyDataStyleManagerProvider;
import com.fr.base.ChartEmptyDataStyleServerManager;
import com.fr.design.gui.frpane.AbstractAttrNoScrollPane;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.ibutton.UIButtonGroup;
import com.fr.design.gui.ibutton.UIRadioButton;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.mainframe.DesignerContext;
import com.fr.design.mainframe.DesignerFrame;
import com.fr.design.style.background.image.ImageFileChooser;
import com.fr.design.style.background.image.ImagePreviewPane;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.general.FRLogger;
import com.fr.general.GeneralContext;
import com.fr.general.IOUtils;
import com.fr.general.Inter;
import com.fr.stable.CoreGraphHelper;
import com.fr.stable.StringUtils;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.BorderFactory;
import javax.swing.JFileChooser;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ButtonGroup;
import java.awt.Image;
import java.awt.Dimension;
import java.awt.Component;
import java.awt.GridLayout;
/**
* Created by mengao on 2017/11/23.
*/
public class ChartEmptyDataStylePane extends AbstractAttrNoScrollPane {
private static final int WIDTH = 150;
private static final int HEIGHT = 20;
private static final int FIVE = 5;
private static final int TEN = 10;
private static final int THIRTY = 30;
private static Image DEFAULT_EMPTY_DATA_IMAGE;
private UIButtonGroup emptyData;
private UIRadioButton defaultRadioButton;
private UIRadioButton customRadioButton;
private UIButton selectPictureButton;
private ImagePreviewPane previewPane;
private ImageFileChooser imageFileChooser;
private Image emptyDataImage = DEFAULT_EMPTY_DATA_IMAGE;
static {
DEFAULT_EMPTY_DATA_IMAGE = GeneralContext.isChineseEnv() ? IOUtils.readImage("com/fr/design/images/zh_emptydata.png")
: IOUtils.readImage("com/fr/design/images/us_emptydata.png");
}
@Override
protected JPanel createContentPane() {
JPanel content = new JPanel(new BorderLayout());
content.add(creatNorthPane(), BorderLayout.NORTH);
content.add(creatCenterPane(), BorderLayout.CENTER);
return content;
}
private JPanel creatNorthPane() {
emptyData = new UIButtonGroup(new String[]{Inter.getLocText("Plugin-ChartF_Open"), Inter.getLocText("Plugin-ChartF_Close")});
emptyData.setSelectedIndex(0);
emptyData.setPreferredSize(new Dimension(WIDTH, HEIGHT));
emptyData.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
checkEmptyDataStyle();
repaintPreviewPane();
}
});
UILabel promptContent = new UILabel(Inter.getLocText("FR-Designer_Tip_Content"));
JPanel northPane = GUICoreUtils.createFlowPane(new Component[]{promptContent, emptyData}, FlowLayout.LEFT, TEN, 0);
northPane.setBorder(BorderFactory.createEmptyBorder(0, FIVE, 0, 0));
return northPane;
}
private JPanel creatCenterPane() {
JPanel centerPane = new JPanel(FRGUIPaneFactory.createBorderLayout());
// preview pane
JPanel previewContainerPane = FRGUIPaneFactory.createBorderLayout_L_Pane();
centerPane.add(previewContainerPane, BorderLayout.CENTER);
JPanel previewOwnerPane = FRGUIPaneFactory.createTitledBorderPane(Inter.getLocText("FR-Designer_Preview"));
previewOwnerPane.setLayout(new BorderLayout());
previewContainerPane.add(previewOwnerPane, BorderLayout.CENTER);
previewContainerPane.add(initSelectFilePane(), BorderLayout.EAST);
previewPane = new ImagePreviewPane();
previewOwnerPane.add(new JScrollPane(previewPane));
// init image file chooser.
imageFileChooser = new ImageFileChooser();
imageFileChooser.setMultiSelectionEnabled(false);
return centerPane;
}
public JPanel initSelectFilePane() {
JPanel selectFilePane = FRGUIPaneFactory.createBorderLayout_L_Pane();
selectFilePane.setBorder(BorderFactory.createEmptyBorder(TEN, FIVE, 0, THIRTY));
defaultRadioButton = new UIRadioButton(Inter.getLocText("FR-Designer_DEFAULT"));
customRadioButton = new UIRadioButton(Inter.getLocText("FR-Designer-Widget-Style_Custom"));
ButtonGroup buttonGroup = new ButtonGroup();
defaultRadioButton.setSelected(true);
buttonGroup.add(defaultRadioButton);
buttonGroup.add(customRadioButton);
defaultRadioButton.addActionListener(getLayoutActionListener());
customRadioButton.addActionListener(getLayoutActionListener());
JPanel jp = new JPanel(new GridLayout(3, 1, 0, TEN));
jp.add(defaultRadioButton);
jp.add(customRadioButton);
selectPictureButton = new UIButton(
Inter.getLocText("FR-Designer_Background_Image_Select"));
selectPictureButton.addActionListener(getSelectPictureActionListener());
jp.add(selectPictureButton);
selectFilePane.add(jp, BorderLayout.NORTH);
return selectFilePane;
}
private ActionListener getLayoutActionListener() {
return new ActionListener() {
public void actionPerformed(ActionEvent evt) {
emptyDataImage = null;
checkCustomImage();
repaintPreviewPane();
}
};
}
/**
* Select picture.
*/
private ActionListener getSelectPictureActionListener() {
return new ActionListener() {
public void actionPerformed(ActionEvent evt) {
int returnVal = imageFileChooser.showOpenDialog(ChartEmptyDataStylePane.this);
if (returnVal != JFileChooser.CANCEL_OPTION) {
File selectedFile = imageFileChooser.getSelectedFile();
if (selectedFile != null && selectedFile.isFile()) {
emptyDataImage = BaseUtils.readImage(selectedFile.getPath());
CoreGraphHelper.waitForImage(emptyDataImage);
repaintPreviewPane();
} else {
previewPane.setImage(null);
}
}
}
};
}
private void checkEmptyDataStyle() {
boolean b = emptyData.getSelectedIndex() == 0;
defaultRadioButton.setEnabled(b);
customRadioButton.setEnabled(b);
selectPictureButton.setEnabled(b);
}
private void checkCustomImage() {
selectPictureButton.setVisible(customRadioButton.isSelected());
}
private void repaintPreviewPane() {
emptyDataImage = customRadioButton.isSelected() ? emptyDataImage : DEFAULT_EMPTY_DATA_IMAGE;
previewPane.setImage(emptyData.getSelectedIndex() == 0 ? emptyDataImage : null);
previewPane.repaint();
}
@Override
public String getIconPath() {
return StringUtils.EMPTY;
}
@Override
public String title4PopupWindow() {
return Inter.getLocText("FR-Designer_Chart_Empty_Data");
}
public void populateBean() {
ChartEmptyDataStyleManagerProvider manager = ChartEmptyDataStyleServerManager.getProviderInstance();
emptyData.setSelectedIndex(manager.isOpenEmptyDataStyle() == true ? 0 : 1);
customRadioButton.setSelected(manager.isCustomEmptyDataStyle());
emptyDataImage = manager.getEmptyDataImage();
checkEmptyDataStyle();
checkCustomImage();
repaintPreviewPane();
}
public void updateBean() {
ChartEmptyDataStyleManagerProvider manager = ChartEmptyDataStyleServerManager.getProviderInstance();
manager.setOpenEmptyDataStyle(emptyData.getSelectedIndex() == 0);
manager.setCustomEmptyDataStyle(customRadioButton.isSelected());
manager.setEmptyDataImage(emptyDataImage);
try {
manager.writeResource();
} catch (Exception e) {
FRLogger.getLogger().error(e.getMessage());
}
// 通知报表整个刷新.
DesignerFrame frame = DesignerContext.getDesignerFrame();
if (frame != null) {
frame.repaint();
}
}
}
Loading…
Cancel
Save